提交一次代码

This commit is contained in:
andy
2026-07-12 09:57:54 +08:00
parent 9bd6bc1cd0
commit 6e47158d9e
46 changed files with 3524 additions and 48 deletions

View File

@@ -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 时间,页面再按酒店或用户时区展示。

View File

@@ -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 | 后端尝试解析出的 JSONS000/S999 会返回识别后的对象,其他解析失败时可能为空。 |
| `superagent_parsed_json` | object/null | 后端尝试解析出的 JSONS000/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. 错误响应
错误响应结构:

View File

@@ -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",

View File

@@ -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 保留为当前阶段实现记录
> 本文只用于理解早期流程讨论和边界来源。
## 文档信息

View File

@@ -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 写入 |
说明: