4.4 KiB
4.4 KiB
pi SDK 集成笔记
来源:pi.dev 官方文档 + 仓库调研(2026-09-05)。 ⚠️ 本文是二手摘要,写代码前必须对照已安装包的
.d.ts类型定义核对 API 签名。
1. 包与运行时
- 包名:
@earendil-works/pi-coding-agent(主包自带 SDK,无需单独安装) - Node ≥ 22.19(Electron 37.6+ 主进程满足;系统 Node 仅跑构建)
- MIT 协议;monorepo 结构:
pi-agent-core(agent 运行时)/pi-ai(多 Provider LLM 统一接口)/pi-tui/chord/telemetry
2. SDK 三段式(嵌入 Node 应用的标准路径)
const { session } = await createAgentSession({ /* options */ });
session.subscribe((event) => { /* 处理 text_delta 等 */ });
await session.prompt("...");
prompt()返回 Promise,完成后 resolve;流式期间可用steer()/followUp()排队插话。- 事件流:
agent_start/end、message_update(含text_delta/thinking_delta)、tool_execution_start/update/end、turn_end、queue_update、压缩与自动重试事件。
3. 会话管理
SessionManager.inMemory()(无持久化)/.create()/.continueRecent()/.open()- 会话是树结构,支持分支(
fork());多会话动态替换用AgentSessionRuntime(newSession()/switchSession()/fork()/importFromJsonl(),替换后需重新订阅) - 持久化后端可插拔:官方
session-backends/sqlite-node(与我们本地 sqlite 方案契合) - 本地文件布局(与 pi CLI / pi-web 共享):
~/.pi/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl
4. 模型与凭据
- 认证解析优先级:运行时 API key →
auth.json(API key 或 OAuth)→ 环境变量 → 自定义 provider fallback resolver setRuntimeApiKey()(不落盘)、InMemoryCredentialStore、自定义 auth/models 路径、PI_OFFLINE离线模式- 内置 Provider:OpenAI、Anthropic、Google 等;自定义模型用
models.json,自定义 provider 支持实现自有 API 与 OAuth(为将来"服务器 LLM 代理端点"预留) - 本机现状:
~/.pi/agent/已有auth.json与models-store.json,应用零配置可直接复用
5. 定制点(SDK options)
| 维度 | 方式 |
|---|---|
| 系统提示 | DefaultResourceLoader({ systemPromptOverride: () => "..." }) |
| 工具 | tools 白名单内置工具;excludeTools 排除;noTools: "all" 全关;defineTool() 经 customTools 注入 |
| 扩展 | extensionFactories 内联扩展(pi.registerTool() / pi.on() / 命令),支持命名与共享 eventBus |
| 模型 | getModel() 取内置模型;models.json 自定义;thinkingLevel、scopedModels |
| Skills/上下文/提示模板 | ResourceLoader 的 skillsOverride、agentsFilesOverride、promptsOverride |
| 设置 | SettingsManager.inMemory() / .create(),可覆盖压缩、重试等 |
6. 安全要点
- pi 无内置权限系统,工具以进程用户权限执行。业务 agent 必须
noTools或白名单收窄,能力全部走defineTool()自定义工具;本地文件类操作按需开启并配tool_call拦截。
7. 扩展(Extension)API 摘要
- 加载:
~/.pi/agent/extensions/*.ts(全局)、.pi/extensions/*.ts(项目级,需 trust)、pi -e ./x.ts(临时);jiti 加载 TS 免编译,/reload热重载(SDK 路径用extensionFactories内联) - 能力:
pi.on(event, handler)(拦截tool_call、改写input、before_agent_start注入上下文/改提示词)、pi.registerTool()(typebox 参数、流式进度onUpdate)、pi.registerCommand()、ctx.ui自定义交互、pi.appendEntry()会话持久化、pi.sendMessage() - 注意:自定义工具需手动截断输出(默认 50KB/2000 行)、
withFileMutationQueue()防并行写冲突
8. 备选集成模式
| 模式 | 用途 | 取舍 |
|---|---|---|
| SDK 同进程(主选) | 嵌入 Electron 主进程 | 类型安全、直接访问 agent state |
RPC 模式(pi --mode rpc) |
子进程隔离 | 崩溃隔离好,但失去类型安全,自管 JSONL 协议 |
| JSON event stream | 结构化事件打印 | 观测/调试用 |
9. pi-web 可借鉴的实现细节
- WebSocket 事件以快照推送、60ms 节流(我们的 IPC 转发同样适用)
- 会话列表 UI 数据:运行状态、上下文用量、成本、压缩详情
- 双分支设计:New session(从历史消息建独立会话)/ Edit from here(当前会话内分支)