新增: CR-48波4审查登记(F-01调用点+patch_file三模式)

This commit is contained in:
2026-06-17 00:35:49 +08:00
parent 2446d1b876
commit 8667e850e3

View File

@@ -233,6 +233,26 @@
---
### CR-260616-47 波3 F-15上下文基础(is_active白名单+push token) + F-01模型拉取IPC+Settings UI — 🟡 待审
- **范围**: 波3 workflow(wvxn5w1pf,2 agent 并行不同域)。①**F-15 阶段1 基础**(8a142c2):df-ai-core/provider.rs:82 is_active 改正面白名单 `matches!(self.status.as_deref(), None | Some("active"))`(旧反面排除 !matches truncated,零行为变化:None/active=true truncated=false 等价;新状态 archived_segment/compressed 阶段2 引入自动隔离)+ df-ai/context.rs:179 push token 修正 `if message.is_active() { self.history_tokens += tokens }`(!active 仍 push 到 messages 全量保留持久化,仅不计 token,修复 restore_from_messages 后 token 虚高致 build_for_request 误判超预算)+ 2 单测(is_active_whitelist 5 状态 / push_token_only_active 直接 push+restore 双路径)。②**F-01 阶段5 IPC + 阶段6 前端**(a26b86e):src-tauri commands.rs ai_fetch_models(provider_id)(FR-S1 resolve_provider_secret 内存解析 api_key 不外泄 + normalize_provider_type anthropic→anthropic_compat + fetch_and_probe + update_full 写回 model_configs)+ ai_probe_model(model_id)(probe 纯 CPU)+ lib.rs 注册 + types.ts ModelConfig+4 维度枚举(snake_case 对齐 df-ai-core model.rs serde)+ AiProviderRecord.model_configs + ai.ts fetchModels/probeModel + Settings.vue 拉取按钮+模型列表 UI(4 维度标签+enabled toggle+weight)+ fetchModels 错误分支 toast(超时/鉴权/端点不存在)+ i18n settings.ts 18+ key。**决策**:新建态 provider 无 id,采用「先保存落库拿 id 再 fetch」(非临时 IPC,DRY 不重写密钥解析逻辑)。③**todo 登记**(5b7f342):F-260617-01 patch_file 三模式增强需求。
- **维度**: ①is_active 白名单零行为变化(None/active/truncated 三档全等) ②push token 仅 active 计入(!active 全量保留持久化,all_messages_clone 不变) ③restore_from_messages 自动同步(调 push) ④2 单测覆盖(5 状态+直接/restore 双路径) ⑤ai_fetch_models FR-S1 闭环(api_key 仅 resolve_provider_secret 内存,不进返回值/日志/错误;ModelConfig 无 api_key 字段) ⑥normalize_provider_type 归一(anthropic→anthropic_compat 对齐 fetch_and_probe) ⑦fetch_and_probe + update_full 写回 ⑧ai_probe_model 纯 CPU probe ⑨types.ts 4 维度枚举 snake_case 对齐 df-ai-core serde ⑩Settings 拉取 UI(4 维度标签+enabled/weight 本地态)+错误分支 toast ⑪i18n 转义(命名插值 {count}/{msg} 合法) ⑫主代亲跑 cargo test df-ai-core is_active **1 passed** + df-ai context:: **14 passed**(零回归)+ workspace check EXIT 0 + vue-tsc exit 0。
- **commit**: 8a142c2(F-15 基础) + a26b86e(F-01 IPC+前端) + 5b7f342(todo F-260617-01 登记)。
- **主代独立核查**: ✅ 全过(provider.rs:82 is_active matches!(None|Some("active")) + 注释零行为变化 / context.rs:179 push if is_active 计 token / 2 单测 / commands.rs ai_fetch_models FR-S1 resolve_provider_secret + normalize + fetch_and_probe + update_full / ai_probe_model probe / types.ts ModelConfig+4 枚举 snake_case / Settings 拉取 UI / **workspace check EXIT 0 亲跑确认无 error(B agent 报 project.rs:9 E0433 error 经核验为幻觉/抓中间态,实际 L9 是 use df_core::types::new_id,workspace 5 warning 全 pre-existing 无 error)** / cargo test is_active 1 passed + context 14 passed 亲跑 / vue-tsc exit 0 亲跑)。
- **审查 agent 待复审重点**: ①is_active 白名单零行为变化论证(truncated 是 push 后 truncate_after_user_message 二次标记,push 时刻 is_active 恒 true,history_tokens 累加不变) ②push token 修正 restore_from_messages 路径(mgr2 验证 active/archived/compressed 三条 restore 后 token 只含 active) ③ai_fetch_models FR-S1 闭环(resolve_provider_secret 不外泄,错误信息 err_str 是否含密钥片段) ④normalize_provider_type 双命名归一(后续若统一删 normalize) ⑤Settings enabled/weight 本地态非持久化(modelListHint 文案明示,持久化需 ai_save_provider 扩展或新 IPC,阶段6 后续) ⑥ai_probe_model UI 未接(无单模型探测按钮,留阶段6 AiChat 模型下拉) ⑦ModelConfig 5 CSS 类未润色(功能正常视觉待润色) ⑧types.ts 枚举与 df-ai-core serde rename_all snake_case 严格对齐核验。
---
### CR-260616-48 波4 F-01阶段5调用点接入(select_model_id helper+6点) + F-260617-01 patch_file三模式编辑 — 🟡 待审
- **范围**: 波4 workflow(wd5a1dgqz,2 agent 并行不同域)。①**F-01 阶段5 调用点接入**(2ddfea6):router.rs L76 加 `select_model_id(req,pool)->Option<String>` 纯函数 helper(调 ModelRouter::select + map model_id)+ L16 `pub use df_ai_core::model::{Capability,CostTier,IntelligenceTier,Modality,ModelConfig}` re-export(src-tauri/df-ideas/df-nodes 经 df_ai::router::{...} 直接 import 维度枚举)+ 6 调用点统一兜底 `select_model_id(&req,&provider.model_configs).unwrap_or(default_model)`:agentic.rs 主对话(TaskRequirements{Text,tool_use:true,Standard},resolved_model 替 default_model 进 CompletionRequest+消息元数据+save_conversation 审计)+ title.rs(Lite,max_cost:Low)+ knowledge_inject.rs 提炼(Standard)+嵌入(Lite,resolve_embed_provider 对 embedding provider 池路由,池空兜底 config.embedding_model)+ project.rs 项目扫描 2 点(Standard)+ df-ideas adversarial.rs(model_pool 字段+with_pool 构造+evaluate_with_llm 路由,池空 unwrap_or_default 留空)+ df-nodes ai_node.rs(ResolvedProvider.model_pool 字段+parse_params config.model 显式优先否则路由 Standard+tool_use)+ df-ideas Cargo.toml 加 df-ai 依赖 + idea.rs build_default_provider 返 (provider,pc.model_configs) 元组透传池。②**F-260617-01 patch_file 三模式**(2446d1b):tool_registry.rs 新增 apply_line_range(content,start,end,new_text)(1-based 含首尾 splice,越界 Err)+ resolve_anchor_to_lines(content,start,end)(子串大小写敏感匹配找含 start 首行→其后第一个含 end 行)+ 三模式互斥运行时校验(has_old_text/has_replace_lines/has_anchor 计数 0=缺定位/>1=冲突)+ replace_lines/anchor 嵌套 schema 手工拼 JSON Schema + 共用底层(expected_hash mtime+size 指纹三模式通用+FILE_LOCKS+.bak 备份+原子 tmp→rename+generate_diff)+ 16 单测(apply_line_range 8+resolve_anchor_to_lines 8+e2e 1)。
- **维度**: ①select_model_id helper 纯函数正确性(调 select map model_id)+ pub use re-export 可见性(6 调用点 import df_ai::router::{Modality,IntelligenceTier,CostTier}) ②6 调用点兜底行为不变(池空/无匹配→None→unwrap_or default_model,与接入前一致) ③agentic served-model 审计字段统一改 resolved_model(行为变更语义更正确:记实际服务模型;池空时 ==default_model 零差异) ④knowledge_inject 嵌入降级 needs_tool_use=false 宽松过滤(TaskRequirements 无 capabilities 字段,设计偏离;embedding provider 池通常即嵌入模型实践中命中) ⑤df-ideas 新增 df-ai 重依赖(reqwest/eventsource-stream,tree-shaking 编译期不链入 HTTP 代码,仅引用 router 符号) ⑥df-nodes ResolvedProvider.model_pool 字段(record 路径填 record.model_configs.clone,老明文路径填空)+ config.model 显式优先级 ⑦patch_file 三模式互斥运行时校验完备(0/>1 两种)+ expected_hash mtime+size 非 sha256(read_file 返回 file_hash)三模式通用 ⑧apply_line_range trailing newline 语义(尾换行不误删)+ resolve_anchor 子串行内命中(start==end 同行/first-end-after-start/大小写敏感) ⑨16 单测覆盖三模式+互斥+边界 ⑩主代亲跑 cargo check --workspace EXIT 0 + cargo test df-ai router **15 passed**(13 原+2 新)+ df-ideas **20 passed** + df-nodes **79 passed** + devflow tool_registry **76 passed**(三模式单测全过)。
- **commit**: 2ddfea6(F-01 阶段5 调用点) + 2446d1b(patch_file 三模式)。
- **主代独立核查**: ✅ 全过(router.rs L16 pub use df_ai_core re-export(初 Read 误判私有 use,grep L16 确认 pub use)+L76 select_model_id helper / 6 调用点 import df_ai::router::{select_model_id,Modality,IntelligenceTier,...} 形态正确(agentic:19/project:11/title:11/knowledge_inject:12/ai_node:17/adversarial:165 全限定) / **cargo check --workspace EXIT 0 亲跑(5 warning 全 pre-existing dead_code 无 error)**(B agent 报 select_model_id E0425/Modality E0603 经核验为攒批中间态 A router.rs in-flight 时未定义,review-batching-worktree-transient 教训) / cargo test df-ai router **15 passed**(select_model_id_empty_pool_returns_none/select_model_id_hit_returns_model_id 新增) / df-ideas **20 passed** 零回归 / df-nodes **79 passed,1 ignored** 零回归 / devflow tool_registry **76 passed**(apply_line_range_*+resolve_anchor_*+e2e+互斥) / tool_registry apply_line_range L133+resolve_anchor_to_lines L182+互斥校验 L935+嵌套 schema L892/L901+共用底层 expected_hash/FILE_LOCKS/.bak)。
- **审查 agent 待复审重点**: ①agentic served-model 审计字段改 resolved_model 行为变更(池空==default_model 零差异核验,池非空命中才是路由目标) ②knowledge_inject 嵌入 needs_tool_use=false 降级(如需严格 Embedding 过滤需扩 TaskRequirements capabilities 字段+router 加过滤步,行为不变优先本批未做) ③df-ideas 新增 df-ai 重依赖(df-ideas 原仅 df-ai-core,现 reqwest 等;若需严格轻量可将 router 下沉 df-ai-core) ④patch_file expected_hash 非 sha256(mtime+size 指纹,三模式通用语义与 old_text 模式一致) ⑤三模式互斥运行时校验(schema 层 object_schema 无法静态互斥,运行时 has_* 计数兜底) ⑥agentic 主对话含图 Vision 检测未实现(ChatMessage 纯文本无图像 Part,modalities 仅 [Text],多模态类型接入后追加 TODO) ⑦build_provider/诊断日志仍用 default_model(provider trait 不暴露改 default_model,CompletionRequest.model 走路由 provider impl 适配) ⑧实测类待用户(tauri dev 调用点端到端:Settings 拉取模型→池非空→主对话/标题/扫描/灵感/ai_node 各走路由)。
---
## 已审归档
### CR-260616-34 batch58 F-260616-10 provider 默认值重启失效 bug — ⚠ 已审(PASS-WATCH)