import { beforeEach, describe, expect, it, vi } from "vitest"; import { monitorSignalProvider } from "./monitor.js"; const sendMock = vi.fn(); const replyMock = vi.fn(); const updateLastRouteMock = vi.fn(); let config: Record = {}; vi.mock("../config/config.js", async (importOriginal) => { const actual = await importOriginal(); return { ...actual, loadConfig: () => config, }; }); vi.mock("../auto-reply/reply.js", () => ({ getReplyFromConfig: (...args: unknown[]) => replyMock(...args), })); vi.mock("./send.js", () => ({ sendMessageSignal: (...args: unknown[]) => sendMock(...args), })); vi.mock("../config/sessions.js", () => ({ resolveStorePath: vi.fn(() => "/tmp/clawdbot-sessions.json"), updateLastRoute: (...args: unknown[]) => updateLastRouteMock(...args), })); const streamMock = vi.fn(); const signalCheckMock = vi.fn(); const signalRpcRequestMock = vi.fn(); vi.mock("./client.js", () => ({ streamSignalEvents: (...args: unknown[]) => streamMock(...args), signalCheck: (...args: unknown[]) => signalCheckMock(...args), signalRpcRequest: (...args: unknown[]) => signalRpcRequestMock(...args), })); vi.mock("./daemon.js", () => ({ spawnSignalDaemon: vi.fn(() => ({ stop: vi.fn() })), })); const flush = () => new Promise((resolve) => setTimeout(resolve, 0)); beforeEach(() => { config = { messages: { responsePrefix: "PFX" }, signal: { autoStart: false }, routing: { allowFrom: [] }, }; sendMock.mockReset().mockResolvedValue(undefined); replyMock.mockReset(); updateLastRouteMock.mockReset(); streamMock.mockReset(); signalCheckMock.mockReset().mockResolvedValue({}); signalRpcRequestMock.mockReset().mockResolvedValue({}); }); describe("monitorSignalProvider tool results", () => { it("sends tool summaries with responsePrefix", async () => { replyMock.mockImplementation(async (_ctx, opts) => { await opts?.onToolResult?.({ text: "tool update" }); return { text: "final reply" }; }); streamMock.mockImplementation(async ({ onEvent }) => { const payload = { envelope: { sourceNumber: "+15550001111", sourceName: "Ada", timestamp: 1, dataMessage: { message: "hello", }, }, }; await onEvent({ event: "receive", data: JSON.stringify(payload), }); }); await monitorSignalProvider({ autoStart: false, baseUrl: "http://127.0.0.1:8080", }); await flush(); expect(sendMock).toHaveBeenCalledTimes(2); expect(sendMock.mock.calls[0][1]).toBe("PFX tool update"); expect(sendMock.mock.calls[1][1]).toBe("PFX final reply"); }); });