Files
DevFlow/temp/二期池第一批-子轨迹落库-进度.md
T
lxy 36bc485112 优化: 界面交互完善与设置体验
- 审批卡尊重滚动意图,等长切换回底,排队超时按钮修活
- 带图编辑提示不静默丢,删除目标回写,切换文案消歧
- 会话键盘可达+搜索态重命名,筛选计数口径对齐
- 子任务提示正名,看板加载态
- 主题跟随系统,表单脏态拦截,密钥显隐留空提示
2026-10-03 16:27:48 +08:00

47 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 二期池第一批:子轨迹落库 + 来源标记(2026-10-03)
> 指令源:「已确定的 自主推进」。改动已完成并全量验证,**未提交**(攒批等用户令)。
## 目标
子代理轨迹从「纯内存零落库、会话结束即蒸发」改为「出口整轨迹落库」,origin=sub_agent
标记使桌面侧栏/miniapp 列表过滤子会话——轨迹可追溯(调试金矿 + 后续轨迹树/TaskDrawer
跳转的数据地基),不污染主会话列表。
## 已完成(全部验证通过)
| 项 | 文件 | 内容 |
|---|---|---|
| V44 迁移 | crates/df-storage/src/migrations.rs | ai_conversations 加 origin TEXT 列(column_exists 幂等守卫,同 V42 模式),steps 43→44,三处版本号断言同步 |
| record 字段 | crates/df-storage/src/models.rs | AiConversationRecord.origin: Option<String>(不可变列,UPDATE 不写) |
| 落库链路 | crates/df-storage/src/crud/conversation_repo.rs | from_row 读 origin(unwrap_or(None) 兜底,同 message_id v21 模式)+ INSERT 加列 |
| 会话内存标记 | src-tauri .../ai/mod.rs | AiSession.conv_origins: HashMap<String,String>(与 deleted_convs 对称:init 写入、出口清理回收) |
| save 透传 | src-tauri .../ai/conversation.rs | save 快照 lock 段取 conv_origin → record 构建落 origin(主会话恒 None) |
| 列表过滤×2 | src-tauri .../commands/conversation.rs + remote_bridge.rs | 桌面侧栏 ai_conversation_list 与 miniapp list_conversations 同口径过滤 origin 非空 |
| 出口落库 | src-tauri .../agentic/sub_agent.rs | 统一出口 run_sub_agent_loop:判活(deleted_convs 未重打 且 per_conv 在)→ 摘拦截 → save_conversation 整轨迹持久化 → per_conv/save_locks/conv_origins 三清;启动时 conv_origins 与 deleted_convs 对称写入;模块头文档重写为新语义 |
## 验证证据
- cargo test -p df-storage:**182+12 全绿**(含 V44 全链幂等两遍测试)
- cargo check --workspace:0 error(2 个 warning 为工作区遗留改动自带:Emitter 未用导入、evaluate_ideas_batch 死代码,非本批)
- cargo test -p devflow --lib:**624 过 0 失败**
## 顺手修的遗留半成品(同文件明确 bug,主动修原则)
v21 断点续迁改造批(工作区未提交遗留)新增的两个测试从未跑绿:
1. `v21_crash_midway_resumes_missing_convs`:模拟 INSERT 3 占位符只绑 2 参数(seq 漏绑)+ 建表缺失 → 补 seq 参数 + execute_batch(V21_SQL) 前置
2. `v21_batch_boundary_crash_resumes_remaining_batch`:建表缺失 → 同法修复
3. `test_full_migration_on_fresh_db`:版本号断言写死 43 → 44
## 设计要点(为何这样落)
- **零新破坏性**:运行期仍零落库(deleted_convs 拦截不动),只改出口一次落库;主会话链路只多一次 HashMap get
- **防空壳复活**:出口判活查两处(级联删除会重打 deleted_convs / 父删除会清 per_conv),任一命中放弃落库
- **过滤双口径**:桌面 + miniapp 两处列表同 filter,前端零改动
- Truncated/Failed 轨迹同样落库(调试价值);usage/model 落 None(宁少,轨迹树批再补)
## 待办(等用户令)
- [ ] 提交(攒批授权)→ push → 换装(一字令)
- [ ] 后续批:AiAgentFinished 前端展示(前端零消费已确认)→ 子代理审批挂起 → 轨迹调用树 → TaskDrawer 查看会话跳转