Files
DevFlow/docs/07-项目管理/待决策归档/2026-06.md
绝尘 5c539fe764 修复: 前端 TS 阻断 + G1/G2 单测 + 归档已完成项
- 修复 vue-tsc 3 阻断: i18n 重复 err key 删除 + store 补 relateIdeas
- G1: extract_pinned_goal 单测 10 条(mention剥离/截断/空输入/全角冒号)
- G2: is_empty_tool_result 单测 11 条(JSON标记/中文/英文/非空判定)
- 归档: todo.md/docs/todo.md/待决策.md/待审查.md 已完成项迁入归档
2026-06-27 22:35:37 +08:00

36 KiB
Raw Blame History

待决策归档(历史已决)

待决策.md 拆出的已决策 / 已实施 / 已排期 / 已解决历史项。 决策点已闭合,实施进度见 todo.md

创建:2026-06-17 | 维护:待决策.md 当前队列项拍板后迁入对应月份文件(本文件承载 2026-06)。


③类 — 产品取舍(已决)

CR-13-O1 in_progress 模板失败退回语义

  • 背景:in_progress 模板失败→regression_target("in_progress")=Some("todo"),但状态机 backward_to_todo_rejected 全拒(task_state_machine.rs:188-193)→回调 advance_task_atomic 被 InvalidState 拦截,任务原地保留 in_progress。
  • 决策点:in_progress 执行失败应如何退回?
  • 选项:
    • a: 接受现状(原地 in_progress)+ 补 UI 提示「执行失败,请手动处理」
    • b: 改 regression_target("in_progress")=None 对齐状态机(失败不自动退回,留 in_progress 等人介入)
    • c: 放开 todo 回退(破坏闸门,执行失败可回 todo 重来)
  • 推荐:b(对齐状态机现状,失败留 in_progress 显式待人介入,不破坏闸门语义)
  • 关联:todo CR-13-O1 / CR-260616-13
  • 状态: 已决(2026-06-16)— 决策:b。对齐状态机,失败留 in_progress 等人介入,blocked 状态已提供合法通道。

DEC-260616-03 CR-04/CR-06 流式核心改造授权

  • 背景:splitBlocks 手写正则切块(CR-04,行中裸 ```/4+ backtick 嵌套切错)+ loadMarkdown 重算(CR-06)是流式渲染核心改造,中风险(回归可能)。
  • 决策点:是否授权推进流式核心改造?
  • 选项:
    • a: ①授权巡检推进(主代理重点核查流式渲染/审批/输入不破坏)
    • b: ②单独立项谨慎做(不混巡检快推,独立验证)
    • c: ③暂不碰(保留自研块级 memo 现状)
  • 推荐:a ①(自研 memo 已稳,CR-04/06 是增强非阻断,授权巡检推进+重点核查)
  • 关联:todo DEC-260616-03 / CR-260615-04
  • 状态: 已决(2026-06-16)— 决策:a。授权巡检推进,自研 memo 已稳,CR-04/06 是增强非阻断。

CR-260615-04 splitBlocks→marked.lexer

  • 背景:splitBlocks 手写正则 /```[^\n]*\n[\s\S]*?(?:```|$)/g 不要求行首+固定 3 backtick,与 marked 围栏规则不一致;行中裸 ```/4+ backtick 嵌套围栏切错,前块缓存固化错误 html。
  • 决策点:是否改用 marked.lexer 原生切块?(依赖 DEC-260616-03 授权)
  • 选项:
    • a: 改 marked.lexer(机制2原生,根治切错)
    • b: 补正则边界(治标,维护成本)
    • c: 不改(现状可接受,极端输入才触发)
  • 推荐:a(根治,依赖 DEC-03 授权)
  • 关联:todo CR-260615-04 / DEC-260616-03
  • 状态: 已决(2026-06-16)— 决策:a 改 marked.lexer。DEC-260616-03 已决a 授权推进,batch57 workflow(w4h5ygko1) Agent B 已实施 AiChat.vue splitBlocks 改 marked.lexer(tokenize),vue-tsc 0err + cargo check 0 err。todo CR-260615-04 同步销账。

F-260616-06 审批「未找到挂起的审批」体验

  • 背景:pending_approvals 内存态(commands.rs:130 remove None 报错)与前端刷新/重复点击不同步;重试场景旧 id 已被处理;前端 useAiSend.ts:221 IPC 失败不回滚 pendingApprovals,按钮残留。
  • 决策点:修法组合选哪些?
  • 选项:
    • a: 后端 ai_approve 幂等(找不到 pending 查审计表,已 executed/rejected 返回「已处理」成功非报错)
    • b: 前端审批按钮防抖(同一 id 短期多次只发一次 IPC)
    • c: 前端刷新后 pending 态正确同步(核对 useAiConversations.ts:119 边界)
  • 推荐:a + b(后端幂等治本 + 前端防抖治标,c 已部分由现有恢复逻辑覆盖)
  • 关联:todo F-260616-06
  • 状态: 已决(2026-06-16)— 决策:a + b。先 b 前端防抖止血(5 分钟改动),后 a 后端幂等治本。子决策:实施顺序=A(先 b 防抖,后 a 幂等)

F-260616-07 流式对话失败自动重试

  • 背景:流式 stream_llm 零重试(agentic.rs:231-238 返回 None 直接放弃);df-ai retry.rs 只覆盖非流式 complete();手工重试已存在(错误气泡「重试」按钮)。
  • 决策点(4 个子决策):
    • (a) 流中途失败如何重试:a1 只重试流前失败(简单稳妥)/ a2 流中途失败截断已流文本重请求(复杂)
    • (b) 重试计数器粒度:每条消息预算 N 次(倾向)/ 每轮独立
    • (c) 退避策略:复用 retry.rs(1s→2s→4s 倾向)/ 用户可配
    • (d) 重试期 UI:错误气泡内「重试 n/m」(倾向)/ 独立 toast
  • 推荐:a1 + 每条消息预算 + 复用 retry.rs 退避 + 错误气泡内更新
  • 关联:todo F-260616-07
  • 状态: 已决(2026-06-16)— 决策:a1 + 每条消息预算3次 + 复用 retry.rs 退避 + 错误气泡内更新。流前失败重试,不碰流中途。子决策:不加 Settings UI,硬编码默认 3 次(A)

F-260616-08 AI 数据获取工具突破 50 条上限

  • 背景:MAX_LIST_RESULTS=50 硬覆盖 6 工具(list_projects/tasks/ideas/trash/search_files/read_file 搜索),配套只给 has_more/truncated 提示无 offset 翻页;knowledge_search min(3) 钳死。
  • 决策点(4 子):
    • (a) 翻页范围:全量工具补 offset(对齐 read_file 统一)/ 仅 hot 工具(list_tasks/search_files)
    • (b) 翻页 limit 默认:沿用 50 / 提到 100-200
    • (c) knowledge_search 上限:20 / 50
    • (d) 是否加 get_count/list_all 探总量工具
  • 推荐:原推荐不加探总量;用户决策:需加 get_count/list_all 探总量工具(AI 需知总量做分页策略,has_more 仅告知"还有"不知多少)
  • 关联:todo F-260616-08
  • 状态: 已决(2026-06-16)— 决策:全量 offset + 沿用 50 + knowledge 20 + 加探总量工具(get_count/list_all)。用户要求 AI 具备探总量能力。

F-260616-09 AiSession 单例→多会话并发架构

  • 背景:用户需求(3 条消息强化):「应用级支持同时具备多会话」+「多个会话窗口来回切,并行执行」。现状 AiSession 应用级单例(state.rs:164 ai_session: Arc<Mutex<AiSession>>),messages/generating/stop_flag/pending_approvals 全一份;同一时刻只一个对话能跑。残留 bug:新建会话上下文残留(前端 newConversation 漏清 queue/generatingConvId/agentRound;后端 ai_conversation_create 漏清 agent_language/stop_flag)。
  • 决策点(5 个子决策):
    • (a) 推进路径:A 先做隔离修复(补漏清字段维持单例,解残留,低风险) vs 直接 B 架构升级 — 倾向 A 先(残留真 bug 立即解,B 另立项)
    • (b) B 多会话形态:AiSession 整体 HashMap<conv_id, SessionState> vs 仅拆 generating/stop_flag per-conv(messages/pending 已可按 conv reload) — 倾向后者(侵入小)
    • (c) B 并发上限:复用 llm_concurrency.global 限并发会话数防 token 暴增 vs 无上限 — 倾向复用限并发
    • (d) 多窗口 UI 形态:(d1) 单面板侧栏会话列表切换+后台并行(改动小) vs (d2) 每会话独立 Tauri 窗口(useAiWindow.ts detached 已有基础可扩,改动大但「窗口来回切」语义最贴) — 待用户定,倾向先 d1 后 d2
    • (e) 旧 loop 切换处理:不退出各自跑完(真并发) vs 仍退出 — 倾向不退出真并发
  • 选项:
    • a: A 先做隔离修复(B 前置,解残留) + B 立项排期(UI 待用户定 d1/d2)
    • b: 直接 B 架构升级(一步到位,大改+高风险)
    • c: 仅 A 隔离修复(满足"切会话不残留",并行执行缓做)
  • 推荐:a(A 先解燃眉真 bug,B 按架构演进另立项;UI 形态 d 待用户拍板再定 B 的工作量)
  • 关联:todo F-260616-09 / memory aichat-arch-extensibility(AiSession 单例未动架构债)
  • 状态: 已决(2026-06-16)— 决策:a(A 先隔离修复 + B 立项)。UI 形态:d1+d2 都做——侧边栏可切换,也可多窗口打开。先 d1(侧栏切换+后台并行),再 d2(独立 Tauri 窗口,detached 已有基础)。🔥 用户要求(2026-06-16):B 阶段架构升级提升为高优先级,尽快实施。

F-260615-14 AiChat 气泡截图拷贝

  • 背景:截图拷贝(气泡 DOM→图片→剪贴板)需加依赖 html2canvas(~90KB)或 dom-to-image-more(~3KB)。
  • 决策点:选型?
  • 选项:
    • a: html2canvas(~90KB,CSS 支持有限但社区成熟)
    • b: dom-to-image-more(~3KB,轻量,CSS 支持更弱)
    • c: 不做(文本拷贝 F-13 已够,截图 ROI 低)
  • 推荐:b(做减法,3KB 轻量,气泡样式简单风险低)或 c(等用户反馈需求强度)
  • 关联:todo F-260615-14
  • 状态: 已决(2026-06-16)— 决策:c 不做。文本拷贝+代码块复制已覆盖核心需求,等用户真实反馈再定。

F-260616-11 审批续跑 iteration 计数策略

  • 背景:try_continue_agent_loop 审批后续跑 iteration 从 0 重计(agentic.rs:418 注释,F-260616-03 续跑决策 a 延伸),多次审批(Med/High 工具)=反复重跑 max_iterations 轮,token 消耗不受 max_iterations 严格控制。
  • 决策点:iteration 累计 vs 重置?
  • 选项:
    • a: 累计计数(try_continue 不重置 iteration,跨审批续跑延续累计)
    • b: 重置 + 独立「审批次数」配额
    • c: token 总量兜底(不碰 iteration,加 token 硬上限)
  • 推荐:a + c(累计防超配 + token 兜底)
  • 关联:todo F-260616-11 / F-260616-03
  • 状态: 已决(2026-06-16)— 决策:a。累计计数,try_continue 不重置 iteration 跨审批累计,防多次审批 token 失控。token 兜底 c 暂不加(避免过度设计,iteration 累计已控)。实施待 batch60 完成(agentic.rs 锁释放)。

F-260616-07b AiNode 自审闸门 — 自审对象来源(架构决策)

  • 背景:推进链阶段3 AiNode 自审闸门,AiNode 自审拓扑(testing 模板 ai_self_review→human_review)+ AiNode 通用执行(ai_node.rs:116-164)已就绪,缺口:run_workflow 不注入 ai 节点 config(workflow.rs:84-115 dag 选模板后直接 build_dag 执行,无 config 注入步骤)+ 自审对象无来源。核心瓶颈:推进链每次 run_workflow 独立执行,executor.rs 内存跑 DAG(outputs HashMap :94/:145)产出不持久化(node_executions 表 executor 不写,state.rs:150 NodeExecutionRepo dead_code 印证),TaskRecord(models.rs:53-56)无产出字段,NodeContext(node.rs:13-26)无 task 数据。ai_self_review(testing 模板 in_review→testing)自审什么无来源——ai_execute(in_progress 模板)产出跨执行不传。
  • 决策点:ai_self_review 自审对象来源?
  • 选项:
    • a: TaskRecord 加 output_json 产出字段(ai_execute 写 / ai_self_review 读 / human_review 展示)+ run_workflow 注入 task 数据到 NodeContext + 自审 prompt 模板(需求符合度+产出完整性,产出 通过/不通过+理由+建议)。task 中心,最直接解锁自审闭环,human_review 读产出展示给人核受益。
    • b: ai_self_review 自审 task.title+description(任务定义)。无需改数据模型,但语义弱(自审任务定义非产出,意义存疑)。
    • c: 补 executor 写 node_executions(output_json)+ ai_self_review 跨执行读 task 最近 ai_execute 产出。通用(任何节点产出可查),但 executor 改动+跨执行查 task_id 关联。
    • d: 等 git 集成(阶段4 F-260616-08 暂缓),自审代码改动 diff。最贴切(自审代码)但阻塞于阶段4。
  • 推荐:a(task 中心,最直接解锁自审闭环+人核,数据模型变更小:TaskRecord 加 output_json+迁移+run_workflow 注入 task 到 NodeContext+自审 prompt 模板,中等工作量)。c 通用但 executor 改动大,b 语义弱,d 阻塞阶段4。
  • 关联:todo F-260616-07 阶段3(AiNode 自审 子条) / task_workflow_templates.rs:57-72(testing 模板) / ai_node.rs(AiNode 通用执行) / memory aichat-arch-extensibility(AiNode 空壳架构债)
  • 状态: 已决(2026-06-16)— 决策:a。TaskRecord 加 output_json 产出字段,ai_execute 写 / ai_self_review 读 / human_review 展示。task 中心,产出跟着 task 走,跨工作流执行可传递。阶段1迁移+方案(539b5ed+25409e5) 阶段2②③④⑤(c10adaf ai 侧 + 741b0b9 前端),⑥联调阻塞 P0 provider 注入见 F-260616-07c

F-260616-07c AiNode provider 注入安全(FR-S1 api_key 下沉)

  • 背景:AiNode 自审闭环②③④⑤已实施(c10adaf+741b0b9),provider 配置注入阻塞⑥联调。根因:secret 解析(ensure_resolved_key)在 src-tauri/commands/ai/secret.rs(app crate),df-nodes 不可依赖 src-tauri(单向 app→df-nodes),AiNode/AiSelfReviewNode 只能从 config 读明文 api_key,违背 FR-S1 mask 设计(前端/LLM tool_call schema 可拿明文 key)。
  • 决策点:secret 解析下沉方式?
  • 选项:
    • a: 完整下沉 secret.rs → df-storage(新建 df-storage/src/secret.rs,src-tauri 改调 df-storage::secret)
    • b: df-storage 加薄 secret 查询方法(AiProviderRepo::resolve_api_key(id) 封装 mask/env 解析,df-nodes 调此)
    • c: provider_id 注入 config + df-nodes 直查 ai_providers.api_key(不走 secret.rs,df-nodes 自实现解析)
  • 推荐:方案 B(df-storage 加薄 secret 查询,纯密钥逻辑下沉不含 build_provider_for 避循环依赖)
  • 关联:todo F-260616-07 阶段3(⑥联调) / secret.rs / FR-S1 / memory FR-S1 api_key IPC mask
  • 状态: 已决+实施(2026-06-16)— 方案 B 落地:①secret 纯密钥逻辑下沉 df-storage/src/secret.rs(766f235,避循环依赖 build_provider_for 留 src-tauri 转发壳,12 调用点零改)②AiNode provider_id 注入链(84a6fc4,resolve_provider 三路径:provider_id 优先/老明文兼容 warn/空兜底 is_default)。FR-S1 闭环:api_key 经 df_storage::secret 解析 AiNode 内存内,不进 config/NodeOutput/schema。⑥联调代码层解锁,待实测(tauri dev)。

④类 — 设计方向(已决)

F-260614-03 灵感对抗评估接 LLM

  • 背景:df-ideas adversarial.rs evaluate() 纯启发式,接 LLM 需改签名注入 provider。
  • 决策点:注入方式?
  • 选项:
    • a: trait 解耦(df-ideas 定义 IdeaAnalyzer trait,推荐)
    • b: df-ideas 直接依赖 df-ai
    • c: closure 注入
  • 推荐:a(trait 解耦,但前置 F-07 trait 下沉)
  • 关联:todo F-260614-03 / F-07
  • 状态: 已实施(F-07 batch61·2069f79 解锁 + F-03 batch62·dfe0096 evaluate_with_llm 真实实现落地,19单测过,CR-40审查中)

F-260616-07 阶段3 AI 执行闭环 + F-03 收口三件

  • 背景:advance_task/run_workflow 注册为 AI 工具 + AiNode 自审闸门;F-03 收口三件(advance_task 注册 + update_task 描述/schema 移 status + df-storage tasks 白名单移 status)须同步落地防 AI 工具行为不一致。
  • 决策点:阶段3 范围/优先级?(依赖 F-07 trait 下沉让 AiNode 可复用)
  • 选项:
    • a: 全量(三件 + AiNode 自审 + run_workflow 工具)
    • b: 仅 F-03 收口三件(防行为不一致,先小步)
    • c: 暂缓(等 F-07 + 真实推进场景)
  • 推荐:b 先做 F-03 收口(防现状行为不一致),AiNode 自审等 F-07
  • 关联:todo F-260616-07 阶段3 / F-07
  • 状态: 决策b 实施中(F-07 batch61·2069f79 解锁,F-03收口三件 batch64·workflow wii1u1lnm 推进中,AiNode自审等后续批)

F-260616-08 阶段4 Git 集成

  • 背景:kind 字段 + git 闸门节点 + worktree 隔离。
  • 决策点:阶段4 是否进路线?(工作流当前内部基础设施无真实 CI/CD 场景,R-PD-12 已否决做实 run_workflow)
  • 选项:
    • a: 进路线(设计+实施)
    • b: 暂缓(等工作流有真实使用场景)
  • 推荐:b 暂缓(对齐 R-PD-12 否决,等真实场景)
  • 关联:todo F-260616-08 阶段4
  • 状态: 已决(2026-06-16)— 决策:b 暂缓。对齐 R-PD-12 否决,等工作流有真实 CI/CD 场景。

F-260614-08 决策治理产品化

  • 背景:活契约/规格契约自检机制(当前散落文档机制)产品化为可操作功能。
  • 决策点:产品化形态?(规格契约机制 devflow-spec-contract-mechanism 文档已定稿,落地链②-⑤未做)
  • 选项:
    • a: 独立功能页(规格契约自检 UI)
    • b: 嵌入现有流程(锚点+AI自检+子代理活契约化)
    • c: 暂缓(机制先行文档化,产品化等需求)
  • 推荐:c 暂缓(机制文档已定稿,产品化等真实需求驱动)
  • 关联:todo F-260614-08 / memory devflow-spec-contract-mechanism
  • 状态: 已决(2026-06-16)— 决策:c 暂缓。机制文档已定稿,产品化等真实需求驱动。

F-260614-09 项目 status 字段治理

  • 背景:status 状态机规范化(planning/active/archived 等枚举约束)。F-09 前端已对齐(planning/active/completed),后端 df-core enum 7 值是独立大改。
  • 决策点:后端 status 枚举收口范围?
  • 选项:
    • a: 后端 enum 收窄对齐前端(planning/active/archived)
    • b: 双字段(status 生命周期 + stage 开发阶段,已否决过度设计)
    • c: 暂缓(DB 实际只产生 planning + deleted_at 软删二态,现状可接受)
  • 推荐:c 暂缓(DB 实际二态,收口 ROI 低,等真实多态需求)
  • 关联:todo F-260614-09 / F-09
  • 状态: 已决(2026-06-16)— 决策:c 暂缓。DB 实际只产生 planning 二态,收口 ROI 低。

F-260614-10 知识库 MCP Server + Tier 2/3

  • 背景:对外 MCP 暴露 + 分层存储(当前仅 Tier 1 全栈)。
  • 决策点:MCP 暴露范围 + Tier 2/3 存储选型?
  • 选项:
    • a: 全量(MCP Server + Tier2 向量 + Tier3 冷归档)
    • b: 仅 MCP Server(对外暴露 Tier1)
    • c: 暂缓(等知识库真实外部消费需求)
  • 推荐:c 暂缓(Tier1 全栈已满足当前,等外部消费需求)
  • 关联:todo F-260614-10
  • 状态: 已决(2026-06-16)— 决策:c 暂缓。Tier1 全栈已满足当前,等知识库真实外部消费需求。

重投入排期(已排期/实施)

方案已定(📐设计完成/完备),非"待决策方向",而是"待排期投入"。

F-260614-07(F-07) df-ai-core trait 下沉拆 crate

  • 背景:架构前置,4 项决策全定稿。退路可放 df-core。解锁 F-03/F-01。
  • 设计状态:📐 完备(决策记录已收敛:原 F-03 A/B/C 作废,统一全局 AI trait 下沉独立 crate)
  • 决策点:排期?(解锁多项后续,但拆 crate 重投入)
  • 推荐:原推荐优先(可先放 df-core 过渡);用户决策:拆独立 crate df-ai-core(不放 df-core,一步到位)
  • 关联:todo F-260614-07 / F-03
  • 状态: 已决(2026-06-16)— 决策:拆独立 crate df-ai-core。不放 df-core 过渡,LlmProvider trait + 核心数据结构下沉独立 crate,df-ai/df-ideas/df-nodes 均依赖 df-ai-core。 已实施(batch61·2026-06-16·commit 2069f79·workflow wwtn2knn6+主代核查,cargo 0err+7单测)。解锁 F-01/F-03 注入。

F-260614-01 模型能力系统 Phase 1

  • 背景:ModelConfig 数据模型(模态/能力/价格/智力 4 维度) + ModelRouter 智能路由 + 多源探测(预设表+启发式) + 厂商模型列表自动拉取(适配 OpenAI/Anthropic 协议差异) + 7 调用点接入 + Settings 模型池 UI + AiChat 模型下拉。按需求自动匹配合适模型。
  • 设计状态:📐 设计定稿(2026-06-16,含 7 角度佐证 + 厂商适配 + 用户流程,见 F-01-模型能力系统与智能路由设计-2026-06-16.md)
  • 决策点:排期?(依赖 F-07 trait 下沉)
  • 推荐:F-07 后接续
  • 关联:todo F-260614-01 / F-07
  • 状态: 已排期(2026-06-16)— 用户确认推进。设计已定稿,F-07 已完成解除阻塞,列为 P1🔥 可立即实施。6 阶段子任务已拆解见 todo.md。

F-260614-06 导入历史项目(scan 第二步)

  • 背景:description 走 LLM(复用 scan_project_with_ai)+ 采样保留内容图(待 F-260614-05 多模态)+ monorepo 一层 + 批量并发;抽 create_with_binding 缓解 TODO。
  • 设计状态:📐 设计定稿(6 决策 06-14)
  • 决策点:排期?(依赖 F-260614-05 多模态采样)
  • 推荐:F-05 多模态后接续
  • 关联:todo F-260614-06 / memory devflow-project-path-binding
  • 状态: 已实施(batch61·2026-06-16·commit 2069f79·workflow wwtn2knn6+主代核查,cargo 0err+vue-tsc 0err)。6 决策全落地,image 多模态留接口待 F-260614-05。

F-260614-02 技能联想「使用」

  • 背景:首批 3 类联想已做,联想后实际触发/执行技能未实现。
  • 决策点:「使用」语义?(执行本机 claude 技能?AI 调用?需明确)
  • 推荐:需先澄清语义(关联 memory aichat-skill-slash-autocomplete)
  • 关联:todo F-260614-02
  • 状态: 已决(2026-06-16)— 决策:ai调用 主干已实施(batch62·2026-06-16 走查发现 commands.rs:172-175 已注入 system_prompt 头尾标注隔离+前端全链路通)。设计文档推荐方案 A(注入 system),剩 P1(argument_hint 参数 UI)/P2(空文本标题)边界打磨。详见 docs/02-架构设计/已编号方案/F-02-技能联想使用-实施机制设计-2026-06-16.md。

F-260614-04 多 Provider 负载均衡池

  • 背景:备用模型/多账号聚合,全局容量=min(各 provider 上限之和, global_cap)。
  • 决策点:排期?(增强非阻断)
  • 推荐:低优先(等 F-01 模型能力后)
  • 关联:todo F-260614-04
  • 状态: 已排期(2026-06-16)— 用户确认推进。P2 优先级,等 F-01 模型能力系统落地后接续(路由器需要知道哪些模型可用)。

F-260614-05 模型能力系统 Phase 2(多模态)

  • 背景:ChatMessage.content: String → Vec(Text/Image);前端粘贴/拖拽图片;vision 模型自动路由。
  • 决策点:排期?(解锁 F-06 导入采样)
  • 推荐:中等(解锁 F-06)
  • 关联:todo F-260614-05 / F-01
  • 状态: 已排期(2026-06-16)— 用户确认推进。P2 优先级,F-01 后接续。设计已定稿见 F-05-多模态实施方案设计-2026-06-16.md

AE-2025-04 会话级授权(Session Trust)

  • 背景:同会话内用户批准过某类操作后,后续同类自动放行;换会话清空重审。首批 write_file + run_command。设计已定(目录级粒度 + 仅写+执行首批 + Webhook 走独立 execution_token)。
  • 设计状态:📐 设计定(2026-06-16)
  • 决策点:排期?(涉及 mod.rs AiSession + audit.rs 审批链)
  • 推荐:中高(写→跑→看→改闭环高频连续操作,体验提升大)
  • 关联:todo AE-2025-04
  • 状态: 已排期(2026-06-16)— 用户确认推进。P1 优先级,写→跑→看→改闭环高频连续操作体验提升大。设计已定(目录级粒度 + 仅写+执行首批)。

T-260614-06 Settings.vue 拆 panel 子组件

  • 背景:1042 行 god file,4 大功能域(AI 模型/Provider 表单/连接管理/通用设置)可拆 src/components/settings/。评估非低风险(纯重构零功能价值,新建 4 子组件 + props/emits + CSS 拆)。
  • 决策点:排期?(单独立项做更稳)
  • 推荐:低(纯重构零功能,等 god file 痛点加剧)
  • 关联:todo T-260614-06
  • 状态: 已排期(2026-06-16)— 用户确认推进。P3 优先级(纯重构零功能),等 god file 痛点加剧或配合 F-01 模型池 UI 一并做。

④类续 — 设计方向(已决·batch55迁移)

UX-2025-04 断线保文(incomplete标志)

  • 背景:流式中断时已接收文本不丢弃;stream_llm mid-stream error 改返回 partial_text + incomplete 标志;agentic 收 incomplete→正常入库+AiCompleted(非AiError)+「⚠ 响应因网络中断不完整」+「继续生成」按钮。
  • 决策点:改 stream_recv.rs 流式核心是否做?(中风险,回归可能)
  • 选项: a:授权推进(关联 DEC-260616-03 已决a) / b:暂不碰
  • 推荐:a(DEC-03 已授权,断线保文是用户体验硬伤)
  • 关联:todo UX-2025-04 / DEC-260616-03
  • 状态: 已决(2026-06-16)— 决策:a(授权推进。DEC-03 已授权,断线保文是用户体验硬伤)。

ARC-260615-03 df-execute 归宿

  • 背景:df-execute 非空壳(shell.rs execute() 已完整实现+被 tool_registry.rs run_command 复用)。原todo「76行/1函数+TODO」基于 lib.rs 空判过时。
  • 决策点:合并进 df-nodes(破职责分离+动依赖树) vs 维持独立?
  • 选项: a:维持独立(职责清晰:节点定义vs执行运行时) / b:合并df-nodes(减少crate数)
  • 推荐:a(维持独立,转架构维护记录非清债)
  • 关联:todo ARC-260615-03
  • 状态: 已决(2026-06-16)— 决策:a(维持独立,df-execute 非空壳 shell.rs execute() 已完整实现 + 被 run_command 复用,转架构维护记录非清债)。

ARC-260615-07 中期技术债7件

  • 背景:df-core改名df-types / IPC层抽取df-app / AI loop下沉df-ai / 3 view绕store调api / 类型契约ts-rs代码生成 / AiSession多会话 / AppState分组 / IPC命名统一。
  • 决策点:哪些值得投?哪些暂缓?
  • 选项: a:逐项评估后挑高ROI的做 / b:全部暂缓(等业务功能优先)
  • 推荐:b 暂缓(当前业务功能未饱和,技术债不急)
  • 关联:todo ARC-260615-07
  • 状态: 已决(2026-06-16)— 决策:a(逐项评估挑高 ROI 的做,用户要求推进非暂缓)。

B-260615-41 工作流执行无进度指示

  • 背景:长时间工作流执行用户不知进度/剩余时间。需进度条+步骤提示+预估剩余时间。
  • 决策点:实现深度?纯前端 vs 后端emit事件驱动
  • 选项: a:轻量(WorkflowDetail.vue 进度条+步骤文本,后端复用已有NodeStarted/Completed事件) / b:完整(后端新progress事件+预估算法)
  • 推荐:a 轻量(复用现有事件,最小改动)
  • 关联:todo B-260615-41
  • 状态: 已决(2026-06-16)— 决策:a 轻量(复用现有 NodeStarted/Completed 事件,纯前端消费)。

B-260615-43 无撤销重做功能

  • 背景:AI操作(delete_project等)无撤销。操作历史栈+撤销/重做UI。
  • 决策点:撤销范围?全局vs仅AI操作?
  • 选项: a:仅AI工具操作(delete_task/delete_project/restore/run_command等) / b:全局(含项目/任务CRUD) / c:暂缓(二次确认已部分覆盖)
  • 推荐:c 暂缓(High-risk工具已有二次确认AE-05,撤销复杂度高)
  • 关联:todo B-260615-43
  • 状态: 已决(2026-06-16)— 决策:c 暂缓(High-risk 已有二次确认 AE-05,撤销复杂度高)。

C类 — 已解决

S-260615-01 aichat API Key 401 根因

  • 状态: 已解决(2026-06-16)— 用户确认已解决。

S-260614-01 「显示多开」需求澄清

  • 状态: 已解决(2026-06-16)— 用户澄清:需求本质是「会话来回切并行处理」(A 对话回复中切到 B 发消息,A 后台继续跑),非设置页开关。已被 F-260616-09(决策 a:d1 侧栏切换+后台并行)完整覆盖收编。

当前队列已决项迁入2026-06-18

B-260617-01 run_workflow 作为 AI 工具无法执行 + 无意义重试 + 审批混淆

  • 背景2026-06-17 实测发现AI 对话中调用 run_workflow(task_id, target_status) 推进任务状态,审批通过后 handler 返回 Err 提示字符串(tool_registry.rs:530-546ai_approvecommands.rs:329-334)将其包成 "failed" tool_result 回传 LLM → LLM 认为失败 → 重试(1/4) → 又进审批 → 循环。三个关联问题:
    • 问题 1run_workflow handler 仅持有 db: Arc<Database>,无法访问 AppHandle/Stateregistry/event_bus/workflows Repo返回 Err 提示前端走 IPC。但 ai_approve 审批通过后直接 ai_tools.execute() 调 handler → 必然 Err。
    • 问题 2handler Err → tool_result = 错误提示 → LLM 重试 → 同结果循环(工具定义未标 no_retry)。
    • 问题 3:前端渲染的是 AI 工具审批tool_call pending非工作流 HumanNode 审批。用户批准后工作流引擎从未启动。
  • 决策点run_workflow 审批通过后如何真正执行工作流?
  • 选项
    • a: 前端拦截ai_approve 中识别 run_workflow → 不走 ai_tools.execute → 直接 invoke('run_workflow', {task_id, target_status}) → 结果回填 tool_result
    • b: 后端注入 Statebuild_ai_tool_registry 传入 AppHandle 使 handler 可直接执行,改 state.rs + tool_registry 签名)
    • c: 从 AI 工具移除 run_workflow(仅保留 advance_task 推进状态,工作流由用户手动在前端触发)
  • 推荐a 前端拦截(改动最小,ai_approve 一处分支即可;方案 b 需改 tool_registry 签名链路较长;方案 c 退回手动不符合 AI 驱动目标)。问题 2/3 随 a 自动消解。
  • 关联todo B-260617-01 / tool_registry.rs:530-546 / commands.rs:329-334 / audit.rs:590-630
  • 状态: 已决(2026-06-17·波9 e23b316)— 决策:a 细化为 a2(后端分支)。ai_approve 已持 app+state,后端直接调 run_workflow_inner 最干净(无需新 IPC/前端分支/工作流知识泄漏),符合 a 大方向(绕开 ai_tools.execute 必 Err)。问题 2 随 a2 消解(成功 tool_result + High 去重缓存双层断循环);问题 3 渲染区分记观察项(tool_display_hint 已含「触发工作流」语义)。详单见待审查 CR-52。

S-260614-01 多会话来回切(A/B 路线) — 已并入 F-260616-09

  • 状态: 已并入 F-260616-09(2026-06-16 已决 a:A 隔离修复 + B 立项高优先实施)。A/B 路线决策统一收口于 F-260616-09,本条不再独立维护。A 路线实施待 T-260614-02 实测确认是否升 B。

B-260617-11 tauri.conf.json 打包目标收窄确认

  • 背景:工作区改动 bundle.targets: "all" → ["nsis"](src-tauri/tauri.conf.json:28),收窄到仅 Windows NSIS。若随其他改动一并提交,macOS(dmg/app)/Linux(deb/appimage)构建将不可用,影响其他开发者/CI。
  • 决策点:临时本地构建 vs 有意入库?
  • 选项:A 临时本地构建(提交前 revert 此行) / B 有意入库(改按平台条件配置而非硬编码单 target)
  • 状态: 已决(2026-06-18) — 决策:A 临时本地构建,要求高速["nsis"] 已是 Windows 单一最快安装包目标。提交前须 revert 为 "all"。若进一步提速可用 ["app"](裸 .exe 无安装包)或 tauri build --no-bundle

当前队列已决项迁入2026-06-26 ~ 2026-06-27

来源:待决策.md 2026-06-26 任务图谱推进待决策 + 🟡 各节已决项批量迁入。

DEC-260626-01 父② 知识图谱 Phase 1 多工程合并

  • 决策:b — 知识图谱独立 Phase 1(V29,V28 已被灵感软删除占用)。多工程代码零行(grep 全空),合并无理由,多工程后续 V30+。
  • 关联:todo 父②
  • 状态: 已决(2026-06-26)

DEC-260626-02 ⑤.2 #7 promote 补偿删除方式

  • 决策:b — 保留 purge。补偿是内部回滚建错的 project(非用户删除),purge 干净不污染回收站。
  • 关联:todo ⑤.2 #7(标"保留 purge 不改")
  • 状态: 已决(2026-06-26)

DEC-260626-03 ⑤.2 #6 评分关键词配置形式

  • 决策:c — 先拆 const 到独立文件(中/英两套,最小改动)。原推荐 a 修正:启发式是过渡(scoring.rs TODO 接 LLM 语义评分),接 LLM 后按需升 a(JSON 文件)。
  • 关联:todo ⑤.2 #6
  • 状态: 已决(2026-06-26)

DEC-260626-04 ⑤.2 #9/#10 表单补全交互

  • 决策:a — tags 逗号分隔输入框(对标 Knowledge.vue 先例)+ priority 下拉 + source 输入。chip 组件留 UX 升级。
  • 关联:todo ⑤.2 #9/#10
  • 状态: 已决(2026-06-26)

DEC-260626-05 BUG-260620-05 层2 授权政策

  • 决策:a — 维持方案①(白名单+弹窗三档)。层1(工程内免授权,F-260619-03 方案①)已解痛点,层2 黑名单制安全风险 + 分发冲突。
  • 关联:todo BUG-260620-05 层2(标"维持①不做")
  • 状态: 已决(2026-06-26)

DEC-260626-06 父③ ToolCard 跨轮合并 + 审批状态机排期

  • 决策:b — 等 G1 实测 + 父② 后再做。审批是高危路径,AiChat.vue 仍在频繁改动,择稳定窗口专项。
  • 关联:todo 父③(排父②后)
  • 状态: 已决(2026-06-26)

DEC-260626-07 父④ F-09 per-conv 真多会话排期

  • 决策:a — 父② Phase 1 后启动。F-09 是 Phase 4 前置,大改不与父② 并行(回归交叉)。
  • 关联:todo 父④(排父②后)
  • 状态: 已决(2026-06-26)

专题-1 workspace_root 分发适配

  • 决策:① 先行(去默认白名单,dev 自用 projects.path 自动授权够),分发前定②(去相对锚)。
  • 状态: 已决(2026-06-26,① 立即/② 分发前)

专题-2 BUG-260623-03 审批 pending 超时兜底

  • 决策:c 无超时(不做超时兜底)。用户:等待审批就是等待,一直等待,超时概念多余。审批是用户主动行为,不审批自然挂起等待,无需超时强制 reject/倒计时。
  • 状态: 已决(2026-06-26,不做超时,关闭 BUG-260623-03)

专题-3 F-09 streaming/currentText per-conv

  • 决策:暂缓(随 B 路线多会话并发同批做,即 DEC-07 父④)。
  • 状态: 已决(2026-06-26,归父④)

S-260623-01 「自托管」含义澄清

  • 决策:自用阶段定案(2026-06-23) —— 用户决策:小程序当前自用(开发阶段),分发是产品终态但留后续(过渡期靠改 device_id 实现多机)。故「自托管」现阶段 = 已实现的自主执行(autoExecuteMode all 含高危),无另义。分发阶段再做配置层(MINIDEC-01)+ 配对(MINIDEC-02)。
  • 关联:task105 / memory(设置自主执行已实现)
  • 状态: 自用阶段定案(2026-06-23)

B-260618-03 路由解耦 cost_tier/intelligence(用户已全局决策去掉,工程大需专项)

  • 决策:用户已全局决策去掉。自主推进(2026-06-18 workflow wexu1isx1,主代核查 cargo check --workspace EXIT 0 + cargo test df-ai 109 passed + vue-tsc EXIT 0)。title/compress 纯 weight 选模型退化点:用户核对 Settings weight 配置(同 weight 并列 max_by_key 返回最后一个)。
  • 关联:todo B-260618-03/04/05 · UX-260618-04 前端 cost/intel 标签(依赖本项)
  • 状态: 已实施(2026-06-18)

SW-260618-21 死代码预留功能清理批(清理 vs 保留)

  • 决策:b 保留+标 allow(预留设计意图明确·清理失去未来扩展点 ROI 低;标 allow 消 warning 即可·零波及)。risk_level 删 + 预留/diff 标 allow·cargo 0 warning。
  • 关联:批次7 transition_status 已删 / CR-22 删 risk_level / CR-23 标 allow 5 处
  • 状态: 已实施 b(2026-06-18)

F-260616-09-B 多会话并发架构 B 阶段实施决策(设计完成 2026-06-19·待拍板)

  • 决策: b-1 采纳(messages per-conv,技术必然)+ c-1 保持 3 + Settings 配置 + e-1 原路径。主代自主裁决采纳(2026-06-19)。用户授权「自主推进,能多角度确定的方案不等审批」。启动阶段2 批1。
  • 关联:todo F-260616-09 / 设计文档 / memory aichat-arch-extensibility
  • 状态: 主代自主裁决采纳(2026-06-19)

F-260619-05 任务可关联灵感(产品粒度/方向决策·todo 已登记)

  • 决策:tasks 加 idea_id REFERENCES ideas(id)(复用 projects 模式,1对1 起步,单向,后续按需扩展)。已实施(2026-06-20 调研确认)。前端任务卡片展示灵感来源(可选增强)待补。
  • 关联:todo.md F-260619-05
  • 状态: 已实施(2026-06-20)

MINIDEC-260623-03 WS 重连续流策略(F10·行为差异·需拍板)

  • 决策:已实施 a(2026-06-23)——用户决策「断网不丢消息 + 从远端拉完整」。useAiChat syncOnConnect:ws 'connected' → 发 load_messages 拉完整历史。cargo check 0 + vue-tsc 0 + build DONE。
  • 状态: 已实施(2026-06-23)

MINIDEC-260623-04 审批双源状态分裂统一(F4/F5/F6/F13·渲染源决策)

  • 决策:已实施 a 单一渲染源(2026-06-23)——用户决策「审批断网重连恢复卡片状态」。审批卡改从 pendingApprovals 独立面板渲染;remote_bridge 加 sync_pending 路由;useAiChat onStatus 'connected' 清 pendingApprovals + 发 sync_pending 重建;handleEvent 加同 id 去重。cargo 0 + vue-tsc 0 + build DONE。
  • 状态: 已实施(2026-06-23)

MINIDEC-260623-05 会话页管理缺口(删除/重命名·需后端命令)

  • 决策:重命名已实施 / 删除暂缓(2026-06-23)——用户决策「小程序对齐桌面端能改会话名」。remote_bridge 加 rename_conversation 路由;useAiChat renameConversation 方法;conversations/index.vue 长按会话编辑。删除会话暂不做(桌面端管理)。cargo 0 + vue-tsc 0 + build DONE。
  • 状态: 重命名已实施 / 删除暂缓(2026-06-23)

MINIDEC-260623-07 regenerate 零调用方 + 备份组件漂移(P3 收尾)

  • 决策:随 P1-F 选 a(2026-06-23)—— 🟡 收尾批给 regenerate 加「重发」UI 入口(对齐桌面端),故保留函数不再删;备份组件(MdView/MentionInput)保留预留注释(绕工具解析 bug,未来拆回)。
  • 状态: 随 P1-F 选 a(2026-06-23)