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.
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/CHANGELOG.md +28 -0
- package/agents/agentskills-specialist.md +6 -11
- package/com.github.copilot/agents/agentskills-specialist.agent.md +6 -11
- package/dist/cli.mjs +164 -12
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/readme.md +1 -1
- package/references/plugin-design.md +19 -33
- package/references/slash-invocation.md +2 -2
- package/skills/adopt-upx/scripts/rewrite-upx.mjs +1 -1
- package/skills/build-plugin/SKILL.md +2 -3
- package/skills/build-plugin/scripts/build.mjs +1 -1
- package/skills/doctor-universal-plugin/README.md +1 -1
- package/skills/doctor-universal-plugin/SKILL.md +18 -6
- package/skills/doctor-universal-plugin/scripts/doctor.mjs +225 -2
- package/skills/init-universal-plugin/README.md +1 -1
- package/skills/init-universal-plugin/SKILL.md +62 -3
- package/skills/init-universal-plugin/references/create.md +10 -7
- package/skills/init-universal-plugin/references/detection.md +1 -1
- package/skills/init-universal-plugin/references/frontmatter.md +1 -1
- package/skills/init-universal-plugin/references/release-tools.md +272 -0
- package/skills/init-universal-plugin/references/standard.md +3 -3
- package/skills/init-universal-plugin/references/vendors/copilot-cli.md +3 -0
- package/skills/init-universal-plugin/scripts/init.mjs +1 -1
- package/skills/marketplace/scripts/add.mjs +1 -1
- package/skills/marketplace/scripts/install-docs.mjs +1 -1
- package/skills/marketplace/scripts/marketplace.mjs +1 -1
- package/skills/marketplace/scripts/update.mjs +1 -1
- package/skills/marketplace/scripts/validate.mjs +1 -1
- package/skills/migrate-plugin/SKILL.md +1 -2
- package/skills/publish-plugin/SKILL.md +7 -6
- package/skills/version/README.md +7 -3
- package/skills/version/SKILL.md +129 -10
- 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
|
-
├──
|
|
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` |
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 `
|
|
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
|
|
321
|
-
cd
|
|
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
|
|
328
|
-
cd
|
|
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
|
|
358
|
+
--repo <marketplace-repo> \
|
|
358
359
|
--title "Add <plugin-name> v<version>" \
|
|
359
360
|
--body "$(cat <<'EOF'
|
|
360
361
|
## Plugin
|
package/skills/version/README.md
CHANGED
|
@@ -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
|
-
`
|
|
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
|
|