diff --git a/apps/web/public/marketplace-sources.json b/apps/web/public/marketplace-sources.json deleted file mode 100644 index a2da8db0..00000000 --- a/apps/web/public/marketplace-sources.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "sources": [ - { - "name": "pleaseai", - "description": "Community-contributed plugins from PleaseAI", - "url": "https://raw.githubusercontent.com/pleaseai/claude-code-plugins/main/.claude-plugin/marketplace.json", - "repo": "pleaseai/claude-code-plugins", - "enabled": true, - "priority": 1 - }, - { - "name": "claude-code-plugins", - "description": "Bundled plugins for Claude Code including Agent SDK development tools, PR review toolkit, and commit workflows", - "url": "https://raw.githubusercontent.com/anthropics/claude-code/main/.claude-plugin/marketplace.json", - "repo": "anthropics/claude-code", - "enabled": true, - "priority": 2 - } - ] -} diff --git a/apps/web/server/marketplace-sources.json b/apps/web/server/marketplace-sources.json index a2da8db0..96d559c2 100644 --- a/apps/web/server/marketplace-sources.json +++ b/apps/web/server/marketplace-sources.json @@ -15,6 +15,22 @@ "repo": "anthropics/claude-code", "enabled": true, "priority": 2 + }, + { + "name": "claude-code-workflows", + "description": "Production-ready workflow orchestration with 62 focused plugins, 84 specialized agents, and 42 tools - optimized for granular installation and minimal token usage", + "url": "https://raw.githubusercontent.com/wshobson/agents/main/.claude-plugin/marketplace.json", + "repo": "wshobson/agents", + "enabled": true, + "priority": 3 + }, + { + "name": "claude-code-templates", + "description": "Ready-to-use Claude Code templates organized by workflow", + "url": "https://raw.githubusercontent.com/davila7/claude-code-templates/main/.claude-plugin/marketplace.json", + "repo": "davila7/claude-code-templates", + "enabled": true, + "priority": 4 } ] } diff --git a/apps/web/server/utils/marketplace-schema.ts b/apps/web/server/utils/marketplace-schema.ts index e8547d8f..124fc269 100644 --- a/apps/web/server/utils/marketplace-schema.ts +++ b/apps/web/server/utils/marketplace-schema.ts @@ -31,15 +31,36 @@ export const pluginSchema = z.object({ export const marketplaceSchema = z.object({ $schema: z.string().optional(), name: z.string(), - version: z.string(), - description: z.string(), + version: z.string().optional(), + description: z.string().optional(), + // Support marketplaces that nest version/description in metadata object + // (e.g., claude-code-workflows, claude-code-templates) + metadata: z.object({ + version: z.string().optional(), + description: z.string().optional(), + }).optional(), homepage: z.string().optional(), repository: z.string().optional(), owner: z.object({ name: z.string(), - email: z.string(), + email: z.string().optional(), + url: z.string().optional(), }), plugins: z.array(pluginSchema), +}).transform((data) => { + // Normalize version/description to always be defined strings + // Supports both root-level (Anthropic style) and metadata-nested (community style) formats + const version = data.version ?? data.metadata?.version ?? '0.0.0' + const description = data.description ?? data.metadata?.description ?? 'No description available' + + // Remove redundant metadata field after extraction + const { metadata, ...rest } = data + + return { + ...rest, + version, + description, + } }) export const marketplaceSourceSchema = z.object({