Model: glm-5.3
双 bili 串联无检测:三重处理导致状态搅乱(issue #292 主因)
证据(来自 issue 附带日志 bili (8).log)
13:21:22.139Z forward POST → http://127.0.0.1:50157/bili/https://api.anthropic.com/v1/messages?beta=true
请求路径:claude → 8787(MITM,outer session 366af3e19c251c72,窗口 200000)→ 50157(prefix 实例)→ 8787(再次拦截,inner session 4b93227797589299,窗口 1000000)→ Anthropic。同一个 claude-fable-5、同一个 x-claude-code-session-id,两层各自跑 processTurn + 压缩循环 + 独立 kernel 状态:
- 模型调 compress 只有最内层(inner)折叠;outer 状态从不折叠 → 外层持续全量历史(「上下文涨」)
- inner 折叠后转发的 body 与 outer/claude 保留的全量历史不一致,跨层 ref 映射错位 → inner 状态被搅乱后 filter 几乎隐藏全部消息(13:28:17
round 1 input=2 cached=0,同时刻仍有真实 Bash 调用被裁决——证明主回合近乎空 body 转发)
- 已用纯 kernel 复现排除 kernel 嫌疑:
compress m00003–m00041 后再 compress m00005–m00044,kernel 安全处理(只为未覆盖增量建块、双摘要注入、无塌缩)。塌缩在 bili 状态层,根因是双重处理。
修复要求
- bili 向上游转发请求时加自有标记头(如
x-bili-hop: <instance-uuid>)
- 收到入站请求若已带
x-bili-hop(非本实例)→ 判定为 bili→bili 串联:
- 跳过全部处理(不注入工具/标签、不跑 acp-loop、不建 session 状态),原样透传
- 打
[warn] 醒目日志:检测到下游 bili 串联,建议只保留一个实例
- e2e 测试:两个代理实例串联(A forward → B),断言 B 记录告警且请求体未被 B 二次改写(无 acp 标签注入、无工具注入)
验收
- 串联拓扑下单层处理,压缩正常折叠
- 单实例正常使用完全不受影响(claude 回传带 acp 标签的消息不误报——标记头只在 bili 自己的转发中出现,客户端不会带)
Model: glm-5.3
双 bili 串联无检测:三重处理导致状态搅乱(issue #292 主因)
证据(来自 issue 附带日志
bili (8).log)请求路径:claude → 8787(MITM,outer session
366af3e19c251c72,窗口 200000)→ 50157(prefix 实例)→ 8787(再次拦截,inner session4b93227797589299,窗口 1000000)→ Anthropic。同一个claude-fable-5、同一个x-claude-code-session-id,两层各自跑 processTurn + 压缩循环 + 独立 kernel 状态:round 1 input=2 cached=0,同时刻仍有真实 Bash 调用被裁决——证明主回合近乎空 body 转发)compress m00003–m00041后再compress m00005–m00044,kernel 安全处理(只为未覆盖增量建块、双摘要注入、无塌缩)。塌缩在 bili 状态层,根因是双重处理。修复要求
x-bili-hop: <instance-uuid>)x-bili-hop(非本实例)→ 判定为 bili→bili 串联:[warn]醒目日志:检测到下游 bili 串联,建议只保留一个实例验收