π CodeBuddy Code v2.153.0 Release β
π¦ Version Information β
| Component | Version |
|---|---|
| CodeBuddy Code CLI | v2.153.0 |
| Agent SDK JS | v0.3.261 |
| Agent SDK Python | v0.3.260 |
β¨ New Features β
Client-Defined Request Header Passthrough β
Each prompt in the stream-json / print flow can now include a set of custom HTTP headers through _meta['codebuddy.ai'].customPassthroughHeaders. agent-cli passes them through to the official model gateway on every outbound model request for that turn.
- Applied per turn and cleared after each turn, with no leakage across turns
- Controlled by a startup-time prefix allowlist and disabled by default as a security boundary
- Uses the existing custom-model gate, so headers are not sent to third-party / custom model endpoints
Quality Assurance System β
Added an agent-cli quality test suite and quality assurance harness, including conformance tests for ACP protocol, control plane, Headless, MCP, Package, Prewarm, and other areas, as well as integration tests for the MCP client, multi-turn conversations, permission flows, Session storage, tool pipelines, and more. The release also adds reusable test infrastructure (mock MCP services, mock model services, artifact collectors, permission drivers, real-entry executors, and more), dedicated quality test configuration and entry scripts, plus quality engineering documentation covering quality requirements, technical design, and delivery checklists.
π§ Improvements β
- Telemetry regression protection: The telemetry reporting E2E suite has been upgraded to full-path scenario tests covering the complete family of conversation events, the common reporting field envelope, identity environment variable injection, and TUI feedback survey scenarios.
π Bug Fixes β
- Output in mixed A2A and stream-json mode: Fixed an issue where A2A turns were completely silent on stdout in mixed mode. A2A turns now output initialization information, execution content, and terminal state in full, just like regular turns. A2A-side results are unaffected, and the turn's terminal state is emitted before the A2A response. Also fixed missing initialization information in subsequent turns, duplicated or missing output within a turn, lost first-frame content, continued output after task cancellation, and the process exiting before the output tail was fully written.
- Malformed JSON-RPC message handling: Fixed an issue where messages with an incorrect or truncated version number fell through to other channels in mixed mode, leaving callers unable to determine what happened. Messages containing characteristics of both protocols were previously treated as regular input and executed as a full turn; they now always return a protocol error and no longer enter the execution path. Plain-text questions and natural-language questions mentioning jsonrpc are unaffected.
- Conversation API resilience: Fixed repeated rapid requests when the conversation API returned a 200 response with an empty body. The terminal state is now recorded only once, with no automatic retry. A second request is no longer sent while the failover stream for the same turn is already in flight.
- Failover on request timeout: A request timeout now triggers a single failover as a 408. Once the interceptor has switched endpoints, it no longer retries against the same domain. A 200 response whose body is a stream no longer locks the route prematurely, allowing a later 408 to still trigger failover.
- Backup endpoint fallback: If the IP returned by HTTP-DNS cannot be reached or the list is empty, requests now use the pinned Beijing Anycast fallback, which is never promoted to the primary endpoint. If both primary and backup
/v3/configrequests fail, direct connections make one final fallback attempt within the remaining budget, while proxied connections do not bypass the proxy. - Tool-call reporting: Fixed an issue where only the last
chat_tool_actionwas reported when multiple tools were called concurrently in the same turn, ensuring that every tool result is reported independently. - User message echo: Fixed an intermittent issue where user messages were not echoed in stream-json mode when
--replay-user-messageswas enabled and session persistence was disabled. Client-provided turn IDs are now preserved as well. - Session title generation: Extended the title generation timeout to 1 minute, reducing failures when the model responds slowly.