用 SDK 创建第一个 Agent
从最小 createAgentSession 到只读工具集,建立一个可释放、可观察的嵌入式 Pi session。
ANALYSIS SNAPSHOTPi v0.82.1
5bc1c2c0前提
本章 API 对应 @earendil-works/pi-coding-agent@0.82.1。需要 Node.js >=22.19.0,并提前配置模型凭据。
最小 session
import { createAgentSession } from "@earendil-works/pi-coding-agent";
const { session } = await createAgentSession();
try {
session.subscribe((event) => {
if (
event.type === "message_update" &&
event.assistantMessageEvent.type === "text_delta"
) {
process.stdout.write(event.assistantMessageEvent.delta);
}
});
await session.prompt("Explain this repository's test strategy.");
} finally {
session.dispose();
}
packages/coding-agent/examples/sdk/01-minimal.ts:8-26minimal SDK
逐行理解
createAgentSession()发现当前目录与~/.pi/agent中的 settings、context、resources 和模型配置。subscribe()观察的是 AgentSession events;示例只消费 text delta。prompt()直到 run 完成才 resolve,但 streaming 事件会在过程中持续到达。dispose()释放 extension/runtime 服务;应放在finally。
做成只读 session
import {
createAgentSession,
SessionManager,
} from "@earendil-works/pi-coding-agent";
const { session } = await createAgentSession({
tools: ["read", "grep", "find", "ls"],
sessionManager: SessionManager.inMemory(),
});
这里的“只读”表示没有注册内建 write/edit/bash,且不持久保存 session。若加载了拥有文件权限的 extension,这个描述就不再完整。
练习
- 记录
agent_start到agent_end的总时长。 - 把每个
tool_execution_start/end转成结构化 trace。 - 使用
SessionManager.inMemory()与持久 session 各运行一次,比较恢复行为。 - 在 30 秒后调用 abort,并确认 UI/调用方能区分 aborted 与 error。