doc: update Editor Agent abort behavior and UI sync logic during HTTP stop
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
## 2026-07-22 画布 Agent 普通规划通过 HTTP abort 中断
|
||||
|
||||
- 背景:画布 Agent 规划可在 `agent.prompt(...)` 及 LLM 重试中长时间等待,用户输入有误时需要立即释放会话锁并发送新 prompt。2026-07-17 的旧决策以“fetch 中断不能保证后端停止”为前提移除了停止入口,但当前 Axum 0.8.9 / Hyper 1.8.1 和 Pingora 代理链可通过真实断连回归验证 handler Future 被 drop。
|
||||
- 决策:普通消息等待期间将“发送”切换为“停止”。前端为每轮请求创建 `AbortController`,主动停止时 abort `/messages` POST;Hyper 在断连 / HTTP/2 `RST_STREAM` 后 drop `editor_agent_message`,连带 drop `agent.prompt(...)` 与 LLM reqwest Future,RAII 释放 conversation lock。`AbortError` 不进入 POST transport retry、不展示失败、不删除已持久化的用户消息;停止后的静默会话对账直接 `await` 在 abort 分支内,`isAborting` 覆盖从 abort 开始到 GET 结束的整个阶段,期间 `isWaiting` 继续阻止下一次发送,GET 结束后允许新 prompt。不新增 abort API、运行态 registry、消息状态或 SpacetimeDB 字段。
|
||||
- 决策:普通消息等待期间将“发送”切换为“停止”。前端为每轮请求创建 `AbortController`,主动停止时 abort `/messages` POST;Hyper 在断连 / HTTP/2 `RST_STREAM` 后 drop `editor_agent_message`,连带 drop `agent.prompt(...)` 与 LLM reqwest Future,RAII 释放 conversation lock。`AbortError` 不进入 POST transport retry、不展示失败、不删除已持久化的用户消息;停止后的静默会话 GET 作为尽力而为的 UI 对账直接 `await` 在 abort 分支内,成功时应用权威详情,失败时静默保留当前消息。`isAborting` 覆盖从 abort 开始到 GET 成功或失败结束的整个阶段,期间 `isWaiting` 继续阻止下一次发送,GET 结束后允许新 prompt。锁释放由 handler drop 与 RAII 保证,不把 GET 成功设为恢复前置条件;后续 POST 重新读取 OSS 权威会话并按 `clientMessageId` 幂等处理,因此对账失败不会破坏后端一致性。不新增 abort API、运行态 registry、消息状态或 SpacetimeDB 字段。
|
||||
- 边界:这会 drop 整个当前 HTTP handler,不是已确认 external generation job 的取消;上游模型已接收请求后是否立即停止计算由 provider 决定。用户消息保留为普通历史,会继续进入后续 LLM 上下文。
|
||||
- 影响范围:画布 Agent 对话 hook、发送区交互、API client abort 识别、Axum / Pingora 断连回归和专题 / 架构文档。
|
||||
- 验证方式:前端定向测试锁定 signal、按钮、不重试和中断后新 prompt;api-server 真实 TCP 回归锁定 HTTP 请求 drop 后 handler 析构与 mutex 释放;Pingora smoke 锁定下游中断传播到 API 上游。追加类型检查、编码和 diff 门禁。
|
||||
|
||||
Reference in New Issue
Block a user