code wiki / (root) / nx_tool_run_evidence_candidate_t297.nx

nx_tool_run_evidence_candidate_t297.nx

buildroot/runtime/nx_tool_run_evidence_candidate_t297.nx

35901 B688 linesdepth 4pulls 4 transitivereach 1 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 · 1 importers

nx_syscalls.nx nx_buf_dyn.nx nx_tool_run_evidence_candidate nx_behaveprobe_evidence_candidate_

imports: nx_syscalls.nxnx_buf_dyn.nx

imported by: nx_behaveprobe_evidence_candidate_t297.nx

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
called by 1: tr_run1_to calls 1: tr_run_capture_tr
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