From 7fd29e68c30f55ec1fce38b51d1aa6021d1a7948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Wed, 17 Jun 2026 01:08:38 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84:=20=E5=BE=85=E5=86=B3?= =?UTF-8?q?=E7=AD=96=E5=8E=86=E5=8F=B2=E6=8C=89=E6=9C=88=E5=BD=92=E6=A1=A3?= =?UTF-8?q?=E6=8B=86=E5=88=86(=E4=B8=BB=E6=96=87=E4=BB=B6370=E2=86=9264?= =?UTF-8?q?=E8=A1=8C,=E5=B7=B2=E5=86=B3=E9=A1=B9=E8=BF=8107-=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=AE=A1=E7=90=86/=E5=BE=85=E5=86=B3=E7=AD=96?= =?UTF-8?q?=E5=BD=92=E6=A1=A3/)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/07-项目管理/待决策归档/2026-06.md | 326 ++++++++++++++++++++++++ docs/待决策.md | 328 +------------------------ 2 files changed, 337 insertions(+), 317 deletions(-) create mode 100644 docs/07-项目管理/待决策归档/2026-06.md diff --git a/docs/07-项目管理/待决策归档/2026-06.md b/docs/07-项目管理/待决策归档/2026-06.md new file mode 100644 index 0000000..372bd54 --- /dev/null +++ b/docs/07-项目管理/待决策归档/2026-06.md @@ -0,0 +1,326 @@ +# 待决策归档(历史已决) + +> 从 [待决策.md](../../待决策.md) 拆出的已决策 / 已实施 / 已排期 / 已解决历史项。 +> 决策点已闭合,实施进度见 [todo.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>`),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 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](../../02-架构设计/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](../../02-架构设计/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 侧栏切换+后台并行)完整覆盖收编。 diff --git a/docs/待决策.md b/docs/待决策.md index 6f02104..901d8cd 100644 --- a/docs/待决策.md +++ b/docs/待决策.md @@ -3,16 +3,18 @@ > **职责分离**: > - **主会话**(汇总/巡检)→ 【写入】"当前队列",登记待人工决策项(背景 + 决策点 + 选项 a/b/c + 推荐)。 > - **用户**(人工)→ 【拍板】选选项或确认推荐,回填理由(可选)。 -> - **主会话**(拍板后)→ 决策项回流 [todo.md](./todo.md) 推进 + 移"已决归档"。 +> - **主会话**(拍板后)→ 决策项回流 [todo.md](./todo.md) 推进 + 迁入"已决归档"。 > > 这里**只放需人工决策项**(产品取舍 / 方向选型 / 排期 / 用户实测澄清)。不放可自主推进待办(见 [todo.md](./todo.md))、不放审查登记(见 [待审查.md](./待审查.md))。 +> +> **已决策历史**按月归档,见 [07-项目管理/待决策归档/](./07-项目管理/待决策归档/)。拍板后的项迁入对应 `YYYY-MM.md`(随时间增长追加月份文件,防本文件膨胀;文件不存在则新建)。 > 来源:2026-06-16 从 todo.md 抽离③④C类(可自主批 AE-03/复核⑪/UX-04 留 todo 推进)。 ## 决策规则 - 每条须:背景 + 决策点 + 选项 + 推荐 + 关联 todo。 - 用户回填:`✅ 决策:X`(选 + 理由可选)。 -- 拍板后:主会话回流 todo 实施 + 移本文件"已决归档"。 +- 拍板后:主会话回流 todo 实施 + 迁入 [07-项目管理/待决策归档/YYYY-MM.md](./07-项目管理/待决策归档/)(按月文件)。 - 暂缓项标 ⏸️,不删(条件变化可重启)。 ## 状态图例 @@ -23,170 +25,7 @@ ## 当前队列 -### ③类 — 产品取舍(有 a/b/c 决策点,核心待拍板) - -#### 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>`),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 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)。 - ---- - -### ④类 — 设计方向(方案未定,需人定 A/B/C 选型) - -#### 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 场景。 +### ⏸️ 暂缓(待条件触发) #### T-260614-11 条件表达式引擎升级 - **背景**:df-workflow conditions 仅支持 true/false 字面量,升级为真表达式求值。引擎设计好但无前端 UI 消费方(demoDag edges 无 condition 字段)。 @@ -199,156 +38,7 @@ - **关联**:todo T-260614-11 - **状态**:⏸️ 暂缓 -#### 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](./02-架构设计/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](./02-架构设计/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 侧栏切换+后台并行)完整覆盖收编。 +### 🟡 待用户实测/澄清(需用户操作,主会话无法代办) #### S-260614-02 审批可见性实测重评 - **待用户操作**:实测 tc 卡片是否渲染。B-01 修复后 pending_approvals 内存态不再被 switch 清空,前端查询有数据,但 state.pendingApprovals 在 AiChat.vue 是否有兜底渲染仍需实测。 @@ -367,4 +57,8 @@ ## 已决归档 -(空 — 用户拍板后移此区) +按月归档(随时间增长追加月份文件,防主文件膨胀): + +- [2026-06.md](./07-项目管理/待决策归档/2026-06.md) — 2026-06 已决策/已实施/已排期/已解决历史(③类产品取舍 12 项 / ④类设计方向 6 项 / 重投入排期 8 项 / ④类续 5 项 / C类已解决 2 项) + +> 新月份拍板项累积时,新建 `YYYY-MM.md` 承载。