Skip to content

[track] claude-bridge(Claude) 走 bili 代理:端到端确认压缩生效 + 不再超窗误拒 #1339

Closed

Description

@ranxianglei

来源: 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:

但没有一个 issue 以**「claude-bridge + Claude 走 bili 端到端是否健康」**为主题做跟踪。本项补的是这个场景级缺口(沿用仓库 track: 惯例,参考 #470)。

本项要在当前 build 上逐项确认的事

  1. 压缩确实对 CC 子进程流量生效:一个 claude-bridge 会话在高上下文后应观察到压缩事件触发、下一轮 input 下降。
  2. 窗口被正确解析为 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 的修复对该路径生效。
  3. 不再出现历史「217k 超窗」类本地误拒:实际用量 < 1M 时不应被本地判为超窗而拒绝 / 紧急压缩。

任一项在当前 build 上失败 → 转成带复现的具体 bug;全部通过 → 关闭本项并回链证据。

明确声明

我不主张这是一个当前仍存在的活 bug —— 我手上没有在最新 build 上的具体误拒复现。这是一个验证 / 回归跟踪项,用来把分散在多个已修 issue 里的场景收拢到一个可追踪入口,并确认这些修复在 claude-bridge 这条具体路径上协同成立。若 owner 认为该场景已被现有 issue 充分覆盖、无需单独跟踪,可直接关闭本项并在结尾指向 #301 / #964。

关联

Activity

  1. ranxianglei commented on Sep 25, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    [bot] 🏷 收到,开始按当前 build(master a7137384,v0.1.152)逐项验证。

    验证计划:

    1. 压缩对 CC 子进程流量生效 — CC 的 Anthropic wire 请求在代理侧是标准 proxy-mode 会话(CC 用 x-claude-code-session-id 绑定会话,见 src/session-id.ts:54/229)。我会用 built proxy + 假上游跑一个「多轮增长 → 压缩事件触发 → 下一轮转发 input 下降」的合成端到端场景,并核对现有 anthropic e2e 回归。
    2. 窗口解析为 1M — 核对 rank-0 证据链(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,不算误判)。
    3. 不再本地误拒 — 检查 preflight / side-request guard 两条本地拒绝路径在 1M 窗口下对 ~217k–261k 用量的判定,合成请求实测不触发拒绝/紧急压缩。

    结论与逐条证据随后回帖;任一项失败会转成带复现的具体 bug issue。

  2. ranxianglei commented on Sep 25, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    三项全部在当前 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 全隔离。两组对照:

    每组 4 轮:8 → 16 → 24 → 26 条消息(每条约 5K token),upstream 上报 input_tokens 按 40K → 217K → … 推进(217K 即历史「超窗误拒」场景数字)。

    逐项结果

    ② 窗口解析为 1M(前置项) ✅

    [window] model=claude-sonnet-4-5 source=anthropic-beta native=1000000 effective=1000000 launcher=none configured=none peek=none fallback=false
    

    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 模式下服务端执行并重发:

    nudge INJECT T1: usage=22% (217000/1000000), growth=177000/22500 (ref=40000, interval=50000)
    [acp-proxy: compress requested 1 range(s): m00001–m00019]
    [acp-compress-obs] shrink 45% (~97290/217000 tok) foldPoint=m00001 blocks=1 postCtx≈119710
    [acp-loop] round 1: proxy tool executed; re-requesting so the model sees the result
    req #2 bytes=517649  →  req #3 bytes=139774   (重发体积 −73%)
    

    下一轮客户端请求(R4)转发体积 180,555 B ≤ 压缩前的 45%;客户端流里恰好一个 message_stop、零 compress 工具调用泄漏(ephemeral 工具调用不进 CC 的历史,符合两模式契约)。

    ③ 不再出现「217k 超窗」类本地误拒 ✅

    • main(1M 预算):217K 输入全程 4 个 200,所有 forward 无任何 emergency 标记(any_forward_emergency=false)。
    • control(真 200K 窗口,即历史上会误拒的那组参数):217K 触发 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。

    建议直接关闭本项,证据以本评论为准。

  3. ranxianglei commented on Sep 26, 2026

    @ranxianglei
    OwnerAuthor

    三项 track 全部核验通过 ✅,证据落地在 PR #1389(tests/claude-bridge-e2e.test.ts,3/3 在当前 master 上本来就绿,PR 只是钉住行为):

    1. 压缩生效 + 次轮 wire 缩小:12 对 3000 字符 payload 的 bridge 会话,round-1 模型调 compress(m00001–m00006)→ 下一请求的初始 wire 丢掉被折叠 payload、携带 summary marker(轮内 loop re-request 保留本轮已渲染消息属 wire fidelity;首条 user 消息按 kernel 设计豁免折叠渲染——rebuildMessages 的 first-user exemption)。
    2. anthropic-beta: context-1m → 1M 窗口生效:effectiveContextLimit === 1_000_000、lastWindowSource === "anthropic-beta",MEASURED 261206 token 流量双轮 200、无任何 over-window 拒绝。
    3. 无 beta 不误拒:同样 261206 流量在 200K 窗口下(131%)双轮仍 200 正常转发,无本地拒绝(EMERGENCY nudge 的差分——从未压缩的超窗流量——由 anthropic-beta-window.test.ts 钉住;压缩后无 pending 内容时 decideNudge 沉默属 kernel 设计)。

    按 issue 自设的关闭条件(全部通过 + 证据链接),关闭本 track。#1389 由人合并。

  4. added a commit that references this issue on Sep 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions