github backnotprop/plannotator v0.14.3

2 hours ago

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.14.2 OpenCode plan mode prompt replacement, Windows non-ASCII path fix, Pi link fix
v0.14.1 Single submit_plan with auto-detect, viewed-file draft persistence, Bear nested tag fix
v0.14.0 PR review via GitHub URL, /plannotator-last for annotating agent messages, OpenCode plan mode permissions fix, VS Code SSH proxy fix
v0.13.1 OpenCode plan mode rewrite, Obsidian save fix
v0.13.0 Built-in themes, annotatable plan diffs, file-scoped code review comments, Octarine integration, unified review core, Pi remote sessions
v0.12.0 Quick annotation labels, mobile compatibility, Graphviz rendering, markdown images with lightbox, linked doc navigation in annotate mode
v0.11.4 Git add from code review, bidirectional scroll navigation, clipboard paste for annotation images, VS Code IPC port stability
v0.11.3 Expandable diff context, hierarchical folder tree, redesigned worktree controls, supply chain hardening
v0.11.2 Git worktree support in code review, VS Code editor annotations in review, Obsidian auto-save & separator settings, session discovery, smart file resolution
v0.11.1 VS Code extension for in-editor plan review, Pinpoint mode for point-and-click annotations, untracked files in code review
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout

What's New in v0.14.3

v0.14.3 brings two major additions to the code review UI and a community bug fix for OpenCode permissions. The review panel now surfaces PR context directly alongside the diff, and a search system lets you find text across all changed files. 4 PRs, 2 from external contributors.

See the new PR features with:

codex: !plannotator review <github-pr-url>

others: /plannotator-review <github-pr-url>

PR Context Panel in Code Review

When reviewing a GitHub PR, the review panel now shows three additional tabs: Summary, Comments, and Checks. These appear as icon buttons in the panel header and load lazily on first click.

The Summary tab displays the PR description with full markdown rendering, labels as colored badges, linked issues, and the PR's state (open, draft, merged, closed). The Comments tab shows the full conversation thread in chronological order, merging regular comments and review comments with state badges indicating whether a review approved, requested changes, or just commented. The Checks tab shows merge readiness, CI check results grouped by workflow, and review approval status.

All GitHub-authored HTML content is sanitized through DOMPurify before rendering. The data layer uses a runtime-agnostic provider in @plannotator/shared that abstracts gh CLI calls, so the same fetching logic works across Bun and Node runtimes.

These tabs only appear when reviewing a PR URL. Local diff reviews are unchanged.

Diff Search in Code Review

The file tree sidebar now includes a search input. Type a query (or press Cmd+F / Ctrl+F) to search across all changed files in the diff. Results replace the file tree, grouped by file with match count badges. Clicking a result navigates to that file and scrolls to the matching line.

The search engine parses unified diff patches into searchable lines, handling additions, deletions, and context lines separately. Each match gets a stable identifier tied to file, side, and line number, so highlights survive re-renders. Active matches highlight in amber; passive matches in yellow. The highlight system traverses shadow DOM boundaries to reach into the diff renderer's internals.

Keyboard navigation works throughout: Enter and F3 step forward through matches, Shift+Enter steps backward, and Escape clears the search and restores the file tree. For single-file diffs (which have no sidebar), Cmd+F falls through to the browser's native find.

The search engine and highlight utilities were originally written by @sercantor in #344. The sidebar integration and DiffViewer wiring are new in this PR.

OpenCode Permission Normalization Fix

When OpenCode users configure the deprecated tools field on the plan agent (e.g., "tools": { "edit": false }), OpenCode's config resolver converts it to permission.edit = "deny" as a plain string. Plannotator's config hook then spreads that value to merge additional rules. Spreading a string in JavaScript produces { "0": "d", "1": "e", "2": "n", "3": "y" }, which corrupts the permission ruleset and triggers four zod validation errors at startup.

The fix adds a normalizeEditPermission() step that converts string values to wildcard objects ("deny" becomes { "*": "deny" }) before the spread. Object values pass through unchanged. This handles both the deprecated tools path and users who write permission: { edit: "deny" } directly.

Additional Changes

  • Landing page revamp for plannotator.ai with editorial column layout, interactive terminal demos simulating plan review and code review workflows, agent-specific install commands, a capabilities grid, and a build-time contributor strip via GitHub's GraphQL API. All screenshots converted to WebP (42MB down to 620KB). #349

Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows:

irm https://plannotator.ai/install.ps1 | iex

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

OpenCode: Clear cache and restart:

rm -rf ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

Contributors

@rockneurotiko reported the OpenCode permission corruption bug in #338 with a clear reproduction case showing the zod validation errors, then wrote the fix in #345 with full test coverage for all permission input shapes.

@sercantor filed the diff search feature request in #343 and built the search engine, highlight system, and React hook in #344. Those utilities were integrated into the sidebar in #347.

Full Changelog: v0.14.2...v0.14.3

Don't miss a new plannotator release

NewReleases is sending notifications on new releases.