From 0f6f7059d985f5589025e1a7e91804fad598ddbf Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 18 Jan 2026 02:55:35 +0000 Subject: [PATCH] test: stabilize embedded runner tests --- ...ssistant-after-existing-transcript.test.ts | 19 ++++++++++++++----- ...models-json-into-provided-agentdir.test.ts | 13 ++++++++++--- ...ed-runner.sanitize-session-history.test.ts | 8 ++++++-- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/agents/pi-embedded-runner.run-embedded-pi-agent.appends-new-user-assistant-after-existing-transcript.test.ts b/src/agents/pi-embedded-runner.run-embedded-pi-agent.appends-new-user-assistant-after-existing-transcript.test.ts index 68bf5a7da..3f7e5637a 100644 --- a/src/agents/pi-embedded-runner.run-embedded-pi-agent.appends-new-user-assistant-after-existing-transcript.test.ts +++ b/src/agents/pi-embedded-runner.run-embedded-pi-agent.appends-new-user-assistant-after-existing-transcript.test.ts @@ -78,6 +78,7 @@ vi.mock("@mariozechner/pi-ai", async () => { ? buildAssistantErrorMessage(model) : buildAssistantMessage(model), }); + stream.end(); }); return stream; }, @@ -113,6 +114,9 @@ const makeOpenAiConfig = (modelIds: string[]) => const ensureModels = (cfg: ClawdbotConfig, agentDir: string) => ensureClawdbotModelsJson(cfg, agentDir); +const testSessionKey = "agent:test:embedded-ordering"; +const immediateEnqueue = async (task: () => Promise) => task(); + const textFromContent = (content: unknown) => { if (typeof content === "string") return content; if (Array.isArray(content) && content[0]?.type === "text") { @@ -179,7 +183,7 @@ describe("runEmbeddedPiAgent", () => { await runEmbeddedPiAgent({ sessionId: "session:test", - sessionKey: "agent:main:main", + sessionKey: testSessionKey, sessionFile, workspaceDir, config: cfg, @@ -188,6 +192,7 @@ describe("runEmbeddedPiAgent", () => { model: "mock-1", timeoutMs: 5_000, agentDir, + enqueue: immediateEnqueue, }); const messages = await readSessionMessages(sessionFile); @@ -219,7 +224,7 @@ describe("runEmbeddedPiAgent", () => { await runEmbeddedPiAgent({ sessionId: "session:test", - sessionKey: "agent:main:main", + sessionKey: testSessionKey, sessionFile, workspaceDir, config: cfg, @@ -228,11 +233,12 @@ describe("runEmbeddedPiAgent", () => { model: "mock-1", timeoutMs: 5_000, agentDir, + enqueue: immediateEnqueue, }); await runEmbeddedPiAgent({ sessionId: "session:test", - sessionKey: "agent:main:main", + sessionKey: testSessionKey, sessionFile, workspaceDir, config: cfg, @@ -241,6 +247,7 @@ describe("runEmbeddedPiAgent", () => { model: "mock-1", timeoutMs: 5_000, agentDir, + enqueue: immediateEnqueue, }); const messages = await readSessionMessages(sessionFile); @@ -306,7 +313,7 @@ describe("runEmbeddedPiAgent", () => { const result = await runEmbeddedPiAgent({ sessionId: "session:test", - sessionKey: "agent:main:main", + sessionKey: testSessionKey, sessionFile, workspaceDir, config: cfg, @@ -315,6 +322,7 @@ describe("runEmbeddedPiAgent", () => { model: "mock-1", timeoutMs: 5_000, agentDir, + enqueue: immediateEnqueue, }); expect(result.meta.error).toBeUndefined(); @@ -339,7 +347,7 @@ describe("runEmbeddedPiAgent", () => { const result = await runEmbeddedPiAgent({ sessionId: "session:test", - sessionKey: "agent:main:main", + sessionKey: testSessionKey, sessionFile, workspaceDir, config: cfg, @@ -348,6 +356,7 @@ describe("runEmbeddedPiAgent", () => { model: "mock-1", timeoutMs: 5_000, agentDir, + enqueue: immediateEnqueue, }); expect(result.meta.error).toBeUndefined(); diff --git a/src/agents/pi-embedded-runner.run-embedded-pi-agent.writes-models-json-into-provided-agentdir.test.ts b/src/agents/pi-embedded-runner.run-embedded-pi-agent.writes-models-json-into-provided-agentdir.test.ts index a4a93c290..1c9574f22 100644 --- a/src/agents/pi-embedded-runner.run-embedded-pi-agent.writes-models-json-into-provided-agentdir.test.ts +++ b/src/agents/pi-embedded-runner.run-embedded-pi-agent.writes-models-json-into-provided-agentdir.test.ts @@ -78,6 +78,7 @@ vi.mock("@mariozechner/pi-ai", async () => { ? buildAssistantErrorMessage(model) : buildAssistantMessage(model), }); + stream.end(); }); return stream; }, @@ -113,6 +114,9 @@ const makeOpenAiConfig = (modelIds: string[]) => const ensureModels = (cfg: ClawdbotConfig, agentDir: string) => ensureClawdbotModelsJson(cfg, agentDir); +const testSessionKey = "agent:test:embedded-models"; +const immediateEnqueue = async (task: () => Promise) => task(); + const textFromContent = (content: unknown) => { if (typeof content === "string") return content; if (Array.isArray(content) && content[0]?.type === "text") { @@ -169,7 +173,7 @@ describe("runEmbeddedPiAgent", () => { await expect( runEmbeddedPiAgent({ sessionId: "session:test", - sessionKey: "agent:dev:test", + sessionKey: testSessionKey, sessionFile, workspaceDir, config: cfg, @@ -178,6 +182,7 @@ describe("runEmbeddedPiAgent", () => { model: "definitely-not-a-model", timeoutMs: 1, agentDir, + enqueue: immediateEnqueue, }), ).rejects.toThrow(/Unknown model:/); @@ -193,7 +198,7 @@ describe("runEmbeddedPiAgent", () => { await runEmbeddedPiAgent({ sessionId: "session:test", - sessionKey: "agent:main:main", + sessionKey: testSessionKey, sessionFile, workspaceDir, config: cfg, @@ -202,6 +207,7 @@ describe("runEmbeddedPiAgent", () => { model: "mock-1", timeoutMs: 5_000, agentDir, + enqueue: immediateEnqueue, }); const messages = await readSessionMessages(sessionFile); @@ -224,7 +230,7 @@ describe("runEmbeddedPiAgent", () => { const result = await runEmbeddedPiAgent({ sessionId: "session:test", - sessionKey: "agent:main:main", + sessionKey: testSessionKey, sessionFile, workspaceDir, config: cfg, @@ -233,6 +239,7 @@ describe("runEmbeddedPiAgent", () => { model: "mock-error", timeoutMs: 5_000, agentDir, + enqueue: immediateEnqueue, }); expect(result.payloads[0]?.isError).toBe(true); diff --git a/src/agents/pi-embedded-runner.sanitize-session-history.test.ts b/src/agents/pi-embedded-runner.sanitize-session-history.test.ts index 6355deedb..6972f5111 100644 --- a/src/agents/pi-embedded-runner.sanitize-session-history.test.ts +++ b/src/agents/pi-embedded-runner.sanitize-session-history.test.ts @@ -2,7 +2,9 @@ import type { AgentMessage } from "@mariozechner/pi-agent-core"; import type { SessionManager } from "@mariozechner/pi-coding-agent"; import { beforeEach, describe, expect, it, vi } from "vitest"; import * as helpers from "./pi-embedded-helpers.js"; -import { sanitizeSessionHistory } from "./pi-embedded-runner/google.js"; + +type SanitizeSessionHistory = typeof import("./pi-embedded-runner/google.js").sanitizeSessionHistory; +let sanitizeSessionHistory: SanitizeSessionHistory; // Mock dependencies vi.mock("./pi-embedded-helpers.js", async () => { @@ -26,7 +28,7 @@ describe("sanitizeSessionHistory", () => { const mockMessages: AgentMessage[] = [{ role: "user", content: "hello" }]; - beforeEach(() => { + beforeEach(async () => { vi.resetAllMocks(); vi.mocked(helpers.sanitizeSessionMessagesImages).mockImplementation(async (msgs) => msgs); // Default mock implementation @@ -34,6 +36,8 @@ describe("sanitizeSessionHistory", () => { if (!msgs) return []; return [...msgs, { role: "system", content: "downgraded" }]; }); + vi.resetModules(); + ({ sanitizeSessionHistory } = await import("./pi-embedded-runner/google.js")); }); it("should downgrade history for Google models if provider is not google-antigravity", async () => {