code wiki / _hdl_build / nx_prim_synth.nx
nx_prim_synth.nx source
↩ module page · 191 lines · 11364 B
1// nx_prim_synth.nx -- prim lane F784 (SYNTHESIZE: compose validated primitives into a sovereign workflow).
2// The last of the 4 meet-in-the-middle pillars. Given ordered primitive ids (the agent's chosen composition
3// from F782/F783 matches), VALIDATE each exists in the F781 registry + pull its typed signature, then EMIT
4// the composed plan-workflow (seq/tool rows for nx_plan_run) + the seed recipe. If ANY id is unresolved it
5// REFUSES to emit a runnable plan (all_resolved=false, exit 3) and routes the caller to nx_prim_gap -- you
6// cannot synthesize over a primitive that does not exist. Sovereign orchestration = a plan- workflow run by
7// nx_plan_run, NOT LangGraph/Temporal. READ-ONLY over the registry; result to stdout + atomic out-file.
8// nx_prim_synth <primitive-id> [<primitive-id> ...]
9// exit: 0 all-resolved (runnable plan emitted) | 3 UNRESOLVED (>=1 id absent) | 4 registry unreadable | 2 usage.
10// license_tier: ORIGINAL expect_exit: 0
11import "nx_syscalls.nx"
12const K_MAGIC_262100: i64 = 262100
13const K_MAGIC_262144: i64 = 262144
14const K_MAGIC_1024: i64 = 1024
15
16func ps_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 }
17func ps_b(rep: *u8, pos: i64, s: *u8) -> i64 { var p: i64 = pos; var i: i64 = 0; while s[i] != (0 as u8) { if p < K_MAGIC_262100 { rep[p] = s[i]; p = p + 1 } i = i + 1 } return p }
18func ps_bn(rep: *u8, pos: i64, v: i64) -> i64 { var p: i64 = pos; var m: i64 = v; if m < 0 { if p < K_MAGIC_262100 { rep[p] = 45 as u8; p = p + 1 } m = 0 - m } let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 } while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } var i: i64 = 0; while i < k { if p < K_MAGIC_262100 { rep[p] = t[k - 1 - i]; p = p + 1 } i = i + 1 } return p }
19func ps_q(rep: *u8, pos: i64) -> i64 { var p: i64 = pos; if p < K_MAGIC_262100 { rep[p] = 34 as u8; p = p + 1 } return p }
20func ps_je(rep: *u8, pos: i64, src: *u8, s: i64, e: i64) -> i64 {
21 var p: i64 = pos
22 var i: i64 = s
23 while i < e {
24 let c: i64 = src[i]
25 if c == 34 { if p < K_MAGIC_262100 { rep[p] = 92 as u8; p = p + 1 } if p < K_MAGIC_262100 { rep[p] = 34 as u8; p = p + 1 } }
26 else { if c == 92 { if p < K_MAGIC_262100 { rep[p] = 92 as u8; p = p + 1 } if p < K_MAGIC_262100 { rep[p] = 92 as u8; p = p + 1 } }
27 else { if c < 32 { if p < K_MAGIC_262100 { rep[p] = 32 as u8; p = p + 1 } }
28 else { if p < K_MAGIC_262100 { rep[p] = c as u8; p = p + 1 } } } }
29 i = i + 1
30 }
31 return p
32}
33func ps_reads(path: *u8, buf: *u8, cap: i64) -> i64 {
34 let fd: i64 = sys_openat_rd(path)
35 if fd < 0 { return 0 - 1 }
36 var n: i64 = 0
37 var go: i64 = 1
38 while go == 1 { let r: i64 = sys_read(fd, (buf as i64 + n) as *u8, cap - n); if r <= 0 { go = 0 } else { n = n + r } if n >= cap { go = 0 } }
39 sys_close(fd)
40 return n
41}
42func ps_off(buf: *u8, s: i64, e: i64, pat: *u8, pl: i64) -> i64 {
43 if pl == 0 { return 0 - 1 }
44 var i: i64 = s
45 var found: i64 = 0 - 1
46 while i + pl <= e {
47 var k: i64 = 0
48 var m: i64 = 1
49 while k < pl { if buf[i + k] != pat[k] { m = 0; k = pl } else { k = k + 1 } }
50 if m == 1 { found = i; i = e } else { i = i + 1 }
51 }
52 return found
53}
54func ps_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
55func ps_id(buf: *u8, ostart: i64, ce: i64, out: *u8) -> i64 {
56 var i: i64 = ostart + 17
57 var d: i64 = 0
58 var go: i64 = 1
59 while go == 1 { if i >= ce { go = 0 } else { let c: i64 = buf[i]; if c == 34 { go = 0 } else { if d < 60 { out[d] = c as u8; d = d + 1 } i = i + 1 } } }
60 return d
61}
62// exact match: idb[0,dl) equals null-terminated arg b
63func ps_eq(idb: *u8, dl: i64, b: *u8) -> i64 {
64 var i: i64 = 0
65 while i < dl { if idb[i] != b[i] { return 0 } i = i + 1 }
66 if b[dl] != (0 as u8) { return 0 }
67 return 1
68}
69// append the string VALUE of key (key excluded) from object [os,ce) into out at op; return new op
70func ps_val(out: *u8, op: i64, buf: *u8, os: i64, ce: i64, key: *u8, klen: i64) -> i64 {
71 var p: i64 = op
72 var koff: i64 = 0 - 1
73 var sc: i64 = os
74 var go: i64 = 1
75 while go == 1 {
76 let o: i64 = ps_off(buf, sc, ce, key, klen)
77 if o < 0 { go = 0 } else {
78 if o >= 1 { if buf[o-1] == (34 as u8) { if o + klen + 1 < ce { if buf[o+klen] == (34 as u8) { if buf[o+klen+1] == (58 as u8) { koff = o; go = 0 } } } } }
79 if koff < 0 { sc = o + klen }
80 }
81 }
82 if koff < 0 { return p }
83 let vp: i64 = koff + klen + 2
84 if vp < ce { if buf[vp] == (34 as u8) {
85 var i: i64 = vp + 1
86 var g2: i64 = 1
87 while g2 == 1 { if i >= ce { g2 = 0 } else { let c: i64 = buf[i]; if c == 92 { if i + 1 < ce { if p < 900 { out[p] = buf[i+1]; p = p + 1 } } i = i + 2 } else { if c == 34 { g2 = 0 } else { if p < 900 { out[p] = c as u8; p = p + 1 } i = i + 1 } } } }
88 } }
89 return p
90}
91func main(argc: i64, argv: *i64) -> i64 {
92 if argc < 2 { ps_w(2, "usage: nx_prim_synth <primitive-id> [<primitive-id> ...]\n" as *u8); sys_exit(2); return 2 }
93 let manifest: *u8 = "knowledge/store/prim_registry.json" as *u8
94 let outpath: *u8 = "knowledge/status/prim_synth.json" as *u8
95 let tmppath: *u8 = "knowledge/status/prim_synth.json.tmp" as *u8
96 let win: i64 = K_MAGIC_262144
97 let buf: *u8 = sys_mmap(win + 16)
98 let n: i64 = ps_reads(manifest, buf, win)
99 if n < 0 { ps_w(1, "PRIM-SYNTH verdict=ABSENT manifest unreadable\n" as *u8); sys_exit(4); return 4 }
100 let ph: i64 = ps_off(buf, 0, n, "primitives" as *u8, 10)
101 if ph < 0 { ps_w(1, "PRIM-SYNTH verdict=MALFORMED\n" as *u8); sys_exit(4); return 4 }
102 let rstart: i64 = ph + 10
103 let endpat: *u8 = sys_mmap(16)
104 endpat[0] = 93 as u8
105 endpat[1] = 44 as u8
106 endpat[2] = 34 as u8
107 endpat[3] = 101 as u8
108 endpat[4] = 110 as u8
109 endpat[5] = 118 as u8
110 endpat[6] = 101 as u8
111 endpat[7] = 108 as u8
112 endpat[8] = 111 as u8
113 endpat[9] = 112 as u8
114 endpat[10] = 101 as u8
115 let eh: i64 = ps_off(buf, rstart, n, endpat, 11)
116 var arrend: i64 = n
117 if eh > 0 { arrend = eh }
118 let bounds: *i64 = sys_mmap(512 * 8) as *i64
119 var nb: i64 = 0
120 var scan: i64 = rstart
121 var goo: i64 = 1
122 while goo == 1 {
123 let o: i64 = ps_off(buf, scan, arrend, "primitive_id" as *u8, 12)
124 if o < 0 { goo = 0 } else {
125 if o >= 2 { if buf[o-2] == (123 as u8) { if buf[o-1] == (34 as u8) { if nb < 512 { bounds[nb] = o - 2; nb = nb + 1 } } } }
126 scan = o + 12
127 }
128 }
129 let rep: *u8 = sys_mmap(win + 16)
130 let idb: *u8 = sys_mmap(64)
131 let sig: *u8 = sys_mmap(K_MAGIC_1024)
132 var p: i64 = 0
133 p = ps_b(rep, p, "{" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, "v" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":1," as *u8)
134 p = ps_q(rep, p); p = ps_b(rep, p, "kind" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, "workflow_synthesis" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, "," as *u8)
135 p = ps_q(rep, p); p = ps_b(rep, p, "steps" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":[" as *u8)
136 var resolved: i64 = 0
137 var unresolved: i64 = 0
138 var r: i64 = 1
139 while r < argc {
140 let want: *u8 = argv[r] as *u8
141 let wlen: i64 = ps_slen(want)
142 var found: i64 = 0
143 var fostart: i64 = 0
144 var foce: i64 = 0
145 var k: i64 = 0
146 while k < nb {
147 let ostart: i64 = bounds[k]
148 var oend: i64 = arrend
149 if k + 1 < nb { oend = bounds[k+1] }
150 var ce: i64 = oend
151 if ce > ostart { if buf[ce-1] == (44 as u8) { ce = ce - 1 } }
152 let dl: i64 = ps_id(buf, ostart, ce, idb)
153 if found == 0 { if ps_eq(idb, dl, want) == 1 { found = 1; fostart = ostart; foce = ce } }
154 k = k + 1
155 }
156 if r > 1 { p = ps_b(rep, p, "," as *u8) }
157 p = ps_b(rep, p, "{" as *u8)
158 p = ps_q(rep, p); p = ps_b(rep, p, "seq" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8); p = ps_bn(rep, p, r * 10); p = ps_b(rep, p, "," as *u8)
159 p = ps_q(rep, p); p = ps_b(rep, p, "tool" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8); p = ps_q(rep, p); p = ps_je(rep, p, want, 0, wlen); p = ps_q(rep, p); p = ps_b(rep, p, "," as *u8)
160 if found == 1 {
161 resolved = resolved + 1
162 var sp: i64 = ps_val(sig, 0, buf, fostart, foce, "signature" as *u8, 9)
163 p = ps_q(rep, p); p = ps_b(rep, p, "resolved" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":true," as *u8)
164 p = ps_q(rep, p); p = ps_b(rep, p, "signature" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8); p = ps_q(rep, p); p = ps_je(rep, p, sig, 0, sp); p = ps_q(rep, p)
165 } else {
166 unresolved = unresolved + 1
167 p = ps_q(rep, p); p = ps_b(rep, p, "resolved" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":false," as *u8)
168 p = ps_q(rep, p); p = ps_b(rep, p, "note" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, "UNRESOLVED -- not in registry; route to nx_prim_gap (missing-primitive), do not synthesize over a non-existent primitive" as *u8); p = ps_q(rep, p)
169 }
170 p = ps_b(rep, p, "}" as *u8)
171 r = r + 1
172 }
173 p = ps_b(rep, p, "]," as *u8)
174 p = ps_q(rep, p); p = ps_b(rep, p, "requested" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8); p = ps_bn(rep, p, argc - 1); p = ps_b(rep, p, "," as *u8)
175 p = ps_q(rep, p); p = ps_b(rep, p, "resolved" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8); p = ps_bn(rep, p, resolved); p = ps_b(rep, p, "," as *u8)
176 p = ps_q(rep, p); p = ps_b(rep, p, "unresolved" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8); p = ps_bn(rep, p, unresolved); p = ps_b(rep, p, "," as *u8)
177 p = ps_q(rep, p); p = ps_b(rep, p, "all_resolved" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8)
178 if unresolved == 0 { p = ps_b(rep, p, "true" as *u8) } else { p = ps_b(rep, p, "false" as *u8) }
179 p = ps_b(rep, p, "," as *u8)
180 p = ps_q(rep, p); p = ps_b(rep, p, "seed_recipe" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8); p = ps_q(rep, p)
181 if unresolved == 0 { p = ps_b(rep, p, "per step: nx_store_put knowledge/store/plan-<id>- put <actor> <seq> <tool> <args-from-signature> then nx_plan_run <id> (executes the composition server-side, per-step results to planrun-<id>-)" as *u8) } else { p = ps_b(rep, p, "BLOCKED: resolve the unresolved primitive(s) first (author via nx_prim_gap structural spec), then re-synthesize" as *u8) }
182 p = ps_q(rep, p); p = ps_b(rep, p, "," as *u8)
183 p = ps_q(rep, p); p = ps_b(rep, p, "note" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, ":" as *u8); p = ps_q(rep, p); p = ps_b(rep, p, "sovereign composition = a plan- workflow run by nx_plan_run; ordering is the argv order; args come from each step signature (agent fills). This organ VALIDATES existence + emits the plan; it does not fabricate glue over missing pieces." as *u8); p = ps_q(rep, p)
184 p = ps_b(rep, p, "}" as *u8)
185 sys_write(1, rep, p)
186 let tmpfd: i64 = sys_openat_wr(tmppath, 420)
187 if tmpfd >= 0 { sys_write(tmpfd, rep, p); sys_close(tmpfd); sys_renameat(tmppath, outpath) }
188 if unresolved > 0 { sys_exit(3); return 3 }
189 sys_exit(0)
190 return 0
191}