Implement AXIS parity UI and execution baseline

This commit is contained in:
2026-08-23 07:28:37 +08:00
parent 1325504544
commit 06f96f85e5
463 changed files with 84893 additions and 692 deletions

View File

@@ -0,0 +1,24 @@
import assert from "node:assert/strict";
import { WorkspaceRuntime } from "../workspace/runtime.mjs";
import { resolveResources } from "../workspace/resource-resolver.mjs";
const workspace = new WorkspaceRuntime({ files: {
"config/main.ini": "[HAL]\nHALFILE = machine.hal\n[EMC]\nTOOL_TABLE = tools.tbl\n[RS274NGC]\nPARAMETER_FILE = vars.var\nPROGRAM = main.ngc\n[PYTHON]\nPYTHONFILE = hooks.py\n[DISPLAY]\nVCP = panel.xml\n[CLASSICLADDER]\nCLPFILE = plc.clp\n",
"config/machine.hal": "loadrt sim\n", "config/tools.tbl": "T1 P1\n", "config/vars.var": "#1 = 2\n", "config/main.ngc": "G21\n", "config/hooks.py": "print('ok')\n", "config/panel.xml": "<vcp/>\n", "config/plc.clp": "classicladder\n",
} });
const graph = resolveResources({ workspace, entrypoint: "config/main.ini" });
assert.equal(graph.status, "ready");
assert.equal(graph.resolved_count, 7);
assert.equal(graph.blocked_count, 0);
assert.equal(new Set(graph.resources.map((row) => row.type)).size, 7);
assert.match(graph.state_hash, /^fnv1a64:/);
const missing = resolveResources({ workspace: new WorkspaceRuntime({ files: { "config/main.ini": "[HAL]\nHALFILE = missing.hal\n" } }), entrypoint: "config/main.ini" });
assert.equal(missing.status, "blocked");
assert.equal(missing.resources[0].code, "resource_missing");
const host = resolveResources({ workspace: new WorkspaceRuntime({ files: { "config/main.ini": "[PYTHON]\nPYTHONFILE = /tmp/x.py\n" } }), entrypoint: "config/main.ini" });
assert.equal(host.resources[0].code, "resource_host_path");
const duplicate = resolveResources({ workspace, entrypoint: "config/main.ini", explicit: [{ type: "hal", path: "machine.hal" }] });
assert.equal(duplicate.resources.some((row) => row.code === "resource_duplicate"), true);
const second = resolveResources({ workspace, entrypoint: "config/main.ini" });
assert.equal(second.state_hash, graph.state_hash);
console.log(`resource_resolver=passed resolved=${graph.resolved_count} blocked=${graph.blocked_count} state_hash=${graph.state_hash}`);