问题背景
在 wanman.ai(Sandbank Cloud 托管版)中使用多 Agent 故事模式,之前遇到过 token 耗尽导致沙箱回收、项目无法继续的问题。最近的更新后这个问题已解决:故事暂停后点击继续不再卡 UI,可以正常恢复界面,成果物也都还在。
新问题:Agent 罢工
但是出现了新的问题:暂停后点击继续,UI 恢复正常,成果物完好,但 Agent 团队停止推进工作——没有任何 Agent 继续执行任务,就像全体罢工一样。
环境
- 平台:wanman.ai(Sandbank Cloud 托管版)
- Agent 类型:多 Agent 协作(CEO + Workers)
- 触发方式:故事运行中 → 暂停 → 继续
源码分析(可能原因)
我阅读了 packages/runtime/src/agent-process.ts 中的 pause/resume 逻辑:
// L657-664
pause(): void {
if (this._state !== 'running') return; // 只暂停 running 态的 agent
if (this.currentProcess?.proc?.pid) {
try { process.kill(this.currentProcess.proc.pid, 'SIGSTOP'); } catch { }
}
this._state = 'paused';
}
// L667-674
resume(): void {
if (this._state !== 'paused') return; // 只恢复 paused 态的 agent
if (this.currentProcess?.proc?.pid) {
try { process.kill(this.currentProcess.proc.pid, 'SIGCONT'); } catch { }
}
this._state = 'running';
}
状态门问题:on-demand / idle_cached 类型的 agent 在完成上一个任务后会回到 idle 状态。暂停时它们处于 idle 而非 running,pause() 直接跳过。恢复时它们仍然是 idle 而非 paused,resume() 也直接跳过。结果是这些 agent 被永久留在 idle 状态,而任务队列中的任务没有新消息来触发唤醒(setNewMessageCallback),导致全体罢工。
同样的问题在沙箱回收后 Supervisor 重启时也会发生——所有 on-demand agent 从零创建进入 idle,已投递的消息不会重新触发它们。
临时绕过
手动给停滞的 agent 发送消息可以重新触发。
建议修复方向
resume() 时,不仅恢复 paused 的 agent,对 idle 态的 on-demand/idle_cached agent 也应检查 message/task 队列并触发
- 或在 Supervisor 的
SUPERVISOR_RESUME RPC 处理中增加扫描逻辑,恢复后遍历所有 agent 检查是否有未完成的任务需要推进
问题背景
在 wanman.ai(Sandbank Cloud 托管版)中使用多 Agent 故事模式,之前遇到过 token 耗尽导致沙箱回收、项目无法继续的问题。最近的更新后这个问题已解决:故事暂停后点击继续不再卡 UI,可以正常恢复界面,成果物也都还在。
新问题:Agent 罢工
但是出现了新的问题:暂停后点击继续,UI 恢复正常,成果物完好,但 Agent 团队停止推进工作——没有任何 Agent 继续执行任务,就像全体罢工一样。
环境
源码分析(可能原因)
我阅读了
packages/runtime/src/agent-process.ts中的 pause/resume 逻辑:状态门问题:
on-demand/idle_cached类型的 agent 在完成上一个任务后会回到idle状态。暂停时它们处于idle而非running,pause()直接跳过。恢复时它们仍然是idle而非paused,resume()也直接跳过。结果是这些 agent 被永久留在idle状态,而任务队列中的任务没有新消息来触发唤醒(setNewMessageCallback),导致全体罢工。同样的问题在沙箱回收后 Supervisor 重启时也会发生——所有 on-demand agent 从零创建进入
idle,已投递的消息不会重新触发它们。临时绕过
手动给停滞的 agent 发送消息可以重新触发。
建议修复方向
resume()时,不仅恢复paused的 agent,对idle态的on-demand/idle_cachedagent 也应检查 message/task 队列并触发SUPERVISOR_RESUMERPC 处理中增加扫描逻辑,恢复后遍历所有 agent 检查是否有未完成的任务需要推进