code wiki / _hdl_build / nx_prim_registry.nx

nx_prim_registry.nx source

↩ module page · 169 lines · 11608 B

1// nx_prim_registry.nx -- prim lane F781 (BOTTOM-UP pillar of the meet-in-the-middle synthesis engine). 2// Tier-1: read knowledge/tool_schemas.conf (name|title|readOnly|destructive|idempotent|openWorld| 3// output-desc|argv-grammar[col8]) and EMIT a sovereign primitives manifest knowledge/store/prim_registry.json 4// -- one primitive per MCP tool: primitive_id, title, domain (name-prefix-derived), capabilities 5// (structural facets from data, NOT hallucinated verbs -- rule 4), signature (the col8 typed argv grammar 6// VERBATIM, or a flagged generic when absent = back-compat), output, safety{ro/destr/idem/open}, typed. 7// The 'what do I have' half of meet-in-the-middle; F782 query_primitives reads this. ATOMIC (tmp+rename, 8// no torn read). READ-ONLY over the source (Rule 26). Declares its envelope (scanned/typed/generic/cap). 9// nx_prim_registry run [schema.conf] [out.json] [tmp.json] 10// exit: 0 GREEN | 4 ABSENT-INPUT (schema unreadable) | 5 WRITE-FAIL | 2 usage. 11// license_tier: ORIGINAL expect_exit: 0 12import "nx_syscalls.nx" 13const K_MAGIC_1024: i64 = 1024 14const K_MAGIC_1048500: i64 = 1048500 15const K_MAGIC_1048576: i64 = 1048576 16const K_MAGIC_2048: i64 = 2048 17 18func pr_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 } 19func pr_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_1048500 { rep[p] = s[i]; p = p + 1 } i = i + 1 } return p } 20func pr_bn(rep: *u8, pos: i64, v: i64) -> i64 { var p: i64 = pos; var m: i64 = v; if m < 0 { if p < K_MAGIC_1048500 { 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_1048500 { rep[p] = t[k - 1 - i]; p = p + 1 } i = i + 1 } return p } 21func pr_q(rep: *u8, pos: i64) -> i64 { var p: i64 = pos; if p < K_MAGIC_1048500 { rep[p] = 34 as u8; p = p + 1 } return p } 22func pr_key(rep: *u8, pos: i64, k: *u8) -> i64 { var p: i64 = pos; p = pr_q(rep, p); p = pr_b(rep, p, k); p = pr_q(rep, p); p = pr_b(rep, p, ":" as *u8); return p } 23func pr_je(rep: *u8, pos: i64, src: *u8, s: i64, e: i64) -> i64 { 24 var p: i64 = pos 25 var i: i64 = s 26 while i < e { 27 let c: i64 = src[i] 28 if c == 34 { if p < K_MAGIC_1048500 { rep[p] = 92 as u8; p = p + 1 } if p < K_MAGIC_1048500 { rep[p] = 34 as u8; p = p + 1 } } 29 else { if c == 92 { if p < K_MAGIC_1048500 { rep[p] = 92 as u8; p = p + 1 } if p < K_MAGIC_1048500 { rep[p] = 92 as u8; p = p + 1 } } 30 else { if c < 32 { if p < K_MAGIC_1048500 { rep[p] = 32 as u8; p = p + 1 } } 31 else { if p < K_MAGIC_1048500 { rep[p] = c as u8; p = p + 1 } } } } 32 i = i + 1 33 } 34 return p 35} 36func pr_reads(path: *u8, buf: *u8, cap: i64) -> i64 { 37 let fd: i64 = sys_openat_rd(path) 38 if fd < 0 { return 0 - 1 } 39 var n: i64 = 0 40 var go: i64 = 1 41 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 } } 42 sys_close(fd) 43 return n 44} 45func pr_domain(src: *u8, s: i64, e: i64, dom: *u8) -> i64 { 46 var start: i64 = s 47 if e - s > 3 { if src[s] == 110 { if src[s+1] == 120 { if src[s+2] == 95 { start = s + 3 } } } } 48 var d: i64 = 0 49 var i: i64 = start 50 var go: i64 = 1 51 while go == 1 { 52 if i >= e { go = 0 } else { let c: i64 = src[i]; if c == 95 { go = 0 } else { if d < 60 { dom[d] = c as u8; d = d + 1 } i = i + 1 } } 53 } 54 if d == 0 { var j: i64 = s; d = 0; while j < e { if d < 60 { dom[d] = src[j]; d = d + 1 } j = j + 1 } } 55 return d 56} 57func main(argc: i64, argv: *i64) -> i64 { 58 var schemapath: *u8 = "knowledge/tool_schemas.conf" as *u8 59 var outpath: *u8 = "knowledge/store/prim_registry.json" as *u8 60 var tmppath: *u8 = "knowledge/store/prim_registry.json.tmp" as *u8 61 if argc >= 3 { schemapath = argv[2] as *u8 } 62 if argc >= 4 { outpath = argv[3] as *u8 } 63 if argc >= 5 { tmppath = argv[4] as *u8 } 64 let win: i64 = K_MAGIC_1048576 65 let buf: *u8 = sys_mmap(win + 16) 66 let n: i64 = pr_reads(schemapath, buf, win) 67 if n < 0 { pr_w(1, "PRIM-REGISTRY verdict=ABSENT-INPUT schema unreadable\n" as *u8); sys_exit(4); return 4 } 68 if n >= win { pr_w(1, "PRIM-REGISTRY verdict=REFUSED schema-window-saturated: raise win, a truncated scan would silently drop tools\n" as *u8); sys_exit(4); return 4 } 69 let rep: *u8 = sys_mmap(win + 16) 70 let fs: *i64 = sys_mmap(96) as *i64 71 let fe: *i64 = sys_mmap(96) as *i64 72 let dom: *u8 = sys_mmap(64) 73 var p: i64 = 0 74 p = pr_b(rep, p, "{" as *u8) 75 p = pr_key(rep, p, "v" as *u8); p = pr_bn(rep, p, 1); p = pr_b(rep, p, "," as *u8) 76 p = pr_key(rep, p, "kind" as *u8); p = pr_q(rep, p); p = pr_b(rep, p, "primitive_registry" as *u8); p = pr_q(rep, p); p = pr_b(rep, p, "," as *u8) 77 p = pr_key(rep, p, "tier" as *u8); p = pr_q(rep, p); p = pr_b(rep, p, "mcp-tools" as *u8); p = pr_q(rep, p); p = pr_b(rep, p, "," as *u8) 78 p = pr_key(rep, p, "source" as *u8); p = pr_q(rep, p); p = pr_b(rep, p, "knowledge/tool_schemas.conf" as *u8); p = pr_q(rep, p); p = pr_b(rep, p, "," as *u8) 79 p = pr_key(rep, p, "primitives" as *u8); p = pr_b(rep, p, "[" as *u8) 80 var scanned: i64 = 0 81 var typedc: i64 = 0 82 var genericc: i64 = 0 83 var dropped: i64 = 0 84 var first: i64 = 1 85 var i: i64 = 0 86 while i < n { 87 var e2: i64 = i 88 while e2 < n { if buf[e2] == (10 as u8) { let z: i64 = e2; e2 = n + 1000 + z } else { e2 = e2 + 1 } } 89 if e2 > n { e2 = e2 - n - 1000 } 90 if e2 > i { 91 let c0: i64 = buf[i] 92 if c0 != 35 { 93 // split [i, e2) into up to 8 tab fields; field 8 absorbs trailing tabs 94 var nf: i64 = 1 95 fs[0] = i 96 var q: i64 = i 97 while q < e2 { if buf[q] == (9 as u8) { if nf < 8 { fe[nf-1] = q; fs[nf] = q + 1; nf = nf + 1 } } q = q + 1 } 98 fe[nf-1] = e2 99 let nlen: i64 = fe[0] - fs[0] 100 if nlen > 0 { 101 if scanned < K_MAGIC_1024 { 102 var ro: i64 = 0 103 var destr: i64 = 0 104 var idem: i64 = 0 105 var opn: i64 = 0 106 if nf >= 3 { if buf[fs[2]] == (49 as u8) { ro = 1 } } 107 if nf >= 4 { if buf[fs[3]] == (49 as u8) { destr = 1 } } 108 if nf >= 5 { if buf[fs[4]] == (49 as u8) { idem = 1 } } 109 if nf >= 6 { if buf[fs[5]] == (49 as u8) { opn = 1 } } 110 var typed: i64 = 0 111 if nf >= 8 { if fe[7] > fs[7] { typed = 1 } } 112 let dlen: i64 = pr_domain(buf, fs[0], fe[0], dom) 113 if first == 1 { first = 0 } else { p = pr_b(rep, p, "," as *u8) } 114 p = pr_b(rep, p, "{" as *u8) 115 p = pr_key(rep, p, "primitive_id" as *u8); p = pr_q(rep, p); p = pr_je(rep, p, buf, fs[0], fe[0]); p = pr_q(rep, p); p = pr_b(rep, p, "," as *u8) 116 p = pr_key(rep, p, "title" as *u8); p = pr_q(rep, p); if nf >= 2 { p = pr_je(rep, p, buf, fs[1], fe[1]) } p = pr_q(rep, p); p = pr_b(rep, p, "," as *u8) 117 p = pr_key(rep, p, "domain" as *u8); p = pr_q(rep, p); p = pr_je(rep, p, dom, 0, dlen); p = pr_q(rep, p); p = pr_b(rep, p, "," as *u8) 118 p = pr_key(rep, p, "capabilities" as *u8); p = pr_b(rep, p, "[" as *u8) 119 p = pr_q(rep, p); p = pr_je(rep, p, dom, 0, dlen); p = pr_q(rep, p); p = pr_b(rep, p, "," as *u8) 120 p = pr_q(rep, p); if ro == 1 { p = pr_b(rep, p, "read-only" as *u8) } else { p = pr_b(rep, p, "mutating" as *u8) } p = pr_q(rep, p); p = pr_b(rep, p, "," as *u8) 121 p = pr_q(rep, p); if opn == 1 { p = pr_b(rep, p, "reaches-external" as *u8) } else { p = pr_b(rep, p, "sovereign-local" as *u8) } p = pr_q(rep, p) 122 p = pr_b(rep, p, "]," as *u8) 123 p = pr_key(rep, p, "signature" as *u8); p = pr_q(rep, p); if typed == 1 { p = pr_je(rep, p, buf, fs[7], fe[7]) } else { p = pr_b(rep, p, "(generic: no typed argv grammar; back-compat)" as *u8) } p = pr_q(rep, p); p = pr_b(rep, p, "," as *u8) 124 p = pr_key(rep, p, "output" as *u8); p = pr_q(rep, p); if nf >= 7 { p = pr_je(rep, p, buf, fs[6], fe[6]) } p = pr_q(rep, p); p = pr_b(rep, p, "," as *u8) 125 p = pr_key(rep, p, "safety" as *u8); p = pr_b(rep, p, "{" as *u8) 126 p = pr_key(rep, p, "read_only" as *u8); p = pr_bn(rep, p, ro); p = pr_b(rep, p, "," as *u8) 127 p = pr_key(rep, p, "destructive" as *u8); p = pr_bn(rep, p, destr); p = pr_b(rep, p, "," as *u8) 128 p = pr_key(rep, p, "idempotent" as *u8); p = pr_bn(rep, p, idem); p = pr_b(rep, p, "," as *u8) 129 p = pr_key(rep, p, "open_world" as *u8); p = pr_bn(rep, p, opn) 130 p = pr_b(rep, p, "}," as *u8) 131 p = pr_key(rep, p, "typed" as *u8); p = pr_bn(rep, p, typed) 132 p = pr_b(rep, p, "}" as *u8) 133 scanned = scanned + 1 134 if typed == 1 { typedc = typedc + 1 } else { genericc = genericc + 1 } 135 } else { dropped = dropped + 1 } 136 } 137 } 138 } 139 i = e2 + 1 140 } 141 p = pr_b(rep, p, "]," as *u8) 142 p = pr_key(rep, p, "envelope" as *u8); p = pr_b(rep, p, "{" as *u8) 143 p = pr_key(rep, p, "scanned" as *u8); p = pr_bn(rep, p, scanned); p = pr_b(rep, p, "," as *u8) 144 p = pr_key(rep, p, "typed_signature" as *u8); p = pr_bn(rep, p, typedc); p = pr_b(rep, p, "," as *u8) 145 p = pr_key(rep, p, "generic" as *u8); p = pr_bn(rep, p, genericc); p = pr_b(rep, p, "," as *u8) 146 p = pr_key(rep, p, "cap" as *u8); p = pr_bn(rep, p, K_MAGIC_1024); p = pr_b(rep, p, "," as *u8) 147 p = pr_key(rep, p, "dropped_over_cap" as *u8); p = pr_bn(rep, p, dropped); p = pr_b(rep, p, "," as *u8) 148 p = pr_key(rep, p, "note" as *u8); p = pr_q(rep, p); p = pr_b(rep, p, "tier-1 MCP tools; capabilities are structural facets from data; verb-semantic tags + tier-2 ecograph organ deps are F781b/F231" as *u8); p = pr_q(rep, p) 149 p = pr_b(rep, p, "}}" as *u8) 150 if p >= K_MAGIC_1048500 { pr_w(1, "PRIM-REGISTRY verdict=REFUSED output-window-saturated: raise caps, a truncated manifest is invalid JSON\n" as *u8); sys_exit(5); return 5 } 151 let tmpfd: i64 = sys_openat_wr(tmppath, 420) 152 if tmpfd < 0 { pr_w(1, "PRIM-REGISTRY verdict=WRITE-FAIL tmp-open\n" as *u8); sys_exit(5); return 5 } 153 sys_write(tmpfd, rep, p) 154 sys_close(tmpfd) 155 let rr: i64 = sys_renameat(tmppath, outpath) 156 if rr < 0 { pr_w(1, "PRIM-REGISTRY verdict=WRITE-FAIL rename\n" as *u8); sys_exit(5); return 5 } 157 let srep: *u8 = sys_mmap(K_MAGIC_2048) 158 var sp: i64 = 0 159 sp = pr_b(srep, sp, "PRIM-REGISTRY scanned=" as *u8); sp = pr_bn(srep, sp, scanned) 160 sp = pr_b(srep, sp, " typed=" as *u8); sp = pr_bn(srep, sp, typedc) 161 sp = pr_b(srep, sp, " generic=" as *u8); sp = pr_bn(srep, sp, genericc) 162 sp = pr_b(srep, sp, " dropped=" as *u8); sp = pr_bn(srep, sp, dropped) 163 sp = pr_b(srep, sp, " cap=1024 bytes=" as *u8); sp = pr_bn(srep, sp, p) 164 sp = pr_b(srep, sp, " out=" as *u8); sp = pr_b(srep, sp, outpath) 165 sp = pr_b(srep, sp, " verdict=GREEN\n" as *u8) 166 sys_write(1, srep, sp) 167 sys_exit(0) 168 return 0 169}