Files
DevFlow/todo.md
绝尘 b923d700fd 新增: 审批超时后端兜底,覆盖重启恢复场景
前端早已有审批超时定时器(AdvancedSection.vue 0/5/15/30/60 分钟
可配置),负责会话内运行的审批超时检测。但重启后前端定时器丢失,
恢复的 pending_approvals(经 audit/restore.rs 从 DB 重建)无人
计时,会永久卡死会话。

本次补充后端兜底机制:
- PendingApproval 新增 created_at 字段(SystemTime),记录创建时刻
- 新增 agentic/approval_timeout.rs,在 try_continue_agent_loop
  入口检测超时,自动取消并写入审计(rejected)
- AppState 新增 approval_timeout_minutes 字段 + 启动从 KV 恢复
- IPC 新增 ai_get_approval_timeout / ai_set_approval_timeout
- KV 复用前端 df-approval-timeout key(值为毫秒),保持单一真相源

同时更新 todo.md / 待决策.md,把已实现项标记为完成。
2026-06-28 18:16:34 +08:00

4.2 KiB
Raw Blame History

DevFlow 待办

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

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

P2 — 前端 / UX

  • [~] #12 前端 filter 改后端查询hotscore≥80pending(多状态 OR仍保留前端 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<String> + chat.rs 三处提取(追加去重,支持累积多目标)。
  • 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 批量评估命令evaluate_ideas_batch,遍历多个 idea 调同一 engine 实例(复用 provider 连接)。 待定

最新对话分析-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 跳过。