API Error: Connection lost mid-response 的原因与对策——v2.1.227 改名而来的“连接断了”错误
Claude Code 在响应中途停住,屏幕上出现 API Error: Connection lost mid-response. The response above may be incomplete.——把这句话原样拿去搜却几乎找不到资料,是因为这是一个比较新的名字。官方错误参考明确写着,在 v2.1.227 之前,Connection lost mid-response 显示为 Connection closed mid-response;与此同时,Response stalled mid-stream 被换成了 The response stopped arriving,Connection closed while thinking, before producing a response 被换成了 Connection lost before a response was produced。也就是说,现象早就存在,只是单词变了。本文以这次改名为起点,只依据官方文档和公开 Issue 来梳理。先讲“中途被切断”的 4 条消息(Server error、Connection lost、computer went to sleep、The response stopped arriving)的官方定义,以及已经流出来的输出为什么会被刻意保留——因为重发有可能把同一次工具调用执行两遍——还有恢复步骤就是回复 continue 这一点。接着用官方的 Automatic retries 分支说明为什么不会自动重试:什么都还没完成时的断开会以指数退避最多重发 10 次,思考结束但还没输出时最多重发 2 次并以 Connection lost before a response was produced 收尾,完成一个块之后则不再重发,只附上这条提示。再往后是可能断开的 3 个层次(本机与线路、代理和网关等链路、服务端与连接复用)、mTLS 证书轮换时的重新读取(v2.1.232 之后)、9 步排查清单、4 个流监视计时器的默认值(first-byte 180 秒、event 300 秒、byte 180 秒、body idle 5 分钟)与 CLAUDE_CODE_MAX_RETRIES、CLAUDE_CODE_RETRY_WATCHDOG、API_TIMEOUT_MS 等环境变量、与 8 种相似消息的区分对照表,以及原始 HTTPS 一切健康却只有 CLI 因 ECONNRESET 而掉的真实报告(#86473 和 #85979)。最后按确信度分开说明:症状和恢复步骤在官方有文档,但原因的官方说明还没有出来,CHANGELOG 里也找不到这次改名的记载。