Files
SuperBizAgent-java/openspec/changes/archive/2026-06-26-session-storage/tasks.md
T
zhuyongxin e3f20b1f06 chore: 归档 session-storage change
- 创建 devflow 项目档案(brief/evidence/decisions/acceptance)
- 更新 devflow/index.md 索引
- 移动 OpenSpec 到 archive
2026-06-26 17:33:56 +08:00

4.1 KiB
Raw Blame History

会话存储 — 任务拆解

切片 1:Flyway 迁移脚本

文件: src/main/resources/db/migration/V005__create_session_storage.sql

内容:创建 diagnosis_session、agent_step、tool_invocation 三张表

验收标准:

  • 三张表均通过 Flyway 创建成功
  • 字段类型、索引、JSON 列定义正确
  • 回滚脚本可选(不做强制要求)

切片 2:JPA 实体类

文件:

  • src/main/java/com/superbiz/agent/domain/entity/DiagnosisSession.java
  • src/main/java/com/superbiz/agent/domain/entity/AgentStep.java
  • src/main/java/com/superbiz/agent/domain/entity/ToolInvocation.java

内容:三个 Entity,使用 @JdbcTypeCode(SqlTypes.JSON) 映射 JSON 列

验收标准:

  • 编译通过,无 JPA 映射错误
  • Entity 字段与 DDL 对齐
  • Lombok 注解完整

切片 3:JPA Repository

文件:

  • src/main/java/com/superbiz/agent/repository/DiagnosisSessionRepository.java
  • src/main/java/com/superbiz/agent/repository/AgentStepRepository.java
  • src/main/java/com/superbiz/agent/repository/ToolInvocationRepository.java

内容:三个 Repository,含自定义查询方法

验收标准:

  • 编译通过
  • 自定义方法命名正确
  • 可在 Spring 中自动注入

切片 4:SessionContextHolder 工具类

文件: src/main/java/com/superbiz/agent/util/SessionContextHolder.java

内容:基于 ThreadLocal 的 sessionId 传递工具

public class SessionContextHolder {
    private static final ThreadLocal<String> SESSION_ID = new ThreadLocal<>();

    public static void setSessionId(String sessionId) { SESSION_ID.set(sessionId); }
    public static String getSessionId() { return SESSION_ID.get(); }
    public static void clear() { SESSION_ID.remove(); }
}

验收标准:

  • 编译通过
  • set/get/clear 在同一线程内正常工作

切片 5:AgentLoggingHook 改造为 Spring Bean

文件: src/main/java/com/superbiz/agent/hook/AgentLoggingHook.java

内容:

  • 加 @Component 注解
  • 构造注入 AgentStepRepository
  • beforeModel 创建 agent_step
  • afterModel 更新 agent_step
  • 从 RunnableConfig 读取 sessionId

验收标准:

  • 编译通过
  • beforeModel 写入 agent_step 到 DB
  • afterModel 更新正确行
  • 原日志行为不变

切片 6:ChatService 集成

文件: src/main/java/com/superbiz/agent/service/ChatService.java

内容:

  • 注入 DiagnosisSessionRepository
  • executeChat 前后创建/更新 diagnosis_session
  • 通过 RunnableConfig 传递 sessionId

验收标准:

  • 每次 executeChat 产生一条 diagnosis_session 记录
  • sessionId 可被 Hook 读取
  • status、duration 等汇总指标正确

切片 7:AiOpsService 集成

文件: src/main/java/com/superbiz/agent/service/AiOpsService.java

内容:

  • 注入 DiagnosisSessionRepository 和 AgentLoggingHook
  • executeAiOpsAnalysis 前后创建/更新 diagnosis_session
  • Planner 和 Executor 各加 AgentLoggingHook
  • Supervisor 不加 Hook

验收标准:

  • 每次 executeAiOpsAnalysis 产生一条 diagnosis_session 记录
  • Planner 执行产生 agent_step 记录
  • Executor 执行产生 agent_step 记录
  • Supervisor 不产生 agent_step 记录

切片 8:LookupKnowledgeTool 集成

文件: src/main/java/com/superbiz/agent/tool/LookupKnowledgeTool.java

内容:

  • 注入 ToolInvocationRepository
  • 执行后写入 tool_invocation 记录
  • 记录 L0/L1 检索质量

验收标准:

  • 每次 lookup_knowledge 调用写入一条 tool_invocation
  • retrieval_layer / l0_match_count 等字段正确
  • 异常场景 success=false

切片 9:测试

文件:

  • src/test/java/com/superbiz/agent/repository/DiagnosisSessionRepositoryTest.java
  • src/test/java/com/superbiz/agent/repository/AgentStepRepositoryTest.java
  • src/test/java/com/superbiz/agent/repository/ToolInvocationRepositoryTest.java

内容:

  • Repository 单元测试(CRUD + 自定义查询)
  • 集成测试需要运行环境(后续补充)

验收标准:

  • Repository 测试通过