Skip to content

[Agent Core] 取消请求不应在运行清理完成前提交终态 #117

Open

Description

@rojim666

问题

CoreApp._run_cancel_handler() 调用 task.cancel() 后立即把 _run_status[run_id] 写成 cancelled。但 AgentRunner 捕获取消后仍会执行变更收尾、压缩等待、session 持久化和 RunFinishedEvent 发布,最后才向上抛出取消。

因此 run.cancel 返回时,run.get 可能已经显示 cancelled,但磁盘状态、事件流和实际清理仍未完成;取消竞态下还可能出现状态与 RunFinishedEvent.status 不一致或重复终态。

相关代码:src/sztu_code/core/app.py 的 _run_cancel_handler() / _on_run_finished(),src/sztu_code/core/runner.py 的取消收尾路径。

期望

  • run.cancel 只表示取消请求已接受,例如返回 cancelling;
  • 由 Runner 在所有清理完成后统一提交最终状态;
  • run.get、RunStore 和 RunFinishedEvent 共享同一个终态来源;
  • 重复取消、取消与自然完成竞态、重启恢复都只产生一个终态;
  • 终态提交后,不再允许工具、压缩或后台任务写入该 run。

验收标准

增加状态机/集成测试,覆盖权限等待、工具执行、压缩收尾和重复取消场景,并验证事件顺序与持久化状态一致。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/agent-coreAgent Loop、Runner、预算、取消与运行时生命周期bug可复现的缺陷或行为回归priority/P1重要功能

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions