Chapter 18

源码精读路线:按调用链吃透每一个细节

目标不是背 API,而是建立能从顶层设计一路推导到源码细节的心智模型。读完本章,你应该能解释“为什么这样设计”,而不仅是“代码在哪里”。

1. 第一条调用链:创建 Agent

ctx.agents.create() 开始,追到 factory、agent-loop 的 setupAndPublish、SessionStore prepare/enter/announce、AgentRegistry enter,再看 driver 启动。把每个 rollback 点画出来。

2. 第二条调用链:一次纯文本回答

追 user inbox → turn/start → pre-step → step/start → deriveMessages → systemPrompt.assemble → agent/request → llm.stream → assistant/chunk → assistant/message → step/end → turn/end。

3. 第三条调用链:一次工具调用

在第二条基础上继续追 tool/call → tools/pre-execute → execute → post-execute → tool/result → 下一 step。重点看工具结果何时成为 model-visible。

4. 第四条调用链:恢复会话

从 persistence loader 得到事件 → validate/freeze → Session surface rebuild → agent resume → 下一次 deriveMessages。验证所有运行时状态是否真的能从 log 重建。

5. 第五条调用链:替换 Provider

选 shell 或 persistence seam:从 Definition 看接口,分别看两个 provider,再看 consumer。最后只改配置切换 provider,确认 consumer 源码不变。

6. 每次精读都做“六栏笔记”

文件提供依赖事件effect/dispose不变量
例:agent-loopctx.agentLoop / factorysessions,llm,tools,promptagent/*driver ownership发布事务、turn/step闭合
源码定位:Architecture roadmap · docs/architecture.zh.md
打开官方源码/文档
源码定位:Agent loop internals · packages/core/agent-loop/README.zh.md
打开官方源码/文档