症状(2026-08-31 实机取证,bili 0.1.66 / acp-kernel 0.0.47,HEAD 0.1.67 仍在)
acp_status 的 CONTEXT BREAKDOWN 在灌入 5×51,361 字符(≈52-65K token)的 bash 输出后,先后打印 0 tool (0%) | 56 text (100%) → 611 tool (1%) → 392 tool (7%)——tool 桶最多只统计到真实工具结果量的 0.6%。取证会话 01a056ed-30b4-74f3-b283-341a734c9abe(proxy :57645,时刻 16:28:52 / 16:34:53 / 16:38:03)。
根因(acp-kernel 侧,bili dist 对应行号并列)
字段选择错误 :kernel src/report.ts:86(dist 46346)const tool = message.toolName ?? "text"。但 wire 转换器只在 tool-call 上设 toolName:src/wire/anthropic.ts:98-105 对 tool_result 只 push role:"tool", contentType:"tool-result", toolCallId, text,无 toolName ;openai.ts:141-145 同。→ 所有工具结果被记成 "text",tool 桶只含 tool-call 参数(字节级)。
同一份报告两套"tool"定义互斥 :src/recommend.ts:42-44(dist 45161)isToolMessage = contentType==="tool-call"||"tool-result"(正确)用于 Compressible ranges 行的 tool N%|text N%;report.ts:86(错误)用于 CONTEXT BREAKDOWN。一次输出自相矛盾。
双估计器混印不标尺 :CONTEXT BREAKDOWN 用 estimateTokensFast = ceil(chars/4)(kernel tokenize.ts:19-22,bili 在 dist 51221/50393/52904 显式传入);nudge 侧默认 CJK-aware 的 defaultCountTokens(tokenize.ts:5-13,注释明言 "chars/4 badly underestimates CJK")。panel.ts:49-61 有"三套刻度、绝不混算"的自家纪律,但 report 打印完全不标刻度 ,中文会话下报表系统性低估 ~4×。
pct() 地板 1 (dist 46300-46303 Math.max(1, ...)):三桶可印 1%+1%+1% 且总和 >100。
关联复发:plugin.ts:340-342 的 unprunedTokens 用 CJK-aware 估计器,却减去 estimateTokensFast 算的 sent——panel.ts:73 注释声称两侧同为 chars/4,实际混算,即已修的 release v0.1.6 #18 同类缺陷在 panel 行复活。
建议修复
验收标准
查重注记:#119 正文出现过此行但修的是压缩重试循环;#18 /#40 修看板 scale;本票的字段选择错误无人报过。
症状(2026-08-31 实机取证,bili 0.1.66 / acp-kernel 0.0.47,HEAD 0.1.67 仍在)
acp_status的 CONTEXT BREAKDOWN 在灌入 5×51,361 字符(≈52-65K token)的 bash 输出后,先后打印0 tool (0%) | 56 text (100%)→611 tool (1%)→392 tool (7%)——tool 桶最多只统计到真实工具结果量的 0.6%。取证会话01a056ed-30b4-74f3-b283-341a734c9abe(proxy :57645,时刻 16:28:52 / 16:34:53 / 16:38:03)。根因(acp-kernel 侧,bili dist 对应行号并列)
src/report.ts:86(dist 46346)const tool = message.toolName ?? "text"。但 wire 转换器只在 tool-call 上设toolName:src/wire/anthropic.ts:98-105对tool_result只 pushrole:"tool", contentType:"tool-result", toolCallId, text,无 toolName;openai.ts:141-145同。→ 所有工具结果被记成 "text",tool 桶只含 tool-call 参数(字节级)。src/recommend.ts:42-44(dist 45161)isToolMessage = contentType==="tool-call"||"tool-result"(正确)用于 Compressible ranges 行的tool N%|text N%;report.ts:86(错误)用于 CONTEXT BREAKDOWN。一次输出自相矛盾。estimateTokensFast = ceil(chars/4)(kerneltokenize.ts:19-22,bili 在 dist 51221/50393/52904 显式传入);nudge 侧默认 CJK-aware 的defaultCountTokens(tokenize.ts:5-13,注释明言 "chars/4 badly underestimates CJK")。panel.ts:49-61有"三套刻度、绝不混算"的自家纪律,但 report 打印完全不标刻度,中文会话下报表系统性低估 ~4×。Math.max(1, ...)):三桶可印 1%+1%+1% 且总和 >100。plugin.ts:340-342的unprunedTokens用 CJK-aware 估计器,却减去estimateTokensFast算的 sent——panel.ts:73注释声称两侧同为 chars/4,实际混算,即已修的 release v0.1.6 #18 同类缺陷在 panel 行复活。建议修复
report.ts:86改用recommend.ts的isToolMessage语义(抽公共 helper,消灭定义 fix: address all code review findings (condense, routing, session-id, dead code) #2)unprunedTokens与 sent 用同一估计器验收标准
查重注记:#119 正文出现过此行但修的是压缩重试循环;#18/#40 修看板 scale;本票的字段选择错误无人报过。