Skip to content

[bug] assistant: switching projects stops active Agent replies #81

Closed

Description

@FayeSpica

问题与影响

Agent 执行期间切换到其他项目,再返回原项目,会显示“已停止回复”。项目导航被当作停止执行,用户未点击停止也会丢失后续编排与回复。

复现步骤

  1. 在项目 A 启动尚未完成的 Agent 对话。
  2. 在执行过程中切换到项目 B。
  3. 返回项目 A,检查回复状态和任务进展。

用户报告上述页面路径。另在隔离工程使用模拟 runtime 完成 HTTP/SSE 层复现:收到 running 增量后直接关闭连接,全程未调用 stop 接口,runtime 随后被取消,助手消息落盘为 status=stopped、正文保留 running。

预期与实际

  • 预期:切换项目只离开当前视图,已接受的 Agent 运行继续;返回时恢复真实运行状态及回复。显式停止与导航应保持不同语义。
  • 实际:断开 SSE 会取消 Agent,历史消息恢复后显示“已停止回复”。已提交生成 Job 是否仍继续需与 Agent 运行分别表达,不能将二者混为一谈。

定位与证据

检查版本:5581f19f4375950e3286678366ac0b13ad2b9cc1,本地 macOS、18000 服务。隔离复现使用真实 HTTP/SSE、临时工程及模拟 runtime,不调用外部模型,不修改真实工程。

  • useAssistantChat.ts:项目相关 effect 清理时对聊天请求执行 controller.current?.abort()。
  • agent.py:SSE 生成器退出时,在 finally 中执行 task.cancel();produce 捕获取消后将状态设为 stopped 并持久化。
  • AssistantPanel.tsx:持久化状态为 stopped 时显示“已停止回复”。

历史检查发现项目 00013 存在 stopped 记录,但该条轨迹仅有初始化事件,无法单凭历史记录确认其停止原因。另一条较新的 DeepSeek 运行轨迹包含业务查询并最终保存 complete,因此不能将所有历史运行都归因于此问题。当前明确复现的机制是“连接断开 → Agent 取消 → stopped 持久化”;本次未重新执行浏览器切换流程。

验收标准

  • Agent 执行中切换项目并返回,不自动变为 stopped,能够恢复当前运行状态及最终回复。
  • SSE 断开及重连不会隐式取消 Agent,也不会重复提交运行或业务任务。
  • 显式停止仍能停止后续编排,并正确持久化状态。
  • 已接受生成任务的执行、结果和采用策略不被导航操作破坏。
  • 覆盖运行中导航、完成后返回、断线重连和显式停止的代表性验证。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:agentAgent runtime, assistant chat and toolstype:bugSomething is broken

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions