Skip to content

Commit 34ee462

Browse files
authored
feat(vscode): marketplace publish + marketing VS Code tab (#463)
* feat(vscode): prepare VS Code extension for marketplace publish - Remove `private: true` to enable publishing - Add homepage, galleryBanner, update category to AI, bump version - Fix .vscodeignore monorepo leak (was packaging 548 files from parent workspace) - Upgrade @vscode/vsce to ^3.7.1 (fixes .cjs entry point validation) - Rewrite README for marketplace with CloudFront-hosted screenshots and GIF - Replace 128x128 placeholder icon with proper 256x256 icon - Add VS Code tab to marketing site hero section with marketplace link - Add VS Code SVG icon to marketing assets For provenance purposes, this commit was AI assisted. * fix: clean up HeroSection linkEl reference and unused variable For provenance purposes, this commit was AI assisted.
1 parent 6735266 commit 34ee462

7 files changed

Lines changed: 141 additions & 50 deletions

File tree

Lines changed: 10 additions & 0 deletions
Loading

apps/marketing/src/components/landing/HeroSection.astro

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,15 @@ import AnnoReplace from './AnnoReplace.astro';
8080
<img src="/assets/icon-pi.svg" alt="" class="w-4 h-4 icon-pi" />
8181
<span>Pi</span>
8282
</button>
83+
<button
84+
class="agent-btn"
85+
data-agent="vscode"
86+
data-command="curl -fsSL https://plannotator.ai/install.sh | bash"
87+
data-video=""
88+
>
89+
<img src="/assets/icon-vscode.svg" alt="" class="w-4 h-4" />
90+
<span>VS Code</span>
91+
</button>
8392
</div>
8493

8594
<!-- Install command block (desktop only) -->
@@ -207,18 +216,42 @@ import AnnoReplace from './AnnoReplace.astro';
207216
},
208217
pi: {
209218
detail: 'Or try without installing: pi -e npm:@plannotator/pi-extension'
219+
},
220+
vscode: {
221+
detail: 'Then install the VS Code extension for an integrated experience:',
222+
steps: [
223+
'/plugin marketplace add backnotprop/plannotator',
224+
'Restart Claude Code to activate hooks'
225+
],
226+
link: {
227+
text: 'Install VS Code Extension from Marketplace',
228+
url: 'https://marketplace.visualstudio.com/items?itemName=backnotprop.plannotator-webview'
229+
}
210230
}
211231
};
212232

233+
var installBlock = document.getElementById('install-block');
234+
var linkEl = document.getElementById('install-link');
235+
213236
function setAgent(btn) {
214237
buttons.forEach(function(b) { b.classList.remove('active'); });
215238
btn.classList.add('active');
216239
commandEl.textContent = btn.dataset.command;
217-
if (videoLink) videoLink.href = btn.dataset.video;
240+
if (videoLink) {
241+
if (btn.dataset.video) {
242+
videoLink.href = btn.dataset.video;
243+
videoLink.style.display = '';
244+
} else {
245+
videoLink.style.display = 'none';
246+
}
247+
}
218248

219249
var config = agents[btn.dataset.agent] || {};
220250
detailEl.textContent = config.detail || '';
221251

252+
// Show install command block
253+
installBlock.style.display = '';
254+
222255
// Clear all steps completely, then rebuild
223256
var allSteps = [step1El, step2El, step3El];
224257
allSteps.forEach(function(el) { el.innerHTML = ''; el.style.display = 'none'; });
@@ -232,6 +265,20 @@ import AnnoReplace from './AnnoReplace.astro';
232265
} else {
233266
stepsEl.classList.add('hidden');
234267
}
268+
269+
// Handle marketplace link
270+
if (linkEl) { linkEl.remove(); linkEl = null; }
271+
if (config.link) {
272+
var a = document.createElement('a');
273+
a.id = 'install-link';
274+
a.href = config.link.url;
275+
a.target = '_blank';
276+
a.rel = 'noopener noreferrer';
277+
a.className = 'mt-3 text-sm hidden sm:inline-flex items-center gap-1.5 text-muted-foreground hover:text-foreground transition-colors';
278+
a.innerHTML = config.link.text + ' <svg class="w-3.5 h-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"/></svg>';
279+
installBlock.parentNode.insertBefore(a, installBlock.nextSibling);
280+
linkEl = a;
281+
}
235282
}
236283

237284
buttons.forEach(function(btn) {
Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
*
2-
*/**
3-
4-
!bin/*
5-
!dist/*
6-
!images/*
7-
!LICENSE
8-
!README.md
9-
!CHANGELOG.md
10-
!package.json
1+
.vscode/**
2+
mocks/**
3+
scripts/**
4+
src/**
5+
tests/**
6+
node_modules/**
7+
*.ts
8+
!*.d.ts
9+
.gitignore
10+
tsconfig.json
11+
bun.lock
12+
../../**
13+
../**

apps/vscode-extension/README.md

Lines changed: 56 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,75 @@
22
<img src="images/icon.png" alt="Plannotator for VS Code" width="128" />
33
</p>
44

5-
[![VS Code Marketplace](https://img.shields.io/visual-studio-marketplace/v/7tg.plannotator-webview?label=Marketplace&logo=visualstudiocode)](https://marketplace.visualstudio.com/items?itemName=7tg.plannotator-webview)
6-
[![CI](https://github.com/7tg/plannotator-vscode/actions/workflows/ci.yml/badge.svg)](https://github.com/7tg/plannotator-vscode/actions/workflows/ci.yml)
7-
[![VS Code](https://img.shields.io/badge/VS%20Code-^1.85.0-blue?logo=visualstudiocode)](https://code.visualstudio.com/)
8-
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5+
<h1 align="center">Plannotator</h1>
96

10-
Opens [Plannotator](https://github.com/backnotprop/plannotator) plan reviews inside VS Code tabs instead of an external browser.
7+
<p align="center">
8+
Interactive plan review and code review for AI coding agents — inside VS Code.
9+
</p>
10+
11+
<p align="center">
12+
<a href="https://marketplace.visualstudio.com/items?itemName=backnotprop.plannotator-webview"><img src="https://img.shields.io/visual-studio-marketplace/v/backnotprop.plannotator-webview?label=Marketplace&logo=visualstudiocode" alt="VS Code Marketplace" /></a>
13+
<a href="https://code.visualstudio.com/"><img src="https://img.shields.io/badge/VS%20Code-^1.85.0-blue?logo=visualstudiocode" alt="VS Code" /></a>
14+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" /></a>
15+
</p>
16+
17+
Opens [Plannotator](https://plannotator.ai) plan reviews and code reviews inside VS Code tabs instead of an external browser. Works with Claude Code, OpenCode, and other AI agents running in the integrated terminal.
18+
19+
![Plannotator in VS Code](https://d17ygohy796f9l.cloudfront.net/vscode/plannotator-vscode.gif)
20+
21+
## Plan Review
22+
23+
Review, annotate, and approve AI-generated plans without leaving your editor. Add comments, mark deletions, compare versions with plan diffs, and send structured feedback back to the agent.
24+
25+
![Plan Review](https://d17ygohy796f9l.cloudfront.net/vscode/plan-review.jpeg)
26+
27+
![Plan Diffs](https://d17ygohy796f9l.cloudfront.net/vscode/plan-diffs.jpeg)
28+
29+
## Code Review
30+
31+
Review code changes with a full diff viewer, file tree, inline annotations, and AI-assisted review — all in a VS Code tab.
32+
33+
![Code Review](https://d17ygohy796f9l.cloudfront.net/vscode/code-review.jpeg)
1134

1235
## Features
1336

14-
- Automatically intercepts Plannotator browser opens and displays them in a VS Code panel
15-
- Persists your Plannotator settings (identity, permissions, editor preferences) across sessions
16-
- Auto-closes the panel when you approve or send feedback on a plan
17-
- Works with Claude Code running in VS Code's integrated terminal
18-
- Configurable via VS Code settings
19-
- Manual URL opening via command palette
37+
- **In-editor plan review** — approve or deny plans with annotated feedback, directly in a VS Code tab
38+
- **In-editor code review** — review git diffs and PR changes with inline comments and suggestions
39+
- **Editor annotations** — select code directly in your editor and annotate it with `Cmd+Shift+.` — annotations appear in the Plannotator review UI alongside inline comments
40+
- **Theme sync** — Plannotator adapts to your VS Code color theme automatically
41+
- **Cookie persistence** — your identity, settings, and preferences persist across sessions
42+
- **Auto-close** — panels close automatically when you approve or send feedback
2043

2144
## How It Works
2245

23-
When Plannotator opens a browser to show a plan review, this extension intercepts the request and opens it in a VS Code panel instead:
46+
1. The extension injects a `PLANNOTATOR_BROWSER` env var into integrated terminals
47+
2. When Plannotator opens a URL, a bundled router script sends it to the extension via a local IPC server
48+
3. The extension opens the URL in a WebviewPanel with an embedded iframe
49+
4. A reverse proxy handles cookie persistence transparently (VS Code webview iframes don't support cookies natively)
2450

25-
1. The extension injects a `PLANNOTATOR_BROWSER` environment variable into integrated terminals
26-
2. When Plannotator opens a URL, the bundled router script sends it to the extension via a local HTTP server
27-
3. The extension opens the URL in a custom WebviewPanel with an embedded iframe
28-
4. A local reverse proxy handles cookie persistence (VS Code webview iframes don't support cookies natively) — settings are stored in VS Code's global state and restored transparently
51+
## Getting Started
2952

30-
## Requirements
53+
1. Install this extension from the VS Code Marketplace
54+
2. Install the [Plannotator Claude Code plugin](https://github.com/backnotprop/plannotator):
55+
```
56+
/install-plugin backnotprop/plannotator
57+
```
58+
3. **Launch Claude Code from VS Code's integrated terminal** — this is required so the extension can intercept browser opens. Plan reviews, code reviews, and annotations will automatically open in VS Code tabs instead of an external browser.
3159

32-
- [Plannotator](https://github.com/backnotprop/plannotator) installed
33-
- VS Code 1.85.0+
60+
> **Note:** Terminals opened before the extension activates won't have the required environment variables. If plans open in an external browser, open a new integrated terminal and try again.
3461
3562
## Configuration
3663

3764
| Setting | Default | Description |
3865
|---------|---------|-------------|
39-
| `plannotatorWebview.injectBrowser` | `true` | Inject PLANNOTATOR_BROWSER env var into integrated terminals |
66+
| `plannotatorWebview.injectBrowser` | `true` | Redirect Plannotator to open in VS Code instead of an external browser |
4067

4168
## Commands
4269

43-
- **Plannotator: Open URL** — Manually open a Plannotator URL in a panel
70+
| Command | Keybinding | Description |
71+
|---------|------------|-------------|
72+
| **Plannotator: Open URL** || Manually open a Plannotator URL in a panel |
73+
| **Plannotator: Add Annotation** | `Cmd+Shift+.` | Annotate selected code in the editor |
4474

4575
## Troubleshooting
4676

@@ -52,6 +82,11 @@ When Plannotator opens a browser to show a plan review, this extension intercept
5282
- Check if Plannotator's server is still running
5383
- Some network configurations may block localhost access from the webview
5484

85+
## Requirements
86+
87+
- [Plannotator](https://github.com/backnotprop/plannotator) Claude Code plugin installed
88+
- VS Code 1.85.0+
89+
5590
## License
5691

5792
MIT
101 KB
Loading

apps/vscode-extension/package.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
"name": "plannotator-webview",
33
"displayName": "Plannotator",
44
"description": "Opens Plannotator plan reviews inside VS Code tabs instead of an external browser",
5-
"version": "0.5.2",
6-
"private": true,
5+
"version": "0.16.5",
76
"publisher": "backnotprop",
87
"license": "MIT",
8+
"homepage": "https://plannotator.ai",
99
"repository": {
1010
"type": "git",
1111
"url": "git+https://github.com/backnotprop/plannotator.git",
@@ -15,14 +15,17 @@
1515
"url": "https://github.com/backnotprop/plannotator/issues"
1616
},
1717
"icon": "images/icon.png",
18-
"categories": ["Other"],
18+
"galleryBanner": {
19+
"color": "#1e1e2e",
20+
"theme": "dark"
21+
},
22+
"categories": ["AI"],
1923
"keywords": ["plannotator", "plan review", "claude", "ai", "webview"],
2024
"engines": {
2125
"vscode": "^1.85.0"
2226
},
2327
"extensionKind": ["workspace", "ui"],
2428
"main": "./dist/extension.cjs",
25-
"type": "module",
2629
"activationEvents": [
2730
"onStartupFinished"
2831
],
@@ -101,7 +104,7 @@
101104
"devDependencies": {
102105
"@types/bun": "latest",
103106
"@types/vscode": "^1.85.0",
104-
"@vscode/vsce": "^3.0.0",
107+
"@vscode/vsce": "^3.7.1",
105108
"esbuild": "^0.24.0",
106109
"typescript": "^5.0.0"
107110
}

bun.lock

Lines changed: 6 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)