
一张把 session-affinity-ttl 当成缓存 TTL 的单以 not planned 关闭:这个键只管会话绑哪张凭证,一小时缓存在客户端开;另附凭证被载入两次的自查、Codex 回放修复进 dev、三种限流文案各属哪一层。
cache_control,也不延长上游提示缓存的寿命。一小时缓存要在客户端开。auth_index 重置只清掉其中一条;Codex commentary 的回放修复进了 dev、发行版还没有。routing.session-affinity: true、routing.session-affinity-ttl: 1h、模型 claude-opus-5-5、同一个 Claude Code 会话。前两轮相隔 28 秒,只写了 677 与约 1.1K 的缓存;第三轮距上一条 24 分 05 秒,cache_read_input_tokens 归零、cache_creation_input_tokens 写了约 326.7K,整段重写1。session-affinity-ttl 的注释是「How long session-to-auth bindings are retained. Default: 1h」,它说的是绑定保留多久3。
config.example.yaml 第 162–164 行:总开关 session-affinity 默认 false,下一行才是 session-affinity-ttl: "1h",注释只提「绑定保留」。同段第 165–173 行讲的是子代理继承,与缓存寿命无关。3service_config.go 把 SessionAffinityTTL 读成 time.Duration,交给会话亲和选择器当 TTL4。整条链路上没有一处写 cache_control。cache_control sent upstream」2。cache_control 由一个布尔决定:shouldEnsureCacheControl 返回 !confirmedClaudeCode && (cloaked || countCacheControls(payload) == 0)5。
internal/runtime/executor/claude_executor_cloaking.go 第 2130–2135 行:第 2134 行的返回式里,只要请求被认成原生 Claude Code(confirmedClaudeCode 为真),整个表达式就是 false,CPA 不再接管断点位置。cpaOwnsCacheControl && fp.ProfileClaudeCodeCLI && (!isSubagent || subagent1h) && !isProbeOrHelper 成立才把 ttl 升成 1h6。{"type":"ephemeral"} 发出去。CPA 只在它自己摆断点时才顺手改 ttl。Anthropic-Beta 里也没有 extended-cache-ttl-2025-04-11 时,stripClaudeCacheControlTTL 会把所有块的 ttl 删掉6。Task 工具起的子会话因此常年停在 5 分钟档。normalizeCacheControlTTL 按 tools → system → messages 的顺序走一遍。遇到第一个不带 ttl:"1h" 的块就把 seen5m 置真,此后每一个 1h 块的 ttl 都直接被删7。
processBlock 里 ttl 不是字符串 1h 就置 seen5m(第 2207–2210 行),seen5m 为真后走 sjson.DeleteBytes 删 cache_control.ttl(第 2215–2221 行)。注释写明这是为了满足上游的顺序约束。prompt-caching-scope-2026-01-05 下,5 分钟块后面再出现 1 小时块是错误请求。降级让请求不失败。claudeCodeCLIBetas 会追加 extended-cache-ttl-2025-04-118。所以客户端打开后,请求体与 beta 头是配对的。ephemeral_5m_input_tokens 与 ephemeral_1h_input_tokens,用量解析只读 cache_read_input_tokens 与 cache_creation_input_tokens 两个总量9。usage.cache_creation.ephemeral_5m_input_tokens 与 ephemeral_1h_input_tokens。报障人就是按这对数算出 1.649 与 2.629 的1。用一条 curl 打同一条链路、把响应体留住,两个数就是答案。cache_creation_input_tokens 只是总量,看不出档位。账单涨了而命中率没动,多半是这一档没生效——5 分钟与 1 小时的写入价差六成。
auth_index、两条互相独立的池位。authByIndex 只返回第一个匹配项12,而 POST /v8/management/routing/cooldown/reset 拿它去清状态13,于是只清掉一条,另一条带着旧冷却继续被跳过。两条池位也意味着一张号可能被同时选中两次。curl -s -H "Authorization: Bearer $MGMT_KEY" \
http://127.0.0.1:8317/v8/management/credentials \
| jq -r '.files[].auth_index' | sort | uniq -dLoad 里加了一个按 auth_index 的去重,并附了一条用同索引两条凭证的回归测试14。#6994 报的是内容丢失:Codex 的 phase:"commentary" 消息被翻成不带签名的 thinking 块发给 Claude 客户端,下一轮客户端把它原样回放时,CPA 把这段丢掉15。COMMENTARY_SENTINEL 与 FINAL_SENTINEL。转发的 input 里只剩 final answer 那条,COMMENTARY_SENTINEL 消失;把同一块改成普通 text 就两条都在15。cpa:commentary 零命中。Closes: #6994)用内部标记解决:流式与非流式都给 commentary 块盖上 cpa:commentary:v1,回放时在签名处理之前还原——目标是 Codex 就还原成带 phase:"commentary" 的 assistant 消息,目标是 Claude、OpenAI、Gemini、Antigravity 就还原成普通 assistant 文本,标记本身不会发给任何上游16。#6994 现在挂着 Fixed 标签、状态仍是 open,也就是进了 dev 没发版。用户侧的体感是「模型忘了自己上一轮说过什么」。今天没有开关能绕,只能等下一个 tag。#8317 昨天问的是 Our servers are currently overloaded,今天 16:04 有人补了一句「还有 Concurrency limit exceeded for account」1718。#8321 开在 10-23,问的是家庭 ultra 账号用反重力 4A 报 404、一直没修好。今天 14:24 与 16:31 两条跟帖把「antigravity 一用就限流」叠了上来,仍然是 0 条维护者答复19。| 客户端看到的话 | 谁发的 | 先动哪 |
|---|---|---|
Concurrency limit exceeded for user | sub2api 用户并发槽20 | 调该用户的 concurrency |
Concurrency limit exceeded for account | sub2api 账号并发槽20 | 调该账号的并发数 |
Our servers are currently overloaded | 上游原话,容量让渡21 | 等,或降并发 |
concurrencyErrorResponse 用 fmt.Sprintf("Concurrency limit exceeded for %s, please retry later", slotType),槽位是 user 还是 account 由错误自己带20。
backend/internal/handler/concurrency_error_response.go 第 14–37 行:gatewayConcurrencyLimitCode 与那句 fmt.Sprintf。队列满时是另一句 Too many pending requests,同样是本地 429。concurrency 字段(面板上的「并发数」),不是用户级那个 522。看到 account 那句去改用户并发,改不动。Upstream service is temporarily overloaded, please retry later21。它不是本地限流,抬并发只会更糟。#7000(Antigravity 渠道上 Claude 5.5 带结构化输出稳定回 400,还没有回应)、#6998(请求拦截器的编码与复制开销)、#6999(CORS 放行 Authorization);sub2api #8351(gpt-6.1-sol 超过 272k 仍按双倍计费,还没有回应)与三个小修复 PR #8352、#8353、#8354。github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
status.openai.com
status.claude.com
status.cloud.google.com
codex-reset.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.