唤醒 · 无人值守可行性 —— 两张图

2026-09-30 19:4x | 机制线·唤醒机制探索 | 会话 a202550c | 配文:交付物/唤醒-无人值守可行性-20260930.md
判定:不能 —— 「把已经退出的那个会话从外部叫起来续跑」结构上无路:网关口就长在 worker 进程里,worker 一走端口就走;唯一外部入口 POST /api/v1/runs 又不带"选哪个会话"的能力。
但"无人值守"本身仍做得到 —— 形态是「无人值守地新起一个会话」(=自动化派棒,今天已在跑),代价:粒度最细 1 小时。

图 1 · 泳道图(角色 × 阶段)

看"外部想唤它"这个动作落在哪一格 —— 第 ④ 列把网关口带走,第 ⑤ 列因此没有可投的地址。
角色 \ 阶段 ① 会话被激活 ② 回合进行中 ③ 回合结束 ④ worker 自行退出 ⑤ 外部想叫醒它 宿主主进程CliPrewarmPool CLI worker(=会话宿主) 网关口 (HTTP) 外部程序(想唤醒的一方) 目标旧会话 tryAcquire→ doActivate+ spawn 补池 (不干预) (不干预) child.on("exit")⇒ 只打一条 warn ⛔ 不补池/不重拉 无入口⛔ 不补池⛔ 不重拉 起进程+挂网关口:PORT 随进程诞生 处理消息·跑工具addHistory 不停 生成收尾addHistory ✔ code=1 静默退出stderr 空·非人为 kill ⇒ 端口也没了 已不存在 /live = 本会话 writerOccupied=true (同左) ✗ 随进程消失 ✗ 连不上 ——— — POST /runs → 202 接受 但落到「它自己 那个会话」 ← 唯一一次被激活 跑完它的回合 transcript 冻结 就此冻结 零反应 (md5 一字未变) ▲ 红格:④ 把网关口带走 ⇒ ⑤ 无处可投(对别的活网关投=落它自己的会话)
断点/失效 看似成功、实则落错会话 正常

图 2 · 事故链图("想唤醒旧会话"实际怎么断的 + 哪几道防线缺席)

★="有人在给它派活"这一瞬间;红格=静默丢单;橙格=202 假绿。
19:00:19.720 宿主 tryAcquire → doActivate ⇒ 706d2476 拿到 worker(pid=47188) 网关口 :PORT 随之诞生 19:00–19:09 该会话跑完它的整轮工作(会话日志连续增长) 19:09:16.304 ★ resolveConfig input {"sessionId":"706d2476…"} =宿主这边**确实**在给它准备一次运行 ⇒ 有人在派活 19:09:16.570 ⛔ activated prewarm entry exited unexpectedly code=1 signal=none stderr tail: <empty> ⇒ 0.27 s 之内,那次"派活"就地蒸发(静默丢单) 此后 再没有任何 706d2476 的 doActivate / resolveConfig ⇒ 宿主不自愈(activated 退出=只 warn,不补不拉) 19:40:56 本棒把 id=706d2476 的 POST /api/v1/runs 打到另一个**活着的**网关 回 202 accepted、run 表 active=true ⇢ 看似成功 19:45:00 706d2476 transcript:230 行 / md5 7c404bfd… / mtime 19:09:15.929 ▲ **一字未变** ⇒ 这一棒想做的事,结构上就做不成 (activeSessionId 全程仍是投递方自己的会话 a202550c) 哪几道防线缺席 1 投递没有"落到谁"的回执 202 只说明"受理了";/status.activeSessionId 也不会因这次投递而变 ⇒ 调用方无法判断"它到底有没有投到我要的那个会话" 2 activated 条目意外退出=只写一条 warn 不补池、不重拉、不通知任何环节 ⇒ 会话宿主没了,系统里没有一环会察觉,更不会自愈 3 网关没有"打开/激活某个会话"的端点 会话控制器只有 list / live / workspaces / pins / rename / remove / history / replay / reply —— 唯独没有"打开" ⇒ 唯一有效的复活动因在桌面端,而它走 pipe,不是 TCP ⇒ 外部接不上 4 worker 存活时长没有下限保障 今天实测:最短 28 s、多数 4–5 min(三天 40 / 55 / 28 次退出) idle 钩子要的"连续空闲 ≥60 s"正好落在 worker 生命的尾巴上 ⇒ 18:55:00.210 那次成功,是小概率命中,不是稳定能力 结论:这四条都不是"没做好",是"结构上不存在"—— 故"唤醒同一个旧会话"无法实现;能实现的是"无人值守地新起一个会话"(自动化,1 小时粒度)。 唯一能改变此判定的未知量:code=1 到底是"回合结束被主动回收"还是"崩溃"。