提交一次代码
This commit is contained in:
@@ -30,7 +30,8 @@
|
||||
| --- | --- | --- |
|
||||
| `requirements/M001-source-message-inbox-prd.md` | 当前有效 | M001 邮件来源入口 PRD,记录 AgentBus 邮件 JSON 入库、历史查询、原文读取和媒体引用边界。 |
|
||||
| `requirements/M002-order-task-workflow-v1.md` | 历史参考 | M002 订单任务主流程 V1,已由 V2 承接,保留用于理解早期流程。 |
|
||||
| `requirements/M002-order-task-workflow-v2.md` | 当前有效 | M002 订单任务主流程 V2,记录 AI 过渡层、任务卡矩阵、系统主任务类型、临时订单、订单号候选和 OPERA 模拟回填边界。 |
|
||||
| `requirements/M002-order-task-workflow-v2.md` | 阶段记录 | M002 订单任务主流程 V2,记录当前已阶段实现的 AI 过渡层、S000/S999 兼容、订单任务流转、任务确认和 OPERA 模拟骨架。 |
|
||||
| `requirements/M002-order-task-workflow-v3.md` | 当前有效 | M002 订单任务主流程 V3,基于 2026-07-11 P0 冻结基线,记录 S10/S99、42 路由、方案 C、type-known manual review 同卡解阻和 fail-closed 边界。 |
|
||||
| `requirements/M002-superagent-task-result-api-contract.md` | 阶段记录 | M002 SuperAgent 任务结果入站接口契约阶段记录;对外总契约以 `integrations/superagent-api-contract.md` 为准。 |
|
||||
| `requirements/M002-ai-query-minimal-fields.md` | 阶段记录 | M002 SuperAgent 查询上下文接口 1、2 最小字段落地记录;对外总契约以 `integrations/superagent-api-contract.md` 为准。 |
|
||||
| `requirements/M002-backend-data-model-design.md` | 阶段记录 | M002 后端数据模型设计,记录 AI 过渡层、订单、任务、任务卡、审计和 OPERA 模拟结果表。 |
|
||||
@@ -67,6 +68,6 @@
|
||||
|
||||
- SuperAgent 对外 HTTP 接口以 `integrations/superagent-api-contract.md` 为权威来源。
|
||||
- SuperAgent MCP 文档以 `integrations/superagent-mcp/` 为对外交付资料包,但字段语义应跟随 HTTP 总契约。
|
||||
- M002 V1 只作为历史参考;订单任务主流程以后续开发以 `requirements/M002-order-task-workflow-v2.md` 为准。
|
||||
- 前端展示 / 编辑字段以导入的前端字段表为白名单,后端完整校验和 OPERA 映射仍以任务卡完整矩阵和后端规则为准。
|
||||
- M002 V1 只作为历史参考;V2 记录当前阶段实现;后续 M002 新开发以 `requirements/M002-order-task-workflow-v3.md` 为开发基线。
|
||||
- 前端展示 / 编辑字段以 2026-07-11 P0 冻结基线中的前端字段表和路由说明为白名单,后端完整校验和 OPERA 映射仍以任务卡完整矩阵、0711 runtime 契约和后端规则为准。
|
||||
- 时间点语义以 `backend-time-design.md` 为准;数据库时间点按 UTC 理解,API 返回带 `Z` 的 UTC 时间,页面再按酒店或用户时区展示。
|
||||
|
||||
@@ -35,7 +35,7 @@ Debug EML 页面第一版只做一件事:
|
||||
| 执行状态区 | loading、成功、失败、耗时、本次 `debug_run_id` | 提交后禁用按钮,避免重复点击;失败时展示安全错误摘要。 |
|
||||
| SourceMessage 追溯区 | `source_message_id`、`source_provider`、`external_message_id`、`external_conversation_id` | 用于确认已写入 SourceMessage Inbox。 |
|
||||
| 邮件内容预览区 | `html_body_sanitized`、纯文本、附件列表、内联图片列表 | HTML 展示必须优先使用 `html_body_sanitized`。 |
|
||||
| SuperAgent 结果区 | `superagent_parsed_json`、`superagent_raw_answer`、`warnings[]` | JSON 可以格式化展示;S000/S999 会被后端识别成结构化入口结果;raw answer 用于排查其他非 JSON 输出。 |
|
||||
| SuperAgent 结果区 | `superagent_parsed_json`、`superagent_raw_answer`、`warnings[]` | JSON 可以格式化展示;旧 S000/S999 和新 S10/S99 入口通知都不应被前端当成普通解析失败;raw answer 用于排查其他非 JSON 输出。 |
|
||||
| 调试 Payload 区 | `agentbus_like_payload` | 只用于调试展示,不让用户编辑后重新提交。 |
|
||||
|
||||
## 4. 接口
|
||||
@@ -122,7 +122,7 @@ export async function uploadDebugEml(input: {
|
||||
| `superagent_session_id` | string | SuperAgent session ID。 |
|
||||
| `superagent_run_id` | string | SuperAgent run ID。 |
|
||||
| `superagent_raw_answer` | string | SuperAgent 最终原始文本回答。 |
|
||||
| `superagent_parsed_json` | object/null | 后端尝试解析出的 JSON;S000/S999 会返回识别后的对象,其他解析失败时可能为空。 |
|
||||
| `superagent_parsed_json` | object/null | 后端尝试解析出的 JSON;旧 S000/S999 会返回识别后的对象,0711 P0 后续结构化 S10/S99 会直接作为 JSON 展示,其他解析失败时可能为空。 |
|
||||
| `warnings[]` | string[] | 安全或解析警告,可在页面顶部或结果区展示。 |
|
||||
| `status` | string | Debug run 状态。 |
|
||||
|
||||
@@ -145,9 +145,10 @@ export async function uploadDebugEml(input: {
|
||||
- `agentbus_like_payload.source.original_message_id` 是原始邮件 `Message-ID`。
|
||||
- `external_message_id` 是 Debug 链路生成的独立 ID,不等同于原始 `Message-ID`。
|
||||
- `superagent_parsed_json` 有值时优先展示格式化 JSON;没有值时展示 `superagent_raw_answer`。
|
||||
- 如果 SuperAgent 返回 `S000,source_message_id` 或 `S999,source_message_id`,后端会把它识别为特殊入口结果,不会作为 JSON 解析失败处理。前端可在结果区展示 `entry_result_code`、`entry_result_source_message_id`、`entry_result_meaning` 和 `entry_result_description`。
|
||||
- 如果 SuperAgent 返回旧 `S000,source_message_id` 或 `S999,source_message_id`,后端会把它识别为特殊入口结果,不会作为 JSON 解析失败处理。前端可在结果区展示 `entry_result_code`、`entry_result_source_message_id`、`entry_result_meaning` 和 `entry_result_description`。
|
||||
- 如果 SuperAgent 返回 0711 P0 新结构化 `S10/S99`,前端应按 JSON 展示 `route_code`、`result_type=source_message_review_notification`、`agent_assessment`、`notification` 和 S99 的入口 `manual_review`。
|
||||
|
||||
S000/S999 解析示例:
|
||||
旧 S000/S999 解析示例:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -158,6 +159,25 @@ S000/S999 解析示例:
|
||||
}
|
||||
```
|
||||
|
||||
V3 S10 结构化示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"route_code": "S10",
|
||||
"result_type": "source_message_review_notification",
|
||||
"agent_assessment": {
|
||||
"status": "no_booking_action_detected",
|
||||
"reason_code": "no_booking_action_detected"
|
||||
},
|
||||
"notification": {
|
||||
"notification_type": "source_message_review",
|
||||
"show_source_message": true,
|
||||
"requires_user_decision": true
|
||||
},
|
||||
"manual_review": null
|
||||
}
|
||||
```
|
||||
|
||||
## 6. 错误响应
|
||||
|
||||
错误响应结构:
|
||||
|
||||
@@ -346,6 +346,8 @@ POST /api/ai-query/v1/message-conversation/messages
|
||||
|
||||
### 7.4 输入 Schema
|
||||
|
||||
迁移提醒:当前 MCP tool 仍对应 M002 V2 的 `ai_task_results[]` 阶段契约。M002 V3 已确认迁移到结构化 `S10/S99` 和业务根 `message_events[]`,后续 MCP tool schema 必须跟随 `docs/project/integrations/superagent-api-contract.md` 和 `docs/project/requirements/M002-order-task-workflow-v3.md` 同步更新;在实现前不要把下方 schema 当作 V3 新入口。
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "object",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# M002 Order Task Workflow 订单任务主流程 V1
|
||||
|
||||
> 文档状态:历史参考。当前 M002 订单任务主流程已由
|
||||
> `M002-order-task-workflow-v2.md` 承接;后续开发、接口和测试优先以 V2 为准。
|
||||
> 文档状态:历史参考。当前 M002 后续开发基线已由
|
||||
> `M002-order-task-workflow-v3.md` 承接;V2 保留为当前阶段实现记录。
|
||||
> 本文只用于理解早期流程讨论和边界来源。
|
||||
|
||||
## 文档信息
|
||||
|
||||
@@ -47,6 +47,7 @@ Inbox 作为来源事实,但不创建订单、不创建任务、不写 AI 任
|
||||
- Debug EML 的 `external_message_id` 由后端生成,格式为 `debug-eml-run-{debugRunId}-{sha256前缀}`,避免同一封 `.eml` 多次上传被 SourceMessage 幂等覆盖。
|
||||
- 原始邮件 `Message-ID` 不再作为 Debug EML 的 `external_message_id`,而是保存到 `agentbus_like_payload.source.original_message_id`。
|
||||
- EML 会话解析支持 `References` / `In-Reply-To` / `Thread-Index`;缺失时再回退到当前消息 ID 或 debug 会话 ID。
|
||||
- Debug run 在解析、OSS 上传、构造 SourceMessage、写入 SourceMessage、调用 SuperAgent 前写入运行中阶段状态,便于测试环境定位卡点。
|
||||
- SourceMessage 写入成功后先把 debug run 标记为 `SOURCE_CAPTURED`;即使后续 SuperAgent 调用失败,也保留 SourceMessage 和 OSS 原文追溯信息。
|
||||
- HTML 正文复用邮件会话详情的 sanitize 策略,返回 `html_body_sanitized`、`html_sanitize_required` 和 `html_render_mode`。
|
||||
- `cid:` 图片替换支持大小写不敏感的 scheme,并兼容常见的尖括号和 URL 编码尖括号形式。
|
||||
@@ -92,14 +93,21 @@ Inbox 作为来源事实,但不创建订单、不创建任务、不写 AI 任
|
||||
```text
|
||||
Debug 页面上传 .eml
|
||||
→ 后端校验 X-TH-Hotel-Debug-Upload-Key
|
||||
→ debug run 标记为 PARSING_EML
|
||||
→ 解析 MIME 邮件结构
|
||||
→ debug run 标记为 UPLOADING_ORIGINAL_EML
|
||||
→ 上传原始 .eml 到阿里云 OSS
|
||||
→ debug run 标记为 UPLOADING_MEDIA
|
||||
→ 上传内联图片到阿里云 OSS
|
||||
→ debug run 标记为 UPLOADING_MEDIA
|
||||
→ 上传普通附件到阿里云 OSS
|
||||
→ debug run 标记为 BUILDING_SOURCE_MESSAGE
|
||||
→ 替换 HTML 正文中的 cid: 图片引用
|
||||
→ 组装 AgentBus-like payload
|
||||
→ debug run 标记为 CAPTURING_SOURCE_MESSAGE
|
||||
→ 调用 SourceMessageCaptureService 写入 SourceMessage Inbox
|
||||
→ debug run 标记为 SOURCE_CAPTURED
|
||||
→ debug run 标记为 CALLING_SUPERAGENT
|
||||
→ 调用 SuperAgent Open API 创建 session
|
||||
→ 调用 messages/stream 发送邮件 payload
|
||||
→ 解析 SSE 最终回答
|
||||
@@ -338,8 +346,8 @@ platform_debug_eml_superagent_run
|
||||
| `superagent_run_id` | SuperAgent run ID |
|
||||
| `superagent_raw_answer` | SuperAgent 最终文本回答 |
|
||||
| `superagent_parsed_json` | 后端解析出的 JSON |
|
||||
| `run_status` | `CREATED`、`SOURCE_CAPTURED`、`SUPERAGENT_SUCCEEDED`、`SUPERAGENT_FAILED`、`FAILED` |
|
||||
| `safe_error_summary` | 安全错误摘要,不包含正文、Secret 或附件签名 URL |
|
||||
| `run_status` | `CREATED`、`PARSING_EML`、`UPLOADING_ORIGINAL_EML`、`UPLOADING_MEDIA`、`BUILDING_SOURCE_MESSAGE`、`CAPTURING_SOURCE_MESSAGE`、`SOURCE_CAPTURED`、`CALLING_SUPERAGENT`、`SUPERAGENT_SUCCEEDED`、`SUPERAGENT_FAILED`、`FAILED` |
|
||||
| `safe_error_summary` | 运行中保存安全阶段摘要,失败时保存安全错误摘要;成功后清空为 `NULL`,不包含正文、Secret 或附件签名 URL |
|
||||
| `created_at` / `updated_at` | 创建和更新时间,按 UTC 写入 |
|
||||
|
||||
说明:
|
||||
|
||||
Reference in New Issue
Block a user