Files
agentdock/runner/registry.test.js
T

75 lines
2.7 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import { buildCommand, toolById } from "./registry.js";
test("DeepSeek Harness requires a headless task", () => {
const tool = toolById("dsh");
assert.throws(() => buildCommand(tool, { profile: "headless", initialInput: "" }), /requires a task/);
assert.deepEqual(
buildCommand(tool, { profile: "headless", initialInput: "run tests" }),
{ command: "dsh", args: ["--profile", "headless", "run tests"], interactive: true },
);
});
test("DeepSeek Harness rejects unavailable profiles", () => {
assert.throws(() => buildCommand(toolById("dsh"), { profile: "tui", initialInput: "run tests" }), /must be headless/);
});
test("task commands use non-interactive CLI modes", () => {
const task = { purpose: "task", initialInput: "review this", model: "test-model" };
assert.deepEqual(buildCommand(toolById("codex"), task), {
command: "codex",
args: ["exec", "--color", "never", "--skip-git-repo-check", "--model", "test-model", "review this"],
interactive: false,
});
assert.deepEqual(buildCommand(toolById("claude"), task), {
command: "claude",
args: ["--print", "--output-format", "text", "--model", "test-model", "review this"],
interactive: false,
});
assert.deepEqual(buildCommand(toolById("kimi"), task), {
command: "kimi",
args: ["--prompt", "review this", "--output-format", "text", "--model", "test-model"],
interactive: false,
});
assert.deepEqual(buildCommand(toolById("opencode"), task), {
command: "opencode",
args: ["run", "--format", "default", "--model", "test-model", "review this"],
interactive: false,
});
assert.deepEqual(buildCommand(toolById("qwen"), task), {
command: "qwen",
args: ["--prompt", "review this", "--output-format", "text", "--model", "test-model"],
interactive: false,
});
assert.deepEqual(buildCommand(toolById("dsh"), task), {
command: "dsh",
args: ["--profile", "headless", "review this"],
interactive: false,
});
});
test("task commands require a message", () => {
assert.throws(
() => buildCommand(toolById("codex"), { purpose: "task", initialInput: "" }),
/task message is required/i,
);
});
test("Multica setup accepts only HTTP URLs and stays interactive", () => {
const built = buildCommand(toolById("multica"), {
purpose: "authorization",
serverUrl: "https://api.example.test/",
appUrl: "https://app.example.test/",
});
assert.deepEqual(built, {
command: "multica-setup",
args: ["--server-url", "https://api.example.test", "--app-url", "https://app.example.test"],
interactive: true,
});
assert.throws(() => buildCommand(toolById("multica"), {
purpose: "authorization",
serverUrl: "file:///etc/passwd",
}), /HTTP\(S\)/);
});