第 2 章研究笔记
关键源码
restored-src/src/main.tsx:CLI 入口,负责交互式和--print模式分流。restored-src/src/replLauncher.tsx:懒加载App和REPL。restored-src/src/screens/REPL.tsx:交互式路径,负责输入、UI、权限弹窗和调用query()。restored-src/src/cli/print.ts:非交互/SDK 路径。restored-src/src/QueryEngine.ts:headless 会话引擎。restored-src/src/query.ts:模型调用、工具执行、上下文压缩和恢复的主循环。
调用链摘要
交互式路径:
text
main.tsx
-> launchRepl()
-> REPL
-> handlePromptSubmit()
-> query()
-> deps.callModel()
-> runTools()
-> 下一轮 query iteration1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
非交互路径:
text
main.tsx
-> runHeadless()
-> ask()
-> new QueryEngine()
-> engine.submitMessage()
-> query()1
2
3
4
5
6
2
3
4
5
6
关键数据结构
QueryEngineConfig:headless 会话配置。QueryParams:query()的执行参数。ToolUseContext:工具执行期间需要的环境。State:query.ts内跨 iteration 的状态。Message[]:对话上下文的核心载体。
架构提炼
值得迁移:
- UI 和 headless 共用同一个核心
query()。 - 用
AsyncGenerator输出流式事件。 - 用
QueryEngine封装多轮会话。 - 通过
canUseTool注入权限。
谨慎照搬:
query.ts过于庞大。- feature flag 和内部状态较多。
- REPL 与 headless 仍有部分重复装配逻辑。