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

7.3 KiB
Raw Blame History

DevFlow 待办

灵感模块功能完善(合并推进)

诊断发现的 P0-P2 问题合并为单次任务,逐项推进。
排除项:#3 status 无状态机(暂保留状态可跳跃迁移,不处理)。

P2 — 前端 / UX

  • #12 前端 filter 改后端查询 团队决策已落地:hot/pending 保留前端 filter(keyword/order_by 已下沉后端)。

AI 对话目标丢失(诊断待办)

诊断报告:docs/02-架构设计/专项设计/AI对话目标丢失诊断-2026-06-26.md 实测会话 54c8b5bd480 万 token原始目标消息被压缩出局LLM 尾部盲搜死循环。

  • 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 状态流转。
  • G2 探索熔断 代码已落地(STALL_BREAKER_ENABLED=trueSTALL_BREAKER_THRESHOLD=3)stall_count + is_empty_tool_result 完整实现。
  • 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 接入

  • A2 批量评估命令 ⏸️ 暂不做:单 idea 评估 evaluate_idea IPC 已接入(AdversarialEngine),批量评估当前无前端消费方,属过度设计。

最新对话分析-2026-06-28死锁与审批卡死

分析来源:devflow-trace.log + devflow-dev.db 最新对话 d9aef24f(语音输入应用需求)。 核心表现7 次工具连续失败后 L1 断路器熔断1 条 pending 审批导致全链路死锁。

P0 — 审批 pending 死锁

  • 审批超时自动取消 已实现(15min 默认,可配置):
    • 后端 agentic/approval_timeout.rs::cleanup_expired_approvalstry_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),前端定时器负责运行期会话内超时,后端负责重启恢复场景兼底。
  • create_project 自动创建目录 已实现(project.rs:137):有 path 且目录不存在时自动 create_dir_all,死锁链已消除(非参数控制,直接自动创建)。

P1 — Windows 平台兼容

  • run_command 失败追加 shell 适配提示 已实现(tool_registry.rs:2351-2358)Windows 下 tool result 尾部追加 PowerShell 适配提示(路径引用、&&;)。
  • PowerShell 反斜杠自动转义 已修复(tool_registry.rs:2306-2328 注释说明根因)serde_json 已正确还原反斜杠不做额外转义PowerShell 正确接受裸反斜杠路径。

P2 — 标题 LLM 失败

  • 标题摘要合并连续同 role 已实现(title.rs:79-83)merge_consecutive_roles 发 LLM 前合并相邻 user/assistant已覆盖 Anthropic/GLM 1214。

P3 — 其他

  • migration V33 已实现(migrations.rs migrate_v33)workflow_executionsupdated_at 列 + ai_conversationspending_approvals(审批重启恢复)。
  • L0-handshake 防抖 已实现(lib.rs:73-82)3s 内重复 ai-client-ready 跳过。

AI Chat 体验优化2026-07-03 批次)

本轮完成的 10 项需求中,8 项已落地,3 项暂缓待后续批次。

已完成

  • AI Chat 入口图标换 灯泡→星花 sparkles + 发光效果(AppSidebar.vue)
  • LLM 回复文字重叠防御 delta 重复检测+丢弃(useAiEvents.ts)
  • 全部接管仍审批 patch_file 全档位自动放行(approval.rs) + 诊断日志(audit/mod.rs)
  • 设置导入导出去除 SettingsImportExport.vue 已删,引用清理(Settings.vue/SettingsNav.vue)
  • 分离窗口默认置顶 alwaysOnTop: true(useAiWindow.ts)
  • 审批通知浮层 全局右上角浮层(ApprovalOverlay.vue + App.vue 挂载)
  • header 菜单聚合 ... 清空/压缩上下文收入 popout(TopBar.vue)
  • 置顶图标换 星→大头针 pushpin(TopBar.vue)
  • 全部批准无响应 防抖守卫 _batchProcessing(useAiApproval.ts)
  • 工具卡执行中卡死 乐观更新 status !== 'completed' 守卫(useAiApproval.ts)
  • 置顶状态刷新丢失 持久化到 appSettings KV(AiChat.vue)
  • 目标提取根本性改造 工具调用推理(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 已设计未实现
    • 覆盖场景:意图增强/纠偏/递进(用户补充信息后发现之前目标提取偏了)
    • 优先级:中——价值高改动小,补全目标维护闭环