sovereign-mamba / src /router.ts
SNAPKITTYWEST's picture
Add sovereign-mamba source: Modelfile, kernel Prolog gates, sovereign_crypto Rust, Lean4, corpus policy
0427fad verified
Raw
History Blame Contribute Delete
5.29 kB
import { execFile } from "node:child_process";
import { promisify } from "node:util";
import { readFileSync } from "node:fs";
import { join } from "node:path";
const execFileAsync = promisify(execFile);
const SWIPL = process.env.SWIPL_PATH ?? "swipl";
const LEAN = process.env.LEAN_PATH ?? "lake";
const BASH_DENY = [/rm\s+-rf/, /sudo/, /chmod/, /chown/, /passwd/, /curl/, /wget/, /ssh/, /scp/];
export async function routeSyscall(
syscall: string,
params: Record<string, unknown>
): Promise<{ status: string; result?: unknown; error?: string }> {
try {
switch (syscall) {
case "lean_gate":
return await routeLean(params);
case "prolog_gate":
return await routeProlog(params);
case "tavily_search":
case "google_search":
return await routeSearch(params);
case "bash_exec":
return await routeBash(params);
case "curl_fetch":
return await routeCurl(params);
default:
return { status: "NO_ROUTE", error: `No route for syscall: ${syscall}` };
}
} catch (e: any) {
return { status: "ERROR", error: e.message };
}
}
async function routeLean(params: Record<string, unknown>): Promise<{ status: string; result?: unknown }> {
const target = (params.path as string) ?? join(process.cwd(), "lean4");
let buildOk = true, buildOut = "", buildErr = "";
try {
const r = await execFileAsync(LEAN, ["build"], { cwd: target, timeout: 120_000, encoding: "utf8" });
buildOut = r.stdout; buildErr = r.stderr;
} catch (e: any) { buildOk = false; buildOut = e.stdout ?? ""; buildErr = e.stderr ?? e.message; }
let scanRaw = "";
try {
const { stdout } = await execFileAsync("rg", ["-n", "--no-heading", "\\bsorry\\b|\\badmit\\b|\\baxiom\\b|\\bopaque\\b", target, "--glob", "*.lean"], { encoding: "utf8", timeout: 30_000 });
scanRaw = stdout;
} catch { scanRaw = ""; }
const hasSorry = /\bsorry\b/.test(scanRaw);
const hasAdmit = /\badmit\b/.test(scanRaw);
const hasAxiom = /\baxiom\b/.test(scanRaw);
const hasOpaque = /\bopaque\b/.test(scanRaw);
let status: string;
if (buildOk && !hasSorry && !hasAdmit && !hasAxiom && !hasOpaque) status = "PROVED";
else if (hasSorry || hasAdmit) status = "SPEC";
else status = "OBLIGATION";
return { status: "EXECUTED", result: { status, build: { ok: buildOk, stdout: buildOut.slice(0, 4000), stderr: buildErr.slice(0, 4000) }, scan: { sorry: hasSorry, admit: hasAdmit, axiom: hasAxiom, opaque: hasOpaque } } };
}
async function routeProlog(params: Record<string, unknown>): Promise<{ status: string; result?: unknown }> {
const q = (params.query as string) ?? "true";
const kernelFile = (params.file as string) ?? join(import.meta.dirname ?? ".", "kernel", "syscalls.pl");
try {
const { stdout, stderr } = await execFileAsync(SWIPL, ["-g", q, "-t", "halt.", kernelFile], { encoding: "utf8", timeout: 15_000 });
const output = stdout.trim() || stderr.trim();
return { status: "EXECUTED", result: { success: !output.includes("error"), output, kernel: "syscalls.pl" } };
} catch (e: any) {
return { status: "ERROR", result: { success: false, output: e.message } };
}
}
async function routeSearch(params: Record<string, unknown>): Promise<{ status: string; result?: unknown }> {
const query = params.query as string;
const apiKey = process.env.TAVILY_API_KEY;
if (!apiKey) return { status: "NO_KEY" };
try {
const r = await fetch("https://api.tavily.com/search", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ api_key: apiKey, query, max_results: 5 }),
});
const data = await r.json() as { results?: unknown[] };
return { status: "EXECUTED", result: { status: "FOUND", query, results: data.results ?? [] } };
} catch (e: any) {
return { status: "ERROR", error: e.message };
}
}
async function routeBash(params: Record<string, unknown>): Promise<{ status: string; result?: unknown }> {
const command = params.command as string;
if (!command) return { status: "ERROR", error: "command required" };
if (BASH_DENY.some((rx) => rx.test(command))) return { status: "REJECTED", error: "denied pattern" };
try {
const { stdout, stderr } = await execFileAsync("bash", ["-c", command], { timeout: 30_000, encoding: "utf8", maxBuffer: 1024 * 1024 });
return { status: "EXECUTED", result: { status: "EXECUTED", command, stdout: stdout.slice(0, 8000), stderr: stderr.slice(0, 4000) } };
} catch (e: any) {
return { status: "ERROR", result: { status: "ERROR", command, error: e.message } };
}
}
async function routeCurl(params: Record<string, unknown>): Promise<{ status: string; result?: unknown }> {
const url = params.url as string;
if (!url) return { status: "ERROR", error: "url required" };
try {
const { stdout } = await execFileAsync("curl", ["-sL", "--max-time", "15", url], { timeout: 20_000, encoding: "utf8", maxBuffer: 1024 * 1024 });
return { status: "EXECUTED", result: { status: "FETCHED", url, body: stdout.slice(0, 8000) } };
} catch (e: any) {
return { status: "ERROR", result: { status: "ERROR", url, error: e.message } };
}
}