6. 复用清单¶
按"复用价值 / 迁移成本"排序。每条都标出源位置与风险评级。
6.1 一等重用(强烈推荐)¶
⭐ 1) pi-telemetry —— 零依赖 telemetry schema 抽象¶
位置:packages/telemetry/src/ (12 文件)
复用什么:
- defineTelemetrySchema<T>() —— 类型推导 + 零依赖的 telemetry 契约声明
- NOOP_TELEMETRY_CONTEXT 默认无操作实现
- spans / events 两套 attribute schema
为什么值得: - 整个包没有 runtime 依赖(仅 type-level 与 typebox-like 推导) - schema 全部用 TypeScript type 实现,没有 schema server、没有 OTel SDK - 任何 framework(web / cli / agent / game)都能直接接
复用成本:低(一个文件粘贴)
风险评级:🟢 低(包极小,依赖空)
⭐ 2) pi-ai 的 multi-provider 适配层(局部)¶
位置:packages/ai/src/api/ (providers/faux + 真实 providers)
复用什么:
- streamSimple(model, context, options) —— 把 7+ provider 协议层归一到一个 stream 接口
- getModel(provider, modelId) —— 模型发现
- models-store.ts —— 静态模型清单加载
为什么值得: - 你要做的只是"我有一个统一接口"——这是 80% 的 multi-provider 框架的痛点 - Anthropic / OpenAI / Google / Bedrock / Mistral / Codex / Azure-OpenAI 都已实现
复用成本:中(需要重写每个 provider 的 auth/streaming 几十行;可移植接口骨架)
风险评级:🟡 中(强依赖各家 provider SDK;上游变化时需 rebase)
⭐ 3) Agent 上的 streamFn 注入模式¶
位置:packages/coding-agent/src/core/sdk.ts L302–330
复用什么:
- 把 provider 调用封闭在一个 streamFn: async (model, context, options) => AsyncIterable<Event> 上
- Agent 类只关心 streamFn 存在,不关心背后是 HTTP / SSE / WebSocket / mock
为什么值得: - 这是任何"应用 Agent 框架"都该有的关键解耦设计 - 让你可以"换 provider / 加 retry / 加 abort / 加 telemetry" 而不污染 Agent 核心
复用成本:低(设计模式而非代码)
风险评级:🟢 低
6.2 二等重用(建议 / 部分借鉴)¶
4) pi-tui 的 diff 渲染器与组件库¶
位置:packages/tui/src/ (92 文件)
复用什么:
- Box / HStack / Image / Markdown / Editor / Loader / SettingsList / TruncatedText / Spacer / Input / CancellableLoader 等 18 个组件
- terminal.ts 的 ProcessTerminal 抽象
- latex.ts 公式渲染
- editor-component.ts 编辑器契约
为什么值得:
- 终端 UI 是个独立生态;这里你拿到一个完整的桌面级 TUI 工具集
- diff rendering 思路(保留 scrollback + 最小重绘)显著降低 CPU
复用成本:中(依赖一些 markdown / fuzzy 库)
风险评级:🟡 中
5) ModelRuntime + ScopedModel 模型作用域¶
位置:packages/coding-agent/src/core/model-runtime.ts (787 行)
复用什么:
- "在仓库内为某种用途限定一个模型集合"的语义模型
- 与 settings 集成:getDefaultProvider / getDefaultModel / getDefaultThinkingLevel
- 失效回退("saved model 不在 scope 中" → 用 scope[0])
复用成本:低(结构清晰,少量单元代码)
风险评级:🟢 低
6) withFileMutationQueue —— 文件工具并发安全¶
位置:packages/coding-agent/src/core/tools/index.ts
复用什么: - 给一个 callback 包一层"按 path 串行化" - 跨进程 / 跨 agent 的文件写入可以并发,但同一文件的写入串行
为什么值得: - 30 行可读完的小实现 - 是 agent loop 里真实存在的并发 bug 防御
风险评级:🟢 低
7) convertToLlm(messages) —— 消息 schema 双格式适配¶
位置:packages/coding-agent/src/core/messages.ts L1–195
复用什么:
- 把内部 AgentMessage 转 pi-ai 的 Message
- 包含 blockImages 选项支持(这是另一个潜在的安全开关——可以在转换层禁图)
复用成本:低(小、定义清晰)
风险评级:🟢 低
8) pi-protocol 的 CBOR framing¶
位置:packages/protocol/src/ (17 文件)
复用什么: - framed CBOR RPC protocol for remote sessions - typebox schema + framing
为什么值得:
- 比 JSON-Lines 紧凑、比 protobuf 简单
- 配合 pi-server + pi-client 可以做"远程 agent session"
复用成本:中(要选好 codecbinding)
风险评级:🟡 中
6.3 三等重用(可能需要重写)¶
9) ModelRegistry¶
- 单文件 157 行
- 价值小,自由度高
10) ResourceLoader¶
- 单文件 1096 行
- 重 — 是 settings / skills / extensions / prompts 的装载中心
- 复用价值低(业务耦合严重)
11) AgentSession 这一层包装¶
- 单文件 3342 行
- 重耦合到所有子模块
- 仅在"我要复刻整个 pi"时才复用
6.4 推荐移植步骤(如果决定复用)¶
- 第 1 周 拿
pi-telemetry+defineTelemetrySchema到自家项目 - 第 2 周 抽
Agent类 +streamFn注入结构,替换 provider 实现 - 第 3 周 移植
convertToLlm+withFileMutationQueue - 第 4–N 周 决定是否把整个
pi-coding-agent当 SDK 用或 fork
6.5 复用风险¶
| 风险 | 来源 |
|---|---|
Pin 依赖与 min-release-age=2 |
你可能没这个流程,移植时去掉 |
setDefaultStreamFn 全局污染 |
第三方/扩展可能修改;移植时要封装 |
transformHeaders 中改 headers |
可能引入审计复杂度 |
Pi 团队的 tool-call 协议 |
是私有设计,不是标准;移植会"私有化" |
| 不开源的 benchmark | 没看到 evals 配套;你不要直接复用 evals |
实验性包:session-backends / server |
"experimental",不建议直接复用 |
6.6 复用清单散点沉淀¶
复用清单最终会沉淀在两个地方:
- 本文件(静态站点)
- 待用户确认后,沉淀到 Hermes 知识库 GitHub 仓库的
reuse/目录