code wiki / _hdl_build / _claude_meter_authored.nx
_claude_meter_authored.nx source
↩ module page · 146 lines · 6821 B
1// AUTHORED BY THE NISHI BUILDER (nx_module_author claude-meter template) -- S6 Claude-use KPI.
2import "nx_syscalls.nx"
3func _cm_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
4func _cm_num(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=48+(m%10);m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 }
5func _cm_fputs(fd2: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd2,s,n); return 0 }
6func _cm_fnum(fd2: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(fd2,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=48+(m%10);m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(fd2,bb,k); return 0 }
7func cm_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
8func cm_find(buf: *u8, s: i64, e: i64, pat: *u8) -> i64 {
9 let pl: i64 = cm_slen(pat)
10 var i: i64 = s
11 while i + pl <= e {
12 var k: i64 = 0
13 var hit: i64 = 1
14 while k < pl { if buf[i+k] != pat[k] { hit = 0; k = pl } else { k = k + 1 } }
15 if hit == 1 { return i }
16 i = i + 1
17 }
18 return 0 - 1
19}
20func cm_read(path: *u8, buf: *u8, cap: i64) -> i64 {
21 let fd2: i64 = sys_openat_rd(path)
22 if fd2 < 0 { return 0 - 1 }
23 var total: i64 = 0
24 var go: i64 = 1
25 while go == 1 {
26 let base: i64 = buf as i64
27 let n: i64 = sys_read(fd2, (base + total) as *u8, cap - total)
28 if n <= 0 { go = 0 } else { total = total + n }
29 if total >= cap { go = 0 }
30 }
31 sys_close(fd2)
32 return total
33}
34func cm_scan_llm(buf: *u8, n: i64, out: *i64) -> i64 {
35 var i: i64 = 0
36 while i < n {
37 var le: i64 = i
38 while le < n { if buf[le] == (10 as u8) { break } le = le + 1 }
39 if cm_find(buf, i, le, "[LLM]" as *u8) >= 0 {
40 if cm_find(buf, i, le, "- [ ]" as *u8) >= 0 { out[0] = out[0] + 1 }
41 if cm_find(buf, i, le, "- [x]" as *u8) >= 0 { out[1] = out[1] + 1 }
42 }
43 i = le + 1
44 }
45 return 0
46}
47func cm_walk(dirpath: *u8, mode: i64, out: *i64) -> i64 {
48 let dfd: i64 = sys_openat_rd(dirpath)
49 if dfd < 0 { return 0 - 1 }
50 let dirbuf: *u8 = sys_mmap(1048640)
51 let pathbuf: *u8 = sys_mmap(4096)
52 let filebuf: *u8 = sys_mmap(1048592)
53 var nfiles: i64 = 0
54 var done: i64 = 0
55 while done == 0 {
56 let nb: i64 = sys_getdents64(dfd, dirbuf, 1048576)
57 if nb <= 0 { done = 1 }
58 else {
59 var off: i64 = 0
60 while off < nb {
61 let dbase: i64 = dirbuf as i64
62 let rec: *u8 = (dbase + off) as *u8
63 let rl: i64 = dirent_reclen(rec)
64 if rl <= 0 { off = nb }
65 else {
66 let name: *u8 = dirent_name(rec)
67 let nl: i64 = cm_slen(name)
68 var ismd: i64 = 0
69 if nl > 3 {
70 if name[nl-3] == (46 as u8) { if name[nl-2] == (109 as u8) { if name[nl-1] == (100 as u8) { ismd = 1 } } }
71 }
72 if ismd == 1 {
73 var p: i64 = 0
74 var q: i64 = 0
75 while dirpath[q] != (0 as u8) { pathbuf[p] = dirpath[q]; p = p + 1; q = q + 1 }
76 pathbuf[p] = 47 as u8
77 p = p + 1
78 q = 0
79 while q < nl { pathbuf[p] = name[q]; p = p + 1; q = q + 1 }
80 pathbuf[p] = 0 as u8
81 let fl: i64 = cm_read(pathbuf, filebuf, 1048576)
82 if fl > 0 {
83 nfiles = nfiles + 1
84 if mode == 1 {
85 var hd: i64 = fl
86 if hd > 2048 { hd = 2048 }
87 if cm_find(filebuf, 0, hd, "kind: tutoring" as *u8) >= 0 { out[0] = out[0] + 1 }
88 }
89 if mode == 2 { cm_scan_llm(filebuf, fl, out) }
90 }
91 }
92 off = off + rl
93 }
94 }
95 }
96 }
97 sys_close(dfd)
98 return nfiles
99}
100func cm_corpus(out: *i64) -> i64 {
101 let buf: *u8 = sys_mmap(1048592)
102 let fl: i64 = cm_read("knowledge/library/synth_corpus.log" as *u8, buf, 1048576)
103 if fl <= 0 { return 0 }
104 var i: i64 = 0
105 while i < fl {
106 var le: i64 = i
107 while le < fl { if buf[le] == (10 as u8) { break } le = le + 1 }
108 if cm_find(buf, i, le, "SYNTH " as *u8) >= 0 { out[0] = out[0] + 1 }
109 if cm_find(buf, i, le, "verdict=CONVERGED" as *u8) >= 0 { out[1] = out[1] + 1 }
110 i = le + 1
111 }
112 return 1
113}
114func main() -> i64 {
115 _cm_puts("=== BUILDER-AUTHORED CLAUDE-USE METER: tutored vs team-authored, the trend to zero ===\n" as *u8)
116 let tut: *i64 = sys_mmap(64) as *i64
117 let llm: *i64 = sys_mmap(64) as *i64
118 let cor: *i64 = sys_mmap(64) as *i64
119 let nspecs: i64 = cm_walk("knowledge/specs" as *u8, 1, tut)
120 let nproj: i64 = cm_walk("knowledge/projects" as *u8, 2, llm)
121 cm_corpus(cor)
122 _cm_puts(" specs-files=" as *u8); _cm_num(nspecs); _cm_puts(" tutoring-docs=" as *u8); _cm_num(tut[0])
123 _cm_puts(" projects-files=" as *u8); _cm_num(nproj)
124 _cm_puts(" llm-rungs-open=" as *u8); _cm_num(llm[0]); _cm_puts(" llm-rungs-closed=" as *u8); _cm_num(llm[1])
125 _cm_puts(" team-synth-runs=" as *u8); _cm_num(cor[0]); _cm_puts(" team-converged=" as *u8); _cm_num(cor[1]); _cm_puts("\n" as *u8)
126 let mfd: i64 = sys_openat_append("knowledge/status/claude_meter.log" as *u8, 0x1a4)
127 if mfd < 0 { _cm_puts(" METER LOG OPEN FAILED\n" as *u8); sys_exit(1); return 1 }
128 _cm_fputs(mfd, "METER epoch=" as *u8); _cm_fnum(mfd, sys_now_realtime_sec())
129 _cm_fputs(mfd, " tutoring_docs=" as *u8); _cm_fnum(mfd, tut[0])
130 _cm_fputs(mfd, " llm_open=" as *u8); _cm_fnum(mfd, llm[0])
131 _cm_fputs(mfd, " llm_closed=" as *u8); _cm_fnum(mfd, llm[1])
132 _cm_fputs(mfd, " team_synth_runs=" as *u8); _cm_fnum(mfd, cor[0])
133 _cm_fputs(mfd, " team_converged=" as *u8); _cm_fnum(mfd, cor[1])
134 _cm_fputs(mfd, "\n" as *u8)
135 sys_close(mfd)
136 _cm_puts(" METER line appended: knowledge/status/claude_meter.log\n" as *u8)
137 var pass: i64 = 1
138 if nspecs < 5 { pass = 0 }
139 if nproj < 2 { pass = 0 }
140 if tut[0] < 1 { pass = 0 }
141 if cor[0] < 1 { pass = 0 }
142 if pass == 1 { _cm_puts(" CLAUDE-METER GATE: PASS\n" as *u8); sys_exit(0); return 0 }
143 _cm_puts(" CLAUDE-METER GATE: FAIL (a source was empty)\n" as *u8)
144 sys_exit(1)
145 return 1
146}