Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
f479991
docs: add homescreen webview design spec
njb90 Mar 30, 2026
f4ac489
docs: add homescreen webview implementation plan
njb90 Mar 30, 2026
4978872
build: add homescreen client script entry to esbuild
njb90 Mar 30, 2026
cb1e1c4
feat: add homescreen client script
njb90 Mar 30, 2026
93e3d8f
feat: add HomescreenViewProvider
njb90 Mar 30, 2026
bed8fd4
feat: register showHomescreen and showLibrary commands
njb90 Mar 30, 2026
f7dfc2d
feat: register homescreen view and navigation commands in package.json
njb90 Mar 30, 2026
4e5e37f
feat: wire up HomescreenViewProvider in extension activation
njb90 Mar 30, 2026
8002ff3
fix: use initCommon() in homescreen client script for pattern consist…
njb90 Mar 30, 2026
782f8c6
fix: show homescreen by default before extension activates
njb90 Mar 30, 2026
accf5f1
fix: use addEventListener instead of onclick to comply with CSP
njb90 Mar 30, 2026
31a00f5
fix: initialize VS Code API before registering DOM event listeners
njb90 Mar 30, 2026
3fa3e3f
feat: redesign homescreen with Cloudinary branding and AI tools place…
njb90 Mar 30, 2026
5b50129
docs: add env-switch webview refresh design spec
njb90 Mar 30, 2026
bebca31
docs: add env-switch webview refresh implementation plan
njb90 Mar 30, 2026
48b6c48
feat: add onDidChangeEnvironment event to CloudinaryTreeDataProvider
njb90 Mar 30, 2026
43cf622
feat: add refresh() to HomescreenViewProvider
njb90 Mar 30, 2026
a0efcc3
feat: export resetUploadPanel for environment change handling
njb90 Mar 30, 2026
af0417e
feat: export resetAllPreviewPanels for environment change handling
njb90 Mar 30, 2026
b475aac
feat: wire up webview refresh on environment switch
njb90 Mar 30, 2026
d835da9
fix: null out uploadPanel synchronously before reopening in resetUplo…
njb90 Mar 30, 2026
c64b866
fix: show cloud name in upload panel title, fetch presets on env swit…
njb90 Mar 31, 2026
b89c472
fix: close upload and preview panels on env switch instead of in-plac…
njb90 Mar 31, 2026
f06ba00
fix: use tabGroups API to close preview panels on env switch
njb90 Mar 31, 2026
3712ae6
feat: close preview panels and fix homescreen refresh on env switch
njb90 Mar 31, 2026
c120446
docs: add Configure AI Tools design spec
njb90 Mar 31, 2026
46197cd
docs: use detectEditor() to pre-select IDE target in skills picker
njb90 Apr 1, 2026
c2d213d
docs: add Configure AI Tools implementation plan
njb90 Apr 1, 2026
8b54a4b
feat: add configureAiTools command with GitHub skill fetch and IDE-sp…
njb90 Apr 1, 2026
8267896
fix: correct dir name usage, dedup copilot sections, per-file ref err…
njb90 Apr 1, 2026
f40f2c0
feat: register cloudinary.configureAiTools command
njb90 Apr 1, 2026
9c3ad95
feat: enable Configure AI Tools homescreen button and wire up message…
njb90 Apr 1, 2026
58ef514
fix: catch install errors for Cursor/Copilot and show feedback when n…
njb90 Apr 1, 2026
f4ed82f
feat: populate MCP config with Cloudinary servers + add GitHub auth f…
njb90 Apr 1, 2026
5892eb6
fix: retry GitHub API request with auth on 401/403/404
njb90 Apr 1, 2026
f7c9363
docs: add design spec for configure-ai-tools v2
njb90 Apr 1, 2026
1b09b99
docs: add implementation plan for configure-ai-tools v2
njb90 Apr 1, 2026
bfefda5
feat: switch MCP servers to remote OAuth URLs
njb90 Apr 1, 2026
959080d
feat: add skill and MCP status-detection helpers
njb90 Apr 1, 2026
2f9565d
feat: reorder skills flow and annotate QuickPicks with install status
njb90 Apr 1, 2026
c23a9cf
chore: document intentional picked:true asymmetry in skills picker
njb90 Apr 1, 2026
0a99b7b
docs: add design spec for configure-ai-tools webview accordion panel
njb90 Apr 1, 2026
d640a96
design: add configure-ai-tools accordion UI prototype
njb90 Apr 1, 2026
fbf0cf2
docs: add webview accordion implementation plan
njb90 Apr 1, 2026
a8f78f8
refactor: extract AI tools business logic into aiToolsService
njb90 Apr 2, 2026
cc301c8
feat: add accordion HTML and CSS to homescreen sidebar
njb90 Apr 2, 2026
0a2e679
feat: add aiToolsExpanded and installAiTools message handlers to Home…
njb90 Apr 2, 2026
b984692
fix: await async message handlers to prevent floating promises
njb90 Apr 2, 2026
7f91537
feat: rewrite homescreen client with AI tools accordion state machine
njb90 Apr 2, 2026
3c5d378
fix: add HTML escaping and null safety to homescreen client
njb90 Apr 2, 2026
638c70c
fix: add data-command attributes to action buttons and chevron open CSS
njb90 Apr 2, 2026
e074608
fix: add click listener for configure button
njb90 Apr 2, 2026
75f045c
docs: add multi-platform accordion redesign spec
njb90 Apr 2, 2026
c58e3df
docs: add multi-platform accordion implementation plan
njb90 Apr 2, 2026
dc96cf2
feat: add PlatformId types, installForUniversal/Windsurf, detectActiv…
njb90 Apr 2, 2026
3eac643
style: fix quote style and formatting in new install functions
njb90 Apr 2, 2026
618b674
feat: replace IDE segmented control with platform checklist in homesc…
njb90 Apr 2, 2026
cf66fc7
fix: map QuickPick IDE labels to PlatformId for readInstalledSkillDir…
njb90 Apr 2, 2026
31e94c4
fix: detect internal install errors and drop stale Cursor status mapping
njb90 Apr 2, 2026
7db2205
feat: replace IDE selector with multi-platform checklist in homescree…
njb90 Apr 2, 2026
8e3850e
feat: lock installed skills and show uninstall hint
njb90 Apr 2, 2026
24cfeac
feat: lock configured MCP servers and platforms with existing installs
njb90 Apr 2, 2026
596ae4c
feat: simplify to primary platform status with optional additional pl…
njb90 Apr 2, 2026
2c317c4
fix: don't pre-check unconfigured MCP servers
njb90 Apr 2, 2026
4845635
feat: reload status after apply instead of showing done state
njb90 Apr 2, 2026
27d9661
fix: reset Apply button text on data reload
njb90 Apr 2, 2026
cc51261
feat: rework homescreen dashboard with search, env switcher, and AI t…
njb90 Apr 7, 2026
c533236
ci: add workflow to build installable VSIX from feature branches
njb90 Apr 7, 2026
f59145b
ci: fix vsix build trigger and branch name sanitization
njb90 Apr 7, 2026
ebb1d3f
chore: exclude docs/superpowers from git
njb90 Apr 7, 2026
4fede44
ci: stamp pre-release version in vsix build
njb90 Apr 7, 2026
662b962
ci: post vsix download link as a PR comment
njb90 Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions .github/workflows/build-vsix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: Build VSIX

on:
pull_request:
branches:
- main
types: [opened, synchronize, reopened]

jobs:
build-vsix:
name: Build installable VSIX
runs-on: ubuntu-latest
permissions:
pull-requests: write

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm

- name: Install dependencies
run: npm ci

- name: Run linting
run: npm run lint

- name: Sanitize branch name
id: branch
run: echo "name=$(echo '${{ github.head_ref }}' | tr '/' '-')" >> "$GITHUB_OUTPUT"

- name: Stamp pre-release version
run: |
BASE=$(node -p "require('./package.json').version")
jq ".version = \"${BASE}-pr.${{ github.event.pull_request.number }}\"" package.json > package.tmp.json
mv package.tmp.json package.json

- name: Package extension
run: npx @vscode/vsce package --no-dependencies -o cloudinary-${{ steps.branch.outputs.name }}.vsix

- name: Upload VSIX artifact
id: upload
uses: actions/upload-artifact@v4
with:
name: cloudinary-${{ steps.branch.outputs.name }}
path: cloudinary-${{ steps.branch.outputs.name }}.vsix
retention-days: 14

- name: Post download link to PR
uses: actions/github-script@v7
with:
script: |
const marker = '<!-- vsix-build-comment -->';
const runUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
const version = require('./package.json').version;
const body = [
marker,
`### 📦 Test VSIX ready`,
`**Version:** \`${version}\``,
`**Artifact:** [cloudinary-${{ steps.branch.outputs.name }}](${runUrl})`,
``,
`**To install:**`,
`1. Download the \`.vsix\` from the link above (under Artifacts)`,
`2. In VS Code: \`Extensions → ··· → Install from VSIX…\``,
` or run: \`code --install-extension cloudinary-${{ steps.branch.outputs.name }}.vsix\``,
``,
`_Updated on every push. Artifact expires after 14 days._`,
].join('\n');

const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const existing = comments.find(c => c.body.includes(marker));

if (existing) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existing.id,
body,
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body,
});
}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ node_modules/

# Internal development files
internal/
docs/superpowers/

# Logs
*.log
Expand Down
1 change: 1 addition & 0 deletions esbuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ async function main() {
"src/webview/client/preview.ts",
"src/webview/client/upload-widget.ts",
"src/webview/client/welcome.ts",
"src/webview/client/homescreen.ts",
],
bundle: true,
format: "iife",
Expand Down
Loading
Loading