Skip to content

feat: add plugin marketplace tool window#1

Merged
intel352 merged 3 commits intomainfrom
feat/plugin-marketplace
Mar 15, 2026
Merged

feat: add plugin marketplace tool window#1
intel352 merged 3 commits intomainfrom
feat/plugin-marketplace

Conversation

@intel352
Copy link
Contributor

Summary

  • Add "Workflow Marketplace" tool window (right panel)
  • Fetches plugin index from https://gocodealone.github.io/workflow-registry/v1/index.json
  • Shows Name, Version, Tier, Description in a JBTable
  • Filters out private plugins
  • Uses existing Gson + HttpRequests dependencies

Test plan

  • ./gradlew buildPlugin succeeds
  • Tool window appears in IDE
  • Plugin list loads from registry

🤖 Generated with Claude Code

intel352 and others added 2 commits March 14, 2026 15:19
Adds a Workflow Marketplace tool window panel (anchored right) that fetches
the public plugin index from the workflow-registry GitHub Pages endpoint and
displays name, version, tier, and description for all non-private plugins in
a scrollable JBTable. Uses Gson and HttpRequests already present in the project.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add structured error logging via Logger for HTTP errors, malformed
  JSON, and general network failures instead of silently swallowing all
  exceptions
- Add status label so users see loading/error/count feedback
- Guard `private` field against non-Boolean types (e.g. string "true")
  since Gson can vary when the registry schema evolves
- Use ReadOnlyTableModel to prevent accidental in-place cell editing
- Use toString() on all map values so Double/Long from Gson don't
  appear with type-cast noise in the table
- Add doNotActivateOnStart="true" in plugin.xml so the marketplace
  tool window doesn't fire a network request on every project open

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new “Workflow Marketplace” tool window to the JetBrains plugin that fetches and displays a public plugin index from the workflow registry.

Changes:

  • Register a new right-side tool window (“Workflow Marketplace”) in plugin.xml.
  • Implement a marketplace tool window panel that fetches registry JSON and renders it in a JBTable.
  • Filter out registry entries marked as private.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

File Description
src/main/resources/META-INF/plugin.xml Registers the new “Workflow Marketplace” tool window.
src/main/kotlin/com/gocodalone/workflow/ide/marketplace/MarketplaceToolWindow.kt Implements the tool window UI and background fetch/parsing/filtering logic.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +54 to +56
} catch (e: Exception) {
// Silently fail — marketplace is optional
}
- Handle null return from Gson.fromJson() with ?: emptyList()
- Extract parseRegistryIndex() and filterPublicPlugins() as internal
  functions for testability
- Add MarketplaceParsingTest with 9 test cases covering: valid/empty/null
  JSON, blank strings, private field as boolean/string/missing, empty
  list, and missing fields
- Read-only table model and exception logging were already in place

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@intel352
Copy link
Contributor Author

All review comments addressed

Pushed 2eb7e44:

  1. Read-only table — Already had ReadOnlyTableModel with isCellEditable = false (no change needed)
  2. Null safetyparseRegistryIndex() handles null from Gson.fromJson() with ?: emptyList()
  3. Exception logging — Already had per-type catch blocks with LOG.warn() and UI status messages (no change needed)
  4. Tests — Extracted parseRegistryIndex() and filterPublicPlugins() as internal functions. Added MarketplaceParsingTest with 9 test cases: valid/empty/null/blank JSON, private field as boolean/string/missing, empty list, missing fields

All tests pass (./gradlew build).

@intel352 intel352 merged commit 6a19452 into main Mar 15, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants