Repository navigation
[track] claude-bridge(Claude) 走 bili 代理:端到端确认压缩生效 + 不再超窗误拒 #1339
Copy link
Copy link
Closed
Description
来源: ranxianglei/billion-context-pi#519 (ranxianglei/billion-context-pi#519) 分析「pi + claude-bridge(Claude)走 bili 时压缩不生效 / 本地误拒」时发现
背景
报告者在 pi 里用 claude-bridge(即 Claude Code)走 bili。原始讨论在 billion-context-pi 侧,但根因与修复域都在本仓库(代理侧),故按跨仓惯例在此立一个场景级跟踪项。
原 issue 有一处需要澄清的混淆:
- 「装成 pi 插件拦不到 CC 子进程」——这对 pi 插件 / in-process 链路成立(bcp 的 compress 是进程内改写
event.messages,够不到独立的 CC 子进程)。 - 但走 bili 代理 / 启动器时所有流量都过代理,CC 子进程的请求是可被看到并压缩的。
这是两条不同的链路,不能混为一谈。本项针对的是后者(代理链路)。
为什么单独立这个(而非重复现有 issue)
现有相关 issue 都是单点根因修复且已 closed:
- fix: honor anthropic-beta context-1m to size the context window #301 / fix: honor anthropic-beta context-1m to size the context window #305 — honor
anthropic-beta: context-1m,把窗口定到 1M(其证据正是「input≈261k 被判 131% 超窗」这类历史误拒) - Claude Opus 5 经中转被当 200K 用:models.dev 查找被 host 门槛旁路 + 面板硬编码 200K 兜底 + 变体后缀失配 + 自愈只降不升 #392 — Claude 经中转被硬编码 200k 兜底 / 变体后缀失配 / 自愈只降不升
- [native] claude: three-mode alignment (proxy / launcher / native plugin) + runtime-info #964 — claude native 三模式对齐 + runtime-info(真实窗口来源之一)
- fix: remove runtime context-window learning entirely (#987) #992 — 运行时窗口学习整体移除(窗口只来自声明)
- fix: side-request guard must not clamp on the host usage baseline (#1110) #1111 — side-request guard 误用 host 基线致无关请求 413(同族、方向相反)
- CC 会话支持簇:Claude Code sessions collide:
x-claude-code-session-idheader not recognized, causing cross-conversation compression-state contamination #91 fix(session-id): recognize x-claude-code-session-id from Claude Code CLI #92 [CC] context suddenly explodes (e.g. 260K → 530K), triggers Claude Code autocompact, then task drift #68 fix: compress count_tokens so Claude Code never trips autocompact #72 Subagent first token stalls 1-2min: withSessionLock covers full forward + slow flash upstream first byte #970 fix: split Claude Code subagent sessions so they stop queueing on the main session lock (#970) #975 MCP tools fail with 'unknown plugin conversation' after Claude Code --resume (shim holds a stale session id) #656
但没有一个 issue 以**「claude-bridge + Claude 走 bili 端到端是否健康」**为主题做跟踪。本项补的是这个场景级缺口(沿用仓库 track: 惯例,参考 #470)。
本项要在当前 build 上逐项确认的事
- 压缩确实对 CC 子进程流量生效:一个 claude-bridge 会话在高上下文后应观察到压缩事件触发、下一轮 input 下降。
- 窗口被正确解析为 1M(而非 200k):确认 bridge 启动路径会把
anthropic-beta: context-1m(或[1m]模型 id 标记)带到代理,使 fix: honor anthropic-beta context-1m to size the context window #301 / [native] claude: three-mode alignment (proxy / launcher / native plugin) + runtime-info #964 的修复对该路径生效。 - 不再出现历史「217k 超窗」类本地误拒:实际用量 < 1M 时不应被本地判为超窗而拒绝 / 紧急压缩。
任一项在当前 build 上失败 → 转成带复现的具体 bug;全部通过 → 关闭本项并回链证据。
明确声明
我不主张这是一个当前仍存在的活 bug —— 我手上没有在最新 build 上的具体误拒复现。这是一个验证 / 回归跟踪项,用来把分散在多个已修 issue 里的场景收拢到一个可追踪入口,并确认这些修复在 claude-bridge 这条具体路径上协同成立。若 owner 认为该场景已被现有 issue 充分覆盖、无需单独跟踪,可直接关闭本项并在结尾指向 #301 / #964。
关联
- 原始讨论:As long as pi is using claude-bridge (i.e., Claude), bili's compression effectively won't kick in. Installing it as a pi plugin won't make it intercept Claude's requests. | 只要 pi 用的是 claude-bridge(也就是 Claude),bili 的压缩实际上不会生效。 装成 pi 插件并不会让它接管 Claude 的请求。 billion-context-pi#519
- 根因修复(已修):fix: honor anthropic-beta context-1m to size the context window #301 fix: honor anthropic-beta context-1m to size the context window #305 Claude Opus 5 经中转被当 200K 用:models.dev 查找被 host 门槛旁路 + 面板硬编码 200K 兜底 + 变体后缀失配 + 自愈只降不升 #392 [native] claude: three-mode alignment (proxy / launcher / native plugin) + runtime-info #964 fix: remove runtime context-window learning entirely (#987) #992 fix: side-request guard must not clamp on the host usage baseline (#1110) #1111
- CC 会话支持:Claude Code sessions collide:
x-claude-code-session-idheader not recognized, causing cross-conversation compression-state contamination #91 fix(session-id): recognize x-claude-code-session-id from Claude Code CLI #92 [CC] context suddenly explodes (e.g. 260K → 530K), triggers Claude Code autocompact, then task drift #68 fix: compress count_tokens so Claude Code never trips autocompact #72 Subagent first token stalls 1-2min: withSessionLock covers full forward + slow flash upstream first byte #970 fix: split Claude Code subagent sessions so they stop queueing on the main session lock (#970) #975 MCP tools fail with 'unknown plugin conversation' after Claude Code --resume (shim holds a stale session id) #656
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
ranxianglei commentedon Sep 25, 2026
[bot] 🏷 收到,开始按当前 build(master
a7137384,v0.1.152)逐项验证。验证计划:
x-claude-code-session-id绑定会话,见src/session-id.ts:54/229)。我会用 built proxy + 假上游跑一个「多轮增长 → 压缩事件触发 → 下一轮转发 input 下降」的合成端到端场景,并核对现有 anthropic e2e 回归。anthropic-beta: context-Nm/[Nm]模型后缀,src/server/context-window.ts:86-114)+ 跑tests/anthropic-beta-window.test.ts、tests/issue1321-tier-window-cap.test.ts,并用合成请求确认[window] source=anthropic-beta native=1000000日志。同时确认无 tier 证据时 [bug] window resolution: registry 1M advertisement outranks built-in 200k standard window for claude native without context-1m beta header #1321 的 registry cap 行为正确(标准计划就该是 200K,不算误判)。结论与逐条证据随后回帖;任一项失败会转成带复现的具体 bug issue。
ranxianglei commentedon Sep 25, 2026
三项全部在当前 master(v0.1.152 / a713738)上验证 PASS,无需任何代码改动。按本项自己的成功标准(「全部通过 → 关闭本项并回链证据」),证据如下,建议关闭。
验证方法
写了一个合成端到端 harness(本地验证产物,未提交、未进 PR):真实 bili 代理(
src/server.ts的startServer,与tests/e2e-anthropic.test.ts同一 rig)+ 假 Anthropic upstream(本地 http)+ CC 形状请求——x-claude-code-session-id会话头、user-agent: claude-cli/...、x-app: cli、anthropic-version: 2023-06-01、非空 tools、stream:true,XDG 全隔离。两组对照:anthropic-beta: context-1m-2025-08-07(bridge 启动路径应带的头),模型claude-sonnet-4-5(表默认 200K,正好复现 fix: honor anthropic-beta context-1m to size the context window #301/Claude Opus 5 经中转被当 200K 用:models.dev 查找被 host 门槛旁路 + 面板硬编码 200K 兜底 + 变体后缀失配 + 自愈只降不升 #392 的误拒条件)每组 4 轮:8 → 16 → 24 → 26 条消息(每条约 5K token),upstream 上报 input_tokens 按 40K → 217K → … 推进(217K 即历史「超窗误拒」场景数字)。
逐项结果
② 窗口解析为 1M(前置项) ✅
beta 头把该请求的窗口定到 1M(#301/#964 修复在 bridge 路径上生效);会话经
x-claude-code-session-id绑定([session] created kind=explicit header=x-claude-code-session-id),4 轮全程单会话,effectiveContextLimit=1000000记入 session metadata。① 压缩对 CC 子进程流量生效 ✅
R3(上报 217K / 1M = 22%)触发温和 nudge,假模型照 nudge 里的 range 发起
compress工具调用,代理在 proxy 模式下服务端执行并重发:下一轮客户端请求(R4)转发体积 180,555 B ≤ 压缩前的 45%;客户端流里恰好一个
message_stop、零compress工具调用泄漏(ephemeral 工具调用不进 CC 的历史,符合两模式契约)。③ 不再出现「217k 超窗」类本地误拒 ✅
any_forward_emergency=false)。EMERGENCY T1: usage=109% (217000/200000)+ preflight 路径(context 217000 tokens reached preflight target 200000 ... preflight compressing before forward),但仍然全部 200、无本地拒绝——窗口真的只有 200K 时是优雅降级而非误拒。一个诚实的注脚:control 组 R3 出现了 17 次 forward。这是合成 upstream 的假象——它对每次重发都重复上报同一个 217K,导致 emergency nudge 反复注入、假模型反复调 compress 直到循环上限收敛;真实 upstream 在 fold 后会报更小的 input,收敛需要 1–2 次重发(main 组实测
R3_forwards=2)。不是产品缺陷。结论与处置建议
#301 / #392 / #964 等根因修复在 claude-bridge(Claude Code 走 bili 代理)这条具体路径上协同成立:压缩生效、窗口 1M、无误拒。这是纯验证项,没有代码改动,因此没有 PR。若 owner 希望把这个场景钉成回归测试,可以把该 harness 精简成一个 gated test 文件提 PR——等你拍板,我不擅自扩 scope。
建议直接关闭本项,证据以本评论为准。
ranxianglei commentedon Sep 26, 2026
三项 track 全部核验通过 ✅,证据落地在 PR #1389(
tests/claude-bridge-e2e.test.ts,3/3 在当前 master 上本来就绿,PR 只是钉住行为):effectiveContextLimit === 1_000_000、lastWindowSource === "anthropic-beta",MEASURED 261206 token 流量双轮 200、无任何 over-window 拒绝。按 issue 自设的关闭条件(全部通过 + 证据链接),关闭本 track。#1389 由人合并。
Merge pull request #1389 from ranxianglei/2026-09-26_claude-bridge-e2e
test: pin claude-bridge lane — compress shrinks wire, beta lifts wind…