70 lines
2.5 KiB
JavaScript
70 lines
2.5 KiB
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import {
|
|
buildComputerUseCompletionPayload,
|
|
buildMasterAgentTaskCompletionRequestBody,
|
|
buildRemoteExecutionCompletionPayload,
|
|
} from "../local-agent/master-task-completion.mjs";
|
|
|
|
test("computer use needs_user_action is preserved for server dialog guard completion", () => {
|
|
const task = {
|
|
taskId: "desktop-task-dialog",
|
|
taskType: "desktop_control",
|
|
projectId: "master-agent",
|
|
targetThreadId: "thread-1",
|
|
dispatchExecutionId: "dispatch-1",
|
|
};
|
|
const runtimeResult = {
|
|
status: "needs_user_action",
|
|
requestId: "runtime-request-1",
|
|
kind: "dialog_intervention_required",
|
|
dialogId: "dialog-permission-1",
|
|
appName: "System Settings",
|
|
platform: "darwin",
|
|
risk: "high",
|
|
summary: "System Settings 弹窗需要用户确认。",
|
|
recommendedAction: "handled_on_device",
|
|
availableActions: ["handled_on_device", "cancel_task"],
|
|
};
|
|
|
|
const completion = buildComputerUseCompletionPayload(task, runtimeResult);
|
|
|
|
assert.equal(completion.status, "needs_user_action");
|
|
assert.equal(completion.taskId, "desktop-task-dialog");
|
|
assert.equal(completion.kind, "dialog_intervention_required");
|
|
assert.equal(completion.dialogId, "dialog-permission-1");
|
|
assert.equal(completion.summary, "System Settings 弹窗需要用户确认。");
|
|
assert.deepEqual(completion.availableActions, ["handled_on_device", "cancel_task"]);
|
|
|
|
const requestBody = buildMasterAgentTaskCompletionRequestBody(
|
|
{ deviceId: "mac-studio" },
|
|
completion,
|
|
);
|
|
|
|
assert.equal(requestBody.deviceId, "mac-studio");
|
|
assert.equal(requestBody.status, "needs_user_action");
|
|
assert.equal(requestBody.kind, "dialog_intervention_required");
|
|
assert.equal(requestBody.dialogId, "dialog-permission-1");
|
|
assert.equal(requestBody.appName, "System Settings");
|
|
assert.equal(requestBody.platform, "darwin");
|
|
assert.equal(requestBody.risk, "high");
|
|
assert.deepEqual(requestBody.availableActions, ["handled_on_device", "cancel_task"]);
|
|
});
|
|
|
|
test("remote execution completion payload does not coerce waiting state into completed", () => {
|
|
const payload = buildRemoteExecutionCompletionPayload(
|
|
{ taskId: "desktop-task-dialog" },
|
|
{
|
|
status: "needs_user_action",
|
|
requestId: "runtime-request-2",
|
|
kind: "dialog_intervention_required",
|
|
dialogId: "dialog-2",
|
|
summary: "需要确认。",
|
|
},
|
|
);
|
|
|
|
assert.equal(payload.status, "needs_user_action");
|
|
assert.equal(payload.kind, "dialog_intervention_required");
|
|
assert.equal(payload.dialogId, "dialog-2");
|
|
});
|