Pi 扩展:任务管理 —— 给模型一个可见的任务列表。
Fork 自 @juicesharp/rpiv-todo(v2.4.0),去掉 monorepo 依赖:
@juicesharp/rpiv-config代码已并入src/lib/rpiv-config/(相对 import,无外部依赖)@juicesharp/rpiv-i18n保持可选(未安装时英文 fallback)
todo工具:create / update / list / get / delete / clear,状态机 pending → in_progress → completed(+deleted tombstone),支持 blockedBy 依赖/todos命令:按状态分组打印全部任务- 常驻面板:编辑器上方实时显示任务列表,
ctrl+shift+t折叠/展开 - Web GUI 支持(RPC 模式):
ctx.mode === "rpc"时以纯文本行渲染(setWidget(string[])卡片,非模态、不遮挡对话),不依赖 TUI 组件工厂。placement 用belowEditor:实测 pi-web(0.8.7)前端只渲染 belowEditor 的 widget,aboveEditor 的 setWidget 后端收到但不显示(与 pi-shiki-subagents 的 Subagents 面板一致)
- 状态落盘权威源:每次工具变更写
~/.config/pi-shiki-todo/state.json(原子写+防抖),会话恢复时盘上状态优先于 branch replay —— 修复 compact/rewind 后任务残留或对不上的问题 - 轮询兜底:2.5s 一次状态指纹检查,状态变化即刷新面板 —— 修复模型已更新但面板滞后的情况
- 进度提醒(RPC):有未完成任务且模型长时间(默认 60s)未调用 todo 时,通过
sendMessage({deliverAs:"steer"})提醒模型同步进度(冷却 180s) - 隐藏状态去实例化:completed 折叠状态从 overlay 实例私有 Set 移到 store(per-session),
/reload或 overlay 重建后不再丢失
状态落盘文件:~/.config/pi-shiki-todo/state.json(多会话按 bySession 分区存储)。
| 时机 | 行为 | 目的 |
|---|---|---|
| todo 工具每次变更 | 写盘(原子写 tmp+rename,200ms 防抖) | 权威源,防 branch 清理后丢失 |
| session_start / compact / tree | 盘上状态优先,replayFromBranch 仅兜底 |
防 compact/rewind 后残留、对不上 |
| session_shutdown | 清除本会话的盘上记录 | 防旧会话任务在新会话“复活” |
策略对齐 Claude Code TodoV2 的文件级存储思路:会话进行中落盘权威源(防滞后/丢失),会话结束即清理(防残留)。盘上记录不会无限累积 —— 每个会话只在自己生命周期内持有。
由 pi-PackgeManager 管理(installTarget=bundle + gitUrl,装进 ~/.pi/bundle-pi-shiki),或作为 git 依赖直接安装:
// package.json dependencies
"pi-shiki-todo": "git+https://github.com/RoyougiShiki/Pi-shiki-todo.git"~/.config/rpiv-todo/config.json(仅读取,不写入):
{
"maxWidgetLines": 8,
"collapseKey": "alt+t"
}npm install # 装依赖(typebox)
npm run check # tsc --noEmitLicense: MIT(原项目 juiceharp/rpiv-mono MIT)