oh-my-openagent 怎么开启 hashline_edit 并验证哈希锚定编辑生效?
【免费下载链接】oh-my-openagentOmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent
在 oh-my-openagent(OmO)的 OpenCode Ultimate Edition 中,默认的Edit工具要求模型逐字复现要修改的行内容,一旦复现失败,编辑就会落到错误位置或报错。开启hashline_edit后,OmO 会用哈希锚定的edit工具替换内置Edit:每次Read的输出中每行都带上LINE#ID内容哈希标记,编辑按这些标记定位,应用前校验哈希,文件自上次读取后变化过就直接拒绝,而不是带着脏数据继续改。
本文覆盖的操作目标只有一个:在~/.omo/omo.jsonc中把hashline_edit设为true,然后确认哈希标记出现在 Read 输出、edit工具已切换为哈希锚定版本、过期编辑会被拒绝。
准备条件
- 已按 安装指南 安装 Ultimate Edition(OpenCode 宿主):
bunx oh-my-openagent install。该功能是 OpenCode 插件侧的特性,Codex Light 版与本文路径无关。 - 确认自己的配置文件位置。OmO 各宿主统一读一个配置文件(配置参考):
- 用户层(最低优先级):
~/.omo/omo.jsonc - 项目层:从当前工作目录向上逐级查找的
.omo/omo.jsonc,离工作目录越近优先级越高
- 用户层(最低优先级):
配置文件是 JSONC,支持//行注释和尾逗号。hashline_edit默认关闭,不开启时edit仍是 OpenCode 原生的按行号编辑。
开启 hashline_edit
在配置文件的[opencode]块内加入布尔开关hashline_edit: true。最小改动示例:
{ "[opencode]": { "hashline_edit": true } }仓库自带的完整编码向示例 coding-focused.jsonc 中,该键就放在[opencode]块下("hashline_edit": true),可对照格式。JSONC 支持尾逗号,写法和上面一致。
如果已有其他配置,只需要在原有[opencode]块里追加这一个键,不需要改动 agents、hooks 等其他部分。
配置生效后,OmO 会做两件事(configuration.md - Hashline Edit):
- 注册哈希锚定的
edit工具,替换 OpenCode 的行号编辑; - 激活伴随钩子
hashline-read-enhancer,负责给 Read 输出打上LINE#ID标记。
验证哈希锚定编辑生效
1. Read 输出出现 LINE#ID 标记
让 agent 读取任意一个文件,检查Read工具输出是否每行都带上了行号#ID前缀,格式为{line_number}#{hash_id},hash_id是 2 个字符,取自字符集ZPMQVRWSNKTXJBYH,标签与行内容之间用|分隔。README 中给出的示例输出(文档示例,实际行号与哈希随文件内容变化):
11#VK| function hello() { 22#XJ| return "world"; 33#MB| }如果 Read 输出仍是普通行号、没有#ID标记,说明配置没有加载到当前会话,回到配置文件中检查hashline_edit是否位于[opencode]块内,并重启 OpenCode 会话后重读文件。
2. edit 工具已切换为哈希锚定版本
按 features.md - Tools 的说明,哈希锚定的edit工具(LINE#ID)只有在hashline_edit: true时才会注册,默认是false。启用后 agent 发起编辑时引用的就是这些标签,而不是纯行号。
编辑操作的输入形如(来自工具实现文档 hashline-edit/AGENTS.md 的示例):
{ "op": "replace", "pos": "42#VK", "lines": "function hello(name: string) {" }其中42#VK表示"哈希为 VK 的第 42 行"。所有编辑只用replace/append/prepend三种操作。
3. 过期编辑被拒绝
这是哈希锚定的核心价值,也是最终验证点:在文件自上次 Read 之后发生变化时再次发起编辑,哈希会失配,编辑在写入前就被拒绝,并返回带当前文件状态的 diff,而不是静默写坏文件。
按实现文档列出的行为核对:
- 哈希不匹配(文件已改动)→ 编辑被拒绝,附当前状态的 diff;
- 编辑范围重叠 → 检测到并拒绝;
replace缺少pos、或append/prepend的lines为空 → schema 校验报错。
验证方式:让 agent 读一个文件,然后你手动修改该文件再要求 agent 修改同一区域;如果 agent 的编辑被拒绝且提示内容与当前文件状态不符,说明哈希校验在工作。反过来,未改动的文件上按标签编辑应正常应用,并在结果中给出 unified diff 输出。
可选分支:关闭伴随钩子或整体回退
- 只想关闭 Read 输出加标记、保留
edit工具本身:用disabled_hooks禁用hashline-read-enhancer(configuration.md 明确支持)。 - 需要旧的行号编辑行为:installation.md 的 Hashline 一节给出的关闭方式是
hashline_edit.enabled: false;configuration.md 记录的形式是布尔值hashline_edit。两处文档写法不同,按你当前版本文档为准即可,语义都是回到 legacy 编辑。
限制
- 该功能仅属于 Ultimate Edition(OpenCode 插件);Light(Codex CLI)与 Senpi 不受此配置控制。
- 开启后
Edit即被替换,不再可用旧的按行号编辑路径,二者不并存。 hashline_edit默认关闭,不配置时的行为与升级前一致。
参考文档
- Hashline Edit 配置项
- Hash-anchored edits(安装指南章节)
- edit 工具注册条件
- hashline-edit 工具实现说明
- 编码向配置示例
【免费下载链接】oh-my-openagentOmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考