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}