universal-plugin 0.3.1 → 0.5.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.
Files changed (51) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/.cursor-plugin/plugin.json +1 -1
  4. package/LICENSE +21 -0
  5. package/dist/cli.mjs +1262 -375
  6. package/dist/data/vendors.json +12 -0
  7. package/dist/run.mjs +4 -4
  8. package/governances/plugin-design.md +42 -1
  9. package/package.json +3 -1
  10. package/plugin.json +1 -1
  11. package/readme.md +80 -42
  12. package/skills/doctor/README.md +42 -0
  13. package/skills/doctor/SKILL.md +144 -0
  14. package/skills/doctor/scripts/doctor.mjs +273 -0
  15. package/skills/init/README.md +57 -0
  16. package/skills/init/SKILL.md +219 -0
  17. package/skills/{plugin → init}/references/adopt.md +8 -4
  18. package/skills/init/references/create.md +122 -0
  19. package/skills/init/references/detection.md +62 -0
  20. package/skills/init/references/frontmatter.md +65 -0
  21. package/skills/init/references/standard.md +93 -0
  22. package/skills/init/references/update.md +31 -0
  23. package/skills/init/references/vendors/claude-code.md +76 -0
  24. package/skills/init/references/vendors/codex.md +56 -0
  25. package/skills/init/references/vendors/copilot-cli.md +53 -0
  26. package/skills/init/references/vendors/cursor.md +52 -0
  27. package/skills/init/scripts/init.mjs +11 -0
  28. package/skills/marketplace/README.md +38 -0
  29. package/skills/marketplace/SKILL.md +170 -0
  30. package/skills/marketplace/references/runtimes.md +104 -0
  31. package/skills/marketplace/scripts/install-docs.mjs +115 -0
  32. package/skills/marketplace/scripts/marketplace.mjs +11 -0
  33. package/skills/publish-plugin/SKILL.md +10 -8
  34. package/skills/publish-plugin/references/vendor-requirements.md +13 -10
  35. package/skills/remove-plugin/README.md +38 -0
  36. package/skills/remove-plugin/SKILL.md +87 -0
  37. package/skills/version/README.md +36 -0
  38. package/skills/{plugin/references/version.md → version/SKILL.md} +27 -5
  39. package/skills/version/scripts/version.mjs +11 -0
  40. package/skills/plugin/README.md +0 -37
  41. package/skills/plugin/SKILL.md +0 -105
  42. package/skills/plugin/references/create.md +0 -163
  43. package/skills/plugin/references/delete.md +0 -23
  44. package/skills/plugin/references/inspect.md +0 -21
  45. package/skills/plugin/references/update.md +0 -26
  46. /package/skills/{plugin → init}/assets/templates/agent.md +0 -0
  47. /package/skills/{plugin → init}/assets/templates/command.md +0 -0
  48. /package/skills/{plugin → init}/assets/templates/hooks.json +0 -0
  49. /package/skills/{plugin → init}/assets/templates/plugin.json +0 -0
  50. /package/skills/{plugin → init}/assets/templates/setup-command.md +0 -0
  51. /package/skills/{plugin → init}/assets/templates/skill.md +0 -0
@@ -1,4 +1,9 @@
1
- # Move a universal plugin's version
1
+ ---
2
+ name: version
3
+ description: Use this skill to move a universal agent plugin's version — bump it, set an explicit one, cut a release number, or reconcile a version that drifted between the canonical plugin.json and its npm package.json. Handles both release models: a changesets repository, where the number is decided by the release and carried in with publish sync-version, and a plain repository, where plugin version does the whole move. Trigger on "bump the plugin version", "release a new version of this plugin", "set the plugin version to 1.0.0", "cut a patch release", or "the manifest and package.json versions disagree".
4
+ ---
5
+
6
+ # Move a plugin's version
2
7
 
3
8
  Bump or set the version a plugin releases under, keeping every file that carries one in sync.
4
9
 
@@ -31,9 +36,13 @@ to decide again.
31
36
  ## Step 1 — Move the version
32
37
 
33
38
  ```bash
34
- npx universal-plugin plugin version <bump>
39
+ node scripts/version.mjs <bump>
35
40
  ```
36
41
 
42
+ Resolve that path against this skill's own directory; it runs the CLI that shipped beside it, so
43
+ nothing is downloaded. `npx universal-plugin plugin version <bump>` is the fallback. The command
44
+ never prompts, so it is safe to run unattended once the release type is decided.
45
+
37
46
  `<bump>` is either a semver release type or an explicit version:
38
47
 
39
48
  | `<bump>` | From `1.2.3` you get |
@@ -66,9 +75,12 @@ manifest, the `packagePath` `package.json` if one is declared, and one derived m
66
75
  harness:
67
76
 
68
77
  ```bash
69
- npx universal-plugin plugin version patch --format json
78
+ node scripts/version.mjs patch --format json
70
79
  ```
71
80
 
81
+ Default stdout is TOON, which is the machine contract this CLI documents; `--format json` is there
82
+ for non-LLM consumers. Either way, read the reported files rather than re-deriving what moved.
83
+
72
84
  If the plugin declares no harnesses, only the authored files are written — that is correct, not a
73
85
  failure.
74
86
 
@@ -78,7 +90,7 @@ Every guard resolves before the first write, so a failed run leaves the tree unt
78
90
 
79
91
  | Message names | What it means | Do this |
80
92
  |---|---|---|
81
- | a missing `plugin.json` | not at a plugin root, or the plugin was never scaffolded | `cd` to the plugin root, or see [`create.md`](./create.md) |
93
+ | a missing `plugin.json` | not at a plugin root, or the plugin was never scaffolded | `cd` to the plugin root, or run `/universal-plugin:init` |
82
94
  | no version to bump from | the manifest has never carried a `version` | pass an explicit version (`plugin version 0.1.0`) to set the first one |
83
95
  | an unknown version or release type | the argument is neither a release type nor valid semver | use one of the values in the table above |
84
96
  | a target that does not advance | the requested version is not greater than the current one | pick a higher version, or pass `--force` if the user genuinely wants to move backward |
@@ -92,6 +104,16 @@ Every guard resolves before the first write, so a failed run leaves the tree unt
92
104
  - **Run `npm version`.** It knows only `package.json` and leaves the canonical manifest — the actual
93
105
  source of truth — stale.
94
106
 
107
+ ## Related skills
108
+
109
+ | Task | Skill |
110
+ |------|-------|
111
+ | Create, adopt, or change what the plugin declares | `init` |
112
+ | Check whether the two authored versions agree | `doctor` |
113
+ | Add a changeset for the change being released | `add-changeset` |
114
+ | Refresh the repository's own marketplace catalogs after a bump | `marketplace` |
115
+ | List the released plugin in the shared marketplace | `publish-plugin` |
116
+
95
117
  ## References
96
118
 
97
- - Spec: https://github.com/cyberuni/universal-plugin/blob/main/packages/universal-plugin/.agents/spec/plugin/version/README.md
119
+ - Spec: [`plugin/version/`](https://github.com/cyberuni/universal-plugin/blob/main/packages/universal-plugin/.agents/spec/plugin/version/README.md)
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ // Runs `universal-plugin plugin version` from the CLI that ships beside this skill, so a release
3
+ // number never depends on a network fetch or on which version `npx` happens to resolve.
4
+ import { dirname, join } from 'node:path'
5
+ import { fileURLToPath } from 'node:url'
6
+
7
+ // <package>/skills/<skill>/scripts/version.mjs: four levels up is the package root.
8
+ const packageRoot = dirname(dirname(dirname(dirname(fileURLToPath(import.meta.url)))))
9
+
10
+ process.argv.splice(2, 0, 'plugin', 'version')
11
+ await import(join(packageRoot, 'bin', 'universal-plugin.mjs'))
@@ -1,37 +0,0 @@
1
- # plugin skill
2
-
3
- A skill for creating, inspecting, updating, and deleting universal AI coding agent plugins that target multiple runtimes from a single source of truth.
4
-
5
- ## Supported runtimes
6
-
7
- | Vendor | Manifest path |
8
- | ----------- | ---------------------------- |
9
- | Claude Code | `.claude-plugin/plugin.json` |
10
- | Cursor | `.cursor-plugin/plugin.json` |
11
- | Codex | `.codex-plugin/plugin.json` |
12
- | Copilot CLI | root `plugin.json` (the canonical manifest; nothing derived) |
13
-
14
- Universal minimum (no vendor manifest needed): `skills/<name>/SKILL.md` or `.mcp.json`. The canonical source of truth is root `plugin.json`.
15
-
16
- ## Operations
17
-
18
- `SKILL.md` is a gateway: it detects what the project already contains, then routes to one operation
19
- reference and only that one gets read.
20
-
21
- | Operation | Reference | What it covers |
22
- | --------- | --------- | -------------- |
23
- | Create | [`references/create.md`](./references/create.md) | scaffold a new plugin with chosen vendors and components |
24
- | Adopt | [`references/adopt.md`](./references/adopt.md) | put an existing vendor-specific plugin, or already-shipped skills, onto the open standard |
25
- | Inspect | [`references/inspect.md`](./references/inspect.md) | show build status for each declared vendor |
26
- | Update | [`references/update.md`](./references/update.md) | add/remove vendors or components |
27
- | Delete | [`references/delete.md`](./references/delete.md) | remove generated manifests or the whole plugin |
28
-
29
- On invocation the gateway checks for existing vendor manifests and publicly-shipped skills, and
30
- offers adoption when it finds either without a canonical `plugin.json`. Repo-private agent config
31
- (`.claude/skills/`, `.agents/skills/`) is deliberately excluded — it is not something to package.
32
-
33
- ## References
34
-
35
- - [Spec](https://github.com/cyberuni/universal-plugin/blob/main/packages/universal-plugin/.agents/spec/spec.md)
36
- - [Schema](https://raw.githubusercontent.com/cyberuni/universal-plugin/refs/heads/main/schema/v1.json)
37
- - [Examples](https://github.com/cyberuni/universal-plugin/tree/main/examples)
@@ -1,105 +0,0 @@
1
- ---
2
- name: plugin
3
- description: Use this skill when creating, inspecting, updating, versioning, or deleting a universal agent plugin that targets multiple AI coding agent runtimes — Claude Code, Cursor, Codex, GitHub Copilot CLI. Also use it to convert a vendor-specific plugin, or a project that already ships skills, onto the open Agent Plugins Specification, or to move a plugin's version — for asks like "make my Claude Code plugin work in Cursor", "convert this to the open plugin standard", "turn these skills into a plugin", "bump my plugin's version", "release a new version of this plugin", or "set the plugin version to 1.0.0".
4
- ---
5
-
6
- # Universal Plugin
7
-
8
- Gateway skill. Identify which operation the user wants, load that operation's reference, and follow
9
- it.
10
-
11
- ## When to use
12
-
13
- When the user wants to create, inspect, update, version, or delete a plugin targeting Claude Code,
14
- Cursor, Codex, and/or GitHub Copilot CLI from a single source of truth.
15
-
16
- ## Prerequisites
17
-
18
- Load governance before starting any operation:
19
-
20
- ```bash
21
- npx universal-plugin governance show plugin-design
22
- ```
23
-
24
- Until the CLI is available, read `governances/plugin-design.md` from this plugin's installation
25
- directory. It is the authoritative source for component selection rules and anti-patterns.
26
-
27
- ## Step 0 — Detect what is already here
28
-
29
- Run this before routing. What the project already contains often changes which operation is
30
- actually right — a "create a plugin" request in a repo that already ships skills is an *adopt*, not
31
- a create.
32
-
33
- ```bash
34
- ls -d .claude-plugin .cursor-plugin .codex-plugin .github/plugin .plugin 2>/dev/null
35
- test -f plugin.json && head -20 plugin.json
36
- find . -name SKILL.md -not -path '*/node_modules/*' -not -path './.git/*'
37
- ```
38
-
39
- Read the signals:
40
-
41
- | What you find | What it means | Do this |
42
- |---------------|---------------|---------|
43
- | Root `plugin.json` with `$schema` on `agent-plugins.org` **and** an `extensions` object | Already on the open standard | Nothing to offer — route normally |
44
- | A vendor manifest (`.claude-plugin/`, `.cursor-plugin/`, `.codex-plugin/`, `.github/plugin/`) with **no** canonical root `plugin.json` | A vendor-specific plugin | **Offer to adopt** |
45
- | Root `plugin.json` with no `$schema`/`extensions` | Legacy single-vendor manifest | **Offer to adopt** |
46
- | Public skills (see below) and no plugin manifest at all | Skills shipped without a plugin | **Offer to adopt** |
47
- | None of the above | Greenfield | Route normally |
48
-
49
- ### Which skills count as public
50
-
51
- Only offer on skills the project **distributes**. Repo-local agent configuration is not a plugin,
52
- and offering to package it is wrong.
53
-
54
- | Location | Public? |
55
- |----------|---------|
56
- | `skills/<name>/SKILL.md` at the repo root | Yes |
57
- | `<package>/skills/<name>/SKILL.md` where `package.json` `files` ships it | Yes |
58
- | `.claude/skills/`, `.agents/skills/`, `.cursor/rules/` | **No** — repo-private tooling |
59
-
60
- If the only skills are in private locations, say nothing about adoption.
61
-
62
- ### Making the offer
63
-
64
- State what you found, what adoption would give them, and let them decline:
65
-
66
- > This repo has a Claude Code plugin manifest but no canonical `plugin.json`. I can convert it to
67
- > the open Agent Plugins Specification, which would let one manifest drive Cursor, Codex, and
68
- > Copilot CLI too — Claude Code keeps working exactly as it does now. Want me to?
69
-
70
- Offer once. If the user declines, or their request is already a specific unrelated operation
71
- (deleting manifests, inspecting status), drop it and do what they asked.
72
-
73
- ## Route
74
-
75
- Read exactly the reference for the operation at hand — do not load all six.
76
-
77
- | The user wants to… | Reference |
78
- |--------------------|-----------|
79
- | Scaffold a new plugin, add vendors/components to a fresh one, or build vendor manifests | [`references/create.md`](./references/create.md) |
80
- | Put an existing vendor-specific plugin, or already-shipped skills, onto the open standard | [`references/adopt.md`](./references/adopt.md) |
81
- | See what a plugin declares and which vendor manifests are built or stale | [`references/inspect.md`](./references/inspect.md) |
82
- | Add or remove a vendor, or add or remove a component, on an existing plugin | [`references/update.md`](./references/update.md) |
83
- | Bump or set the plugin's version, or cut a release of it | [`references/version.md`](./references/version.md) |
84
- | Remove generated manifests, or remove the whole plugin | [`references/delete.md`](./references/delete.md) |
85
-
86
- If the request spans more than one operation (for example "add Codex and rebuild"), load each
87
- reference in turn as you reach that part of the work.
88
-
89
- If the operation is unclear, ask which the user means rather than guessing.
90
-
91
- ## Related skills
92
-
93
- | Task | Skill |
94
- |------|-------|
95
- | Move a repo-root plugin into its npm package | `migrate-plugin` |
96
- | Publish a packaged plugin to the marketplace | `publish-plugin` |
97
- | Bump the pinned `universal-plugin@<version>` the project *calls* (not the plugin's own version) | `upgrade-plugin` |
98
- | Rewrite `npx` pins to the `upx` runner | `adopt-upx` |
99
-
100
- ## References
101
-
102
- - Governance: `npx cyberplace governance show plugin-design`
103
- - Spec: https://github.com/cyberuni/universal-plugin/blob/main/packages/universal-plugin/.agents/spec/spec.md
104
- - Schema: https://raw.githubusercontent.com/cyberuni/universal-plugin/refs/heads/main/schema/v1.json
105
- - Examples: https://github.com/cyberuni/universal-plugin/tree/main/examples
@@ -1,163 +0,0 @@
1
- # Create a universal plugin
2
-
3
- Scaffold a new plugin from a single canonical `plugin.json` and build one manifest per chosen
4
- vendor.
5
-
6
- ## Step 1 — Gather plugin identity
7
-
8
- Ask if not provided. All fields map to the canonical root `plugin.json`.
9
-
10
- | Field | Required | Notes |
11
- |-------|----------|-------|
12
- | `name` | Yes | kebab-case, 1–64 chars, `a-z 0-9 - .` only |
13
- | `description` | Recommended | one sentence; Codex requires this |
14
- | `version` | If publishing | semver; Codex requires this |
15
- | `author.name` | Recommended | person or org name |
16
- | `homepage` | Optional | docs or landing page URL |
17
- | `repository` | Optional | source repo URL |
18
- | `license` | Optional | SPDX identifier e.g. `MIT` |
19
- | `keywords` | Optional | discovery tags; array of strings |
20
-
21
- ## Step 2 — Choose vendor targets
22
-
23
- Ask the user which runtimes to support. Each chosen vendor becomes a key in
24
- `extensions["org.cyberuni.universal-plugin"].harnesses` — that is what drives the `build` output.
25
- Add the vendor's id to `extensions["org.cyberuni.universal-plugin"].vendors` too, so `build` knows
26
- to generate its manifest.
27
-
28
- | Vendor ID | Manifest read from | Hook event case | Required fields beyond `name` |
29
- |-----------|--------------------|-----------------|-------------------------------|
30
- | `claude-code` | `.claude-plugin/plugin.json` *(derived)* | PascalCase | none |
31
- | `cursor` | `.cursor-plugin/plugin.json` *(derived)* | camelCase | none |
32
- | `codex` | `.codex-plugin/plugin.json` *(derived)* | PascalCase | `version`, `description` |
33
- | `copilot-cli` | root `plugin.json` — **the canonical manifest itself** | camelCase | none |
34
-
35
- **Copilot CLI derives nothing.** It searches `.plugin/plugin.json` → `plugin.json` →
36
- `.github/plugin/plugin.json` → `.claude-plugin/plugin.json` and takes the *first* match, so root
37
- always wins; and it has read Open Plugin Spec v1 manifests since v1.0.74. `plugin build` reports it
38
- with status `canonical` and writes no file. A `harnesses["copilot-cli"]` override cannot be
39
- delivered — the canonical schema is closed to vendor-only fields — and the build warns if you set
40
- one.
41
-
42
- Universal minimum (no vendor manifest needed): `skills/<name>/SKILL.md` + `.mcp.json`.
43
-
44
- Default to all four if the user is unsure.
45
-
46
- ## Step 3 — Choose components
47
-
48
- Infer from context; ask only if ambiguous. Apply rules from the `plugin-design` governance loaded
49
- in the gateway's Prerequisites.
50
-
51
- | Component | Field | Directory | Cross-vendor? |
52
- |-----------|-------|-----------|--------------|
53
- | Skills | `skills` | `skills/<name>/SKILL.md` | Yes — all |
54
- | Commands | `commands` | `commands/<name>.md` | Claude Code, Cursor, Copilot CLI |
55
- | Agents | `agents` | `agents/<name>.md` | Claude Code, Cursor, Copilot CLI |
56
- | MCP servers | `mcpServers` | `.mcp.json` | Yes — all |
57
- | Hooks | `hooks` | `hooks/hooks.json` | Partial — event names translated on build |
58
- | Rules | `rules` | `rules/<name>.mdc` | Cursor-only |
59
- | LSP servers | `lspServers` | `.lsp.json` | Claude Code, Cursor |
60
- | Output styles | `outputStyles` | `output-styles/` | Claude Code only |
61
-
62
- ## Step 4 — Scaffold files
63
-
64
- Read the templates from `../assets/templates/` and fill in the placeholders:
65
-
66
- | File to create | Template |
67
- |----------------|----------|
68
- | `plugin.json` | `assets/templates/plugin.json` |
69
- | `skills/<name>/SKILL.md` | `assets/templates/skill.md` |
70
- | `commands/<name>.md` | `assets/templates/command.md` |
71
- | `agents/<name>.md` | `assets/templates/agent.md` |
72
- | `hooks/hooks.json` | `assets/templates/hooks.json` |
73
- | `commands/setup.md` (when `rules/` included) | `assets/templates/setup-command.md` |
74
-
75
- Directory layout:
76
-
77
- ```
78
- <plugin-name>/
79
- ├── plugin.json ← canonical definition (source of truth)
80
- ├── skills/<name>/SKILL.md
81
- ├── commands/
82
- ├── agents/
83
- ├── rules/ (only if always-on Cursor guidance requested)
84
- ├── hooks/hooks.json
85
- ├── .mcp.json
86
- └── README.md
87
- ```
88
-
89
- ## Step 5 — Populate extensions["org.cyberuni.universal-plugin"]
90
-
91
- In root `plugin.json`, under `extensions["org.cyberuni.universal-plugin"]`, add the chosen vendors
92
- to `vendors` and add a `harnesses` object with one entry per chosen vendor. An empty `{}` opts into
93
- that vendor's output with no vendor-specific fields.
94
-
95
- ```json
96
- {
97
- "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
98
- "name": "<plugin-name>",
99
- "version": "1.0.0",
100
- "description": "<description>",
101
- "author": { "name": "<author>" },
102
- "extensions": {
103
- "org.cyberuni.universal-plugin": {
104
- "vendors": ["claude-code", "cursor", "codex", "copilot-cli"],
105
- "skills": "./skills/",
106
- "harnesses": {
107
- "claude-code": {},
108
- "cursor": {
109
- "publisher": "<org>",
110
- "category": "<category>",
111
- "tags": ["<tag>"]
112
- },
113
- "codex": {
114
- "interface": {
115
- "displayName": "<Human Name>",
116
- "category": "<category>"
117
- }
118
- },
119
- "copilot-cli": {
120
- "category": "<category>",
121
- "tags": ["<tag>"]
122
- }
123
- }
124
- }
125
- }
126
- }
127
- ```
128
-
129
- See spec §3.3 for the full list of vendor-specific fields:
130
- https://github.com/cyberuni/universal-plugin/blob/main/packages/universal-plugin/.agents/spec/spec.md
131
-
132
- ## Step 6 — Audit skills
133
-
134
- Audit each skill via the aced **improve-skill** skill's mechanical `validate.mts` engine:
135
-
136
- ```bash
137
- node "<path to aced improve-skill>/scripts/validate.mts" --path skills/<skill-name>
138
- ```
139
-
140
- Fix any CRITICAL findings. Then invoke the **audit-skill** skill for full review.
141
-
142
- ## Step 7 — Build vendor manifests
143
-
144
- > **Note:** The `build` CLI is not yet available. Use the manual steps below.
145
-
146
- For each vendor in `extensions["org.cyberuni.universal-plugin"].vendors`:
147
-
148
- 1. Copy canonical fields from root `plugin.json`
149
- 2. Merge vendor-specific fields from `extensions["org.cyberuni.universal-plugin"].harnesses.<vendor>`
150
- 3. Drop fields not supported by that vendor (see spec §6.1)
151
- 4. Translate hook event names (see spec §4.2)
152
- 5. Translate `${PLUGIN_ROOT}` and `${PLUGIN_DATA}` env vars (see spec §5)
153
- 6. Write to the vendor output path (see the Step 2 table)
154
-
155
- See spec §7 for full build rules:
156
- https://github.com/cyberuni/universal-plugin/blob/main/packages/universal-plugin/.agents/spec/spec.md
157
-
158
- ## Step 8 — Install locally for testing
159
-
160
- ```bash
161
- ln -sf "$(pwd)" ~/.claude/plugins/local/<plugin-name> # Claude Code
162
- ln -sf "$(pwd)" ~/.cursor/plugins/local/<plugin-name> # Cursor → Developer: Reload Window
163
- ```
@@ -1,23 +0,0 @@
1
- # Delete a universal plugin
2
-
3
- ## Remove generated manifests only (keep source)
4
-
5
- Delete each vendor's output file. Generated manifests are build artifacts — safe to delete and
6
- regenerate via [`create.md`](./create.md) Step 7.
7
-
8
- ```bash
9
- rm -f .claude-plugin/plugin.json
10
- rm -f .cursor-plugin/plugin.json
11
- rm -f .codex-plugin/plugin.json
12
- ```
13
-
14
- > **Never delete root `plugin.json`.** It is the canonical source of truth, not a build artifact —
15
- > and it is also what Copilot CLI reads, so removing it takes out both the source and the Copilot
16
- > target. `copilot-cli` has no generated manifest to clean.
17
-
18
- If the project has a stale `.github/plugin/plugin.json` from an older build, it is safe to delete —
19
- that path is shadowed by root and is no longer generated.
20
-
21
- ## Remove the whole plugin
22
-
23
- Delete the plugin root directory. Confirm with the user before proceeding — this is irreversible.
@@ -1,21 +0,0 @@
1
- # Inspect a universal plugin
2
-
3
- Show the current state of a plugin.
4
-
5
- 1. Read root `plugin.json` — show `name`, `version`, declared vendors
6
- (`extensions["org.cyberuni.universal-plugin"].vendors`).
7
- 2. For each vendor, check whether the generated manifest exists at its output path.
8
- 3. Report status: which vendors are built, which are missing or stale.
9
-
10
- Example output:
11
-
12
- ```
13
- Plugin: my-plugin v1.0.0
14
- Vendors declared: claude-code, cursor, codex, copilot-cli
15
- claude-code .claude-plugin/plugin.json ✓ present
16
- cursor .cursor-plugin/plugin.json ✓ present
17
- codex .codex-plugin/plugin.json ✗ missing — run build
18
- copilot-cli plugin.json ✗ missing — run build
19
- ```
20
-
21
- Vendor output paths are listed in [`create.md`](./create.md) Step 2.
@@ -1,26 +0,0 @@
1
- # Update a universal plugin
2
-
3
- Change which vendors or components an existing plugin declares. Every path ends with a rebuild —
4
- see [`create.md`](./create.md) Step 7.
5
-
6
- ## Add a vendor
7
-
8
- 1. Add the vendor id to `extensions["org.cyberuni.universal-plugin"].vendors` in root
9
- `plugin.json`, and add its key to `extensions["org.cyberuni.universal-plugin"].harnesses`.
10
- 2. Populate vendor-specific fields (see spec §3.3).
11
- 3. If the vendor requires extra fields (`codex`: `version`, `description`), ensure they are in the
12
- canonical section.
13
- 4. Rebuild for the new vendor.
14
-
15
- ## Remove a vendor
16
-
17
- 1. Remove the vendor id from `extensions["org.cyberuni.universal-plugin"].vendors` and its key from
18
- `harnesses`.
19
- 2. Delete the generated manifest at its output path.
20
-
21
- ## Add or remove a component
22
-
23
- 1. Add/remove the component field under `extensions["org.cyberuni.universal-plugin"]` in root
24
- `plugin.json` (e.g. `"commands": "./commands/"`).
25
- 2. Scaffold or delete the corresponding files.
26
- 3. Rebuild to regenerate all vendor manifests.