# pi-agent-go
**Repository Path**: lkq55421/pi-agent-go
## Basic Information
- **Project Name**: pi-agent-go
- **Description**: pi agent的go语言转换版本,并做了大量优化内容,性能比pi快了好几倍
- **Primary Language**: Go
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 48
- **Created**: 2026-09-14
- **Last Updated**: 2026-09-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# pi-go
**pi 编码代理的 Go 实现 —— 单一静态二进制,零 Node 依赖**
对 @earendil-works/pi-coding-agent(TypeScript monorepo,约 1146 个源文件 / 23 万行)的忠实移植:
同等的交互式编码体验,原生并发的运行时,一个 exe 直接分发。
[](LICENSE)




[为什么是 Go](#-为什么是-go对比-pi-的优化点) · [实测对比](#-实测与-pi-的头对头数据) · [架构](#-架构) · [快速开始](#-快速开始) · [移植边界](#-移植边界诚实声明) · [PORTING.md](PORTING.md)
---
## 🎯 为什么是 Go——对比 pi 的优化点
pi 是一个优秀的 TypeScript 编码代理,但"交付一个 agent"意味着交付 Node 运行时 + npm 依赖树。pi-go 把这件事变成 `go build` 一次:
| 维度 | pi(TypeScript) | pi-go(Go) |
|---|---|---|
| **分发** | Node ≥ 22.19 运行时 + npm 安装 | **单一静态二进制(~20 MB)**,复制即用 |
| **平台覆盖** | 跟随 Node 支持 | Windows / Linux / macOS **交叉编译一等公民** |
| **运行时依赖** | Node 生态依赖树 | **直接依赖仅 2 个**:`golang.org/x/sys` + `modernc.org/sqlite`(纯 Go SQLite,无 CGO、无原生模块编译) |
| **并发模型** | JS 事件循环 | **goroutine 原生并发**:流式事件、RPC 连接、并行工具调用各归其位,契合 agent 的 IO 密集负载 |
| **错误拦截** | 运行时 + 测试兜底 | 静态类型 + `go build` / `go vet`,**一大类错误前置到编译期** |
| **CI / 容器** | 镜像需带 Node 层 | scratch 基础镜像塞一个二进制即可 |
移植不是重写:模块结构、协议、行为与原版逐包对应(见 [模块清单](#-模块清单)),保证两边可以同题对跑、互相验证。
## 📊 实测:与 pi 的头对头数据
数据来自 [harness-bench](../../deepseek-harness/harness-bench)(单变量对比基准:同任务、同模型 `deepseek-v4-flash`、同冻结快照,只换 harness)。Qihoo 106 任务全集:
| 指标 | pi | pi-go |
|---|---:|---:|
| **通过率** | 103 / 106(97.17%) | **106 / 106(100%)** |
| 平均耗时 | 125.7s | 128.4s(基本持平,+2.1%) |
| 通过任务中位耗时(103 个 pi-PASS 任务) | 103.3s | **83.6s(快 ~19%)** |
| 干净配对任务中位耗时比 | — | **0.60** |
| 更快的任务数 | — | 70 / 106 |
**三个关键用例,pi-go 全部修复**:
| 任务 | pi | pi-go |
|---|---|---|
| `qi-061-periodic-status-rollup` | ❌ 超时 | ✅ 通过(还快 12.8s) |
| `qi-104-async-ops-window-rollup` | ❌ 超时 | ✅ 通过(还快 269.1s) |
| `qi-011-code-debug` | ❌ 验证失败 | ✅ 通过(score 0.8725) |
诚实说明:平均耗时两边持平(个别长尾任务拉高 pi-go 总量),优势集中在中位耗时与稳定性上——**更少超时、更稳的通过率**。
## 🏗 架构
```
┌─────────────────────────────┐
│ cmd/pi(单一静态二进制) │
└──────────────┬──────────────┘
│
┌─────────────────────────┼──────────────────────────┐
▼ ▼ ▼
coding-agent protocol / client / server session-backends
交互式 REPL · 主题 CBOR framing · codec SQLite(纯 Go)
slash 命令 · 扩展系统 RPC 传输与连接管理 归一化权威表 · 写租约
模型选择 · JSONL 导入导出 │ 搜索 · 迁移 · JSONL 导入
│ │
▼ │
tui ── 差分渲染 · Markdown/LaTeX │ agent ── agent loop · 工具调用
终端图片(Kitty/iTerm2) │ 队列与状态管理 · 截断降级
像素画布 · 富组件 │ skills · compaction · hooks
│ ▼
│ ai ── 多 provider 统一抽象
│ OpenAI / Anthropic / Google / Azure / Bedrock /
│ Cloudflare / Mistral / OpenRouter / GitHub Copilot …
│ 浏览器/设备码 OAuth · SSE 与 AWS event-stream 解析
└────────> telemetry(厂商无关契约 + 一致性套件)
```
- **扩展系统**:完整移植原版扩展生命周期(工具 / 命令 / shortcut / flag / provider / hook 注册,含 `before_request`、`transform_context` 等全部生命周期事件),外加 `llama.cpp` 本地模型扩展与 Hugging Face 模型检索。
- **多厂商接入**:模型目录由已发布的 `pi-ai` 生成,覆盖国产厂商(Zai / Moonshot / MiniMax / Qwen / 小米 / 蚂蚁 Ling 等)与主流国际 provider。
## 📦 模块清单
| Go 包 | 对应 npm 包 | 状态 | 内容 |
|---|---|---|---|
| `telemetry` | `telemetry` | ✅ 完成 | 厂商无关契约、no-op/内存参考实现、adapter 一致性套件 |
| `ai` | `ai` | ✅ 完成 | 多 provider 抽象与适配、OAuth(Copilot/OpenRouter/Codex/xAI/Kimi/Radius…)、SSE/AWS event-stream、JSON 修复解析 |
| `agent` | `agent` | ✅ 完成 | agent loop、工具调用(sequential/parallel)、消息队列、harness(bash/edit/read/write、skills、compaction、hooks) |
| `protocol` / `client` / `server` | 同名包 | ✅ 完成 | CBOR framing、codec、RPC 传输、会话快照、测试配对辅助 |
| `session-backends/sqlite` | `session-backends/sqlite-node` | ✅ 完成 | 纯 Go SQLite、归一化权威表(事务内写入)、分支缓存、写租约、搜索与迁移 |
| `tui` | `tui` | ✅ 完成 | 差分渲染、Markdown/LaTeX、终端图片与像素画布、编辑器与选择器组件 |
| `coding-agent` → `cmd/pi` | `coding-agent` | ✅ 核心完成 | 交互模式、扩展系统、主题、模型选择、会话管理(JSONL 导入导出/fork)、HTML 导出 |
| `evals` | `evals` | ✅ 完成 | canonical hash、artifact schema、harness table、对比汇总 |
规模:337 个 Go 文件(含 66 个测试文件)、约 6.7 万行——与原版 23 万行 TS 的对应关系及逐文件镜像进度见 [PORTING.md](PORTING.md)。
## 🚀 快速开始
```bash
# 检查与测试
go build ./...
go vet ./...
go test ./... -count=1
# 构建 CLI
go build -o pi ./cmd/pi
./pi --help
```
**交叉编译**(无 CGO,任意平台一条命令):
```bash
GOOS=linux GOARCH=amd64 go build -o pi-linux-amd64 ./cmd/pi
GOOS=darwin GOARCH=arm64 go build -o pi-darwin-arm64 ./cmd/pi
GOOS=windows GOARCH=amd64 go build -o pi.exe ./cmd/pi
```
## 🧭 移植边界(诚实声明)
pi-go 的原则是**忠实移植 + 边界透明**,三件事说在前面:
1. **刻意差异**(Go 侧的等价实现,不是缺陷):
- 扩展加载:Go 无法执行 TS/jiti 模块,采用进程内 `ExtensionFactory` + 目录/清单发现,生命周期与原版等价
- UTF-16 孤立代理字符:Go 无对应表示,按非法 UTF-8 字节移除
- TUI 渲染:纯终端实现(ANSI 真彩半块像素 + Kitty/iTerm2 图片协议),不是原版 canvas 像素级语义
2. **尚未逐文件 100% 镜像**:`coding-agent` 的部分对话框/选择器组件、个别 provider 的 OAuth 流程仍在收敛中,逐项清单见 PORTING.md 的"仍未完全转换"一节
3. **会话存储增强**:SQLite 后端在移植中升级为归一化权威表(事务内直接写入,旧 mutation-log 库自动回填)——这是相对原版的一项工程改进
TypeScript → Go 的映射约定(错误处理、判别联合、泛型约束等)与逐模块迁移记录,见 **[PORTING.md](PORTING.md)**。
## License
[MIT](LICENSE)