← 返回更新日志

Pi v0.87.0

2026-09-21 · GitHub 原文
### 新功能 - **规范会话上下文与扩展边界** — 无需重写历史即可编辑模型上下文,并添加可操作的生命周期钩子。参见 [ContextEditEntry](https://github.com/earendil-works/pi/blob/v0.87.0/packages/coding-agent/docs/session-format.md#contexteditentry) 和 [扩展事件](https://github.com/earendil-works/pi/blob/v0.87.0/packages/coding-agent/docs/extensions.md#extension-events)。 - **全转录上下文扩展** — 使用 `context_with_system` 进行按请求的系统消息转换。参见 [`context_with_system`](https://github.com/earendil-works/pi/blob/v0.87.0/packages/coding-agent/docs/extensions.md#context_with_system)。 - **按模型的图像输入限制** — 为附件、`read` 和工具结果图像按模型配置缓存安全的图像缩放。参见 [图像输入限制](https://github.com/earendil-works/pi/blob/v0.87.0/packages/coding-agent/docs/models.md#image-input-limits)。 ### 破坏性变更 - 移除了继承的 `shouldStopAfterTurn` agent 选项。请改用 `finishTurn` 并返回 `{ action: "end" }`。`finishTurn` 在 `turn_end` 之前运行,但在之后应用决策,并且它也会接收错误和中止的响应;对于这些硬退出,通过返回 `undefined` 来迁移正常响应谓词。完整的前后对比示例请参见 `@earendil-works/pi-agent-core` 变更日志。 - 向导出的 `SessionEntry` 联合类型添加了 `ContextEditEntry`。使用穷举条目 switch 的 TypeScript 消费者必须处理 `context_edit`;使用 `replacement: null` 表示省略,否则使用内容替换。 - 使 `SessionManager` 成为 `AgentSession` 提供者上下文的规范来源。赋值 `session.agent.state.messages` 不再替换未来的请求历史;请使用 `SessionManager.inMemory(cwd, { id }, entries)` 恢复,使用 `session.navigateTree()` 导航,或通过 `session.sessionManager` 追加并调用 `session.refreshContext()`。 - 扩展了 `TurnEndEvent`,添加了必需的边界字段,并向导出的 `ExtensionEvent` 联合类型添加了 `AgentBeforeSettleEvent`。构造事件或对 `ExtensionEvent` 进行穷举 switch 的消费者必须处理新的形状。`ExtensionRunner.emit()` 不再接受 `turn_end`;宿主集成使用 `emitBoundary(baseEvent, buildContext)` 分派可操作的边界。 - 从 `agent_settled` 处理程序请求的延迟运行会推迟到所有 settled 处理程序完成之后。处理程序仍然观察到 `ctx.isIdle() === true`,但在同一通知分派期间不再看到可重入的 `agent_start`。 ### 新增 - 添加了仅追加的模型上下文编辑。例如,`sessionManager.appendContextEdit(entryId, null)` 从未来的提供者上下文中省略一条消息,而不更改原始历史、用量或 UI 历史。 - 添加了可操作的 `turn_end` 和 `agent_before_settle` 扩展边界。返回 `{ entries: [...event.entries, draft], continue: true }` 以按顺序持久化结构化条目,并确保下一次提供者请求,而不更改引导或后续调度。 - 添加了保留无压缩输入:`sessionManager.appendCompaction(summary, null, tokensBefore)` 将压缩自身的 ID 存储为其保留边界。 - 添加了 `context_with_system` 扩展事件,它在 `context` 处理程序之后在包括系统消息的完整转录上运行,并原样发送其结果。参见 [`context_with_system`](https://github.com/earendil-works/pi/blob/v0.87.0/packages/coding-agent/docs/extensions.md#context_with_system)。 - 通过 `models.json` 中的 `inputLimits.images.resize` 添加了按模型的图像缩放配置文件,应用于文件附件、图像读取和工具结果图像([#9631](https://github.com/earendil-works/pi/issues/9631))。 ### 修复 - 修复了字符串上下文编辑替换生成无效的助手和工具结果消息内容而不是文本块的问题。 - 修复了上下文不可见的边界元数据和替换编辑导致新追加或替换的输入在其首次提供者请求之前被摘要的问题。 - 修复了编辑上下文核算既丢弃最新上下文编辑后捕获的有效助手用量,又在后续压缩使其过期后重用该用量的问题。 - 修复了选定的错误重试和最终长度/溢出恢复在未来提供者上下文中保留已放弃的模型尝试的问题;运行后恢复省略现在被持久化,而不隐藏原始转录历史或更改队列调度。 - 修复了过滤或切片消息的 `context` 处理程序丢弃提示和工具声明的问题,这在扩展驱动的压缩后导致请求没有内置工具或使 Codex 发出原始工具调用文本。处理程序不再看到系统消息;Pi 在它们运行后恢复提示和工具状态。参见 [`context`](https://github.com/earendil-works/pi/blob/v0.87.0/packages/coding-agent/docs/extensions.md#context)([#9789](https://github.com/earendil-works/pi/issues/9789),[#9822](https://github.com/earendil-works/pi/issues/9822))。 - 修复了 `/bug` 在离线模式下允许上传,同时保留本地 zip 导出的问题([#9841](https://github.com/earendil-works/pi/pull/9841),由 [@christianklotz](https://github.com/christianklotz) 提交)。 - 修复了空闲提示缓存预热在其计时器或扩展决策延迟时重建过期缓存的问题。 - 改进了崩溃诊断,添加了识别堆栈跟踪中出现的已加载扩展的提示。 - 修复了以 `GIF` 开头的文本文件被错误分类为图像并从 `read` 和 CLI `@file` 输入中省略的问题([#9755](https://github.com/earendil-works/pi/issues/9755))。 - 修复了格式错误的提示模板 frontmatter 被静默忽略而不是报告为资源警告的问题([#9830](https://github.com/earendil-works/pi/pull/9830),由 [@christianklotz](https://github.com/christianklotz) 提交)。 - 修复了继承的未知 OpenAI 兼容 Chat Completions 端点接收严格工具模式的问题,除非它们明确声明支持([#9816](https://github.com/earendil-works/pi/issues/9816))。