fix: sync kernel-compacted compress anchor text into outbound arguments (Fixes #340) - #341
Conversation
coreOutToAgentMessages now consumes kernel-rewritten tool-call text (hide-consumed dead-range filtering + summary stubbing, acp-kernel #230/#232) and syncs the compacted JSON back into toolCall.arguments for both projection paths (plain-id single-call and base#callId multi-call). Fail-safe: unparseable/absent kernel text keeps originals; string-form content (non-strict providers) keeps its shape. Bumps acp-kernel pin 0.0.56 -> 0.0.60 (published). Fixes #340
📦 Built Extension ArtifactBranch: Option A — Install from npm PR tag (recommended)pi install npm:billion-context-pi@pr-341Each push to this PR publishes a new version under the Option B — Download artifact
tar xzf billion-context-pi-pr341.tgz
pi install ./packageThis comment is automatically updated on each push. |
[bot] 🏷 PR #341 审核完成。已 checkout 分支(9156c3b)、跑 1. 问题属实(证据)
2. 层次判断:根因,非症状根因是 pi 适配层从原始 entry 重建、丢弃内核出口视图的改写。PR 让两条重建路径消费内核改写文本并同步回 3. 关键正确性:首
|
Fixes #340
问题
内核 0.0.60(acp-kernel #230/#232)已能在出口视图里瘦身 compress 锚点调用文本(滤死范围 + >200 字符摘要存根化),但 pi 的
coreOutToAgentMessages(src/messages.ts)从原始 entry 重建 assistant 消息,内核改写被丢弃 → 出口请求仍携带全量 args 复写本(风暴会话 54 条锚点 290K chars)。修复
两条重建路径都消费内核改写文本,把压缩后的 JSON(从首个
{起,与内核parseCallText同规则)同步回toolCall.arguments:patchRefTag,assistant 分支前置):core 文本与原 arguments 有实质差异时替换reconstructToolCallMessage,新增kernelTextByCallId映射):按 callId 逐 call 同步Fail-safe:内核文本缺失/不可解析 → 原样保留;字符串形态 content(qwen 等非严格 provider)保持字符串形态;无差异时返回原对象引用(零开销)。同步是通用的——内核只改写 compress 调用文本,故天然只作用于锚点。
真实会话验证(风暴会话 01a07b3c 重放,
processTurn→coreOutToAgentMessages)(死锚点由内核管线隐藏,活锚点摘要存根化 + 死范围过滤)
其他
devDependencies.acp-kernel0.0.56→0.0.60(已发布,npm latest 确认)tests/anchor-text-sync.test.ts6 例:单 call 同步 / 字符串形态保持 / 多 call 逐 call 同步 / 无差异原引用透传 / 不可解析 fail-safe / 标签前缀扫描关联