网络问题手册(本项目实战沉淀)
August 22, 2026 · View on GitHub
发布与推送在本机网络下踩过的坑及对策。工具已内置,这里存档原理。
现象一:github.com:443 被重置,api.github.com 正常
表现:git push 报 Recv failure: Connection was reset 或 Failed to connect to github.com port 443;同一时刻 gh api / gh repo view 全部正常。
原理:两类域名走不同通道策略,git 的 HTTPS 传输被掐而 REST API 存活。
对策:node scripts/github-push.mjs——git 直连失败自动降级 API 通道(blobs→tree→commit→ref)。要点:
- git blob sha 与 API blob sha 同源(内容寻址),远端已有文件直接复用,只传增量
- 不带 base_tree 的全新根树天然同步删除
- 降级路径产出单条提交(Contents API 逐文件 PUT 会刷屏,已弃用)
- 分歧保护:远端出现本地没有的提交时拒绝推送
注意:API 推送后本地与远端历史形状不同(内容一致)。网络恢复后对齐:git fetch origin && git reset origin/main。
现象二:Node fetch 被本机代理 TLS 链拦截
表现:unable to verify the first certificate / UNABLE_TO_VERIFY_LEAF_SIGNATURE;gh CLI 正常(Go 栈用系统 CA)。
对策:node --use-system-ca(Node ≥ 24)。github-push.mjs 检测到证书错误会自动带该参数重启自身,无需手动。
现象三:npm 安装超大包(如 @deepseek-ai/dsh 全家桶)极慢或假死
表现:npx/npm i 长时间无输出,缓存膨胀至 GB 级。
对策:
- 让它跑完一次——缓存热了以后重装只要两分钟(实测 454 包 / 2min)
- 优先用 pnpm(profiles 目录内的安装本来就由 dsh 转发给 pnpm,很快)
- 已装用户升级 dsh 生态包走
dsh plugin --profile <名> update <包>,不要全局重装
现象四:peer dependency 警告(安装 dsh 插件时)
表现:pnpm 警告 missing peer @deepseek-ai/dsh-agent 等一串。
原理:dsh 架构里这些平台包由宿主在启动时提供(内置 bundle 从 dsh 安装目录解析,pnpm 只管 profile 树外包),静态分析看不见但运行时齐备。
对策:无视。这是 dsh 插件安装的预期噪音。
其他
- jq 不可用:本机脚本一律用 Node 内置能力(fetch/execFileSync),零外部依赖
- Windows 换行:克隆下来的文件是 CRLF,frontmatter 解析前需
replaceAll('\r\n', '\n') node --test test/位置参数:Windows 下会被当模块入口解析,统一用node --test(自动发现)