nx_tools_api.nx
buildroot/runtime/nx_tools_api.nx
about
dependencies 9 imports · 21 importers
diagram shows first 10 each side; +0 more imports, +11 more importers in the complete lists below.
imports: nx_jobclaim_lib.nxnx_mcp_envelope.nxnx_json_lib.nxnx_tool_registry.nxnx_cap_token.nxnx_tool_exec_allow.nxnx_tool_http_backend.nxsha256.nxnx_toolcall_idem_lib.nx
imported by: nx_actlog_writer_gate.nxnx_api_edge.nxnx_cap_grant_e2e_gate.nxnx_cap_invoke_gate.nxnx_cap_issue_gate.nxnx_cap_revoke_gate.nxnx_catn_kat_gate.nxnx_id_handler_canonical_gate_t190.nxnx_job_handler_canonical_gate_t182.nxnx_job_put_error_gate.nxnx_job_reservation_repro_t182.nxnx_mcp_body_gate.nxnx_mcp_http_envelope_gate.nxnx_redteam.nxnx_tools_api_exec_gate.nxnx_tools_api_gate.nxnx_tools_argv_idem_gate.nxnx_tools_argv_unicode_gate.nxnx_tools_denial_observation_candidate_t316.nxnx_tools_guidance_gate_t140.nxnx_tools_timing_gate.nx
structs
| none |
consts
| 20 | const TA_MAGIC_65536: i64 = 65536 |
| 25 | const TA_CAPTURE_CAP: i64 = 163840 |
| 26 | const TA_MAGIC_8192: i64 = 8192 |
| 27 | const TA_MAGIC_1048576: i64 = 1048576 |
| 28 | const TA_MAGIC_9999999999: i64 = 9999999999 |
| 29 | const TA_MAGIC_2048: i64 = 2048 |
| 30 | const TA_MAGIC_4096: i64 = 4096 |
| 31 | const TA_MAGIC_1469598: i64 = 1469598 |
| 32 | const TA_MAGIC_16384: i64 = 16384 |
| 33 | const TA_MAGIC_4294967295: i64 = 4294967295 |
| 34 | const TA_MAGIC_3600: i64 = 3600 |
| 35 | const TA_MAGIC_88161: i64 = 88161 |
| 37 | const TA_TOOLPFX: *u8 = "knowledge/toolreg-" as *u8 // production registry prefix (mirrors TOOL_PREFIX) |
| 38 | const TA_MCP_PAGE: i64 = 64 // MCP tools/list page size (cursor pagination); clients walk nextCursor. |
| 42 | const TA_ALL_LIMIT: i64 = 100000 // /api/tools emits ALL tools (effectively-unbounded page) |
| 45 | const TA_CAP_SECRET: *u8 = "nishi-tools-cap-hmac-secret-v1-REPLACE-FROM-VAULT" as *u8 |
| 49 | const TA_CAP_KEYFILE: *u8 = "tools_cap_secret.key" as *u8 |
| 141 | const TA_LOG_I64_WIDTH: i64 = 20 |
| 142 | const TA_LOG_I64_MAX: i64 = 9223372036854775807 |
| 262 | const TA_CAPMODE_SLOTS: i64 = 16 |
| 263 | const TA_CAPMODE_UNSEEN: i64 = 0 |
| 264 | const TA_CAPMODE_PROV: i64 = 1 |
| 265 | const TA_CAPMODE_PLACE: i64 = 2 |
| 266 | const TA_CAPMODE_MODE: i64 = 420 |
| 267 | const TA_CAPMODE_LINE: i64 = 512 |
| 268 | const TA_CAPMODE_JRNL: *u8 = "knowledge/status/capmode.jrnl" as *u8 |
| 498 | const TA_MANIFEST_READ: i64 = 4096 // the seg store caps a manifest at 256 segment names; a read that FILLS this is unknown, not silent |
| 499 | const TA_GEN_HASH_MUL: i64 = 131 // a rolling hash over the manifest bytes: any change in the segment list moves it |
| 500 | const TA_GEN_HASH_MOD: i64 = 1000000007 |
| 556 | const TA_SCHEMACONF: *u8 = "knowledge/tool_schemas.conf" as *u8 // server CWD-relative (like tool_allowlist.conf) |
| 560 | const TA_GRAMMARCONF: *u8 = "knowledge/tool_grammar.conf" as *u8 |
| 565 | const TA_FLAGSCONF: *u8 = "knowledge/tool_flags.conf" as *u8 |
| 568 | const TA_SYS_OPENAT: i64 = 257 |
| 569 | const TA_AT_FDCWD: i64 = 0 - 100 |
| 570 | const TA_OEXCL: i64 = 193 // O_CREAT(0x40)|O_EXCL(0x80)|O_WRONLY(0x1) |
| 571 | const TA_CLAIMMODE: i64 = 420 // 0644 |
| 891 | const TA_RANK_DIR: *u8 = "knowledge/status/toolrank-" as *u8 |
| 892 | const TA_RANK_EXT: *u8 = ".tsv" as *u8 |
| 1202 | const TA_REVOKED_LIST: *u8 = "cap_revoked.list" as *u8 // newline-separated decimal nonces, relative to the server CWD |
| 1329 | const TA_REPLY_MS_UNOBSERVED: i64 = 0 - 1 // inline path: the reply has not been written when the row is stamped |
| 1434 | const TT_UNKNOWN: i64 = 0-1 |
| 1435 | const TT_I64_MAX: i64 = 9223372036854775807 |
| 1436 | const TT_US_PER_SEC: i64 = 1000000 |
| 1437 | const TT_NS_PER_US: i64 = 1000 |
| 1438 | const TT_NS_PER_SEC: i64 = 1000000000 |
| 1439 | const TT_I64_WIDTH: i64 = 20 |
| 2211 | const TA_CONSENT_LOG: *u8 = "cap_consent.log" as *u8 |
| 2337 | const OC_SLOTS: i64 = 256 |
functions
| 52 | func ta_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } |
| 53 | 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 } |
| 73 | func ta_job_put(path: *u8, buf: *u8, n: i64) -> i64 |
| 95 | func ta_job_publish(output_path: *u8, output: *u8, output_n: i64, temp_path: *u8, marker: *u8, marker_n: i64, claim_path: *u8) -> i64 |
| 103 | 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 } |
| 104 | func ta_catn(d: *u8, o: i64, v: i64) -> i64 |
| 143 | func ta_log_size_add(a: i64, b: i64) -> i64 |
| 150 | func ta_journal_write_fd(fd: i64, row: *u8, n: i64) -> i64 |
| 162 | func ta_journal_append(path: *u8, row: *u8, n: i64) -> i64 |
| 176 | func ta_actlog_x_to(path: *u8, tool: *u8, tlen: i64, lane: *u8, status: *u8, ec: i64, bytes: i64, dur_ms: i64, extra: *u8) -> i64 |
| 210 | func ta_actlog_x(tool: *u8, tlen: i64, lane: *u8, status: *u8, ec: i64, bytes: i64, dur_ms: i64, extra: *u8) -> i64 |
| 213 | func ta_actlog(tool: *u8, tlen: i64, lane: *u8, status: *u8, ec: i64, bytes: i64, dur_ms: i64) -> i64 |
| 217 | func ta_put1(d: *u8, o: i64, a: i64) -> i64 { d[o] = a as u8; return o + 1 } called by 1: ta_json_esc |
| 218 | 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 |
| 219 | 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 |
| 225 | func ta_load_cap_secret_from(keyfile: *u8, outlen: *i64) -> *u8 |
| 270 | func ta_capmode_announce(mode: i64) -> i64 |
| 309 | func ta_load_cap_secret(outlen: *i64) -> *u8 |
| 322 | func ta_cap_provisioned_from(keyfile: *u8) -> i64 |
| 332 | func ta_cap_provisioned() -> i64 { return ta_cap_provisioned_from(TA_CAP_KEYFILE) } |
| 335 | func ta_streq_n(a: *u8, an: i64, b: *u8) -> i64 |
| 344 | func ta_json_esc(d: *u8, o: i64, s: *u8, n: i64) -> i64 |
| 363 | func ta_indexof(hay: *u8, hn: i64, needle: *u8) -> i64 |
| 378 | func ta_body_off(req: *u8, req_n: i64) -> i64 |
| 387 | func ta_reqline(req: *u8, req_n: i64, mo: *i64, po: *i64) -> i64 |
| 404 | func ta_json_str(body: *u8, n: i64, keyq: *u8, out2: *i64) -> i64 called by 7: ig_extractta_idempotency_keyta_mcp_callta_mcp_resreadta_mcp_promgetta_cap_issue+1 calls 2: ta_indexofta_slen |
| 419 | func ta_json_raw(body: *u8, n: i64, keyq: *u8, out2: *i64) -> i64 |
| 447 | func ta_json_str_array(body: *u8, n: i64, keyq: *u8, out: *i64, base: i64, maxn: i64, scratch: *u8, scap: i64) -> i64 |
| 480 | 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 |
| 488 | func ta_emit_lit(out: *u8, status: *u8, lit: *u8) -> i64 { return ta_emit(out, status, lit, ta_slen(lit)) } called by 8: ta_indexta_mcpta_cap_issueta_cap_revoketa_cap_statusta_oauth_prm+2 calls 2: ta_emitta_slen |
| 502 | func ta_reg_gen(prefix: *u8) -> i64 |
| 519 | func ta_accepts_sse(req: *u8, req_n: i64) -> i64 |
| 534 | func ta_emit_sse_listchanged(out: *u8, body: *u8, body_n: i64) -> i64 |
| 573 | 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_buf2 |
| 576 | func ta_tsv_field(buf: *u8, ls: i64, le: i64, idx: i64, out2: *i64) -> i64 |
| 596 | func ta_emit_mcp_schema_from(conf: *u8, name: *u8, nlen: i64, body: *u8, bin: i64) -> i64 |
| 610 | func ta_grammar_lookup(gbuf: *u8, gbn: i64, name: *u8, nlen: i64, out2: *i64) -> i64 |
| 643 | func ta_od_has(buf: *u8, od_s: i64, od_l: i64, needle: *u8) -> i64 |
| 664 | func ta_od_is_regstub(buf: *u8, od_s: i64, od_l: i64) -> i64 |
| 671 | func ta_flags_lookup(fbuf: *u8, fbn: i64, name: *u8, nlen: i64, out4: *i64) -> i64 |
| 707 | func ta_emit_mcp_schema_buf2(buf: *u8, bufn: i64, gbuf: *u8, gbn: i64, fbuf: *u8, fbn: i64, name: *u8, nlen: i64, body: *u8, bin: i64) -> i64 |
| 804 | func ta_emit_mcp_schema_buf(buf: *u8, bufn: i64, name: *u8, nlen: i64, body: *u8, bin: i64) -> i64 |
| 807 | 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 |
| 810 | func ta_emit_field(body: *u8, b: i64, rec: *u8, rl: i64, idx: i64) -> i64 |
| 825 | func ta_desc_is_stub(rec: *u8, rl: i64, name: *u8, nlen: i64) -> i64 |
| 842 | func ta_schema_title_buf(buf: *u8, bufn: i64, name: *u8, nlen: i64, out2: *i64) -> i64 |
| 895 | func ta_rank_path(prefix: *u8, out: *u8) -> i64 |
| 910 | func ta_rank_calls(rb: *u8, rn: i64, name: *u8, nlen: i64) -> i64 called by 1: ta_emit_tools |
| 942 | func ta_cap_grants(capp: *u8, capn: i64, name: *u8, nlen: i64) -> i64 called by 1: ta_emit_tools |
| 961 | func ta_emit_tools(prefix: *u8, body: *u8, bin: i64, mcp: i64, offset: i64, limit: i64, out_more: *i64, capp: *u8, capn: i64) -> i64 called by 2: ta_toolsta_mcp calls 11: tool_list_pfxta_rank_pathta_cap_grantsta_rank_callstool_get_pfxta_cat+5 |
| 1103 | func ta_index(out: *u8) -> i64 |
| 1107 | func ta_emit_page(out: *u8, html: *u8, n: i64) -> i64 |
| 1117 | func ta_html_tools(out: *u8) -> i64 |
| 1126 | func ta_tools(prefix: *u8, out: *u8) -> i64 |
| 1135 | func ta_header(req: *u8, req_n: i64, key: *u8, out2: *i64) -> i64 called by 4: ta_accepts_sseta_mcp_callta_cap_issueta_cap_revoke calls 3: ta_body_offta_indexofta_slen |
| 1164 | func ta_query_cap(req: *u8, req_n: i64, out2: *i64) -> i64 |
| 1194 | func ta_query_cap_available() -> i64 called by 1: main |
| 1203 | func ta_openat_append(path: *u8) -> i64 { return __syscall(257, AT_FDCWD, path, 0x441, 0x1a4, 0, 0) } // O_WRONLY|O_CREAT|O_APPEND, 0644 |
| 1204 | func ta_nonce_revoked(nonce: i64) -> i64 |
| 1223 | func ta_append_revoked(nonce: i64) -> i64 |
| 1235 | func ta_name_in_lines(buf: *u8, n: i64, nm: *u8, nl: i64) -> i64 called by 1: ta_async_match |
| 1266 | func ta_async_match(buf: *u8, n: i64, nm: *u8, nl: i64, av: *i64, ac: i64) -> i64 |
| 1331 | func ta_defer_enable() -> i64 { ta_defer_ok = 1; return 0 } |
| 1332 | func ta_promote_pending() -> i64 { return ta_pp_pending } |
| 1335 | func ta_promote_bookkeep(nmp: *u8, nml: i64, jidp: i64, jpathp: *u8, joutp: *u8, jtmpp: *u8, xout: *u8, precap: i64, wrfd0: i64, t0: i64, reply_ms: i64) -> i64 called by 2: ta_promote_finishta_mcp_call calls 7: ta_timing_now_usta_catta_catnta_job_publishta_timing_emitta_actlog+1 |
| 1411 | func ta_async_pending() -> i64 { return ta_ap_pending } |
| 1412 | func ta_async_finish() -> i64 calls 1: ta_actlog |
| 1423 | func ta_promote_finish() -> i64 calls 1: ta_promote_bookkeep |
| 1460 | func ta_timing_now_us() -> i64 |
| 1472 | func ta_timing_elapsed(begin: i64, end: i64) -> i64 |
| 1477 | func ta_timing_field_ok(s: *u8, n: i64) -> i64 |
| 1486 | func ta_timing_emit_to(path: *u8, tool: *u8, tlen: i64, lane: *u8, phase: *u8, job: i64, begin: i64, end: i64, code: i64, bytes: i64) -> i64 called by 3: ta_timing_emitta_denial_observe_tomain calls 8: ta_timing_field_okta_slenta_log_size_addta_catnta_catta_catb+2 |
| 1541 | func ta_timing_emit(tool: *u8, tlen: i64, lane: *u8, phase: *u8, job: i64, begin: i64, end: i64, code: i64, bytes: i64) -> i64 |
| 1544 | func ta_timing_begin() -> i64 |
| 1553 | func ta_timing_bind(tool: *u8, n: i64) -> i64 { tt_tool = tool; tt_tool_n = n; return 0 } |
| 1554 | func ta_timing_read_done() -> i64 { tt_read_end = ta_timing_now_us(); return 0 } calls 1: ta_timing_now_us |
| 1555 | func ta_timing_handle_begin() -> i64 { tt_handle_begin = ta_timing_now_us(); return 0 } calls 1: ta_timing_now_us |
| 1556 | func ta_timing_handle_done() -> i64 { tt_handle_end = ta_timing_now_us(); return 0 } calls 1: ta_timing_now_us |
| 1557 | func ta_timing_write_begin() -> i64 { tt_write_begin = ta_timing_now_us(); return 0 } calls 1: ta_timing_now_us |
| 1558 | func ta_timing_runner(begin: i64, end: i64, code: i64, bytes: i64) -> i64 called by 1: ta_mcp_call |
| 1562 | func ta_timing_reply_prepare(code: i64) -> i64 calls 1: ta_timing_now_us |
| 1568 | func ta_timing_reply_log(bytes: i64) -> i64 calls 1: ta_timing_emit |
| 1587 | func ta_idempotency_key(body: *u8, bn: i64, out2: *i64) -> i64 { return ta_json_str(body, bn, "\"_idem\"" as *u8, out2) } |
| 1590 | func ta_cap_deny(jb:*u8,b0:i64,tool:*u8,tool_n:i64,granted:i64,presenter_count:i64)->i64 |
| 1619 | func ta_mcp_call(prefix: *u8, req: *u8, req_n: i64, body: *u8, bn: i64, jb: *u8, bin: i64) -> i64 called by 2: ta_mcptai_call calls 39: ta_json_strta_catta_load_cap_secretta_headerta_query_capcapt_verify+33 |
| 2088 | func ta_mcp_resread(body: *u8, bn: i64, jb: *u8, b0: i64) -> i64 |
| 2117 | func ta_mcp_promget(body: *u8, bn: i64, jb: *u8, b0: i64) -> i64 |
| 2144 | func ta_mcp(prefix: *u8, req: *u8, req_n: i64, out: *u8) -> i64 |
| 2212 | func ta_append_consent(client: *u8, cl: i64, allowp: *u8, allowl: i64, exp: i64, pnonce: i64, cnonce: i64) -> i64 |
| 2233 | 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 |
| 2242 | func ta_cap_issue(req: *u8, req_n: i64, out: *u8) -> i64 |
| 2288 | func ta_cap_revoke(req: *u8, req_n: i64, out: *u8) -> i64 |
| 2317 | func ta_cap_status(out: *u8) -> i64 |
| 2327 | func ta_oauth_prm(out: *u8) -> i64 |
| 2342 | func oauth_state_init() -> i64 |
| 2351 | func oauth_slotv(h: i64, slots: i64) -> i64 { var x: i64 = h; if x < 0 { x = 0 - x } return x - (x / slots) * slots } |
| 2352 | 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 } |
| 2354 | func oauth_param(src: *u8, slen: i64, key: *u8, klen: i64, out2: *i64) -> i64 |
| 2377 | 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 } |
| 2378 | func oauth_urldec(src: *u8, n: i64, dst: *u8) -> i64 |
| 2389 | func oauth_b64url(inb: *u8, n: i64, out: *u8) -> i64 |
| 2413 | func oauth_resp(out: *u8, status: *u8, ctype: *u8, body: *u8, blen: i64) -> i64 |
| 2425 | func ta_oauth_asmeta(out: *u8) -> i64 |
| 2431 | func ta_oauth_register(req: *u8, req_n: i64, out: *u8) -> i64 |
| 2453 | func ta_oauth_authorize(req: *u8, req_n: i64, out: *u8) -> i64 |
| 2498 | func ta_oauth_approve(req: *u8, req_n: i64, out: *u8) -> i64 |
| 2555 | func ta_oauth_token(req: *u8, req_n: i64, out: *u8) -> i64 |
| 2611 | func ta_handle_pfx(prefix: *u8, req: *u8, req_n: i64, out: *u8) -> i64 |
| 2643 | func ta_handle(req: *u8, req_n: i64, out: *u8) -> i64 { return ta_handle_pfx(TA_TOOLPFX, req, req_n, out) } |
| 2645 | func ta_claim_meta(jb:*u8,b:i64,jid:i64,elapsed:i64,published:i64,has_meta:i64)->i64 |