修复SuperAgent自动分发恢复逻辑

This commit is contained in:
andy
2026-07-13 00:35:43 +08:00
parent 53b530d0b3
commit 50180f88cb
7 changed files with 289 additions and 16 deletions

View File

@@ -130,6 +130,7 @@
- `AGENTBUS_DEFAULT_HOTEL_ID` 是 M005 前旧变量,当前后端不再读取;系统酒店来自 `platform_hotel` 唯一 `ACTIVE` 酒店。
- 当前实现不发送 ACK、不发送 `task.result`、不自动回复客户。
- M007 自动分发即使开启,也只能在 SourceMessage 入库后通过 dispatch / outbox 异步调用 SuperAgent不能在 AgentBus WebSocket 回调内同步等待外部返回。
- M007 dispatch 创建使用 SourceMessage + dispatch_source 幂等;重复 `RECEIVED` 投递会尝试补偿缺失 outbox锁已过期的 `RUNNING` 记录会被 worker 重新领取。
### 3.5 SuperAgent HMAC

View File

@@ -44,8 +44,8 @@ AgentBus WebSocket 收到邮件
| --- | --- |
| 来源 provider | 必须是 `AGENTBUS` |
| 捕获状态 | 必须是 `RECEIVED` |
| 幂等结果 | `SourceMessageCaptureResult.newlyCreated=true` 时触发 |
| 重复投递 | 不重复创建 dispatch如 payload changed只记录 SourceMessage 重复诊断 |
| 幂等结果 | `RECEIVED` 状态会尝试幂等创建 dispatch数据库唯一键保证不会重复创建 |
| 重复投递 | 会再次尝试 `insertIfAbsent` 补偿可能缺失的 dispatch如 payload changed只记录 SourceMessage 重复诊断 |
| Debug EML | 不参与生产自动分发 |
| FAILED Inbox | 不分发,保留入库失败原因供排查 |
@@ -150,7 +150,7 @@ AgentBus 自动分发发送给 SuperAgent 的 message 第一版应基于 SourceM
## 8. 状态流转
```text
PENDING / RETRYABLE_FAILED
PENDING / RETRYABLE_FAILED / 过期 RUNNING
→ RUNNING
→ SUCCEEDED
@@ -191,11 +191,13 @@ RUNNING / RETRYABLE_FAILED
## 10. 验收标准
- AgentBus 新邮件入库成功后,在开启配置时创建一条 dispatch run。
- AgentBus 新邮件入库成功后,在开启配置时幂等创建一条 dispatch run。
- 重复 AgentBus 邮件投递不会创建第二条 dispatch run。
- 如首次入库后 dispatch 创建失败,后续重复 `RECEIVED` 投递可以补偿创建缺失的 dispatch run。
- worker 崩溃后,锁过期的 `RUNNING` dispatch 可以被重新领取处理。
- Debug EML 不会进入生产 dispatch run。
- `FAILED` SourceMessage 不会触发 dispatch。
- worker 能领取 `PENDING` 记录并调用 SuperAgent Open API。
- worker 能领取 `PENDING``RETRYABLE_FAILED` 和锁已过期的 `RUNNING` 记录并调用 SuperAgent Open API。
- SuperAgent 调用成功时保存 session、run、raw answer、parsed json、trace 摘要和 `SUCCEEDED` 状态。
- SuperAgent SSE 缺少 `end`、缺少最终内容或 `run.completed` 时不能成功。
- SSE EOF 后如果已有 `run_id`,使用 `/events` 恢复,不重发初始 POST。
@@ -209,8 +211,8 @@ RUNNING / RETRYABLE_FAILED
- 新增 `platform_superagent_dispatch_run` 表和 `V20__create_superagent_dispatch_run.sql`
- 新增 `SuperAgentDispatchRunEntity`、Mapper、Repository、Service 和配置类。
- AgentBus 捕获 `AGENTBUS + RECEIVED + newlyCreated=true` 后,在配置开启时创建 dispatch run。
- worker 处理 `PENDING / RETRYABLE_FAILED`,调用共享 SuperAgent Open API client。
- AgentBus 捕获 `AGENTBUS + RECEIVED` 后,在配置开启时幂等创建 dispatch run;重复投递可补偿缺失 outbox
- worker 处理 `PENDING / RETRYABLE_FAILED / 锁已过期 RUNNING`,调用共享 SuperAgent Open API client。
- Open API client 支持 `Content-Location``run_id`、SSE `id``Last-Event-ID``GET /runs/{run_id}``GET /runs/{run_id}/events` 恢复。
- Debug EML 继续复用共享 Open API client。
- dispatch 成功保存 session、run、last event id、raw answer、parsed json、trace 摘要和状态。