import { ProviderDriverKind, RuntimeRequestId, TurnId } from "@t3tools/contracts"; import { describe, expect, it } from "vite-plus/test"; import { makeAcpAssistantItemEvent, makeAcpContentDeltaEvent, makeAcpPlanUpdatedEvent, makeAcpRequestOpenedEvent, makeAcpRequestResolvedEvent, makeAcpToolCallEvent, } from "./AcpCoreRuntimeEvents.ts"; describe("AcpCoreRuntimeEvents", () => { it("maps ACP permission requests to canonical runtime events", () => { const stamp = { eventId: "event-1" as never, createdAt: "2026-03-27T00:00:00.000Z" }; const turnId = TurnId.make("turn-1"); const permissionRequest = { kind: "execute" as const, detail: "cat package.json", toolCall: { toolCallId: "tool-1", kind: "execute", status: "pending" as const, command: "cat package.json", detail: "cat package.json", data: { toolCallId: "tool-1", kind: "execute" }, }, }; expect( makeAcpRequestOpenedEvent({ stamp, provider: ProviderDriverKind.make("cursor"), threadId: "thread-1" as never, turnId, requestId: RuntimeRequestId.make("request-1"), permissionRequest, detail: "cat package.json", args: { command: ["cat", "package.json"] }, source: "acp.jsonrpc", method: "session/request_permission", rawPayload: { sessionId: "session-1" }, }), ).toMatchObject({ type: "request.opened", payload: { requestType: "exec_command_approval", detail: "cat package.json", }, }); expect( makeAcpRequestResolvedEvent({ stamp, provider: ProviderDriverKind.make("cursor"), threadId: "thread-1" as never, turnId, requestId: RuntimeRequestId.make("request-1"), permissionRequest, decision: "accept", }), ).toMatchObject({ type: "request.resolved", payload: { requestType: "exec_command_approval", decision: "accept", }, }); }); it("maps ACP core plan, tool-call, and content updates", () => { const stamp = { eventId: "event-1" as never, createdAt: "2026-03-27T00:00:00.000Z" }; const turnId = TurnId.make("turn-1"); expect( makeAcpPlanUpdatedEvent({ stamp, provider: ProviderDriverKind.make("cursor"), threadId: "thread-1" as never, turnId, payload: { plan: [{ step: "Inspect state", status: "inProgress" }], }, source: "acp.cursor.extension", method: "cursor/update_todos", rawPayload: { todos: [] }, }), ).toMatchObject({ type: "turn.plan.updated", raw: { method: "cursor/update_todos", }, }); expect( makeAcpToolCallEvent({ stamp, provider: ProviderDriverKind.make("cursor"), threadId: "thread-1" as never, turnId, toolCall: { toolCallId: "tool-1", kind: "execute", status: "completed", title: "Terminal", detail: "bun run test", data: { command: "bun run test" }, }, rawPayload: { sessionId: "session-1" }, }), ).toMatchObject({ type: "item.completed", payload: { itemType: "command_execution", status: "completed", }, }); expect( makeAcpContentDeltaEvent({ stamp, provider: ProviderDriverKind.make("cursor"), threadId: "thread-1" as never, turnId, itemId: "assistant:session-1:segment:0", text: "hello", rawPayload: { sessionId: "session-1" }, }), ).toMatchObject({ type: "content.delta", itemId: "assistant:session-1:segment:0", payload: { delta: "hello", }, }); expect( makeAcpAssistantItemEvent({ stamp, provider: ProviderDriverKind.make("cursor"), threadId: "thread-1" as never, turnId, itemId: "assistant:session-1:segment:0", lifecycle: "item.started", }), ).toMatchObject({ type: "item.started", itemId: "assistant:session-1:segment:0", payload: { itemType: "assistant_message", status: "inProgress", }, }); }); });