43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
const { resolveVersionProbe, shouldUseShellForVersionProbe } =
|
|
await import("../../src/lib/acp/registry.ts");
|
|
|
|
test("resolveVersionProbe parses quoted binary paths without shell semantics", () => {
|
|
const probe = resolveVersionProbe(
|
|
"/tmp/My Custom Agent",
|
|
'"/tmp/My Custom Agent" --version',
|
|
true
|
|
);
|
|
|
|
assert.deepEqual(probe, {
|
|
command: "/tmp/My Custom Agent",
|
|
args: ["--version"],
|
|
});
|
|
});
|
|
|
|
test("resolveVersionProbe rejects custom version commands that switch binaries", () => {
|
|
const probe = resolveVersionProbe("/tmp/custom-agent", 'bash -lc "id"', true);
|
|
assert.equal(probe, null);
|
|
});
|
|
|
|
test("resolveVersionProbe rejects shell metacharacters in version commands", () => {
|
|
const probe = resolveVersionProbe(
|
|
"/tmp/custom-agent",
|
|
"/tmp/custom-agent --version; touch /tmp/pwned",
|
|
true
|
|
);
|
|
assert.equal(probe, null);
|
|
});
|
|
|
|
test("shouldUseShellForVersionProbe preserves Windows npm wrapper detection", () => {
|
|
assert.equal(shouldUseShellForVersionProbe("codex", "win32"), true);
|
|
assert.equal(
|
|
shouldUseShellForVersionProbe("C:\\Users\\dev\\AppData\\Roaming\\npm\\qwen.cmd", "win32"),
|
|
true
|
|
);
|
|
assert.equal(shouldUseShellForVersionProbe("C:\\Tools\\claude.exe", "win32"), false);
|
|
assert.equal(shouldUseShellForVersionProbe("codex", "linux"), false);
|
|
});
|