@lsfcy/pi-composer-predictions

Next-message ghost-text predictions for Pi's terminal editor

Packages

Package details

extension

Install @lsfcy/pi-composer-predictions from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@lsfcy/pi-composer-predictions
Package
@lsfcy/pi-composer-predictions
Version
0.1.0
Published
Oct 31, 2026
Downloads
293/mo · 293/wk
Author
lsfcy
License
MIT
Types
extension
Size
37.4 KB
Dependencies
0 dependencies · 3 peers
Pi manifest JSON
{
  "extensions": [
    "./index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

Pi Composer Predictions

给 Pi 的终端输入框增加「下一句预测」。普通终端和 Pi Console 共用同一个扩展,不修改 Pi 或 Console。

一轮成功结束后,空输入框内显示灰字,例如:

补一下 src/parser.ts 的边界测试。

  • Tab:填入可编辑草稿。仍须自行按 Enter 才会发送。
  • Esc:忽略预测。有预测时只消耗这一次 Esc;之后恢复 Pi 原有行为。
  • 输入、粘贴或浏览历史:立即忽略,并取消尚未完成的预测。
  • 输入框已有内容时,不生成、不覆盖草稿。

预测只是建议,不代表用户意图、事实确认或操作授权。

要求

  • Pi 1.4.0 或更新版本;目前在 1.4.0 验证。
  • Node.js 22.19 或更新版本。
  • Pi 的交互式 TUI。支持 regular / fullscreen,不支持 RPC、JSON 和 print 模式。

安装

通过 npm 安装:

pi install npm:@lsfcy/pi-composer-predictions

然后在正在运行的 Pi 中执行 /reload,或新开会话。只想临时试用、且不写入安装配置时,可运行 pi -e npm:@lsfcy/pi-composer-predictions。

插件清单包含 pi-package 关键词,具备被 Pi 官方包目录 发现的资格;收录可能有延迟。包目录不是另一个上传目标。

本地开发

在本目录中试用一次,不改 Pi 安装配置:

pi -e ./index.ts

长期使用时,在本目录安装:

pi install "$PWD"

然后在正在运行的 Pi 中执行 /reload,或新开会话。Pi Console 内同样执行 /reload,不需要 Console 专用适配。

安装扩展会启用额外的模型请求。 默认只在当前 provider 内选模型;如不想自动选择,可在对话前固定模型。

配置

/predictions
/predictions status
/predictions off
/predictions on
/predictions model provider/model-id
/predictions model auto

例如模型 ID 本身包含斜杠时,使用完整的 provider/vendor/model-id;只在第一处斜杠分隔 provider。使用前可通过 Pi 的 /model 确认可用模型。

配置保存在 Pi agent 目录的 composer-predictions.json,默认位置为 ~/.pi/agent/composer-predictions.json。遵循 PI_CODING_AGENT_DIR:

{
  "enabled": true,
  "model": null
}
  • enabled:是否预测,默认 true。
  • model:完整模型名;null 表示自动选择。
  • 自动选择只限当前 provider;如设置了 enabledModels 或 --models,还会遵循该范围。明确指定模型可以跨 provider、超出该范围。
  • 按目录价格的 3 × input + output 估算成本,不按模型名字猜。零价格可能表示未知,不视为「最便宜」;没有已知价格时使用当前模型。
  • 模型选择不会改变主会话模型。明确指定的模型不可用时,停止预测,不偷偷换模型。
  • 配置错误时停止预测,并提示检查文件,不回退为默认开启。
  • 当前进程的命令立即生效;其他进程在下一次轮次结束或 /reload 时重新读取配置。不添加文件监听器。

/predictions 基于当前分支已有问答,立即请求一次预测;可以在跳过、失败、超时或忽略建议后,对同一对话快照再次手动请求。仍可能返回无建议,不保证每次都有内容。

/predictions status 只查看状态,不触发模型请求。它显示最近状态、模型、本进程请求与接受次数,以及已返回的 token / 目录估算费用。不保存或上传使用统计。

  • 仅在插件已开启、Pi 空闲、没有排队消息、输入框为空且最后一条助手回复正常结束时执行;不满足时说明原因,不暗中开启插件或覆盖草稿。
  • 沿用当前预测模型、输入范围、10 秒超时和取消规则;不启动主问答,不改配置或会话历史,不自动重试。
  • 已有预测请求仍在进行时不重复发起。输入或取消仍会中止预测;每次实际发出的手动请求都可能额外计费。
  • 结果仍是灰字建议,Tab 接受为草稿,再由你按 Enter 发送。

隐私、成本与边界

每轮最多自动发起一次独立预测;显式执行 /predictions 可额外请求一次:

  1. 监听 agent_settled,而非可能继续重试的 agent_end。
  2. 自动触发要求交互式用户输入启动、未中止、无排队输入、输入框为空,且最终 assistant 正常结束。手动重试可以使用已恢复会话中的完整问答。
  3. 读取 Pi 当前分支的 session projection,遵循压缩和持久化的 context_edit,不复活已移除的内容。
  4. 只取 user / assistant 正文。最多 12 条、6000 Unicode 字符;优先保留当前问题和最终回复的结论。
  5. 不发送系统提示、工具参数与输出、思考块、图片、自定义消息、分支摘要或压缩摘要。
  6. 使用最低支持的思考档,输出预算最多 512 token,预测最多 160 字符。10 秒超时,不自动重试。
  7. 新输入、切换、重载、退出、模型变化或上下文变化时取消或丢弃结果。即使 provider 不响应取消,过期结果也不会填入输入框。

注意:

  • 近期对话正文仍可能包含敏感信息。不要在不允许额外模型调用的会话中开启预测。
  • 扩展写成 user 角色的历史消息无法可靠区分真人来源;角色筛选不是身份认证。
  • 主请求临时 context 钩子的修改不一定持久化,因此不等同于这里的 session projection。敏感会话应关闭预测。
  • 同一对话快照不重复自动请求;只有显式执行 /predictions 才允许再次请求。没有跨进程、跨会话或磁盘缓存。
  • 取消和超时只能保证本地丢弃;服务端已经处理的请求仍可能计费。
  • 预测及用量不写入会话历史。预测成本不会出现在 Pi / Console 的会话用量统计里;服务商账单才是实际费用依据。
  • 独立请求复用 Pi 已有模型和认证,不保存凭据,不创建 HTTP 服务、IPC、后台守护进程或遥测。
  • 不具备长期记忆、检索或个性化画像;质量依赖所选模型。

自定义编辑器兼容性

Pi 目前只有一个自定义编辑器工厂槽位。本扩展使用 CustomEditor,保留 Pi 原有快捷键、自动补全、草稿、撤销和光标定位机制。

重载或首次开启时,从当前 session projection 恢复对话输入历史;不恢复已经压缩掉的输入、非持久命令历史或旧撤销栈。

已有 Vim 等编辑器扩展时,本扩展不覆盖,并给出提示。后加载的扩展若替换编辑器,本扩展停止预测,不争抢。首版不承诺多个编辑器插件可叠加。

停用与卸载

临时关闭:

/predictions off

npm 安装的版本使用包名卸载:

pi remove npm:@lsfcy/pi-composer-predictions

本地开发安装则在安装时使用的子包目录执行 pi remove "$PWD"。随后在仍运行的 Pi 中执行 /reload。不要同时启用 npm 版和本地源码版,以免重复加载。

不需要的 composer-predictions.json 可以删除。只有这一个扩展自有配置文件;没有会话迁移或缓存清理。

开发与验证

npm ci --ignore-scripts
npm run check
npm run test:tui
npm pack --dry-run
  • check:strict TypeScript、纯逻辑、真实编辑器组件和事件集成测试。覆盖不自动发送、不覆盖草稿、取消竞态、编辑器冲突、模式边界、上下文编辑和费用边界。
  • test:tui:需要 Python 3 和可执行的 Pi(可用 PI_BIN 指定绝对路径)。真实 PTY、临时 agent 目录、离线假模型;验证 regular/dark 和 fullscreen/light、硬件光标、Tab/Esc、草稿、取消、开关、重载、状态命令不发请求及手动重试不启动主问答。不使用真实凭据或付费模型。
  • CI 执行同样的检查。失败直接指向测试、文件和提交;不自动重试失败来掩盖问题。
  • 真实模型的预测质量、时延和费用需要人工试用;离线测试不证明预测准确。
  • 已验证真实 Pi 交互,未包含 Electron / Pi Console 专项自动化回归。

源码只有配置、转录、选模、取消状态、编辑器和宿主事件六个模块。Pi SDK 是 host peer,不打包第二份 Pi;无构建产物或运行时第三方依赖。

维护者负责检查真实采纳质量与额外成本;效果差时关闭或卸载。若上游提供同等原生预测功能,应由维护者删除本扩展,而不是长期保留两套实现。该方案替代每个 GUI 各写一套输入框预测的负担,不新增通用插件平台或监控循环。

致谢与许可证

交互思路来自 dsh-composer-predictions,并针对 Pi 的生命周期和终端编辑器独立实现。

MIT。