
CLIProxyAPI 这一小时在 dev 上多出两笔修复:自定义入口点终于能写进配置,插件刷新也不再把已停用的凭证重新启用;两条都要等下一版,正文给出今天能做的临时处置与自查步骤。
| 仓库 | 最新版 | 发布时间(北京) | 窗口内 |
|---|---|---|---|
| CLIProxyAPI | v8.0.52 | 11 月 3 日凌晨 | 零发版,dev 多 11 笔 |
| sub2api | 0.2.19 | 10 月 28 日 18:16 | 零发版 |
| codex-proxy | v2.1.22 | 11 月 3 日 07:35 | 零发版 |
| codex2api | v3.1.2 | 10 月 28 日 04:40 | 零发版 |
CLAUDE_CODE_ENTRYPOINT=t3-code。中转把它当外来客户端,于是照常做隐身改写。X-App、beta 列表、Stainless 版本、metadata.user_id、system blocks、tools 上完全一致,差别只在 UA 的那一段和 billing 头里的入口点2。upstream.claude.header-defaults 下面:upstream:
claude:
header-defaults:
native-entrypoints: ["t3-code"]# 开头。运维要自己取消注释,或者新建这个键4。
config.example.yaml 第 490–519 行。这一段整块是注释掉的,第 515 行 # native-entrypoints: ["t3-code"] 就是新增的那一行,照抄后要把行首的 # 去掉4normalizeClaudeEntrypointNames 做四件事:小写化、去首尾空格、丢掉空串、按原顺序去重。internal/config/config_normalization.go,由配置规范化阶段调用5。
internal/config/config_normalization.go 第 85–114 行。函数体(第 88–111 行)逐个处理字符串:小写、TrimSpace、跳过空串、按首次出现顺序去重,最后判空返回 nil5cli、sdk-cli、sdk-ts、claude-vscode。新加的 isNativeClaudeEntrypoint 在这四项之外再读配置。claude-code-<entrypoint>,测试里断言 t3-code 得到 claude-code-t3-code。
internal/runtime/executor/helps/claude_client_detection.go 第 54–99 行。第 67–72 行的内置四项原样保留,第 74–91 行是新加的配置判定,第 93–99 行负责把命中项合成 subclient 名6Anthropic-Beta 头,请求仍然判为未确认3。X-App: cli、UA 里的 claude-cli/…(external, <entrypoint>) 段、claude-code beta 头,以及 metadata.user_id。count_tokens 那类请求单独放宽。cc_entrypoint 保留真实值,方便上游侧对账。claudeDeviceProfileSubclientScope 改用同一个判定函数,自定义入口点从 other 桶变成独立桶。stabilize-device-profile: true 的实例,升级后这一组凭证会重建一次指纹。UA 与 beta 头稳定的客户端不受影响,混用多种客户端的号池会出现一次集中抖动。yaml.Unmarshal,没有开严格字段校验,拼错的键也不会报错。cloak_mode: never,或者给 API key 写 api-keys.claude[].keys[].cloak.mode。upstream.claude.disable-claude-cloak-mode 先别动。它会把所有 Claude 请求一起关掉,包括你还没想清楚的那些客户端。RefreshAuth 只回 Provider、ID、Metadata 的 auth provider 插件;PATCH /v8/management/credentials/status 把某张凭证停用;POST /v8/management/credentials/refresh;Host.RefreshAuth 会把 ID、Label、Metadata、StorageJSON、NextRefreshAfter 从旧记录带过来。Disabled 不在回填名单里,它只取插件返回的 AuthData。Go 的 bool 没有「未设置」这个状态,插件返回一个最小结构体,就等于把停用标志写成了 false。auth_provider.go 第 1009–1010 行连着两个 preserve 函数,中间没有第三行。
internal/pluginhost/auth_provider.go 第 994–1022 行。第 1009 行与第 1010 行之间就是缺陷现场:这里少一个把停用状态带回去的函数,全文件搜 preserveAuthDisabledState 命中 0 处8preserveAuthDisabledState。旧记录里 Disabled 为真、或 Status 是 StatusDisabled,就把新数据里的 Disabled 置回真。Host.RefreshAuth 里一次,执行器适配器的 Refresh 里一次。两条刷新路径都盖住了。
internal/pluginhost/auth_provider.go 第 1039–1064 行。第 1052–1059 行是新函数,第 1056 行的条件是 auth.Disabled || auth.Status == coreauth.StatusDisabled,第 1057 行把 data.Disabled 写回真10GET /v8/management/credentials 返回的每条记录都带 disabled、status、unavailable 三个字段。POST /v8/management/credentials/refresh 前后各读一次。停用的号如果从 disabled 变回 active,就是踩中了这个缺陷。Partial System Degradation,影响级别 minor。File uploads 这一项停在 degraded_performance,窗口内没有恢复11。Operational,窗口内没有新事件13。signal.active 为 false,最新一条官方帖停在窗口之前15。cloak_mode: never。native-entrypoints: ["t3-code"],确认客户端的 UA 与 beta 头都齐,再推到其余实例。stabilize-device-profile 的:升级那一刻安排在看板前,指纹重建会带来一次集中抖动。GET /v8/management/credentials 对比刷新前后的 disabled,把被误启用的号重新停掉。File uploads 仍在降级,今晚的文件上传类任务错峰跑。github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
status.openai.com
community.openai.com
status.claude.com
status.cloud.google.com
codex-reset.com
github.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.