Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
]
}
4 changes: 2 additions & 2 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
]
}
4 changes: 4 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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/[email protected] plugin validate --strict plugins/terminal49
npx -y @anthropic-ai/[email protected] plugin validate --strict .
7 changes: 6 additions & 1 deletion openai/review.json
Original file line number Diff line number Diff line change
Expand Up @@ -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."
}
}
2 changes: 1 addition & 1 deletion plugins/terminal49/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion plugins/terminal49/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion plugins/terminal49/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
6 changes: 4 additions & 2 deletions scripts/build-openai-zip.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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`);
Expand All @@ -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 }]));
Expand Down Expand Up @@ -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");
Expand Down
Loading