diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 63dcb14..cb17ea6 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -5,14 +5,14 @@ }, "metadata": { "description": "Terminal49 MCP server and agent skills for container tracking and trade intelligence", - "version": "0.3.0" + "version": "0.3.1" }, "plugins": [ { "name": "terminal49", "source": "./plugins/terminal49", "description": "Container tracking, shipment record updates, and US import trade intelligence from the Terminal49 MCP server, with agent skills", - "version": "0.3.0" + "version": "0.3.1" } ] } diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 63dcb14..cb17ea6 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -5,14 +5,14 @@ }, "metadata": { "description": "Terminal49 MCP server and agent skills for container tracking and trade intelligence", - "version": "0.3.0" + "version": "0.3.1" }, "plugins": [ { "name": "terminal49", "source": "./plugins/terminal49", "description": "Container tracking, shipment record updates, and US import trade intelligence from the Terminal49 MCP server, with agent skills", - "version": "0.3.0" + "version": "0.3.1" } ] } diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 24de736..8489fcf 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -20,3 +20,7 @@ jobs: cache: npm - run: npm ci --ignore-scripts - run: npm run validate + - name: Validate with Claude Code + run: | + npx -y @anthropic-ai/claude-code@2.1.292 plugin validate --strict plugins/terminal49 + npx -y @anthropic-ai/claude-code@2.1.292 plugin validate --strict . diff --git a/openai/review.json b/openai/review.json index 951ed69..88b8095 100644 --- a/openai/review.json +++ b/openai/review.json @@ -47,6 +47,11 @@ "prompt": "Change the drayage carrier on my containers." } ] - } + }, + "commerce": false, + "commerce_description": "Terminal49 for ChatGPT does not sell products or process payments. Trade intelligence is enabled per account under the customer's existing Terminal49 agreement." + }, + "publication": { + "release_notes": "Initial release: track containers and shipments, review documents, update parties and custom fields on request, and research US ocean import markets with Terminal49." } } diff --git a/plugins/terminal49/.claude-plugin/plugin.json b/plugins/terminal49/.claude-plugin/plugin.json index aa5a7d5..d114778 100644 --- a/plugins/terminal49/.claude-plugin/plugin.json +++ b/plugins/terminal49/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "terminal49", "displayName": "Terminal49", - "version": "0.3.0", + "version": "0.3.1", "description": "Track and investigate container shipments, update shipment records, and research US ocean import markets with the Terminal49 MCP server.", "author": { "name": "Terminal49", diff --git a/plugins/terminal49/.codex-plugin/plugin.json b/plugins/terminal49/.codex-plugin/plugin.json index 3312af6..18cab58 100644 --- a/plugins/terminal49/.codex-plugin/plugin.json +++ b/plugins/terminal49/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "terminal49", - "version": "0.3.0", + "version": "0.3.1", "description": "Track and investigate container shipments, update shipment records, and research US ocean import markets with the Terminal49 MCP server.", "author": { "name": "Terminal49", diff --git a/plugins/terminal49/.cursor-plugin/plugin.json b/plugins/terminal49/.cursor-plugin/plugin.json index b904f85..4b620b4 100644 --- a/plugins/terminal49/.cursor-plugin/plugin.json +++ b/plugins/terminal49/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "terminal49", "displayName": "Terminal49", - "version": "0.3.0", + "version": "0.3.1", "description": "Track and investigate container shipments, update shipment records, and research US ocean import markets with the Terminal49 MCP server.", "author": { "name": "Terminal49", diff --git a/scripts/build-openai-zip.mjs b/scripts/build-openai-zip.mjs index 255576c..3d5a0e7 100644 --- a/scripts/build-openai-zip.mjs +++ b/scripts/build-openai-zip.mjs @@ -12,7 +12,7 @@ const readJson = async (path) => JSON.parse(await readFile(path, "utf8")); const manifest = await readJson(join(pluginDir, ".codex-plugin/plugin.json")); const mcp = await readJson(join(pluginDir, ".mcp.json")); -const { review } = await readJson(resolve(root, "openai/review.json")); +const { review, publication } = await readJson(resolve(root, "openai/review.json")); const stage = resolve(root, "dist/terminal49-openai"); const zipPath = resolve(root, `dist/terminal49-openai-${manifest.version}.zip`); @@ -27,7 +27,7 @@ async function writeStaged(path, contents) { const icons = new Set([manifest.interface.logo, manifest.interface.composerIcon]); await writeStaged( ".codex-plugin/plugin.json", - `${JSON.stringify({ ...manifest, extensions: { "com.openai": { review } } }, null, 2)}\n`, + `${JSON.stringify({ ...manifest, extensions: { "com.openai": { review, publication } } }, null, 2)}\n`, ); // The Codex-format .mcp.json in the submission guide names only the url. const servers = Object.fromEntries(Object.entries(mcp.mcpServers).map(([name, { url }]) => [name, { url }])); @@ -69,6 +69,8 @@ const cases = review?.test_cases ?? {}; if (cases.positive?.length !== 5 || cases.negative?.length !== 3) { errors.push("initial MCP review needs exactly five positive and three negative test cases"); } +if (typeof review?.commerce !== "boolean") errors.push("review.commerce must be true or false"); +if (!publication?.release_notes) errors.push("publication.release_notes is required"); if (errors.length > 0) { console.error("OpenAI ZIP check failed:\n");