ddd81e9352
_manage_thinking_signatures treated every Kimi-family endpoint with the #13848-era contract: strip signed Anthropic thinking blocks from replayed history, assuming the upstream cannot validate Anthropic signatures. Live probing shows that contract is outdated for the whole Kimi family: - Kimi For Coding (api.kimi.com/coding) issues AND validates its own thinking signatures (K3+): both verbatim and content-mutated signed blocks replay with HTTP 200; - Moonshot's Anthropic surface (api.moonshot.cn/anthropic) accepts signed blocks the same way (200 on both verbatim and mutated); - every other harness that replays signed blocks to KFC (Claude Code, pi, Kilo Code) round-trips fine. Stripping signed blocks there silently discarded the model's prior chain-of-thought in multi-turn conversations — e.g. a two-turn recall probe loses the reasoning between turns while the text answer survives (agent.log: turn-2 input ≈ turn-1 input + a few dozen tokens instead of +thinking). With this change, the same probe recalls the exact hidden values from turn-1 thinking (+230 tokens on turn 2). So: on _is_kimi_family_endpoint, keep signed and unsigned thinking blocks unchanged on replay — one uniform rule for the whole Kimi family, no /coding-vs-Moonshot split. DeepSeek keeps the #16748 contract (strip signed, preserve unsigned). Third-party and direct-Anthropic behavior is untouched. Add tests/agent/test_anthropic_kimi_signed_thinking_replay.py pinning the unified behavior (Kimi /coding + Moonshot keep signed and unsigned) and the unchanged neighbors (DeepSeek strips, direct Anthropic keeps).