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