优化: 波6待办销账(F-15阶段2手动上下文管理)+CR-50登记
This commit is contained in:
18
docs/待审查.md
18
docs/待审查.md
@@ -306,6 +306,24 @@
|
||||
- ⑧**F-15 零行为变化**:push/restore_from_messages/build_for_request/sanitize_messages 未改,仅新增方法 + is_compressing 字段(new/clear 初值 false)。
|
||||
- **待修项回流 todo**: **无**(本批为基础暴露 + UI 穿透,核心逻辑 grep+test 核验全 PASS,无阻断。阶段2 IPC 接入后另行登记)。
|
||||
|
||||
### CR-260616-50 波6 F-15阶段2 手动上下文管理(2 IPC+3事件+前端按钮+status渲染)(4194842) — 🟡 待审
|
||||
|
||||
- **范围**: 2 agent 并行 workflow w6o61cbqn,文件域隔离(后端独占 commands.rs/mod.rs/lib.rs;前端独占 api/ai.ts/useAiContext.ts(新)/useAiConversations.ts/stores/ai.ts/AiChat.vue/i18n×2)。零重叠。
|
||||
- **commit**: 4194842(单 commit,功能完整:后端 IPC 无前端无意义,配套提交)。
|
||||
- **主代核查(2026-06-17)**: cargo check --workspace EXIT 0(6 warning 全 pre-existing dead_code,PendingApproval/releases/node_executions)/ npx vue-tsc --noEmit EXIT 0(零输出)/ cargo test -p devflow --lib **79 passed**(无回归)/ grep 核验形态(lib.rs:122-123 注册 2 IPC + mod.rs:145/147/149 三事件变体 + commands.rs:397/457 两 IPC fn + 6 处 emit + 前端 useAiContext composable + AiChat.vue messageSegments 分组渲染)。
|
||||
- **审查 agent 待复审重点**:
|
||||
- ①**clear_context 不删 DB**:commands.rs:397 经 messages_mut() 标 status="archived_segment"(is_active 自动 false,sanitize step0 隔离),落库走 save_conversation(全量 upsert 非 clear_messages 删库)。
|
||||
- ②**compress LLM 失败不阻塞不 panic**:commands.rs:457 先取 active 克隆(读不改 status)→ compress_via_llm;LLM 失败 set_compressing(false)+ emit AiError(message 不含 api_key)+ 返 Err;消息状态不变(未调 compress_old_messages)。成功路径才 compress_old_messages 标 compressed + insert_at(0, summary system)。
|
||||
- ③**保护区最近 N 条 active 不动**:PROTECT_COUNT=6(commands.rs:413/465),protect_start = len.saturating_sub(6),clear/compress 只对 [0, protect_start) 操作。
|
||||
- ④**空会话/无 active 降级**:protect_start==0 → emit 对应事件 + Ok(())不报错;active_msgs 空 → AiCompressed(summary 空) + Ok。
|
||||
- ⑤**3 事件变体 serde**:mod.rs:145/147/149 AiContextCleared/AiCompressing/AiCompressed{summary},继承枚举级 #[serde(tag="type")] rename_all snake_case → 前端 type:"ai_context_cleared"/"ai_compressing"/"ai_compressed"。
|
||||
- ⑥**前端 useAiContext composable 闭环**:isCompressing ref 防重入 + 第二 listener 消费 ai_compressing/compressed/context_cleared/error 生命周期;compressContext IPC 受理仅表请求受理,真正完成由 ai_compressed 事件复位 isCompressing(异步闭环,非 IPC 同步等)。
|
||||
- ⑦**status 分组渲染**:AiChat.vue messageSegments computed 按 status 分组(archived_segment/compressed 连续合并折叠段),renderItems 扁平化供 v-for;折叠段点击 toggleSegment 展开,正常消息走 v-else 原渲染零改动。
|
||||
- ⑧**i18n 13 key ×2 禁字符**:aiChat.ts 新 key(clearContext/compressContext/clearContextConfirm/contextArchived/compressed/compressing/clearSuccess/compressSuccess/compressError/clearError/expand/collapse/compressedSummaryLabel)message 值无字面 `@`/`/`/裸`{}`(仅合法 `{n}`/`{msg}` 插值)。注意 archived 与侧栏冲突 → 重命名 contextArchived(vue-tsc TS1117 已修)。
|
||||
- ⑨**useAiConversations status 透传**:switchConversation mapper 透传 status 字段(archived_segment/compressed 落 AiMessage 供渲染折叠),types.ts 未含此字段经 cast 读写闭环。
|
||||
- **⚠️ 已知设计取舍(backend 自报,记审查项)**:clear_context 经 messages_mut() 改 status 后,ContextManager.history_tokens(私有字段无 setter)不立即扣减 archived 段 token(与 compress_old_messages 路径不同,compress 内部扣 token)。后果:history_tokens 短暂偏高,build_for_request 超预算裁剪可能比实际更早触发,属保守方向(不超发)不劣化安全性。代码注释已标注口径。
|
||||
- **待修项回流 todo**: **无**(功能完整,核心逻辑 grep+test+构建全 PASS;history_tokens 口径为已知取舍非 bug,阶段3 自动压缩如需可补 history_tokens setter)。
|
||||
|
||||
---
|
||||
|
||||
## 已审归档
|
||||
|
||||
Reference in New Issue
Block a user