46 Commits

Author SHA1 Message Date
Michael Ramos 216815c12e feat: PR review support via GitHub URL (#324)
* feat(review): add runtime-agnostic PR provider

Introduces `packages/shared/pr-provider.ts` with a `PRRuntime` interface
(same pattern as ReviewGitRuntime in review-core.ts) and GitHub PR
operations: URL parsing, auth check, diff/metadata fetching, and file
content retrieval via `gh` CLI.

`packages/server/pr.ts` is the Bun wrapper that pre-binds the runtime,
matching the git.ts pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(review): add PR mode to review server

When `prMetadata` is provided to `startReviewServer`, the server enters
PR mode: `/api/diff` includes PR metadata and omits gitContext,
`/api/diff/switch` and `/api/git-add` return 400 (not applicable),
and `/api/file-content` fetches from GitHub API using base/head SHAs
instead of local git.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(review): PR review flow for Claude Code and OpenCode

Detects URL argument in `/plannotator-review` command. When a GitHub PR
URL is provided, fetches diff and metadata via `gh` CLI and starts the
review server in PR mode. Local review mode is unchanged when no URL
is passed.

Updates slash command definitions to pass $ARGUMENTS through.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(review): PR metadata display in review UI

Shows "PR Review" badge, PR title with link, and owner/repo in the
header when reviewing a pull request. Diff switcher and staging
controls auto-hide since gitContext is omitted in PR mode.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(review): contextualized PR feedback for agent

In PR mode, the feedback markdown now includes PR metadata (repo,
number, title, branches, URL) so the agent has full context about
the remote PR being reviewed. Removes the aggressive "address all
of them" instruction in PR mode since the content is self-explanatory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(review): extract exportReviewFeedback + add tests

Moves the pure feedback construction function from App.tsx to
utils/exportFeedback.ts so it can be unit tested. Drops the unused
`files` parameter. 11 tests covering local/PR headers, annotation
grouping, sorting, file-scope ordering, and suggested code rendering.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test(review): strengthen PR/local boundary tests

Replaces shallow header checks with comprehensive boundary assertions:
local mode must never contain PR-specific content (repo, URL, branches),
PR mode must include all context fields and exclude the generic header.
Covers null/undefined prMetadata edge cases.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test(review): remove redundant empty-annotations test

Covered by the "no annotations: returns generic empty regardless of
prMetadata" test which checks all three cases (no arg, null, PR mode).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(review): guard fetchPR, fix UTF-8 decoding, correct useCallback deps

- Wrap fetchPR() in try/catch in both hook and OpenCode entry points
  so network/auth errors show a clean message instead of a stack trace
- Replace atob() with Buffer.from() for UTF-8 correct base64 decoding
  of PR file content from GitHub API
- Fix stale useCallback deps in handleCopyFeedback (files → prMetadata)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(install): add $ARGUMENTS to review command for PR URL support

Install scripts were writing the review slash command without
$ARGUMENTS, so PR URLs passed to /plannotator-review were silently
dropped. Also switches PS1 heredoc to single-quoted to prevent
$ARGUMENTS from being expanded as a PowerShell variable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add PR review support to docs and READMEs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 06:01:40 -07:00
Michael Ramos afdc6f214e docs: add /plannotator-last to docs and install scripts (#327)
* docs: add /plannotator-last to READMEs and marketing docs

* feat: add /plannotator-last to install scripts


* fix: sync review command wording in install scripts with plugin

The plugin's plannotator-review.md was updated in #293 to handle
LGTM approvals but the install scripts still had the old wording.
2026-03-18 05:32:40 -07:00
Michael Ramos d2238ac736 Context for video demos 2026-03-13 19:06:50 -07:00
Michael Ramos 574d7af3da Enhance README with Code Review section and title update
Updated description to include 'Code' in the title and added a new section for Code Review.
2026-03-13 18:59:55 -07:00
Michael Ramos ddb5d53906 docs: tighten sharing section in README
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 01:23:44 -07:00
Michael Ramos 709e9ffaa1 docs: remove redundant encryption note, update Codex description
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 20:51:18 -07:00
Michael Ramos 3f51dbf72a docs: add Codex support (#261)
* docs: add Codex support documentation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(codex): note plan mode not yet supported

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(codex): move plan mode notice to top

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: note plan mode not yet supported in Codex sections

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: remove redundant Codex description line

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(codex): lead with supported features

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(codex): use ! prefix for shell commands

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 20:49:06 -07:00
Michael Ramos b1f91936d6 Deploy paste service with E2E encryption (#203)
* feat: Deploy paste service with end-to-end encryption (zero-knowledge)

Add AES-256-GCM client-side encryption to the short URL sharing flow.
Plans are encrypted in the browser before upload — the paste service
stores only ciphertext it cannot read. The decryption key lives only
in the URL fragment (#key=...) and never leaves the browser.

- New packages/shared/crypto.ts with encrypt/decrypt via Web Crypto API
- Encrypt before POST in createShortShareUrl, decrypt on load
- Parse #key= fragment in useSharing.ts for both direct and import URLs
- Deploy Cloudflare Worker with KV namespaces to workers.dev
- Add deploy-paste CI/CD job to deploy.yml
- Fix Cache-Control from public to private, no-store
- Update ExportModal strings with encryption messaging
- Update README, docs, and blog with zero-knowledge encryption details

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Address code review: fix short URL fallthrough and regex anchor

- Return false early when paste fetch fails on /p/<id> path instead of
  falling through to parseShareHash() (which can never succeed since the
  hash contains #key=, not plan data)
- Add end-anchor to importFromShareUrl regex to prevent false matches on
  URLs with extra path segments (regression from PR #188)
- Remove demo plan NOTE from README

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 10:21:53 -08:00
Michael Ramos 2b0843e9e1 Add sharing plans section to README
Added a section about sharing plans and annotations.
2026-02-24 12:17:44 -08:00
Michael Ramos effdd24c71 feat: Plan Diff marketing dialog, Pi origin, and docs (#177)
* feat: add Plan Diff marketing dialog, Pi origin support, and docs

- Add PlanDiffMarketing first-run dialog announcing the Plan Diff feature
  with per-origin video demo URLs (Claude Code, OpenCode, Pi)
- Add 'pi' as a first-class origin with display name and violet badge
- Add Plan Diff blog post (plan-diff-see-what-changed.md)
- Add brief Plan Diff mentions across READMEs and marketing docs


* polish: tighten blog post copy and reduce em dash usage


* fix: move PlanDiffMarketing to plan-diff/ and fix stale useEffect deps


* add plan diff preview screenshot for marketing dialog
2026-02-23 00:24:25 -08:00
Michael Ramos 2892acd9e3 docs: improve mobile table layout, update copyright to 2026 2026-02-21 18:22:51 -08:00
Michael Ramos dfc4f70d76 docs: add nowrap to features table columns 2026-02-21 12:40:50 -08:00
Michael Ramos 1836bbf4b2 docs: switch features table to HTML to remove header row 2026-02-21 12:39:55 -08:00
Michael Ramos fea9ffc98d docs: add features heading and command info to capabilities table 2026-02-21 12:39:18 -08:00
Michael Ramos 589874c4ac docs: add capabilities table to README 2026-02-21 12:37:20 -08:00
Michael Ramos ecaa502d87 feat: add Pi coding agent extension (#168)
Add Pi coding agent extension with Node-compatible servers, browser-based plan review, code review, and markdown annotation commands.
2026-02-21 11:43:46 -08:00
Michael Ramos 8c446250c0 chore: relicense from BSL-1.1 to dual MIT/Apache-2.0 (#144)
* chore: relicense from BSL-1.1 to dual MIT/Apache-2.0
* fix: correct copyright holder to backnotprop
2026-02-12 09:55:14 -08:00
Michael Ramos dff226f9ba docs: add Windows install script to OpenCode section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 05:12:33 -08:00
Michael Ramos d599563f56 docs: update README with OpenCode install script instructions
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 04:50:16 -08:00
Michael Ramos 70f4ea429e docs: add date tag to code review feature 2026-01-12 20:12:47 -08:00
Michael Ramos e1153ebeac fix: add update banner to code review screen
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 20:10:52 -08:00
Michael Ramos a427405201 fix: code review UI improvements for v0.5.1
- Show correct origin badge (Claude Code orange, OpenCode gray)
- Always show file tree sidebar when diff options available
- Update README with v0.5.0 label

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 20:06:00 -08:00
Michael Ramos 41eecc4480 chore: bump version to 0.5.0 for release
- Update version in root, opencode-plugin, and server packages
- Add code review feature to README
- Build artifacts for release

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 19:41:42 -08:00
Michael Ramos 34b373aaa4 Docs: update cache clearing to include bun cache
Users need to clear both ~/.cache/opencode and ~/.bun/install/cache
for a complete reset when stuck on old versions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 15:16:58 -08:00
Michael Ramos 1e293d3a07 Update README with image annotation feature
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 18:22:40 -08:00
Michael Ramos 8828ca01ba Feat: Add Bear Notes integration (#21)
- Add bear.ts utility for settings storage
- Add Bear toggle to Settings UI (simple on/off)
- Add saveToBear() using x-callback-url protocol
- Reuse extractTags() for inline #hashtags
- Change base tag from "plan" to "plannotator"
- Add test-hook-2.sh with alternate plan for testing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-04 10:14:36 -08:00
Michael Ramos 137ed35df0 Add cache clear instructions for existing OpenCode users
Users may be stuck on old plugin versions due to OpenCode's caching.
Added note to both READMEs with the rm command to clear the cache.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 13:34:17 -08:00
Michael Ramos 9535003826 docs: recommend @latest for OpenCode plugin install
OpenCode caches plugin versions, so without @latest users may not
get updates. Added note explaining this.
2026-01-03 13:16:29 -08:00
Michael Ramos 6aae06500c Feat/save to obsidian (#11)
* Add Obsidian integration for auto-saving approved plans

- Auto-detect Obsidian vaults from system config
- Settings UI with vault dropdown and folder config
- Save plans with YAML frontmatter (created, source, tags)
- Extract tags heuristically from H1 title and code fence languages
- Human-readable filenames: "Title - Jan 2, 2026 2-30pm.md"
- Cross-platform support (macOS, Windows, Linux)
- Add local test script for hook simulation

* Add backlinks and improve filename generation

- Add [[Plannotator Plans]] backlink to saved notes for graph connectivity
- Extract title from H1 for human-readable filenames
- Format: "Title - Jan 2, 2026 2-30pm.md"
- Add bulk test script for ~/.claude/plans
- Add fix script to add backlinks to existing vault files

* Add Obsidian integration docs to README, landing page, and plugins

- Root README: Quick note about Obsidian support after video table
- apps/hook README: Detailed setup and example file format
- apps/opencode-plugin README: Feature list and setup instructions
- Landing page: New "Save to Obsidian" feature card

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add Obsidian Integration section to README

* Screenshot Obsidian settings

Added an implementation plan section for user authentication.

* Update README with Obsidian auto-save feature

Added information about auto-saving approved plans to Obsidian.

* Update README with Obsidian integration link

Added link to details about Obsidian integration.

* Update README to include Obsidian auto-saving feature

Clarified the new feature for saving to Obsidian with a link.

---------
2026-01-02 11:08:19 -08:00
Michael Ramos c61cbc3942 cleaner readme 2025-12-30 21:30:56 -08:00
Michael Ramos 17ebb50b79 opencode plugin (#3)
* opencode plugin

* opencode plugin

* marketing copy updates

* opencode plugin marketing

* readme for open code

* readme enhancement;
2025-12-30 21:25:46 -08:00
Michael Ramos 43951bcd92 Add restart reminder inside plugin install code block
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 17:59:25 -08:00
Michael Ramos 7714c309b3 Use custom YouTube thumbnail in README
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 17:51:10 -08:00
Michael Ramos 8fcd0ef878 Update YouTube video links to actual demo video
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 17:47:43 -08:00
Michael Ramos 0c052aa158 Add restart note to plugin installation instructions
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 17:43:29 -08:00
Michael Ramos 1639d9b864 minimal copy edits 2025-12-28 15:46:04 -08:00
Michael Ramos 5eeec5164c minimal copy edits 2025-12-28 15:45:02 -08:00
Michael Ramos fede9ce837 remove development docs 2025-12-28 15:42:44 -08:00
Michael Ramos 984ba4109a Consolidate banner image to apps/marketing/public
README now uses og-image.webp from marketing public folder,
removing duplicate plannotator_banner.webp from repo root.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 15:37:12 -08:00
Michael Ramos 4797daf1e3 Add video placeholder to README 2025-12-28 15:18:21 -08:00
Michael Ramos 518e77c0da Update README description 2025-12-28 15:02:42 -08:00
Michael Ramos 04475efe6d Add banner image to README 2025-12-28 15:01:24 -08:00
Michael Ramos 3e22c570b4 Update documentation for install script distribution 2025-12-28 14:50:39 -08:00
Michael Ramos 6c4bb89cde Add npm distribution infrastructure and update landing page
npm distribution:
- Add npm/ directory with main package and platform-specific packages
- Add JS wrapper for cross-platform binary resolution
- Add GitHub Actions workflow for OIDC-based npm publishing
- Configure for darwin-arm64, darwin-x64, linux-x64, win32-x64

Plugin changes:
- Simplify apps/hook to config-only (calls `plannotator` from PATH)
- Add README with installation instructions

UI updates:
- Add theme toggle to Landing nav
- Update footer with author links and copyright
- Update copy: "How it works" step 3, Solution section
- Flip hero image horizontally
- Fix tater sprite z-index (behind dialogs)
- Change tater breakpoint from lg to md (show on tablets)
- Remove icon from editor header

Package metadata:
- Update root and npm package.json with full metadata
- Set version to 0.1.0
- Set license to BSL-1.1

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 13:28:51 -08:00
Michael Ramos 34297b5c55 Restructure to Bun monorepo with apps and packages
- apps/hooks: Claude Code hook integration (ExitPlanMode)
- apps/portal: Standalone web portal (future)
- apps/marketing: Landing page (future)
- packages/ui: Shared React components and utilities

Key improvements:
- Cookie-based settings persistence (works across random ports)
- Bundled highlight.js with per-block language detection
- Inline markdown rendering (bold, italic, code, links)
- Fixed sprite z-index layering

Legacy code preserved in legacy/ for reference.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 21:24:05 -08:00
Michael Ramos 92d4f73b66 Initial commit: Plannotator - Plan review UI for Claude Code
A React-based annotation tool that intercepts Claude Code's ExitPlanMode
to provide visual plan review with collaborative features.

Features:
- Markdown plan rendering with syntax highlighting
- Text selection annotations (delete, replace, insert, comment)
- Redline mode for quick deletion marking
- URL-based sharing via compressed hash (no server storage)
- Tater identity system for anonymous collaboration
- Export to diff format
- Dark/light theme support
- Tater sprite easter egg

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 18:14:10 -08:00