release-skill 0.2.1 → 0.2.2

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 (54) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codebuddy-plugin/plugin.json +1 -1
  4. package/.codex-plugin/plugin.json +2 -2
  5. package/.kimi-plugin/plugin.json +1 -1
  6. package/CHANGELOG.md +21 -0
  7. package/INSTALL.md +183 -21
  8. package/INSTALL.zh-CN.md +160 -16
  9. package/README.md +112 -11
  10. package/README.zh-CN.md +73 -10
  11. package/adapters/claude/.claude-plugin/marketplace.json +1 -1
  12. package/adapters/claude/.claude-plugin/plugin.json +1 -1
  13. package/adapters/claude/bin/release-skill.bundle.mjs +1718 -600
  14. package/adapters/claude/schemas/release-plan.schema.json +44 -2
  15. package/adapters/claude/schemas/release-project.schema.json +46 -4
  16. package/adapters/claude/schemas/release-run.schema.json +1 -0
  17. package/adapters/codex/.codex-plugin/plugin.json +2 -2
  18. package/adapters/codex/bin/release-skill.bundle.mjs +1718 -600
  19. package/adapters/codex/schemas/release-plan.schema.json +44 -2
  20. package/adapters/codex/schemas/release-project.schema.json +46 -4
  21. package/adapters/codex/schemas/release-run.schema.json +1 -0
  22. package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
  23. package/adapters/kimi/bin/release-skill.bundle.mjs +1718 -600
  24. package/adapters/kimi/schemas/release-plan.schema.json +44 -2
  25. package/adapters/kimi/schemas/release-project.schema.json +46 -4
  26. package/adapters/kimi/schemas/release-run.schema.json +1 -0
  27. package/adapters/workbuddy/.codebuddy-plugin/plugin.json +4 -2
  28. package/adapters/workbuddy/bin/release-skill.bundle.mjs +1718 -600
  29. package/adapters/workbuddy/schemas/release-plan.schema.json +44 -2
  30. package/adapters/workbuddy/schemas/release-project.schema.json +46 -4
  31. package/adapters/workbuddy/schemas/release-run.schema.json +1 -0
  32. package/bin/release-skill-cli.mjs +46 -4
  33. package/bin/release-skill.bundle.mjs +1718 -600
  34. package/package.json +1 -1
  35. package/references/02-project-config.md +7 -0
  36. package/references/06-adapter-contract.md +21 -2
  37. package/schemas/release-plan.schema.json +44 -2
  38. package/schemas/release-project.schema.json +46 -4
  39. package/schemas/release-run.schema.json +1 -0
  40. package/scripts/sync-public-files.mjs +8 -4
  41. package/src/adapters/contract.mjs +1 -0
  42. package/src/adapters/plugin-marketplace.mjs +536 -23
  43. package/src/commands/assess.mjs +50 -1
  44. package/src/commands/prepare.mjs +273 -9
  45. package/src/commands/publish.mjs +1 -0
  46. package/src/commands/reconcile.mjs +1 -0
  47. package/src/commands/setup.mjs +7 -3
  48. package/src/commands/verify.mjs +2 -0
  49. package/src/core/checkpoints.mjs +7 -2
  50. package/src/core/plan.mjs +97 -4
  51. package/src/core/verification-gates.mjs +1 -1
  52. package/src/platforms/codebuddy.mjs +618 -0
  53. package/src/platforms/registry.mjs +100 -5
  54. package/src/producers/build-adapters.mjs +21 -13
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "name": "release-skill",
11
11
  "source": "./",
12
- "version": "0.2.1",
12
+ "version": "0.2.2",
13
13
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification"
14
14
  }
15
15
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-skill",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "广州市风荷科技有限公司"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-skill",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "广州市风荷科技有限公司"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-skill",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "广州市风荷科技有限公司"
@@ -19,7 +19,7 @@
19
19
  ],
20
20
  "defaultPrompt": [
21
21
  "Assess this project for release readiness.",
22
- "Prepare a release plan for version 0.2.1.",
22
+ "Prepare a release plan for version 0.2.2.",
23
23
  "Help me understand the release workflow."
24
24
  ]
25
25
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-skill",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "广州市风荷科技有限公司"
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ <!-- release-skill:changelog:start version=0.2.2 locale=en baseline=sha256:3208d6a99e84307e77201bb42f88030caac232a3bcbf0942e5747e1934c5c658 -->
4
+ ## [0.2.2] - 2026-07-26
5
+
6
+ v0.2.2 closes the CodeBuddy platform distribution loop and adds the external independent marketplace distribution form. CodeBuddy/WorkBuddy joins the publish/reconcile/verify pipeline through a human attestation closed loop isomorphic to kimi: because the codebuddy CLI cannot pin a frozen ref (no ref option; installs track the default branch/latest), the execute phase writes a manual install requirement (never execs the CLI), and observe/verify consume a structured human attestation with read-only install-point validation — missing, expired, mismatched, or path-escaping attestations all fail closed, at the same severity as kimi (post-publish verification cannot be waived). The external marketplace form lets a distribution declare `marketplaceRepo` so prepare freezes the external marketplace HEAD online (codex hard-frozen to a commit sha, claude weak-frozen to its default branch name) with frozen-sha and index-entry integrity checks, and plugin-marketplace gains matching preflight/observe branches under the `external-marketplace-v1` payload contract while the inline/kimi/codebuddy/legacy branches stay byte-for-byte unchanged. Installation docs (en + zh-CN) are unified on the independent marketplace `ifoohoo/artifact-skill-set` primary path. The npm package name (`release-skill`), publishing identity (`publisher: mzdbxqh`), public repository (`ifoohoo/release-skill`), and corporate maintainer remain unchanged.
7
+
8
+ ### Added
9
+
10
+ - **CodeBuddy platform human attestation closed loop**: CodeBuddy/WorkBuddy joins the release pipeline (`publish`/`reconcile`/`verify`) via a human attestation closed loop isomorphic to kimi. The codebuddy CLI's marketplace add/install cannot pin a frozen ref (no ref option; installs track the default branch/`latest`, measured), so the automated install checkpoint cannot guarantee frozen-artifact identity. Execute writes a manual install requirement and never execs the CLI; observe/verify consume a structured human attestation and read-only-validate the install point. Missing, expired, mismatched, or path-escaping attestations all fail closed, at the same severity as kimi (post-publish verification cannot be waived). Two measured install channels: desktop installs through the WorkBuddy desktop unified marketplace `artifact-skill-set` (`installPath` must contain the `/.workbuddy/plugins/marketplaces/artifact-skill-set/plugins/<plugin>` tail segment, segment-checked); cli runs the bundled CLI under an isolated `HOME=<authorityDir>/codebuddy-home` (`installPath` must be contained in that isolated home's marketplace plugin root). Attestations carry `installChannel` + `marketplace` fields and are validated per channel. Pipeline routing: platform id `codebuddy`, distributionType `codebuddy-plugin`, actionType `codebuddy-marketplace-install`, Tier 3 (same tier as kimi); the build adapter keeps its historical directory name `workbuddy` (`adapters/workbuddy/`, `.codebuddy-plugin/plugin.json` manifest, bytes unchanged).
11
+ - **External independent marketplace distribution form**: a distribution declaring `marketplaceRepo` enables the external form. The prepare production loop freezes the external marketplace HEAD online via `git ls-remote --symref` (codex hard-frozen to a commit sha, claude weak-frozen to its default branch name) and validates the external index entry via `gh api` (name match, exactly one entry, `entry.version == target version` for the claude form); declaring the external form while offline fails closed, and the external repository is strictly read-only. Frozen actions carry `repo=marketplaceRepo`, `ref=add-ref`, `marketplaceCommitSha`, `marketplaceLocation=external`, `payloadContract=external-marketplace-v1`; `snapshotPath`/`manifestDigest` still bind this unit's frozen snapshot (payload authority unchanged). Plan integrity gains an external branch (repo match, `marketplaceLocation`, 40-hex `marketplaceCommitSha`, ref structure safety); kimi/codebuddy with `marketplaceRepo` fail closed. `plugin-marketplace` gains external preflight/observe branches: `external-marketplace-v1` uses the same whole-tree containment semantics as `declared-manifest-v1` (authority is `.`, host-added paths recorded as `extraInstalledPaths` rather than failing); preflight skips the in-snapshot marketplace segment and reads the plugin manifest from the snapshot root, validating name/version and the frozen fields; observe reuses the existing strategy for install-side entry comparison (weak-frozen claude version drift fails closed). Inline/kimi/codebuddy/legacy/`declared-manifest-v1` branches are byte-for-byte unchanged.
12
+
13
+ ### Changed
14
+
15
+ - **Installation docs unified on the marketplace primary path (en + zh-CN)**: README and INSTALL (all four documents) now route plugin installation through the independent marketplace `ifoohoo/artifact-skill-set` as the primary path, and the READMEs add a workflow overview and platform distribution description. Standards and public references (`standards/06-adapter-contract.md`, `references/06-adapter-contract.md`) are synchronized to the codebuddy attestation form and the external marketplace form with its ordering constraints.
16
+
17
+ ### Fixed
18
+
19
+ - **CodeBuddy plugin manifest `skills` field is now an array**: the `.codebuddy-plugin/plugin.json` manifest's `skills` field is emitted as an array, matching the CodeBuddy host's expected shape.
20
+ - **`verificationGate` scope distribution enum includes `codebuddy-plugin`**: `release-project.schema.json` adds `codebuddy-plugin` to the `verificationGate.scope.distribution` enum (mirroring the existing `kimi-plugin` rule), keeping the schema and the runtime gate whitelist consistent; the embedded schema copies in all four adapters are rebuilt to match.
21
+ <!-- release-skill:changelog:end version=0.2.2 locale=en -->
22
+
23
+
3
24
  <!-- release-skill:changelog:start version=0.2.1 locale=en baseline=sha256:7d616df824b1d28f9939ef181d6a5d5928d3e0f0455974bebb356c742992ac81 -->
4
25
  ## [0.2.1] - 2026-07-25
5
26
 
package/INSTALL.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [简体中文](INSTALL.zh-CN.md)
4
4
 
5
- <!-- release-skill:release-version: 0.2.1 -->
5
+ <!-- release-skill:release-version: 0.2.2 -->
6
6
  ## Prerequisites
7
7
 
8
8
  - Node.js 22.0.0 or later
@@ -35,6 +35,80 @@ release-skill help
35
35
 
36
36
  You should see the version number and the list of available commands.
37
37
 
38
+ ## Install as a plugin (unified marketplace — recommended)
39
+
40
+ All four supported plugin hosts install release-skill from the unified
41
+ marketplace [ifoohoo/artifact-skill-set](https://github.com/ifoohoo/artifact-skill-set),
42
+ which publishes the Claude Code, CodeBuddy/WorkBuddy, Codex, and Kimi Code
43
+ manifests for the same release. Add the marketplace once, then install the
44
+ plugin:
45
+
46
+ > **External independent marketplace model.** `ifoohoo/artifact-skill-set` is an
47
+ > external independent marketplace: the plugin repository
48
+ > (`ifoohoo/release-skill`) carries only the plugin manifest
49
+ > (`.claude-plugin/plugin.json`, `.codex-plugin/plugin.json`, …), while the
50
+ > marketplace index (`marketplace.json`) is centralized in the external
51
+ > marketplace repository. When a release unit's plugin distribution declares
52
+ > `marketplaceRepo`, `prepare --online --production` freezes the external
53
+ > marketplace HEAD — Codex pins the commit sha (strong freeze), Claude pins the
54
+ > default branch name (weak freeze) — and verifies the installed payload against
55
+ > the unit's own frozen snapshot whole-tree (contract `external-marketplace-v1`).
56
+ >
57
+ > **Release ordering (marketplace before plugin).** Because the install targets
58
+ > the external marketplace, the marketplace index must be versioned and published
59
+ > **first** — its `release-skill` entry version must equal the target release
60
+ > version (the Claude form verifies this entry) — before
61
+ > `prepare --online --production` can freeze a marketplace sha that contains that
62
+ > entry. See `references/06-adapter-contract.md` §2.3/§2.4.
63
+
64
+ **Claude Code** (interactive session):
65
+
66
+ ```
67
+ /plugin marketplace add ifoohoo/artifact-skill-set
68
+ /plugin install release-skill@artifact-skill-set
69
+ ```
70
+
71
+ **CodeBuddy / WorkBuddy:**
72
+
73
+ ```bash
74
+ codebuddy plugin marketplace add ifoohoo/artifact-skill-set
75
+ codebuddy plugin install release-skill@artifact-skill-set
76
+ ```
77
+
78
+ WorkBuddy desktop installs only through a registered marketplace: after the
79
+ `marketplace add` above, install `release-skill` from the plugin panel.
80
+
81
+ **OpenAI Codex:**
82
+
83
+ ```bash
84
+ codex plugin marketplace add ifoohoo/artifact-skill-set
85
+ ```
86
+
87
+ Then install `release-skill` from the interactive `/plugins` browser.
88
+
89
+ **Kimi Code** (interactive session):
90
+
91
+ ```
92
+ /plugins marketplace https://raw.githubusercontent.com/ifoohoo/artifact-skill-set/main/kimi-marketplace.json
93
+ ```
94
+
95
+ Or point `KIMI_CODE_PLUGIN_MARKETPLACE_URL` at the same URL before launching.
96
+ Then install `release-skill` from the `/plugins` panel.
97
+
98
+ ### Alternative: direct repository install (advanced)
99
+
100
+ The unified marketplace above is the supported primary path. Direct
101
+ installation from the release repository remains available for advanced
102
+ scenarios:
103
+
104
+ - Claude Code: `/plugin marketplace add ifoohoo/release-skill`, then
105
+ `/plugin install release-skill@release-skill`.
106
+ - Kimi Code: the version-pinned `/plugins install <release-tag URL>` documented
107
+ in the [Kimi Code section](#install-as-a-kimi-code-plugin) below.
108
+ - CodeBuddy: single-session use directly from a source checkout via
109
+ `--plugin-dir <path>/adapters/workbuddy` (see the
110
+ [CodeBuddy/WorkBuddy section](#install-as-a-codebuddyworkbuddy-plugin)).
111
+
38
112
  ## Install as a Kimi Code plugin
39
113
 
40
114
  Kimi Code is a supported plugin host alongside Claude Code and Codex. The
@@ -42,6 +116,11 @@ Kimi Code plugin manifest lives at `.kimi-plugin/plugin.json`, mirroring
42
116
  `.claude-plugin/plugin.json` and `.codex-plugin/plugin.json`, and the package
43
117
  ships `adapters/kimi/` next to `adapters/claude/` and `adapters/codex/`.
44
118
 
119
+ For day-to-day installation, prefer the
120
+ [unified marketplace path](#install-as-a-plugin-unified-marketplace--recommended)
121
+ above. The remainder of this section documents the version-pinned manual
122
+ closed loop that release-skill's own publish/verify pipeline relies on.
123
+
45
124
  Kimi Code has an interactive plugin marketplace but **no scriptable,
46
125
  non-interactive install API**. release-skill therefore models Kimi installation
47
126
  as a version-pinned **manual** install plus trusted observation/attestation:
@@ -68,7 +147,7 @@ as a version-pinned **manual** install plus trusted observation/attestation:
68
147
  default branch), confirm the trust prompt, then reload:
69
148
 
70
149
  ```
71
- /plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.2.1
150
+ /plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.2.2
72
151
  /plugins reload
73
152
  ```
74
153
 
@@ -83,10 +162,10 @@ as a version-pinned **manual** install plus trusted observation/attestation:
83
162
  {
84
163
  "consumer": "kimi",
85
164
  "plugin": "release-skill",
86
- "version": "0.2.1",
165
+ "version": "0.2.2",
87
166
  "entrySkill": "release-help",
88
167
  "repo": "ifoohoo/release-skill",
89
- "ref": "release-skill-v0.2.1",
168
+ "ref": "release-skill-v0.2.2",
90
169
  "installPath": "<kimiCodeHome>/plugins/managed/release-skill",
91
170
  "planDigest": "<64-hex frozen plan digest>",
92
171
  "payloadDigest": "<64-hex frozen snapshot payload digest>",
@@ -108,23 +187,106 @@ unit never reaches `VERIFIED`.
108
187
 
109
188
  ## Install as a CodeBuddy/WorkBuddy plugin
110
189
 
111
- The package also ships a generated, self-contained CodeBuddy/WorkBuddy adapter
112
- at `adapters/workbuddy/`, next to `adapters/claude/`, `adapters/codex/`, and
113
- `adapters/kimi/`. Its manifest lives at `.codebuddy-plugin/plugin.json` (the
114
- components — `skills/`, `bin/`, `schemas/`, `native/` sit at the plugin
115
- root, per the CodeBuddy plugin reference), and its skills resolve the CLI
116
- entry via `${CODEBUDDY_PLUGIN_ROOT}`, which CodeBuddy expands inline like
117
- Claude Code expands `${CLAUDE_PLUGIN_ROOT}`.
118
-
119
- CodeBuddy/WorkBuddy installation is a **manual** step today: the automated
120
- marketplace install checkpoint (`publish`/`verify`) does not cover CodeBuddy
121
- yet. To use the adapter, point CodeBuddy at the generated plugin directory —
122
- for a single session run CodeBuddy with `--plugin-dir <path>/adapters/workbuddy`,
123
- or add the directory as a marketplace source you control
124
- (`codebuddy plugin marketplace add <source>`) and install from it
125
- (`codebuddy plugin install release-skill@<marketplace>`, or the interactive
126
- `/plugin` manager). The installed copy lands in CodeBuddy's versioned plugin
127
- cache; the adapter never references files outside its own directory.
190
+ CodeBuddy (desktop product WorkBuddy) is a supported plugin host alongside
191
+ Claude Code, Codex, and Kimi Code. The package ships a generated, self-contained
192
+ CodeBuddy/WorkBuddy adapter at `adapters/workbuddy/`, next to `adapters/claude/`,
193
+ `adapters/codex/`, and `adapters/kimi/`. Its manifest lives at
194
+ `.codebuddy-plugin/plugin.json` (the components `skills/`, `bin/`, `schemas/`,
195
+ `native/` sit at the plugin root, per the CodeBuddy plugin reference), and its
196
+ skills resolve the CLI entry via `${CODEBUDDY_PLUGIN_ROOT}`, which CodeBuddy
197
+ expands inline like Claude Code expands `${CLAUDE_PLUGIN_ROOT}`. The build
198
+ adapter directory is named `workbuddy` while the platform / distribution id is
199
+ `codebuddy`; the two names refer to the same target.
200
+
201
+ For day-to-day installation, prefer the
202
+ [unified marketplace path](#install-as-a-plugin-unified-marketplace--recommended)
203
+ above. The remainder of this section documents the manual attestation closed loop
204
+ that release-skill's own publish/verify pipeline relies on.
205
+
206
+ The codebuddy CLI can add a marketplace and install a plugin, but **neither
207
+ `plugin marketplace add` nor `plugin install` accepts a ref option** — the install
208
+ tracks the marketplace default branch / latest. An automated install checkpoint
209
+ therefore cannot guarantee the frozen artifact's identity, so release-skill models
210
+ CodeBuddy installation as a **manual** install plus trusted observation/
211
+ attestation (the same capability gap and closed loop as Kimi Code):
212
+ `publish`/`verify` never auto-install CodeBuddy plugins. The closed loop is:
213
+
214
+ 1. `publish` performs the automated writes (Git branch/tag, npm, GitHub
215
+ Release), then reaches the `codebuddy-marketplace-install` checkpoint. Because
216
+ the install cannot pin a frozen ref, that checkpoint **fails closed** and the
217
+ run lands in `PARTIAL` — the successful automated writes are NOT undone. The
218
+ checkpoint observation (and the requirement file below) names both install
219
+ channels, the unified marketplace, the isolated CLI home, and the attestation
220
+ path.
221
+ 2. Read the requirement at
222
+ `<root>/.release-skill/codebuddy-attestations/<planDigest>/<plugin>/release-skill-codebuddy-manual-install.json`.
223
+ 3. Install release-skill from the unified marketplace `artifact-skill-set`
224
+ (https://github.com/ifoohoo/artifact-skill-set) through ONE of two channels:
225
+
226
+ **Primary path (WorkBuddy desktop):** install release-skill from the plugin
227
+ panel, then confirm `~/.workbuddy/settings.json` `enabledPlugins` contains
228
+ `"release-skill@artifact-skill-set": true`. The plugin lands at
229
+ `~/.workbuddy/plugins/marketplaces/artifact-skill-set/plugins/release-skill/`.
230
+
231
+ **Alternate path (bundled codebuddy CLI, isolatable):** run the CLI with the
232
+ **isolated** home from the requirement so the clone lands inside it (do not use
233
+ your ordinary `~/.codebuddy`):
234
+
235
+ ```
236
+ HOME="<codebuddyHome>" <codebuddy binary> plugin marketplace add https://github.com/ifoohoo/artifact-skill-set
237
+ HOME="<codebuddyHome>" <codebuddy binary> plugin install release-skill@artifact-skill-set
238
+ ```
239
+
240
+ The CLI ships with WorkBuddy.app (macOS known path
241
+ `/Applications/WorkBuddy.app/Contents/Resources/app.asar.unpacked/cli/bin/codebuddy`).
242
+ The plugin lands at
243
+ `<codebuddyHome>/.codebuddy/plugins/marketplaces/artifact-skill-set/plugins/release-skill/`.
244
+ 4. **Ref limitation warning:** a codebuddy install tracks the marketplace default
245
+ branch and CANNOT be pinned to the frozen ref. Before writing the attestation
246
+ you MUST confirm the installed plugin manifest version equals the frozen
247
+ version `0.2.1`; otherwise do NOT issue an attestation.
248
+ 5. Write the attestation JSON to
249
+ `<root>/.release-skill/codebuddy-attestations/<planDigest>/<plugin>/release-skill-codebuddy-attestation.json`.
250
+ `planDigest` MUST be the frozen **plan** digest; `payloadDigest` MUST be the
251
+ frozen snapshot **payload** digest; `installChannel` MUST be `"desktop"` or
252
+ `"cli"`; `marketplace` MUST be `artifact-skill-set`; `installPath` MUST be the
253
+ actual installed plugin directory for the chosen channel; `attestedAt` must not
254
+ be in the future and `expiresAt` must be within 24 hours of `attestedAt`.
255
+ Example:
256
+
257
+ ```json
258
+ {
259
+ "consumer": "codebuddy",
260
+ "plugin": "release-skill",
261
+ "version": "0.2.2",
262
+ "entrySkill": "release-help",
263
+ "repo": "ifoohoo/release-skill",
264
+ "ref": "release-skill-v0.2.2",
265
+ "marketplace": "artifact-skill-set",
266
+ "installChannel": "desktop",
267
+ "installPath": "~/.workbuddy/plugins/marketplaces/artifact-skill-set/plugins/release-skill",
268
+ "planDigest": "<64-hex frozen plan digest>",
269
+ "payloadDigest": "<64-hex frozen snapshot payload digest>",
270
+ "attestedBy": "<person responsible>",
271
+ "attestedAt": "2026-07-23T00:00:00.000Z",
272
+ "expiresAt": "2026-07-23T12:00:00.000Z"
273
+ }
274
+ ```
275
+
276
+ 6. Run `release-skill reconcile --run <publish-run>` (promotes `PARTIAL` →
277
+ `PUBLISHED`) and then `release-skill verify --run <reconcile-run>` (→
278
+ `VERIFIED`). Both read the attestation from the same plan-digest-keyed
279
+ directory, so their fresh run directories do not lose the proof.
280
+
281
+ For the cli channel, installing into the ordinary `~/.codebuddy` is **not**
282
+ acceptable proof: the attested `installPath` must resolve inside the requirement's
283
+ isolated `<codebuddyHome>` managed root, otherwise verification fails closed and
284
+ the CodeBuddy unit never reaches `VERIFIED`. (The desktop channel uses the real
285
+ `~/.workbuddy` marketplace layout above, which IS the well-known proof layout.)
286
+
287
+ For a single session from a source checkout you can also point CodeBuddy at the
288
+ generated plugin directory with `--plugin-dir <path>/adapters/workbuddy`; the
289
+ adapter never references files outside its own directory.
128
290
 
129
291
  ## Development Install (Local Checkout)
130
292
 
package/INSTALL.zh-CN.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](INSTALL.md)
4
4
 
5
- <!-- release-skill:release-version: 0.2.1 -->
5
+ <!-- release-skill:release-version: 0.2.2 -->
6
6
  ## 前置条件
7
7
 
8
8
  - Node.js 22.0.0 或更高版本
@@ -32,6 +32,73 @@ release-skill help
32
32
 
33
33
  输出中应包含版本号和可用命令列表。
34
34
 
35
+ ## 安装为插件(统一市场——推荐)
36
+
37
+ 四种受支持的插件宿主都从统一市场
38
+ [ifoohoo/artifact-skill-set](https://github.com/ifoohoo/artifact-skill-set)
39
+ 安装 release-skill;该市场为同一发布版本提供 Claude Code、
40
+ CodeBuddy/WorkBuddy、Codex 与 Kimi Code 四份清单。先添加一次市场,再安装
41
+ 插件:
42
+
43
+ > **外部独立市场形态。** `ifoohoo/artifact-skill-set` 是一个外部独立市场:
44
+ > 插件仓库(`ifoohoo/release-skill`)只含 plugin 清单
45
+ >(`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json` 等),marketplace
46
+ > 索引(`marketplace.json`)则集中于外部市场仓库。当发布单元的插件 distribution
47
+ > 声明 `marketplaceRepo` 时,`prepare --online --production` 会冻结外部市场
48
+ > HEAD——Codex 钉 commit sha(强冻结)、Claude 钉默认分支名(弱冻结)——并以
49
+ > 本单元自身冻结快照整树校验安装载荷(契约 `external-marketplace-v1`)。
50
+ >
51
+ > **发布时序(先市场后插件)。** 由于安装目标是外部市场,marketplace 索引必须
52
+ > **先**定版并发布——其 `release-skill` 条目版本须等于目标发布版本(claude 形态
53
+ > 会校验该条目)——之后 `prepare --online --production` 才能冻结到含该条目的市场
54
+ > sha。详见 `references/06-adapter-contract.md` §2.3/§2.4。
55
+
56
+ **Claude Code**(交互会话中):
57
+
58
+ ```
59
+ /plugin marketplace add ifoohoo/artifact-skill-set
60
+ /plugin install release-skill@artifact-skill-set
61
+ ```
62
+
63
+ **CodeBuddy / WorkBuddy:**
64
+
65
+ ```bash
66
+ codebuddy plugin marketplace add ifoohoo/artifact-skill-set
67
+ codebuddy plugin install release-skill@artifact-skill-set
68
+ ```
69
+
70
+ WorkBuddy 桌面端只能通过已注册的市场安装:执行上面的 `marketplace add`
71
+ 之后,在插件面板中安装 `release-skill`。
72
+
73
+ **OpenAI Codex:**
74
+
75
+ ```bash
76
+ codex plugin marketplace add ifoohoo/artifact-skill-set
77
+ ```
78
+
79
+ 然后在交互式 `/plugins` 浏览器中安装 `release-skill`。
80
+
81
+ **Kimi Code**(交互会话中):
82
+
83
+ ```
84
+ /plugins marketplace https://raw.githubusercontent.com/ifoohoo/artifact-skill-set/main/kimi-marketplace.json
85
+ ```
86
+
87
+ 或在启动前把 `KIMI_CODE_PLUGIN_MARKETPLACE_URL` 指向同一 URL。然后在
88
+ `/plugins` 面板中安装 `release-skill`。
89
+
90
+ ### 备选:直接从仓库安装(进阶)
91
+
92
+ 上面的统一市场是受支持的主路径。直接从发布仓库安装仍可用于进阶场景:
93
+
94
+ - Claude Code:`/plugin marketplace add ifoohoo/release-skill`,然后
95
+ `/plugin install release-skill@release-skill`。
96
+ - Kimi Code:下文 [Kimi Code 小节](#安装为-kimi-code-插件)中版本钉死的
97
+ `/plugins install <release-tag URL>`。
98
+ - CodeBuddy:源码检出后通过 `--plugin-dir <path>/adapters/workbuddy`
99
+ 单会话使用(见
100
+ [CodeBuddy/WorkBuddy 小节](#安装为-codebuddyworkbuddy-插件))。
101
+
35
102
  ## 安装为 Kimi Code 插件
36
103
 
37
104
  Kimi Code 是与 Claude Code 和 Codex 并列的受支持插件宿主。Kimi Code 插件
@@ -39,6 +106,10 @@ Kimi Code 是与 Claude Code 和 Codex 并列的受支持插件宿主。Kimi Cod
39
106
  `.codex-plugin/plugin.json` 对应;包内同时提供 `adapters/kimi/`,与
40
107
  `adapters/claude/`、`adapters/codex/` 并列。
41
108
 
109
+ 日常安装请优先使用上文的
110
+ [统一市场路径](#安装为插件统一市场推荐)。本节其余部分记录的是
111
+ release-skill 自身 publish/verify 流水线所依赖的“版本钉死手动闭环”。
112
+
42
113
  Kimi Code 有交互式插件市场,但**没有可脚本化的非交互安装接口**。因此
43
114
  release-skill 把 Kimi 安装建模为“版本钉死的手动安装 + 可信观测/人工证明”:
44
115
  `publish`/`verify` 从不对 Kimi 执行自动安装。完整闭环如下:
@@ -62,7 +133,7 @@ release-skill 把 Kimi 安装建模为“版本钉死的手动安装 + 可信观
62
133
  它会安装最新 release 或默认分支),确认信任提示后重新加载:
63
134
 
64
135
  ```
65
- /plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.2.1
136
+ /plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.2.2
66
137
  /plugins reload
67
138
  ```
68
139
 
@@ -76,10 +147,10 @@ release-skill 把 Kimi 安装建模为“版本钉死的手动安装 + 可信观
76
147
  {
77
148
  "consumer": "kimi",
78
149
  "plugin": "release-skill",
79
- "version": "0.2.1",
150
+ "version": "0.2.2",
80
151
  "entrySkill": "release-help",
81
152
  "repo": "ifoohoo/release-skill",
82
- "ref": "release-skill-v0.2.1",
153
+ "ref": "release-skill-v0.2.2",
83
154
  "installPath": "<kimiCodeHome>/plugins/managed/release-skill",
84
155
  "planDigest": "<64 位十六进制冻结计划摘要>",
85
156
  "payloadDigest": "<64 位十六进制冻结快照载荷摘要>",
@@ -100,21 +171,94 @@ release-skill 把 Kimi 安装建模为“版本钉死的手动安装 + 可信观
100
171
 
101
172
  ## 安装为 CodeBuddy/WorkBuddy 插件
102
173
 
103
- 本包还随 `adapters/claude/`、`adapters/codex/`、`adapters/kimi/` 一并提供生成的
104
- 自包含 CodeBuddy/WorkBuddy 适配器 `adapters/workbuddy/`。其清单位于
174
+ CodeBuddy(桌面端产品 WorkBuddy)是与 Claude Code、Codex、Kimi Code 并列的受支持
175
+ 插件宿主。本包随 `adapters/claude/`、`adapters/codex/`、`adapters/kimi/` 一并提供
176
+ 生成的自包含 CodeBuddy/WorkBuddy 适配器 `adapters/workbuddy/`。其清单位于
105
177
  `.codebuddy-plugin/plugin.json`(组件——`skills/`、`bin/`、`schemas/`、
106
178
  `native/`——按 CodeBuddy 插件规范位于插件根目录),技能通过
107
179
  `${CODEBUDDY_PLUGIN_ROOT}` 解析 CLI 入口;CodeBuddy 会像 Claude Code 展开
108
- `${CLAUDE_PLUGIN_ROOT}` 一样内联展开该变量。
109
-
110
- CodeBuddy/WorkBuddy 安装目前是**手动**步骤:自动化 marketplace 安装检查点
111
- (`publish`/`verify`)尚未覆盖 CodeBuddy。使用该适配器时,把 CodeBuddy 指向
112
- 生成的插件目录——单会话可用 `--plugin-dir <path>/adapters/workbuddy` 启动
113
- CodeBuddy;或把该目录作为你控制的 marketplace
114
- (`codebuddy plugin marketplace add <source>`)再从中安装
115
- (`codebuddy plugin install release-skill@<marketplace>`,或交互式 `/plugin`
116
- 管理器)。安装后的副本落在 CodeBuddy 的版本化插件缓存中;适配器不引用自身
117
- 目录之外的任何文件。
180
+ `${CLAUDE_PLUGIN_ROOT}` 一样内联展开该变量。build adapter 目录名为 `workbuddy`,
181
+ 而平台 / 分发 id 为 `codebuddy`,两个名字指向同一目标。
182
+
183
+ 日常安装请优先使用上文的
184
+ [统一市场路径](#安装为插件统一市场推荐)。本节其余部分记录的是
185
+ release-skill 自身 publish/verify 流水线所依赖的“手动安装 + 可信证明闭环”。
186
+
187
+ codebuddy CLI 可以添加市场并安装插件,但 **`plugin marketplace add`
188
+ `plugin install` 均无 ref 选项**——安装会跟踪市场默认分支 / latest。因此自动化
189
+ 安装检查点无法保证冻结产物的同一性,release-skill 把 CodeBuddy 安装建模为
190
+ “**手动**安装 + 可信观测/人工证明”(与 Kimi Code 相同的能力缺口与闭环):
191
+ `publish`/`verify` 从不对 CodeBuddy 执行自动安装。完整闭环如下:
192
+
193
+ 1. `publish` 先完成自动化写入(Git branch/tag、npm、GitHub Release),随后
194
+ 到达 `codebuddy-marketplace-install` 检查点。由于安装无法钉死冻结 ref,该
195
+ 检查点**失败关闭**,整个 run 落入 `PARTIAL`——已成功的自动化写入**不会**被撤销。
196
+ 检查点输出(以及下面的 requirement 文件)会给出两个安装通道、统一市场、
197
+ 隔离的 CLI home 与证明写入路径。
198
+ 2. 读取 requirement:
199
+ `<root>/.release-skill/codebuddy-attestations/<planDigest>/<plugin>/release-skill-codebuddy-manual-install.json`。
200
+ 3. 经**两个通道之一**从统一市场 `artifact-skill-set`
201
+ (https://github.com/ifoohoo/artifact-skill-set)安装 release-skill:
202
+
203
+ **主路径(WorkBuddy 桌面端):** 从插件面板安装 release-skill,然后确认
204
+ `~/.workbuddy/settings.json` 的 `enabledPlugins` 含
205
+ `"release-skill@artifact-skill-set": true`。插件落点为
206
+ `~/.workbuddy/plugins/marketplaces/artifact-skill-set/plugins/release-skill/`。
207
+
208
+ **备选路径(捆绑的 codebuddy CLI,可隔离):** 用 requirement 给出的**隔离**
209
+ home 运行 CLI,使克隆落在其中(不要使用你日常的 `~/.codebuddy`):
210
+
211
+ ```
212
+ HOME="<codebuddyHome>" <codebuddy 二进制> plugin marketplace add https://github.com/ifoohoo/artifact-skill-set
213
+ HOME="<codebuddyHome>" <codebuddy 二进制> plugin install release-skill@artifact-skill-set
214
+ ```
215
+
216
+ CLI 随 WorkBuddy.app 捆绑(macOS 已知路径
217
+ `/Applications/WorkBuddy.app/Contents/Resources/app.asar.unpacked/cli/bin/codebuddy`)。
218
+ 插件落点为
219
+ `<codebuddyHome>/.codebuddy/plugins/marketplaces/artifact-skill-set/plugins/release-skill/`。
220
+ 4. **ref 限制警告:** codebuddy 安装跟踪市场默认分支,**无法**钉死到冻结 ref。
221
+ 写出证明之前,必须核实已安装插件清单版本等于冻结版本 `0.2.1`;否则**不得**
222
+ 出具证明。
223
+ 5. 把证明 JSON 写入
224
+ `<root>/.release-skill/codebuddy-attestations/<planDigest>/<plugin>/release-skill-codebuddy-attestation.json`。
225
+ `planDigest` 必须是冻结**计划**摘要;`payloadDigest` 必须是冻结快照**载荷**
226
+ 摘要;`installChannel` 必须是 `"desktop"` 或 `"cli"`;`marketplace` 必须是
227
+ `artifact-skill-set`;`installPath` 必须是所选通道的实际安装目录;
228
+ `attestedAt` 不得为未来时间,`expiresAt` 必须在 `attestedAt` 之后 24 小时内。
229
+ 示例:
230
+
231
+ ```json
232
+ {
233
+ "consumer": "codebuddy",
234
+ "plugin": "release-skill",
235
+ "version": "0.2.2",
236
+ "entrySkill": "release-help",
237
+ "repo": "ifoohoo/release-skill",
238
+ "ref": "release-skill-v0.2.2",
239
+ "marketplace": "artifact-skill-set",
240
+ "installChannel": "desktop",
241
+ "installPath": "~/.workbuddy/plugins/marketplaces/artifact-skill-set/plugins/release-skill",
242
+ "planDigest": "<64 位十六进制冻结计划摘要>",
243
+ "payloadDigest": "<64 位十六进制冻结快照载荷摘要>",
244
+ "attestedBy": "<责任人>",
245
+ "attestedAt": "2026-07-23T00:00:00.000Z",
246
+ "expiresAt": "2026-07-23T12:00:00.000Z"
247
+ }
248
+ ```
249
+
250
+ 6. 运行 `release-skill reconcile --run <publish-run>`(把 `PARTIAL` 提升为
251
+ `PUBLISHED`),再运行 `release-skill verify --run <reconcile-run>`(→
252
+ `VERIFIED`)。两者都从同一个按计划摘要命名的目录读取证明,因此它们各自的
253
+ 新 run 目录不会丢失该证明。
254
+
255
+ 对 cli 通道而言,把插件安装到日常的 `~/.codebuddy` **不**构成有效证明:证明中的
256
+ `installPath` 必须解析到 requirement 给出的隔离 `<codebuddyHome>` managed 根之内,
257
+ 否则验证失败关闭,CodeBuddy 单元绝不进入 `VERIFIED`。(desktop 通道使用上文真实的
258
+ `~/.workbuddy` 市场布局,那本身就是公认的有效证明布局。)
259
+
260
+ 源码检出后也可以用 `--plugin-dir <path>/adapters/workbuddy` 把 CodeBuddy 指向
261
+ 生成的插件目录做单会话使用;适配器不引用自身目录之外的任何文件。
118
262
 
119
263
  ## 开发安装(本地源码)
120
264