01
主调用链
Renderer 只提出请求,Main 才能创建进程
AddAgentModal 生成稳定 id 与 ptyId,preload 把结构化 SpawnPtyOptions 映射为 pty:spawn,Main 从唯一入口 spawnAgentCore 继续。
交互图解
Agent 启动主链
AddAgentModal校验表单 / tokenize
preload.spawnPtyipcRenderer.invoke
spawnAgentCoreprovider · install · resume
Git + Hiveworktree · identity · env
PtyManager.spawncommand · cwd · args · env
CLI Agent拥有 agent loop
固定源码证据
src/renderer/src/components/AddAgentModal.tsxL391-L430submitwindow.cth.spawnPtytokenizeCommand表单层拆分命令并提交 cwd、provider、隔离、恢复与 Hive 元数据。
已核验
src/preload/index.tsL577-L622spawnPtyonPtyDataonPtyExitpreload 暴露窄 API,没有把 ipcRenderer 本体交给页面。
已核验
src/main/index.tsL2521-L2555ipcMain.handle('pty:spawn')spawnAgentCore主进程验证输入、绑定窗口 owner 后进入统一核心。
已核验
02
启动前编排
在 pty.spawn 之前,控制面已经完成六类决策
实际顺序不是“点击后直接 spawn”。Main 会先扩展路径、判定 provider、检查/安装 CLI、创建 worktree、建立 Hive agent 目录与 bridge、补充模型/权限/恢复参数。
- 01路径:expandTilde 后再写入 registry 与 PTY,避免 `~` 被 Node 当成普通目录。
- 02引擎:inferAgentProvider 以显式 provider 为先,否则从 executable 推断。
- 03缺失 CLI:只运行 provider preset 内硬编码的可信安装命令,并在同一终端显示。
- 04隔离:isolate=true 且 cwd 是 Git repo 时创建 `agent/<id>` worktree;失败会降级到共享 cwd。
- 05Hive:ensureAgent 写 identity、memory、邮箱、registry,并生成 provider 对应 hook/proxy。
- 06恢复:Claude 用 --resume;Codex 用 resume 子命令与正确 CODEX_HOME;其他 provider 读取 preset。
固定源码证据
src/main/index.tsL2561-L2719isCommandAvailableaddWorktreehive.ensureAgent缺失引擎、worktree 与 Hive 的真实先后顺序。
已核验
src/main/index.tsL2721-L2849modelForRoleseedSessionTranscriptfindCodexHomeForSessionprovider-aware 的模型、权限与恢复参数。
已核验
src/shared/agentProvider.tsL170-L245AGENT_PROVIDER_PRESETScodexclaudeProvider preset 声明默认命令、bridge、初始 prompt 与恢复能力。
已核验
03
最终边界
PtyManager.spawn 才真正创建 CLI 进程
最终调用 node-pty 的 pty.spawn(file, args, {cwd, env, cols, rows})。从这一刻起,外部 CLI 自己拥有 agent loop、模型连接、工具执行与上下文。
04
失败推导
创建链要按阶段提交,否则会留下半个 Agent
工作区、provider 命令、PTY、roster 与 UI session 任一步都可能失败。为每一阶段写出已创建资源、补偿动作和用户可见错误。
像办理入住:房间没准备好就不能发房卡;发了房卡后失败则必须注销记录。