← 返回更新日志

Pi v0.24.0

2025-12-19 · GitHub 原文
### 新增 - **子代理编排示例**:新增了一个全面的自定义工具示例,用于生成和编排具有隔离上下文窗口的子代理。包含侦察/规划/审查/工作代理以及用于多代理流水线的工作流命令。([#215](https://github.com/badlogic/pi-mono/pull/215) by [@nicobailon](https://github.com/nicobailon)) - **`getMarkdownTheme()` 导出**:自定义工具现在可以从 `@mariozechner/pi-coding-agent` 导入 `getMarkdownTheme()`,以使用与主 UI 相同的 Markdown 样式。 - **`pi.exec()` 信号与超时支持**:自定义工具和钩子现在可以向 `pi.exec()` 传递 `{ signal, timeout }` 选项,以实现取消和超时处理。当进程被终止时,结果会包含一个 `killed` 标志。 - **Kitty 键盘协议支持**:Shift+Enter、Alt+Enter、Shift+Tab、Ctrl+D 以及所有 Ctrl+键组合现在在 Ghostty、Kitty、WezTerm 及其他现代终端中均可使用。([#225](https://github.com/badlogic/pi-mono/pull/225) by [@kim0](https://github.com/kim0)) - **动态 API 密钥刷新**:OAuth 令牌(GitHub Copilot、Anthropic OAuth)现在会在每次 LLM 调用前刷新,防止在长运行代理循环中因会话中途令牌过期而导致失败。([#223](https://github.com/badlogic/pi-mono/pull/223) by [@kim0](https://github.com/kim0)) - **`/hotkeys` 命令**:以格式化表格形式显示所有键盘快捷键。 - **Markdown 表格边框**:表格现在会正确渲染顶部和底部边框。 ### 更改 - **子代理示例改进**:并行模式现在会流式传输所有任务的更新。链式模式在流式传输期间显示所有已完成的步骤。展开视图使用带有语法高亮的正确 Markdown 渲染。使用页脚显示轮次计数。 - **技能标准合规**:技能现在符合 [Agent Skills 标准](https://agentskills.io/specification)。验证名称(必须与父目录匹配,小写,最多 64 个字符)、描述(必填,最多 1024 个字符)以及 frontmatter 字段。违规时会发出警告但保持宽松。提示格式已更改为 XML 结构。移除了 `{baseDir}` 占位符,改用相对路径。([#231](https://github.com/badlogic/pi-mono/issues/231)) ### 修复 - **JSON 模式标准输出刷新**:修复了竞态条件,该条件可能导致 `pi --mode json` 在所有输出写入 stdout 之前退出,从而使消费者错过最终事件。 - **符号链接工具、钩子和斜杠命令**:在扫描自定义工具、钩子和斜杠命令时,发现机制现在能正确跟随符号链接。([#219](https://github.com/badlogic/pi-mono/pull/219), [#232](https://github.com/badlogic/pi-mono/pull/232) by [@aliou](https://github.com/aliou)) ### 破坏性更改 - **自定义工具现在需要 `index.ts` 入口点**:自动发现的自定义工具必须位于包含 `index.ts` 文件的子目录中。旧模式 `~/.pi/agent/tools/mytool.ts` 必须更改为 `~/.pi/agent/tools/mytool/index.ts`。这允许多文件工具导入辅助模块。通过 `--tool` 或 `settings.json` 指定的显式路径仍可与任何 `.ts` 文件配合使用。 - **钩子 `tool_result` 事件重构**:`ToolResultEvent` 现在暴露完整的工具结果数据,而不仅仅是文本。([#233](https://github.com/badlogic/pi-mono/pull/233)) - 移除:`result: string` 字段 - 新增:`content: (TextContent | ImageContent)[]` - 完整内容数组 - 新增:`details: unknown` - 工具特定详情(通过 `toolName` 的判别联合按工具类型化) - `ToolResultEventResult.result` 重命名为 `ToolResultEventResult.text`(已移除),请改用 `content` - 返回 { result: "..." } 的钩子处理器必须更改为 { content: [{ type: "text", text: "..." }] } - 导出内置工具详情类型:`BashToolDetails`、`ReadToolDetails`、`GrepToolDetails`、`FindToolDetails`、`LsToolDetails`、`TruncationResult` - 导出用于类型收窄的类型守卫:`isBashToolResult`、`isReadToolResult`、`isEditToolResult`、`isWriteToolResult`、`isGrepToolResult`、`isFindToolResult`、`isLsToolResult`