一、问题描述
运行 claude 命令,界面持续显示 “Unable to connect to API (ECONNRESET) · Retrying in 14s · attempt 10/10”,输入任何指令均无法建立连接,重试 10 次后仍失败,所有会话不可用。
复发场景:回滚修复后,每次打开 VSCode 使用 Claude Code 时问题再次出现。
二、排查过程
按“本地网络 → 链路 → 服务端 → 客户端”逐层排除,关键结果如下:
排查项 | 方法 | 结果 |
DNS 与链路 | nslookup / curl 直连 api.deepseek.com | 正常,走 CDN(eo.dnse1.com),双 IP 均通 |
API 服务端 | 带 Key 真实请求(鉴权/流式/大请求/thinking/HTTP2) | 全部 HTTP 200,服务端健康 |
代理配置 | 环境变量与系统代理检查 | 未配置代理 |
客户端复现 | claude -p 一次性模式 vs 交互模式 | 一次性偶发成功 → 指向客户端版本问题 |
版本升级记录 | .last-update-result.json | 15:19 自动升级 v2.1.220 → v2.1.221 |
包结构对比 | npm tarball 对比新旧版本 | 220=22KB JS 包;221=278MB Bun 编译二进制 |
运行日志 | debug 日志 / 遥测 | Stream connection error (ECONNRESET),sourceURL=B:/~BUN/... |
复发溯源 | VSCode 扩展目录 / 升级记录时间戳 | VSCode 扩展内嵌 2.1.221,启动时将全局包升级回 2.1.221 |
关键证据
- 故障时间与升级时间吻合:升级记录时间戳 15:19:40,与问题出现时间一致;
- v2.1.221 换用 Bun 运行时:遥测 is_running_with_bun=true,日志堆栈来源 B:/~BUN/root/src/entrypoints/cli.js;
- 错误仅发生在流式连接:日志持续报 “Stream connection error (ECONNRESET) — retrying streaming”;
- 复发元凶:VSCode 扩展 anthropic.claude-code-2.1.221-win32-x64 启动时将全局 claude 升级回 2.1.221(升级记录时间戳 23:40 与打开 VSCode 时刻一致)。
三、根因分析
根因:Claude Code 于 2026-08-04 15:19 自动从 v2.1.220 升级至 v2.1.221,新版本由 JS 包改为 Bun 运行时编译的原生二进制。Bun 的 TLS 指纹 / HTTP 协议栈与 DeepSeek API 的 CDN 边缘节点不兼容,导致流式请求被服务端间歇性 RST(TCP 连接重置),表现为 ECONNRESET。
复发根因:VSCode 的 Claude Code 扩展自带 2.1.221 二进制,启动时会把全局 claude 强制升级回有问题的版本,覆盖已回滚的 2.1.220。
排除项:API Key 与账户余额正常、DeepSeek 服务端健康、本地网络正常、无代理配置、模型名正确。Anthropic 官方服务器被墙仅产生遥测噪音,非阻塞项。
四、解决方案
步骤 | 操作 | 说明 |
1 | 结束残留进程 | 结束锁住二进制文件的 claude.exe 进程 |
2 | 设置禁更新环境变量 | 设置用户级 DISABLE_AUTOUPDATER=1,永久禁止自动升级(官方机制,扩展与 cli 均读取) |
3 | 回滚全局版本 | npm 回滚至 v2.1.220(--ignore-scripts + 单独装 win32-x64 包 + 手动复制二进制) |
4 | 替换 VSCode 扩展内嵌二进制 | 将扩展 resources/native-binary/claude.exe 替换为 2.1.220,与全局一致 |
5 | 功能验证 | 版本号 / claude -p 调用 / 流式压力测试 8/8 通过 |
关键命令:
Get-Process -Name claude | Stop-Process -Force
[Environment]::SetEnvironmentVariable("DISABLE_AUTOUPDATER","1","User")
npm install -g @anthropic-ai/claude-code@2.1.220 --ignore-scripts
npm install -g @anthropic-ai/claude-code-win32-x64@2.1.220 --ignore-scripts
# 手动复制 win32-x64 包 claude.exe 至 wrapper bin/ 与 VSCode 扩展 resources/native-binary/
五、经验教训
- 版本升级是连接类故障的第一排查对象:遇到“以前能用、突然不能用”,先核对 .last-update-result.json 时间戳;
- 运行时变更(JS→Bun/Go/Rust 编译)会改变 TLS 指纹与 HTTP 行为,可能被 CDN/WAF 拦截——这是“两端健康但连不上”的典型场景;
- 外层 curl 测试只能证明服务端健康,必须用问题客户端本身复现才能定位根因;
- VSCode 扩展会强制同步全局 claude 版本,settings.json 的 autoUpdates:false 挡不住,必须用 DISABLE_AUTOUPDATER=1 环境变量 + 同步替换扩展内嵌二进制。