import { vi } from "vitest"; import type { FollowupRun } from "./queue.js"; import type { TypingController } from "./typing.js"; export function createMockTypingController( overrides: Partial = {}, ): TypingController { return { onReplyStart: vi.fn(async () => {}), startTypingLoop: vi.fn(async () => {}), startTypingOnText: vi.fn(async () => {}), refreshTypingTtl: vi.fn(), isActive: vi.fn(() => false), markRunComplete: vi.fn(), markDispatchIdle: vi.fn(), cleanup: vi.fn(), ...overrides, }; } export function createMockFollowupRun( overrides: Partial> & { run?: Partial } = {}, ): FollowupRun { const base: FollowupRun = { prompt: "hello", summaryLine: "hello", enqueuedAt: Date.now(), originatingTo: "channel:C1", run: { agentId: "agent", agentDir: "/tmp/agent", sessionId: "session", sessionKey: "main", messageProvider: "whatsapp", agentAccountId: "primary", sessionFile: "/tmp/session.jsonl", workspaceDir: "/tmp", config: {}, skillsSnapshot: { prompt: "", skills: [], }, provider: "anthropic", model: "claude", thinkLevel: "low", verboseLevel: "off", elevatedLevel: "off", bashElevated: { enabled: false, allowed: false, defaultLevel: "off", }, timeoutMs: 1_000, blockReplyBreak: "message_end", }, }; return { ...base, ...overrides, run: { ...base.run, ...overrides.run, }, }; }