← 返回更新日志

Pi v0.68.0

2026-04-20 · GitHub 原文
### 新功能 - 通过 `ctx.ui.setWorkingIndicator()` 为扩展提供可配置的工作流指示器,支持动画、静态和隐藏指示器。详见 [docs/tui.md#working-indicator](docs/tui.md#working-indicator)、[docs/extensions.md](docs/extensions.md) 和 [examples/extensions/working-indicator.ts](examples/extensions/working-indicator.ts)。 - `before_agent_start` 现暴露 `systemPromptOptions` (`BuildSystemPromptOptions`),使扩展无需重新发现资源即可检查结构化系统提示词输入。详见 [docs/extensions.md#before_agent_start](docs/extensions.md#before_agent_start) 和 [examples/extensions/prompt-customizer.ts](examples/extensions/prompt-customizer.ts)。 - 支持为作用域模型选择器操作和会话树过滤器操作配置快捷键。详见 [docs/keybindings.md](docs/keybindings.md)。 - `/clone` 将当前活动分支复制到新会话中,而扩展可通过 `ctx.fork(..., { position })` 选择在前 (`before`) 或当前 (`at`) 节点处分叉。详见 [README.md](README.md)、[docs/extensions.md](docs/extensions.md) 和 [docs/session.md](docs/session.md)。 ### 破坏性变更 - 将 SDK 和 CLI 的工具选择从基于当前工作目录 (cwd) 的内置工具实例改为工具名称白名单。`createAgentSession({ tools })` 现在期望传入如 `"read"` 和 `"bash"` 的 `string[]` 名称,而非 `Tool[]`;`--tools` 现按名称对内置、扩展和自定义工具进行白名单过滤;`--no-tools` 现默认禁用所有工具,而不仅是内置工具。请将 SDK 代码从 `tools: [readTool, bashTool]` 迁移至 `tools: ["read", "bash"]` ([#2835](https://github.com/badlogic/pi-mono/issues/2835), [#3452](https://github.com/badlogic/pi-mono/issues/3452)) - 从 `@mariozechner/pi-coding-agent` 中移除了预构建的基于 cwd 的工具及工具定义导出,包括 `readTool`、`bashTool`、`editTool`、`writeTool`、`grepTool`、`findTool`、`lsTool`、`readOnlyTools`、`codingTools` 及对应的 `*ToolDefinition` 值。请改用显式的工厂导出,例如 `createReadTool(cwd)`、`createBashTool(cwd)`、`createCodingTools(cwd)` 和 `createReadToolDefinition(cwd)` ([#3452](https://github.com/badlogic/pi-mono/issues/3452)) - 从公共资源辅助函数中移除了隐式的 `process.cwd()` / 默认 agent-dir 回退行为。`DefaultResourceLoader`、`loadProjectContextFiles()` 和 `loadSkills()` 现在需要显式的 cwd/agent-dir 风格输入,且导出的系统提示词选项类型现要求显式传入 `cwd`。请显式传递会话或项目的 cwd,而非依赖进程级全局默认值 ([#3452](https://github.com/badlogic/pi-mono/issues/3452)) ### 新增 - 新增扩展自定义交互式流式工作指示器的支持,通过 `ctx.ui.setWorkingIndicator()` 实现,包括自定义动画帧、静态指示器、隐藏指示器,新增 `working-indicator.ts` 示例扩展,并更新了扩展/TUI/RPC 文档 ([#3413](https://github.com/badlogic/pi-mono/issues/3413)) - 在 `before_agent_start` 扩展事件中新增 `systemPromptOptions` (`BuildSystemPromptOptions`),使扩展能够检查用于构建当前系统提示词的结构化输入 ([#3473](https://github.com/badlogic/pi-mono/pull/3473) by [@dljsjr](https://github.com/dljsjr)) - 新增 `/clone` 命令,用于将当前活动分支复制到新会话中,同时保持 `/fork` 专注于从之前的用户消息处分叉 ([#2962](https://github.com/badlogic/pi-mono/issues/2962)) - 为 `ctx.fork()` 新增 `position: "before" | "at"` 支持,使扩展和集成能够在用户消息之前分支或复制对话中的当前节点;交互式克隆/分叉 UX 基于该运行时支持构建 ([#3431](https://github.com/badlogic/pi-mono/pull/3431) by [@mitsuhiko](https://github.com/mitsuhiko)) - 为作用域模型选择器操作和树过滤器操作新增可配置的快捷键 ID,以便在 `keybindings.json` 中重新映射这些交互快捷键 ([#3343](https://github.com/badlogic/pi-mono/pull/3343) by [@mpazik](https://github.com/mpazik)) - 新增对内置 OAuth 登录流程的 `PI_OAUTH_CALLBACK_HOST` 支持,允许 `pi auth` 使用的本地回调服务器绑定到自定义接口,而非硬编码的 `127.0.0.1` ([#3409](https://github.com/badlogic/pi-mono/pull/3409) by [@Michaelliv](https://github.com/Michaelliv)) - 在 `session_shutdown` 扩展事件中新增 `reason` 和 `targetSessionFile` 元数据,使扩展能够区分退出、重载、新建会话、恢复和分叉的清理路径 ([#2863](https://github.com/badlogic/pi-mono/issues/2863)) ### 变更 - 更改 `pi update` 行为,按作用域批量更新 npm 包,并以有界并行度运行 git 包更新,在保留对已锁定和已更新包的跳过行为的同时,减少多包更新时间 ([#2980](https://github.com/badlogic/pi-mono/issues/2980)) - 更改 Bedrock 会话请求逻辑:当模型令牌限制未知时省略 `maxTokens`,当未设置时省略 `temperature`,让 Bedrock 使用提供商默认值并避免不必要的 TPM 配额预留 ([#3400](https://github.com/badlogic/pi-mono/pull/3400) by [@wirjo](https://github.com/wirjo)) ### 修复 - 修复了 `AgentSession` 系统提示选项的初始化,避免构建无效的空的 `BuildSystemPromptOptions`,因此 `cwd` 变为必填项后 `npm run check` 能够顺利通过。 - 修复了 shell 路径解析逻辑,在 bash 执行期间不再查询全局的 `process.cwd()` 状态,因此会话/项目特定的 `shellPath` 设置现在会跟随活跃的 coding-agent 会话的 cwd,而不是启动器的 cwd ([#3452](https://github.com/badlogic/pi-mono/issues/3452)) - 修复了 `ctx.ui.setWorkingIndicator()` 自定义帧的渲染方式,改为按原样渲染而非强制使用主题强调色,因此扩展在自定义工作指示器颜色时现在能完全掌控 ([#3467](https://github.com/badlogic/pi-mono/issues/3467)) - 修复了 `pi update` 重新安装已处于最新发布版本的 npm 包的问题,通过在运行 `npm install <pkg>@latest` 前检查已安装的包版本来解决 ([#3000](https://github.com/badlogic/pi-mono/issues/3000)) - 修复了 `@` 自动补全纯文本查询时不再匹配完整 cwd/基础路径的问题,因此工作树名称中的路径片段不再挤占预期结果(如 `@plan`)的显示空间 ([#2778](https://github.com/badlogic/pi-mono/issues/2778)) - 修复了内置工具包装逻辑,使其使用与扩展工具相同的扩展运行器上下文路径,这样内置工具就能接收执行上下文,且当当前模型不支持图像时 `read` 命令可以发出警告 ([#3429](https://github.com/badlogic/pi-mono/issues/3429)) - 修复了 `openai-completions` 助手重放逻辑,保留 `compat.requiresThinkingAsText` 的文本部分序列化,避免在之前的助手消息混合了思考内容和文本时,同模型后续对话发生崩溃 ([#3387](https://github.com/badlogic/pi-mono/issues/3387)) - 修复了直接 OpenAI Chat Completions 会话的映射逻辑,将 `sessionId` 和 `cacheRetention` 映射到提示词缓存字段,在启用缓存时发送 `prompt_cache_key`,并为具有长保留期的直接 `api.openai.com` 请求发送 `prompt_cache_retention: "24h"` ([#3426](https://github.com/badlogic/pi-mono/issues/3426)) - 修复了 OpenAI 兼容的 Chat Completions 会话,使其可通过 `compat.sendSessionAffinityHeaders` 选择性发送源自 `sessionId` 的 `session_id`、`x-client-request-id` 和 `x-session-affinity` 头信息,从而改善 Fireworks 等后端的缓存亲和性路由 ([#3430](https://github.com/badlogic/pi-mono/issues/3430)) - 修复了线程化 `/resume` 会话关系和当前会话检测逻辑,在比较选择器时对符号链接的会话路径进行规范化处理,因此共享会话目录不再破坏父子匹配或活跃会话的删除保护 ([#3364](https://github.com/badlogic/pi-mono/issues/3364)) - 修复了 `/session` 命令、Sessions 文档和 CLI 帮助信息,统一文档说明会话复用同时支持文件路径和会话 ID,并明确 `/session` 会显示当前会话 ID ([#3390](https://github.com/badlogic/pi-mono/issues/3390)) - 修复了 Windows 下 pnpm 全局安装检测逻辑,使其能识别 `\\.pnpm\\` 存储路径,因此更新提示现在会建议运行 `pnpm install -g @mariozechner/pi-coding-agent`,而不再回退到 npm ([#3378](https://github.com/badlogic/pi-mono/issues/3378)) - 修复了 `@mariozechner/pi-coding-agent` 中缺失的 `@sinclair/typebox` 运行时依赖,因此严格模式的 pnpm 安装在启动 `pi` 时不再因 `ERR_MODULE_NOT_FOUND` 而失败 ([#3434](https://github.com/badlogic/pi-mono/issues/3434)) - 修复了交互编辑器中 xterm 的大写输入问题,通过解码可打印的 `modifyOtherKeys` 输入并规范化移位字母匹配,使 `Shift+字母` 在 `pi` 中不再消失 ([#3436](https://github.com/badlogic/pi-mono/issues/3436)) - 修复了 `/compact` 命令,使其复用会话的思考级别来生成压缩摘要,而不是强制使用 `high`,从而避免在配置为 `medium` 思考级别的 `github-copilot/claude-opus-4.7` 会话中出现无效推理努力错误 ([#3438](https://github.com/badlogic/pi-mono/issues/3438)) - 修复了共享/导出的纯文本工具输出,在 Web 分享页面中保留缩进而非折叠前导空白 ([#3440](https://github.com/badlogic/pi-mono/issues/3440)) - 修复了导出的分享页面,使用浏览器安全的 `T` 和 `O` 快捷键,并通过可点击的标题切换思考内容和工具可见性,替代浏览器保留的 `Ctrl+T` / `Ctrl+O` 绑定 ([#3374](https://github.com/badlogic/pi-mono/pull/3374) by [@vekexasia](https://github.com/vekexasia)) - 修复了技能解析逻辑,通过规范路径对符号链接别名进行去重,因此当 `~/.pi/agent/skills` 指向 `~/.agents/skills` 时,`pi config` 不再显示重复的技能条目 ([#3417](https://github.com/badlogic/pi-mono/pull/3417) by [@rwachtler](https://github.com/rwachtler)) - 修复了 OpenRouter 请求归属逻辑,当通过 coding-agent SDK 创建会话且启用安装遥测时,会包含 Pi 应用头信息(`HTTP-Referer: https://pi.dev`、`X-OpenRouter-Title: pi`、`X-OpenRouter-Categories: cli-agent`) ([#3414](https://github.com/badlogic/pi-mono/issues/3414)) - 修复了自定义模型 `compat` 的 schema/文档,支持 `cacheControlFormat: "anthropic"`,以便为通过 `cache_control` 标记暴露 Anthropic 风格提示词缓存的 OpenAI 兼容提供商提供服务 ([#3392](https://github.com/badlogic/pi-mono/issues/3392)) - 修复了 Cloud Code Assist 工具 schema,在提供商转换前剥离 JSON Schema 元声明键,避免在使用 `$schema`、`$defs` 及相关元数据的启用工具会话中出现验证失败 ([#3412](https://github.com/badlogic/pi-mono/pull/3412) by [@vladlearns](https://github.com/vladlearns)) - 修复了直接 Bedrock 会话,使其将 `model.baseUrl` 作为运行时客户端端点,恢复了对自定义 Bedrock VPC 或代理路由的支持 ([#3402](https://github.com/badlogic/pi-mono/pull/3402) by [@wirjo](https://github.com/wirjo)) - 修复了 `edit` 工具,在验证前对字符串化的 `edits` JSON 进行强制转换,使以 JSON 字符串形式发送数组负载的模型不再回退到临时 shell 编辑 ([#3370](https://github.com/badlogic/pi-mono/pull/3370) by [@dannote](https://github.com/dannote)) - 修复了包清单中的正向 glob 条目,使其在加载打包资源前正确展开,恢复了如 `skills/**/*.md` 等清单模式 ([#3350](https://github.com/badlogic/pi-mono/pull/3350) by [@neonspectra](https://github.com/neonspectra))