From 02906eff5b9258b8b3faf0a7bc43511f18717be2 Mon Sep 17 00:00:00 2001 From: Taras Filatov Date: Fri, 16 Oct 2026 16:32:01 +0100 Subject: [PATCH] ChatGPT plugin: embed review test cases and release notes in plugin.json The plugin dashboard imports extensions.com.openai.review.test_cases (five positive, three negative) and publication.release_notes from the ZIP, and imported cases are read-only there. The build script validates the block the way the dashboard does (counts, required fields, no credentials in metadata). --- openai-plugin-review/test-cases.json | 4 +-- openai-plugin/README.md | 5 +-- openai-plugin/plugin.json | 54 ++++++++++++++++++++++++++++ scripts/build-openai-plugin.mjs | 16 ++++++++- 4 files changed, 74 insertions(+), 5 deletions(-) diff --git a/openai-plugin-review/test-cases.json b/openai-plugin-review/test-cases.json index c155ec9..97af587 100644 --- a/openai-plugin-review/test-cases.json +++ b/openai-plugin-review/test-cases.json @@ -1,5 +1,5 @@ { - "_note": "Review materials for the ChatGPT plugin directory submission. Not part of the plugin ZIP. OpenAI asks for exactly five positive and three negative test cases; paste these into the dashboard's Review details. tools_triggered names the canonical tool.", + "_note": "Review materials for the ChatGPT plugin directory submission. The five positive and three negative cases are also embedded in openai-plugin/plugin.json under extensions.com.openai.review.test_cases, which the dashboard imports from the ZIP (imported cases are read-only there; edit here, mirror into plugin.json, rebuild). tools_triggered names the canonical tool.", "positive": [ { "description": "Create a new chat app and make it the current app.", @@ -58,6 +58,6 @@ "notes": "The reviewer signs in on the Ethora consent page with email and password (Google sign-in also works). The connector requests the openid and email identity scopes; an unverified address shows a one-step verification prompt that can be skipped." }, "demo_video": { - "_how": "Record 60-90 seconds in ChatGPT: connect the plugin, then the three default prompts (create app + agent, website widget, two agents debating). Upload to YouTube unlisted and paste the URL in the dashboard." + "_how": "Record 60-90 seconds in ChatGPT: connect the plugin, then the three default prompts (create app + agent, website widget, two agents debating). Upload to YouTube unlisted and either paste the URL in the dashboard (Review information) or set extensions.com.openai.review.demo_recording_url in plugin.json." } } diff --git a/openai-plugin/README.md b/openai-plugin/README.md index 1b509e5..e1c426a 100644 --- a/openai-plugin/README.md +++ b/openai-plugin/README.md @@ -40,8 +40,9 @@ verified there; the ZIP carries the manifest, icons and skills. checks: metadata, skills, MCP tool metadata, domain verification, package structure. Required findings must be fixed and a new ZIP uploaded; informational ones can go to the review team as they are. -3. **Review information.** Paste the five positive and three negative test - cases from `../openai-plugin-review/test-cases.json`, the demo video URL, +3. **Review information.** The five positive and three negative test cases + are embedded in `plugin.json` (`extensions.com.openai.review.test_cases`) + and imported from the ZIP; enter the demo video URL, and the reviewer account's credentials (enter them in the dashboard only; never commit them). Create that account on production beforehand with one app, a room and an agent so the positive cases have data. diff --git a/openai-plugin/plugin.json b/openai-plugin/plugin.json index 531e478..c2c801c 100644 --- a/openai-plugin/plugin.json +++ b/openai-plugin/plugin.json @@ -48,6 +48,60 @@ "brandColor": "#4918C1", "composerIcon": "./assets/icon.png", "logo": "./assets/logo.png" + }, + "review": { + "test_cases": { + "positive": [ + { + "description": "Create a new chat app and make it the current app.", + "prompt": "Create an Ethora app called Review Desk.", + "tools_triggered": "ethora-app-create", + "expected_behavior": "The assistant creates the app and reports its name and id from `created`, offers the `next` steps (select the app, create a room, create an agent) and does not ask for any credential." + }, + { + "description": "Create a room and post a message to it.", + "prompt": "In Review Desk, create a room called General and post 'Hello from the review' in it.", + "tools_triggered": "ethora-chat-create", + "expected_behavior": "A room is created (its JID comes back in `created.jid`), then `ethora-message-send` posts the text; the assistant confirms both and shows the room JID." + }, + { + "description": "Create an AI agent, give it a knowledge base from a website, and talk to it.", + "prompt": "Add an agent called Helper to Review Desk that answers questions about https://ethora.com, invite it to General, and ask it what Ethora is.", + "tools_triggered": "ethora-agent-create", + "expected_behavior": "The agent is created, `ethora-source-site-crawl-wait` indexes the site, `ethora-agent-invite` puts it in the room, `ethora-message-send` with waitForReplySec returns the agent's answer in `replies` with `senderName: Helper`." + }, + { + "description": "Generate the website chat widget embed.", + "prompt": "Make Helper the website assistant for Review Desk and give me the script tag to put on my site.", + "tools_triggered": "ethora-agent-activate", + "expected_behavior": "`ethora-agent-activate` binds the agent as the app's widget bot, then `ethora-widget-snippet-get` returns a `