From a7cae9dff6f4b8ccacf96c094db996974537997f Mon Sep 17 00:00:00 2001 From: awork Date: Mon, 7 Sep 2026 10:40:07 +0800 Subject: [PATCH] release v0.1.59 --- CHANGELOG.md | 1 + package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dac5398..6abd6d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## Unreleased (master, since v0.1.38) +- **fix(nudge): 增长基线刻度混用复位(closes #267)** — token 计量在估算值 ↔ provider 真实 usage 锚点间翻转(hostFloor 激活/失活)时,增长增量跨翻转相减是伪度量:旧刻度基线对新刻度 tokenCount 相减,凭空多出 "+35K 假增长",绕过 cadence 节流乱发 nudge(或反向漏发)。现在翻转时统一重置全部增长基线:kernel 侧 `lastNudgeShownTokens` / `lastPerMessageNudgeTokens` / `lastShownByTier`(0.0.55 per-tier cadence 基线)+ 扩展侧 `clearNudgeTokenStamps()`(#316 引入的同轮 re-inject 刻度戳,旧刻度戳同样会伪造满地板增长触发伪重注入);usage bands 的 floor-stale 行为保留不动。附带:② `/acp` 面板与 `acp_status` 百分比分母统一为与实时仲裁相同的 `window − maxOutput`(新增 `src/overflow-selfheal.ts` `applyOutputHeadroom`,此前面板按全窗口报告而 nudge bands 按 headroom 后窗口仲裁);③ auto-update 限流与只读停止标记按安装位置 sha256 隔离(多副本互不干扰)。实现:`src/runtime.ts` `noteTokenScale`/`dropTokenScale`,`src/index.ts` 翻转检测重置,`src/update.ts` `locationKey`;测试 `tests/growth-scale-flip.test.ts` + `tests/update.test.ts` 扩展 - **fix(state): 导入会话后从会话日志重放重建压缩状态(closes #299)** — pi 的 `importFromJsonl` 只拷贝 `.jsonl`,`.acp.json` sidecar 不随行,导入的会话压缩状态静默归零(全量重发 → 重压缩 → 全量重缓存)。新增最后一级兑底:sidecar 与父会话继承都未命中且日志含成功 compress 调用时,首个 context 事件中重放日志(assistant toolCall 参数 + 非 error toolResult 配对,逐调用先 `processTurn` 补齐 `messageRefs` 再 `applyCompression`,镜像线上流水顺序),重建 blocks/summaries/effectiveMessageIds/stats 并落盘 sidecar;errored/no-op/无法解析的调用跳过(批量原子,拒绝即状态不变),重放幂等(sidecar 重建后不再触发)。新增 `src/state-rebuild.ts`(`hasCompressHistory` / `rebuildStateFromLog`),挂载 `src/runtime.ts` `stateFor`。上游宿主侧修复另行提案(ranxianglei/pi#1:import 拷贝 `${basename}.*` sidecar + export 保留 `parentSession`) - **feat(kernel): acp-kernel 0.0.55 → 0.0.56 — 面板文案修正 + decompress 后 block 状态保持 (#182)** — ① 面板 "Context (session accounting)" 行改为 "includes compressed originals; shrinks slower than the sent view"(原 "never shrinks" 不成立:摘要替换被 prune 的原文后会降);"tokens compressed" 标注 cumulative 消除与当前 active blocks 的表面矛盾。② sync.ts 行为修复:宿主标记 `expanded` 的 block(用户显式 decompress 还原过)在 syncBlocks 中保持 inactive,不再被重新激活——否则已还原的消息下一轮又被折叠(双倍成本 + 丢原文);重新压缩同区间会创建新 block。适配 tests/commands-kit-panel.test.ts 断言新文案 - **fix(nudge): 同轮增长式重注入 — 忽略 78% 压力 nudge 后不再直冲 95% emergency (closes #269)** — per-turn 去重(Set)把同轮所有重示全拦:模型忽略 78% 压力 nudge 后,新增长的新提醒被压制,直到 95% emergency 机械截断才放行。内核 0.0.55 的 T1 growth / T2/T3 cadence 在决策时自行 stamp,但 **pressure 分支(75%+)不受 cadence 门控**(每个 context 事件都重新决策注入)→ 只能在适配器层做增长感知。实现:`markNudgeShown(turnKey, tokenCount)` 记录注入时刻刻度,同轮增长 ≥ `max(minGrowthFloor, minGrowthRatio × adaptiveGrowth)`(镜像内核 decideNudge 公式,默认 22.5K)即允许重注入;drop re-anchor 镜像内核 nudgeNode(压缩后 tokenCount 掉到 `shownAt − adaptiveGrowth` 以下时基线重锚到新刻度,避免压缩后再入压力带被旧峰值压死直到 emergency);基线维护移出 `if (turn.nudge?.shouldInject)`(idle 事件也要推进 re-anchor)。测试 `tests/nudge-reinject.test.ts`:同轮 78% 注入 / +2K 抑制 / +23K 重注入;drop-reanchor 后 136K 重注入不超旧峰值;emergency 逐事件绕过不变 diff --git a/package-lock.json b/package-lock.json index 7d2f9dc..ac569bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "billion-context-pi", - "version": "0.1.58", + "version": "0.1.59", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "billion-context-pi", - "version": "0.1.58", + "version": "0.1.59", "license": "MIT", "devDependencies": { "@earendil-works/pi-coding-agent": "0.83.0", diff --git a/package.json b/package.json index b053646..6026b08 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "billion-context-pi", - "version": "0.1.58", + "version": "0.1.59", "description": "One billion, not one million. Model-driven context management for the Pi coding agent.", "main": "dist/index.js", "types": "dist/index.d.ts",