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}