From 769994eb04fc367c962e6ec36b496ac328666ab9 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 27 Apr 2026 11:43:31 +0100 Subject: [PATCH] test(agents): cover compatible empty retries --- .../run.incomplete-turn.test.ts | 14 +++++++ .../run.overflow-compaction.harness.ts | 41 +++++++++++++------ 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts b/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts index 677804d33bb..76314915754 100644 --- a/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts +++ b/src/agents/pi-embedded-runner/run.incomplete-turn.test.ts @@ -7,6 +7,7 @@ import { mockedGlobalHookRunner, mockedLog, mockedRunEmbeddedAttempt, + mockedResolveModelAsync, overflowBaseRunParams, resetRunOverflowCompactionHarnessMocks, } from "./run.overflow-compaction.harness.js"; @@ -644,6 +645,19 @@ describe("runEmbeddedPiAgent incomplete-turn safety", () => { it("retries empty openai-compatible stop turns even when the backend reports output tokens", async () => { mockedClassifyFailoverReason.mockReturnValue(null); + mockedResolveModelAsync.mockResolvedValue({ + model: { + id: "qwen3.6-27b", + provider: "llamacpp", + contextWindow: 200000, + api: "openai-completions", + }, + error: null, + authStorage: { + setRuntimeApiKey: () => undefined, + }, + modelRegistry: {}, + }); mockedRunEmbeddedAttempt.mockResolvedValueOnce( makeAttemptResult({ assistantTexts: [], diff --git a/src/agents/pi-embedded-runner/run.overflow-compaction.harness.ts b/src/agents/pi-embedded-runner/run.overflow-compaction.harness.ts index 61342d7a320..40c0474f1b2 100644 --- a/src/agents/pi-embedded-runner/run.overflow-compaction.harness.ts +++ b/src/agents/pi-embedded-runner/run.overflow-compaction.harness.ts @@ -79,6 +79,19 @@ export const mockedResolveContextEngine = vi.fn(async () => mockedContextEngine) export const mockedBuildAgentRuntimePlan = vi.fn(() => ({})); export const mockedRunPostCompactionSideEffects = vi.fn(async () => {}); export const mockedEnsureRuntimePluginsLoaded = vi.fn<(params?: unknown) => void>(); +export const mockedResolveModelAsync = vi.fn(async () => ({ + model: { + id: "test-model", + provider: "anthropic", + contextWindow: 200000, + api: "messages", + }, + error: null, + authStorage: { + setRuntimeApiKey: vi.fn(), + }, + modelRegistry: {}, +})); export const mockedPrepareProviderRuntimeAuth = vi.fn(async () => undefined); export const mockedRunEmbeddedAttempt = vi.fn<(params: unknown) => Promise>(); @@ -245,6 +258,20 @@ export function resetRunOverflowCompactionHarnessMocks(): void { }); mockedEnsureRuntimePluginsLoaded.mockReset(); + mockedResolveModelAsync.mockReset(); + mockedResolveModelAsync.mockResolvedValue({ + model: { + id: "test-model", + provider: "anthropic", + contextWindow: 200000, + api: "messages", + }, + error: null, + authStorage: { + setRuntimeApiKey: vi.fn(), + }, + modelRegistry: {}, + }); mockedPrepareProviderRuntimeAuth.mockReset(); mockedPrepareProviderRuntimeAuth.mockResolvedValue(undefined); mockedRunEmbeddedAttempt.mockReset(); @@ -463,19 +490,7 @@ export async function loadRunOverflowCompactionHarness(): Promise<{ })); vi.doMock("./model.js", () => ({ - resolveModelAsync: vi.fn(async () => ({ - model: { - id: "test-model", - provider: "anthropic", - contextWindow: 200000, - api: "messages", - }, - error: null, - authStorage: { - setRuntimeApiKey: vi.fn(), - }, - modelRegistry: {}, - })), + resolveModelAsync: mockedResolveModelAsync, })); vi.doMock("../model-auth.js", () => ({