From 87b1792ebac361f638d94d6b5441c650de26ddf9 Mon Sep 17 00:00:00 2001 From: Jason Date: Wed, 8 Apr 2026 13:18:08 +0800 Subject: [PATCH] docs(changelog): cover UTF-8 boundary and system prompt fixes Document two additional Fixed entries for the Unreleased section after rebasing onto the latest origin/main: the SSE streaming UTF-8 chunk boundary fix that prevents U+FFFD replacement characters in multi-byte output via the Copilot reverse proxy, and the OpenAI-compatible chat transform fix that normalizes fragmented Claude system prompts into a single leading system message for strict backends like Nvidia and Qwen-style providers. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1769e5a7c..bd5fcd22a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,8 @@ Development since v3.12.3 focuses on quota visibility, provider workflow upgrade - **Copilot Authentication & Proxy Compatibility**: Fixed GitHub Copilot authentication regressions, corrected enterprise / dynamic endpoint handling, repaired clipboard verification-code copying on macOS and Linux, and fixed Responses routing when Copilot-backed Claude providers target OpenAI models. - **Streaming Parser Compatibility**: Fixed SSE parsing to accept fields with optional spaces, improving compatibility with non-strict streaming implementations. +- **UTF-8 Stream Chunk Boundaries**: Fixed intermittent garbled output (U+FFFD replacement characters) in Claude Code when multi-byte UTF-8 sequences such as Chinese characters or emoji were split across TCP stream chunks via the Copilot reverse proxy, by preserving incomplete trailing bytes across chunks in all four SSE streaming paths instead of lossy decoding. +- **Fragmented System Prompt Normalization**: Fixed strict OpenAI-compatible chat backends (Nvidia, Qwen-style) rejecting requests when converted Claude payloads contained multiple system messages, by merging system content into a single leading system message during the Anthropic → OpenAI chat transformation. - **Provider Switch State Corruption**: Serialized per-app provider switches to prevent concurrent failover or hot-switch operations from leaving `is_current`, settings state, and live backup state out of sync. - **Claude Takeover Live Config Drift**: Fixed provider edits while Claude takeover is active so live settings remain aligned with the latest provider state without breaking takeover restore behavior. - **WebDAV Password Retention & Validation**: Fixed the WebDAV password field so saved credentials remain visible after refresh and treated `MKCOL 405` responses correctly during connection validation.