universal-plugin 0.17.0 → 0.18.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 (37) 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/CHANGELOG.md +28 -0
  5. package/agents/agentskills-specialist.md +6 -11
  6. package/com.github.copilot/agents/agentskills-specialist.agent.md +6 -11
  7. package/dist/cli.mjs +164 -12
  8. package/package.json +1 -1
  9. package/plugin.json +1 -1
  10. package/readme.md +1 -1
  11. package/references/plugin-design.md +19 -33
  12. package/references/slash-invocation.md +2 -2
  13. package/skills/adopt-upx/scripts/rewrite-upx.mjs +1 -1
  14. package/skills/build-plugin/SKILL.md +2 -3
  15. package/skills/build-plugin/scripts/build.mjs +1 -1
  16. package/skills/doctor-universal-plugin/README.md +1 -1
  17. package/skills/doctor-universal-plugin/SKILL.md +18 -6
  18. package/skills/doctor-universal-plugin/scripts/doctor.mjs +225 -2
  19. package/skills/init-universal-plugin/README.md +1 -1
  20. package/skills/init-universal-plugin/SKILL.md +62 -3
  21. package/skills/init-universal-plugin/references/create.md +10 -7
  22. package/skills/init-universal-plugin/references/detection.md +1 -1
  23. package/skills/init-universal-plugin/references/frontmatter.md +1 -1
  24. package/skills/init-universal-plugin/references/release-tools.md +272 -0
  25. package/skills/init-universal-plugin/references/standard.md +3 -3
  26. package/skills/init-universal-plugin/references/vendors/copilot-cli.md +3 -0
  27. package/skills/init-universal-plugin/scripts/init.mjs +1 -1
  28. package/skills/marketplace/scripts/add.mjs +1 -1
  29. package/skills/marketplace/scripts/install-docs.mjs +1 -1
  30. package/skills/marketplace/scripts/marketplace.mjs +1 -1
  31. package/skills/marketplace/scripts/update.mjs +1 -1
  32. package/skills/marketplace/scripts/validate.mjs +1 -1
  33. package/skills/migrate-plugin/SKILL.md +1 -2
  34. package/skills/publish-plugin/SKILL.md +7 -6
  35. package/skills/version/README.md +7 -3
  36. package/skills/version/SKILL.md +129 -10
  37. package/skills/version/scripts/version.mjs +1 -1
@@ -0,0 +1,272 @@
1
+ # Release tool wiring
2
+
3
+ Each release tool decides the release number in its own way. The plugin still needs that number
4
+ stamped into `plugin.json`, the vendor manifests, the catalogs, and the skill pins. The `version`
5
+ skill owns the stamp: `plugin version` with a number the tool hands it. This file covers the wiring
6
+ that makes a release tool call it.
7
+
8
+ `plugin init` writes the changesets wiring itself (SKILL.md Phase 3). It writes nothing for the
9
+ other tools. Their config takes several file formats, JavaScript modules among them, and it often
10
+ carries plugins the user added. Editing it is a judgment call, so the skill makes the edit and the
11
+ user approves it.
12
+
13
+ | Tool | Config the survey finds | Wiring |
14
+ | --- | --- | --- |
15
+ | changesets | `.changeset/` | `plugin init` writes it (SKILL.md Phase 3) |
16
+ | semantic-release | `.releaserc`, `.releaserc.{json,yaml,yml,js,cjs,mjs}`, `release.config.{js,cjs,mjs}`, or a `release` key in `package.json` | [below](#semantic-release) |
17
+ | release-it | `.release-it.{json,yaml,yml,toml,js,cjs,ts}`, or a `release-it` key in `package.json` | [below](#release-it) |
18
+ | release-please | `release-please-config.json`, `.release-please-manifest.json` | [below](#release-please) |
19
+
20
+ ## semantic-release
21
+
22
+ semantic-release writes the version only during its own run. Two plugins carry the number into the
23
+ plugin:
24
+
25
+ - **`@semantic-release/exec`** runs the stamp in its `prepare` step:
26
+ `prepareCmd: "universal-plugin plugin version ${nextRelease.version}"`. semantic-release fills in
27
+ `${nextRelease.version}` with its lodash template. Add `--root <plugin-root>` when the plugin root
28
+ is not the repository root.
29
+ - **`@semantic-release/git`** commits the stamped files back. Copilot CLI and GitHub-hosted
30
+ marketplaces read `plugin.json` from the repository, not from a package, so without this commit
31
+ those channels never see the new number (ADR-0010 §2).
32
+
33
+ A `plugins` list replaces semantic-release's default list. It does not merge with it. The defaults
34
+ are `commit-analyzer`, `release-notes-generator`, `npm`, and `github`. A config with no `plugins`
35
+ key therefore gets the full list written out, minus whatever the case below drops.
36
+
37
+ Within each step, plugins run in list order. Put `exec` after `npm` and before `git`. That way `npm`
38
+ moves `package.json` first, `exec` stamps the plugin, and `git` commits both.
39
+
40
+ ### A plugin that ships to no npm package
41
+
42
+ Drop `@semantic-release/npm` from the list. `npmPublish: false` does not cover this: the plugin
43
+ still sets `package.json` `version`, and it requires a `package.json` that a git-installed plugin
44
+ usually lacks. Without `npm`, semantic-release needs no `package.json` at all.
45
+
46
+ ```json
47
+ {
48
+ "branches": ["main"],
49
+ "plugins": [
50
+ "@semantic-release/commit-analyzer",
51
+ "@semantic-release/release-notes-generator",
52
+ ["@semantic-release/exec", {
53
+ "prepareCmd": "npx universal-plugin@0.18.0 plugin version ${nextRelease.version}"
54
+ }],
55
+ ["@semantic-release/git", {
56
+ "assets": [
57
+ "plugin.json",
58
+ ".claude-plugin/**",
59
+ ".cursor-plugin/**",
60
+ ".codex-plugin/**",
61
+ ".agents/plugins/marketplace.json",
62
+ ".github/plugin/**",
63
+ "com.github.copilot/**",
64
+ "skills/**",
65
+ ".plugin/pins.json"
66
+ ]
67
+ }],
68
+ "@semantic-release/github"
69
+ ]
70
+ }
71
+ ```
72
+
73
+ With no `package.json`, `universal-plugin` is not installed, so the command runs it through `npx`.
74
+ Pin it to the CLI version this skill ships with, as shown. The `upgrade-plugin` skill moves that pin
75
+ later.
76
+ Where the repository does install `universal-plugin` as a devDependency, use the bare
77
+ `universal-plugin` instead.
78
+
79
+ ### A plugin that ships on npm
80
+
81
+ Keep `@semantic-release/npm` and add the other two after it:
82
+
83
+ ```json
84
+ ["@semantic-release/npm"],
85
+ ["@semantic-release/exec", { "prepareCmd": "universal-plugin plugin version ${nextRelease.version}" }],
86
+ ["@semantic-release/git", { "assets": ["package.json", "plugin.json", "..."] }]
87
+ ```
88
+
89
+ Setting `assets` replaces the git plugin's default list, which holds `package.json`,
90
+ `package-lock.json`, `npm-shrinkwrap.json`, and `CHANGELOG.md`. List again each of those the
91
+ repository needs, alongside the plugin files above.
92
+
93
+ ### Assets
94
+
95
+ `plugin version` rewrites `plugin.json` and the skill pins, and then re-derives every vendor
96
+ manifest and repository catalog. Commit all of them, or the repository's files disagree with the
97
+ tag. The list above covers every place the CLI writes. A glob that matches nothing adds nothing, so
98
+ the whole list is safe to keep for a plugin that does not declare every vendor. Under a plugin root
99
+ below the repository root, prefix the plugin's own paths with that root. The catalogs
100
+ (`.claude-plugin/marketplace.json`, `.cursor-plugin/marketplace.json`,
101
+ `.agents/plugins/marketplace.json`, `.github/plugin/marketplace.json`) stay at the repository root.
102
+ Add the mcp file when the plugin declares one.
103
+
104
+ The git plugin's default commit message ends in `[skip ci]`, so the commit back does not start
105
+ another release.
106
+
107
+ ### Applying it
108
+
109
+ 1. Edit the config file the survey found, in its own format. For a JavaScript config, edit the
110
+ `plugins` array in place. If no config exists, write `.releaserc.json`.
111
+ 2. Keep every plugin the user already lists, and keep their order relative to each other.
112
+ 3. Show the before and after `plugins` list in the Phase 3 plan. Apply only once the user approves.
113
+ 4. Name the packages the release job must install: `@semantic-release/exec` and
114
+ `@semantic-release/git`. The `--no-ci` local run, and the CI job that runs semantic-release, both
115
+ need them. Installing them is the user's step. Do not edit the CI workflow (SKILL.md Rules).
116
+
117
+ ## release-it
118
+
119
+ release-it runs its `after:bump` hook after it settles the new number and before its release
120
+ commit and tag. That commit stages every tracked file the hook changed (`git add . --update`), so
121
+ the stamp ships in the tagged commit with no extra plugin. `${version}` in a hook is the new number.
122
+
123
+ ### A plugin that ships to no npm package
124
+
125
+ Set `"npm": false`. release-it then ignores `package.json`, needs none, and reads the current version
126
+ from the latest git tag. Add the stamp as the `after:bump` hook:
127
+
128
+ ```json
129
+ {
130
+ "npm": false,
131
+ "hooks": {
132
+ "after:bump": "npx universal-plugin@0.18.0 plugin version ${version}"
133
+ }
134
+ }
135
+ ```
136
+
137
+ With no `package.json`, `universal-plugin` is not installed, so the hook runs it through `npx`. Pin
138
+ it to the CLI version this skill ships with, as shown. The `upgrade-plugin` skill moves that pin
139
+ later.
140
+
141
+ ### A plugin that ships on npm
142
+
143
+ Keep release-it's npm plugin. It bumps `package.json`, and the hook then stamps the same number into
144
+ the plugin:
145
+
146
+ ```json
147
+ {
148
+ "hooks": { "after:bump": "universal-plugin plugin version ${version}" }
149
+ }
150
+ ```
151
+
152
+ Use the bare `universal-plugin` when the repository installs it as a devDependency, as an
153
+ npm-shipped plugin usually does. Otherwise use the pinned `npx` form above. Here release-it reads
154
+ the current version from `package.json`, so the first release needs no tag.
155
+
156
+ Add `--root <plugin-root>` to the hook when release-it runs from a directory other than the plugin
157
+ root.
158
+
159
+ ### The first release needs a tag
160
+
161
+ With `"npm": false`, release-it reads the current number from the latest tag, never from
162
+ `plugin.json`. With no tag it starts from `0.0.0`, proposes `0.0.1`, and the stamp refuses a number
163
+ that does not advance on the version `plugin.json` holds. The release then fails.
164
+
165
+ So, when the plugin ships to no npm package, check for a tag in the Phase 3 plan:
166
+
167
+ ```bash
168
+ git describe --tags --abbrev=0
169
+ ```
170
+
171
+ If that finds no tag, propose tagging the current commit with the version `plugin.json` holds, and
172
+ create the tag once the user approves:
173
+
174
+ ```bash
175
+ git tag v1.2.0
176
+ ```
177
+
178
+ - Use `v<version>` unless the repository already tags in another form. release-it names its next
179
+ tag after the latest one, so the first tag sets the form every later release keeps.
180
+ - A lightweight tag is enough. release-it finds it with `git describe --tags`.
181
+ - Tag the commit whose `plugin.json` holds that version, and only after the plugin's files are
182
+ committed. Do not move or replace an existing tag.
183
+ - The tag is local until pushed. A release that runs in CI needs it on the remote. Pushing it is the
184
+ user's step, so name `git push origin v1.2.0` and run it only if the user asks.
185
+ - If the user declines, say the first release fails until a tag on the current version exists.
186
+
187
+ ### Applying it
188
+
189
+ 1. Edit the config the survey found, in its own format: a `.release-it.*` file, or the `release-it`
190
+ key in `package.json`. If none exists, write `.release-it.json`.
191
+ 2. Keep every key the user already set. If an `after:bump` hook already exists, keep its command and
192
+ run the stamp after it: a string becomes an array of both commands. Show the hooks before and
193
+ after in the Phase 3 plan. Apply only once the user approves.
194
+ 3. For a plugin that ships to no npm package, set `"npm": false`, and handle the tag as above.
195
+ 4. Commit the plugin's generated files (`plugin.json`, the vendor manifests, the catalogs,
196
+ `.plugin/pins.json`) before the first release. The release commit stages only tracked files, so
197
+ a stamped file git does not track yet stays out of the tagged commit.
198
+ 5. Installing release-it is the user's step. Do not edit the CI workflow (SKILL.md Rules).
199
+
200
+ `doctor` reports `release-it-no-stamp` for a release-it config that never runs `plugin version`.
201
+
202
+ ## release-please
203
+
204
+ release-please runs no command before its release commit. Its release PR moves the number in the
205
+ files it knows, and a workflow step on that PR then restamps the plugin. The wiring is two files the
206
+ skill writes, and one workflow step the user adds.
207
+
208
+ ### A plugin that ships to no npm package
209
+
210
+ `release-type: simple` keeps the number in `.release-please-manifest.json`, and `extra-files` bumps
211
+ `plugin.json`. Write `release-please-config.json`:
212
+
213
+ ```json
214
+ {
215
+ "packages": {
216
+ ".": {
217
+ "release-type": "simple",
218
+ "extra-files": [{ "type": "json", "path": "plugin.json", "jsonpath": "$.version" }]
219
+ }
220
+ }
221
+ }
222
+ ```
223
+
224
+ The restamp step runs `npx -y universal-plugin@0.18.0 plugin version --from-manifest`, which takes
225
+ the number `plugin.json` already holds. Pin it to the CLI version this skill ships with.
226
+
227
+ ### A plugin that ships on npm
228
+
229
+ `release-type: node` bumps `package.json`. The restamp step runs
230
+ `universal-plugin plugin version --from-package` instead. Do not add `plugin.json` to `extra-files`
231
+ here: the package owns the number, and `--from-package` carries it into the plugin.
232
+
233
+ ### The manifest holds the current version
234
+
235
+ release-please reads the last release from `.release-please-manifest.json`. A package with no entry
236
+ starts from a default version, not from the plugin's. Write the entry with the version `plugin.json`
237
+ holds, keyed by the package path:
238
+
239
+ ```json
240
+ { ".": "1.2.0" }
241
+ ```
242
+
243
+ For a plugin below the repository root, use its path as the key in both files (`"packages/my-plugin"`),
244
+ and make `extra-files` paths relative to that package.
245
+
246
+ ### The workflow step
247
+
248
+ The `version` skill's section *release-please with no `package.json`* has the workflow: a GitHub
249
+ App token minted for the run, the release-please action given that token, then a checkout of the
250
+ release PR branch with the same token, the restamp, and a commit pushed back. Show it in the plan and
251
+ hand it to the user. Do not write or edit the workflow (SKILL.md Rules). For an npm-shipped plugin,
252
+ the step runs `--from-package` in place of `--from-manifest`.
253
+
254
+ The token matters. A push made with the default `GITHUB_TOKEN` starts no workflow run, so the
255
+ release PR's checks never run on its head commit and a required check blocks the merge. Tell the
256
+ user the App setup the workflow needs: an App with Contents, Pull requests and Issues set to read and
257
+ write, installed on the repository, its client ID in the variable `RELEASE_APP_CLIENT_ID` and a
258
+ private key in the secret `RELEASE_APP_PRIVATE_KEY`. Do not offer a `workflow_dispatch` re-run of CI
259
+ instead: its checks do not count toward a required check.
260
+
261
+ ### Applying it
262
+
263
+ 1. If `release-please-config.json` exists, add `extra-files` to the plugin's package entry and keep
264
+ every other key. If it does not, write the config above.
265
+ 2. Add the plugin's entry to `.release-please-manifest.json`, or write the file. Never lower or
266
+ replace an entry that already exists: that is the last released version.
267
+ 3. Show both files before and after in the Phase 3 plan. Apply only once the user approves.
268
+ 4. Hand over the workflow step and the App setup.
269
+
270
+ `doctor` reports `release-please-no-restamp` when `extra-files` bumps `plugin.json` and no workflow
271
+ runs `plugin version`, and `release-please-restamp-no-ci` when the restamp is pushed with the default
272
+ `GITHUB_TOKEN`.
@@ -58,7 +58,7 @@ what each build gets. A vendor listed in `vendors` with no `harnesses` entry sti
58
58
  ├── agents/<name>.md
59
59
  ├── rules/<name>.mdc (Cursor-only guidance)
60
60
  ├── hooks/hooks.json
61
- ├── .mcp.json
61
+ ├── mcp.json
62
62
  └── README.md
63
63
  ```
64
64
 
@@ -70,7 +70,7 @@ directories. Create the rest only when the plugin has content for them.
70
70
  | Component | Field | Directory | Reaches |
71
71
  |-----------|-------|-----------|---------|
72
72
  | Skills | `skills` | `skills/<name>/SKILL.md` | every vendor |
73
- | MCP servers | `mcpServers` | `.mcp.json` | every vendor |
73
+ | MCP servers | `mcpServers` | `mcp.json` | every vendor |
74
74
  | Commands | `commands` | `commands/<name>.md` | Claude Code, Cursor, Copilot CLI |
75
75
  | Agents | `agents` | `agents/<name>.md` | Claude Code, Cursor, Copilot CLI |
76
76
  | Hooks | `hooks` | `hooks/hooks.json` | every vendor — authored PascalCase, translated per vendor by the build; handler types vary |
@@ -79,7 +79,7 @@ directories. Create the rest only when the plugin has content for them.
79
79
  | Output styles | `outputStyles` | `output-styles/` | Claude Code only |
80
80
 
81
81
  The universal minimum — reaching every runtime with no vendor manifest at all — is
82
- `skills/<name>/SKILL.md` plus `.mcp.json`. Reach for a narrower component only when the plugin needs
82
+ `skills/<name>/SKILL.md` plus `mcp.json`. Reach for a narrower component only when the plugin needs
83
83
  what only that component does; the `plugin-design` reference is the authority on that choice.
84
84
 
85
85
  ## Constraints
@@ -83,6 +83,9 @@ Do not build a delivery path for these into the plugin manifest. There is nothin
83
83
 
84
84
  ### Still open
85
85
 
86
+ Open as of the 1.0.83 runtime examined above. Re-check against the current release before relying
87
+ on any of these.
88
+
86
89
  - **Where the `unknown field (ignored)` warning surfaces.** It exists in the binary but reached no
87
90
  output on `plugin install`, `plugin list`, or `plugins list`. Likely the interactive dashboard or
88
91
  the session config-problems channel.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  // Compiled by `universal-plugin plugin build` from src/skill-scripts/run-cli.ts. Edit the source, not this file.
3
- globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.0","entry":"skills/init-universal-plugin/scripts/init.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
3
+ globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.18.0","entry":"skills/init-universal-plugin/scripts/init.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
4
4
  import { spawnSync } from "node:child_process";
5
5
  //#region src/compile/scripts.ts
6
6
  /** The global the header assigns the script data to. Framework-neutral: a script's own code, or the
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  // Compiled by `universal-plugin plugin build` from src/skill-scripts/run-cli.ts. Edit the source, not this file.
3
- globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.0","entry":"skills/marketplace/scripts/add.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
3
+ globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.18.0","entry":"skills/marketplace/scripts/add.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
4
4
  import { spawnSync } from "node:child_process";
5
5
  //#region src/compile/scripts.ts
6
6
  /** The global the header assigns the script data to. Framework-neutral: a script's own code, or the
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  // Compiled by `universal-plugin plugin build` from src/skill-scripts/install-docs.ts. Edit the source, not this file.
3
- globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.0","entry":"skills/marketplace/scripts/install-docs.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
3
+ globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.18.0","entry":"skills/marketplace/scripts/install-docs.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
4
4
  import { execFileSync } from "node:child_process";
5
5
  import * as fs from "node:fs";
6
6
  import * as path from "node:path";
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  // Compiled by `universal-plugin plugin build` from src/skill-scripts/run-cli.ts. Edit the source, not this file.
3
- globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.0","entry":"skills/marketplace/scripts/marketplace.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
3
+ globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.18.0","entry":"skills/marketplace/scripts/marketplace.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
4
4
  import { spawnSync } from "node:child_process";
5
5
  //#region src/compile/scripts.ts
6
6
  /** The global the header assigns the script data to. Framework-neutral: a script's own code, or the
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  // Compiled by `universal-plugin plugin build` from src/skill-scripts/run-cli.ts. Edit the source, not this file.
3
- globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.0","entry":"skills/marketplace/scripts/update.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
3
+ globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.18.0","entry":"skills/marketplace/scripts/update.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
4
4
  import { spawnSync } from "node:child_process";
5
5
  //#region src/compile/scripts.ts
6
6
  /** The global the header assigns the script data to. Framework-neutral: a script's own code, or the
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  // Compiled by `universal-plugin plugin build` from src/skill-scripts/run-cli.ts. Edit the source, not this file.
3
- globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.0","entry":"skills/marketplace/scripts/validate.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
3
+ globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.18.0","entry":"skills/marketplace/scripts/validate.mjs","commands":{"marketplace add":"skills/marketplace/scripts/add.mjs","marketplace init":"skills/marketplace/scripts/marketplace.mjs","marketplace update":"skills/marketplace/scripts/update.mjs","marketplace validate":"skills/marketplace/scripts/validate.mjs","plugin build":"skills/build-plugin/scripts/build.mjs","plugin init":"skills/init-universal-plugin/scripts/init.mjs","plugin version":"skills/version/scripts/version.mjs"}};
4
4
  import { spawnSync } from "node:child_process";
5
5
  //#region src/compile/scripts.ts
6
6
  /** The global the header assigns the script data to. Framework-neutral: a script's own code, or the
@@ -87,7 +87,7 @@ configuration is:
87
87
  }
88
88
  ```
89
89
 
90
- Retain existing package entries such as `bin`, `dist`, and `governances`.
90
+ Retain existing package entries such as `bin`, `dist`, and `references`.
91
91
  Never replace the allowlist wholesale.
92
92
 
93
93
  ## 4. Bundle the CLI with tsdown
@@ -173,7 +173,6 @@ as a follow-up instead of doing it inside this migration.
173
173
 
174
174
  Point every version and build step at the new plugin root:
175
175
 
176
- - Set the manifest extension's `packagePath` to `"."`.
177
176
  - `universal-plugin plugin version --from-package --root <pkg>` reads `packagePath` from
178
177
  `<pkg>/.agents/universal-plugin.json`, not from the manifest extension. With
179
178
  no `packagePath` it reads `<pkg>/package.json`, so a package that holds its
@@ -34,7 +34,8 @@ is the common case.
34
34
 
35
35
  ### 0a. Identify the marketplace repo
36
36
 
37
- Default to `cyberuni/cyberplace` unless the user names another one.
37
+ Default to `cyberuni/cyberplace` unless the user names another one. The commands below call it
38
+ `<marketplace-repo>` (`<owner>/<repo>`), and its repository name `<marketplace-repo-name>`.
38
39
 
39
40
  ### 0b. Identify which repo the cwd is
40
41
 
@@ -317,15 +318,15 @@ Otherwise, the marketplace repo is elsewhere and needs a working copy. If the us
317
318
  (org member), work directly:
318
319
 
319
320
  ```bash
320
- gh repo clone cyberuni/cyberplace
321
- cd cyberplace
321
+ gh repo clone <marketplace-repo>
322
+ cd <marketplace-repo-name>
322
323
  ```
323
324
 
324
325
  If a fork is needed:
325
326
 
326
327
  ```bash
327
- gh repo fork cyberuni/cyberplace --clone --remote
328
- cd cyberplace
328
+ gh repo fork <marketplace-repo> --clone --remote
329
+ cd <marketplace-repo-name>
329
330
  git fetch upstream && git merge upstream/main
330
331
  ```
331
332
 
@@ -354,7 +355,7 @@ git push origin add-<plugin-name>
354
355
 
355
356
  ```bash
356
357
  gh pr create \
357
- --repo cyberuni/cyberplace \
358
+ --repo <marketplace-repo> \
358
359
  --title "Add <plugin-name> v<version>" \
359
360
  --body "$(cat <<'EOF'
360
361
  ## Plugin
@@ -17,7 +17,7 @@ change without a matching bump is invisible to them.
17
17
  | Source | Call | Used by |
18
18
  |---|---|---|
19
19
  | Author bump | `plugin version minor` | Plain repositories |
20
- | Explicit number | `plugin version 1.4.0` | semantic-release (`@semantic-release/exec` `prepareCmd`) |
20
+ | Explicit number | `plugin version 1.4.0` | semantic-release (`@semantic-release/exec` `prepareCmd`), release-it (`after:bump` hook) |
21
21
  | The package's `package.json` | `plugin version --from-package` | changesets, release-please |
22
22
 
23
23
  With `packagePath` declared, a release type is refused: bump the package with the release tool, then
@@ -27,8 +27,12 @@ semantic-release stamps files that exist only in the npm package unless `@semant
27
27
  commits them back. Git-sourced installs read `plugin.json` from the repository, so they need that
28
28
  commit-back.
29
29
 
30
- `plugin bundle` and `publish sync-version` are deprecated aliases and are removed in the next minor
31
- release.
30
+ release-it with `"npm": false` reads the version from the latest git tag and needs no `package.json`.
31
+ Its `after:bump` hook runs `plugin version ${version}` before the release commit and tag. Tag the
32
+ current version before the first release, or release-it starts from `0.0.0`.
33
+
34
+ `plugin bundle` and `publish sync-version` are deprecated aliases. They have warned since 0.14.0 and will be
35
+ removed in a later release.
32
36
 
33
37
  ## The part that is not automatable
34
38