import assert from "node:assert/strict"; import test from "node:test"; import type { ExecutionImmediateResult } from "@/lib/execution/types"; import { createExecutionRequest, isImmediateExecutionResult, isQueuedExecutionResult, } from "@/lib/execution/types"; test("ExecutionRequest 工厂会生成稳定默认字段", () => { const request = createExecutionRequest({ kind: "master_agent_reply", projectId: "master-agent", requestMessageId: "msg-1", body: "你好", }); assert.equal(request.kind, "master_agent_reply"); assert.equal(request.projectId, "master-agent"); assert.equal(request.requestMessageId, "msg-1"); assert.equal(request.body, "你好"); assert.equal(request.executionPrompt, undefined); assert.equal(request.targetProjectId, undefined); assert.equal(request.targetThreadId, undefined); assert.equal(Object.prototype.hasOwnProperty.call(request, "requestedByAccount"), true); assert.equal(Object.prototype.hasOwnProperty.call(request, "requestedByLabel"), true); assert.equal(Object.prototype.hasOwnProperty.call(request, "executionPrompt"), true); assert.equal(Object.prototype.hasOwnProperty.call(request, "requestedBackendId"), true); assert.equal(Object.prototype.hasOwnProperty.call(request, "taskId"), true); assert.equal(Object.prototype.hasOwnProperty.call(request, "targetProjectId"), true); assert.equal(Object.prototype.hasOwnProperty.call(request, "targetThreadId"), true); assert.equal(Object.prototype.hasOwnProperty.call(request, "modelOverride"), true); assert.equal(Object.prototype.hasOwnProperty.call(request, "reasoningEffortOverride"), true); }); test("ExecutionResult 类型守卫能区分 queued 与 immediate", () => { const queued = { status: "queued", taskId: "task-1", backendId: "master-codex-node", }; const running = { status: "running", taskId: "task-2", backendId: "master-codex-node", sessionId: "session-1", }; const completed: ExecutionImmediateResult = { status: "completed", backendId: "openai-api", output: "done", }; const failed: ExecutionImmediateResult = { status: "failed", backendId: "openai-api", error: "boom", }; const invalidCompleted = { status: "completed", backendId: "openai-api", }; const invalidFailed = { status: "failed", backendId: "openai-api", }; assert.equal(isQueuedExecutionResult(queued), true); assert.equal(isQueuedExecutionResult(running), true); assert.equal(isImmediateExecutionResult(queued), false); assert.equal(isImmediateExecutionResult(running), false); assert.equal(isQueuedExecutionResult(completed), false); assert.equal(isImmediateExecutionResult(completed), true); assert.equal(isQueuedExecutionResult(failed), false); assert.equal(isImmediateExecutionResult(failed), true); assert.equal(isImmediateExecutionResult(invalidCompleted), false); assert.equal(isImmediateExecutionResult(invalidFailed), false); assert.equal(isQueuedExecutionResult(null), false); assert.equal(isImmediateExecutionResult(undefined), false); });