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"); });