code wiki / _hdl_build / nx_seat_hub.nx

nx_seat_hub.nx source

↩ module page · 104 lines · 4554 B

1// nx_seat_hub.nx -- S2b HUB-FRAME WRAPPER (agent-seat system, 2026-07-20). 2// Fronts the LIVE hub's `nx_seat checkin/checkout` over sovereign MCP tools/call so a 3// non-Claude seat's claim + kickoff/done frames land on the SAME board a Claude seat uses. 4// Fits nx_seat_drive's hub-verb convention: <elf> <hubconf> <ws> <actor> 5// hubconf = KEY=VALUE lines: mcpelf= url= capfile= verb=checkin|checkout ttl= note= outfile= 6// (ttl required for checkin only; everything is config DATA -- rule 11/17.) 7// 8// FAIL-CLOSED BY BODY-PARSE (banked law: transport can lose RESPONSES and exit codes lie 9// through relays -- only the hub's own printed markers count, probed LIVE 2026-07-20): 10// checkin success marker = "claim=HELD" (contended prints claim=CONTENDED -> refuse) 11// checkout success marker = "done=1" 12// Missing marker, empty body, or transport failure -> exit 3 (the driver's refused-claim class). 13// license_tier: ORIGINAL No hw writes (Rule 26). 14import "nx_seat_drive_lib.nx" 15import "nx_deploy_lib.nx" 16import "nx_syscalls.nx" 17 18const SH_CONF_CAP: i64 = 65536 19const SH_BODY_CAP: i64 = 262144 20const SH_FRAG_CAP: i64 = 4096 21 22func main(argc: i64, argv: *i64) -> i64 { 23 if argc < 4 { sd_w("usage: nx_seat_hub <hubconf> <ws> <actor>\n" as *u8); sys_exit(2); return 2 } 24 let confp: *u8 = argv[1] as *u8 25 let ws: *u8 = argv[2] as *u8 26 let actor: *u8 = argv[3] as *u8 27 let conf: *u8 = sys_mmap(SH_CONF_CAP) 28 let cn: i64 = dp_read(confp, conf, SH_CONF_CAP) 29 if cn <= 0 { sd_w("SEATHUB-CONF-MISSING\n" as *u8); sys_exit(2); return 2 } 30 31 let mcpelf: *u8 = sd_val(conf, cn, "mcpelf=" as *u8) 32 let url: *u8 = sd_val(conf, cn, "url=" as *u8) 33 let capfile: *u8 = sd_val(conf, cn, "capfile=" as *u8) 34 let verb: *u8 = sd_val(conf, cn, "verb=" as *u8) 35 let ttl: *u8 = sd_val(conf, cn, "ttl=" as *u8) 36 let note: *u8 = sd_val(conf, cn, "note=" as *u8) 37 let outfile: *u8 = sd_val(conf, cn, "outfile=" as *u8) 38 if (mcpelf as i64) == 0 { sd_w("SEATHUB-CONF-BAD missing=mcpelf\n" as *u8); sys_exit(2); return 2 } 39 if (url as i64) == 0 { sd_w("SEATHUB-CONF-BAD missing=url\n" as *u8); sys_exit(2); return 2 } 40 if (capfile as i64) == 0 { sd_w("SEATHUB-CONF-BAD missing=capfile\n" as *u8); sys_exit(2); return 2 } 41 if (verb as i64) == 0 { sd_w("SEATHUB-CONF-BAD missing=verb\n" as *u8); sys_exit(2); return 2 } 42 if (note as i64) == 0 { sd_w("SEATHUB-CONF-BAD missing=note\n" as *u8); sys_exit(2); return 2 } 43 if (outfile as i64) == 0 { sd_w("SEATHUB-CONF-BAD missing=outfile\n" as *u8); sys_exit(2); return 2 } 44 45 // classify the verb once: checkin needs ttl; checkout does not 46 var is_checkin: i64 = 0 47 if (verb[0] as i64) == 99 { if (verb[5] as i64) == 105 { is_checkin = 1 } } // "checki"n vs "checko"ut at [5] 48 if is_checkin == 1 { if (ttl as i64) == 0 { sd_w("SEATHUB-CONF-BAD missing=ttl\n" as *u8); sys_exit(2); return 2 } } 49 50 // args_json_fragment for nx_mcp_call: "argv":["<verb>","<ws>","<actor>"[,"<ttl>"],"<note>"] 51 let frag: *u8 = sys_mmap(SH_FRAG_CAP) 52 var f: i64 = 0 53 f = sd_cat(frag, f, "\"argv\":[\"" as *u8) 54 f = sd_cat(frag, f, verb) 55 f = sd_cat(frag, f, "\",\"" as *u8) 56 f = sd_cat(frag, f, ws) 57 f = sd_cat(frag, f, "\",\"" as *u8) 58 f = sd_cat(frag, f, actor) 59 f = sd_cat(frag, f, "\"" as *u8) 60 if is_checkin == 1 { 61 f = sd_cat(frag, f, ",\"" as *u8) 62 f = sd_cat(frag, f, ttl) 63 f = sd_cat(frag, f, "\"" as *u8) 64 } 65 f = sd_cat(frag, f, ",\"" as *u8) 66 f = sd_cat(frag, f, note) 67 f = sd_cat(frag, f, "\"]" as *u8) 68 69 let av: *i64 = sys_mmap(64) as *i64 70 av[0] = url as i64 71 av[1] = "nx_seat" as *u8 as i64 72 av[2] = capfile as i64 73 av[3] = frag as i64 74 let rc: i64 = dep_run_capture(mcpelf, av, 4, outfile) 75 76 let body: *u8 = sys_mmap(SH_BODY_CAP) 77 let bn: i64 = dp_read(outfile, body, SH_BODY_CAP) 78 if rc != 0 { 79 sd_w("SEATHUB-REFUSED transport rc!=0\n" as *u8) 80 sys_exit(3) 81 return 3 82 } 83 if bn <= 0 { 84 sd_w("SEATHUB-REFUSED empty response\n" as *u8) 85 sys_exit(3) 86 return 3 87 } 88 var hits: i64 = 0 89 if is_checkin == 1 { hits = sd_count(body, bn, "claim=HELD" as *u8) } else { hits = sd_count(body, bn, "done=1" as *u8) } 90 if hits < 1 { 91 sd_w("SEATHUB-REFUSED marker-absent verb=" as *u8) 92 sd_w(verb) 93 sd_w("\n" as *u8) 94 sys_exit(3) 95 return 3 96 } 97 sd_w("SEATHUB-OK verb=" as *u8) 98 sd_w(verb) 99 sd_w(" ws=" as *u8) 100 sd_w(ws) 101 sd_w("\n" as *u8) 102 sys_exit(0) 103 return 0 104}