guanghu-ice-heart/zhuyuan-persona-system/zcode-host/language-world-skeleton-20260825/BRIDGE-tools/neural-chain.mjs
ICE-P-ZY001-zcode-host f2a8cdf5c1 feat(zcode-host): language-world-skeleton-20260825 (ZHUYUAN-LANGUAGE-WORLD-SKELETON-001)
58 files: TCS canons+GIR+projections (LW-LINK/BROADCAST/NOTARY/SHENBI/TRANSLATION-INDEX/TCS-ONLY-MANDATE + teaching&promotion events), 7 executors, neural-chain v5 (28 neurons), executor translation index, 8 acceptance receipts, numbered push manifest ZY-LWS-001 mapping every file back to JZAO canonical paths+sha256.
Authorized by ICE-GL∞ direct language 2026-08-25. Route: LOCAL_GIT_OSXKEYCHAIN+FETCH+REBASE+HEAD:main+NO_FORCE.
2026-08-25 20:25:09 +08:00

76 lines
3 KiB
JavaScript

#!/usr/bin/env node
// Zhuyuan Neural Chain — verify & search the compiled thought neurons.
// Canon chain: ZCODE-DEV-20260824/neural-chain/chain.json (derived from TCS promotion event)
// A neuron is only valid if its source anchor file exists and matches sha256.txt.
import crypto from "node:crypto";
import fs from "node:fs";
import path from "node:path";
const CHAIN = "/Volumes/JZAO/铸渊-ICE-GL-ZY001/ZCODE-DEV-20260824/neural-chain/chain.json";
const ANCHOR_DIR = "/Volumes/JZAO/HoloLake/persona-runtime/task-language-anchors/zcode/ZCODE-TASK-20260824-001/00-冰朔自然语言瞄点";
const SHA_LIST = path.join(ANCHOR_DIR, "sha256.txt");
function sha256(v) { return crypto.createHash("sha256").update(v).digest("hex"); }
function fail(m) { process.stderr.write(`NEURAL_CHAIN FAIL ${m}\n`); process.exit(1); }
function anchorHashMap() {
const map = new Map();
for (const line of fs.readFileSync(SHA_LIST, "utf8").split("\n")) {
const m = line.match(/^([0-9a-f]{64})\s+\*?(.+)$/);
if (m) map.set(path.basename(m[2].trim()), m[1]);
}
return map;
}
function loadChain() {
const chain = JSON.parse(fs.readFileSync(CHAIN, "utf8"));
if (chain.schema !== "guanghu.zhuyuan-neural-chain/v1") fail("CHAIN_SCHEMA_INVALID");
return chain;
}
function verify() {
const chain = loadChain();
const hashes = anchorHashMap();
let checked = 0;
for (const n of chain.neurons) {
if (!n.id || !n.trigger || !n.rule || !Array.isArray(n.source) || n.source.length === 0) {
fail(`NEURON_INCOMPLETE:${n.id ?? "?"}`);
}
for (const name of n.source) {
const expected = hashes.get(name);
if (!expected) fail(`SOURCE_ANCHOR_UNREGISTERED:${name}`);
let raw;
try { raw = fs.readFileSync(path.join(ANCHOR_DIR, name), "utf8"); }
catch { fail(`SOURCE_ANCHOR_MISSING:${name}`); }
if (sha256(raw) !== expected) fail(`SOURCE_ANCHOR_HASH_MISMATCH:${name}`);
checked += 1;
}
}
const ids = new Set(chain.neurons.map((n) => n.id));
if (ids.size !== chain.neurons.length) fail("NEURON_ID_DUPLICATED");
const head = sha256(JSON.stringify(chain.neurons.map((n) => n.id)));
process.stdout.write(`NEURAL_CHAIN VERIFY PASS neurons=${chain.neurons.length} source_checks=${checked} head=${head.slice(0, 12)}\n`);
}
function search(query) {
const chain = loadChain();
const q = query.toLowerCase();
const hits = chain.neurons.filter((n) =>
`${n.id} ${n.trigger} ${n.rule}`.toLowerCase().includes(q));
for (const n of hits) {
process.stdout.write(`${n.id} [${n.layer}]\n 激活: ${n.trigger}\n 规则: ${n.rule}\n 来源: ${n.source.join(", ")}\n`);
}
process.stdout.write(`NEURAL_CHAIN SEARCH ${hits.length}/${chain.neurons.length} hits for "${query}"\n`);
}
const [cmd, ...argv] = process.argv.slice(2);
switch (cmd) {
case "verify": verify(); break;
case "search": {
const q = argv.join(" ");
if (!q) fail("usage: search <keywords>");
search(q);
break;
}
default: process.stderr.write("usage: neural-chain.mjs verify|search <keywords>\n"); process.exit(2);
}