本文件记录 ManagerForClaudeCode 对 claude-code-router(ccr)源码的全部本地补丁。
每次 npm update -g @musistudio/claude-code-router 之后,dist 里的补丁会被冲掉,
必须按本清单在源码里重新确认/重打,再重新构建或同步 dist。
当前基准版本:上游 v3.1.3(commit 057abaa1)。
补丁共 6 个文件,大部分以 // CCR patch: 注释标记,可用
git diff 或搜索该注释快速定位。
- 文件:
packages/core/src/gateway/core-runtime/supervisor.ts - 内容:
spawnGatewayProcess的 fork 选项加windowsHide: true。 - 原因:
ccr start不再弹出 node 控制台窗口。
- 文件:
packages/core/src/agents/app-info-paths.ts - 内容:
getAppInfoPaths的三个字段(chatgptAppPath / opencodeAppPath / workbuddyAppPath)直接返回空字符串,并删除两个 import。 - 原因:该探测会同步 spawn 多个 PowerShell 子进程,把管理服务器(3458 端口)
的事件循环卡住几十秒,导致
http://127.0.0.1:3458/刷新很慢。 这些路径仅用于信息展示;真正的启动器(launchers)在需要时仍会实时探测。
- 文件:
packages/core/src/platform/windows-app-discovery.ts - 内容:3 处
spawnSync各加timeout: 3_000;其中 2 处同时加maxBuffer: 4 * 1024 * 1024。 - 原因:防止 PowerShell / where.exe 探测无限期挂起。
- 文件:
packages/core/src/profiles/launch-service.ts - 内容:2 处
spawnSync加超时(一处 3 秒、ensureWindowsUserPath一处 5 秒)。 - 原因:同补丁 3。
- 文件:
packages/core/src/agents/opencode/app-launch.ts - 内容:
findWindowsExecutablePid的spawnSync加timeout: 3_000。 - 原因:同补丁 3。
- 文件:
packages/core/src/config/config.ts - 内容:
gateway.port解析改为readPort(process.env.CCR_GATEWAY_PORT) ?? readPort(gateway.port)。 - 原因:托盘设置窗口允许用户改服务端口,但 CCR 配置在 sqlite 里、外部进程不好写;
管理端口本就有
CCR_WEB_PORT环境变量覆盖(上游支持),网关口没有,补一个同款的。
claude-code-router/ 是 git submodule(remote:git@github.com:Yue021130/claude-code-router.git,
上游 musistudio 的 fork),内部分支约定:
main— 只跟踪上游,保持与upstream/main一致;custom— 全部本地补丁维护在此分支,工作区平时停留在这里。
上游有新版本时(在 claude-code-router/ 目录内):
git fetch upstream
git checkout main
git merge upstream/main # 快进合并上游更新
git push origin main # 同步到你的 fork
git checkout custom
git merge main # 合进补丁分支;上游改了补丁同文件会冲突,解决时保留补丁
git push origin custom然后回到 MFC 更新 submodule 指针:
cd ..
git add claude-code-router
git commit -m "chore: bump ccr"
git push核对补丁:在 claude-code-router/ 里 git diff main...custom --stat
应始终等于本清单的 6 个文件;git log --oneline main..custom 是补丁提交列表。
历史教训:曾用 subtree + squash 管理补丁,上游无新提交时 pull 会算出反向合并、 把补丁精准回滚(2026-10-18 踩过)。fork 分支模型下
git merge是真三方合并, 不存在此问题。
- ccr 运行数据:
%APPDATA%\claude-code-router\(网关口 40229,管理口 3458) - 全局安装副本(npm update 会覆盖):
Z:\Nodejs_Global\node_global\node_modules\@musistudio\claude-code-router\dist\main\cli.js - 本地构建并同步到全局安装:
powershell -File scripts\publish-local-ccr.ps1(产物 =packages/cli/dist+packages/core/dist合并覆盖全局 dist; 全局的 better-sqlite3 原生模块不动;本地npm install需--ignore-scripts跳过原生编译,详见脚本注释)