Files
vercel-labs--zerolang/scripts/agent-repair-demo.mts
T
wehub-resource-sync e7738de6d2
CI / Deep Native Runtime Cases (1/6) (push) Has been skipped
CI / Native Preflight (push) Failing after 1s
CI / Native Runtime Cases (1/2) (push) Failing after 0s
CI / Native Runtime Cases (2/2) (push) Failing after 1s
CI / Native Metadata Reports (push) Failing after 0s
CI / Native Direct Backend Artifacts (push) Failing after 0s
CI / Native Sanitizer Smoke (push) Failing after 1s
CI / Command Contract Snapshots (push) Failing after 1s
CI / Deep Conformance Suite (push) Has been skipped
CI / Graph Build Perf (push) Failing after 1s
CI / Deep Native Preflight (push) Has been skipped
CI / Deep Native Runtime Cases (2/6) (push) Has been skipped
CI / Deep Native Runtime Cases (3/6) (push) Has been skipped
CI / Conformance Suite (push) Failing after 1s
CI / Workspace Checks (push) Failing after 0s
CI / Deep Native Runtime Cases (5/6) (push) Has been skipped
CI / Deep Native Runtime Cases (6/6) (push) Has been skipped
CI / Deep Native Runtime Cases (4/6) (push) Has been skipped
CI / Deep Graph Build Perf (push) Has been skipped
chore: import upstream snapshot with attribution
2026-07-13 12:29:30 +08:00

97 lines
3.6 KiB
TypeScript
Executable File

#!/usr/bin/env -S node --experimental-strip-types --disable-warning=ExperimentalWarning
import assert from "node:assert/strict";
import { execFileSync } from "node:child_process";
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
import { join } from "node:path";
const outDir = ".zero/agent-repair-demo";
mkdirSync(outDir, { recursive: true });
const brokenSource = `pub fn main(world: World) -> Void raises {
let src: [4]u8 = [1, 2, 3, 4]
let dst: [4]u8 = [0, 0, 0, 0]
let copied: usize = std.mem.copy(dst, src)
if copied == 4 {
check world.out.write("copied\\n")
}
}
`;
const workFile = join(outDir, "main.0");
const workGraph = join(outDir, "main.graph");
writeFileSync(workFile, brokenSource);
function zeroJson(args, allowFailure = false) {
try {
return JSON.parse(execFileSync("bin/zero", args, { encoding: "utf8" }));
} catch (error) {
if (!allowFailure) throw error;
return JSON.parse(error.stdout.toString());
}
}
const importPlan = zeroJson(["import", "--json", "--format", "binary", "--out", workGraph, workFile], true);
assert.equal(importPlan.ok, false);
assert.equal(importPlan.diagnostics[0].code, "TYP009");
assert.equal(importPlan.diagnostics[0].repair.id, "make-binding-mutable");
const explain = zeroJson(["explain", "--json", "TYP009"]);
assert.equal(explain.code, "TYP009");
assert.equal(explain.repair.id, "make-binding-mutable");
const repair = importPlan.diagnostics[0].repair;
assert.equal(repair.id, "make-binding-mutable");
const fixedSource = brokenSource
.replace(" let dst: [4]u8", " var dst: [4]u8")
.replace(" let _copied: i32", " let _copied: usize");
writeFileSync(workFile, fixedSource);
const fixedImport = zeroJson(["import", "--json", "--format", "binary", "--out", workGraph, workFile]);
assert.equal(fixedImport.ok, true);
const fixed = zeroJson(["check", "--json", workGraph]);
assert.equal(fixed.ok, true);
assert.equal(fixed.diagnostics.length, 0);
const projectDir = join(outDir, "project");
rmSync(projectDir, { recursive: true, force: true });
execFileSync("bin/zero", ["new", "package", projectDir], { stdio: ["ignore", "ignore", "pipe"] });
function assertNoC(body) {
assert.equal(body.generatedCBytes ?? 0, 0);
assert.equal(body.cBridgeFallback ?? body.selfHostRouting?.cBridge?.required ?? false, false);
assert.notEqual(body.legacy, true);
}
const projectCheck = zeroJson(["check", "--json", projectDir]);
assert.equal(projectCheck.ok, true);
assertNoC(projectCheck);
const projectTest = zeroJson(["test", "--json", projectDir]);
assert.equal(projectTest.ok, true);
assert.equal(projectTest.testBackend, "direct-program-graph");
assertNoC(projectTest);
const projectMain = join(projectDir, "src", "main.0");
const projectMainSource = readFileSync(projectMain, "utf8");
writeFileSync(projectMain, projectMainSource.split('\n\ntest "package import works"')[0] + "\n");
const projectGraph = zeroJson(["inspect", "--json", projectDir]);
assert.equal(projectGraph.selfHostRouting.cBridge.required, false);
const projectDoc = zeroJson(["doc", "--json", projectDir]);
assertNoC(projectDoc);
const projectSize = zeroJson(["size", "--json", projectDir]);
assertNoC(projectSize);
const projectMem = zeroJson(["mem", "--json", projectDir]);
assertNoC(projectMem);
const releaseOut = join(outDir, "project-linux-release");
const projectRelease = zeroJson(["build", "--json", "--release", "tiny", "--target", "linux-musl-x64", projectDir, "--out", releaseOut]);
assert.equal(projectRelease.emit, "exe");
assert.equal(projectRelease.compiler, "zero-elf64");
assertNoC(projectRelease);
console.log("agent repair demo ok");