universal-plugin 0.17.0 → 0.17.1
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 +12 -0
- package/agents/agentskills-specialist.md +6 -11
- package/com.github.copilot/agents/agentskills-specialist.agent.md +6 -11
- package/dist/cli.mjs +2 -2
- 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 +3 -3
- package/skills/doctor-universal-plugin/scripts/doctor.mjs +1 -1
- package/skills/init-universal-plugin/README.md +1 -1
- package/skills/init-universal-plugin/SKILL.md +2 -2
- package/skills/init-universal-plugin/references/create.md +7 -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/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 +2 -2
- package/skills/version/SKILL.md +4 -4
- package/skills/version/scripts/version.mjs +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "universal-plugin",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.1",
|
|
4
4
|
"description": "Research and design toolkit for building universal AI coding agent plugins that work across Claude Code, Cursor, Codex, and GitHub Copilot CLI.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unional"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "universal-plugin",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.1",
|
|
4
4
|
"description": "Research and design toolkit for building universal AI coding agent plugins that work across Claude Code, Cursor, Codex, and GitHub Copilot CLI.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unional"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "universal-plugin",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.1",
|
|
4
4
|
"description": "Research and design toolkit for building universal AI coding agent plugins that work across Claude Code, Cursor, Codex, and GitHub Copilot CLI.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unional"
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# universal-plugin
|
|
2
2
|
|
|
3
|
+
## 0.17.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7c951cc: `plugin bundle` and `publish sync-version` no longer warn that they are removed "in the next minor release", a release that has already shipped. The warning now says they have been deprecated since 0.14.0 and will be removed in a later release.
|
|
8
|
+
- 621d36d: The `publish-plugin` skill's clone, fork and pull request commands now use the marketplace repo the user chose instead of always naming `cyberuni/cyberplace`.
|
|
9
|
+
- 621d36d: The skill references no longer contradict each other on how the plugin is built and shipped: Copilot CLI reads the canonical `plugin.json` directly, a local install goes through `plugin install` rather than a hand-written symlink, `anthropics/claude-plugins-official` takes no pull requests, the build writes no Cursor command or Codex prompt, `packagePath` lives in `.agents/universal-plugin.json`, and `plugin build` has a `--check` flag.
|
|
10
|
+
- 621d36d: The plugin references and the `agentskills-specialist` agent now say Copilot CLI hooks keep the canonical PascalCase event names, which is what the build writes, instead of camelCase.
|
|
11
|
+
- 621d36d: The skills now name skills that exist: `buddy-agent-harness:init-buddy-agent-harness`, `buddy-agent-harness:doctor-buddy-agent-harness`, `buddy-changesets:changesets`, `aced:improve-skill` and its `validate.mjs` script, and the `marketplace` skill for a repository-local catalog.
|
|
12
|
+
- 621d36d: The plugin references now name `mcp.json` as a plugin's MCP config, the fixed location the build reads, and drop the rule that it must be a symlink to `.mcp.json`.
|
|
13
|
+
- 621d36d: The plugin references and the `agentskills-specialist` agent drop claims nothing backs: a fixed `SKILL.md` section template, a 6,000-character limit for every runtime, a `skill.json`, support for Zed, Continue.dev and Cline, `$ARGUMENTS` expanding everywhere, and dated "next minor release" wording. They also call references references, not governances.
|
|
14
|
+
|
|
3
15
|
## 0.17.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -14,7 +14,7 @@ model: opus
|
|
|
14
14
|
# AgentSkills Specialist
|
|
15
15
|
|
|
16
16
|
## Role
|
|
17
|
-
You are an expert AgentSkills engineer who designs, audits, and improves skills across Claude Code, Cursor, Codex, GitHub Copilot CLI, Windsurf, Zed, Continue.dev,
|
|
17
|
+
You are an expert AgentSkills engineer who designs, audits, and improves skills across Claude Code, Cursor, Codex, and GitHub Copilot CLI, the runtimes `plugin build` targets. Flag a skill meant for Windsurf as needing conversion, and Zed, Aider, Continue.dev, or Cline as incompatible.
|
|
18
18
|
|
|
19
19
|
## Core Responsibilities
|
|
20
20
|
|
|
@@ -32,14 +32,9 @@ skills/<name>/SKILL.md # Universal skill definition (primary)
|
|
|
32
32
|
.agents/skills/<name>/SKILL.md # Project-level extension (if present)
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
A `SKILL.md`
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- **Inputs**: What context or parameters the skill consumes.
|
|
39
|
-
- **Outputs / Side Effects**: What the skill produces or changes.
|
|
40
|
-
- **Steps**: Numbered, concrete procedural steps.
|
|
41
|
-
- **Runtime Notes**: Any known incompatibilities or runtime-specific behavior.
|
|
42
|
-
- **Examples**: At least one concrete invocation example.
|
|
35
|
+
A `SKILL.md` should make clear what the skill does, when it is invoked, what it consumes and
|
|
36
|
+
produces, and the steps it follows, plus runtime limitations and an example where they help. These
|
|
37
|
+
are questions the body answers, not required section names.
|
|
43
38
|
|
|
44
39
|
## Auditing Workflow
|
|
45
40
|
|
|
@@ -75,7 +70,7 @@ For skill creation or edits, write the full `SKILL.md` content directly — no p
|
|
|
75
70
|
## Key Research Context
|
|
76
71
|
|
|
77
72
|
- A root `plugin.json` on Agent Plugins Spec 1.0.0 is the universal manifest; `skills/<name>/SKILL.md` is the universal skill entry point.
|
|
78
|
-
- Hook event naming is the sharpest incompatibility: PascalCase (Claude Code, Codex), camelCase (Cursor
|
|
73
|
+
- Hook event naming is the sharpest incompatibility: PascalCase (Claude Code, Codex, Copilot CLI), camelCase (Cursor), snake_case (Windsurf).
|
|
79
74
|
- Only Claude Code and Cursor publish machine-readable JSON Schemas.
|
|
80
75
|
|
|
81
76
|
## Out of Scope
|
|
@@ -87,7 +82,7 @@ For skill creation or edits, write the full `SKILL.md` content directly — no p
|
|
|
87
82
|
## Quality Gates
|
|
88
83
|
|
|
89
84
|
Before declaring any skill complete:
|
|
90
|
-
- [ ] SKILL.md is present and
|
|
85
|
+
- [ ] SKILL.md is present and answers the questions above.
|
|
91
86
|
- [ ] No runtime-specific assumptions are baked into the universal layer.
|
|
92
87
|
- [ ] Project-level `.agents/skills/<name>/SKILL.md` extension is merged, not duplicated.
|
|
93
88
|
- [ ] Examples are concrete and runnable.
|
|
@@ -14,7 +14,7 @@ model: opus
|
|
|
14
14
|
# AgentSkills Specialist
|
|
15
15
|
|
|
16
16
|
## Role
|
|
17
|
-
You are an expert AgentSkills engineer who designs, audits, and improves skills across Claude Code, Cursor, Codex, GitHub Copilot CLI, Windsurf, Zed, Continue.dev,
|
|
17
|
+
You are an expert AgentSkills engineer who designs, audits, and improves skills across Claude Code, Cursor, Codex, and GitHub Copilot CLI, the runtimes `plugin build` targets. Flag a skill meant for Windsurf as needing conversion, and Zed, Aider, Continue.dev, or Cline as incompatible.
|
|
18
18
|
|
|
19
19
|
## Core Responsibilities
|
|
20
20
|
|
|
@@ -32,14 +32,9 @@ skills/<name>/SKILL.md # Universal skill definition (primary)
|
|
|
32
32
|
.agents/skills/<name>/SKILL.md # Project-level extension (if present)
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
A `SKILL.md`
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- **Inputs**: What context or parameters the skill consumes.
|
|
39
|
-
- **Outputs / Side Effects**: What the skill produces or changes.
|
|
40
|
-
- **Steps**: Numbered, concrete procedural steps.
|
|
41
|
-
- **Runtime Notes**: Any known incompatibilities or runtime-specific behavior.
|
|
42
|
-
- **Examples**: At least one concrete invocation example.
|
|
35
|
+
A `SKILL.md` should make clear what the skill does, when it is invoked, what it consumes and
|
|
36
|
+
produces, and the steps it follows, plus runtime limitations and an example where they help. These
|
|
37
|
+
are questions the body answers, not required section names.
|
|
43
38
|
|
|
44
39
|
## Auditing Workflow
|
|
45
40
|
|
|
@@ -75,7 +70,7 @@ For skill creation or edits, write the full `SKILL.md` content directly — no p
|
|
|
75
70
|
## Key Research Context
|
|
76
71
|
|
|
77
72
|
- A root `plugin.json` on Agent Plugins Spec 1.0.0 is the universal manifest; `skills/<name>/SKILL.md` is the universal skill entry point.
|
|
78
|
-
- Hook event naming is the sharpest incompatibility: PascalCase (Claude Code, Codex), camelCase (Cursor
|
|
73
|
+
- Hook event naming is the sharpest incompatibility: PascalCase (Claude Code, Codex, Copilot CLI), camelCase (Cursor), snake_case (Windsurf).
|
|
79
74
|
- Only Claude Code and Cursor publish machine-readable JSON Schemas.
|
|
80
75
|
|
|
81
76
|
## Out of Scope
|
|
@@ -87,7 +82,7 @@ For skill creation or edits, write the full `SKILL.md` content directly — no p
|
|
|
87
82
|
## Quality Gates
|
|
88
83
|
|
|
89
84
|
Before declaring any skill complete:
|
|
90
|
-
- [ ] SKILL.md is present and
|
|
85
|
+
- [ ] SKILL.md is present and answers the questions above.
|
|
91
86
|
- [ ] No runtime-specific assumptions are baked into the universal layer.
|
|
92
87
|
- [ ] Project-level `.agents/skills/<name>/SKILL.md` extension is merged, not duplicated.
|
|
93
88
|
- [ ] Examples are concrete and runnable.
|
package/dist/cli.mjs
CHANGED
|
@@ -8987,7 +8987,7 @@ const NEXT_STEP$1 = "→ review and commit the pinned skills\n";
|
|
|
8987
8987
|
function bundleCommand() {
|
|
8988
8988
|
const cmd = new Command("bundle").description("Deprecated: use `plugin version`, which stamps the skill pins");
|
|
8989
8989
|
cmd.option("--dry-run", "Resolve and report pins without writing them").option("--full", "Show every pins row without truncation").option("--format <format>", "Output format: json or toon (default: toon)").option("--runner <runner>", "Runner word to emit on rewritten refs: npx or upx (default: preserve each ref's runner)").addOption(ROOT_OPTION).addHelpText("after", "\nExample:\n $ universal-plugin plugin bundle --dry-run --full\n").action((opts) => {
|
|
8990
|
-
process.stderr.write("warn: plugin bundle is deprecated and will be removed in
|
|
8990
|
+
process.stderr.write("warn: plugin bundle is deprecated since 0.14.0 and will be removed in a later release — use plugin version, which stamps the skill pins\n");
|
|
8991
8991
|
try {
|
|
8992
8992
|
const runner = opts.runner;
|
|
8993
8993
|
if (runner !== void 0 && runner !== "npx" && runner !== "upx") throw new Error(`error: unknown --runner value "${runner}" (expected npx or upx)`);
|
|
@@ -18303,7 +18303,7 @@ function stringField(value, key) {
|
|
|
18303
18303
|
function publishCommand() {
|
|
18304
18304
|
const cmd = new Command("publish").description("Prepare plugin for publishing").helpCommand(false);
|
|
18305
18305
|
cmd.command("sync-version").description("Deprecated: use `plugin version --from-package`").option("--no-build", "Skip re-deriving the vendor manifests").option("--format <format>", "Output format: json or toon (default: toon)").addOption(ROOT_OPTION).action((opts) => {
|
|
18306
|
-
process.stderr.write("warn: publish sync-version is deprecated and will be removed in
|
|
18306
|
+
process.stderr.write("warn: publish sync-version is deprecated since 0.14.0 and will be removed in a later release — use plugin version --from-package\n");
|
|
18307
18307
|
runVersion(void 0, {
|
|
18308
18308
|
...opts,
|
|
18309
18309
|
fromPackage: true
|
package/package.json
CHANGED
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "universal-plugin",
|
|
4
|
-
"version": "0.17.
|
|
4
|
+
"version": "0.17.1",
|
|
5
5
|
"description": "Research and design toolkit for building universal AI coding agent plugins that work across Claude Code, Cursor, Codex, and GitHub Copilot CLI.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "unional"
|
package/readme.md
CHANGED
|
@@ -74,7 +74,7 @@ npx universal-plugin publish check-version # fail when any place carr
|
|
|
74
74
|
```
|
|
75
75
|
|
|
76
76
|
`publish sync-version` and `plugin bundle` are deprecated aliases of `plugin version --from-package`
|
|
77
|
-
and `plugin version`. They print a warning and
|
|
77
|
+
and `plugin version`. They print a warning and will be removed in a later release.
|
|
78
78
|
|
|
79
79
|
### marketplace
|
|
80
80
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Plugin Design
|
|
2
2
|
|
|
3
|
-
Authoritative rules for creating, validating, and transforming cross-vendor agent plugins. Apply when creating, auditing, or distributing a plugin; see **skill-design**
|
|
3
|
+
Authoritative rules for creating, validating, and transforming cross-vendor agent plugins. Apply when creating, auditing, or distributing a plugin; see the **skill-design** reference for standalone skill authoring rules.
|
|
4
4
|
|
|
5
5
|
A **plugin** is the distribution unit — it bundles skills, MCP servers, hooks, commands, agents, and other extensions into a single installable package. A **skill** is the capability unit inside a plugin. Install plugins; invoke skills.
|
|
6
6
|
|
|
7
7
|
## Source of Truth: root `plugin.json`
|
|
8
8
|
|
|
9
|
-
Author `plugin.json` at the plugin root as the canonical manifest — the Agent Plugins Specification v1.0.0 shape (closed field set, `additionalProperties: false`). All vendor manifests are derived from it via `build`.
|
|
9
|
+
Author `plugin.json` at the plugin root as the canonical manifest — the Agent Plugins Specification v1.0.0 shape (closed field set, `additionalProperties: false`). All vendor manifests are derived from it via `build`. GitHub Copilot CLI reads this file directly at runtime; every other vendor reads the manifest the build layer derives from it.
|
|
10
10
|
|
|
11
11
|
Schema declaration (first field, fixed by the spec):
|
|
12
12
|
|
|
@@ -98,8 +98,7 @@ Vendor-specific extension fields:
|
|
|
98
98
|
│
|
|
99
99
|
├── hooks/hooks.json ← canonical hooks (PascalCase, ${PLUGIN_ROOT})
|
|
100
100
|
│
|
|
101
|
-
├──
|
|
102
|
-
├── mcp.json -> .mcp.json ← symlink (Cursor + open-plugin-spec)
|
|
101
|
+
├── mcp.json ← MCP config (fixed location, all vendors)
|
|
103
102
|
│
|
|
104
103
|
└── README.md
|
|
105
104
|
```
|
|
@@ -141,11 +140,11 @@ Build reads root `plugin.json`, applies the rules below, writes each vendor's ou
|
|
|
141
140
|
| Canonical field | Claude Code | Cursor | Codex | Copilot CLI |
|
|
142
141
|
| --- | --- | --- | --- | --- |
|
|
143
142
|
| `skills` | ✓ | ✓ | ✓ | ✓ |
|
|
144
|
-
| `mcpServers` | ✓ →
|
|
143
|
+
| `mcpServers` | ✓ → `./mcp.json` | ✓ → `./mcp.json` | ✓ → `./mcp.json` | ✓ |
|
|
145
144
|
| `commands` | ✓ | ✓ | **omit** | ✓ |
|
|
146
145
|
| `agents` | ✓ | ✓ | **omit** | ✓ |
|
|
147
146
|
| `rules` | **omit** | ✓ | **omit** | **omit** |
|
|
148
|
-
| `hooks` | adapt → PascalCase, `${CLAUDE_PLUGIN_ROOT}` | adapt → camelCase, pass-through env | ✓ → PascalCase, `${PLUGIN_ROOT}` native |
|
|
147
|
+
| `hooks` | adapt → PascalCase, `${CLAUDE_PLUGIN_ROOT}` | adapt → camelCase, pass-through env | ✓ → PascalCase, `${PLUGIN_ROOT}` native | ✓ → PascalCase (selects the Claude-compatible payload) |
|
|
149
148
|
| `lspServers` | ✓ | **omit** | **omit** | **omit** |
|
|
150
149
|
| `outputStyles` | ✓ | **omit** | **omit** | **omit** |
|
|
151
150
|
| `dependencies` | ✓ | **drop + warn** | **drop + warn** | **drop + warn** |
|
|
@@ -193,15 +192,15 @@ Canonical hooks file uses **PascalCase** event names. Build translates per vendo
|
|
|
193
192
|
|
|
194
193
|
| Canonical (PascalCase) | Claude Code | Cursor | Codex | Copilot CLI |
|
|
195
194
|
| --- | --- | --- | --- | --- |
|
|
196
|
-
| `PreToolUse` | `PreToolUse` | `preToolUse` | `PreToolUse` | `
|
|
197
|
-
| `PostToolUse` | `PostToolUse` | `postToolUse` | `PostToolUse` | `
|
|
195
|
+
| `PreToolUse` | `PreToolUse` | `preToolUse` | `PreToolUse` | `PreToolUse` |
|
|
196
|
+
| `PostToolUse` | `PostToolUse` | `postToolUse` | `PostToolUse` | `PostToolUse` |
|
|
198
197
|
| `PostToolUseFailure` | `PostToolUseFailure` | — (drop+warn) | — (drop+warn) | — (drop+warn) |
|
|
199
|
-
| `SessionStart` | `SessionStart` | `sessionStart` | `SessionStart` | `
|
|
200
|
-
| `SessionEnd` | `SessionEnd` | `sessionEnd` | `SessionEnd` | `
|
|
201
|
-
| `Stop` | `Stop` | — (drop+warn) | — (drop+warn) | `
|
|
198
|
+
| `SessionStart` | `SessionStart` | `sessionStart` | `SessionStart` | `SessionStart` |
|
|
199
|
+
| `SessionEnd` | `SessionEnd` | `sessionEnd` | `SessionEnd` | `SessionEnd` |
|
|
200
|
+
| `Stop` | `Stop` | — (drop+warn) | — (drop+warn) | `Stop` |
|
|
202
201
|
| `UserPromptSubmit` | `UserPromptSubmit` | `beforeSubmitPrompt` | — (drop+warn) | — (drop+warn) |
|
|
203
|
-
| `Notification` | `Notification` | — (drop+warn) | — (drop+warn) | `
|
|
204
|
-
| `PermissionRequest` | `PermissionRequest` | — (drop+warn) | — (drop+warn) | `
|
|
202
|
+
| `Notification` | `Notification` | — (drop+warn) | — (drop+warn) | `Notification` |
|
|
203
|
+
| `PermissionRequest` | `PermissionRequest` | — (drop+warn) | — (drop+warn) | `PermissionRequest` |
|
|
205
204
|
| `SubagentStart` | — | `subagentStart` | — | — |
|
|
206
205
|
| `SubagentStop` | — | `subagentStop` | — | — |
|
|
207
206
|
| `PreCompact` | `PreCompact` | `preCompact` | — | — |
|
|
@@ -230,20 +229,9 @@ Events not in this table: pass through for `claude-code`; drop + warn for all ot
|
|
|
230
229
|
|
|
231
230
|
Build generates vendor-specific versions. Do not hand-author the generated hook files.
|
|
232
231
|
|
|
233
|
-
## MCP:
|
|
232
|
+
## MCP: `mcp.json`
|
|
234
233
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
```bash
|
|
238
|
-
ln -sf .mcp.json mcp.json
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
| Runtime | Reads |
|
|
242
|
-
| --- | --- |
|
|
243
|
-
| Claude Code, Codex | `.mcp.json` |
|
|
244
|
-
| Cursor, open-plugin-spec | `mcp.json` (via symlink) |
|
|
245
|
-
|
|
246
|
-
If the repo needs explicit symlink tracking: `mcp.json symlink` in `.gitattributes`. MCP server startup failures are non-fatal.
|
|
234
|
+
`mcp.json` at the plugin root is the Agent Plugins Specification's fixed MCP location, Author it as a regular file. `build` points each derived manifest at it, unless it has to change an entry for that vendor; then it writes the changed copy beside the vendor manifest. MCP server startup failures are non-fatal.
|
|
247
235
|
|
|
248
236
|
### Pinning a self-published server to the plugin version
|
|
249
237
|
|
|
@@ -271,9 +259,9 @@ A plugin whose MCP server is its own npm package writes an unpinned invocation
|
|
|
271
259
|
|
|
272
260
|
## Component Authoring Rules
|
|
273
261
|
|
|
274
|
-
**Skills:** Author `skills/<name>/SKILL.md` following the **skill-design**
|
|
262
|
+
**Skills:** Author `skills/<name>/SKILL.md` following the **skill-design** reference. Within a plugin, reference MCP tools by fully qualified name: `{plugin-name}:{server-name}__{tool-name}`. Use the **slash-invocation** reference when a skill needs a user-only, model-only, or explicit both-invocation policy.
|
|
275
263
|
|
|
276
|
-
**Commands:** One `.md` file per command in `commands/`. Filename (minus extension) is the command identifier. Optional frontmatter: `description`, `argument-hint`, `allowed-tools`, `disable-model-invocation`. `$ARGUMENTS` expands to user input.
|
|
264
|
+
**Commands:** One `.md` file per command in `commands/`. Filename (minus extension) is the command identifier. Optional frontmatter: `description`, `argument-hint`, `allowed-tools`, `disable-model-invocation`. `$ARGUMENTS` expands to user input on Claude Code and stays literal on other runtimes.
|
|
277
265
|
|
|
278
266
|
**Agents:** One `.md` file per agent in `agents/`. Required frontmatter: `name` (1–64 lowercase alphanumeric + hyphens), `description` (≤ 1024 chars). Body is the agent system prompt.
|
|
279
267
|
|
|
@@ -306,9 +294,9 @@ A plugin whose MCP server is its own npm package writes an unpinned invocation
|
|
|
306
294
|
|
|
307
295
|
| Scope | Claude Code | Cursor | Codex |
|
|
308
296
|
| --- | --- | --- | --- |
|
|
309
|
-
| **Personal** |
|
|
297
|
+
| **Personal** | `universal-plugin plugin install`, then restart | `universal-plugin plugin install` (copies), then reload the window | `~/.agents/plugins/marketplace.json` |
|
|
310
298
|
| **Team** | npm private package | Cursor Teams admin import | `.agents/plugins/marketplace.json` in repo |
|
|
311
|
-
| **Public** |
|
|
299
|
+
| **Public** | `anthropics/claude-plugins-official` is curated and takes no pull requests; check its submission route live (`publish-plugin`, step 0c) | `cursor.com/marketplace/publish` | `codex plugin marketplace add` |
|
|
312
300
|
|
|
313
301
|
Default scope: **team**.
|
|
314
302
|
|
|
@@ -318,13 +306,11 @@ Default scope: **team**.
|
|
|
318
306
|
|
|
319
307
|
- Using `../` in any manifest-declared path
|
|
320
308
|
- Hardcoding absolute paths instead of `${PLUGIN_ROOT}` or `${PLUGIN_DATA}`
|
|
321
|
-
- Committing `mcp.json` as a regular file — must always be a symlink to `.mcp.json`
|
|
322
309
|
- Hand-authoring vendor hook files — use canonical `hooks/hooks.json` and let build generate vendor versions
|
|
323
310
|
- Relying on extended component types (commands, rules, agents, hooks) for core functionality — silently ignored on non-supporting hosts
|
|
324
311
|
- Duplicating SKILL.md content in `plugin.json` — the manifest is a path index, never a content mirror
|
|
325
312
|
- Using `rules/` for cross-agent always-on guidance — use AGENTS.md instead
|
|
326
313
|
- Putting role- or task-scoped guidance in always-on context (`rules/` or AGENTS.md) — make it a reference loaded on demand
|
|
327
|
-
- Putting install-time metadata in `plugin.json` instead of `skill.json`
|
|
328
314
|
|
|
329
315
|
## Cross-Platform Portability
|
|
330
316
|
|
|
@@ -338,7 +324,7 @@ Default scope: **team**.
|
|
|
338
324
|
| Windsurf | Needs conversion | 6,000 char/file hard limit; 12,000 chars total |
|
|
339
325
|
| Zed, Aider, Continue.dev, Cline | No | Incompatible formats |
|
|
340
326
|
|
|
341
|
-
Portability rules for skill bodies: keep
|
|
327
|
+
Portability rules for skill bodies: for a skill that must load in Windsurf, keep the `SKILL.md` body under its 6,000-char limit and move detail into `references/`; use forward slashes in path references; declare environment requirements in `compatibility` frontmatter; do not embed vendor-specific syntax in skill bodies.
|
|
342
328
|
|
|
343
329
|
## References
|
|
344
330
|
|
|
@@ -10,7 +10,7 @@ description: Deploy the application after running release checks.
|
|
|
10
10
|
invocation-policy: user
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
Deploy
|
|
13
|
+
Deploy the environment the user names in the invocation.
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
| Policy | Meaning | Default |
|
|
@@ -22,7 +22,7 @@ Deploy $ARGUMENTS.
|
|
|
22
22
|
`plugin build` derives vendor behavior from that policy:
|
|
23
23
|
|
|
24
24
|
- Claude Code uses the same `SKILL.md` and adds its native invocation flag.
|
|
25
|
-
- Cursor
|
|
25
|
+
- Cursor uses the same `SKILL.md` and its native invocation flag; no per-skill command is derived.
|
|
26
26
|
- Codex uses the skill itself. A user invokes it with `$skill` or `/skills`, so no command is derived. Codex custom prompts are deprecated and home-only, and `plugin build` never writes outside the plugin tree.
|
|
27
27
|
- Copilot CLI receives no derived command. Its `/skill-name` form is only a prompt hint, not deterministic invocation.
|
|
28
28
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// Compiled by `universal-plugin plugin build` from src/skill-scripts/rewrite-upx.ts. Edit the source, not this file.
|
|
3
|
-
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.
|
|
3
|
+
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.1","entry":"skills/adopt-upx/scripts/rewrite-upx.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 { readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { join, resolve } from "node:path";
|
|
6
6
|
//#region src/skill-scripts/rewrite-upx.ts
|
|
@@ -47,7 +47,7 @@ node scripts/build.mjs --root <plugin-root>
|
|
|
47
47
|
|
|
48
48
|
Resolve `scripts/build.mjs` against this skill's own directory. It runs the CLI the project installed
|
|
49
49
|
(`pnpm exec universal-plugin`), else the CLI pinned to the version this skill shipped with
|
|
50
|
-
(`npx universal-plugin@0.17.
|
|
50
|
+
(`npx universal-plugin@0.17.1`), so it works in a skill that was linked or copied on its own. `--root` defaults to the working directory and
|
|
51
51
|
must name the directory that holds the canonical `plugin.json`.
|
|
52
52
|
|
|
53
53
|
The command never prompts, so it is safe to run unattended.
|
|
@@ -132,8 +132,7 @@ Validation runs before the first write, so a failed build leaves the tree untouc
|
|
|
132
132
|
- **Expect a build to pin skill `npx` references or decide a version.** Build derives and copies
|
|
133
133
|
whatever `plugin.json` carries. Stamping is the release-time `plugin version`, not this step.
|
|
134
134
|
- **Expect a build to copy governances into skills.** A skill loads a reference through the
|
|
135
|
-
`reference` skill in the `cyber-agentkit` plugin; the build does not copy them
|
|
136
|
-
`--check` flag.
|
|
135
|
+
`reference` skill in the `cyber-agentkit` plugin; the build does not copy them.
|
|
137
136
|
|
|
138
137
|
## Related skills
|
|
139
138
|
|
|
@@ -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.
|
|
3
|
+
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.1","entry":"skills/build-plugin/scripts/build.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
|
|
@@ -35,7 +35,7 @@ on purpose, so it folds into that command rather than competing with it.
|
|
|
35
35
|
## Boundaries
|
|
36
36
|
|
|
37
37
|
Diagnoses the plugin a project ships. A repository's own agent wiring — `.agents/skills/`,
|
|
38
|
-
`AGENTS.md`, per-harness bridges — is `buddy-agent-harness:doctor`.
|
|
38
|
+
`AGENTS.md`, per-harness bridges — is `buddy-agent-harness:doctor-buddy-agent-harness`.
|
|
39
39
|
|
|
40
40
|
## References
|
|
41
41
|
|
|
@@ -143,7 +143,7 @@ user can run, or ask before running it yourself.
|
|
|
143
143
|
|
|
144
144
|
## Version drift
|
|
145
145
|
|
|
146
|
-
A version lives in
|
|
146
|
+
A version lives in six places. Two are authored: the canonical `plugin.json`, and the `package.json`
|
|
147
147
|
at the `packagePath` the CLI reports (`config get --key packagePath`), resolved from the plugin root.
|
|
148
148
|
The rest are stamped from them by `plugin version`: the vendor manifests, this plugin's entry in each
|
|
149
149
|
repository catalog, the `npx`/`upx <package>@<version>` pins in the skills, and each `mcpServers`
|
|
@@ -172,7 +172,7 @@ it does not, offer to add it — ask first, because both are the user's files:
|
|
|
172
172
|
semantic-release bot opens.
|
|
173
173
|
|
|
174
174
|
Use the locked `universal-plugin` from the repository's devDependencies when it has one; otherwise
|
|
175
|
-
`npx universal-plugin@0.17.
|
|
175
|
+
`npx universal-plugin@0.17.1`, pinned. This check matters most where the release tool picks the
|
|
176
176
|
number, because nothing else runs between that bump and publish.
|
|
177
177
|
|
|
178
178
|
## Unreleased content
|
|
@@ -203,7 +203,7 @@ is meant to ship — content that is still being worked on is not a finding to a
|
|
|
203
203
|
directly. Its **components** are a separate question — a `copilot-root-components` finding is a real
|
|
204
204
|
fault, and `canonical` is only healthy for a plugin that declares none of the moved kinds.
|
|
205
205
|
- Do not treat repo-private agent configuration (`.claude/skills/`, `.agents/skills/`) as part of the
|
|
206
|
-
plugin. Diagnosing a repository's own skill wiring is `buddy-agent-harness:doctor`.
|
|
206
|
+
plugin. Diagnosing a repository's own skill wiring is `buddy-agent-harness:doctor-buddy-agent-harness`.
|
|
207
207
|
|
|
208
208
|
## Related skills
|
|
209
209
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// Compiled by `universal-plugin plugin build` from src/skill-scripts/doctor.ts. Edit the source, not this file.
|
|
3
|
-
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.
|
|
3
|
+
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.1","entry":"skills/doctor-universal-plugin/scripts/doctor.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
|
import * as fs from "node:fs";
|
|
6
6
|
import * as path from "node:path";
|
|
@@ -47,7 +47,7 @@ hold everywhere belongs in the Markdown body. See `references/frontmatter.md`, w
|
|
|
47
47
|
## Boundaries
|
|
48
48
|
|
|
49
49
|
Plugin authoring only. Setting a repository up to *consume* skills — `AGENTS.md`, the
|
|
50
|
-
`.agents/skills/` layout, per-harness bridges — is `buddy-agent-harness:init`. This skill does not
|
|
50
|
+
`.agents/skills/` layout, per-harness bridges — is `buddy-agent-harness:init-buddy-agent-harness`. This skill does not
|
|
51
51
|
touch CI, repository settings, or unrelated project files.
|
|
52
52
|
|
|
53
53
|
## References
|
|
@@ -34,7 +34,7 @@ runtime you are enabling, and only those.
|
|
|
34
34
|
|
|
35
35
|
This skill owns the **authoring** side: the plugin a project ships. Setting a repository up to
|
|
36
36
|
*consume* skills — the `.agents/skills/` layout, `AGENTS.md`, per-harness bridges — is
|
|
37
|
-
`buddy-agent-harness:init`, not this.
|
|
37
|
+
`buddy-agent-harness:init-buddy-agent-harness`, not this.
|
|
38
38
|
|
|
39
39
|
## Prerequisites
|
|
40
40
|
|
|
@@ -240,7 +240,7 @@ This skill is not a formatter. If the project has one, run it over the written f
|
|
|
240
240
|
| Publish a packaged plugin to the marketplace | `publish-plugin` |
|
|
241
241
|
| Bump the pinned `universal-plugin@<version>` the project *calls* (not the plugin's own version) | `upgrade-plugin` |
|
|
242
242
|
| Rewrite `npx` pins to the `upx` runner | `adopt-upx` |
|
|
243
|
-
| Set a repository up to *consume* skills (`AGENTS.md`, `.agents/skills/`) | `buddy-agent-harness:init` |
|
|
243
|
+
| Set a repository up to *consume* skills (`AGENTS.md`, `.agents/skills/`) | `buddy-agent-harness:init-buddy-agent-harness` |
|
|
244
244
|
|
|
245
245
|
## References
|
|
246
246
|
|
|
@@ -34,7 +34,7 @@ entry in both `vendors` and `harnesses` under
|
|
|
34
34
|
|
|
35
35
|
Infer from context; ask only if ambiguous. [`standard.md`](./standard.md) has the component table and
|
|
36
36
|
the layout they go in; the `plugin-design` reference decides which component a given need calls
|
|
37
|
-
for. The universal minimum is `skills/<name>/SKILL.md` plus
|
|
37
|
+
for. The universal minimum is `skills/<name>/SKILL.md` plus `mcp.json`.
|
|
38
38
|
|
|
39
39
|
## Step 4 — Scaffold
|
|
40
40
|
|
|
@@ -43,7 +43,7 @@ node scripts/init.mjs --name <plugin-name> --vendor claude-code --vendor cursor
|
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
Resolve `scripts/init.mjs` against this skill's directory; it runs the project's installed CLI, else
|
|
46
|
-
the pinned `npx universal-plugin@0.17.
|
|
46
|
+
the pinned `npx universal-plugin@0.17.1`. Add `--npm` when an npm package ships the plugin,
|
|
47
47
|
which also wires that `package.json`'s `files` to carry the derived manifests, copies its `version`
|
|
48
48
|
into the manifest, and, in a changesets repository, wires the root `version` script to run
|
|
49
49
|
`plugin version --from-package` (SKILL.md Phase 3 asks before that rewrite).
|
|
@@ -83,10 +83,10 @@ delivery path at all.
|
|
|
83
83
|
Run the mechanical validator from the aced **improve-skill** skill:
|
|
84
84
|
|
|
85
85
|
```bash
|
|
86
|
-
node "<path to aced improve-skill>/scripts/validate.
|
|
86
|
+
node "<path to aced improve-skill>/scripts/validate.mjs" --path skills/<skill-name>
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
Fix every CRITICAL finding, then invoke the
|
|
89
|
+
Fix every CRITICAL finding, then invoke the `aced:improve-skill` skill for the full review.
|
|
90
90
|
[`frontmatter.md`](./frontmatter.md) covers what has to hold across runtimes.
|
|
91
91
|
|
|
92
92
|
## Step 7 — Build
|
|
@@ -98,8 +98,8 @@ npx universal-plugin plugin build
|
|
|
98
98
|
Useful flags: `--dry-run` to see the plan, `--verbose` for field-by-field decisions, `--vendor <id>`
|
|
99
99
|
for one target, `--clean` to delete derived manifests first.
|
|
100
100
|
|
|
101
|
-
Read the warnings. An unknown vendor id
|
|
102
|
-
|
|
101
|
+
Read the warnings. An unknown vendor id and an undeliverable Copilot override both surface there
|
|
102
|
+
rather than as errors.
|
|
103
103
|
|
|
104
104
|
## Step 8 — Install locally to test
|
|
105
105
|
|
|
@@ -113,7 +113,7 @@ restart for Claude Code, **Developer: Reload Window** for Cursor. `--list` shows
|
|
|
113
113
|
without writing; `--vendor <id>` narrows it; `plugin uninstall` removes it again.
|
|
114
114
|
|
|
115
115
|
Codex and Copilot CLI scan no local plugin directory, so they report as `unsupported`. Reach those
|
|
116
|
-
through a repository-local marketplace — `
|
|
116
|
+
through a repository-local marketplace — `marketplace`.
|
|
117
117
|
|
|
118
118
|
Do not hand-write a symlink for this. The recipe that circulated for it named
|
|
119
119
|
`~/.claude/plugins/local/`, which does not exist, and a symlink into Cursor's local directory is
|
|
@@ -40,7 +40,7 @@ Only a skill the project *distributes* belongs to a plugin.
|
|
|
40
40
|
| `.claude/skills/`, `.agents/skills/`, `.cursor/rules/` | **No** — repo-private tooling |
|
|
41
41
|
|
|
42
42
|
If the only skills are in private locations, say nothing about adoption. A repository that configures
|
|
43
|
-
its own agents is not a plugin waiting to happen; `buddy-agent-harness:init` is the skill for that
|
|
43
|
+
its own agents is not a plugin waiting to happen; `buddy-agent-harness:init-buddy-agent-harness` is the skill for that
|
|
44
44
|
side of the line.
|
|
45
45
|
|
|
46
46
|
## Making the adoption offer
|
|
@@ -30,7 +30,7 @@ universal-plugin reads `invocation-policy` from each `SKILL.md` and projects it
|
|
|
30
30
|
| --- | --- | --- |
|
|
31
31
|
| `both` (default) | user- and model-invocable | nothing |
|
|
32
32
|
| `user` | explicit invocation only | writes `disable-model-invocation: true` into the skill's frontmatter |
|
|
33
|
-
| `model` | model-invocable only, not user-facing | writes `user-invocable: false
|
|
33
|
+
| `model` | model-invocable only, not user-facing | writes `user-invocable: false` |
|
|
34
34
|
|
|
35
35
|
Two consequences worth knowing before you run a build:
|
|
36
36
|
|
|
@@ -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.17.
|
|
3
|
+
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.1","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.
|
|
3
|
+
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.1","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.
|
|
3
|
+
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.1","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.
|
|
3
|
+
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.1","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.
|
|
3
|
+
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.1","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.
|
|
3
|
+
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.1","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
|
@@ -27,8 +27,8 @@ 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
|
|
31
|
-
release.
|
|
30
|
+
`plugin bundle` and `publish sync-version` are deprecated aliases. They have warned since 0.14.0 and will be
|
|
31
|
+
removed in a later release.
|
|
32
32
|
|
|
33
33
|
## The part that is not automatable
|
|
34
34
|
|
package/skills/version/SKILL.md
CHANGED
|
@@ -74,7 +74,7 @@ node scripts/version.mjs --from-package
|
|
|
74
74
|
```
|
|
75
75
|
|
|
76
76
|
Resolve that path against this skill's own directory; it runs the project's installed CLI
|
|
77
|
-
(`pnpm exec universal-plugin`), else `npx universal-plugin@0.17.
|
|
77
|
+
(`pnpm exec universal-plugin`), else `npx universal-plugin@0.17.1` pinned to this skill's version.
|
|
78
78
|
`universal-plugin plugin version` on the `PATH` is the fallback. The command never prompts, so it is safe to run unattended once the
|
|
79
79
|
source is decided.
|
|
80
80
|
|
|
@@ -138,8 +138,8 @@ Every guard resolves before the first write, so a failed run leaves the tree unt
|
|
|
138
138
|
`plugin build`; the bump already re-derived them.
|
|
139
139
|
- **Run `npm version`.** It knows only `package.json` and leaves the canonical manifest and the
|
|
140
140
|
skill pins stale.
|
|
141
|
-
- **Use the deprecated commands.** `plugin bundle` and `publish sync-version` print a
|
|
142
|
-
|
|
141
|
+
- **Use the deprecated commands.** `plugin bundle` and `publish sync-version` print a deprecation
|
|
142
|
+
warning; use `plugin version` instead. `sync-version` now runs `plugin version --from-package`.
|
|
143
143
|
|
|
144
144
|
## Related skills
|
|
145
145
|
|
|
@@ -148,7 +148,7 @@ Every guard resolves before the first write, so a failed run leaves the tree unt
|
|
|
148
148
|
| Create, adopt, or change what the plugin declares | `init-universal-plugin` |
|
|
149
149
|
| Re-derive the vendor manifests by hand | `build-plugin` |
|
|
150
150
|
| Check whether every place agrees (`unstamped`, `version-drift`) | `doctor-universal-plugin` |
|
|
151
|
-
| Add a changeset for the change being released | `
|
|
151
|
+
| Add a changeset for the change being released | `buddy-changesets:changesets` |
|
|
152
152
|
| Refresh the repository's own marketplace catalogs after a bump | `marketplace` |
|
|
153
153
|
| List the released plugin in the shared marketplace | `publish-plugin` |
|
|
154
154
|
|
|
@@ -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.
|
|
3
|
+
globalThis.__SKILL_SCRIPT__ = {"package":"universal-plugin","bin":"universal-plugin","version":"0.17.1","entry":"skills/version/scripts/version.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
|