@tt-a1i/openpi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +643 -0
  2. package/SETUP.md +74 -0
  3. package/THIRD_PARTY_NOTICES.md +16 -0
  4. package/assets/openpi-package.png +0 -0
  5. package/assets/readme-hero-mobile.svg +72 -0
  6. package/assets/readme-hero.svg +118 -0
  7. package/assets/readme-runtime-mobile.svg +91 -0
  8. package/assets/readme-runtime.svg +111 -0
  9. package/extensions/ask-user/handoff.ts +205 -0
  10. package/extensions/ask-user/index.ts +1110 -0
  11. package/extensions/ask-user/limits.ts +89 -0
  12. package/extensions/ask-user/prompt.ts +76 -0
  13. package/extensions/background-terminals/index.ts +653 -0
  14. package/extensions/background-terminals/src/domain.ts +99 -0
  15. package/extensions/background-terminals/src/manager.ts +989 -0
  16. package/extensions/background-terminals/src/output.ts +84 -0
  17. package/extensions/background-terminals/src/prompt.ts +195 -0
  18. package/extensions/background-terminals/src/result-delivery.ts +43 -0
  19. package/extensions/background-terminals/src/runtime.ts +36 -0
  20. package/extensions/background-terminals/src/ui/output-view.ts +55 -0
  21. package/extensions/background-terminals/src/ui/ps.ts +642 -0
  22. package/extensions/background-terminals/src/ui/tool-result.ts +146 -0
  23. package/extensions/background-terminals/src/watch.ts +192 -0
  24. package/extensions/context-pivot/index.ts +222 -0
  25. package/extensions/copy-all/index.ts +65 -0
  26. package/extensions/cron/index.ts +173 -0
  27. package/extensions/cron/schedule.ts +127 -0
  28. package/extensions/file-mutation-display/index.ts +105 -0
  29. package/extensions/file-mutation-display/render.ts +107 -0
  30. package/extensions/file-search/index.ts +515 -0
  31. package/extensions/file-search/src/args.ts +129 -0
  32. package/extensions/file-search/src/binaries.ts +419 -0
  33. package/extensions/file-search/src/output.ts +142 -0
  34. package/extensions/file-search/src/process.ts +309 -0
  35. package/extensions/file-search/src/prompt.ts +53 -0
  36. package/extensions/git-info/index.ts +272 -0
  37. package/extensions/git-info/src/changed-files-view.ts +414 -0
  38. package/extensions/git-info/src/process.ts +107 -0
  39. package/extensions/git-info/src/refresh-coordinator.ts +13 -0
  40. package/extensions/git-info/src/runtime.ts +28 -0
  41. package/extensions/goal/controller.ts +794 -0
  42. package/extensions/goal/index.ts +521 -0
  43. package/extensions/goal/prompts.ts +122 -0
  44. package/extensions/goal/state.ts +763 -0
  45. package/extensions/goal/ui.ts +158 -0
  46. package/extensions/model-info/index.ts +234 -0
  47. package/extensions/plan-mode/bash-policy.ts +313 -0
  48. package/extensions/plan-mode/index.ts +539 -0
  49. package/extensions/post-edit/index.ts +129 -0
  50. package/extensions/sessions/LICENSE.upstream +21 -0
  51. package/extensions/sessions/git-stats.ts +226 -0
  52. package/extensions/sessions/index.ts +1092 -0
  53. package/extensions/sessions/sessions.ts +385 -0
  54. package/extensions/setup/index.ts +408 -0
  55. package/extensions/shared/activity-status.ts +65 -0
  56. package/extensions/shared/below-editor-navigation.ts +343 -0
  57. package/extensions/shared/child-session.ts +352 -0
  58. package/extensions/shared/context-utilization.ts +47 -0
  59. package/extensions/shared/dashboard-state.ts +102 -0
  60. package/extensions/shared/plan-mode-state.ts +65 -0
  61. package/extensions/shared/setup-config.ts +971 -0
  62. package/extensions/shared/subagent-roles.ts +22 -0
  63. package/extensions/shared/terminal-text.ts +38 -0
  64. package/extensions/shared/tool-call-timeout.ts +104 -0
  65. package/extensions/shared/worktree.ts +526 -0
  66. package/extensions/subagents/index.ts +1225 -0
  67. package/extensions/subagents/navigation.ts +121 -0
  68. package/extensions/subagents/src/agent-types.ts +543 -0
  69. package/extensions/subagents/src/backend.ts +63 -0
  70. package/extensions/subagents/src/backends/pi.ts +493 -0
  71. package/extensions/subagents/src/backends/stub.ts +296 -0
  72. package/extensions/subagents/src/by-the-way.ts +21 -0
  73. package/extensions/subagents/src/domain.ts +271 -0
  74. package/extensions/subagents/src/format.ts +48 -0
  75. package/extensions/subagents/src/manager.ts +769 -0
  76. package/extensions/subagents/src/prompt.ts +190 -0
  77. package/extensions/subagents/src/result-delivery.ts +20 -0
  78. package/extensions/subagents/src/runtime.ts +51 -0
  79. package/extensions/subagents/src/ui/takeover.ts +615 -0
  80. package/extensions/subagents/src/ui/transcript.ts +293 -0
  81. package/extensions/subagents/src/ui/wait-result.ts +89 -0
  82. package/extensions/suggestions/index.ts +172 -0
  83. package/extensions/suggestions/src/config.ts +12 -0
  84. package/extensions/suggestions/src/predictor.ts +147 -0
  85. package/extensions/suggestions/src/prompt.ts +20 -0
  86. package/extensions/suggestions/src/transcript.ts +233 -0
  87. package/extensions/suggestions/src/ui.ts +224 -0
  88. package/extensions/tasks/index.ts +512 -0
  89. package/extensions/tasks/tasks.ts +649 -0
  90. package/extensions/tasks/ui.ts +421 -0
  91. package/extensions/turn-time/index.ts +61 -0
  92. package/extensions/ui-customization/footer.ts +512 -0
  93. package/extensions/ui-customization/index.ts +217 -0
  94. package/extensions/workflows/acceptance.ts +298 -0
  95. package/extensions/workflows/artifacts.ts +225 -0
  96. package/extensions/workflows/controller.ts +210 -0
  97. package/extensions/workflows/dashboard.ts +1226 -0
  98. package/extensions/workflows/index.ts +1884 -0
  99. package/extensions/workflows/journal.ts +188 -0
  100. package/extensions/workflows/meta.ts +250 -0
  101. package/extensions/workflows/model.ts +423 -0
  102. package/extensions/workflows/navigation.ts +93 -0
  103. package/extensions/workflows/prompt.ts +212 -0
  104. package/extensions/workflows/replay-safety.ts +577 -0
  105. package/extensions/workflows/runner.ts +786 -0
  106. package/extensions/workflows/sandbox-child.cjs +402 -0
  107. package/extensions/workflows/sandbox.ts +397 -0
  108. package/extensions/workflows/serialization.ts +162 -0
  109. package/extensions/workflows/worktree-handoff.ts +216 -0
  110. package/package.json +87 -0
  111. package/scripts/prepare-effect-tsgo.mjs +16 -0
  112. package/skills/background-terminals/SKILL.md +30 -0
  113. package/skills/subagents/SKILL.md +15 -0
  114. package/themes/github-dark-default.json +89 -0
package/README.md ADDED
@@ -0,0 +1,643 @@
1
+ <p align="center">
2
+ <picture>
3
+ <source media="(max-width: 640px)" srcset="assets/readme-hero-mobile.svg">
4
+ <img src="assets/readme-hero.svg" alt="OpenPI — a Pi-native multi-agent workbench" width="100%" />
5
+ </picture>
6
+ </p>
7
+
8
+ <p align="center">
9
+ <strong>给 Pi 补上后台执行、多 Agent 编排、持久任务和可观测终端,同时保留它原本的轻量与可控。</strong>
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://github.com/earendil-works/pi-mono"><img alt="Pi 0.84.1+" src="https://img.shields.io/badge/Pi-0.84.1%2B-2f81f7?style=flat-square"></a>
14
+ <img alt="Node.js 22.19+" src="https://img.shields.io/badge/Node.js-22.19%2B-3fb950?style=flat-square&logo=nodedotjs&logoColor=white">
15
+ <img alt="TypeScript strict" src="https://img.shields.io/badge/TypeScript-strict-3178c6?style=flat-square&logo=typescript&logoColor=white">
16
+ <a href="https://github.com/tt-a1i/my-pi-setup/actions/workflows/ci.yml"><img alt="CI status" src="https://github.com/tt-a1i/my-pi-setup/actions/workflows/ci.yml/badge.svg"></a>
17
+ <img alt="Model neutral" src="https://img.shields.io/badge/models-user--selected-bc8cff?style=flat-square">
18
+ </p>
19
+
20
+ <p align="center">
21
+ 一套在真实开发中持续使用的 <a href="https://pi.dev">Pi</a> 扩展包。<br />
22
+ 不替你选模型,不强制主题,安装后也不会偷偷增加模型调用。
23
+ </p>
24
+
25
+ <p align="center">
26
+ <sub>OpenPI 是独立社区项目,与 Physical Intelligence 的 openpi 机器人项目及 Pi 官方均无关联。</sub>
27
+ </p>
28
+
29
+ <p align="center">
30
+ <a href="#快速开始"><strong>快速开始</strong></a> ·
31
+ <a href="#为什么装它">为什么装它</a> ·
32
+ <a href="#核心能力">核心能力</a> ·
33
+ <a href="#安全边界">安全边界</a> ·
34
+ <a href="#统一配置">统一配置</a> ·
35
+ <a href="#命令速查">命令速查</a> ·
36
+ <a href="#faq">FAQ</a>
37
+ </p>
38
+
39
+ ---
40
+
41
+ ## 快速开始
42
+
43
+ ```bash
44
+ pi install npm:@tt-a1i/openpi
45
+ ```
46
+
47
+ 重启 Pi,或在当前 Session 运行 `/reload`。然后直接描述任务:
48
+
49
+ ```text
50
+ 启动前端 dev server;并行让两个子 Agent 检查 API 主链路和测试覆盖;
51
+ 结果回来后汇总风险,主会话不要原地等待。
52
+ ```
53
+
54
+ Pi 会把长期进程放到后台,把独立任务交给隔离 Context 的子 Agent,并在结果完成时自动继续。Subagent 和 Workflow 状态显示在 Footer;后台终端有编辑器上方状态条,完整信息分别从 `/ps`、`/subagents` 和 `/workflows` 查看。
55
+
56
+ > [!IMPORTANT]
57
+ > 默认安装是安静的:不修改主题、不绑定 Provider 或模型、不开启下一步预测,也不执行 post-edit 命令。所有用户偏好统一通过 `/my-pi-setup` 显式配置。
58
+
59
+ > [!TIP]
60
+ > `subagent_spawn` 会立即返回。主 Agent 应继续处理确定性工作;只有下一步确实依赖子 Agent 结果时,才调用 `subagent_wait`。
61
+
62
+ ---
63
+
64
+ ## 为什么装它
65
+
66
+ Pi 的价值在于小:Agent loop、工具、Session 和扩展 API 都有,但工作方式没有被平台写死。真实项目需要的,则是围绕这些原语的一层可靠运行时。
67
+
68
+ <table>
69
+ <tr>
70
+ <td width="33%" valign="top">
71
+ <strong>后台执行</strong><br/><br/>
72
+ Dev server、watcher、build 和长测试不再占住主 Agent。日志可查,超时可控,退出自动回传。
73
+ </td>
74
+ <td width="33%" valign="top">
75
+ <strong>干净委派</strong><br/><br/>
76
+ Subagent 使用独立 Pi Context。调研、实现和审查可以并行,不把全部过程塞回主会话。
77
+ </td>
78
+ <td width="33%" valign="top">
79
+ <strong>动态编排</strong><br/><br/>
80
+ Workflow 支持 pipeline、parallel、结构化输出、显式验收、恢复执行和持久产物。
81
+ </td>
82
+ </tr>
83
+ <tr>
84
+ <td width="33%" valign="top">
85
+ <strong>连续工作</strong><br/><br/>
86
+ Tasks 记工作项,Goal 驱动持续目标,Context Pivot 在阶段变化时主动换一块干净工作面。
87
+ </td>
88
+ <td width="33%" valign="top">
89
+ <strong>全程可见</strong><br/><br/>
90
+ 模型、Context、缓存、成本、Git、PR 与后台活动集中显示;每类运行都有检查和取消入口。
91
+ </td>
92
+ <td width="33%" valign="top">
93
+ <strong>边界明确</strong><br/><br/>
94
+ 子 Agent 不能递归编排;未知工具、不可证明安全的 Replay、状态不明的 Worktree 一律 fail closed。
95
+ </td>
96
+ </tr>
97
+ </table>
98
+
99
+ ### 运行模型
100
+
101
+ <p align="center">
102
+ <picture>
103
+ <source media="(max-width: 640px)" srcset="assets/readme-runtime-mobile.svg">
104
+ <img src="assets/readme-runtime.svg" alt="OpenPI runtime model" width="100%" />
105
+ </picture>
106
+ </p>
107
+
108
+ 主 Pi Session 始终拥有用户交互、配置和生命周期。后台 Terminal、Subagent 与 Workflow 是三条执行路径;Tasks、Goal、Session 和 Context Pivot 保持连续性;Footer、Dashboard、Artifacts 与清理逻辑负责可观察性。
109
+
110
+ ---
111
+
112
+ ## 核心能力
113
+
114
+ ### 1. 后台终端:长期进程不再阻塞 Agent
115
+
116
+ ```text
117
+ bg_start({
118
+ command: "npm run dev",
119
+ title: "web dev server"
120
+ })
121
+ ```
122
+
123
+ - stdout / stderr 独立捕获,完整日志有私有、有界的临时落盘;
124
+ - `/ps` 查看状态与日志,`bg_kill` 终止整个进程树;
125
+ - 进程退出后自动通知,不需要轮询;
126
+ - build、test、migration 可设置 `timeout_seconds`;
127
+ - server 和 watcher 不设超时,用 `bg_watch` 等待 `Ready in|Traceback|ERROR` 一类字面签名;
128
+ - 最多同时运行 8 个后台终端;Session 关闭或 Reload 时统一清理。
129
+
130
+ 后台终端没有 stdin,因此不适合交互式程序。它适合 server、watch mode、长测试和流式构建。
131
+
132
+ ### 2. Pi-native Subagents:隔离 Context,而不是另起一套系统
133
+
134
+ ```text
135
+ subagent_spawn({
136
+ agent_type: "explorer",
137
+ name: "audit auth flow",
138
+ prompt: "Trace src/auth end to end and report file:line evidence."
139
+ })
140
+ ```
141
+
142
+ 每个 Subagent 都是新的进程内 Pi SDK Session:
143
+
144
+ - 默认继承父会话的 Provider、模型和 Thinking Level;
145
+ - 继承普通 child-safe 工具、Skills、项目说明与 Trust 决策,但不获得父级编排/交互工具;
146
+ - 最多 4 个模型发起的 Subagent 并发运行;`/btw` 使用独立小池;
147
+ - 结束后自动回传,可 `check`、`wait`、`cancel`;
148
+ - `subagent_send` 可以继续指导运行中的 Agent,也能恢复刚结束的同一子会话;
149
+ - 输入框下方展示实时摘要,空输入时按 `↓` 聚焦,`Enter` 或 `→` 打开管理界面。
150
+
151
+ 内置角色由 harness 强制工具边界,不靠提示词自律:
152
+
153
+ | `agent_type` | 用途 | 默认 effort | 强制能力 |
154
+ | ------------- | -------------- | ----------- | -------------------------------- |
155
+ | `explorer` | 代码追踪与探索 | high | 只读发现工具 |
156
+ | `implementer` | 聚焦实现 | high | read / bash / edit / write 等 |
157
+ | `reviewer` | 正确性与回归审查 | medium | 只读发现工具 |
158
+ | `advisor` | 深度技术建议 | xhigh | 只读发现工具 |
159
+
160
+ 角色可由全局 `~/.pi/agent/agents/*.md` 或受信任项目 `.pi/agents/*.md` 完整覆盖。精确格式、工具清单与优先级见 [`extensions/subagents/docs/agent-types.md`](https://github.com/tt-a1i/my-pi-setup/blob/main/extensions/subagents/docs/agent-types.md)。
161
+
162
+ <details>
163
+ <summary><strong>并行写文件时如何隔离 Worktree?</strong></summary>
164
+
165
+ 默认并行 Agent 共享 checkout 和 git index。只读 fan-out 不受影响;会写文件的并行任务应开启:
166
+
167
+ ```text
168
+ subagent_spawn({
169
+ name: "implement retry",
170
+ isolation: "worktree",
171
+ prompt: "Implement the retry path, test it, and commit the result."
172
+ })
173
+ ```
174
+
175
+ Worktree 建在 `.git/pi-worktrees/`,拥有独立 checkout 和分支。Direct Subagent 的 checkout 与它的可恢复 Session 同寿命。退役时,已提交工作删除 checkout、保留分支;dirty/untracked/ignored 文件、detached HEAD、Git 探测失败或超时则保留 checkout 路径。只有完整证明为空时才全部回收。
176
+
177
+ 全新 checkout 不包含 `.env` 或其他 gitignored 内容。可用时会在 `.git/pi-worktrees/node_modules` 建立依赖 symlink,让 checkout 通过父目录解析依赖;Worktree 仍要求当前目录是 Git 仓库。
178
+
179
+ </details>
180
+
181
+ <details>
182
+ <summary><strong>模型与 Agent Type 的优先级</strong></summary>
183
+
184
+ 模型:显式调用 > Agent Type 文件 > `/my-pi-setup` 的角色模型 > 父模型继承。
185
+
186
+ Effort:显式调用 > Agent Type 默认值 > 父会话。
187
+
188
+ 同名角色定义:内置 < 全局 < 受信任项目。更高优先级文件如果损坏,会阻断 fallback,而不是悄悄退回更宽松的定义。工具白名单只能收窄,也无法重新拿回父会话专属工具。
189
+
190
+ </details>
191
+
192
+ ### 3. Dynamic Workflows:让多 Agent 任务有阶段、有证据、有产物
193
+
194
+ 单个 Subagent 负责一项自包含委派。Workflow 处理多阶段、有依赖、需要 fan-out 和综合的任务:
195
+
196
+ ```js
197
+ phase("Scan");
198
+ const checked = await pipeline(
199
+ files,
200
+ (file) =>
201
+ agent(`Trace ${file} for reliability risks with file:line evidence`, {
202
+ agent_type: "explorer",
203
+ label: `scan:${file}`,
204
+ schema: FINDING_SCHEMA,
205
+ }),
206
+ (scan, file) =>
207
+ scan.ok
208
+ ? agent(`Verify these findings in ${file}: ${scan.output}`, {
209
+ agent_type: "reviewer",
210
+ label: `verify:${file}`,
211
+ })
212
+ : null,
213
+ );
214
+
215
+ phase("Report");
216
+ log(`${checked.filter(Boolean).length}/${checked.length} files verified`);
217
+ return await agent(`Synthesize: ${JSON.stringify(checked)}`, {
218
+ agent_type: "advisor",
219
+ });
220
+ ```
221
+
222
+ | 原语 | 作用 |
223
+ | ------------ | -------------------------------------------------------------------- |
224
+ | `phase()` | 标记当前阶段 |
225
+ | `log()` | 向实时界面与最终报告追加一行进度 |
226
+ | `usage()` | 读取累计 Token、缓存与成本的单调 lower bound;它不是预算限制器 |
227
+ | `agent()` | 启动一个隔离 Pi Agent,可指定 role、schema、acceptance 或 worktree |
228
+ | `pipeline()` | 每个 item 完成上一阶段后立即进入下一阶段;多阶段 fan-out 的默认选择 |
229
+ | `parallel()` | 并发 barrier;只有下一阶段确实需要全部结果时使用 |
230
+
231
+ Workflow 默认并发 8 个 Agent、单次最多 128 次调用;可分别配置到 64 和 1024。Workflow DSL 不暴露文件、网络或进程 API;Sandbox 进程只保留启动所需的包目录读取权限。`usage()` 在 Agent 压缩 Context 后可能低估实际总量,只适合观察趋势。前台运行可实时查看,后台运行完成后自动回传;`/workflows` 检查阶段、Agent、Transcript、用量与产物,`workflow_stop` 或 Dashboard 中的 `x` 可以取消。
232
+
233
+ <details>
234
+ <summary><strong>Replay、Acceptance Ledger 与隔离写入</strong></summary>
235
+
236
+ `resume_from_run_id` 只 Replay 能被完整证明为只读且上下文未变的调用。指纹覆盖 prompt、schema、model/provider/effort、规范化 cwd、仓库状态、已加载资源和 Trust。下列调用一定真实执行:
237
+
238
+ - 无 Agent Type 或工具范围无限制;
239
+ - 带 `bash`、`edit`、`write` 或未知自定义工具;
240
+ - 使用 `isolation: "worktree"`;
241
+ - 存在会影响结果但无法纳入指纹的 ignored 文件;
242
+ - 旧 journal、指纹失败,或与不可缓存调用发生不安全重叠。
243
+
244
+ 匹配依据是调用内容,不是调用序号,因此 `pipeline()` 的并发完成顺序变化不会把 A 的结果错配给 B。失败调用从不缓存。Journal 上限 2MB,超出后丢弃最旧条目并显式报告。
245
+
246
+ 可选 `acceptance: { criteria: [...] }` 要求同一个 Agent 返回 evidence ledger。条件缺失、格式错误或被拒绝时,该调用 `ok: false`,但原始输出与 ledger 仍保留;不会暗中再启动 reviewer 或 shell。
247
+
248
+ 并行写入使用 `isolation: "worktree"`。Workflow 在清理 checkout 前原子保存有界 handoff manifest,包括 tracked binary patch、stat、branch/HEAD、untracked/ignored 清单和 cleanup receipt。状态不明时保留,不自动 merge、apply 或强删。
249
+
250
+ </details>
251
+
252
+ ---
253
+
254
+ ## 连续性与交互
255
+
256
+ <table>
257
+ <tr>
258
+ <td width="50%" valign="top">
259
+ <strong>Session Tasks</strong><br/><br/>
260
+ <code>tasks_add / tasks_update / tasks_list</code><br/>
261
+ 跨 Agent Run 和用户回合记录当前批次的工作意图。稳定 ID、可审计状态、Session 分支恢复;全部完成后关闭批次,下批从 T1 重新开始。Tasks 不执行工作。
262
+ </td>
263
+ <td width="50%" valign="top">
264
+ <strong>Session Goal</strong><br/><br/>
265
+ <code>/goal &lt;目标&gt;</code><br/>
266
+ Codex 风格的持久自主目标。支持 pause、resume、edit、clear 和可选 Token budget;系统规则要求模型先完成证据审计再声明 complete,工具本身只记录声明。
267
+ </td>
268
+ </tr>
269
+ <tr>
270
+ <td width="50%" valign="top">
271
+ <strong>Context Pivot</strong><br/><br/>
272
+ <code>/context-pivot &lt;下一阶段&gt;</code><br/>
273
+ Context 超过约 30K Tokens 且任务切换阶段时,用自包含 Brief 替换旧阶段噪音,在同一 Session 继续。普通超长对话仍用 Pi 原生 <code>/compact</code>。
274
+ </td>
275
+ <td width="50%" valign="top">
276
+ <strong>Session Browser</strong><br/><br/>
277
+ <code>/sessions</code><br/>
278
+ 按名称、首条消息、Session ID 和目录搜索;预览 User、Assistant、Tool 与 Summary;通过 Pi 安全生命周期切换。
279
+ </td>
280
+ </tr>
281
+ <tr>
282
+ <td width="50%" valign="top">
283
+ <strong>Reviewed Human Input</strong><br/><br/>
284
+ <code>ask_user</code> · <code>human_handoff</code><br/>
285
+ <code>ask_user</code> 在 TUI/RPC 中收集 1–3 个结构化决策,支持 Notes、预览、草稿修改与提交前复核;空白自由输入会要求模型重写或拆分问题。只有用户能完成的登录、授权或硬件操作才使用 parent-only handoff,Done 后仍须验证完成信号。
286
+ </td>
287
+ <td width="50%" valign="top">
288
+ <strong>Next-action Suggestion</strong><br/><br/>
289
+ 完整主 Agent Run 结束后,可在空编辑器首行显示一条暗色 inline 建议。行尾为中文 IME 预留预编辑区域,避免拼音覆盖建议;<code>Right</code> 只填入、不提交,其他输入取消。默认关闭且不写入 Session 或模型 Context。
290
+ </td>
291
+ </tr>
292
+ </table>
293
+
294
+ ### Tasks 与 Goal 怎么分工
295
+
296
+ - Tasks 是多个工作项的咨询性记录,不调度、不委派,也不参与 Goal 完成判定;
297
+ - Goal 是一个持续到终态的自主目标,模型只能提交 `complete` 或经过连续审计的 `blocked`;
298
+ - Subagent 与 Workflow 才执行工作;文件、Git、测试、Artifacts 和用户确认仍是事实来源。
299
+
300
+ ### Plan Mode、Cron 与 Post-edit
301
+
302
+ - `/plan [目标]` 先做只读调研;模型以 `plan_ready` 显式提交完整计划后,`/plan` 才提供继续规划、当前 Session 实施或 Fresh Session 实施。两个实施入口都只填入可编辑 Prompt,不自动提交;Planning/Ready 状态按 Session branch 持久化并在 Reload、Resume、Tree navigation 后恢复;Plan Mode 使用严格命令白名单,不尝试“理解”任意 Shell 是否只读;
303
+ - `/cron ...` 在当前 Session 中排定一次或周期性提示词;
304
+ - Post-edit 可在成功 Write/Edit 的 Turn 后运行一条用户配置的命令,例如 `npm run format`。默认关闭,最多 500 字符,不猜测 Bash 是否改过文件。
305
+
306
+ ---
307
+
308
+ ## 终端体验
309
+
310
+ ### 一行 Footer,持续显示真实状态
311
+
312
+ 默认 Powerline Footer:
313
+
314
+ ```text
315
+ cwd model thinking context cache cost throughput git PR
316
+ ```
317
+
318
+ 支持 `powerline`、`powerline-mono` 与 `compact` 三个 preset,也可用 `footerLines` 自定义多行布局。终端变窄时按优先级隐藏次要指标,而不是机械截断尾部。
319
+
320
+ | 指标 | 内容 |
321
+ | ------------ | ---------------------------------------- |
322
+ | `cwd` | 当前目录 |
323
+ | `model` | Provider / Model |
324
+ | `thinking` | Thinking 档位 |
325
+ | `context` | Context 占用与容量;占用未知时只显示容量 |
326
+ | `cache` | Session 报告的 Prompt Cache 命中率 |
327
+ | `cost` | Session 累计成本 |
328
+ | `throughput` | 当前流式运行的估算 Token 速度 |
329
+ | `git` / `pr` | 当前分支与对应 PR |
330
+ | `flex` | 同一行左右对齐的分隔点 |
331
+
332
+ Subagent 与 Workflow 状态属于 Footer 的基础可观察性:活动时自动出现,空闲时不占空间。后台终端使用编辑器上方状态条和 `/ps`,不混进 Footer。本地 Git 状态自动刷新;GitHub PR 查询只有用户显式运行 `/pr` 时才会发起。Nerd Font 只改善 Powerline 分隔符 ``,不是硬依赖。
333
+
334
+ ### 输出密度按内容类型独立控制
335
+
336
+ - Subagent 结果默认完整显示;
337
+ - Bash 默认折叠为单行命令、有限输出与最终状态;
338
+ - Write/Edit 默认最多显示三行渲染内容;
339
+ - 三类结果都能在 `/my-pi-setup` 中独立切换 `full` / `compact`;
340
+ - 折叠内容用 Pi 当前的 `app.tools.expand` 快捷键临时展开,默认是 `Ctrl+O`。
341
+
342
+ ### 文件搜索是一等工具
343
+
344
+ `fd` 与 `rg` 使用结构化参数,不拼接 Shell;默认遵守 `.gitignore`,支持 Glob、类型、Smart Case、固定字符串和上下文。结果限制为 50KB / 2000 行;不超过 10 MiB 的完整截断内容保存在 Session 临时文件中并于 Shutdown 时清理,超过该上限时搜索会终止且部分临时文件会立即删除。
345
+
346
+ macOS/Linux 的 arm64 与 x64 环境缺少二进制时,会通过 HTTPS 下载固定官方版本、校验 SHA-256 后原子安装。其他架构和平台需自行提供 `fd` 与 `rg`。
347
+
348
+ ---
349
+
350
+ ## 安全边界
351
+
352
+ 这里的安全不是一段 Prompt,而是运行时约束。
353
+
354
+ | 边界 | 行为 |
355
+ | ------------------------ | -------------------------------------------------------------------- |
356
+ | 子 Agent 递归编排 | 禁止。Subagent/Workflow child 不获得 `subagent_*`、`workflow` 等父级工具 |
357
+ | Agent Type 工具 | Harness 强制白名单;声明不能突破父级 denylist |
358
+ | 类型与工具预检 | 未知、损坏、错名或最终未注册的工具在首个 Token 前失败 |
359
+ | Workflow Sandbox | DSL 无文件、网络、进程、import、eval 或 timer API;进程仅可读启动包目录 |
360
+ | Replay | 只有可证明只读、上下文指纹完整且无不安全重叠的调用才缓存 |
361
+ | Worktree 清理 | 未知即保留;Git 状态、handoff 或超时不确定时绝不删除 |
362
+ | 终端输出 | 控制字符、方向格式符与超长内容在 ingress/render 边界清洗和限长 |
363
+ | Shutdown | Terminal、Subagent、Workflow 都做有界取消、清理与唯一终态 |
364
+ | 用户配置 | 一个受限 typed tool 写入;没有散落的扩展私有入口 |
365
+ | 模型消费 | Suggestion 默认关闭;Subagent/Workflow 只在任务显式触发时运行 |
366
+
367
+ 可选的 [pi-intercom](https://github.com/nicobailon/pi-intercom) 只在顶层 Pi Session 加载。它依赖进程级身份,而 Direct/Workflow child 是同一进程内的并发 Session;为避免身份串线,child Resource Loader 会移除 pi-intercom 的扩展与 Skill。
368
+
369
+ ---
370
+
371
+ ## 统一配置
372
+
373
+ 本包只有一个用户配置入口:
374
+
375
+ ```text
376
+ /my-pi-setup
377
+ ```
378
+
379
+ 无参数时,当前模型先解释已有设置与影响,再引导修改。直接跟自然语言则只改指定项:
380
+
381
+ ```text
382
+ /my-pi-setup 开启下一步预测,选择当前 Registry 里的轻量模型,minimal 推理
383
+ /my-pi-setup workflow 同时跑 16 个 agent,总调用最多 256
384
+ /my-pi-setup Footer 两行:cwd flex model / context cost flex git
385
+ /my-pi-setup Footer 用 mono powerline
386
+ /my-pi-setup Bash 展开,Write/Edit 保持紧凑
387
+ /my-pi-setup 编辑后自动跑 npm run format
388
+ /my-pi-setup 给 explorer 指定模型,让 reviewer 继承父模型
389
+ ```
390
+
391
+ 配置保存在 `~/.pi/agent/my-pi-setup.json`,与包代码分离。升级不会覆盖。
392
+
393
+ ### 默认值
394
+
395
+ | 配置 | 默认值 |
396
+ | ------------------------ | ------------------------------------------------------------ |
397
+ | Next-action suggestion | 关闭;启用时必须显式选择 Registry 中可用的模型与 reasoning |
398
+ | Workflow 并发 | 8,硬上限 64 |
399
+ | Workflow 总 Agent 调用 | 128,硬上限 1024 |
400
+ | 大型 Header | 关闭 |
401
+ | Dashboard Footer | 开启;单行 `powerline` |
402
+ | Subagent 结果 | `full` |
403
+ | Bash 输出 | `compact` |
404
+ | Write/Edit 输出 | `compact` |
405
+ | Post-edit 命令 | 关闭;单条命令最多 500 字符 |
406
+ | 内置角色模型 | `explorer / implementer / reviewer / advisor` 均继承父模型 |
407
+ | 主题 | 保留用户现有选择 |
408
+
409
+ 任何新增的模型、开关、权限、并发或 UI 偏好都必须接入 `/my-pi-setup`。仓库的 [`AGENTS.md`](https://github.com/tt-a1i/my-pi-setup/blob/main/AGENTS.md) 用测试守住这份单一入口契约。
410
+
411
+ ---
412
+
413
+ ## 安装与可选集成
414
+
415
+ ### 要求
416
+
417
+ - Pi `0.84.1` 或更新版本;
418
+ - Node.js 22.19.0 或更新版本;
419
+ - macOS/Linux 的 arm64 或 x64 可自动安装 `fd` / `rg`;其他架构和平台需自行安装。
420
+
421
+ ### Pi Package
422
+
423
+ ```bash
424
+ pi install npm:@tt-a1i/openpi
425
+ ```
426
+
427
+ 需要直接审计当前源码时,也可以从 GitHub 安装:
428
+
429
+ ```bash
430
+ pi install git:github.com/tt-a1i/my-pi-setup
431
+ ```
432
+
433
+ 开发本仓库时可以安装本地 checkout:
434
+
435
+ ```bash
436
+ git clone https://github.com/tt-a1i/my-pi-setup.git ~/work/my-pi-setup
437
+ cd ~/work/my-pi-setup
438
+ npm install
439
+ pi install ~/work/my-pi-setup
440
+ ```
441
+
442
+ 安装或更新后重启 Pi,或运行 `/reload`。Pi 提供的 `pi-ai`、`pi-coding-agent`、`pi-tui` 和 `typebox` 按官方 Package 契约声明为 Peer Dependencies;仓库中的开发依赖仅用于本地检查,不随包重复提供 Host SDK。
443
+
444
+ ### 可选:多个顶层 Pi Session 通信
445
+
446
+ ```bash
447
+ pi install npm:pi-intercom
448
+ ```
449
+
450
+ pi-intercom 通过本地 IPC 传递消息;传输本身不调用模型。快捷键、命令与 `inboundTrigger` 配置以当前安装版本的文档为准。
451
+
452
+ 本包只保证一件事:pi-intercom 留在顶层 Session,child 不加载它。跨顶层 Session 用 pi-intercom;父子委派继续使用 `subagent_*` 和 Workflow 原生结果通道。
453
+
454
+ ### 可选:GitHub Dark 主题
455
+
456
+ 安装包会注册主题,但不会自动切换。通过 Pi `/settings` 选择 `github-dark-default`,或配置:
457
+
458
+ ```json
459
+ {
460
+ "theme": "github-dark-default"
461
+ }
462
+ ```
463
+
464
+ ---
465
+
466
+ ## 命令速查
467
+
468
+ | 命令 | 作用 |
469
+ | --------------------------- | --------------------------------------------------------------- |
470
+ | `/my-pi-setup [自然语言]` | 查看或修改本包配置 |
471
+ | `/ps` | 查看、跟踪和终止后台终端 |
472
+ | `/subagents` | 查看、取消或接管子 Agent |
473
+ | `/btw` | 在旁路 Pi Context 中提问,不打断主任务 |
474
+ | `/workflows` | 查看阶段、Agent 与产物;`/workflows <id> stop` 取消运行 |
475
+ | `/tasks` | 查看当前 Session 的工作项 |
476
+ | `/goal ...` | 创建、查看、编辑、暂停或恢复持久 Goal |
477
+ | `/context-pivot <下一阶段>` | 在同一 Session 中压缩旧阶段并继续 |
478
+ | `/sessions` | 搜索、预览并切换 Session |
479
+ | `/plan [目标]` | 只读调研,进入 Plan Ready 后显式选择实施方式 |
480
+ | `/cron ...` | 为当前 Session 安排定时或周期性 Prompt |
481
+ | `/lg` / `/pr` | 浏览 Working Tree Diff / 刷新当前分支 PR |
482
+ | `/copy-all` | 复制当前分支可见的 User / Assistant 对话 |
483
+
484
+ <details>
485
+ <summary><strong>模型工具速查</strong></summary>
486
+
487
+ | 工具 | 用途 |
488
+ | -------------------------------------------------------------------------------------------------------- | ----------------------------------- |
489
+ | `bg_start`, `bg_status`, `bg_list`, `bg_watch`, `bg_kill` | 后台进程生命周期 |
490
+ | `subagent_spawn`, `subagent_check`, `subagent_list`, `subagent_wait`, `subagent_send`, `subagent_cancel` | 独立子 Agent |
491
+ | `workflow`, `workflow_status`, `workflow_stop` | 动态多阶段编排与运行管理 |
492
+ | `tasks_add`, `tasks_update`, `tasks_list` | Session 工作项 |
493
+ | `get_goal`, `create_goal`, `update_goal` | Session Goal |
494
+ | `context_pivot` | Context 阶段切换 |
495
+ | `ask_user` | TUI/RPC 中带草稿与提交前复核的结构化用户决策 |
496
+ | `human_handoff` | 等待用户专属操作并返回待验证的状态 |
497
+ | `plan_ready` | 显式完成计划,不自动开始实施 |
498
+ | `fd`, `rg` | 文件发现与内容搜索 |
499
+ | `configure_my_pi_setup` | 受限配置写入 |
500
+
501
+ </details>
502
+
503
+ ---
504
+
505
+ ## 设计原则
506
+
507
+ ### Pi-native first
508
+
509
+ 子 Agent 是 Pi SDK Session,不是独立 CLI。Provider、模型、Skills、Trust 与普通 child-safe 工具沿用用户已有环境;编排、交互和父级状态工具明确移除。
510
+
511
+ ### Context 有明确去向
512
+
513
+ 一项委派交给 Subagent;多阶段依赖交给 Workflow;阶段变化用 Context Pivot;真正跨 Session 用 Handoff;下一步建议只停留在编辑器 UI。
514
+
515
+ ### 后台能力必须可见,也必须能停
516
+
517
+ Terminal、Subagent、Workflow 都有 ID、状态、检查入口、取消路径、有界 Shutdown 和一次性完成通知。无界后台工作不属于“方便”,只是把问题藏起来。
518
+
519
+ ### 少猜一次,多拒绝一次
520
+
521
+ 不可证明只读就不 Replay,不能确认干净就不删 Worktree,损坏的高优先级角色定义不 fallback。拒绝会留下可见错误;猜错可能留下错误代码、旧结果或丢失数据。
522
+
523
+ ---
524
+
525
+ ## FAQ
526
+
527
+ <details>
528
+ <summary><strong>安装后会自动调用额外模型吗?</strong></summary>
529
+
530
+ 不会。Next-action suggestion 默认关闭;只有用户通过 `/my-pi-setup` 显式选择模型后,完整主 Agent Run 结束时才可能增加一次小型预测调用。Subagent 与 Workflow 也只在任务实际触发时运行。
531
+
532
+ </details>
533
+
534
+ <details>
535
+ <summary><strong>Pi Subagent 会阻塞主 Agent 吗?</strong></summary>
536
+
537
+ 不会。`subagent_spawn` 立即返回,结束后自动回传。只有显式调用 `subagent_wait` 才会等待;它只适合下一步确实依赖结果的场景。
538
+
539
+ </details>
540
+
541
+ <details>
542
+ <summary><strong>为什么同时提供 Subagent 和 Workflow?</strong></summary>
543
+
544
+ Subagent 是一项可继续对话的自包含委派;Workflow 是多阶段编排,强调 fan-out、结构化结果、可恢复执行和持久产物。前者可以接管继续,后者更适合自动化流水线。
545
+
546
+ </details>
547
+
548
+ <details>
549
+ <summary><strong>Plan Mode 下为什么 `git log` 能运行,`npm install` 不能?</strong></summary>
550
+
551
+ Plan Mode 不分析“任意 Shell 是否只读”,而只放行由已知安全零件组成的命令。它允许窄白名单中的 `git` / `gh` 查询形式;Shell 元字符、未知 flag、安装、写入和无法证明的形式全部拒绝。这里的方向是单向的:放行意味着已证明只读,拒绝只表示未能证明。
552
+
553
+ Plan Mode 仍可启动只读 Subagent,但会把工具收窄到发现工具;`subagent_send` 和 Workflow 会被拦截,因为它们可能恢复或创建拥有写权限的执行路径。
554
+
555
+ </details>
556
+
557
+ <details>
558
+ <summary><strong>配置和升级会互相覆盖吗?</strong></summary>
559
+
560
+ 不会。包代码、Pi 自己的模型认证与 `~/.pi/agent/my-pi-setup.json` 相互分离。更新仓库不会重写用户配置。
561
+
562
+ </details>
563
+
564
+ <details>
565
+ <summary><strong>后台服务会不会变成孤儿进程?</strong></summary>
566
+
567
+ 正常的 `/new`、`/resume`、`/fork`、`/reload` 和退出都会触发 Session Shutdown。扩展会终止后台进程树并清理临时日志;也可随时用 `bg_kill` 或 `/ps` 手动管理。
568
+
569
+ </details>
570
+
571
+ <details>
572
+ <summary><strong>这是稳定 API 吗?</strong></summary>
573
+
574
+ 这是持续实际使用的独立发行版,不承诺扩展 API 永远不变。改动会经过 TypeScript、格式检查和专项测试;Pi 上游变化时,优先保持 Session 生命周期、工具边界、结果去重和资源清理这些行为不变量。
575
+
576
+ </details>
577
+
578
+ ---
579
+
580
+ ## 仓库结构
581
+
582
+ ```text
583
+ extensions/
584
+ ├── setup/ # /my-pi-setup 与受限配置工具
585
+ ├── background-terminals/ # 长进程、日志、/ps
586
+ ├── subagents/ # Pi-native Backend、角色、/subagents
587
+ ├── workflows/ # DSL、Runner、Sandbox、Replay、Artifacts
588
+ ├── tasks/ # Session 工作项
589
+ ├── goal/ # 持久自主 Goal
590
+ ├── context-pivot/ # 定向 Compaction
591
+ ├── plan-mode/ # 只读调研与批准门禁
592
+ ├── cron/ # Session 内定时 Prompt
593
+ ├── post-edit/ # 成功编辑后的可选命令
594
+ ├── sessions/ # Session 搜索与切换
595
+ ├── ask-user/ # 结构化用户输入
596
+ ├── file-search/ # fd / rg 与安全二进制获取
597
+ ├── file-mutation-display/ # Bash / Write / Edit 紧凑渲染
598
+ ├── suggestions/ # Ephemeral next-action suggestion
599
+ ├── git-info/ # Git、PR 与 /lg
600
+ ├── model-info/ # Model、Context、Cost、Throughput
601
+ ├── turn-time/ # Turn 耗时
602
+ ├── ui-customization/ # Header、Footer、Terminal title
603
+ ├── copy-all/ # 可见对话复制
604
+ └── shared/ # Child policy、配置、Worktree、终端清洗
605
+
606
+ skills/
607
+ ├── background-terminals/
608
+ └── subagents/
609
+
610
+ themes/
611
+ └── github-dark-default.json
612
+ ```
613
+
614
+ 扩展通过 Pi Event Bus 和小型共享状态通信。长生命周期资源绑定 Session Shutdown;Workflow JavaScript 在独立 Permission Sandbox 中运行;Agent child 使用 Pi SDK Session 和 Trust-aware Resource Loader。
615
+
616
+ ---
617
+
618
+ ## 开发与验证
619
+
620
+ ```bash
621
+ npm install
622
+ npm run check
623
+ npm run format:check
624
+ npm test
625
+ ```
626
+
627
+ 测试覆盖进程树终止与竞态、Subagent 生命周期与工具边界、Workflow Sandbox/Replay/Acceptance、Worktree 数据保全、文件搜索二进制校验、Session 状态恢复、配置迁移和 TUI 渲染。
628
+
629
+ 设计记录与多模型评估见 [`docs/design/`](https://github.com/tt-a1i/my-pi-setup/tree/main/docs/design)。欢迎通过 [Issues](https://github.com/tt-a1i/my-pi-setup/issues) 提交可复现 Bug 或真实工作流;新增能力应优先复用 Pi 原生原语,并遵守 [`AGENTS.md`](https://github.com/tt-a1i/my-pi-setup/blob/main/AGENTS.md) 的单一配置入口与 child-session 边界。
630
+
631
+ ---
632
+
633
+ ## 来源与致谢
634
+
635
+ 本项目最初基于 [davis7dotsh/my-pi-setup](https://github.com/davis7dotsh/my-pi-setup) 演进,现作为独立发行版维护。感谢原作者提供起点。
636
+
637
+ `extensions/sessions/` 改编自 [jayshah5696/pi-agent-extensions](https://github.com/jayshah5696/pi-agent-extensions)。可选的顶层 Session 通信由 [pi-intercom](https://github.com/nicobailon/pi-intercom) 提供。完整第三方说明见 [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md)。
638
+
639
+ 本仓库目前没有项目级开源许可证;`THIRD_PARTY_NOTICES.md` 只记录第三方来源与各自许可,不等同于授予本项目使用许可。
640
+
641
+ <p align="center">
642
+ <strong>Small harness. Deep extensions. Clean context.</strong>
643
+ </p>