Files
inkos/packages/studio
Ma 0091c3c665 fix(studio): find running tasks in memory before the disk snapshot when deleting or aborting
根因:DELETE /sessions/:id 和 POST /sessions/:id/abort 都靠
loadReconciledTaskSnapshot 从磁盘快照拿 execution.id 再查 controller Map。
但任务的 AbortController 注册(同步)与首次快照持久化(在
executeConfirmedProductionAction 内部)之间有多个 await 间隙,窗口内的
删除/中止从磁盘读不到快照,刚启动的任务被漏掉、停不下来。

修法:reservedProductionSessions 从 Set<string> 升级为 Map<string, string>
(sessionId → taskId;预留时 confirmedTaskId 已生成,两处都在手)。新增
findRunningTaskController:优先查内存预留表拿 taskId → controller,磁盘
快照只作回退(覆盖进程重启后的对账场景)。DELETE 与 /abort scope=all
统一改走该入口;finally 的释放逻辑不变(Map.delete 同 key)。

测试:让任务开始时预写指令的首次 appendManualSessionMessages 挂起,制造
"controller 已注册、磁盘无快照"的窗口,断言窗口内 /abort 返回
aborted: true、DELETE 能让任务的中止信号生效且请求以错误结束。
2026-07-15 15:20:15 +08:00
..
2026-07-11 18:03:27 +08:00