CSSwitch 版本
v0.2.1
macOS 版本 + 芯片
macOS 27.0 (Darwin) / Apple M series (arm64)
用的是哪个 provider
DeepSeek
复现步骤
- 打开 CSSwitch,填 DeepSeek key,点「一键越过登录」
- 浏览器打开 Claude Science,确认能正常对话
- Kill 代理进程:
kill $(lsof -t -iTCP:18991 -sTCP:LISTEN)
- 返回浏览器,向 Science 发一条消息
- 观察报错
(实际场景中代理也不是被手动 kill 的——我在配置权限 bypass 时重启了 Science daemon,代理进程连带退出,用户侧看到的就是下面这个 403)
期望结果 / 实际结果(含完整报错文字)
期望:
- 代理进程挂掉后,CSSwitch 有健康检查机制自动重启
- 如果无法自动重启,至少给用户明确的错误提示:"代理进程已退出,请重新点击一键启动"
实际:
Agent Failed
403 {"type":"error","error":{"type":"permission_error","message":"forbidden"}}
这个 permission_error forbidden 极具误导性——看起来像鉴权失败(API key 不对),实际是代理进程不在,Science 连不上本地 18991 端口。
日志(可选,强烈建议)
Science 侧(server.log):
不产生任何与代理连通性相关的日志——因为 ANTHROPIC_BASE_URL 指向 localhost:18991,连接被拒是 TCP 层面的问题,Science 侧没有区分"代理挂了"和"鉴权失败"的逻辑。
代理侧(proxy.log):
代理进程已退出,无日志输出。
诊断方法
# 1. 检查代理是否在运行
lsof -iTCP:18991 -sTCP:LISTEN
# 如果无输出 → 代理挂了
# 2. 直接 curl 测试代理
curl -s "http://127.0.0.1:18991/health"
# 如果连接被拒 → 代理挂了
# 3. 手动重启
DEEPSEEK_API_KEY="sk-xxx" \
python3 /Applications/CSSwitch.app/Contents/Resources/proxy/csswitch_proxy.py \
--provider deepseek --port 18991 --auth-token <secret> &
影响范围
不仅手动 kill 会发生。实际遇到的情况:
- 用户修改
preferences.json 需要重启 Science daemon
- Kill daemon 时 CSSwitch app 可能连带退出代理进程
- 重启 daemon 后代理没跟着恢复
- 用户看到 403 → 以为是 API key 问题 → 反复检查 key → 浪费时间
建议修复方向
- 短期:代理出错时返回更明确的错误信息,如
{"type":"error","error":{"type":"proxy_unavailable","message":"Cannot reach upstream API. Is the proxy running?"}},而不是泛型 permission_error
- 中期:CSSwitch GUI 内嵌代理健康指示灯(绿色圆点表示代理运行中)
- 长期:用 macOS
launchd 做代理进程守护(KeepAlive=true),挂了自动拉起
确认
CSSwitch 版本
v0.2.1
macOS 版本 + 芯片
macOS 27.0 (Darwin) / Apple M series (arm64)
用的是哪个 provider
DeepSeek
复现步骤
kill $(lsof -t -iTCP:18991 -sTCP:LISTEN)(实际场景中代理也不是被手动 kill 的——我在配置权限 bypass 时重启了 Science daemon,代理进程连带退出,用户侧看到的就是下面这个 403)
期望结果 / 实际结果(含完整报错文字)
期望:
实际:
这个
permission_error forbidden极具误导性——看起来像鉴权失败(API key 不对),实际是代理进程不在,Science 连不上本地 18991 端口。日志(可选,强烈建议)
Science 侧(server.log):
不产生任何与代理连通性相关的日志——因为 ANTHROPIC_BASE_URL 指向 localhost:18991,连接被拒是 TCP 层面的问题,Science 侧没有区分"代理挂了"和"鉴权失败"的逻辑。
代理侧(proxy.log):
代理进程已退出,无日志输出。
诊断方法
影响范围
不仅手动 kill 会发生。实际遇到的情况:
preferences.json需要重启 Science daemon建议修复方向
{"type":"error","error":{"type":"proxy_unavailable","message":"Cannot reach upstream API. Is the proxy running?"}},而不是泛型permission_errorlaunchd做代理进程守护(KeepAlive=true),挂了自动拉起确认