Hashline vs Builtin Edit 对比测试报告
量化对比接入 opencode-hashline 插件与不接入时(使用 OpenCode 内置 edit/write 工具)在 Token 效率、漂移检测、恢复能力和安全性方面的差异。
项目
值
测试日期
2026-06-29
commit
bac6ff7
Bun
1.3.14
@oh-my-pi/hashline
npm dependency (vendored core removed)
测试命令
bun test tests/comparison.test.ts
测试对象
hashline 核心库 (@oh-my-pi/hashline) — 直接测试 Patch/Patcher/SnapshotStore,非 plugin adapter
说明 :对比测试直接调用 hashline 核心库。在 OpenCode 中实际运行时,plugin adapter(src/tool-edit.ts)的错误处理更保守:遇到 MismatchError 直接返回 "re-read and retry",不尝试 3-way merge 恢复。T4(漂移检测)和 T8(伪造 TAG)在 adapter 中同样有效;T5(3-way merge)仅存在于核心库层面。
方式
说明
hashline
[path#TAG] + SWAP N.=M: 行锚补丁,TAG 内容校验
builtin edit
oldString → newString 精确字符串匹配(OpenCode 内置 edit 工具)
full-write
重写整个文件(write 工具)
#
场景
验证维度
T1
10 行文件单行编辑
小文件输入大小
T2
500 行文件单行编辑
大文件输入大小
T3
3 处非连续编辑
多 hunk 效率(调用次数 + 输入大小)
T4
文件被外部修改后编辑
漂移检测能力
T5
外部修改后的 3-way merge
恢复能力
T6
无漂移时的编辑正确性
功能等价性基线
T7
10-1000 行文件输入大小趋势
规模扩展性
T8
伪造 TAG 编辑
安全性
测试文件:tests/comparison.test.ts
hashline 测试通过 InMemoryFilesystem + InMemorySnapshotStore + Patcher.apply() 直接测核心层
builtin edit 模拟为 content.replace(oldString, newString) + 字节计数
full-write 模拟为整个文件内容重写 + 字节计数
文件行数
hashline
builtin edit
full-write
write/hash 比值
10
46 B
28 B
141 B
3.1x
50
49 B
31 B
780 B
15.9x
100
50 B
31 B
1,580 B
31.6x
500
53 B
34 B
8,779 B
165.6x
1000
54 B
34 B
17,779 B
329.2x
结论 :hashline 补丁输入恒定在 ~50 字节,不随文件大小增长。full-write 线性增长,1000 行时是 hashline 的 329 倍 。builtin edit 在单行编辑时输入最小(~30B),但缺少任何安全保障。
维度
hashline
builtin edit
full-write
输入大小
149 B
179 B
604 B
调用次数
1
3
1
结论 :3 处非连续编辑,hashline 一次调用完成;builtin edit 需要 3 次独立调用(3 倍 LLM 轮次开销)。
场景
hashline
builtin edit
文件被外部修改(目标行未变)
检测到 ,返回 actionable 错误
未检测到 ,静默应用
文件被外部修改(目标行已变)
检测到 ,返回 actionable 错误
仅报 "string not found"(无上下文)
结论 :hashline 的 TAG 校验 100% 检测到文件漂移,错误信息包含期望 TAG、实际 TAG 和上下文行;builtin edit 在目标行未变时静默应用编辑 ,存在覆盖外部修改的风险。
维度
hashline
builtin edit
3-way merge
成功 ,本地编辑 + 外部修改均保留
无 merge 能力
外部修改感知
有 (通过 TAG + snapshot 历史)
无 (盲写风险)
结论 :hashline 通过 snapshot 历史 3-way merge,同时保留本地编辑和外部修改;builtin edit 无感知能力,可能覆盖外部变更。
维度
hashline
builtin edit
伪造 TAG
拒绝 编辑
无 TAG 概念
过期 TAG
拒绝 + 恢复或提示 re-read
无校验
结论 :hashline 阻止伪造/过期编辑;builtin edit 无任何版本绑定机制。
维度
hashline
builtin edit
无漂移时编辑结果
"alpha\nBETA\ngamma"
"alpha\nBETA\ngamma"
结果一致
✅
✅
结论 :无漂移场景下两种方式结果完全一致,hashline 不引入正确性回归。
维度
hashline 优势
量化指标
Token 效率
大文件编辑时输入小 100-330 倍
1000 行文件:54B vs 17,779B
多 hunk
1 次调用完成 N 处编辑
3 hunk:1 call vs 3 calls
漂移检测
TAG 校验 100% 检测
builtin:0% 检测(静默应用)
恢复
3-way merge 保留所有变更
builtin:无恢复能力
安全
阻止伪造/过期编辑
builtin:无版本绑定
正确性
无漂移时与 builtin 结果一致
输出完全等价