Agent 用字符串匹配定位目标代码,执行 str_replace。
| Agent | 实现方式 |
|---|---|
| Claude Code | Read/Write 工具,纯文本替换 |
| Codex | 纯文本替换 |
| Hermes | 纯文本替换 |
| OpenCode | 纯文本替换 |
| Cursor | 基于 VS Code 编辑 API |
典型失败场景:
str_replace 失败Agent 生成 diff patch,用行号定位插入/替换位置。
| Agent | 实现方式 |
|---|---|
| Aider | 生成 diff,git apply |
优点:比纯文本替换更精确,支持多处同时修改 缺点:行号在文件变化后会漂移;仍受 whitespace 问题困扰
用内容的 hash 值作为锚点定位代码,结合 AST 理解代码结构。
| Agent | 实现方式 |
|---|---|
| omp | Hash 锚定编辑(hashline)+ ast_edit + ast_grep |
Hash 锚定原理:
AST 感知编辑:
| 维度 | 纯文本替换 | Diff+行号 | Hash+AST |
|---|---|---|---|
| 精确度 | 低 | 中 | 高 |
| whitespace 问题 | 严重 | 中等 | 无 |
| stale file 保护 | 无 | 无 | 有(hash 校验) |
| token 效率 | 低 | 中 | 高(hash 短于文本) |
| 实现复杂度 | 低 | 中 | 高 |
| 支持 agent 数量 | 大多数 | 少数 | 仅 omp |