From 5b7f342e140f9b62a3db27a4cdc41e74ce6ec22e 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 00:14:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20F-260617-01=20patch=5Ffil?= =?UTF-8?q?e=E5=A2=9E=E5=BC=BA=E9=9C=80=E6=B1=82=E7=99=BB=E8=AE=B0(?= =?UTF-8?q?=E8=A1=8C=E5=8F=B7=E5=8C=BA=E9=97=B4+=E9=94=9A=E7=82=B9?= =?UTF-8?q?=E5=8C=B9=E9=85=8D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/todo.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/todo.md b/docs/todo.md index 2062e14..d23c4e9 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -122,6 +122,18 @@ - [x] ✅(主代核验·2026-06-16) F-260616-14 [P2/核验] — **max_tokens 8192 截断 + 前端批量审批核验**。核验结论:①`max_tokens=8192`(实际 `agentic.rs:270`,行号漂移)≈6-8k 字日常够用,长回复截断由 batch59 MidStream 保文兜底不丢文,**可配低优先非阻塞**(登记可选优化)②前端批量审批 **AE-2025-01 已完整闭环**(ToolCardList.vue:4-11 `ai-batch-approve` 栏 + AiChat.vue:444 `@batch-approve`→`store.batchApprove` + useAiSend.ts:338 遍历 pendingApprovals 逐个 approveToolCall + i18n approveAll/rejectAll),满足「一轮多 Med/High 全 insert pending→一次批量批全部」③audit.rs:496 `process_tool_calls` 一轮多工具 Med/High 进审批门控 insert pending + Low 并行执行链路通。无阻塞 bug,销账。— agentic.rs:270 + ToolCardList.vue + audit.rs:496。 +- [ ] F-260617-01 [P2] — **patch_file 工具增强:行号区间替换 + 锚点匹配两种备选模式**。当前 patch_file 仅支持 `old_text` 精确匹配,对超长行(todo.md 单行 1000-2000 字符)+ 含大量反引号/引号/中文标点的场景,匹配极易失败(JSON 转义错位一个字符就全盘失败)。新增两种可选模式作为备选: + + **方案 A — 行号区间替换**:新增参数 `replace_lines: { start: usize, end: usize }`(1-based,含首尾行),直接按行号区间删除旧内容 + 插入 `new_text`。不需要 `old_text`。配合 `expected_hash` 乐观锁防并发修改后行号漂移。**适用场景**:超长行文件、已通过 `read_file` 确认行号的精确替换。 + + **方案 B — 锚点匹配**:新增参数 `anchor: { start: string, end: string }`,`start`/`end` 是首尾行的子串标记。工具内部搜索 `start` 所在行号 → 搜索其后第一个 `end` 所在行号 → 转为行号区间替换。不需要完整原文。**适用场景**:只知道替换块的首尾特征文本、不想粘贴整段 `old_text` 省 token。 + + **三种模式互斥**:`old_text`(现有精确匹配)/ `replace_lines`(行号区间)/ `anchor`(锚点)三选一,同时传多个报错。三种模式都需要 `path` + `new_text`。`expected_hash` 可选,三种模式通用。 + + **实现要点**:①方案 A/B 共用底层"按行号区间替换"逻辑(读全文 → 按行切分 → splice 替换 → 写回)②方案 B 锚点搜索用 `lines[].contains(start)` 子串匹配(大小写敏感,与 search_files 一致),找不到返 Err ③方案 A 行号越界返 Err ④三种模式都走现有的人工审批(Medium 风险)⑤`expected_hash` 在写回前校验文件未变。 + + **涉及文件**:`src-tauri/src/tools/` 或 patch_file handler 所在位置(tool_registry.rs / AI 工具层)+ DevFlow 自身的 AI 工具定义(如果 patch_file 是 DevFlow 内置工具)。需确认 patch_file 当前实现位置。 + ### 🔧 任务模块全栈核对(2026-06-16 · Explore 代理并行取证) > 来源:[任务模块问题分析-2026-06-16.md](./05-代码审查/任务模块问题分析-2026-06-16.md)。原清单 18 项核对:真 bug 7 项 + #8 路由漏注册去重(B-260616-09 已存在)、增强 5 项、假/部分假 3 项、去重 3 项。详见文档速览矩阵。