diff --git a/src/agents/transcript-policy.test.ts b/src/agents/transcript-policy.test.ts index 15c03250e..2e6c673f2 100644 --- a/src/agents/transcript-policy.test.ts +++ b/src/agents/transcript-policy.test.ts @@ -122,6 +122,15 @@ describe("resolveTranscriptPolicy", () => { expect(policy.preserveSignatures).toBe(false); }); + it("does not preserve signatures for kimi-coding provider (#39798)", () => { + const policy = resolveTranscriptPolicy({ + provider: "kimi-coding", + modelId: "k2p5", + modelApi: "anthropic-messages", + }); + expect(policy.preserveSignatures).toBe(false); + }); + it("enables turn-ordering and assistant-merge for strict OpenAI-compatible providers (#38962)", () => { const policy = resolveTranscriptPolicy({ provider: "vllm", diff --git a/src/agents/transcript-policy.ts b/src/agents/transcript-policy.ts index 4296f6239..264eb9410 100644 --- a/src/agents/transcript-policy.ts +++ b/src/agents/transcript-policy.ts @@ -123,7 +123,8 @@ export function resolveTranscriptPolicy(params: { (!isOpenAi && sanitizeToolCallIds) || requiresOpenAiCompatibleToolIdSanitization, toolCallIdMode, repairToolUseResultPairing, - preserveSignatures: isAnthropic, + // kimi-coding uses anthropic-messages API but cannot handle re-sent thinkingSignature blobs (#39798) + preserveSignatures: isAnthropic && provider !== "kimi-coding", sanitizeThoughtSignatures: isOpenAi ? undefined : sanitizeThoughtSignatures, sanitizeThinkingSignatures: false, dropThinkingBlocks,