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}