Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
130 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
6412cae
chore: fix skills-config.json trailing comma, enable resolveJsonModule
njb90 Apr 13, 2026
5bbb060
refactor(aiTools): replace hardcoded PLATFORMS with skills-config.jso…
njb90 Apr 13, 2026
311ad8e
fix(configureAiTools): replace removed PlatformId type with string
njb90 Apr 13, 2026
b5ea22e
feat(aiTools): add unified installSkill() with scope-aware path resol…
njb90 Apr 13, 2026
97ce6e0
fix(aiTools): make globalSkillsDir tilde-stripping handle both ~/ and…
njb90 Apr 13, 2026
c021546
refactor(aiTools): scope-aware readInstalledSkillDirNames, remove det…
njb90 Apr 13, 2026
9681f2b
refactor(homescreen): add platform/scope state, update message routing
njb90 Apr 13, 2026
80c7188
feat(homescreen): scope-aware handlers and redesigned AI tools panel …
njb90 Apr 13, 2026
160127e
feat(homescreen-client): platform dropdown, scope toggle, dual-scope …
njb90 Apr 13, 2026
bf4b573
feat(homescreen-css): scope toggle, platform dropdown, secondary stat…
njb90 Apr 13, 2026
91509fc
feat(homescreen): show running editor label below MCP Servers heading
njb90 Apr 13, 2026
f233261
feat(aiTools): auto-detect installed platform on panel open
njb90 Apr 13, 2026
ea9552f
revert: use editor detection for default platform, remove workspace s…
njb90 Apr 13, 2026
1dc1acb
fix(aiTools): default platform to github-copilot when running in VS Code
njb90 Apr 13, 2026
6844a3b
Update ci build to add artifact link to description
njb90 Apr 14, 2026
0aebed0
fix(aiTools): remove GitHub auth fallback and rename Copilot platform…
njb90 Apr 23, 2026
4614ef0
perf(homescreen): render static shell instantly, load data async
njb90 Apr 24, 2026
a0222f9
refactor: simplify pass — extract helpers, remove redundancy, paralle…
njb90 Apr 24, 2026
9b9a46b
feat(cloudinary): add shared ClientAsset/ChildrenPage types
njb90 Apr 24, 2026
f5f537f
feat(cloudinary): scaffold CloudinaryService with SDK adapter
njb90 Apr 24, 2026
f4e9afd
feat(cloudinary): implement CloudinaryService.fetchChildren
njb90 Apr 24, 2026
83a2f71
feat(cloudinary): add streaming prefetchRemaining
njb90 Apr 24, 2026
28db18c
feat(cloudinary): add searchAssets + prefetchSearchResults
njb90 Apr 24, 2026
abdb755
feat: Implement webview to replace entire native VS Code treeview
njb90 Apr 27, 2026
47fcf5c
Merge remote-tracking branch 'origin/main' into feature/tree-webview-…
njb90 Apr 29, 2026
e0ae2e0
Fix build
njb90 Apr 29, 2026
2437bf3
Integrate Docs AI webview
ed-cld May 7, 2026
8d764cb
Fix Docs AI prompt handoff flash
ed-cld May 7, 2026
364e381
Harden Docs AI webview integration
ed-cld May 7, 2026
f126939
Align Docs AI home width
ed-cld May 8, 2026
b81877f
Merge branch 'codex/integrate-cld-docs-ai' into develop
ed-cld May 8, 2026
937a6c4
Integrate Docs AI chatbot history
ed-cld May 14, 2026
3831452
Polish Docs AI chat history controls
ed-cld May 14, 2026
8990089
Fix home recent conversations refresh
ed-cld May 14, 2026
dabe161
Unify Cloudinary webview toolbar
ed-cld May 14, 2026
50130dc
Render Docs AI source citations
ed-cld May 18, 2026
1c6c0cf
Bump version to 0.1.6 and update welcome screen interactions
ed-cld May 21, 2026
c8ffec7
Add analytics tracking for commands and webviews
ed-cld Jun 3, 2026
695ad78
Add changelog entries for v0.1.6
ed-cld Jun 3, 2026
f4065d3
Merge vscode-analytics: add analytics tracking + v0.1.6 CHANGELOG
ed-cld Jun 3, 2026
a9e9b81
Fix VS Code extension analytics ingestion
ed-cld Jun 11, 2026
a5843c9
Add v0.1.6 release testing notes
ed-cld Jun 11, 2026
cff05be
Always attribute analytics events to a cloud
ed-cld Jun 16, 2026
3f46bdf
Add config validation analytics events
ed-cld Jun 23, 2026
bca6bd7
Fix stale folder-mode cache (DOC-11056)
ed-cld Jun 25, 2026
7b6489b
Test malformed folder-mode cache entries are ignored (DOC-11056)
ed-cld Jun 25, 2026
f803fb5
Load upload folder dropdown on first open (DOC-11107)
ed-cld Jun 25, 2026
ad7a208
Validate credentials before showing Connected (DOC-11110)
ed-cld Jun 25, 2026
7ad1ca1
Configure AI Tools: keep selection after Apply + post-install guidanc…
ed-cld Jun 25, 2026
49ce6c6
Fix cached-invalid-credentials still showing Connected (DOC-11110 rev…
ed-cld Jun 25, 2026
c3c7d4f
Harden Cloudinary extension credential and upload flows
ed-cld Jun 26, 2026
4da2ce6
Restore ready-handshake for upload folder load (DOC-11107)
ed-cld Jun 29, 2026
b6b50a3
Prepare Cloudinary extension 1.0.0 GA
ed-cld Jun 30, 2026
2fc1fac
Harden config handling and folder-mode detection
ed-cld Jul 3, 2026
e410238
Merge remote-tracking branch 'origin/main' into develop
ed-cld Jul 3, 2026
5fd1f9a
test(e2e): stabilize Cloudinary VS Code e2e suite
ed-cld Jul 3, 2026
7097375
test(e2e): cover webview workflows
ed-cld Jul 6, 2026
1ef0368
fix(upload): clarify VS Code drag and drop behavior
ed-cld Jul 6, 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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ node_modules/
# Internal development files
internal/
docs/superpowers/
agents.md
.agents/

# Logs
*.log
Expand Down
28 changes: 27 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,32 @@ All notable changes to the Cloudinary VS Code extension will be documented in th
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.0.0] - 2026-06-30

### Added
- **Docs AI assistant** - In-editor chat with Cloudinary documentation. Includes chat history, source citations, and a dedicated webview panel.
- **Homescreen sidebar** - Redesigned home view with search, environment switcher, recent conversations, and an AI tools panel.
- **Configure AI Tools** - One-click installer for Cloudinary skills and MCP servers across Cursor, GitHub Copilot, Windsurf, Claude Code, and Universal targets. Scope-aware (global vs. workspace) with install-status detection.
- **Webview-based asset explorer** - Replaces the native VS Code tree view. Supports streaming pagination, search, and parallel fetching.
- **Analytics tracking** - Anonymous usage telemetry for commands and webview interactions. Sensitive payload keys are stripped before transmission; session id persisted in global state.
- **CI: VSIX build artifacts** - Feature branches now produce installable VSIX builds with PR-comment download links.

### Changed
- **Welcome screen interactions** - Refreshed onboarding flow.
- **Cloudinary webview toolbar** - Unified toolbar styling across Docs AI, library, and homescreen.
- **Homescreen renders shell instantly** - Static shell paints first, data loads asynchronously.
- **AI tools platform detection** - Auto-detects installed AI platforms (Cursor, Copilot, etc.) on panel open; defaults to GitHub Copilot when running inside VS Code.

### Fixed
- Preview and upload panels close on environment switch instead of attempting in-place update.
- Home recent-conversations list refreshes correctly after new chats.
- Upload panel title shows the active cloud name; presets refetched on environment switch.
- Docs AI prompt handoff no longer flashes during transition.

## [0.1.5]

Skipped — released as part of 1.0.0.

## [0.1.4] - 2026-04-16

### Added
Expand Down Expand Up @@ -70,7 +96,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Asset refresh functionality
- Support for both fixed and dynamic folder modes
- Configurable upload presets
- Beta version with ongoing feature development
- General availability release baseline

### Technical
- Built with TypeScript
Expand Down
21 changes: 11 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# Cloudinary VS Code Extension (Beta)
# Cloudinary VS Code Extension

Easily explore, search, preview, and upload Cloudinary assets directly inside Visual Studio Code or supported IDE.

**Note**: This is a beta version of the extension. Some features are subject to change. Please report any problems or feedback by opening an issue.
**General availability release**: Please report any problems or feedback by opening an issue.

---

## Features

- **Asset Explorer** – View Cloudinary folders and assets in a VS Code Tree View
- **Asset Explorer** – View Cloudinary folders and assets in the sidebar media library
- **Search & Filter** – Quickly locate assets by public ID or type
- **Optimized Preview** – Preview images/videos with Cloudinary transformations applied (`f_auto`, `q_auto`)
- **Right-click Actions** – Copy Public ID or URL instantly
Expand Down Expand Up @@ -75,7 +75,7 @@ Once a valid configuration has been added, the active environment will be shown

### Upload

- Click **Upload** from the title bar to open the upload panel, or click **Upload here** on a folder entry to open with that folder pre-selected.
- Click **Upload** from the library toolbar to open the upload panel, or click **Upload here** on a folder entry to open with that folder pre-selected.
- Alternatively, run `Cloudinary: Upload` from the command palette.

**Upload Panel Features:**
Expand All @@ -94,8 +94,8 @@ Once a valid configuration has been added, the active environment will be shown
![Uploading assets](https://res.cloudinary.com/demo/video/upload/w_1200/f_auto:animated/q_auto/e_accelerate:100/e_loop/docs/vscode-extension-vid3)

### Filter or Search
- Click "Filter" in the title bar or run `Cloudinary: Filter` to narrow assets by type
- Click "Search" in the title bar or run `Cloudinary: Search` to search by public ID
- Use the always-visible filter controls in the media library to narrow assets by type or change sort order.
- Use the always-visible search field in the media library to search by public ID.

![Filtering and searching](https://res.cloudinary.com/demo/video/upload/w_1200/f_auto:animated/q_auto/e_accelerate:50/e_loop/docs/vscode-extension-vid2)

Expand All @@ -113,16 +113,17 @@ Once a valid configuration has been added, the active environment will be shown
- **Metadata** – View tags, context metadata, and structured metadata
- **URLs** – Copy original or optimized URLs with one click
- **Type Icons** – Tab icons indicate asset type (image, video, or file)
- **Authenticated Assets** – Authenticated delivery assets are marked with a lock and use a signed original URL for preview/copy actions

### Refresh Tree
- Click "Refresh" to reload the tree
### Refresh Library
- Click **Refresh** to reload the media library

---

## Known Limitations
- Asset filtering is limited to basic types (image, video, raw)
- No options to control number of items returned in tree or root folder
- Folder dropdown in upload panel only shows folders that have been browsed in the tree view
- No user-facing option to control library page size or prefetch cap
- Folder dropdown discovery is capped to a bounded folder depth for responsiveness

---

Expand Down
37 changes: 37 additions & 0 deletions RELEASE_v1.0.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Cloudinary VS Code Extension — v1.0.0

> General availability release.

## What's new

### Added

- **Docs AI assistant** — In-editor chat with Cloudinary documentation. Includes chat history, source citations, and a dedicated webview panel.
- **Homescreen sidebar** — Redesigned home view with search, environment switcher, recent conversations, and an AI tools panel.
- **Configure AI Tools** — One-click installer for Cloudinary skills and MCP servers across Cursor, GitHub Copilot, Windsurf, Claude Code, and Universal targets. Scope-aware (global vs. workspace) with install-status detection.
- **Webview-based asset explorer** — Replaces the native VS Code tree view. Supports streaming pagination, search, and parallel fetching.
- **Analytics tracking** — Anonymous usage telemetry for commands and webview interactions. Sensitive payload keys are stripped before transmission; session id persisted in global state.
- **CI: VSIX build artifacts** — Feature branches now produce installable VSIX builds with PR-comment download links.

### Changed

- **Welcome screen interactions** — Refreshed onboarding flow.
- **Cloudinary webview toolbar** — Unified toolbar styling across Docs AI, library, and homescreen.
- **Homescreen renders shell instantly** — Static shell paints first, data loads asynchronously.
- **AI tools platform detection** — Auto-detects installed AI platforms (Cursor, Copilot, etc.) on panel open; defaults to GitHub Copilot when running inside VS Code.

### Fixed

- Preview and upload panels close on environment switch instead of attempting in-place update.
- Home recent-conversations list refreshes correctly after new chats.
- Upload panel title shows the active cloud name; presets refetched on environment switch.
- Docs AI prompt handoff no longer flashes during transition.

## Install

1. Save the `cloudinary-1.0.0.vsix` file somewhere on your machine.
2. In VS Code: `Cmd+Shift+P` → **Extensions: Install from VSIX…** → pick the file.
Or from a terminal: `code --install-extension cloudinary-1.0.0.vsix --force`
3. Reload the window: `Cmd+Shift+P` → **Developer: Reload Window**.

The Cloudinary icon should appear in the Activity Bar.
183 changes: 183 additions & 0 deletions TESTING_GUIDE_v1.0.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# Testing guide: Cloudinary VS Code extension v1.0.0

Hey team, this build is for the v1.0.0 GA release of the VS Code extension. Below is what's new and what to poke at.

> 💬 **Feedback:** Please share your feedback about the extension in the shared Google Doc. Bugs welcome, copy nits welcome, "this UX is confusing" welcome.
> For comments about the AI responses, please use the thumbs up/down feature on each message to leave feedback tied to conversations.
---

## 1. Install

1. Save `cloudinary-1.0.0.vsix` somewhere on your Mac.
2. In VS Code:
- `Cmd+Shift+P`**Extensions: Install from VSIX…** → pick the file
- **or** open your extensions pane, then drag and drop the VSIX file into it
3. Reload: `Cmd+Shift+P`**Developer: Reload Window**.
4. Open the **Cloudinary icon** in the Activity Bar

### If you've never set up Cloudinary credentials before

You should see a "Add your API credentials to connect" banner on the homescreen. Click **Configure** to open the global config file. Paste your cloud name + API key + API secret. Save the file. The banner should disappear and your cloud name should appear at the top.

If you already have credentials configured, skip ahead.

---

## 2. Smoke test: does anything obviously break?

- [ ] The Cloudinary icon shows in the Activity Bar.
- [ ] Clicking it opens the homescreen with no errors.
- [ ] Your cloud name appears at the top of the homescreen.
- [ ] The "Browse Library", "Upload", and "Configure AI Tools" tiles all render.
- [ ] The "Ask Cloudinary AI" section (heading + textarea + suggested-question chips) renders below the tiles.
- [ ] No red error notifications pop up.

If any of these fail, stop and report. The rest of the guide assumes the basics work.

---

## 3. Homescreen

The homescreen is the new landing view. Test:

- [ ] **Search box**: type a query (e.g. `transformation`). Hitting Enter should open the library view with that search applied.
- [ ] **Status pill (top right)**: the text reads "Connected" when your credentials are valid, "Setup needed" otherwise. There's a small dot beside the text that changes appearance when not configured.
- [ ] **Folder mode chip**: shows "Dynamic folders" or "Fixed folders" beside your cloud name (only when credentials are configured).
- [ ] **Browse Library tile**: clicking opens the library view.
- [ ] **Upload tile**: clicking opens the upload widget panel.
- [ ] **Switch Environment tile**: only appears if you have 2+ environments configured. Clicking it should let you swap.
- [ ] **Configure AI Tools tile**: clicking expands an inline panel below the tile (see Section 6). Clicking again collapses it.
- [ ] **Ask Cloudinary AI section**: heading "Ask Cloudinary AI", subtitle, a "Send a message…" textarea, a send button, and 4 suggested-question chips ("What's new in Cloudinary?", "How do I upload images?", "Explain image transformations", "What SDKs does Cloudinary support?"). Pressing Enter or clicking send takes you into Docs AI with that prompt pre-filled.
- [ ] **View recent conversations**: a clock-icon toggle appears below the Ask Cloudinary AI section once you have one or more past chats. Clicking it expands a list of recent conversations.
- [ ] **Welcome Guide** link in the footer.

**Things to look for:**
- Does the homescreen render quickly? It's supposed to paint a static shell first and load data after.
- Any visual jank when you resize the sidebar narrow vs. wide?
- Anything that feels off in the copy?

---

## 4. Library view

Open the library by clicking the "Browse Library" tile on the homescreen. This swaps the Cloudinary sidebar from the homescreen over to the library view. To get back, click the Home button in the toolbar at the top of the library view.

- [ ] **Folder expand**: clicking a folder reveals its contents. Big folders should stream in (a loading row appears at the bottom).
- [ ] **Search**: the search input at the top filters across the library. Pressing Escape clears it.
- [ ] **Type filter**: dropdown with All / Images / Videos / Raw.
- [ ] **Sort**: dropdown with Newest / Oldest.
- [ ] **Click an asset**: opens a preview panel with optimized image/video, public ID, copy buttons, and metadata.
- [ ] **Right-click an asset**: context menu with options to copy the public ID, the URL, and the optimized URL.
- [ ] **Switch environment while a preview is open**: the preview panel closes cleanly (rather than trying to update in place with stale data).

**Things to look for:**
- Does scrolling stay smooth with hundreds of items?
- Does the loading indicator behave correctly at the bottom?
- Are folder icons and asset thumbnails rendering properly?

---

## 5. Docs AI chat: biggest new feature

This is the in-editor doc chatbot. The Cloudinary sidebar shows one view at a time (Homescreen, Library, or Docs AI), so opening Docs AI swaps the sidebar over to that view. Ways to get there:

- Type in the "Ask Cloudinary AI" textarea on the homescreen and submit (sends your prompt and opens Docs AI).
- Click any of the suggested-question chips on the homescreen.
- Click a recent conversation entry on the homescreen (after you have any).
- Run "Open Docs AI" from the Command Palette.

To return to the homescreen, click the Home button in the toolbar at the top of the Docs AI view.

The Docs AI view contains: a tab strip at the top (one tab per conversation), a "+" button to start a new chat, a clock-icon button for chat history, a conversation area, and a composer at the bottom with a textarea (placeholder "Send a message…"), a send button, and a stop button.

- [ ] **Ask a basic question** (e.g. "How do I upload an image with Node.js?"). The response should stream in word by word.
- [ ] **Inline citations**: numbered citation markers appear in the answer text and link to the corresponding sources.
- [ ] **Sources section**: a collapsible "Sources" block sits below the answer with a chevron toggle. Clicking a source link opens the docs page in your browser.
- [ ] **Follow-up questions**: 2-3 suggested follow-up prompts appear below an answer.
- [ ] **Disclaimer line** at the bottom: "AI can make mistakes. Verify important info from Cloudinary docs."

### Chat history

- [ ] **New chat (+ button)**: starts a fresh conversation in a new tab.
- [ ] **Tab strip**: each conversation gets its own tab at the top. You can switch between them.
- [ ] **History button (clock icon)**: opens a dropdown of past conversations.
- [ ] **Clear all conversations**: from the history dropdown, there should be a way to delete all. Confirm there's a "Delete all conversations?" confirmation before it deletes.

### Things to test for content quality

- [ ] **Recent docs are in the index**: try asking about something that landed in the May 2026 MediaFlows release notes (e.g. "What's the Workflow Agent in MediaFlows?"). It should answer correctly.
- [ ] **Stop generation**: start a long answer, hit the stop button mid-stream. The stream should stop cleanly.
- [ ] **Non-English question**: try Hebrew, Spanish, or another language. The bot should answer in that language.
- [ ] **Code in answers**: questions about code should get back fenced code blocks that look right.
- [ ] **Thumbs up/down on each AI message**: confirm both states register (the bot acknowledges the feedback was saved).

**Known limitation:** docs marked `noindex: true` are intentionally excluded from the chatbot index (e.g. internal-only pages or Beta features still in alpha). So if you ask about a hidden/beta-only feature, it might not have it.

---

## 6. Configure AI Tools

This installs Cloudinary skills + MCP servers into your AI coding tools (Cursor, Claude Code, VS Code Copilot, Windsurf, and many more).

- [ ] Click the **Configure AI Tools** tile on the homescreen. An inline panel expands below it.
- [ ] **Platform dropdown**: pick from the list of supported platforms. The dropdown should default to one that matches your current environment when possible (e.g. "VS Code (Copilot)" when running inside VS Code).
- [ ] **Scope toggle**: two buttons, "Project" and "Global". Toggle between them.
- [ ] **Skills + MCP servers list**: shows checkboxes for each available skill and MCP server. Items already installed for the chosen platform + scope are shown as disabled / pre-checked.
- [ ] **Apply button**: enabled only when you have at least one selection to install. Click it. The button label changes to "Applying…", then each item shows a ✓ (success) or ✕ (failure) tick.
- [ ] **Reopen the panel**: skills you installed should now show as already installed (not re-offering them at the same scope).
- [ ] **Switch platform** mid-flow: changing the platform dropdown should reload the list with whatever is correct for that new platform.

**Things to look for:**
- Does the platform list cover what you actually use?
- Did it auto-pick the right default platform for you?
- Are the install instructions / cover notes clear?
- Anything that errors silently or fails without a clear message?

---

## 7. Upload widget

- [ ] Click "Upload" on the homescreen. The upload widget panel opens.
- [ ] Drag a file onto it (or pick one via the file picker). Progress should show in real time.
- [ ] Upload completes, the asset appears in the recently-uploaded section.
- [ ] **Chunked upload**: try a file larger than 20 MB (the threshold for chunked uploads). It should complete reliably without timing out.
- [ ] **Switch environment with the widget open**: the widget should close cleanly rather than try to update in place.
- [ ] The panel title should reflect the active cloud name.

---

## 8. Environment switching

Only relevant if you have multiple Cloudinary environments configured.

- [ ] The VS Code **status bar at the bottom** shows a cloud icon followed by the active cloud name.
- [ ] Click the status bar item (or use the Switch Environment tile on the homescreen) to swap environments.
- [ ] After switching:
- Library view refreshes with the new environment's assets.
- Upload presets refetch.
- Any open preview/upload panels close cleanly.
- The folder-mode chip updates if the new environment uses a different mode.

---

## Known limitations / things NOT in this build

- The "**Docs AI agent actions**" feature (the experimental version where the bot can take actions on your media library directly) is **not** in this build. That's still on a feature branch.
- No marketplace publishing yet. This is a side-load VSIX only.
- KB articles flagged `noindex: true` in our docs source are intentionally excluded from the Docs AI index.

---

## What we'd love to know

1. **First-impression UX**: what feels off when you first open the extension?
2. **Docs AI answer quality**: does it actually help you find what you'd normally search for in our docs?
3. **Performance**: any slow spots? Sidebar lag, library scroll jank, Docs AI streaming delays?
4. **Copy**: anything in button labels, tooltips, or empty states that doesn't quite read right?
5. **Platform detection** in Configure AI Tools: did it correctly identify what you have installed?
6. **Anything that crashed or showed an error**: please screenshot + the steps to reproduce.

Drop notes in the shared Google Doc, or reply on the email thread.

Thanks for testing! 🙏
Loading
Loading