Files
DevFlow/todo.md
绝尘 0dfaeb0f5b 优化: AI Chat 体验全面升级(图标/审批/目标提取/窗口管理)
- AI 入口图标:灯泡→星花 sparkles+发光,与灵感入口区分
- 目标提取根本性改造:用户消息规则→工具调用推理(infer_goal_from_tool_calls)
  - Vec<String>→Vec<GoalEntry>(text+status),active→completed 状态流转
  - 多条/轮提取,system_prompt 仅注入 active 目标
  - 代码拆分到 helpers.rs(解决 brace 嵌套致 pub(crate) 不可见)
- 审批修复:patch_file 全档位自动放行,批量审批防抖,乐观更新竞态保护
- 审批通知浮层:全局右上角 ApprovalOverlay,窗口遮挡时可见
- 设置导入导出移除:价值低占用空间,跨设备同步建议复制 SQLite
- 分离窗口默认置顶+置顶状态持久化(刷新后保持)
- header 菜单聚合:清空/压缩上下文收入 ... popout
- LLM 文字重叠防御:delta 重复检测+丢弃
- 置顶图标:星→大头针 pushpin
- 文档/注释更新:过期 Vec<String>/chat.rs 提取描述修正
2026-07-03 13:07:03 +08:00

110 lines
7.3 KiB
Markdown
Raw Permalink 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.
# DevFlow 待办
## 灵感模块功能完善(合并推进)
> 诊断发现的 P0-P2 问题合并为单次任务,逐项推进。
> 排除项:#3 status 无状态机(暂保留状态可跳跃迁移,不处理)。
### P2 — 前端 / UX
- [x] **#12 前端 filter 改后端查询** ✅ 团队决策已落地:`hot`/`pending` 保留前端 filter(keyword/order_by 已下沉后端)。
## AI 对话目标丢失(诊断待办)
> 诊断报告:`docs/02-架构设计/专项设计/AI对话目标丢失诊断-2026-06-26.md`
> 实测会话 `54c8b5bd`480 万 token原始目标消息被压缩出局LLM 尾部盲搜死循环。
- [x] **G1 目标钉扎** ✅ 代码已落地(`GOAL_PIN_ENABLED=true`)pinned_goals 入口拼入 system_prompt。`PerConvState.pinned_goals: Vec<GoalEntry>`(含 text+status 状态追踪)。
- 2026-07-03 改:提取方式从「用户消息规则提取」→「工具调用推理」(infer_goal_from_tool_calls),支持多条/轮 + 自动 active→completed 状态流转。
- [x] **G2 探索熔断** ✅ 代码已落地(`STALL_BREAKER_ENABLED=true``STALL_BREAKER_THRESHOLD=3`)stall_count + is_empty_tool_result 完整实现。
- [x] **G4 话题标记修正** ✅ 代码已落地(`TOPIC_MARKER_GOAL_AWARE=true`)pinned_goals 非空时 take 后丢弃跳过 insert。
> 落地开关(均可单点回退):`GOAL_PIN_ENABLED`/`GOAL_INJECT_BANNER`/`GOAL_MAX_CHARS=500`/`MAX_GOALS=5`/`STALL_BREAKER_ENABLED`/`STALL_BREAKER_THRESHOLD=3`/`STALL_BREAKER_WARN_FIRST`/`STALL_BREAKER_GOAL_REMIND`/`TOPIC_MARKER_GOAL_AWARE`。全置 false 等价改动前。
> 方案源:设计 workflow `wf_09a0385f-2ee` 综合裁决(system_prompt 字符串注入 > insert_at(0))。
## 对抗式评估接入(引擎已实现 → IPC + 前端打通)
> 引擎代码已就绪(`df-ideas/src/adversarial.rs` + `adversarial_helpers.rs`
> 但 IPC 层和前端零引用,用户无法使用。需补接入层。
### 后端 — IPC 接入
- [x] **A2 批量评估命令** ⏸️ **暂不做**:单 idea 评估 `evaluate_idea` IPC 已接入(AdversarialEngine),批量评估当前无前端消费方,属过度设计。
## 最新对话分析-2026-06-28死锁与审批卡死
> 分析来源:`devflow-trace.log` + `devflow-dev.db` 最新对话 `d9aef24f`(语音输入应用需求)。
> 核心表现7 次工具连续失败后 L1 断路器熔断1 条 pending 审批导致全链路死锁。
### P0 — 审批 pending 死锁
- [x] **审批超时自动取消** ✅ 已实现(15min 默认,可配置):
- 后端 `agentic/approval_timeout.rs::cleanup_expired_approvals``try_continue_agent_loop` 入口检测超时,超时审批自动取消 + emit AiApprovalResult + audit_finalize 记入审计。
- `PendingApproval.created_at` 记录创建时刻(SystemTime,重启恢复的按重启时刻计)。
- `AppState.approval_timeout_minutes` + `reload_approval_timeout()` 从 Settings KV `df-approval-timeout` 启动恢复(与前端 AdvancedSection.vue 同 key,值为毫秒)。
- IPC `ai_get_approval_timeout` / `ai_set_approval_timeout`(0=禁用,范围 0-1440 分钟)。
- 前端已有 Settings UI(0/5/15/30/60 分钟 select),前端定时器负责运行期会话内超时,后端负责重启恢复场景兼底。
- [x] **`create_project` 自动创建目录** ✅ 已实现(`project.rs:137`):有 path 且目录不存在时自动 `create_dir_all`,死锁链已消除(非参数控制,直接自动创建)。
### P1 — Windows 平台兼容
- [x] **`run_command` 失败追加 shell 适配提示** ✅ 已实现(`tool_registry.rs:2351-2358`)Windows 下 tool result 尾部追加 PowerShell 适配提示(路径引用、`&&``;`)。
- [x] **PowerShell 反斜杠自动转义** ✅ 已修复(`tool_registry.rs:2306-2328` 注释说明根因)serde_json 已正确还原反斜杠不做额外转义PowerShell 正确接受裸反斜杠路径。
### P2 — 标题 LLM 失败
- [x] **标题摘要合并连续同 role** ✅ 已实现(`title.rs:79-83`)`merge_consecutive_roles` 发 LLM 前合并相邻 user/assistant已覆盖 Anthropic/GLM 1214。
### P3 — 其他
- [x] **migration V33** ✅ 已实现(`migrations.rs` migrate_v33)`workflow_executions``updated_at` 列 + `ai_conversations``pending_approvals`(审批重启恢复)。
- [x] **L0-handshake 防抖** ✅ 已实现(`lib.rs:73-82`)3s 内重复 `ai-client-ready` 跳过。
## AI Chat 体验优化2026-07-03 批次)
> 本轮完成的 10 项需求中,8 项已落地,3 项暂缓待后续批次。
### 已完成
- [x] **AI Chat 入口图标换** ✅ 灯泡→星花 sparkles + 发光效果(`AppSidebar.vue`)
- [x] **LLM 回复文字重叠防御** ✅ delta 重复检测+丢弃(`useAiEvents.ts`)
- [x] **全部接管仍审批** ✅ patch_file 全档位自动放行(`approval.rs`) + 诊断日志(`audit/mod.rs`)
- [x] **设置导入导出去除**`SettingsImportExport.vue` 已删,引用清理(`Settings.vue`/`SettingsNav.vue`)
- [x] **分离窗口默认置顶**`alwaysOnTop: true`(`useAiWindow.ts`)
- [x] **审批通知浮层** ✅ 全局右上角浮层(`ApprovalOverlay.vue` + `App.vue` 挂载)
- [x] **header 菜单聚合 `...`** ✅ 清空/压缩上下文收入 popout(`TopBar.vue`)
- [x] **置顶图标换** ✅ 星→大头针 pushpin(`TopBar.vue`)
- [x] **全部批准无响应** ✅ 防抖守卫 `_batchProcessing`(`useAiApproval.ts`)
- [x] **工具卡执行中卡死** ✅ 乐观更新 `status !== 'completed'` 守卫(`useAiApproval.ts`)
- [x] **置顶状态刷新丢失** ✅ 持久化到 appSettings KV(`AiChat.vue`)
- [x] **目标提取根本性改造** ✅ 工具调用推理(`infer_goal_from_tool_calls` in `helpers.rs`)
- 提取源:用户消息规则 → **工具调用推理**(结构化数据,零污染)
- 数据结构:`Vec<String>`**`Vec<GoalEntry>`**(text+status)
- 状态流转:新目标加入 → 之前 active 自动标记 completed
- system_prompt 仅注入 active 目标
- 前端显示 3/5 计数 + ✓/● 状态标记
- 代码拆分到 `helpers.rs`(解决 brace 嵌套致 pub(crate) 不可见)
### 暂缓待后续批次
- [ ] **9b 审批交互 UI/UX 重新设计** ⏸️
- 当前:审批卡片是 ToolCard 的 pending_approval 态,布局单调、args 展示过长、风险等级不直观
- 待做:重新设计卡片布局(缩短 args 预览 + 展开/收起、风险等级着色条、审批耗时提示、批量操作栏视觉增强)
- 涉及:`ToolCard.vue`(~360 行) + `ToolCardList.vue` 少量调整
- 优先级:中——现有功能可用但体验不够好
- [ ] **9d 底部工具区(目标/历史/上下文)展开交互优化** ⏸️
- 当前:底部 🎯📋📄 三个入口紧凑排列,展开后内容区窄、超出不滚动、缺少动画
- 待做:popover 浮层替代内联展开、加入平滑过渡动画、内容超出滚动、点击外部收起
- 涉及:`TopBar.vue` 底部区
- 优先级:低——功能完整,体验改善不迫切
- [ ] **`[UPDATE_GOALS]` LLM 主动修正目标列表** ⏸️
- 设计已完成,实现暂缓
- 格式:`[UPDATE_GOALS]\n1: 目标文本 (active)\n2: 目标文本 (completed)\n[END]`
- LLM 输出此标记 → 后端解析并替换 pinned_goals → 标记从正文剥离
- 函数签名 `extract_update_goals_block` 已设计未实现
- 覆盖场景:意图增强/纠偏/递进(用户补充信息后发现之前目标提取偏了)
- 优先级:中——价值高改动小,补全目标维护闭环