diff --git a/docs/todo.md b/docs/todo.md index 824ca4e..515c991 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -30,6 +30,27 @@ - [x] B-260614-02 — ~~df-workflow ConditionEngine 默认 true~~ ✅ mission:T-260614-02 已修复(conditions.rs:31 `Ok(true)`→`Ok(false)` 保守拒绝;5 个原断言错误行为的测试同步改断言;df-workflow 7 test pass)(06-14) - [x] B-260614-04 — ~~df-workflow NodeRegistry::default() script 工厂 unimplemented!~~ ✅ mission:T-260614-03 已修复(删除整个 Default impl——零调用方 + 违反铁律;state.rs build_registry 已用 new() + 手动注册真实 ScriptNode)(06-14) +### 🔴 aichat 审查报告待修项(来源:[aichat-review-2026-06-14.md](./02-架构设计/aichat-review-2026-06-14.md) 第八章) + +> 2026-06-14 aichat 模块代码审查产出,原仅留 memory 指针未回流看板,今补入。去重:**S-02 审批可见性 ⊂ AR-3**(修 AR-3 卡片可读性直接缓解"看不到审批批什么");**B-05 detach = AR-M5 同类**(跨窗口 state 隔离,aichat 审查描述更深)。 + +**P0(用户可感硬伤)** +- [ ] AR-1 流式 Markdown 全量重解析(renderMd 缓存 key=完整文本,每 delta 全量 marked.parse+sanitize,长回复主线程阻塞掉帧)— AiChat.vue:343-354 — ⚠️复杂,需先设计增量渲染/流式纯文本态+rAF +- [ ] AR-2 审批态新建对话永久卡死(ai_conversation_create 缺 generating 守卫,直接 clear session,审批返回 Err→generating 永不复位→面板卡死需重启)— commands.rs:362-375 +- [ ] AR-3 审批卡片不可读(后端 reason 两句固定模板不含对象名 + 前端 id/project_id 裸值 + resultSummary 缺 delete/restore/purge 分支)— audit.rs:179-182 + ToolCard.vue:149-169,272-288 +- [ ] AR-4 create_project 双审双 API(AI schema 仅 name/description 缺 path/stack,比 IPC 接口窄触发二次确认)— tool_registry.rs:148 + +**P1** +- [ ] AR-5 审批态 stop 无本地兜底(stopChat 只 await 不复位 streaming,AiCompleted 竞态丢失则卡死)— useAiSend.ts:111-113 +- [ ] AR-6 Low 工具失败语义冲突(emit AiError 置 streaming=false 但 agentic loop 续跑,残留文本 flush 又"完成",状态紊乱)— audit.rs + agentic.rs:195 +- [ ] AR-7 clean 无 UI 入口(后端 ai_chat_clear 有但零组件调用 + 只清内存不删 DB)— AiChat.vue + useAiPanel.ts:89-96 + +**P2** +- [ ] AR-8 delta 节流+滚动(后端无 50ms 合批/前端无 rAF,叠加 AR-1 掉帧)— stream_recv.rs + AiChat.vue:625-633 +- [ ] AR-9 friendlyError 硬编码中文绕 i18n(en 用户见中文)— useAiEvents.ts:42-48 +- [ ] AR-10「想法→灵感」迁移残留(aiTool.ts/ideas.ts/projectDetail.ts/idea.rs 大量"想法"文案)— 跨前后端 — 详见 [审查第六章](./02-架构设计/aichat-review-2026-06-14.md) +- [ ] AR-11 数据变更联动刷新(推荐方案A 后端 emit + store 监听)— 跨层 — 详见 [审查第五章](./02-架构设计/aichat-review-2026-06-14.md) + ### ✅ 已完成 — df-workflow 审批闭环(Workflow D, commit 22964a2) - [x] B-260614-06 — ~~execution_id 硬编码 "dummy-execution-id"~~ ✅ DagExecutor::new 接收 execution_id 下沉 NodeContext(workflow.rs 传真 ID)(06-14) @@ -56,11 +77,11 @@ ### 待澄清 / A-B 待定 - [ ] S-260614-01 — 「显示多开」需求待澄清 — 用户报"设置勾选显示多开但 AiChat 未显示",全 src grep 零命中,疑似旧版本/指分离窗口/想新增开关,待用户截图确认 (06-14) -- [ ] S-260614-02 — 审批可见性 A/B 待定 — B-01 修复后 pending_approvals 内存态不再被 switch 清空,前端 `ai_pending_tool_calls` 查询有数据,但 `state.pendingApprovals` 在 AiChat.vue 是否有兜底渲染仍需实测确认。A. 加兜底渲染 / B. 实测 tc 卡片是否渲染 (06-14) +- [ ] S-260614-02 — 审批可见性 A/B 待定 — B-01 修复后 pending_approvals 内存态不再被 switch 清空,前端 `ai_pending_tool_calls` 查询有数据,但 `state.pendingApprovals` 在 AiChat.vue 是否有兜底渲染仍需实测确认。A. 加兜底渲染 / B. 实测 tc 卡片是否渲染 — **去重**:与 AR-3 审批卡片可读化重叠,AR-3 修完(reason 拼对象名 + id 特化 + 卡片完整)后改实测重评 (06-14) ### P2 — 不阻断缺陷 / 增强 -- [ ] B-260614-05 — **[P2→降级]** 分离窗口(detached)跨窗口状态 — **核对修正**:reattachPanel 已接线(不再死代码)+ `tauri://destroyed` 监听已复位状态,"detached 永真卡死"已修复;剩余 localStorage `df-ai-gen`/`df-ai-text` 是 Sprint 19 **有意保留**(流式临时快照高频写),非 bug。仅在出现新场景失效时再评估改全局 emit/listen — source:代码审查 + Sprint 19 (06-14) +- [ ] B-260614-05 — **[P2→降级]** 分离窗口(detached)跨窗口状态 — **核对修正**:reattachPanel 已接线(不再死代码)+ `tauri://destroyed` 监听已复位状态,"detached 永真卡死"已修复;剩余 localStorage `df-ai-gen`/`df-ai-text` 是 Sprint 19 **有意保留**(流式临时快照高频写),非 bug。仅在出现新场景失效时再评估改全局 emit/listen — **去重**:与 AR-M5(跨窗口 state 完全隔离)同类,aichat 审查描述更深 — source:代码审查 + Sprint 19 (06-14) - [x] T-260614-03 — ~~工具层白名单与 crud 白名单双份去重~~ ✅ WF-B ⑤ 已解决(tool_registry update_project 复用 is_allowed_column,与 CRUD 白名单同源,删硬编码 match)(06-14) - [ ] F-260614-02 — 技能联想「使用」 — 首批 3 类联想已做,联想后实际触发/执行技能未实现 (06-14) - [ ] F-260614-03 — **[需设计]** 灵感对抗评估接 LLM — 核对 adversarial.rs:`evaluate()` 纯启发式,接 LLM 需改签名注入 provider。3 种注入方式待定:A.trait 解耦(df-ideas 定义 IdeaAnalyzer trait,推荐)/ B.df-ideas 直接依赖 df-ai / C.closure。属架构决策非直接做 (06-14)