feat: sync g14 harness and device-pod cli

This commit is contained in:
Codex
2026-05-31 05:07:16 +08:00
parent 1ebbfe2bfe
commit 5bf4bf0f47
17 changed files with 2086 additions and 210 deletions
+56
View File
@@ -149,6 +149,62 @@ test("device-pod-cli preserves common v0.1 hardware options in REST job args", a
});
});
test("device-pod-cli exposes workspace writes, keil source edits, and UART JSON-RPC as REST jobs", async () => {
const seen: any[] = [];
const fetchImpl = async (url, init) => {
seen.push({ url: String(url), body: JSON.parse(String(init?.body ?? "{}")) });
return jsonResponse(202, { ok: true, status: "running", job: { id: `job_${seen.length}`, status: "running" } });
};
const put = await runDevicePodCli([
"--api-base-url", "http://cloud.test",
"--session-token", "session-a",
"--reason", "write file",
"--lease-token", "lease-a",
"device-pod-71-freq:workspace:/projects/app",
"put",
"User/new.c",
"--create-dirs"
], { fetchImpl, stdinText: "int main(void) { return 0; }\n", now: () => "2026-05-29T00:00:00.000Z" });
assert.equal(put.exitCode, 0);
assert.equal(seen[0].body.intent, "workspace.put");
assert.equal(seen[0].body.args.path, "projects/app/User/new.c");
assert.equal(seen[0].body.args.createDirs, true);
assert.equal(Buffer.from(seen[0].body.args.contentB64, "base64").toString("utf8"), "int main(void) { return 0; }\n");
const keil = await runDevicePodCli([
"--api-base-url", "http://cloud.test",
"--session-token", "session-a",
"--reason", "add source",
"--lease-token", "lease-a",
"device-pod-71-freq:workspace:/projects/app",
"keil",
"add-source",
"User/new.c",
"--group", "User"
], { fetchImpl, now: () => "2026-05-29T00:00:00.000Z" });
assert.equal(keil.exitCode, 0);
assert.deepEqual(seen[1].body.args, { action: "add-source", base: "projects/app", path: "User/new.c", group: "User" });
const jsonrpc = await runDevicePodCli([
"--api-base-url", "http://cloud.test",
"--session-token", "session-a",
"--reason", "gpio read",
"--lease-token", "lease-a",
"device-pod-71-freq:io-probe:/uart/1",
"jsonrpc",
"gpio.read",
"--params-json", "{\"pin\":\"PB5\"}",
"--require-jsonrpc-result",
"--expect-result-field", "pin",
"--expect-result-field", "value"
], { fetchImpl, now: () => "2026-05-29T00:00:00.000Z" });
assert.equal(jsonrpc.exitCode, 0);
assert.equal(seen[2].body.intent, "io.uart.jsonrpc");
assert.deepEqual(seen[2].body.args.expectResultField, ["pin", "value"]);
assert.equal(seen[2].body.args.params, "{\"pin\":\"PB5\"}");
});
test("device-pod-cli rejects legacy local profile create in formal mode", async () => {
const result = await runDevicePodCli(["profile", "create", "--pod-id", "device-pod-71-freq"], { now: () => "2026-05-29T00:00:00.000Z" });
assert.equal(result.exitCode, 1);