kittybrowse / scripts /write-handshake.mjs
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/kittybrowse
39b3fb5 verified
Raw
History Blame Contribute Delete
4.89 kB
import { createHash } from "node:crypto";
import { mkdir, readFile, writeFile } from "node:fs/promises";
import { dirname, join, resolve } from "node:path";
import { fileURLToPath } from "node:url";
const projectRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
const controlRoot = resolve(projectRoot, "..");
const shadowRoot = join(controlRoot, "shadow-orchestrator");
const localHandshakePath = join(projectRoot, "lineage", "kittybrowse-shadow-handshake.json");
const shadowHandshakePath = join(shadowRoot, "lineage", "stone-4-kittybrowse-handshake.json");
const shadowStone3Path = join(shadowRoot, "lineage", "stone-3-handshake.json");
async function sha256(path) {
const bytes = await readFile(path);
return createHash("sha256").update(bytes).digest("hex");
}
async function readJson(path) {
return JSON.parse(await readFile(path, "utf8"));
}
const shadowStone3 = await readJson(shadowStone3Path);
const sourceFiles = {
kitty_protocol: "docs/kitty-protocol-v1.md",
apl_wasm_boundary: "docs/apl-wasm-runtime.md",
apl_wasm_plugin: "plugins/vm/apl-wasm/kitty.plugin.json",
runtime_protocol: "src/shared/protocol.ts",
runtime_mesh: "src/runtime/mesh.ts",
runtime_agent: "src/runtime/agent-runtime.ts",
rust_nats_doc: "docs/nats-rust-bridge.md",
rust_bridge_manifest: "crates/rust-vm-bridge/Cargo.toml",
rust_bridge_lib: "crates/rust-vm-bridge/src/lib.rs",
shadow_stone_3: "../shadow-orchestrator/lineage/stone-3-handshake.json",
};
const sourceHashes = {};
for (const [key, rel] of Object.entries(sourceFiles)) {
sourceHashes[key] = await sha256(resolve(projectRoot, rel));
}
const handshake = {
protocol: "shadow-grisp/json-handshake-v1",
from: {
stone: 4,
model: "GPT-5 Codex",
repo: "kittybrowse",
},
to: {
stone: shadowStone3.from?.stone ?? 3,
model: shadowStone3.from?.model ?? "GPT-5 Codex",
repo: "shadow-orchestrator",
handshake: "../shadow-orchestrator/lineage/stone-3-handshake.json",
},
mode: "kittybrowse-apl-wasm-control-plane-meet-in-middle",
timestamp_utc: new Date().toISOString(),
verification: {
shadow_protocol: shadowStone3.protocol,
shadow_mode: shadowStone3.mode,
shadow_chain_valid: shadowStone3.verification?.chain_valid === true,
shadow_tests: shadowStone3.verification?.tests ?? "unknown",
kittybrowse_tests: "npm test passed",
kittybrowse_audit: "npm audit --audit-level=high passed",
kittybrowse_runtime: "npm run runtime boots with vmTarget=apl-wasm",
apl_wasm_primary: true,
javascript_role: "UI/IPC/NATS envelope glue only",
},
integration: {
chromium_shell: "Electron BrowserWindow with preload IPC bridge",
agent_runtime: "src/runtime/agent-runtime.ts",
event_backbone: "NATS when NATS_URL is available; local mesh fallback otherwise",
rust_nats_worker: "crates/rust-vm-bridge subscribes to kitty.task.run and publishes kitty.task.result with async-nats",
scheduler: "src/shared/entropy.ts",
primary_vm_target: "apl-wasm",
existing_apl_wasm_sources: [
"../DEVFLOW-FINANCE/bridges/apl/finance.apl",
"../DEVFLOW-FINANCE/bridges/rust/apl_bridge.rs",
"../DEVFLOW-FINANCE/snapkitty-wasm/src/lib.rs",
"../DEVFLOW-FINANCE/collectivekitty/public/wasm/snapkitty_wasm_bg.wasm"
],
mirror_files: [
"lineage/kittybrowse-shadow-handshake.json",
"../shadow-orchestrator/lineage/stone-4-kittybrowse-handshake.json"
]
},
coreRule: shadowStone3.coreRule,
nonRecursiveLaw: shadowStone3.nonRecursiveLaw,
handoff: {
to_claude: "Consume stone-4-kittybrowse-handshake.json as the JSON bridge from Shadow Orchestrator to KittyBrowse. Treat KittyBrowse as a Chromium control plane whose execution authority is APL/Rust/WASM, not JavaScript.",
to_next_stone: "Replace simulated apl-wasm adapter output with a real call into the DEVFLOW-FINANCE APL/WASM package or a signed NATS subject handled by that bridge.",
message: "KittyBrowse now speaks the Shadow lineage handshake format and anchors its agent runtime to the APL/WASM substrate."
},
state: {
class: "INTEGRATED",
tick: 4,
contractsValid: true,
proofsValid: true,
shadowLinked: true,
aplWasmLinked: true,
wormAppendPending: true
},
provenance: {
sourceFiles,
sourceHashes,
}
};
const payload = `${JSON.stringify(handshake, null, 2)}\n`;
await mkdir(dirname(localHandshakePath), { recursive: true });
await mkdir(dirname(shadowHandshakePath), { recursive: true });
await writeFile(localHandshakePath, payload);
await writeFile(shadowHandshakePath, payload);
console.log(JSON.stringify({
wrote: [localHandshakePath, shadowHandshakePath],
protocol: handshake.protocol,
mode: handshake.mode,
sourceHashes,
}, null, 2));