新增: F-260617-01 patch_file增强需求登记(行号区间+锚点匹配)
This commit is contained in:
12
docs/todo.md
12
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。
|
- [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 · Explore 代理并行取证)
|
||||||
|
|
||||||
> 来源:[任务模块问题分析-2026-06-16.md](./05-代码审查/任务模块问题分析-2026-06-16.md)。原清单 18 项核对:真 bug 7 项 + #8 路由漏注册去重(B-260616-09 已存在)、增强 5 项、假/部分假 3 项、去重 3 项。详见文档速览矩阵。
|
> 来源:[任务模块问题分析-2026-06-16.md](./05-代码审查/任务模块问题分析-2026-06-16.md)。原清单 18 项核对:真 bug 7 项 + #8 路由漏注册去重(B-260616-09 已存在)、增强 5 项、假/部分假 3 项、去重 3 项。详见文档速览矩阵。
|
||||||
|
|||||||
Reference in New Issue
Block a user