fix(AI 建任务): 切走再切回来不再重置/重复探索回放
现象(用户报):离开「AI 建任务」子页再回来,回放与步骤计数像是被重置了。 真因与修法(`static/admin/taskgen.js`): 1. 每次进入子页 `initTaskGen → tgRestore` 都会重新订阅 SSE。已在盯同一轮时这是多余的: 服务端 `_Fanout` 带历史缓冲,会把这一轮**从头补发**一遍 → 回放区里卡片变两份、 步骤计数从 0 重数。现在用 `_tgRunId` 记当前订阅,同一轮直接复用连接; 换了一轮/刚刷新过页面才清空回放区重新订阅(历史缓冲会把已发生的事件补回来)。 2. 跟随画面的 MJPEG 长连接在切 Tab 时可能被浏览器挂起(画面定格)—— 切回来时重新拉一次流(`tgRearmLive`)。 实测(真机,12 步探索):切走 6 秒再切回 → 卡片 11→14 无重复、状态继续计数; 跑完后再切两次 → 14 张卡片与草稿预览均保持、跟随画面正常、无 JS 报错。
This commit is contained in:
+5
-1
@@ -214,7 +214,11 @@
|
||||
`static/admin/base.js` 的 `showSubTab`)。草稿预览能直接点「在步骤编辑器中打开」→
|
||||
`openTaskModal(null, prefill)` 预填(用唯一 draftKey,避开 localStorage 旧草稿覆盖)。
|
||||
- **两个页面共用一个运行槽**:`GET /api/agent/run` 回 `mode`,两个前端各按 mode 决定
|
||||
是否订阅 SSE(一个 run 只有一个事件队列,两个 EventSource 同时消费会互相瓜分事件)。
|
||||
是否订阅 SSE;服务端用 `_Fanout` 给**每个订阅者一条自己的队列**(谁都不丢事件)。
|
||||
- **切 Tab 不丢回放**:`initTaskGen()` 每次进入子页都会 `tgRestore()`——已经在盯同一轮就
|
||||
**不重复订阅**(否则服务端会把这一轮从头补发一遍,卡片成两份);换了一轮/刚刷新过页面才清空
|
||||
回放区重新订阅(`_Fanout` 的历史缓冲会把已发生的事件补回来)。跟随画面的 MJPEG 长连接
|
||||
在切回来时重新拉一次(`tgRearmLive`),避免定格。
|
||||
- **落库出口**:页面上的「✓ 直接创建任务」(`POST /api/agent/task_draft/create`)与
|
||||
「在步骤编辑器中核对」(预填编辑器 → 用户点保存)——两条路最终都汇到 `add_job`。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user