# 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` 已设计未实现
  - 覆盖场景:意图增强/纠偏/递进(用户补充信息后发现之前目标提取偏了)
  - 优先级:中——价值高改动小,补全目标维护闭环

