Files
ycode/docs/omp与pi-agent对比调研-2026-10-17.md
T

127 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OMP 与 Pi(pi agent)对比调研
- 日期:2026-10-17
- 范围:公开仓库与官方文档调研(非 WorkBuddy 实现观察,不涉及 REA 渠道)
- 结论先行:**两者是同一血统的两条路线**——`pi agent`(Pi)是 Mario Zechner 的极简可扩展 agent 工具链/上游项目;`omp`(oh-my-pi)是它的 fork,由 Stencil Labs 改造成"电池全包"的终端编码 agent。YCode 当前内核用的 omp.exe 就是这个 fork。
---
## 1. 身份与亲缘关系
| 项 | omp | pi(pi agent) |
|---|---|---|
| 全称 | oh-my-pi | Pi(pi-mono 项目,CLI 名 `pi`) |
| 官网 | omp.sh | pi.dev |
| 仓库 | github.com/can1357/oh-my-pi | github.com/earendil-works/pi(原 badlogic/pi-mono) |
| 作者/维护 | Can Bölük(can1357)· Stencil Labs | Mario Zechner(badlogic,libGDX 作者)· Earendil Works |
| npm 包 | `@oh-my-pi/pi-coding-agent` | `@earendil-works/pi-coding-agent` |
| 当前版本 | **18.11.2**(2026-10-16 提交) | **1.3.0**(2026-10-15 发布,全仓 lockstep 版本) |
| 本机在用 | `C:\Users\Administrator\AppData\Local\Ygent\omp.exe`,**18.6.3**(YCode 现内核) | 未安装 |
**命名澄清(容易混淆的点)**:omp 是 fork,所以它的包名、Rust crate 名都保留 "pi" 前缀(`@oh-my-pi/pi-coding-agent`、`pi-shell`、`pi-natives`、`pi-tui` 等)。"pi agent" 指上游 Pi 本身,不是 omp 内部某个组件。
---
## 2. 一句话差异(定位)
- **Pi**:*"a minimal, extensible agent harness that you can make your own"*——刻意做小,自带 4 个工具、约 300 词 system prompt;子代理、计划模式等"重功能"故意不做,靠 TypeScript 扩展/技能/包让使用者自己加。它是**平台**:`pi-ai`、`pi-agent-core`、`pi-coding-agent`、`pi-tui` 每层可独立引入(OpenClaw 就是直接 import SDK 而非跑子进程)。
- **omp**:*"The Pi you love, with batteries included"*——把 Pi 故意留白的部分**全部内置**:31 个工具、LSP/DAP、子代理、计划模式、审批、记忆、协作、浏览器/桌面控制,外加约 8 万行 Rust 原生核心。它是**产品**:装上直接干活,而不是给你一堆积木。
---
## 3. 对比总表
| 维度 | omp(oh-my-pi) | pi(pi agent) |
|---|---|---|
| 定位 | 电池全包的终端编码 agent(fork 产品化) | 极简可扩展 harness / 分层工具链(上游) |
| 技术栈 | TypeScript + ~80k 行 Rust 原生核心(N-API,随二进制内嵌 shell/ripgrep/glob/tokenizer);单个 Bun 打包二进制 | 纯 TypeScript(Node ≥ 22.19);工具进程外调用 |
| 内置工具 | **31 个**:read/write/edit/ast_edit/grep/glob/bash/eval/lsp/debug/task/browser/computer/web_search/memory 等;14 个 LSP 操作、28 个 DAP 操作 | **4 个**:read / write / edit / bash(另有 find/grep/ls 工厂可显式启用) |
| System prompt | 大而全(自带能力全覆盖) | 极简(约 300 词) |
| 子代理 | 一等公民:`task` 分发到隔离 worktree,类型化结果,Agent Hub | **无**(官方建议自己用扩展/tmux 实现) |
| 计划模式 | 内置 `/plan` | **无**(官方建议把计划写成文件) |
| MCP | 内置(`/docs/mcp`,含 `mcp://` 读取方案) | 1.x 起已内置:`mcp.json`、`pi mcp add/list`、exposure 四档(codemode/deferred/direct/hidden)、OAuth;**"无 MCP"的说法已过时** |
| 权限/审批 | 内置 approvals 体系 + `ask` 结构化提问 + ACP `session/request_permission` 门控 | **无内置权限系统**(默认 YOLO,按进程权限运行);官方建议容器化(Gondolin/Docker/OpenShell) |
| 会话 | JSONL 树(resume/branch/fork/compact/steer/share),`~/.omp/agent` | JSONL 树(entry 带 id/parentId,`/tree` 导航),`~/.pi/agent` |
| 上下文压缩 | 自动/手动压缩 + snapcompact(上下文渲染成像素字体 PNG,无需模型调用) | 自动/手动 compaction(`/compact`),历史保留在 JSONL |
| 嵌入方式 | TUI / one-shot / **SDK** / **RPC** / **rpc-ui** / **ACP**(编辑器如 Zed) | TUI / print / JSON 事件流 / **RPC** / **SDK** |
| RPC 协议 | NDJSON over stdio;启动先发 `ready`(带 protocolVersion 协商);`--mode rpc-ui` 增加 UI 扩展事件 | NDJSON over stdio;命令/response/事件/extension_ui 四类记录;等待 `agent_settled` 判定回合彻底结束 |
| 模型接入 | 60+ providers、9 种角色(default/smol/slow/plan/commit/vision/task/advisor/tiny)、fallback 链、凭据轮换 | 20~30+ providers,统一 API(pi-ai),支持订阅 OAuth(Claude Pro/Max、ChatGPT、Copilot 等)与跨供应商中途切换 |
| 平台 | macOS/Linux/Windows 原生单二进制(明确强调 Windows 不用 WSL) | macOS/Linux/Windows(Node 安装器 + npm/Nix) |
| 许可证 | MIT | MIT(pi-mono 时代)→ MIT(现行) |
| 治理/节奏 | 社区 fork,激进迭代(31k+ commits,版本号 18.x) | 上游主项目,lockstep 发版(v1.3.0),组织化治理(含安全供应链加固) |
---
## 4. 分维度详解
### 4.1 血统:fork 关系是理解一切差异的钥匙
omp README 自述:*"omp is a fork of pi-mono by Mario Zechner, extended with a batteries-included coding workflow."* 因此:
- 两者**设计语言同源**:会话为 JSONL 树(id/parentId)、`--no-session` 临时模式、`prompt` RPC 命令、`message_update`/`assistantMessageEvent`/`text_delta` 事件、NDJSON over stdio 等都一脉相承。YCode 的 `src/main/omp.ts` 注释描述的协议形态与 pi 官方 RPC 文档几乎同构。
- 分化点在于 **"要不要替使用者做决定"**:Pi 把子代理、计划模式、权限弹窗、todo 等统统砍掉("features confuse models"是它的原话逻辑);omp 则逐项内置,还加了 Pi 没有的原生核心、审批、协作等。
### 4.2 内核实现:性能路线分道扬镳
- **Pi**:纯 TS,工具逻辑跑进程外命令(bash 调用系统 shell / rg 等),安装即 npm 包,跨平台一致性依赖环境。
- **omp**:把 bash(brush-shell)、coreutils、ripgrep、glob walker、tree-sitter AST、PTY、图像解码、BPE 计数等全部编进 Rust N-API 单二进制,"no fork/exec on the hot path";官方宣称 hashline 内容哈希编辑让 Grok 4 Fast 在同一任务上少花 61% 输出 token、MiniMax 通过率翻倍。代价是仓库体量和与上游的偏离度大。
### 4.3 功能面:一个做减法,一个做加法
- **Pi 的减法**(官方明示):无子代理、无计划模式、无内置权限系统、无内置 todo。补充方式:扩展(TS 模块,可注册工具/拦截 tool_call)、技能(Markdown+README)、prompt 模板、npm/git 分发包。
- **omp 的加法**(21 项扩展,摘关键):持久 Python/Bun `eval` 并回调自身工具、写文件即过 LSP、驱动真实调试器、流规则(TTSR)、子代理+worktree、第二模型 advisor、`/collab` 加密共享、`/review` P0–P3 代码审查、hashline 编辑、GitHub 即文件系统(`pr://`、`issue://`)、自维护记忆(retain/learn/recall)、继承 Cursor/Cline/Codex/Copilot 既有配置、浏览器与桌面控制。
### 4.4 嵌入与协议:对 YCode 最相关的一节
- 两者都提供 **stdio NDJSON RPC** 作为宿主嵌入方式,命令都用可选 `id` 关联响应;turn 结束判定都涉及 `agent_end`(omp 另有 `isTerminal` 语义、pi 有 `agent_settled` 全静默语义)。
- **差异点(需实测确认)**:
- omp 启动后先写 `ready` 帧(含 `protocolVersion: 1`、`supportedProtocolVersions: [1,2]`、`maxFrameBytes: 1048576`);pi 文档未描述 ready 握手帧。
- omp 有 `--mode rpc-ui`(UI 能力标记 + 扩展 UI 桥),Ygent/YCode 侧历史上用过;pi 的对应物是 RPC Extension UI 记录族。
- omp 拒收 `@file` 命令行参数(同 pi),文件引用走 prompt。
- **嵌入 SDK**:omp 暴露 `ModelRegistry`/`SessionManager`/`createAgentSession`;pi 有官方 TypeScript SDK + `RpcClient`。两者都支持"进程外 RPC"和"进程内 SDK"两档集成。
- **编辑器协议**:omp 提供 ACP(Zed 等);pi 侧公开文档未见 ACP 一等支持(以 RPC/SDK 为主)。
### 4.5 版本与维护
- omp:fork 后自主版本线(18.x),节奏极快(README 数据 31,158 commits、910 tags);本机 18.6.3 落后上游约 5 个 minor(18.11.2)。
- pi:上游按 lockstep 发全包 1.3.0;供应链加固(精确锁版本、min-release-age、安装锁、CI 审计)明显更工程化,说明其定位偏"被依赖的平台"。
---
## 5. 对 YCode 的含义(不预设结论)
1. **现内核归属与版本**:YCode 用的 `omp.exe 18.6.3` 是 omp(oh-my-pi),不是 Pi 上游。记录内核版本时可直接标注 "omp (oh-my-pi) 18.6.3",避免与上游 Pi 混淆。
2. **协议同源 ≠ 能力等价**:omp 适配层(`src/main/omp.ts` + `agent/omp-turn.ts`)与 pi 的 RPC 形态高度相似,若未来评估"内核可替换性/双内核",pi 是迁移成本最低的候选;但按 `AGENTS.md`,等价性必须按工作包逐项验证,不能由协议相似直接推论。
3. **功能对齐视角**:WorkBuddy 侧的能力面(计划、子代理、技能、MCP、审批/问答、压缩续写)与 omp 的"全内置"路线匹配度更高;换成上游 Pi 则这些都需要宿主自建(扩展/Docker 化权限等),反而是额外工作量。
4. **版本差**:本机 18.6.3 与上游 18.11.2 的差异清单未做;升级属内核变更,需要单独验证回合语义/事件兼容性。
---
## 6. 未验证项(需另行取证)
- [ ] 本机 omp 18.6.3 与上游 18.11.2 的具体差异(未逐项 diff changelog)。
- [ ] pi 1.3.0 的 RPC 与 omp 18.x 的 RPC 逐帧差异(ready 帧、版本协商、事件命名、终态语义)未做真实对照实验。
- [ ] omp 对 pi 扩展生态的兼容程度(fork 后 diverge 深度)未核查。
- [ ] 两者"子代理/计划/审批"具体行为对 YCode 复刻 WorkBuddy 语义的等价性未评估。
- [ ] 星标数等社区指标:omp ~3.6 万(GitHub 2026-10-16 抓取);pi 侧第三方报道约 5.5 万,未以 GitHub 页面直证,仅作量级参考。
---
## 7. 来源
| 来源 | URL | 采集日期 |
|---|---|---|
| omp 官网首页 | https://omp.sh | 2026-10-17 |
| omp CLI 参考 | https://omp.sh/docs/cli | 2026-10-17 |
| omp RPC 模式 | https://omp.sh/docs/rpc | 2026-10-17 |
| omp 文档总览 | https://omp.sh/docs | 2026-10-17 |
| omp GitHub(fork 说明、21 项特性、Rust 核心、v18.11.2) | https://github.com/can1357/oh-my-pi | 2026-10-17 |
| Pi 仓库 README(极简定位、跳过项、权限模型、包列表) | https://github.com/badlogic/pi-mono(重定向至 earendil-works/pi) | 2026-10-17 |
| Pi RPC 模式 | https://pi.dev/docs/latest/rpc | 2026-10-17 |
| Pi MCP 支持 | https://pi.dev/docs/latest/mcp | 2026-10-17 |
| npm:pi-coding-agent 1.3.0 | https://registry.npmjs.org/@earendil-works/pi-coding-agent/latest | 2026-10-17 |
| npm:oh-my-pi 18.11.2 | https://registry.npmjs.org/@oh-my-pi/pi-coding-agent/latest | 2026-10-17 |
| 第三方 Pi 深度拆解(4 工具、循环语义) | needhelp.icu / yeyulingfeng.com / 0bserver07.github.io/chimera | 2026-10-17 |
> 注:社区指标与第三方文章仅作背景参考;凡引用均以官方仓库/文档为准,未验证项已列于第 6 节。