universal-plugin@0.3.0
Minor Changes
-
e9a31ce: Add
universal-plugin marketplace initfor deterministic repository-local marketplace metadata. -
8fb8297:
plugin buildno longer derives a manifest forcopilot-cli. Copilot CLI searches
.plugin/plugin.json→plugin.json→.github/plugin/plugin.json→.claude-plugin/plugin.json
and takes the first match, so the canonical rootplugin.jsonalways shadowed the
.github/plugin/plugin.jsonwe were emitting — that file was never read. Copilot CLI has consumed
Open Plugin Spec v1 manifests since v1.0.74, so the canonical manifest serves it directly. The
vendor is now reported with statuscanonical, and aharnesses["copilot-cli"]override warns that
it has no delivery path (the canonical schema is closed to vendor-only fields).Delete any stale
.github/plugin/plugin.jsonfrom a previous build; it was inert. -
8dfffbd: Derive vendor slash-command artifacts from skill invocation policies.
-
b50b9c8: The
pluginskill now detects existing plugins on invocation. When a project has a vendor-specific
manifest (.claude-plugin/,.cursor-plugin/, …) or already ships public skills but has no
canonical rootplugin.json, the gateway offers to adopt the open Agent Plugins Specification. The
lossless conversion procedure lives in the newreferences/adopt.md. Repo-private agent config
(.claude/skills/,.agents/skills/) is excluded from detection. -
ab6ff25: New
universal-plugin plugin version <major|minor|patch|premajor|preminor|prepatch|prerelease|x.y.z>
moves a plugin's version. A version lives in up to five places, but only two of them are
authored: the canonical rootplugin.jsonand, when.agents/universal-plugin.jsondeclares a
packagePath, thatpackage.json. The rest — the per-vendor manifests, the local marketplace
catalogs, and thenpx/upxpins inskills/**— are derived by commands that already exist.
So the verb writes the authored pair and then callsplugin build's own writer to re-derive, rather
than becoming a second writer for filesbuildowns.--preid <id>picks the prerelease identifier,--forceallows a version that does not advance,
--no-buildskips re-derivation, and--dry-runreports the plan without writing. Every guard —
missing manifest, a relative bump with no current version, an unknown bump argument, a
non-advancing target, a declaredpackagePathwhosepackage.jsonis absent — fails loud and
leaves the tree untouched.publish sync-versionkeeps the opposite direction (a changesets-decided number flowing
package.json→ manifest) with its behavior unchanged, but now shares the new applier so the two
directions cannot drift apart.The shipped
plugingateway skill gains a matching route —references/version.md— so an agent
asked to bump a plugin's version finds the verb instead of hand-editing aversionfield. Its
route table previously covered create / adopt / inspect / update / delete, none of which is moving
the version. The skill description now names the version triggers explicitly, and the reference
routes changesets repos topublish sync-versionrather than to the new verb. -
36d05fc: Shorten the bundled skill names by dropping the redundant
universal-pluginhalf — the plugin
namespace already supplies it.universal-plugin→plugin,publish-universal-plugin→
publish-plugin,upgrade-universal-plugin→upgrade-plugin,migrate-universal-plugin→
migrate-plugin. Invocation becomes/universal-plugin:plugininstead of
/universal-plugin:universal-plugin.adopt-upxis unchanged.Breaking for name-pinned installs. Installing the whole plugin is unaffected — the marketplace
entry resolves the package directory and discovers skills fromskills/, so nothing there refers to
a skill by name. But a per-skill install pinned the old name, and that path is gone:# before npx skills add cyberuni/universal-plugin --skill upgrade-universal-plugin # after npx skills add cyberuni/universal-plugin --skill upgrade-plugin
Update the
skillskey andsourcepath in yourskills-lock.json, or re-runskills addwith the
new name. No aliases are shipped for the old names. -
e2a57e1: Add
upx, a local-first package runner, as a second lean bin.upx <pkg>@<range> [args…]resolves the requested semver range against installed packages —
walkingnode_modulesfrom the cwd up through its ancestors (nearest wins), then the global
npm root -gstore — and spawns the matching binary directly, roughly 10× faster thannpx
(which pays ~1s of registry resolution per call even when cached). On a miss it falls back to
npxwith the spec exactly as given, printing a one-line stderr notice. It is a transparent
exec wrapper: the child owns stdout/stderr and its exit code;upxinstalls nothing and writes
nothing tonode_modulesor the global store. A dist-tag (pkg@next) goes straight tonpx.Also adds
plugin bundle --runner <npx|upx>: omitting it preserves each skill reference's
existing runner word while re-pinning the version;--runner upxopts a release into emitting
upxreferences.
Patch Changes
- d28501c: Synchronize local Codex marketplace entry versions with canonical plugin manifests.
- df326ae:
plugin init --npmnow always wires the open-standard base — the canonical rootplugin.jsonand
skills/— intopackage.jsonfiles, whatever--vendortargets are named. Previously the base
was tied to vendor selection, so a default--npmrun wired.claude-plugin/plugin.jsonand
skills/but never the canonical manifest, and the published package shipped a Claude Code plugin
rather than a standard one. Vendor-derived manifests are added on top of the base, never in place
of it. - 454267e: Restructure the
pluginskill as a gateway. The Create, Inspect, Update, and Delete procedures
moved out ofSKILL.mdintoreferences/create.md,references/inspect.md,
references/update.md, andreferences/delete.md.SKILL.mdnow carries only the trigger,
prerequisites, and a routing table, so an agent loads one operation's procedure instead of all four.