import { vi } from "vitest"; import type { PluginRuntime } from "../../plugins/runtime/types.js"; type BoundTaskFlowRuntime = ReturnType; type BoundAsyncManagedTaskFlows = ReturnType< PluginRuntime["tasks"]["async"]["managedFlows"]["bindSession"] >; function createTaskFlowSessionMock(): BoundTaskFlowRuntime { return { sessionKey: "agent:main:main", createManaged: vi.fn(), tryCreateManaged: vi.fn(), get: vi.fn(), list: vi.fn(() => []), findLatest: vi.fn(), resolve: vi.fn(), getTaskSummary: vi.fn(), setWaiting: vi.fn(), resume: vi.fn(), finish: vi.fn(), fail: vi.fn(), requestCancel: vi.fn(), cancel: vi.fn(), runTask: vi.fn(), }; } function createAsyncReadSession(params: { sessionKey?: string }) { return { sessionKey: params.sessionKey ?? "agent:main:main", get: vi.fn(async () => undefined), list: vi.fn(async () => []), findLatest: vi.fn(async () => undefined), resolve: vi.fn(async () => undefined), }; } function createAsyncFlowReadSession(params: { sessionKey?: string }) { return { ...createAsyncReadSession(params), getTaskSummary: vi.fn(async () => undefined) }; } function createAsyncManagedFlowSession(params: { sessionKey?: string; }): BoundAsyncManagedTaskFlows { const missing = { applied: false, code: "not_found" } as const; return { ...createAsyncFlowReadSession(params), createManaged: vi.fn(), tryCreateManaged: vi.fn(async () => null), setWaiting: vi.fn(async () => missing), resume: vi.fn(async () => missing), finish: vi.fn(async () => missing), fail: vi.fn(async () => missing), requestCancel: vi.fn(async () => missing), runTask: vi.fn(async () => ({ created: false as const, found: false, reason: "Flow not found.", })), }; } function readBinding(factory: (params: { sessionKey?: string }) => Bound) { return { bindSession: vi.fn(factory), fromToolContext: vi.fn(factory) }; } export function createPluginTasksRuntimeMock(): PluginRuntime["tasks"] { return { async: { runs: readBinding(createAsyncReadSession), flows: readBinding(createAsyncFlowReadSession), managedFlows: readBinding(createAsyncManagedFlowSession), }, runs: { bindSession: vi.fn(), fromToolContext: vi.fn(), }, flows: { bindSession: vi.fn(), fromToolContext: vi.fn(), }, managedFlows: { bindSession: vi.fn(createTaskFlowSessionMock), fromToolContext: vi.fn(createTaskFlowSessionMock), }, }; }