Skip to content

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

复用什么: - 把内部 AgentMessagepi-aiMessage - 包含 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. 第 1 周pi-telemetry + defineTelemetrySchema 到自家项目
  2. 第 2 周Agent 类 + streamFn 注入结构,替换 provider 实现
  3. 第 3 周 移植 convertToLlm + withFileMutationQueue
  4. 第 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 复用清单散点沉淀

复用清单最终会沉淀在两个地方:

  1. 本文件(静态站点)
  2. 待用户确认后,沉淀到 Hermes 知识库 GitHub 仓库的 reuse/ 目录