nx_research_web.nx source
↩ module page · 117 lines · 4743 B
1// nx_research_web.nx -- the Nishi researcher, LIVE: fetch real web pages over
2// our own TLS 1.3, strip HTML to text, and run the sovereign digest (rank +
3// independent corroboration + citations). No Claude harness, no curl -- the
4// fetch is the only delegated step (sovereign TLS + CA-root DATA), the rigor is
5// ours. Composes nx_https_fetch_follow + nx_html_to_text + nx_research_digest.
6// license_tier: ORIGINAL expect_exit: 0
7
8import "nx_syscalls.nx"
9import "nx_x509_trust_store.nx"
10import "nx_trust_store_load_from_certdata.nx"
11import "nx_https_fetch_follow.nx"
12import "nx_html_to_text.nx"
13import "nx_bm25.nx"
14import "nx_research_corroborate.nx"
15import "nx_research_digest.nx"
16import "nx_source_tier.nx"
17
18func w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
19func wn(v: i64) -> i64 {
20 let b: *u8 = sys_mmap(28)
21 var m: i64 = v
22 if m < 0 { m = 0 - m; sys_write(1, "-" as *u8, 1) }
23 let t: *u8 = sys_mmap(28)
24 var k: i64 = 0
25 if m == 0 { t[0] = 48 as u8; k = 1 }
26 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
27 var i: i64 = 0
28 while i < k { b[i] = t[k - 1 - i]; i = i + 1 }
29 sys_write(1, b, k); return 0
30}
31func slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
32
33func main() -> i64 {
34 let r: i64 = nx_trust_store_load_from_certdata("/tmp/mozilla_certdata.txt" as *u8, 300, 4194304)
35 if r <= 0 { w("STORE-FAIL (need /tmp/mozilla_certdata.txt)\n" as *u8); return 1 }
36 let store: *TrustStore = r as *TrustStore
37
38 let nsrc: i64 = 3
39 let urls: **u8 = sys_mmap(nsrc * 8) as **u8
40 urls[0] = "https://en.wikipedia.org/wiki/Neural_radiance_field" as *u8
41 urls[1] = "https://arxiv.org/abs/2308.04079" as *u8
42 urls[2] = "https://github.com/graphdeco-inria/gaussian-splatting" as *u8
43
44 let src_ids: *i64 = sys_mmap(nsrc * 8) as *i64
45 let src_classes: *i64 = sys_mmap(nsrc * 8) as *i64
46 let src_texts: **u8 = sys_mmap(nsrc * 8) as **u8
47 let src_lens: *i64 = sys_mmap(nsrc * 8) as *i64
48
49 let raw: *u8 = sys_mmap(8388608)
50 w("--- LIVE FETCH (sovereign TLS) ---\n" as *u8)
51 var i: i64 = 0
52 while i < nsrc {
53 let st: *i64 = (sys_mmap(8)) as *i64
54 let n: i64 = nx_https_fetch_follow(urls[i], store, raw, 8388608, 6, st)
55 w(" "); w(urls[i]); w(" status=" as *u8); wn(st[0]); w(" raw=" as *u8); wn(n)
56 let txt: *u8 = sys_mmap(8388608)
57 var tn: i64 = 0
58 if n > 0 { tn = nx_html_to_text(raw, n, txt, 8388608) }
59 src_ids[i] = i + 1
60 src_classes[i] = nx_tier_of_url(urls[i])
61 src_texts[i] = txt
62 src_lens[i] = tn
63 w(" text=" as *u8); wn(tn); w(" class=" as *u8); wn(src_classes[i]); w("\n" as *u8)
64 i = i + 1
65 }
66
67 let nclaims: i64 = 5
68 let claim_ids: *i64 = sys_mmap(nclaims * 8) as *i64
69 let claim_terms: **u8 = sys_mmap(nclaims * 8) as **u8
70 let claim_lens: *i64 = sys_mmap(nclaims * 8) as *i64
71 claim_ids[0] = 10
72 claim_terms[0] = "photogrammetry" as *u8
73 claim_ids[1] = 20
74 claim_terms[1] = "neural" as *u8
75 claim_ids[2] = 30
76 claim_terms[2] = "mesh" as *u8
77 claim_ids[3] = 40
78 claim_terms[3] = "camera" as *u8
79 claim_ids[4] = 50
80 claim_terms[4] = "gaussian" as *u8
81 var ci: i64 = 0
82 while ci < nclaims { claim_lens[ci] = slen(claim_terms[ci] as *u8); ci = ci + 1 }
83
84 let nterms: i64 = 2
85 let q_terms: **u8 = sys_mmap(nterms * 8) as **u8
86 let q_lens: *i64 = sys_mmap(nterms * 8) as *i64
87 q_terms[0] = "reconstruction" as *u8
88 q_terms[1] = "mesh" as *u8
89 q_lens[0] = slen(q_terms[0] as *u8)
90 q_lens[1] = slen(q_terms[1] as *u8)
91
92 let out_order: *i64 = sys_mmap(nsrc * 8) as *i64
93 let out_conf: *i64 = sys_mmap(nclaims * 8) as *i64
94 let corrob: *NxCorrob = nx_corrob_new(64)
95 nx_research_digest(src_ids, src_classes, src_texts, src_lens, nsrc,
96 claim_ids, claim_terms, claim_lens, nclaims,
97 q_terms, q_lens, nterms, out_order, out_conf, corrob)
98
99 w("--- RANKED by 'reconstruction mesh' ---\n" as *u8)
100 i = 0
101 while i < nsrc {
102 let idx: i64 = out_order[i]
103 w(" #" as *u8); wn(i + 1); w(" src" as *u8); wn(src_ids[idx]); w(" textlen=" as *u8); wn(src_lens[idx]); w("\n" as *u8)
104 i = i + 1
105 }
106 w("--- CLAIMS term: raw/indep -> conf(0=none,1=single,2=confirmed) ---\n" as *u8)
107 ci = 0
108 while ci < nclaims {
109 w(" "); w(claim_terms[ci])
110 w(": raw=" as *u8); wn(nx_corrob_raw_count(corrob, claim_ids[ci]))
111 w(" indep=" as *u8); wn(nx_corrob_independent_count(corrob, claim_ids[ci]))
112 w(" conf=" as *u8); wn(out_conf[ci])
113 w("\n" as *u8)
114 ci = ci + 1
115 }
116 return 0
117}