101 lines
3.5 KiB
JavaScript
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");
|
|
});
|