01
生命周期
从 resolved command 到进程树清理
session map 以 ptyId 为键,保证一个 id 只有一个当前 owner。spawn 成功后注册 onData/onExit;显式 kill 会先杀 PTY、验证进程树,再同步移除 session;自然退出走相同 teardown hook。
交互图解
PTY 生命周期与重启保护
validateid / cwd / command
resolvePATH / Windows shim
spawnxterm-256color
streamdata / write / resize
exitidentity guard
reapprocess tree cleanup
02
跨平台差异
Windows 的难点不是 shell 名称,而是 shim、argv 与 ConPTY
CreateProcess 不能直接执行 .cmd/.bat。实现优先解析 npm shim,直接启动其 interpreter + script,以保留多行 Hive prompt;解析失败才退回 cmd.exe,并显式警告多行参数会被截断。
- 01Unix 使用已缓存的交互式 shell PATH;Windows 继承 PATH 并追加 Hive runtime fallback。
- 02Missing-CLI installer 走平台 shell;正常 CLI 尽量避免 shell parser。
- 03killAll 在 Windows 先同步 hardKillTree,再关闭 ConPTY,避免父进程退出后丢失后代。
03
故障与恢复
同 id restart 通过 session identity guard 避免竞争
kill 后马上以同 ptyId respawn 时,旧进程可能稍后才触发 onData/onExit。回调会检查 sessions.get(id) 是否仍是自己;不是就丢弃尾部输出和 stale exit。
SOURCE FACT
Sleep/wake 检查只用 signal 0 探测并通知,不自动替用户重启;真正 revive 仍由 renderer 的 spawn 流程负责。
04
生命周期不变量
用三个 id 和一条回收链证明没有孤儿进程
Agent id、内部 PTY session id 与 OS pid 用途不同。任何关闭入口都应先解析到唯一 session,再对其进程树执行幂等回收并广播最终状态。
关掉屏幕不等于关掉机器;删掉 UI tab 也不等于终止 CLI。