背景
pi 本身没有内置的 todo 协议,各扩展的 schema 各不相同。目前已有第三方 todo 工具(如 @capdiem/pi-todo 扩展)能在 TUI 里维护任务计划,但桌面端没有对应的展示面板——计划只在扩展内部维护,桌面端看不到。
需求
希望桌面端左侧边栏新增一个 Todo 计划面板(只读):
- 显示扩展推送的任务计划:状态图标(○ 进行中 / ◐ 进行中 / ✓ 完成)、已完成数(
completed/total)、任务列表
- 任务过长时截断显示,悬停可查看全文
- 面板只做渲染,不解析任何具体扩展的 schema,不依赖 LLM,不需要为某个扩展手写适配器
设计方案(提案)
采用桌面端声明的公开扩展点,扩展 opt-in 接入:
- 通道:复用扩展 UI 的
setWidget 请求(extension_ui_request RPC 通道)——这是桌面端唯一读取的面板通道,能实时直达侧边栏,无 session 往返。
- Key:
pi-agent-desktop:todo(桌面端保留 key,避免与扩展自身用途的 "todo" 撞名)。
- 载荷:
widgetLines,每行一个 JSON TodoTask({ key, subject?, status? }),undefined 清空面板。
- 校验:非 JSON / 空行 / 非法任务跳过;
status 限 pending | in_progress | completed;额外字段容忍忽略。
- 持久化:
setWidget 是 fire-and-forget,不写会话文件;会话打开时由扩展的 session_start restore 重新推送。
为什么用 setWidget 而不是 sendMessage / 适配器:
setWidget 实时直达面板,无 session 往返
- 桌面端故意不解析扩展 schema,自定义消息/工具结果不解析
ctx.ui.custom() 在 RPC 模式下是 no-op,setWidget 只接受 string[]
现有实现(可参考)
该功能已在个人 fork 中实现并通过测试,可作为参考实现:

背景
pi 本身没有内置的 todo 协议,各扩展的 schema 各不相同。目前已有第三方 todo 工具(如
@capdiem/pi-todo扩展)能在 TUI 里维护任务计划,但桌面端没有对应的展示面板——计划只在扩展内部维护,桌面端看不到。需求
希望桌面端左侧边栏新增一个 Todo 计划面板(只读):
completed/total)、任务列表设计方案(提案)
采用桌面端声明的公开扩展点,扩展 opt-in 接入:
setWidget请求(extension_ui_requestRPC 通道)——这是桌面端唯一读取的面板通道,能实时直达侧边栏,无 session 往返。pi-agent-desktop:todo(桌面端保留 key,避免与扩展自身用途的"todo"撞名)。widgetLines,每行一个 JSONTodoTask({ key, subject?, status? }),undefined清空面板。status限pending | in_progress | completed;额外字段容忍忽略。setWidget是 fire-and-forget,不写会话文件;会话打开时由扩展的session_startrestore 重新推送。为什么用 setWidget 而不是 sendMessage / 适配器:
setWidget实时直达面板,无 session 往返ctx.ui.custom()在 RPC 模式下是 no-op,setWidget只接受string[]现有实现(可参考)
该功能已在个人 fork 中实现并通过测试,可作为参考实现:
lib/todo-state.ts(TODO_WIDGET_KEY、serializeTodoWidgetLines()、parseTodoWidgetLines())+ 单元测试components/TodoPanel.tsxdocs/todo-widget.md(含"集成到已有工具"指引)@capdiem/pi-todo(已按此扩展点推送 widget)