diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index 59382f7..b4e4015 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -14,7 +14,7 @@ "installation": "AVAILABLE", "authentication": "ON_INSTALL" }, - "category": "Design" + "category": "Creativity" }, { "name": "paper-desktop", diff --git a/plugins/paper/plugin.json b/plugins/paper/plugin.json index 99a09f9..9a8eca2 100644 --- a/plugins/paper/plugin.json +++ b/plugins/paper/plugin.json @@ -28,11 +28,14 @@ "com.openai": { "interface": { "displayName": "Paper", - "shortDescription": "Design UI on a live canvas", - "longDescription": "Paper is a professional design tool built on HTML and CSS. With this plugin, ChatGPT can read your Paper files — structure, styles, screenshots, and text — and write back to the canvas in real time. Use it to sketch new screens from a prompt, iterate on existing designs, generate UI from a brief or design system, export artboards, and keep design work moving without leaving the conversation.\n\nSign in with your Paper account to connect. ChatGPT can only access files that your account can access.", + "shortDescription": "Design, share, ship", + "longDescription": "Paper is a professional design tool built on HTML and CSS. With this plugin, ChatGPT can read your Paper files and write back to the canvas in real time. Use it to sketch new screens from a prompt, iterate on existing designs, generate UI from a brief or design system, and export artboards.\n\nSign in with your Paper account to connect. ChatGPT can only access files that your account can access.", "developerName": "Paper", - "category": "Design", - "capabilities": ["Read", "Write"], + "category": "Creativity", + "capabilities": [ + "Read", + "Write" + ], "websiteURL": "https://paper.design", "supportURL": "https://paper.design/support", "privacyPolicyURL": "https://paper.design/legal/privacy", diff --git a/scripts/validate-agent-plugins.mjs b/scripts/validate-agent-plugins.mjs index a2a664c..d95a704 100644 --- a/scripts/validate-agent-plugins.mjs +++ b/scripts/validate-agent-plugins.mjs @@ -83,6 +83,20 @@ const LIMITS = { capabilityLength: 120, }; const REQUIRED_LISTING_URLS = ["websiteURL", "supportURL", "privacyPolicyURL", "termsOfServiceURL"]; +// Every category in use across OpenAI's curated catalog (github.com/openai/plugins); the dashboard +// rejects anything else with "Select a valid category". Design tools (Figma, Canva, Adobe) use Creativity. +const DASHBOARD_CATEGORIES = new Set([ + "Developer Tools", + "Productivity", + "Creativity", + "Communication", + "Education & Research", + "Data & Analytics", + "Finance", + "Security", + "Scientific Research", + "Business & Operations", +]); const REQUIRED_POSITIVE_CASES = 5; const REQUIRED_NEGATIVE_CASES = 3; const MIN_ICON_PX = 48; @@ -189,6 +203,10 @@ function validateInterface(pluginDir, label, iface) { if (typeof iface.category !== "string" || iface.category.length === 0) { fail(`${label}: interface.category is required`); + } else if (!DASHBOARD_CATEGORIES.has(iface.category)) { + fail( + `${label}: interface.category "${iface.category}" is not a dashboard category; use one of: ${[...DASHBOARD_CATEGORIES].join(", ")}` + ); } if (iface.capabilities !== undefined) {