diff --git a/src/agents/pi-embedded-runner/compact.hooks.harness.ts b/src/agents/pi-embedded-runner/compact.hooks.harness.ts index 8218e9cd363..663f9e90d65 100644 --- a/src/agents/pi-embedded-runner/compact.hooks.harness.ts +++ b/src/agents/pi-embedded-runner/compact.hooks.harness.ts @@ -1,6 +1,7 @@ import { vi, type Mock } from "vitest"; import type { PluginMetadataSnapshot } from "../../plugins/plugin-metadata-snapshot.js"; import { clearAgentHarnesses } from "../harness/registry.js"; +import type { AgentRuntimePlan, BuildAgentRuntimePlanParams } from "../runtime-plan/types.js"; import type { CompactionTranscriptRotation } from "./compaction-successor-transcript.js"; type MockResolvedModel = { @@ -110,6 +111,75 @@ export const rotateTranscriptAfterCompactionMock: Mock< rotated: false, })); +function createCompactHooksRuntimePlan(params: BuildAgentRuntimePlanParams): AgentRuntimePlan { + const modelApi = params.modelApi ?? params.model?.api ?? undefined; + const transcriptPolicy = { + sanitizeMode: "full" as const, + sanitizeToolCallIds: false, + preserveNativeAnthropicToolUseIds: false, + repairToolUseResultPairing: false, + preserveSignatures: false, + sanitizeThinkingSignatures: false, + dropThinkingBlocks: false, + applyGoogleTurnOrdering: false, + validateGeminiTurns: false, + validateAnthropicTurns: false, + allowSyntheticToolResults: false, + }; + + return { + resolvedRef: { + provider: params.provider, + modelId: params.modelId, + ...(modelApi ? { modelApi } : {}), + ...(params.resolvedTransport ? { transport: params.resolvedTransport } : {}), + }, + auth: { + providerForAuth: params.provider, + authProfileProviderForAuth: params.authProfileProvider ?? params.provider, + ...(params.sessionAuthProfileId + ? { forwardedAuthProfileId: params.sessionAuthProfileId } + : {}), + }, + prompt: { + provider: params.provider, + modelId: params.modelId, + resolveSystemPromptContribution: vi.fn(() => undefined), + transformSystemPrompt: vi.fn((context: { systemPrompt: string }) => context.systemPrompt), + }, + tools: { + preparedPlanning: { + loadMetadataSnapshot: () => ({}), + }, + normalize: vi.fn((tools) => tools), + logDiagnostics: vi.fn(), + }, + transcript: { + policy: transcriptPolicy, + resolvePolicy: vi.fn(() => transcriptPolicy), + }, + delivery: { + isSilentPayload: vi.fn(() => false), + resolveFollowupRoute: vi.fn(() => undefined), + }, + outcome: { + classifyRunResult: vi.fn(() => null), + }, + transport: { + extraParams: {}, + resolveExtraParams: vi.fn(() => ({})), + }, + observability: { + resolvedRef: `${params.provider}/${params.modelId}`, + provider: params.provider, + modelId: params.modelId, + ...(modelApi ? { modelApi } : {}), + ...(params.sessionAuthProfileId ? { authProfileId: params.sessionAuthProfileId } : {}), + ...(params.resolvedTransport ? { transport: params.resolvedTransport } : {}), + }, + }; +} + const emptyPluginMetadataSnapshot: PluginMetadataSnapshot = { policyHash: "", index: { @@ -569,6 +639,12 @@ export async function loadCompactHooksHarness(): Promise<{ resolveMemorySearchConfig: resolveMemorySearchConfigMock, })); + vi.doMock("../runtime-plan/build.js", () => ({ + buildAgentRuntimePlan: vi.fn((params: BuildAgentRuntimePlanParams) => + createCompactHooksRuntimePlan(params), + ), + })); + vi.doMock("../../plugins/memory-runtime.js", () => ({ getActiveMemorySearchManager: getMemorySearchManagerMock, }));