#4129·9router

CommandCode 提供程序:重试临时网络丢失,并防止伪停止分段

作者: Christian-Gennari创建于 2026年9月17日更新于 2026年9月17日

嘿! 我遇到了一个问题, CommandCode 流意外地丢失, 并被视为成功的转换: 1. **临时上游丢失被视为完成内容**: CommandCode 在初始令牌生成或推理阶段偶尔会在 `{"type": "error", "error": {"type": "server_error", "message": "Network connection lost."}}` 中丢失连接。在 `commandcode-to-OpenAI.js` 中, 此内容被格式化为 `[CommandCode error: ...]` 文本, 并通过 `finish_reason: "stop"` 发出。消费客户端(如 Hermes、OpenCode、Codex)将此视为成功的 200 完成, 而不是可重试的丢失。 2. **初始检查中缺少上游重试**: `inspectAndWrapCommandCodeResponse` 在令牌发布之前捕获错误, 但 `CommandCodeExecutor.execute()` 立即显示了错误, 而不重试上游。由于 CommandCode 连接丢失通常是服务器断开连接, 立即重试在几乎所有情况下都成功。 3. **在多转换中缺少工具调用的推理块**: 将包含工具调用的助理转换返回给 CommandCode 时, 省略 `{type: "reasoning"}` 块可能会导致 API 拒绝, 并返回 `在思考模式中, 必须将推理内容传回给 API`。 要明确地说, 连接丢失的主要根本原因是 CommandCode 自己的基础设施上的上游不稳定(在 CommandCodeAI/command-code#597 中跟踪)。此修复提供了 9Router 端的防御性恢复性, 因此客户端可以免受这些丢失, 而 CommandCode 则可以解决其后端稳定性问题。 我编写了一个修复, 其中包含测试, 这些测试: - 在 `CommandCodeExecutor.execute()` 中添加自动重试逻辑(最多 2 次尝试, 并进行延迟), 当上游返回可重试的 502/503/504 错误之前令牌流。 - 在 `commandcode-to-OpenAI.js` 中在中流错误事件中抛出, 而不是发出虚假的成功 `finish_reason: "stop"` 部分。 - 确保包含工具调用或思考内容的助理消息在 `OpenAI-to-commandcode.js` 中包含推理块。 - 在 `tests/unit/commandcode-executor.test.js` 中添加单元测试, 以覆盖重试恢复。 我很快就会提交一个带有这些更改的 PR。

内容来源: decolua/9router