- 审批卡尊重滚动意图,等长切换回底,排队超时按钮修活 - 带图编辑提示不静默丢,删除目标回写,切换文案消歧 - 会话键盘可达+搜索态重命名,筛选计数口径对齐 - 子任务提示正名,看板加载态 - 主题跟随系统,表单脏态拦截,密钥显隐留空提示
3.4 KiB
3.4 KiB
二期池第一批:子轨迹落库 + 来源标记(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(不可变列,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 断点续迁改造批(工作区未提交遗留)新增的两个测试从未跑绿:
v21_crash_midway_resumes_missing_convs:模拟 INSERT 3 占位符只绑 2 参数(seq 漏绑)+ 建表缺失 → 补 seq 参数 + execute_batch(V21_SQL) 前置v21_batch_boundary_crash_resumes_remaining_batch:建表缺失 → 同法修复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 查看会话跳转