Files
DevFlow/docs/07-项目管理/待决策归档/2026-06.md
绝尘 998a2f243d 文档: 架构方案文档(意图识别论证+多主题愿景/论证+文档物理分类+边界清晰化)
squash合并:
- 意图识别层论证(8维度+10业界佐证)
- 多主题上下文管理愿景+并存论证+补充论证(多轮agentic)
- 架构设计文档物理分类(四子目录+INDEX+命名规范+引用同步+边界清晰化)
- 前端架构技术债清单归档
2026-06-19 15:04:04 +08:00

354 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 待决策归档(历史已决)
> 从 [待决策.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<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](../../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<ContentPart>(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 侧栏切换+后台并行)完整覆盖收编。
---
## 当前队列已决项迁入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-546``ai_approve``commands.rs:329-334`)将其包成 `"failed"` tool_result 回传 LLM → LLM 认为失败 → 重试(1/4) → 又进审批 → 循环。三个关联问题:
- **问题 1**run_workflow handler 仅持有 `db: Arc<Database>`,无法访问 `AppHandle/State`registry/event_bus/workflows Repo返回 Err 提示前端走 IPC。但 `ai_approve` 审批通过后直接 `ai_tools.execute()` 调 handler → 必然 Err。
- **问题 2**handler 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: **后端注入 State**`build_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`