- Plugin loading failure —
hashlineEditToolobject export caused OpenCode's legacy plugin detection to throw"Plugin export is not a function". Removed the public export (internal use only).
- Success log — plugin now emits
opencode-hashline plugin loadedto OpenCode logs on successful initialization.
- Format v2 syntax —
SWAP/DEL/INS.PRE/INS.POST/INS.HEAD/INS.TAIL/REM/MVwith.=range separator - Test suite — 63 tests across 8 files: core patch/format/tag/recovery, hook, tool-edit, workflow
- Comparison test suite — T1-T8 scenarios quantifying hashline vs builtin edit in token efficiency, drift detection, recovery, and safety
docs/test-design.md— 31-scenario test matrixdocs/comparison-report.md— quantitative comparison reportdocs/publish.md— npm publish instructions
- Depend on
@oh-my-pi/hashline— removed vendoredsrc/core/(16 files, ~6800 lines); this repo is now a thin OpenCode adapter only vitest→bun:test— removedvitestdev dependency andvitest.config.ts; all 8 test files usebun:test- Bun runtime —
engines.bun >= 1.3.14; tests run withbun test - Plugin simplified — dropped Patcher pool, snapshot file system via store
- Block resolution (
SWAP.BLK) — tree-sitter native bindings not bundled; useSWAP N.=M:line ranges instead - Repair mode — custom Patcher pool removed; 3-way merge recovery now handled by upstream Patcher's built-in
Recovery(auto-created, no wiring needed) computeTagexport — no longer exposed fromread-snapshot.tsdiff/lru-cachedependencies — already satisfied by@oh-my-pi/hashline./core/typesexports subpath — types now come from@oh-my-pi/hashline
- Initial release: hashline patch language plugin for OpenCode
edittool override — line-anchored, tag-verified edits replace the built-in exact-stringedittool- Read hook —
tool.execute.afterhook injects[path#TAG]snapshot tags into allreadoutput InMemorySnapshotStore— session-level tag caching and validation- 3-way merge recovery — drift recovery via snapshot history for stale-tag edits
- Format v1 syntax —
replace/delete/insert before/insert after/insert after block/insert head/insert tailwith..range separator - Block resolution —
replace block N:/delete block N:via tree-sitter parser - Vendored core — full hashline engine from oh-my-pi under
src/core/ docs/cross-platform-plugins.md— cross-platform plugin support research note