code wiki / (root) / nx_tools_api_idem_candidate_t190.nx

nx_tools_api_idem_candidate_t190.nx

buildroot/runtime/nx_tools_api_idem_candidate_t190.nx

153151 B2436 linesdepth 8pulls 32 transitivereach 3 importersview sourcekind librarytopic tools
docsdependenciesstructsconstsfunctions

about

nx_tools_api_idem_candidate_t190.nx -- Exposes the nx_tool_registry over HTTP with MCP compatibility and idempotency for tool calls.

dependencies 9 imports · 3 importers

nx_jobclaim_lib.nx nx_mcp_envelope.nx nx_json_lib.nx nx_tool_registry.nx nx_cap_token.nx nx_tool_exec_allow.nx nx_tool_http_backend.nx sha256.nx nx_toolcall_idem_candidate_t190.nx nx_tools_api_idem_candidate_t1 nx_id_handler_gate_t190.nx nx_id_handler_gate_t190b.nx nx_id_handler_gate_t190c.nx

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_candidate_t190.nx

imported by: nx_id_handler_gate_t190.nxnx_id_handler_gate_t190b.nxnx_id_handler_gate_t190c.nx

structs

none

consts

20const TA_MAGIC_65536: i64 = 65536
25const TA_CAPTURE_CAP: i64 = 163840
26const TA_MAGIC_8192: i64 = 8192
27const TA_MAGIC_1048576: i64 = 1048576
28const TA_MAGIC_9999999999: i64 = 9999999999
29const TA_MAGIC_2048: i64 = 2048
30const TA_MAGIC_4096: i64 = 4096
31const TA_MAGIC_1469598: i64 = 1469598
32const TA_MAGIC_16384: i64 = 16384
33const TA_MAGIC_4294967295: i64 = 4294967295
34const TA_MAGIC_3600: i64 = 3600
35const TA_MAGIC_88161: i64 = 88161
37const TA_TOOLPFX: *u8 = "knowledge/toolreg-" as *u8 // production registry prefix (mirrors TOOL_PREFIX)
38const TA_MCP_PAGE: i64 = 64 // MCP tools/list page size (cursor pagination); clients walk nextCursor.
42const TA_ALL_LIMIT: i64 = 100000 // /api/tools emits ALL tools (effectively-unbounded page)
45const TA_CAP_SECRET: *u8 = "nishi-tools-cap-hmac-secret-v1-REPLACE-FROM-VAULT" as *u8
49const TA_CAP_KEYFILE: *u8 = "tools_cap_secret.key" as *u8
141const TA_LOG_I64_WIDTH: i64 = 20
142const TA_LOG_I64_MAX: i64 = 9223372036854775807
262const TA_CAPMODE_SLOTS: i64 = 16
263const TA_CAPMODE_UNSEEN: i64 = 0
264const TA_CAPMODE_PROV: i64 = 1
265const TA_CAPMODE_PLACE: i64 = 2
266const TA_CAPMODE_MODE: i64 = 420
267const TA_CAPMODE_LINE: i64 = 512
268const TA_CAPMODE_JRNL: *u8 = "knowledge/status/capmode.jrnl" as *u8
500const TA_SCHEMACONF: *u8 = "knowledge/tool_schemas.conf" as *u8 // server CWD-relative (like tool_allowlist.conf)
504const TA_GRAMMARCONF: *u8 = "knowledge/tool_grammar.conf" as *u8
509const TA_FLAGSCONF: *u8 = "knowledge/tool_flags.conf" as *u8
512const TA_SYS_OPENAT: i64 = 257
513const TA_AT_FDCWD: i64 = 0 - 100
514const TA_OEXCL: i64 = 193 // O_CREAT(0x40)|O_EXCL(0x80)|O_WRONLY(0x1)
515const TA_CLAIMMODE: i64 = 420 // 0644
1004const TA_REVOKED_LIST: *u8 = "cap_revoked.list" as *u8 // newline-separated decimal nonces, relative to the server CWD
1131const TA_REPLY_MS_UNOBSERVED: i64 = 0 - 1 // inline path: the reply has not been written when the row is stamped
1236const TT_UNKNOWN: i64 = 0-1
1237const TT_I64_MAX: i64 = 9223372036854775807
1238const TT_US_PER_SEC: i64 = 1000000
1239const TT_NS_PER_US: i64 = 1000
1240const TT_NS_PER_SEC: i64 = 1000000000
1241const TT_I64_WIDTH: i64 = 20
1991const TA_CONSENT_LOG: *u8 = "cap_consent.log" as *u8
2117const OC_SLOTS: i64 = 256

functions

52func ta_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
53func 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 }
73func ta_job_put(path: *u8, buf: *u8, n: i64) -> i64
95func ta_job_publish(output_path: *u8, output: *u8, output_n: i64, temp_path: *u8, marker: *u8, marker_n: i64, claim_path: *u8) -> i64
103func 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 }
104func ta_catn(d: *u8, o: i64, v: i64) -> i64
143func ta_log_size_add(a: i64, b: i64) -> i64
150func ta_journal_write_fd(fd: i64, row: *u8, n: i64) -> i64
called by 1: ta_journal_append
162func ta_journal_append(path: *u8, row: *u8, n: i64) -> i64
176func ta_actlog_x_to(path: *u8, tool: *u8, tlen: i64, lane: *u8, status: *u8, ec: i64, bytes: i64, dur_ms: i64, extra: *u8) -> i64
210func ta_actlog_x(tool: *u8, tlen: i64, lane: *u8, status: *u8, ec: i64, bytes: i64, dur_ms: i64, extra: *u8) -> i64
213func ta_actlog(tool: *u8, tlen: i64, lane: *u8, status: *u8, ec: i64, bytes: i64, dur_ms: i64) -> i64
217func ta_put1(d: *u8, o: i64, a: i64) -> i64 { d[o] = a as u8; return o + 1 }
called by 1: ta_json_esc
218func 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
219func 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
225func ta_load_cap_secret_from(keyfile: *u8, outlen: *i64) -> *u8
270func ta_capmode_announce(mode: i64) -> i64
called by 1: ta_load_cap_secret calls 2: ta_catnta_cat
309func ta_load_cap_secret(outlen: *i64) -> *u8
322func ta_cap_provisioned_from(keyfile: *u8) -> i64
332func ta_cap_provisioned() -> i64 { return ta_cap_provisioned_from(TA_CAP_KEYFILE) }
335func ta_streq_n(a: *u8, an: i64, b: *u8) -> i64
344func ta_json_esc(d: *u8, o: i64, s: *u8, n: i64) -> i64
363func ta_indexof(hay: *u8, hn: i64, needle: *u8) -> i64
378func ta_body_off(req: *u8, req_n: i64) -> i64
387func ta_reqline(req: *u8, req_n: i64, mo: *i64, po: *i64) -> i64
404func ta_json_str(body: *u8, n: i64, keyq: *u8, out2: *i64) -> i64
419func ta_json_raw(body: *u8, n: i64, keyq: *u8, out2: *i64) -> i64
447func ta_json_str_array(body: *u8, n: i64, keyq: *u8, out: *i64, base: i64, maxn: i64, scratch: *u8, scap: i64) -> i64
480func ta_emit(out: *u8, status: *u8, body: *u8, body_n: i64) -> i64
488func ta_emit_lit(out: *u8, status: *u8, lit: *u8) -> i64 { return ta_emit(out, status, lit, ta_slen(lit)) }
517func ta_bool_json(v: i64) -> *u8 { if v == 1 { return "true" as *u8 } return "false" as *u8 }
520func ta_tsv_field(buf: *u8, ls: i64, le: i64, idx: i64, out2: *i64) -> i64
540func ta_emit_mcp_schema_from(conf: *u8, name: *u8, nlen: i64, body: *u8, bin: i64) -> i64
554func ta_grammar_lookup(gbuf: *u8, gbn: i64, name: *u8, nlen: i64, out2: *i64) -> i64
587func ta_od_has(buf: *u8, od_s: i64, od_l: i64, needle: *u8) -> i64
called by 1: ta_od_is_regstub calls 1: ta_slen
608func ta_od_is_regstub(buf: *u8, od_s: i64, od_l: i64) -> i64
called by 1: ta_emit_mcp_schema_buf2 calls 1: ta_od_has
615func ta_flags_lookup(fbuf: *u8, fbn: i64, name: *u8, nlen: i64, out4: *i64) -> i64
651func 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
748func ta_emit_mcp_schema_buf(buf: *u8, bufn: i64, name: *u8, nlen: i64, body: *u8, bin: i64) -> i64
751func 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) }
754func ta_emit_field(body: *u8, b: i64, rec: *u8, rl: i64, idx: i64) -> i64
called by 1: ta_emit_tools calls 1: ta_json_esc
769func ta_desc_is_stub(rec: *u8, rl: i64, name: *u8, nlen: i64) -> i64
called by 1: ta_emit_tools calls 1: ta_slen
786func ta_schema_title_buf(buf: *u8, bufn: i64, name: *u8, nlen: i64, out2: *i64) -> i64
called by 1: ta_emit_tools calls 1: ta_tsv_field
817func ta_emit_tools(prefix: *u8, body: *u8, bin: i64, mcp: i64, offset: i64, limit: i64, out_more: *i64) -> i64
905func ta_index(out: *u8) -> i64
called by 1: ta_handle_pfx calls 1: ta_emit_lit
909func ta_emit_page(out: *u8, html: *u8, n: i64) -> i64
called by 1: ta_html_tools calls 3: ta_catta_catnta_catb
919func ta_html_tools(out: *u8) -> i64
called by 1: ta_handle_pfx calls 2: ta_catta_emit_page
928func ta_tools(prefix: *u8, out: *u8) -> i64
937func ta_header(req: *u8, req_n: i64, key: *u8, out2: *i64) -> i64
966func ta_query_cap(req: *u8, req_n: i64, out2: *i64) -> i64
called by 1: ta_mcp_call calls 1: ta_reqline
996func ta_query_cap_available() -> i64
1005func ta_openat_append(path: *u8) -> i64 { return __syscall(257, AT_FDCWD, path, 0x441, 0x1a4, 0, 0) } // O_WRONLY|O_CREAT|O_APPEND, 0644
1006func ta_nonce_revoked(nonce: i64) -> i64
called by 1: ta_mcp_call calls 1: ta_catn
1025func ta_append_revoked(nonce: i64) -> i64
1037func ta_name_in_lines(buf: *u8, n: i64, nm: *u8, nl: i64) -> i64
called by 1: ta_async_match
1068func ta_async_match(buf: *u8, n: i64, nm: *u8, nl: i64, av: *i64, ac: i64) -> i64
called by 1: ta_mcp_call calls 1: ta_name_in_lines
1133func ta_defer_enable() -> i64 { ta_defer_ok = 1; return 0 }
1134func ta_promote_pending() -> i64 { return ta_pp_pending }
1137func 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
1213func ta_async_pending() -> i64 { return ta_ap_pending }
1214func ta_async_finish() -> i64
calls 1: ta_actlog
1225func ta_promote_finish() -> i64
1262func ta_timing_now_us() -> i64
1274func ta_timing_elapsed(begin: i64, end: i64) -> i64
called by 1: ta_timing_emit_to
1279func ta_timing_field_ok(s: *u8, n: i64) -> i64
called by 1: ta_timing_emit_to
1288func 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
1343func ta_timing_emit(tool: *u8, tlen: i64, lane: *u8, phase: *u8, job: i64, begin: i64, end: i64, code: i64, bytes: i64) -> i64
1346func ta_timing_begin() -> i64
1355func ta_timing_bind(tool: *u8, n: i64) -> i64 { tt_tool = tool; tt_tool_n = n; return 0 }
called by 1: ta_mcp_call
1356func ta_timing_read_done() -> i64 { tt_read_end = ta_timing_now_us(); return 0 }
1357func ta_timing_handle_begin() -> i64 { tt_handle_begin = ta_timing_now_us(); return 0 }
1358func ta_timing_handle_done() -> i64 { tt_handle_end = ta_timing_now_us(); return 0 }
1359func ta_timing_write_begin() -> i64 { tt_write_begin = ta_timing_now_us(); return 0 }
1360func ta_timing_runner(begin: i64, end: i64, code: i64, bytes: i64) -> i64
called by 1: ta_mcp_call
1364func ta_timing_reply_prepare(code: i64) -> i64
1370func ta_timing_reply_log(bytes: i64) -> i64
calls 1: ta_timing_emit
1389func ta_idempotency_key(body: *u8, bn: i64, out2: *i64) -> i64 { return ta_json_str(body, bn, "\"_idem\"" as *u8, out2) }
called by 1: ta_mcp_call calls 1: ta_json_str
1391func ta_mcp_call(prefix: *u8, req: *u8, req_n: i64, body: *u8, bn: i64, jb: *u8, bin: i64) -> i64
1877func ta_mcp_resread(body: *u8, bn: i64, jb: *u8, b0: i64) -> i64
1906func ta_mcp_promget(body: *u8, bn: i64, jb: *u8, b0: i64) -> i64
1933func ta_mcp(prefix: *u8, req: *u8, req_n: i64, out: *u8) -> i64
2022func ta_cap_issue(req: *u8, req_n: i64, out: *u8) -> i64
2068func ta_cap_revoke(req: *u8, req_n: i64, out: *u8) -> i64
2097func ta_cap_status(out: *u8) -> i64
2107func ta_oauth_prm(out: *u8) -> i64
2122func oauth_state_init() -> i64
2131func oauth_slotv(h: i64, slots: i64) -> i64 { var x: i64 = h; if x < 0 { x = 0 - x } return x - (x / slots) * slots }
2132func 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 }
2134func oauth_param(src: *u8, slen: i64, key: *u8, klen: i64, out2: *i64) -> i64
2157func 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 }
2158func oauth_urldec(src: *u8, n: i64, dst: *u8) -> i64
2169func oauth_b64url(inb: *u8, n: i64, out: *u8) -> i64
2193func oauth_resp(out: *u8, status: *u8, ctype: *u8, body: *u8, blen: i64) -> i64
2205func ta_oauth_asmeta(out: *u8) -> i64
2211func ta_oauth_register(req: *u8, req_n: i64, out: *u8) -> i64
2233func ta_oauth_authorize(req: *u8, req_n: i64, out: *u8) -> i64
2278func ta_oauth_approve(req: *u8, req_n: i64, out: *u8) -> i64
2335func ta_oauth_token(req: *u8, req_n: i64, out: *u8) -> i64
2391func ta_handle_pfx(prefix: *u8, req: *u8, req_n: i64, out: *u8) -> i64
2423func ta_handle(req: *u8, req_n: i64, out: *u8) -> i64 { return ta_handle_pfx(TA_TOOLPFX, req, req_n, out) }
2425func ta_claim_meta(jb:*u8,b:i64,jid:i64,elapsed:i64,published:i64,has_meta:i64)->i64