All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- npm package metadata — repository, homepage, and bugs URLs now point to
morphllm/opencode-morph-plugin(previously pointed to forkedJRedeker/opencode-morph-fast-apply) - npm README — updated to include Public Repo Context tool and current installation instructions
- Public Repo Context (
warpgrep_github_search) — grounded context search for public GitHub repos without cloning - Resolver-style failures — wrong repo locators now return
Did you mean ...suggestions
- Major version bump for new tool additions and API surface changes
- Stable instruction path guidance — installation docs now prefer
~/.config/opencode/instructions/morph-tools.mdas the primary OpenCode instruction path, with the packagednode_modules/...path documented as a fallback for direct installs. - Canonical routing policy wording —
instructions/morph-tools.mdnow explicitly documents thatmorph_editguidance belongs in always-on instructions, not a skill. - Documentation alignment — tests now verify the preferred stable instruction path and the canonical always-on policy language so README/instruction guidance does not drift.
- Packaged always-on instruction —
instructions/morph-tools.mdnow ships with the plugin so OpenCode can load reliablemorph_edittool-selection guidance through theinstructionsarray. - Packaging coverage — package metadata now includes the
instructions/directory and tests verify the shipped instruction path is documented.
- Installation docs now recommend adding the packaged always-on instruction to global OpenCode config for more reliable
morph_editselection.
- Self-contained tool description: All agent guidance (decision table, marker rules, disambiguation, fallback) is now embedded directly in the
morph_edittool description. No external skill or instructions file needed.
- Skill pattern: Deleted
skills/morph/SKILL.md— the skill added a round-trip and split-brain problem where guidance lived in multiple places - Legacy instructions: Deleted
MORPH_INSTRUCTIONS.md— redundant with the tool description; the README serves as human-readable docs MORPH_SKILL_LOAD_HINTexport: Agents no longer need to load a skill before usingmorph_edit- Skill hint test: Removed the regression test for the now-deleted skill hint
- Input normalization:
normalizeCodeEditInput()strips markdown fences from LLM-wrappedcode_editto prevent Morph API confusion - Marker leakage guard: Post-merge validation detects when Morph treats
// ... existing code ...markers as literal text instead of expanding them — aborts file write and returns actionable error - Catastrophic truncation guard: Dual-metric validation (>60% char loss AND >50% line loss) prevents silent data loss from failed merges
- Structured error recovery: Guard failures include specific metrics, explanations, and 3 actionable recovery options
- TUI titles for guard failures:
tool.execute.afterhook now shows branded titles likeMorph: blocked (marker leakage)andMorph: blocked (truncation) - Test suite: 32 tests covering normalization, marker leakage logic, and truncation detection edge cases
EXISTING_CODE_MARKERconstant: Extracted to module-level export for consistency and testability- Guard logging: Both post-merge guards emit diagnostic
warn-level logs before returning errors - Hardcoded marker strings: All references to
"// ... existing code ..."now use theEXISTING_CODE_MARKERconstant
- Custom TUI display: Uses
tool.execute.afterhook to show branded titles likeMorph: src/file.ts +15/-3 (450ms) - API timing: Tracks and displays Morph API response time in output
- Structured metadata: Adds provider, version, and model info to tool metadata for future TUI enhancements
- Output format: Now includes API timing in milliseconds for performance visibility
- Readonly agent protection: Blocks
morph_editinplanandexploreagents to prevent accidental file modifications in read-only modes - Environment override:
MORPH_ALLOW_READONLY_AGENTS=trueto bypass readonly protection when needed - Usage guidelines in tool description: Helps AI choose between
morph_editand nativeedittool
- Structured logging: Replaced
console.log/console.warnwithclient.app.log()SDK method - Stderr fallback: Falls back to
process.stderr.write()if SDK logging fails - Improved documentation: Reorganized MORPH_INSTRUCTIONS.md with clearer tool selection guidance
- JSON output pollution: Plugin no longer writes to stdout during initialization, fixing compatibility with
opencode exportand other tools that parse JSON output (e.g., tokenscope)
- Pre-flight marker validation to prevent accidental file corruption
- Warning for files >10 lines edited without
// ... existing code ...markers
- Console warning that leaked into user input area
- Aligned tool schema with Morph official spec
- Reduced instruction size by 72%
- MIT license
- Improved README for GitHub publication
- Updated installation docs to use plugin array config
- Initial release
- Morph Fast Apply API integration
morph_edittool for efficient partial file edits- Unified diff output with change statistics