Files
boss/tests/local-agent-omx-task-runner.test.mjs

101 lines
3.5 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import path from "node:path";
import {
buildOmxTeamTaskExecution,
getOmxTeamTaskRunnerConfig,
parseOmxTeamTaskResult,
shouldUseOmxTeamTaskRunner,
} from "../local-agent/omx-team-task-runner.mjs";
test("dispatch execution with omx backend builds OMX runtime payload", () => {
const config = getOmxTeamTaskRunnerConfig({
BOSS_OMX_ENABLED: "true",
BOSS_OMX_COMMAND: process.execPath,
BOSS_OMX_ARGS: "scripts/omx-team-smoke.mjs",
BOSS_OMX_WORKDIR: "/Users/kris/code/boss",
BOSS_OMX_TIMEOUT_MS: "32000",
});
const execution = buildOmxTeamTaskExecution(config, {
taskId: "mastertask-omx-1",
taskType: "dispatch_execution",
orchestrationBackendId: "omx-team",
dispatchExecutionId: "dx-omx-1",
projectId: "group-project-1",
targetProjectId: "thread-project-1",
targetThreadId: "thread-1",
targetThreadDisplayName: "前端主线程",
executionPrompt: "请执行群聊任务",
requestedByAccount: "kris",
requestedAt: "2026-04-03T12:00:00.000Z",
});
assert.equal(execution.command, process.execPath);
assert.deepEqual(execution.args, [path.resolve("/Users/kris/code/boss", "scripts/omx-team-smoke.mjs")]);
assert.equal(execution.cwd, "/Users/kris/code/boss");
assert.equal(execution.timeoutMs, 32000);
assert.equal(execution.stdinPayload.requestKind, "dispatch_execution");
assert.equal(execution.stdinPayload.requestId, "mastertask-omx-1");
assert.equal(execution.stdinPayload.dispatchExecutionId, "dx-omx-1");
assert.equal(execution.stdinPayload.groupProjectId, "group-project-1");
assert.equal(execution.stdinPayload.targetProjectId, "thread-project-1");
assert.equal(execution.stdinPayload.targetThreadId, "thread-1");
assert.equal(execution.stdinPayload.targetThreadDisplayName, "前端主线程");
assert.equal(execution.stdinPayload.objective, "请执行群聊任务");
assert.equal(execution.stdinPayload.workersRequested, 1);
assert.equal(execution.stdinPayload.context.requestedBy, "kris");
});
test("non dispatch or non omx tasks do not use OMX runtime", () => {
assert.equal(
shouldUseOmxTeamTaskRunner({
taskType: "dispatch_execution",
orchestrationBackendId: "boss-native-orchestrator",
}),
false,
);
assert.equal(
shouldUseOmxTeamTaskRunner({
taskType: "conversation_reply",
orchestrationBackendId: "omx-team",
}),
false,
);
});
test("OMX task result parser maps completed payload into dispatch completion fields", () => {
const parsed = parseOmxTeamTaskResult(
JSON.stringify({
status: "completed",
backendId: "omx-team",
requestId: "mastertask-omx-1",
dispatchExecutionId: "dx-omx-1",
rawThreadReply: "线程原始回复",
replyBody: "主 Agent 汇总",
}),
);
assert.equal(parsed.status, "completed");
assert.equal(parsed.requestId, "mastertask-omx-1");
assert.equal(parsed.dispatchExecutionId, "dx-omx-1");
assert.equal(parsed.rawThreadReply, "线程原始回复");
assert.equal(parsed.replyBody, "主 Agent 汇总");
});
test("OMX task result parser surfaces failures", () => {
const parsed = parseOmxTeamTaskResult(
JSON.stringify({
status: "failed",
backendId: "omx-team",
requestId: "mastertask-omx-1",
error: "OMX_EXECUTION_FAILED: test",
}),
);
assert.equal(parsed.status, "failed");
assert.equal(parsed.requestId, "mastertask-omx-1");
assert.equal(parsed.errorMessage, "OMX_EXECUTION_FAILED: test");
});