Skip to content

feat(chat): 恢复会话历史中的 Agent 执行阶段 - #49

Merged
Heyflyingpig merged 2 commits into
developfrom
feat(chat)/execution-phase-history
Aug 11, 2026
Merged

feat(chat): 恢复会话历史中的 Agent 执行阶段#49
Heyflyingpig merged 2 commits into
developfrom
feat(chat)/execution-phase-history

Conversation

@Heyflyingpig

Copy link
Copy Markdown
Owner

背景

当前会话历史只恢复用户和 AI 消息,刷新后无法查看 Agent 已持久化的节点执行过程。经历 interrupt/resume 的同一个 Job 可能包含多个输入阶段,但前端只能显示当前实时阶段。

活动 Job 刷新还直接使用活动接口返回的最新事件 ID 建立 SSE,存在加载历史与建立订阅之间新增事件被跳过的窗口。

主要改动

  • /api/load_session 增加可选 thinking_after
  • 使用现有 Job、输入账本、聊天消息和事件关系组装 ExecutionPhase。
  • 不新增数据库实体、字段或 migration。
  • 支持单阶段、多次 interrupt/resume、失败、取消和活动阶段。
  • 关联关系缺失或多义时跳过对应区间并记录告警,不按时间猜测。
  • 批量读取附件、Job、输入和事件,避免按消息或按 Job 查询。
  • 历史与 SSE 共用按事件类型划分的公共字段白名单。
  • 历史排除 text_delta 和所有边界事件。
  • 前端复用现有节点处理函数回放历史阶段。
  • interrupt 后保留已完成时间线。
  • 使用 rendered_event_id 从实际回放位置继续 SSE。
  • 活动 Job API 的最新事件 ID 不再覆盖实际回放游标。

安全与性能

  • 普通用户事件不返回 attempt、prompt、ToolMessage、原始工具结果、文件正文或隐藏推理。
  • 所有历史数据在用户授权 Session 和 Job 范围内读取。
  • 会话加载使用单个主库只读事务。
  • 不运行 LangGraph、LLM、MCP 或 checkpoint。
  • 不修改数据库 schema。

测试

  • Docker unit:279 passed
  • 定向 Job/Chat 测试:19 passed
  • 前端状态测试:7 passed
  • Migration integration:18 passed
  • JavaScript syntax:passed
  • MySQL readonly transaction:passed
  • Browser mock refresh validation:passed
  • Mobile 390px overflow validation:passed
  • git diff --check:passed

已知验证边界

未运行真实 LLM/MCP Job。浏览器验收使用隔离 API mock,没有写入业务测试数据。

完整 integration 中有两个与本次修改无关的现有部署检查失败:

  1. unit-test 镜像中没有 git。
  2. 部署测试仍要求旧 Dockerfile runtime stage 文本。

数据库变更

无。

@Heyflyingpig Heyflyingpig self-assigned this Aug 11, 2026
@Heyflyingpig
Heyflyingpig merged commit bf79ed3 into develop Aug 11, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant