code wiki / (root) / nx_tool_run.nx

nx_tool_run.nx

buildroot/runtime/nx_tool_run.nx

35901 B688 linesdepth 4pulls 4 transitivereach 749 importersview sourcekind librarytopic tool
docsdependenciesstructsconstsfunctions

about

nx_tool_run.nx -- R0 of the EXECUTABLE-API rung: the sovereign exec+capture primitive the ecosystem is missing. Today nishifamily.com/api/tools + /mcp only LIST tools (a read-only registry) and MCP tools/call returns a SAFE STUB ("invoked X (capability-authorized)") -- there is NO way to actually RUN an organ and hand back its real stdout. This organ is that missing capability, built hardware-up from raw syscalls (fork/pipe/dup3/execve/wait4), reusing the EXACT proven wrappers from nx_hostctl's hc_dfork_exec so it inherits the same never-brick discipline. NO /bin/sh, NO shell string, NO PATH search -- callers pass an ABSOLUTE ELF path (the allowlist layer that maps tool-name -> path is R1, nx_tool_registry). Synchronous (wait4), unlike hc_dfork_exec's detach -- because an API tools/call needs the child's OUTPUT and EXIT CODE, not a fire-and-forget daemon. license_tier: ORIGINAL

dependencies 2 imports · 388 importers

nx_syscalls.nx nx_buf_dyn.nx nx_tool_run.nx nx_absent.nx nx_accept.nx nx_accept_candidate_t230.nx nx_accept_gate.nx nx_acceptview.nx nx_actlog.nx nx_actlog_gate.nx nx_adoptdelta_gate.nx nx_adoptgate_typed_candidate_t310. nx_adoptsweep.nx

diagram shows first 10 each side; +0 more imports, +378 more importers in the complete lists below.

imports: nx_syscalls.nxnx_buf_dyn.nx

imported by: nx_absent.nxnx_accept.nxnx_accept_candidate_t230.nxnx_accept_gate.nxnx_acceptview.nxnx_actlog.nxnx_actlog_gate.nxnx_adoptdelta_gate.nxnx_adoptgate_typed_candidate_t310.nxnx_adoptsweep.nxnx_anchorsweep.nxnx_artifactdrift_gate.nxnx_artlicense_gate.nxnx_artloop.nxnx_asset_prov_gate.nxnx_assetingest_gate.nxnx_atlas_citeverify.nxnx_atlas_citeverify2.nxnx_atlas_sweep.nxnx_autofix_auto.nxnx_autofix_gate.nxnx_autofix_lib.nxnx_autofix_lib_t138.nxnx_autofix_localfix.nxnx_autograde_gate.nxnx_autorig_pose_gate.nxnx_avatar_splat.nxnx_axisvar.nxnx_bd_calc_gate.nxnx_behaveprobe.nxnx_behaveprobe_gate.nxnx_behaveprobe_review_candidate_t371.nxnx_beir_eval.nxnx_body_matched_serving_probe_t345.nxnx_bodyfit.nxnx_bodyfit_canon_gate.nxnx_bugforge.nxnx_builddeploy_gate.nxnx_builddeploy_gate_qualify_20260910.nxnx_builddeploy_gate_t146.nxnx_buildq.nxnx_buildq_gate.nxnx_cachewatch_gate.nxnx_capaxes_derive.nxnx_capaxes_derive_test.nxnx_capcliff.nxnx_capcliff_gate.nxnx_capcliff_recovery_20260912.nxnx_capgraph_derive_lib.nxnx_capgraph_edges_lib.nxnx_capgraph_selfcheck.nxnx_capture_owned_gate_t218.nxnx_card_import_gate.nxnx_charjudge_census.nxnx_chat_demo_api_gate.nxnx_chat_store_gate.nxnx_cjc_panel_gate.nxnx_claude_harvest.nxnx_claude_harvest_before_evidence_t45.nxnx_claude_harvest_evidence_t45.nxnx_claude_harvest_gate.nxnx_claude_harvest_requests_t144.nxnx_claude_harvest_usage_t76.nxnx_clobber_guard_gate.nxnx_clock_reserved_fault_native_v2_ar.nxnx_clock_reserved_native_v2_ar.nxnx_closure_gate.nxnx_closurehash_gate.nxnx_communitypulse_gate.nxnx_companion_mind.nxnx_companion_sota.nxnx_compare_capture_integration_gate.nxnx_compare_capture_real_gate_20260907.nxnx_compare_cite.nxnx_compare_cite_gate.nxnx_compare_growth_capture_20260910.nxnx_compare_growth_capture_canon_20260910.nxnx_compare_growth_capture_final_20260910.nxnx_compare_growth_matrix_full_20260910.nxnx_compare_ladder_capture.nxnx_compare_ladder_capture_test_20260907.nxnx_compare_preview_capture_t56.nxnx_compare_rank.nxnx_compare_rank_artifact_20260910.nxnx_compare_rank_canon_capture_20260910.nxnx_compare_rank_caps_gate.nxnx_compare_rank_capture_gate_20260910.nxnx_compare_rank_fleet.nxnx_compare_rank_gate.nxnx_compare_rank_live_capture_20260910.nxnx_compare_rank_refresh_test_20260907.nxnx_compare_rank_refusal_gate_20260910.nxnx_compare_refs_gate.nxnx_compare_regen.nxnx_compare_regen_scoped.nxnx_compare_regen_t138.nxnx_compare_release_render_gate.nxnx_compare_shared_fit_adopt_capture_20260910.nxnx_compare_shared_fit_capture_20260910.nxnx_compare_shared_fit_final_capture_20260910.nx +288 more (shown cap 100 declared)

structs

530struct NxRunEvidence { result:i64, capture_error:i64, setup_error:i64, exec_error:i64, wait_error:i64, raw_wait:i64, reaped:i64, exited:i64, exit_code:i64, signal:i64, timed_out:i64, drain_error:i64 }

consts

16const TR_ERR_DRAIN: i64 = 0 - 8
17const TR_ERR_FD_SETUP: i64 = 0 - 12
18const TR_ERR_PARENT_LIFETIME: i64 = 0 - 11
19const TR_DRAIN_BYTES: i64 = 4096
21const TR_EINTR: i64 = 0 - 4
23const TR_EINTR_MAX: i64 = 4096
40const TR_EXIT_EXECFAIL: i64 = 127
41const TR_MODE_0644: i64 = 420
197const TR_ERR_TIMEOUT: i64 = 0 - 5
198const TR_SIGKILL: i64 = 9
231const TR_PROMOTE: i64 = 0 - 7 // distinct from TR_ERR_TIMEOUT (-5) and TR_ERR_CHDIR (-6)
232const TR_POLLFD_BYTES: i64 = 8 // sizeof(struct pollfd)
233const TR_POLLIN: i64 = 1 // POLLIN
234const TR_PF_EV_OFF: i64 = 4 // offsetof(struct pollfd, events)
235const TR_PF_RE_OFF: i64 = 6 // offsetof(struct pollfd, revents)
236const TR_PF_FD_BYTES: i64 = 4 // sizeof(i32 fd)
237const TR_BITS_PER_BYTE: i64 = 8
238const TR_BYTE_MASK: i64 = 0xff
334const TR_ERR_CHDIR: i64 = 0 - 6
342const TR_FIT: i64 = 0
343const TR_CUT: i64 = 1
383const TR_CONTROL_BYTES: i64 = 4096
384const TR_ERR_GROUP: i64 = 0 - 9
385const TR_ERR_ALLOC: i64 = 0 - 10
386const TR_ECHILD: i64 = 0 - 10 // Linux errno, distinct from the public result namespace

functions

43func tr_exec_failed(path: *u8) -> i64
89func tr_run_redirect(path: *u8, argv: *i64, out_path: *u8, err_path: *u8) -> i64
127func tr_run_capture(path: *u8, argv: *i64, out: *u8, cap: i64, outlen: *i64) -> i64
202func tr_run_capture_to(path: *u8, argv: *i64, out: *u8, cap: i64, outlen: *i64, timeout_ms: i64) -> i64
239func tr_pollfd_set(p: *u8, fd: i64) -> i64
251func tr_run_capture_deadline(path: *u8, argv: *i64, out: *u8, cap: i64, outlen: *i64, deadline_ms: i64, out_pid: *i64, out_rfd: *i64) -> i64
335func tr_run_capture_cwd(path: *u8, argv: *i64, out: *u8, cap: i64, outlen: *i64, timeout_ms: i64, cwd: *u8) -> i64
344func tr_drain_tr(rfd: i64, out: *u8, cap: i64, trunc: *i64) -> i64
377func tr_run_capture_tr(path: *u8, argv: *i64, out: *u8, cap: i64, outlen: *i64, timeout_ms: i64, trunc: *i64) -> i64
387func tr_clock_ms(ts: *i64) -> i64
392func tr_observe_exit(pid: i64, info: *u8) -> i64
397func tr_reap(pid: i64, status: *i64) -> i64
405func tr_drain_until(rfd:i64,out:*u8,cap:i64,trunc:*i64,outlen:*i64,deadline:i64)->i64
408func tr_drain_until_owned(rfd:i64,out:*u8,cap:i64,trunc:*i64,outlen:*i64,deadline:i64,owned:*NxBufOwned,max_bytes:i64)->i64
461func tr_capture_stop(pid: i64, control: *i64) -> i64
469func tr_watchdog_child(owner: i64, pid: i64, control: *i64, deadline: i64, wfd: i64, scratch: *u8) -> i64
490func tr_watchdog_start(owner: i64, pid: i64, control: *i64, deadline: i64) -> i64
517func tr_run_capture_core(path:*u8,argv:*i64,out:*u8,cap:i64,outlen:*i64,timeout_ms:i64,trunc:*i64,cwd:*u8)->i64
522func tr_run_capture_owned(path:*u8,argv:*i64,owned:*NxBufOwned,timeout_ms:i64,max_bytes:i64,cwd:*u8)->i64
531func tr_evidence_init(e:*NxRunEvidence)->i64
534func tr_evidence_wait(e:*NxRunEvidence,control:*i64,pid:i64,waited:i64,status:i64)->i64
546func tr_run_capture_owned_result(path:*u8,argv:*i64,owned:*NxBufOwned,timeout_ms:i64,max_bytes:i64,cwd:*u8,e:*NxRunEvidence)->i64
558func tr_run_capture_core_owned(path:*u8,argv:*i64,out:*u8,cap:i64,outlen:*i64,timeout_ms:i64,trunc:*i64,cwd:*u8,owned:*NxBufOwned,max_bytes:i64)->i64
561func tr_capture_redirect(wfd:i64)->i64
566func tr_run_capture_core_evidence(path:*u8,argv:*i64,out:*u8,cap:i64,outlen:*i64,timeout_ms:i64,trunc:*i64,cwd:*u8,owned:*NxBufOwned,max_bytes:i64,e:*NxRunEvidence)->i64
658func tr_run1(path: *u8, arg: *u8, out: *u8, cap: i64, outlen: *i64) -> i64
666func tr_run1_to(path: *u8, arg: *u8, out: *u8, cap: i64, outlen: *i64, timeout_ms: i64) -> i64
674func tr_contains(buf: *u8, n: i64, needle: *u8) -> i64