nx_tools_api.nx
buildroot/runtime/nx_tools_api.nx
about
nx_tools_api.nx -- R0 of the sovereign AGENT-FACING API: expose the nx_tool_registry over HTTP.
TWO surfaces from ONE registry (the ecosystem's capability SSOT), benchmark = MCP, and BEYOND it:
GET /api/tools -> {"tools":[{name,description,invoke,status}]} -- SUPERSET: every tool advertises its
gate-`status` (proven/not), a provenance field MCP's tools/list has no concept of.
POST /mcp -> JSON-RPC 2.0 (initialize + tools/list) -- MCP-COMPATIBLE so ANY MCP client (Claude
included) discovers Nishi's tools with zero adapter.
PURE FUNCTION ta_handle_pfx(prefix, req, req_n, out) -> out_n (bytes in, bytes out, NO socket) so the gate
drives it in-process (nx_tools_api_gate), exactly like ma_handle. Composes nx_tool_registry (data) + nx_tabrec
(tr_field, transitive). No new transport -- wired behind the sovereign edge at deploy. license_tier: ORIGINAL
dependencies 5 imports · 8 importers
imports: nx_tool_registry.nxnx_cap_token.nxnx_tool_exec_allow.nxnx_tool_http_backend.nxsha256.nx
imported by: nx_api_edge.nxnx_cap_grant_e2e_gate.nxnx_cap_invoke_gate.nxnx_cap_issue_gate.nxnx_cap_revoke_gate.nxnx_redteam.nxnx_tools_api_exec_gate.nxnx_tools_api_gate.nx
structs
| none |
consts
| 15 | const TA_MAGIC_65536: i64 = 65536 |
| 20 | const TA_CAPTURE_CAP: i64 = 163840 |
| 21 | const TA_MAGIC_8192: i64 = 8192 |
| 22 | const TA_MAGIC_1048576: i64 = 1048576 |
| 23 | const TA_MAGIC_9999999999: i64 = 9999999999 |
| 24 | const TA_MAGIC_2048: i64 = 2048 |
| 25 | const TA_MAGIC_4096: i64 = 4096 |
| 26 | const TA_MAGIC_1469598: i64 = 1469598 |
| 27 | const TA_MAGIC_16384: i64 = 16384 |
| 28 | const TA_MAGIC_4294967295: i64 = 4294967295 |
| 29 | const TA_MAGIC_3600: i64 = 3600 |
| 30 | const TA_MAGIC_88161: i64 = 88161 |
| 32 | const TA_TOOLPFX: *u8 = "knowledge/toolreg-" as *u8 // production registry prefix (mirrors TOOL_PREFIX) |
| 33 | const TA_MCP_PAGE: i64 = 64 // MCP tools/list page size (cursor pagination); clients walk nextCursor. |
| 37 | const TA_ALL_LIMIT: i64 = 100000 // /api/tools emits ALL tools (effectively-unbounded page) |
| 40 | const TA_CAP_SECRET: *u8 = "nishi-tools-cap-hmac-secret-v1-REPLACE-FROM-VAULT" as *u8 |
| 44 | const TA_CAP_KEYFILE: *u8 = "tools_cap_secret.key" as *u8 |
| 337 | const TA_SCHEMACONF: *u8 = "knowledge/tool_schemas.conf" as *u8 // server CWD-relative (like tool_allowlist.conf) |
| 609 | const TA_REVOKED_LIST: *u8 = "cap_revoked.list" as *u8 // newline-separated decimal nonces, relative to the server CWD |
| 1078 | const TA_CONSENT_LOG: *u8 = "cap_consent.log" as *u8 |
| 1204 | const OC_SLOTS: i64 = 256 |
functions
| 47 | func ta_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } |
| 48 | func ta_cat(d: *u8, o: i64, s: *u8) -> i64 { var i: i64 = 0; while s[i] != (0 as u8) { d[o + i] = s[i]; i = i + 1 } return o + i } |
| 68 | func ta_job_put(path: *u8, buf: *u8, n: i64) -> i64 |
| 79 | func ta_catb(d: *u8, o: i64, s: *u8, n: i64) -> i64 { var i: i64 = 0; while i < n { d[o + i] = s[i]; i = i + 1 } return o + n } |
| 80 | func ta_catn(d: *u8, o: i64, v: i64) -> i64 |
| 88 | func ta_actlog(tool: *u8, tlen: i64, lane: *u8, status: *u8, ec: i64, bytes: i64) -> i64 |
| 114 | func ta_put1(d: *u8, o: i64, a: i64) -> i64 { d[o] = a as u8; return o + 1 } called by 1: ta_json_esc |
| 115 | func ta_put2(d: *u8, o: i64, a: i64, b: i64) -> i64 { d[o] = a as u8; d[o + 1] = b as u8; return o + 2 } called by 1: ta_json_esc |
| 116 | func ta_hexd(v: i64) -> i64 { if v < 10 { return 48 + v } return 87 + v } // 0-9 then a-f called by 1: ta_json_esc |
| 122 | func ta_load_cap_secret_from(keyfile: *u8, outlen: *i64) -> *u8 |
| 130 | func ta_load_cap_secret(outlen: *i64) -> *u8 { return ta_load_cap_secret_from(TA_CAP_KEYFILE, outlen) } called by 7: mainta_mcp_callta_cap_issueta_cap_revoketa_oauth_authorizeta_oauth_approve+1 calls 1: ta_load_cap_secret_from |
| 135 | func ta_cap_provisioned_from(keyfile: *u8) -> i64 |
| 145 | func ta_cap_provisioned() -> i64 { return ta_cap_provisioned_from(TA_CAP_KEYFILE) } |
| 148 | func ta_streq_n(a: *u8, an: i64, b: *u8) -> i64 |
| 157 | func ta_json_esc(d: *u8, o: i64, s: *u8, n: i64) -> i64 |
| 176 | func ta_indexof(hay: *u8, hn: i64, needle: *u8) -> i64 |
| 191 | func ta_body_off(req: *u8, req_n: i64) -> i64 |
| 200 | func ta_reqline(req: *u8, req_n: i64, mo: *i64, po: *i64) -> i64 |
| 217 | func ta_json_str(body: *u8, n: i64, keyq: *u8, out2: *i64) -> i64 called by 7: ig_extractta_mcp_callta_mcp_resreadta_mcp_promgetta_mcpta_cap_issue+1 calls 2: ta_indexofta_slen |
| 232 | func ta_json_raw(body: *u8, n: i64, keyq: *u8, out2: *i64) -> i64 |
| 259 | func ta_json_str_array(body: *u8, n: i64, keyq: *u8, out: *i64, base: i64, maxn: i64, scratch: *u8, scap: i64) -> i64 |
| 317 | func ta_emit(out: *u8, status: *u8, body: *u8, body_n: i64) -> i64 called by 6: ta_emit_litta_toolsta_mcpta_cap_consent_logta_cap_issueta_cap_revoke calls 3: ta_catta_catnta_catb |
| 325 | func ta_emit_lit(out: *u8, status: *u8, lit: *u8) -> i64 { return ta_emit(out, status, lit, ta_slen(lit)) } called by 7: ta_indexta_cap_issueta_cap_revoketa_cap_statusta_oauth_prmta_oauth_approve+1 calls 2: ta_emitta_slen |
| 339 | func ta_bool_json(v: i64) -> *u8 { if v == 1 { return "true" as *u8 } return "false" as *u8 } called by 1: ta_emit_mcp_schema_buf |
| 342 | func ta_tsv_field(buf: *u8, ls: i64, le: i64, idx: i64, out2: *i64) -> i64 called by 1: ta_emit_mcp_schema_buf |
| 362 | func ta_emit_mcp_schema_from(conf: *u8, name: *u8, nlen: i64, body: *u8, bin: i64) -> i64 |
| 372 | func ta_emit_mcp_schema_buf(buf: *u8, bufn: i64, name: *u8, nlen: i64, body: *u8, bin: i64) -> i64 called by 2: ta_emit_mcp_schema_fromta_emit_tools calls 4: ta_tsv_fieldta_catta_json_escta_bool_json |
| 442 | func ta_emit_mcp_schema(name: *u8, nlen: i64, body: *u8, bin: i64) -> i64 { return ta_emit_mcp_schema_from(TA_SCHEMACONF, name, nlen, body, bin) } calls 1: ta_emit_mcp_schema_from |
| 445 | func ta_emit_field(body: *u8, b: i64, rec: *u8, rl: i64, idx: i64) -> i64 |
| 450 | func ta_emit_tools(prefix: *u8, body: *u8, bin: i64, mcp: i64, offset: i64, limit: i64, out_more: *i64) -> i64 |
| 510 | func ta_index(out: *u8) -> i64 |
| 514 | func ta_emit_page(out: *u8, html: *u8, n: i64) -> i64 |
| 524 | func ta_html_tools(out: *u8) -> i64 |
| 533 | func ta_tools(prefix: *u8, out: *u8) -> i64 |
| 542 | func ta_header(req: *u8, req_n: i64, key: *u8, out2: *i64) -> i64 |
| 571 | func ta_query_cap(req: *u8, req_n: i64, out2: *i64) -> i64 |
| 601 | func ta_query_cap_available() -> i64 called by 1: main |
| 610 | func ta_openat_append(path: *u8) -> i64 { return __syscall(257, AT_FDCWD, path, 0x441, 0x1a4, 0, 0) } // O_WRONLY|O_CREAT|O_APPEND, 0644 |
| 611 | func ta_nonce_revoked(nonce: i64) -> i64 |
| 630 | func ta_append_revoked(nonce: i64) -> i64 |
| 642 | func ta_name_in_lines(buf: *u8, n: i64, nm: *u8, nl: i64) -> i64 called by 1: ta_mcp_call |
| 660 | func ta_mcp_call(prefix: *u8, req: *u8, req_n: i64, body: *u8, bn: i64, jb: *u8, bin: i64) -> i64 called by 1: ta_mcp calls 23: ta_json_strta_catta_load_cap_secretta_headerta_query_capcapt_verify+17 |
| 961 | func ta_mcp_resread(body: *u8, bn: i64, jb: *u8, b0: i64) -> i64 |
| 990 | func ta_mcp_promget(body: *u8, bn: i64, jb: *u8, b0: i64) -> i64 |
| 1017 | func ta_mcp(prefix: *u8, req: *u8, req_n: i64, out: *u8) -> i64 |
| 1079 | func ta_append_consent(client: *u8, cl: i64, allowp: *u8, allowl: i64, exp: i64, pnonce: i64, cnonce: i64) -> i64 |
| 1100 | func ta_cap_consent_log(out: *u8) -> i64 called by 1: ta_handle_pfx calls 12: ta_body_offta_load_cap_secretta_headerta_json_strta_emit_litta_json_raw+6 |
| 1109 | func ta_cap_issue(req: *u8, req_n: i64, out: *u8) -> i64 |
| 1155 | func ta_cap_revoke(req: *u8, req_n: i64, out: *u8) -> i64 |
| 1184 | func ta_cap_status(out: *u8) -> i64 |
| 1194 | func ta_oauth_prm(out: *u8) -> i64 |
| 1209 | func oauth_state_init() -> i64 |
| 1218 | func oauth_slotv(h: i64, slots: i64) -> i64 { var x: i64 = h; if x < 0 { x = 0 - x } return x - (x / slots) * slots } |
| 1219 | func oauth_strhash(s: *u8, n: i64) -> i64 { var h: i64 = TA_MAGIC_1469598; var i: i64 = 0; while i < n { h = h * 31 + (s[i] as i64); i = i + 1 } if h == 0 { h = 1 } return h } |
| 1221 | func oauth_param(src: *u8, slen: i64, key: *u8, klen: i64, out2: *i64) -> i64 |
| 1244 | func oauth_hexv(c: i64) -> i64 { if c >= 48 { if c <= 57 { return c - 48 } } if c >= 65 { if c <= 70 { return c - 55 } } if c >= 97 { if c <= 102 { return c - 87 } } return 0 } |
| 1245 | func oauth_urldec(src: *u8, n: i64, dst: *u8) -> i64 |
| 1256 | func oauth_b64url(inb: *u8, n: i64, out: *u8) -> i64 |
| 1280 | func oauth_resp(out: *u8, status: *u8, ctype: *u8, body: *u8, blen: i64) -> i64 |
| 1292 | func ta_oauth_asmeta(out: *u8) -> i64 |
| 1298 | func ta_oauth_register(req: *u8, req_n: i64, out: *u8) -> i64 |
| 1320 | func ta_oauth_authorize(req: *u8, req_n: i64, out: *u8) -> i64 |
| 1365 | func ta_oauth_approve(req: *u8, req_n: i64, out: *u8) -> i64 |
| 1422 | func ta_oauth_token(req: *u8, req_n: i64, out: *u8) -> i64 |
| 1478 | func ta_handle_pfx(prefix: *u8, req: *u8, req_n: i64, out: *u8) -> i64 |
| 1510 | func ta_handle(req: *u8, req_n: i64, out: *u8) -> i64 { return ta_handle_pfx(TA_TOOLPFX, req, req_n, out) } |