diff --git a/src/agents/pi-embedded-runner/run.overflow-compaction.e2e.test.ts b/src/agents/pi-embedded-runner/run.overflow-compaction.e2e.test.ts index 594f5e6d2..dbb561316 100644 --- a/src/agents/pi-embedded-runner/run.overflow-compaction.e2e.test.ts +++ b/src/agents/pi-embedded-runner/run.overflow-compaction.e2e.test.ts @@ -1,27 +1,37 @@ import "./run.overflow-compaction.mocks.shared.js"; import { beforeEach, describe, expect, it, vi } from "vitest"; +import { isCompactionFailureError, isLikelyContextOverflowError } from "../pi-embedded-helpers.js"; vi.mock("../../utils.js", () => ({ resolveUserPath: vi.fn((p: string) => p), })); -vi.mock("../pi-embedded-helpers.js", async () => { - return { - isCompactionFailureError: (msg?: string) => { +import { log } from "./logger.js"; +import { runEmbeddedPiAgent } from "./run.js"; +import { makeAttemptResult, mockOverflowRetrySuccess } from "./run.overflow-compaction.fixture.js"; +import { + mockedCompactDirect, + mockedRunEmbeddedAttempt, + mockedSessionLikelyHasOversizedToolResults, + mockedTruncateOversizedToolResultsInSession, + overflowBaseRunParams as baseParams, +} from "./run.overflow-compaction.shared-test.js"; +import type { EmbeddedRunAttemptResult } from "./run/types.js"; + +const mockedIsCompactionFailureError = vi.mocked(isCompactionFailureError); +const mockedIsLikelyContextOverflowError = vi.mocked(isLikelyContextOverflowError); + +describe("overflow compaction in run loop", () => { + beforeEach(() => { + vi.clearAllMocks(); + mockedIsCompactionFailureError.mockImplementation((msg?: string) => { if (!msg) { return false; } const lower = msg.toLowerCase(); return lower.includes("request_too_large") && lower.includes("summarization failed"); - }, - isContextOverflowError: (msg?: string) => { - if (!msg) { - return false; - } - const lower = msg.toLowerCase(); - return lower.includes("request_too_large") || lower.includes("request size exceeds"); - }, - isLikelyContextOverflowError: (msg?: string) => { + }); + mockedIsLikelyContextOverflowError.mockImplementation((msg?: string) => { if (!msg) { return false; } @@ -32,52 +42,12 @@ vi.mock("../pi-embedded-helpers.js", async () => { lower.includes("context window exceeded") || lower.includes("prompt too large") ); - }, - isFailoverAssistantError: vi.fn(() => false), - isFailoverErrorMessage: vi.fn(() => false), - isAuthAssistantError: vi.fn(() => false), - isRateLimitAssistantError: vi.fn(() => false), - isBillingAssistantError: vi.fn(() => false), - classifyFailoverReason: vi.fn(() => null), - formatAssistantErrorText: vi.fn(() => ""), - parseImageSizeError: vi.fn(() => null), - pickFallbackThinkingLevel: vi.fn(() => null), - isTimeoutErrorMessage: vi.fn(() => false), - parseImageDimensionError: vi.fn(() => null), - }; -}); - -import { compactEmbeddedPiSessionDirect } from "./compact.js"; -import { log } from "./logger.js"; -import { runEmbeddedPiAgent } from "./run.js"; -import { makeAttemptResult, mockOverflowRetrySuccess } from "./run.overflow-compaction.fixture.js"; -import { runEmbeddedAttempt } from "./run/attempt.js"; -import type { EmbeddedRunAttemptResult } from "./run/types.js"; -import { - sessionLikelyHasOversizedToolResults, - truncateOversizedToolResultsInSession, -} from "./tool-result-truncation.js"; - -const mockedRunEmbeddedAttempt = vi.mocked(runEmbeddedAttempt); -const mockedCompactDirect = vi.mocked(compactEmbeddedPiSessionDirect); -const mockedSessionLikelyHasOversizedToolResults = vi.mocked(sessionLikelyHasOversizedToolResults); -const mockedTruncateOversizedToolResultsInSession = vi.mocked( - truncateOversizedToolResultsInSession, -); - -const baseParams = { - sessionId: "test-session", - sessionKey: "test-key", - sessionFile: "/tmp/session.json", - workspaceDir: "/tmp/workspace", - prompt: "hello", - timeoutMs: 30000, - runId: "run-1", -}; - -describe("overflow compaction in run loop", () => { - beforeEach(() => { - vi.clearAllMocks(); + }); + mockedCompactDirect.mockResolvedValue({ + ok: false, + compacted: false, + reason: "nothing to compact", + }); mockedSessionLikelyHasOversizedToolResults.mockReturnValue(false); mockedTruncateOversizedToolResultsInSession.mockResolvedValue({ truncated: false, diff --git a/src/agents/pi-embedded-runner/run.overflow-compaction.shared-test.ts b/src/agents/pi-embedded-runner/run.overflow-compaction.shared-test.ts new file mode 100644 index 000000000..45bab82e1 --- /dev/null +++ b/src/agents/pi-embedded-runner/run.overflow-compaction.shared-test.ts @@ -0,0 +1,26 @@ +import { vi } from "vitest"; +import { compactEmbeddedPiSessionDirect } from "./compact.js"; +import { runEmbeddedAttempt } from "./run/attempt.js"; +import { + sessionLikelyHasOversizedToolResults, + truncateOversizedToolResultsInSession, +} from "./tool-result-truncation.js"; + +export const mockedRunEmbeddedAttempt = vi.mocked(runEmbeddedAttempt); +export const mockedCompactDirect = vi.mocked(compactEmbeddedPiSessionDirect); +export const mockedSessionLikelyHasOversizedToolResults = vi.mocked( + sessionLikelyHasOversizedToolResults, +); +export const mockedTruncateOversizedToolResultsInSession = vi.mocked( + truncateOversizedToolResultsInSession, +); + +export const overflowBaseRunParams = { + sessionId: "test-session", + sessionKey: "test-key", + sessionFile: "/tmp/session.json", + workspaceDir: "/tmp/workspace", + prompt: "hello", + timeoutMs: 30000, + runId: "run-1", +} as const; diff --git a/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts b/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts index db299e8ed..56dc31edd 100644 --- a/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts +++ b/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts @@ -1,23 +1,17 @@ import "./run.overflow-compaction.mocks.shared.js"; import { beforeEach, describe, expect, it, vi } from "vitest"; import { pickFallbackThinkingLevel } from "../pi-embedded-helpers.js"; -import { compactEmbeddedPiSessionDirect } from "./compact.js"; import { runEmbeddedPiAgent } from "./run.js"; import { makeAttemptResult, mockOverflowRetrySuccess } from "./run.overflow-compaction.fixture.js"; import { mockedGlobalHookRunner } from "./run.overflow-compaction.mocks.shared.js"; -import { runEmbeddedAttempt } from "./run/attempt.js"; -import type { EmbeddedRunAttemptResult } from "./run/types.js"; import { - sessionLikelyHasOversizedToolResults, - truncateOversizedToolResultsInSession, -} from "./tool-result-truncation.js"; - -const mockedRunEmbeddedAttempt = vi.mocked(runEmbeddedAttempt); -const mockedCompactDirect = vi.mocked(compactEmbeddedPiSessionDirect); -const mockedSessionLikelyHasOversizedToolResults = vi.mocked(sessionLikelyHasOversizedToolResults); -const mockedTruncateOversizedToolResultsInSession = vi.mocked( - truncateOversizedToolResultsInSession, -); + mockedCompactDirect, + mockedRunEmbeddedAttempt, + mockedSessionLikelyHasOversizedToolResults, + mockedTruncateOversizedToolResultsInSession, + overflowBaseRunParams, +} from "./run.overflow-compaction.shared-test.js"; +import type { EmbeddedRunAttemptResult } from "./run/types.js"; const mockedPickFallbackThinkingLevel = vi.mocked(pickFallbackThinkingLevel); describe("runEmbeddedPiAgent overflow compaction trigger routing", () => { @@ -61,15 +55,7 @@ describe("runEmbeddedPiAgent overflow compaction trigger routing", () => { compactDirect: mockedCompactDirect, }); - await runEmbeddedPiAgent({ - sessionId: "test-session", - sessionKey: "test-key", - sessionFile: "/tmp/session.json", - workspaceDir: "/tmp/workspace", - prompt: "hello", - timeoutMs: 30000, - runId: "run-1", - }); + await runEmbeddedPiAgent(overflowBaseRunParams); expect(mockedCompactDirect).toHaveBeenCalledTimes(1); expect(mockedCompactDirect).toHaveBeenCalledWith( @@ -124,15 +110,7 @@ describe("runEmbeddedPiAgent overflow compaction trigger routing", () => { truncatedCount: 1, }); - const result = await runEmbeddedPiAgent({ - sessionId: "test-session", - sessionKey: "test-key", - sessionFile: "/tmp/session.json", - workspaceDir: "/tmp/workspace", - prompt: "hello", - timeoutMs: 30000, - runId: "run-1", - }); + const result = await runEmbeddedPiAgent(overflowBaseRunParams); expect(mockedCompactDirect).toHaveBeenCalledTimes(3); expect(mockedTruncateOversizedToolResultsInSession).toHaveBeenCalledTimes(1); @@ -149,15 +127,7 @@ describe("runEmbeddedPiAgent overflow compaction trigger routing", () => { ); mockedPickFallbackThinkingLevel.mockReturnValue("low"); - const result = await runEmbeddedPiAgent({ - sessionId: "test-session", - sessionKey: "test-key", - sessionFile: "/tmp/session.json", - workspaceDir: "/tmp/workspace", - prompt: "hello", - timeoutMs: 30000, - runId: "run-1", - }); + const result = await runEmbeddedPiAgent(overflowBaseRunParams); expect(mockedRunEmbeddedAttempt).toHaveBeenCalledTimes(32); expect(mockedCompactDirect).not.toHaveBeenCalled();