2.2 KiB
2.2 KiB
| title | created | updated | type | tags | sources | ||||
|---|---|---|---|---|---|---|---|---|---|
| Patch Tool 模糊补丁工具 | 2026-04-16 | 2026-04-16 | entity |
|
|
Patch Tool 模糊补丁工具
概述
文件局部查找替换工具,支持 9 级模糊匹配。比 write_file 更安全(只改局部)、更省 token(不需要传完整文件内容)。注册在 tool-catalog 的 base 工具集。
Schema 定义(TypeBox)
const PatchParams = Type.Object({
path: Type.String({ description: '文件绝对路径' }),
old_string: Type.String({ description: '要查找的文本片段' }),
new_string: Type.String({ description: '替换为的文本' }),
replace_all: Type.Optional(Type.Boolean({ description: '替换所有匹配,默认 false' })),
});
执行流程
- 读取目标文件内容
- 调用
fuzzyFindAll()进行模糊匹配 - 验证匹配结果(0个报错 / 多个且非 replace_all 报错 / 唯一通过)
- 从后往前替换(避免索引偏移)
- 写回文件
9 级模糊匹配引擎
文件: tools/fuzzy_match.ts(~304行)
| 级别 | 策略 | 说明 |
|---|---|---|
| 1 | exact |
精确字符串匹配 |
| 2 | line_trimmed |
每行 trim 后匹配 |
| 3 | whitespace_normalized |
所有空白压缩为单空格 |
| 4 | indent_flexible |
去除行首缩进 |
| 5 | escape_normalized |
转义字符还原(\n → 换行) |
| 6 | trimmed_boundary |
首尾行 trim |
| 7 | unicode_normalized |
Unicode 标点归一化(智能引号等) |
| 8 | block_anchor |
首尾行锚定 + 中间相似度 |
| 9 | context_aware |
逐行相似度滑动窗口 |
核心算法: Levenshtein 编辑距离 → similarity = 1 - (distance / maxLen)
返回结构:
interface FuzzyMatchResult {
strategy: string; // 匹配策略名
startIndex: number; // 原始文本起始位置
endIndex: number; // 原始文本结束位置
matchedText: string; // 匹配的原始文本
}
关联页面
- tool-catalog — 工具目录系统(注册在 base 工具集)
- tool-system — 工具系统总览
- agent-runtime — Agent 运行时执行