关联 RFC / 架构
目标问题
Session 当前只能恢复线性消息、Plan、Todo 和 checkpoint,无法持久化 Workflow DAG、节点状态、Artifact、节点 transcript 和单调事件序列。没有独立领域模型,后续 Scheduler、节点恢复和 v5 协议会继续把状态堆入 runtime.Run 或 Session JSON 字段。
实现设计(How)
- 在 Session 持久化边界中新增 WorkflowRun、WorkflowNode、WorkflowArtifact、NodeMessage、ToolReceipt 和 WorkflowEvent 模型。
- 新增独立 SQLite 表,不把完整 DAG 塞进 sessions 单列。
- 使用 revision compare-and-swap 保证状态迁移唯一;Artifact 采用不可变插入模型。
- 状态迁移与事件 sequence 在同一事务提交,禁止事件先于状态或成功节点缺少 Artifact。
- 提供 Store 接口:CreateWorkflow、LoadWorkflowSnapshot、TransitionNode、AppendNodeMessages、CommitNodeSuccess、AppendToolReceipt、ListEventsAfter、FinalizeWorkflow。
- 旧 Session 没有 Workflow 数据时不伪造历史;下一次用户输入创建新 Workflow。
- 迁移期间允许现有 Run 被包装为单 Execute 节点,但不得双写两套 Workflow 真源。
影响模块:internal/session、SQLite migration、Runtime 装配接口和持久化文档。
边界与非目标:本阶段不实现 Router、Planner、Scheduler 或新 UI;不改变 Provider/Tool 协议;不删除旧 Run。
任务拆解
测试与验证(Done)
风险与回滚
- 风险:新增事务与现有 Session 更新发生锁竞争。通过短事务、索引和明确锁顺序控制。
- 风险:迁移失败破坏本地会话库。所有 DDL/DML 在迁移事务内执行并保留备份建议。
- 回滚:在正式写入 Workflow 数据前可回退二进制;新表不影响旧表读取。产生活动 Workflow 后只允许向前修复,不让旧二进制接管活动状态。
关联 RFC / 架构
目标问题
Session 当前只能恢复线性消息、Plan、Todo 和 checkpoint,无法持久化 Workflow DAG、节点状态、Artifact、节点 transcript 和单调事件序列。没有独立领域模型,后续 Scheduler、节点恢复和 v5 协议会继续把状态堆入
runtime.Run或 Session JSON 字段。实现设计(How)
影响模块:
internal/session、SQLite migration、Runtime 装配接口和持久化文档。边界与非目标:本阶段不实现 Router、Planner、Scheduler 或新 UI;不改变 Provider/Tool 协议;不删除旧 Run。
任务拆解
测试与验证(Done)
go test ./...通过,新增修改逻辑达到 100% 覆盖目标。风险与回滚