universal-plugin 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -245,6 +245,20 @@ ln -sf .mcp.json mcp.json
245
245
 
246
246
  If the repo needs explicit symlink tracking: `mcp.json symlink` in `.gitattributes`. MCP server startup failures are non-fatal.
247
247
 
248
+ ### Pinning a self-published server to the plugin version
249
+
250
+ A plugin whose MCP server is its own npm package writes an unpinned invocation — `{"command": "npx", "args": ["-y", "my-server", "mcp"]}` — and a consumer on plugin 1.4.0 then gets 1.4.0's skills alongside whatever `npx` resolves as latest for the server. Mark the entry and `build` stamps the version on:
251
+
252
+ ```json
253
+ { "command": "npx", "args": ["-y", "my-server", "mcp"], "pinToPluginVersion": true }
254
+ ```
255
+
256
+ - **The marker is required.** `build` never name-matches — a plugin may publish its server under a package name that is not the plugin's, and an unrelated `npx -y widget-cli` must never be stamped with this plugin's version.
257
+ - **The marker never reaches a runtime.** It is a build directive, not part of any vendor's schema, so `build` strips it from every derived manifest and derived `mcp.json`. The authored files are left as written.
258
+ - An already-pinned specifier is **overwritten** with the manifest version, and the build warns naming the version it replaced. Do not hand-pin a marked entry.
259
+ - A marked entry the build cannot pin — the `command` is not `npx`/`upx`, the manifest declares no `version`, or `args` carry no package specifier — is warned about and left alone; the build stays green.
260
+ - `copilot-cli` reads the canonical manifest directly, so it has no derived manifest to receive the pin; the build warns rather than pretending otherwise.
261
+
248
262
  ## Environment Variable Mapping
249
263
 
250
264
  | Canonical | Claude Code | Cursor | Codex | Copilot CLI |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "universal-plugin",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Universal AI agent plugin build tool",
5
5
  "keywords": [
6
6
  "agent-plugin",
@@ -30,9 +30,11 @@
30
30
  "dist",
31
31
  "governances",
32
32
  "plugin.json",
33
+ "schema",
33
34
  ".claude-plugin",
34
35
  ".cursor-plugin",
35
36
  ".codex-plugin",
37
+ "com.github.copilot",
36
38
  "skills",
37
39
  "agents"
38
40
  ],
@@ -44,6 +46,7 @@
44
46
  "devDependencies": {
45
47
  "@types/node": "^24.10.1",
46
48
  "@types/semver": "^7.7.1",
49
+ "ajv": "^8.20.0",
47
50
  "knip": "^6.14.1",
48
51
  "tsdown": "^0.22.0",
49
52
  "tsx": "^4.22.3",
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "universal-plugin",
4
- "version": "0.5.0",
4
+ "version": "0.7.0",
5
5
  "description": "Research and design toolkit for building universal AI coding agent plugins that work across Claude Code, Cursor, Codex, and GitHub Copilot CLI.",
6
6
  "author": {
7
7
  "name": "unional"
package/readme.md CHANGED
@@ -79,8 +79,12 @@ keep their previous version.
79
79
 
80
80
  ```sh
81
81
  npx universal-plugin marketplace init --codex --root .
82
+ npx universal-plugin marketplace validate --root .
82
83
  ```
83
84
 
85
+ `validate` checks each catalog against the schema its runtime loads and names the key at fault, so a
86
+ catalog that would be refused at install time is caught in the repository.
87
+
84
88
  Codex caches a local plugin install by its marketplace entry version. After you change packaged
85
89
  plugin files: update the canonical `plugin.json` version, regenerate the catalog (add `--force` to
86
90
  replace an existing one), reinstall the plugin, then start a new Codex session. The installed copy
@@ -0,0 +1,10 @@
1
+ # Vendored schemas
2
+
3
+ `claude-code-marketplace.json` is the official Claude Code marketplace schema, fetched verbatim from
4
+ <https://json.schemastore.org/claude-code-marketplace.json> (the copy generated 2026-04-23) on
5
+ 2026-08-19.
6
+
7
+ It ships nowhere: `package.json` `files` does not list this directory. It exists so
8
+ `src/marketplace/validation.schema.test.ts` can hold this project's catalog rules against the
9
+ runtime's own schema without reaching the network in a test, and so a re-fetch is a reviewable diff.
10
+ Re-fetch it when Claude Code's catalog shape moves, then run the tests.