release-skill 0.9.8 → 0.9.10
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/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +2 -2
- package/.kimi-plugin/plugin.json +1 -1
- package/CHANGELOG.md +46 -0
- package/INSTALL.md +14 -18
- package/INSTALL.zh-CN.md +13 -16
- package/README.md +22 -26
- package/README.zh-CN.md +25 -23
- package/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/adapters/claude/bin/release-skill.bundle.mjs +28 -11
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +28 -11
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +28 -11
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +28 -11
- package/bin/release-skill.bundle.mjs +28 -11
- package/package.json +1 -2
- package/platform-manifest.json +2 -2
- package/src/commands/post-release-local.mjs +25 -7
- package/src/platforms/registry.mjs +1 -2
- package/src/producers/build-adapters.mjs +2 -2
- package/.agents/plugins/marketplace.json +0 -32
- package/.claude-plugin/marketplace.json +0 -30
- package/adapters/claude/.claude-plugin/marketplace.json +0 -20
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.10",
|
|
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.9.
|
|
22
|
+
"Prepare a release plan for version 0.9.10.",
|
|
23
23
|
"Help me understand the release workflow."
|
|
24
24
|
]
|
|
25
25
|
}
|
package/.kimi-plugin/plugin.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.9.10 locale=en baseline=sha256:4cd32926b3d8e0da10ec909f58268636c3e6025f59cd7f24d313460cf5524b7b -->
|
|
4
|
+
## [0.9.10] - 2026-09-04
|
|
5
|
+
|
|
6
|
+
0.9.10 is a local source candidate that removes release-skill's private marketplace and makes Skill Family Hub the single marketplace source. It consumes the three Foundation packages at the exact 0.16.0 release. The release workspace publishes a verified entry and the Hub's seven-file public snapshot through GitHub's Git Data API after verification. This note is not evidence of publication, real-host acceptance, consumer installation verification, or independent acceptance.
|
|
7
|
+
|
|
8
|
+
### Security
|
|
9
|
+
|
|
10
|
+
- Hub branch updates are compare-and-swap writes against the observed main commit. Concurrent movement fails closed; a public-Hub failure after the private commit is retained as a recoverable partial result and is never rolled back or force-pushed.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Removed the bundled Claude, Codex, and adapter marketplace indexes from the release-skill package. Plugin manifests remain available for installation through Skill Family Hub.
|
|
15
|
+
- Installation guidance now uses `ifoohoo/skill-family-hub` and `release-skill@skill-family-hub` for Claude Code, Codex, CodeBuddy, and WorkBuddy.
|
|
16
|
+
- After a release reaches VERIFIED, the project-private postVerify hook applies the proposal with the Hub's own receiver, runs the Hub release gate once, and publishes the private and public Hub commits through GitHub's Git Data API with non-forced branch updates.
|
|
17
|
+
|
|
18
|
+
### Upgrade Notes
|
|
19
|
+
|
|
20
|
+
Remove any `release-skill` standalone marketplace registration from each host, add or update `ifoohoo/skill-family-hub`, and install `release-skill@skill-family-hub`.
|
|
21
|
+
<!-- release-skill:changelog:end version=0.9.10 locale=en -->
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
<!-- release-skill:changelog:start version=0.9.9 locale=en baseline=sha256:44d7cba7d5e4cbe182157c8b200e3a2d9b494d61a9555cd5af5c62c97a60fb37 -->
|
|
25
|
+
## [0.9.9] - 2026-09-04
|
|
26
|
+
|
|
27
|
+
0.9.9 is a local source candidate that makes Kimi Code plugin trust compare the complete displayed installation identity with the frozen URL. It consumes the three Foundation packages at the exact 0.16.0 release. This note is not evidence of publication, real-host acceptance, consumer installation verification, or independent acceptance.
|
|
28
|
+
|
|
29
|
+
### Security
|
|
30
|
+
|
|
31
|
+
- Kimi Code extracts the complete installation identity from the plugin trust dialog, removes ANSI/OSC control sequences and soft wrapping, and compares the result exactly with the frozen installation URL. Similar repository names and tag prefixes or suffixes fail closed.
|
|
32
|
+
- Claude and Codex continue to verify the frozen marketplace repository, ref, and commit before the first marketplace or plugin write when a rebind is required. An unreachable remote, missing ref, or commit mismatch returns `MANUAL_REQUIRED` for that host with zero host writes; other selected hosts continue.
|
|
33
|
+
- Kimi Code continues only when the selected row is confirmed as `Trust and install`. A `Trust this folder?` dialog, an unknown screen, timeout, EOF, or mismatched identity fails closed before unintended confirmation.
|
|
34
|
+
- Any host plan remains a qualified frozen-plan path and requires a VERIFIED-run from the same release lineage before host acceptance; this source candidate does not provide that acceptance.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- The English and Chinese README scope descriptions identify 0.9.9 as the current source candidate.
|
|
39
|
+
- The public release-finish flow continues to treat a `proposal-inbox` postVerify hook as proposal delivery plus delivery evidence. The receiver applies, renders, and synchronizes the proposal under its own runbook and governance; no Hub repository or push sequence is built into the public Skill.
|
|
40
|
+
- Kimi Code continues to resolve its effective configuration root from explicit `kimiHome`, then `KIMI_CODE_HOME`, then `~/.kimi-code`; the TUI process and post-install observation use the same root.
|
|
41
|
+
- The current 0.9.9 candidate keeps the narrow R-05 Hook cache v2 consumer path, keeps the CodeBuddy plugin entry explicit as `marketplace: release-skill`, and keeps `--root <project-root>` in release-finish local-finish examples. Foundation dependencies remain pinned to the three released 0.16.0 packages.
|
|
42
|
+
|
|
43
|
+
### Upgrade Notes
|
|
44
|
+
|
|
45
|
+
Prepare and approve a new 0.9.9 production plan for these changes. After verify reaches `VERIFIED`, complete every declared postVerify hook with its own immutable checkpoint approval before running release-finish. Real-host acceptance can begin only after 0.9.9 is officially published and VERIFIED; the official 0.9.9 entry must be installed or reloaded first. A source candidate, an older installed entry, or the mere existence of plan and run files cannot complete real-host acceptance. Each selected host must complete a first successful update. On the second run, Claude, Kimi, CodeBuddy, and WorkBuddy must report `ALREADY_CURRENT`; Codex may report `UPDATED` only when it reinstalls the same exact 0.9.9 frozen reference, payload validation passes, and `restartRequired=true` is declared. The local updater uses the Kimi Code TUI path verified for 0.40.1; it does not switch to a web or REST installation path. Confirm that the complete frozen installation URL shown by the plugin trust dialog is exact, and never approve a folder-trust dialog as part of plugin installation. This candidate does not claim that 0.9.9 has already been published or VERIFIED.
|
|
46
|
+
<!-- release-skill:changelog:end version=0.9.9 locale=en -->
|
|
47
|
+
|
|
48
|
+
|
|
3
49
|
<!-- release-skill:changelog:start version=0.9.8 locale=en baseline=sha256:ed56048811dd7946bfdaa4022d0430906db713ef86eed1528395dbfb031b075e -->
|
|
4
50
|
## [0.9.8] - 2026-09-04
|
|
5
51
|
|
package/INSTALL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[简体中文](INSTALL.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.9.
|
|
5
|
+
<!-- release-skill:release-version: 0.9.10 -->
|
|
6
6
|
## Prerequisites
|
|
7
7
|
|
|
8
8
|
- Node.js 22.0.0 or later
|
|
@@ -35,12 +35,11 @@ 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 (
|
|
38
|
+
## Install as a plugin (Skill Family Hub — recommended)
|
|
39
39
|
|
|
40
40
|
Claude Code, CodeBuddy, WorkBuddy, and Codex install release-skill from the
|
|
41
|
-
|
|
42
|
-
The
|
|
43
|
-
(`.claude-plugin/marketplace.json`), so no external marketplace is required.
|
|
41
|
+
central [Skill Family Hub](https://github.com/ifoohoo/skill-family-hub).
|
|
42
|
+
The release-skill repository carries plugin manifests but no marketplace index.
|
|
44
43
|
release-skill currently invokes no scriptable install API for Kimi Code — see the
|
|
45
44
|
[Kimi Code section](#install-as-a-kimi-code-plugin). Add the marketplace once,
|
|
46
45
|
then install the plugin:
|
|
@@ -48,21 +47,21 @@ then install the plugin:
|
|
|
48
47
|
> **Prerequisite: GitHub access.** The `owner/repo` shorthand makes Claude Code
|
|
49
48
|
> clone via `git@github.com:...` (SSH), which requires a GitHub public key
|
|
50
49
|
> configured on this machine. If you do not use SSH, either pass the full HTTPS
|
|
51
|
-
> URL — `/plugin marketplace add https://github.com/ifoohoo/
|
|
50
|
+
> URL — `/plugin marketplace add https://github.com/ifoohoo/skill-family-hub` — or
|
|
52
51
|
> set `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`.
|
|
53
52
|
|
|
54
53
|
**Claude Code** (interactive session):
|
|
55
54
|
|
|
56
55
|
```
|
|
57
|
-
/plugin marketplace add ifoohoo/
|
|
58
|
-
/plugin install release-skill@
|
|
56
|
+
/plugin marketplace add ifoohoo/skill-family-hub
|
|
57
|
+
/plugin install release-skill@skill-family-hub
|
|
59
58
|
```
|
|
60
59
|
|
|
61
60
|
**CodeBuddy / WorkBuddy:**
|
|
62
61
|
|
|
63
62
|
```bash
|
|
64
|
-
codebuddy plugin marketplace add ifoohoo/
|
|
65
|
-
codebuddy plugin install release-skill@
|
|
63
|
+
codebuddy plugin marketplace add ifoohoo/skill-family-hub
|
|
64
|
+
codebuddy plugin install release-skill@skill-family-hub
|
|
66
65
|
```
|
|
67
66
|
|
|
68
67
|
WorkBuddy desktop installs only through a registered marketplace: after the
|
|
@@ -71,7 +70,7 @@ WorkBuddy desktop installs only through a registered marketplace: after the
|
|
|
71
70
|
**OpenAI Codex:**
|
|
72
71
|
|
|
73
72
|
```bash
|
|
74
|
-
codex plugin marketplace add ifoohoo/
|
|
73
|
+
codex plugin marketplace add ifoohoo/skill-family-hub
|
|
75
74
|
```
|
|
76
75
|
|
|
77
76
|
Then install `release-skill` from the interactive `/plugins` browser.
|
|
@@ -84,15 +83,12 @@ task and does not verify its completion.
|
|
|
84
83
|
|
|
85
84
|
### Alternative: direct repository install (advanced)
|
|
86
85
|
|
|
87
|
-
The
|
|
88
|
-
|
|
89
|
-
scenarios:
|
|
86
|
+
The Hub marketplace above is the supported primary path. Direct installation
|
|
87
|
+
remains available only where the host supports a repository URL:
|
|
90
88
|
|
|
91
|
-
- Claude Code: `/plugin marketplace add ifoohoo/release-skill`, then
|
|
92
|
-
`/plugin install release-skill@release-skill`.
|
|
93
89
|
- Kimi Code: the version-pinned `/plugins install <release-tag URL>` documented
|
|
94
90
|
in the [Kimi Code section](#install-as-a-kimi-code-plugin) below.
|
|
95
|
-
- CodeBuddy: single-session use
|
|
91
|
+
- CodeBuddy: single-session use from a source checkout via
|
|
96
92
|
`--plugin-dir <path>/adapters/workbuddy` (see the
|
|
97
93
|
[CodeBuddy/WorkBuddy section](#install-as-a-codebuddyworkbuddy-plugin)).
|
|
98
94
|
|
|
@@ -114,7 +110,7 @@ tag pinned to the exact version (never the bare repository URL, which installs
|
|
|
114
110
|
the latest release or default branch), confirm the trust prompt, then reload:
|
|
115
111
|
|
|
116
112
|
```
|
|
117
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.
|
|
113
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.10
|
|
118
114
|
/plugins reload
|
|
119
115
|
```
|
|
120
116
|
|
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.9.
|
|
5
|
+
<!-- release-skill:release-version: 0.9.10 -->
|
|
6
6
|
## 前置条件
|
|
7
7
|
|
|
8
8
|
- Node.js 22.0.0 或更高版本
|
|
@@ -32,32 +32,31 @@ release-skill help
|
|
|
32
32
|
|
|
33
33
|
输出中应包含版本号和可用命令列表。
|
|
34
34
|
|
|
35
|
-
## 安装为插件(
|
|
35
|
+
## 安装为插件(Skill Family Hub——推荐)
|
|
36
36
|
|
|
37
|
-
Claude Code、CodeBuddy、WorkBuddy 和 Codex
|
|
38
|
-
[
|
|
39
|
-
安装 release-skill
|
|
40
|
-
(`.claude-plugin/marketplace.json`),无需外部市场。release-skill 当前没有接入
|
|
37
|
+
Claude Code、CodeBuddy、WorkBuddy 和 Codex 从统一的
|
|
38
|
+
[Skill Family Hub](https://github.com/ifoohoo/skill-family-hub)
|
|
39
|
+
安装 release-skill。release-skill 仓库只携带插件清单,不再携带市场索引。当前没有接入
|
|
41
40
|
Kimi Code 的可脚本化安装接口,见 [Kimi Code 小节](#安装为-kimi-code-插件)。先添加一次市场,再安装
|
|
42
41
|
插件:
|
|
43
42
|
|
|
44
43
|
> **前置条件:GitHub 访问。** `owner/repo` 简写会让 Claude Code 通过
|
|
45
44
|
> `git@github.com:...`(SSH)克隆,需要本机配置 GitHub 公钥。如不使用 SSH,
|
|
46
|
-
> 可传完整 HTTPS 地址——`/plugin marketplace add https://github.com/ifoohoo/
|
|
45
|
+
> 可传完整 HTTPS 地址——`/plugin marketplace add https://github.com/ifoohoo/skill-family-hub`——
|
|
47
46
|
> 或设置 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`。
|
|
48
47
|
|
|
49
48
|
**Claude Code**(交互会话中):
|
|
50
49
|
|
|
51
50
|
```
|
|
52
|
-
/plugin marketplace add ifoohoo/
|
|
53
|
-
/plugin install release-skill@
|
|
51
|
+
/plugin marketplace add ifoohoo/skill-family-hub
|
|
52
|
+
/plugin install release-skill@skill-family-hub
|
|
54
53
|
```
|
|
55
54
|
|
|
56
55
|
**CodeBuddy / WorkBuddy:**
|
|
57
56
|
|
|
58
57
|
```bash
|
|
59
|
-
codebuddy plugin marketplace add ifoohoo/
|
|
60
|
-
codebuddy plugin install release-skill@
|
|
58
|
+
codebuddy plugin marketplace add ifoohoo/skill-family-hub
|
|
59
|
+
codebuddy plugin install release-skill@skill-family-hub
|
|
61
60
|
```
|
|
62
61
|
|
|
63
62
|
WorkBuddy 桌面端只能通过已注册的市场安装:执行上面的 `marketplace add`
|
|
@@ -66,7 +65,7 @@ WorkBuddy 桌面端只能通过已注册的市场安装:执行上面的 `marke
|
|
|
66
65
|
**OpenAI Codex:**
|
|
67
66
|
|
|
68
67
|
```bash
|
|
69
|
-
codex plugin marketplace add ifoohoo/
|
|
68
|
+
codex plugin marketplace add ifoohoo/skill-family-hub
|
|
70
69
|
```
|
|
71
70
|
|
|
72
71
|
然后在交互式 `/plugins` 浏览器中安装 `release-skill`。
|
|
@@ -78,10 +77,8 @@ release-skill 当前对 Kimi Code 采用钉死版本的交互式 TUI 路径。
|
|
|
78
77
|
|
|
79
78
|
### 备选:直接从仓库安装(进阶)
|
|
80
79
|
|
|
81
|
-
|
|
80
|
+
上面的 Hub 市场是受支持的主路径。只有宿主支持仓库 URL 时,才能直接安装:
|
|
82
81
|
|
|
83
|
-
- Claude Code:`/plugin marketplace add ifoohoo/release-skill`,然后
|
|
84
|
-
`/plugin install release-skill@release-skill`。
|
|
85
82
|
- Kimi Code:下文 [Kimi Code 小节](#安装为-kimi-code-插件)中版本钉死的
|
|
86
83
|
`/plugins install <release-tag URL>`。
|
|
87
84
|
- CodeBuddy:源码检出后通过 `--plugin-dir <path>/adapters/workbuddy`
|
|
@@ -104,7 +101,7 @@ release-skill 当前只采用并验证 Kimi Code 的交互式 TUI 路径,**无
|
|
|
104
101
|
(切勿使用裸仓库地址,它会安装最新 release 或默认分支),确认信任提示后重新加载:
|
|
105
102
|
|
|
106
103
|
```
|
|
107
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.
|
|
104
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.10
|
|
108
105
|
/plugins reload
|
|
109
106
|
```
|
|
110
107
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[简体中文](README.zh-CN.md) · Installation: [English](INSTALL.md) / [简体中文](INSTALL.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.9.
|
|
5
|
+
<!-- release-skill:release-version: 0.9.10 -->
|
|
6
6
|
Release preparation for Claude Code, CodeBuddy, WorkBuddy, Codex, and Kimi Code, with human-edited files kept intact.
|
|
7
7
|
|
|
8
8
|
release-skill helps a maintainer answer three questions: what will be released,
|
|
@@ -14,33 +14,27 @@ Setup surfaces only the deterministic `compactSummary` review view; the full
|
|
|
14
14
|
report stays in a temporary session directory.
|
|
15
15
|
|
|
16
16
|
<!-- release-skill:managed:start id=latest-release -->
|
|
17
|
-
**0.9.
|
|
17
|
+
**0.9.10** (2026-09-04)
|
|
18
18
|
|
|
19
|
-
0.9.
|
|
19
|
+
0.9.10 is a local source candidate that removes release-skill's private marketplace and makes Skill Family Hub the single marketplace source. It consumes the three Foundation packages at the exact 0.16.0 release. The release workspace publishes a verified entry and the Hub's seven-file public snapshot through GitHub's Git Data API after verification. This note is not evidence of publication, real-host acceptance, consumer installation verification, or independent acceptance.
|
|
20
20
|
|
|
21
21
|
**Security**
|
|
22
22
|
|
|
23
|
-
-
|
|
24
|
-
- Kimi Code plugin trust proceeds only when the dialog contains the frozen repository and tag and the selected row is confirmed as `Trust and install`. A `Trust this folder?` dialog, an unknown screen, timeout, EOF, or mismatched identity fails closed before unintended confirmation.
|
|
25
|
-
- Kimi Code reports success only after the TUI displays its install-finished result and the installed registry, package version, tag, revision, managed root, and payload all match the frozen plan.
|
|
26
|
-
- Any host plan remains a qualified frozen-plan path and requires a VERIFIED-run from the same release lineage before host acceptance; this source candidate does not provide that acceptance.
|
|
23
|
+
- Hub branch updates are compare-and-swap writes against the observed main commit. Concurrent movement fails closed; a public-Hub failure after the private commit is retained as a recoverable partial result and is never rolled back or force-pushed.
|
|
27
24
|
|
|
28
25
|
**Changed**
|
|
29
26
|
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
- The Kimi Code 0.40.1 TUI path normalizes ANSI/OSC control sequences and soft-wrapped URLs, uses a wide pseudo-terminal, submits commands through bracketed paste plus CSI Enter, and waits for explicit prompt, trust, install-result, reload, and exit states.
|
|
34
|
-
- A single phase-aware postPublish predicate now requires distribute only for targets, explicit distribute hooks, or hooks whose omitted phase defaults to distribute. A plan containing only postVerify hooks moves from PUBLISHED directly to verify and runs postVerify independently after VERIFIED.
|
|
35
|
-
- The current 0.9.8 candidate includes the narrow R-05 Hook cache v2 consumer path, keeps the CodeBuddy plugin entry explicit as `marketplace: release-skill`, and keeps `--root <project-root>` in release-finish local-finish examples. Foundation dependencies are pinned to the three released 0.16.0 packages.
|
|
27
|
+
- Removed the bundled Claude, Codex, and adapter marketplace indexes from the release-skill package. Plugin manifests remain available for installation through Skill Family Hub.
|
|
28
|
+
- Installation guidance now uses `ifoohoo/skill-family-hub` and `release-skill@skill-family-hub` for Claude Code, Codex, CodeBuddy, and WorkBuddy.
|
|
29
|
+
- After a release reaches VERIFIED, the project-private postVerify hook applies the proposal with the Hub's own receiver, runs the Hub release gate once, and publishes the private and public Hub commits through GitHub's Git Data API with non-forced branch updates.
|
|
36
30
|
|
|
37
31
|
**Upgrade Notes**
|
|
38
32
|
|
|
39
|
-
|
|
33
|
+
Remove any `release-skill` standalone marketplace registration from each host, add or update `ifoohoo/skill-family-hub`, and install `release-skill@skill-family-hub`.
|
|
40
34
|
<!-- release-skill:managed:end id=latest-release -->
|
|
41
35
|
|
|
42
36
|
<!-- release-skill:capability:external-write-boundary -->
|
|
43
|
-
> **Current boundary:** v0.9.
|
|
37
|
+
> **Current boundary:** v0.9.10 is the current source candidate. This README
|
|
44
38
|
> records intended scope and verification boundaries; it is not evidence of
|
|
45
39
|
> publication, consumer-installation verification, or independent acceptance.
|
|
46
40
|
> Release availability must be established from the corresponding release records
|
|
@@ -64,7 +58,7 @@ Prepare and approve a new 0.9.8 production plan for these changes. After verify
|
|
|
64
58
|
> publish global preflight.
|
|
65
59
|
|
|
66
60
|
<!-- release-skill:capability:safe-first-command -->
|
|
67
|
-
> **Production path verified since the v0.1.1 milestone; v0.9.
|
|
61
|
+
> **Production path verified since the v0.1.1 milestone; v0.9.10 is the current
|
|
68
62
|
> source candidate. Its README does not establish publication,
|
|
69
63
|
> consumer-installation verification, or independent acceptance.**
|
|
70
64
|
> The npm-installed CLI is the supported user entry. Source checkout
|
|
@@ -93,20 +87,22 @@ checkpoints remain intact and use matching-version recovery. Evidence v1 stays
|
|
|
93
87
|
read-only; v2 uses a closed top level with phase extensions in `details`.
|
|
94
88
|
Summaries and recovery suggestions are diagnostic, never publication authority.
|
|
95
89
|
|
|
96
|
-
The current 0.9.
|
|
90
|
+
The current 0.9.10 candidate includes the narrow R-05 Hook cache v2 consumer
|
|
97
91
|
path, the public `postverify` path, and the stable isolated install-tree record
|
|
98
|
-
path (A2/A3). It
|
|
92
|
+
path (A2/A3). It also removes the repository's own marketplace indexes and
|
|
93
|
+
uses Skill Family Hub as the single marketplace source. It still
|
|
99
94
|
excludes R-02 safe full-tree inventory, R-10 historical-release verification
|
|
100
95
|
implementation, real Kimi/WorkBuddy public-marketplace installation and
|
|
101
96
|
invocation gates, and an Audit public offline release-record verifier.
|
|
102
97
|
Foundation dependencies are pinned to the three released 0.16.0 packages.
|
|
103
|
-
For
|
|
98
|
+
For Kimi/CodeBuddy plans that still use the bundled-family distribution form,
|
|
99
|
+
verify calls the released
|
|
104
100
|
`runPluginVerification` entry with the complete frozen payload and records a
|
|
105
101
|
minimal `install-only` observation receipt. Kimi maps to `kimi-code`; CodeBuddy
|
|
106
102
|
maps to the compatible `workbuddy` host. `observed` and `payloadMatches` are
|
|
107
103
|
mechanism facts, not remote publication or release-domain VERIFIED facts.
|
|
108
|
-
|
|
109
|
-
|
|
104
|
+
Real marketplace installation and host invocation remain post-release host
|
|
105
|
+
operations.
|
|
110
106
|
This scope summary is not a remote publication record or a consumer upgrade instruction.
|
|
111
107
|
|
|
112
108
|
<!-- release-skill:maturity:distribute-v1 -->
|
|
@@ -239,17 +235,17 @@ npx release-skill help
|
|
|
239
235
|
|
|
240
236
|
**Plugin (Claude Code / CodeBuddy / WorkBuddy / Codex):**
|
|
241
237
|
|
|
242
|
-
Claude Code, CodeBuddy, WorkBuddy, and Codex install from the
|
|
243
|
-
marketplace
|
|
238
|
+
Claude Code, CodeBuddy, WorkBuddy, and Codex install from the central
|
|
239
|
+
Skill Family Hub marketplace:
|
|
244
240
|
|
|
245
241
|
```
|
|
246
|
-
/plugin marketplace add ifoohoo/
|
|
247
|
-
/plugin install release-skill@
|
|
242
|
+
/plugin marketplace add ifoohoo/skill-family-hub
|
|
243
|
+
/plugin install release-skill@skill-family-hub
|
|
248
244
|
```
|
|
249
245
|
|
|
250
246
|
> **Prerequisite: GitHub access.** The `owner/repo` shorthand makes Claude Code
|
|
251
247
|
> clone via SSH. If you do not use SSH, pass the full HTTPS URL —
|
|
252
|
-
> `/plugin marketplace add https://github.com/ifoohoo/
|
|
248
|
+
> `/plugin marketplace add https://github.com/ifoohoo/skill-family-hub` — or set
|
|
253
249
|
> `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`.
|
|
254
250
|
|
|
255
251
|
**Kimi Code:** release-skill currently invokes no scriptable install API for
|
package/README.zh-CN.md
CHANGED
|
@@ -2,39 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · 安装指南:[中文](INSTALL.zh-CN.md) / [English](INSTALL.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.9.
|
|
5
|
+
<!-- release-skill:release-version: 0.9.10 -->
|
|
6
6
|
面向 Claude Code、CodeBuddy、WorkBuddy、Codex 和 Kimi Code 的发布准备工具,完整保留人工维护的文件内容。
|
|
7
7
|
|
|
8
8
|
release-skill 帮助维护者回答三个问题:准备发布什么、还有哪些检查未通过、最终发布的内容是什么。它不重新生成、也不回写项目源文件。`prepare` 把每个配置的公开文件复制到隔离快照并验证字节——先冻结并供人工审阅,再从同一份冻结产物发布。`setup` 只显示确定性的 `compactSummary` 审阅视图,完整报告保留在临时会话目录中。
|
|
9
9
|
|
|
10
10
|
<!-- release-skill:managed:start id=latest-release -->
|
|
11
|
-
**0.9.
|
|
11
|
+
**0.9.10** (2026-09-04)
|
|
12
12
|
|
|
13
|
-
0.9.
|
|
13
|
+
0.9.10 是删除 release-skill 自有市场、统一以 Skill Family Hub 为市场来源的本地源码候选,三项 Foundation 依赖均精确使用已发布的 0.16.0。发布验证完成后,发布工作区会通过 GitHub Git Data API 更新 Hub 条目及七文件公开快照。本说明不代表已经发布、完成真实宿主验收、完成消费者安装验证或通过独立验收。
|
|
14
14
|
|
|
15
15
|
**安全**
|
|
16
16
|
|
|
17
|
-
-
|
|
18
|
-
- Kimi Code 只有在插件信任对话框包含冻结 repo 和 tag,且选中项确认为 `Trust and install` 时才继续。出现 `Trust this folder?`、未知界面、超时、EOF 或身份不一致时,在意外确认前失败关闭。
|
|
19
|
-
- Kimi Code 只有在 TUI 显示安装完成,而且安装登记、package version、tag、revision、受管根和载荷都与冻结计划一致后才报告成功。
|
|
20
|
-
- 任何宿主计划都必须是合格冻结计划,并要求同一发布谱系的 VERIFIED run 才能开始宿主验收;本源码候选不提供该验收。
|
|
17
|
+
- Hub 分支更新以已观察的 main commit 做比较后写入,禁止强推;并发漂移会失败关闭。若私有 Hub 已提交而公开 Hub 失败,则保留可恢复的 PARTIAL 状态,不回滚、不覆盖。
|
|
21
18
|
|
|
22
19
|
**变更**
|
|
23
20
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- Kimi Code 0.40.1 TUI 路径会归一 ANSI/OSC 控制序列和 URL 软换行,使用宽伪终端,以 bracketed paste 加 CSI Enter 提交命令,并显式等待提示符、插件信任、安装结果、重载与退出状态。
|
|
28
|
-
- 统一的 phase-aware postPublish 判定只在存在 target、显式 distribute hook,或 hook 缺省 phase 按既有规则属于 distribute 时要求 distribute。只有 postVerify hook 的计划从 PUBLISHED 直接进入 verify,并在 VERIFIED 后独立执行 postVerify。
|
|
29
|
-
- 当前 0.9.8 候选包含窄范围的 R-05 Hook cache v2 消费路径,保留 CodeBuddy 插件显式的 `marketplace: release-skill` 条目,并在 release-finish 本机收尾示例中保留 `--root <project-root>`。Foundation 三包精确依赖已发布的 0.16.0。
|
|
21
|
+
- 从 release-skill 包中删除 Claude、Codex 及适配器内的自有市场索引;插件清单继续保留,由 Skill Family Hub 提供安装入口。
|
|
22
|
+
- Claude Code、Codex、CodeBuddy 和 WorkBuddy 的安装说明统一改为 `ifoohoo/skill-family-hub` 与 `release-skill@skill-family-hub`。
|
|
23
|
+
- 发布达到 VERIFIED 后,项目私有的 postVerify hook 会调用 Hub 自身接收器应用提案,只运行一次 Hub 发布门禁,再通过 GitHub Git Data API 发布 Hub 私有真源和公开快照。
|
|
30
24
|
|
|
31
25
|
**升级说明**
|
|
32
26
|
|
|
33
|
-
|
|
27
|
+
在各宿主删除独立的 `release-skill` 市场登记,添加或更新 `ifoohoo/skill-family-hub`,再安装 `release-skill@skill-family-hub`。
|
|
34
28
|
<!-- release-skill:managed:end id=latest-release -->
|
|
35
29
|
|
|
36
30
|
<!-- release-skill:capability:external-write-boundary -->
|
|
37
|
-
> **当前边界:** v0.9.
|
|
31
|
+
> **当前边界:** v0.9.10 只是当前源码候选。本 README 记录预期范围与验证边界,
|
|
38
32
|
> 不代表已经发布、完成消费者安装验证或通过独立验收。
|
|
39
33
|
> 版本可用性以对应发布记录及发布后验证结果为准。
|
|
40
34
|
> v0.4.1 是更早的已发布里程碑(v0.2.2 曾处于已发布状态,后因平台验证收敛修复而更新)。
|
|
@@ -50,7 +44,7 @@ release-skill 帮助维护者回答三个问题:准备发布什么、还有哪
|
|
|
50
44
|
> 远端唯一性检查在 `publish` 全局预检执行。
|
|
51
45
|
|
|
52
46
|
<!-- release-skill:capability:safe-first-command -->
|
|
53
|
-
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.9.
|
|
47
|
+
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.9.10 是当前源码候选,本 README 不证明该候选已经发布、完成消费者安装验证或通过独立验收。**
|
|
54
48
|
> npm 安装的 CLI 是受支持的用户入口;源码 checkout 保留为开发/贡献者路径。
|
|
55
49
|
>
|
|
56
50
|
> **第一条命令:**
|
|
@@ -68,9 +62,18 @@ marketplace 委托目标工作区发布的边界不变。
|
|
|
68
62
|
|
|
69
63
|
旧 production 计划缺少 `sourceAuthority` 时,在外部写入前拒绝。未发生外部写入的计划必须重新 prepare 并批准新摘要,不能补写旧计划或迁移批准。已有 `PARTIAL` 保留检查点,走匹配版本的恢复路径。evidence v1 只读;v2 顶层封闭,阶段扩展放在 `details`。摘要和恢复建议只作诊断,不构成发布权威。
|
|
70
64
|
|
|
71
|
-
当前 0.9.
|
|
65
|
+
当前 0.9.10 候选包含窄范围的 R-05 Hook cache v2 消费路径、公开 `postverify`
|
|
66
|
+
路径和稳定隔离安装树记录路径(A2/A3),并删除仓库自有市场索引,统一以
|
|
67
|
+
Skill Family Hub 为市场来源。当前仍不包含 R-02 安全整树盘点、R-10 历史发布验证
|
|
68
|
+
的产品实现、真实 Kimi/WorkBuddy 公开市场安装与调用门禁或 Audit 公开离线发布记录
|
|
69
|
+
验证器。本范围说明不构成远端发布记录或消费者升级指引。
|
|
72
70
|
|
|
73
|
-
Foundation 三包精确依赖已发布的 0.16.0
|
|
71
|
+
Foundation 三包精确依赖已发布的 0.16.0。仍采用 bundled-family 分发形态的
|
|
72
|
+
Kimi/CodeBuddy 计划会在 verify 阶段调用正式 `runPluginVerification`,把完整冻结载荷
|
|
73
|
+
交给 Foundation,并记录最小的 `install-only` 观察收据。Kimi 映射为 `kimi-code`,
|
|
74
|
+
CodeBuddy 映射为兼容的 `workbuddy`。`observed` 与 `payloadMatches` 只表示机制观察结果,
|
|
75
|
+
不代表远端已发布或 release-skill 已完成领域验证。真实市场安装和宿主调用仍是发布后
|
|
76
|
+
宿主操作。
|
|
74
77
|
|
|
75
78
|
<!-- release-skill:maturity:distribute-v1 -->
|
|
76
79
|
<!-- release-skill:capability:distribute -->
|
|
@@ -187,17 +190,16 @@ npx release-skill help
|
|
|
187
190
|
|
|
188
191
|
**插件(Claude Code / CodeBuddy / WorkBuddy / Codex):**
|
|
189
192
|
|
|
190
|
-
Claude Code、CodeBuddy、WorkBuddy 和 Codex
|
|
191
|
-
`ifoohoo/release-skill` 安装:
|
|
193
|
+
Claude Code、CodeBuddy、WorkBuddy 和 Codex 从统一的 Skill Family Hub 市场安装:
|
|
192
194
|
|
|
193
195
|
```
|
|
194
|
-
/plugin marketplace add ifoohoo/
|
|
195
|
-
/plugin install release-skill@
|
|
196
|
+
/plugin marketplace add ifoohoo/skill-family-hub
|
|
197
|
+
/plugin install release-skill@skill-family-hub
|
|
196
198
|
```
|
|
197
199
|
|
|
198
200
|
> **前置条件:GitHub 访问。** `owner/repo` 简写会让 Claude Code 通过 SSH 克隆。
|
|
199
201
|
> 如不使用 SSH,可传完整 HTTPS 地址——
|
|
200
|
-
> `/plugin marketplace add https://github.com/ifoohoo/
|
|
202
|
+
> `/plugin marketplace add https://github.com/ifoohoo/skill-family-hub`——
|
|
201
203
|
> 或设置 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`。
|
|
202
204
|
|
|
203
205
|
**Kimi Code:** release-skill 当前无可脚本化安装接口接入,只采用钉死版本的交互式
|
|
@@ -9,9 +9,9 @@ const __bundlePkgRoot = __bundleResolve(__bundleDirname(__bundleFileURLToPath(im
|
|
|
9
9
|
// Provide a real require() for CJS packages bundled into ESM (e.g. yaml, ajv).
|
|
10
10
|
const __bundleRealRequire = __bundleCreateRequire(import.meta.url);
|
|
11
11
|
// Package identity injected at build time — closure-independent --version probe.
|
|
12
|
-
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.
|
|
12
|
+
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.10"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b5ea47eca1374c2a893a3a56dd274973673ff0fe4e424564f55e6646b7763b3a";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -42134,8 +42134,7 @@ var init_registry2 = __esm({
|
|
|
42134
42134
|
name: "claude",
|
|
42135
42135
|
pluginDirName: ".claude-plugin",
|
|
42136
42136
|
templateFileName: "plugin.json",
|
|
42137
|
-
|
|
42138
|
-
hasMarketplace: true
|
|
42137
|
+
hasMarketplace: false
|
|
42139
42138
|
}),
|
|
42140
42139
|
strategy: Object.freeze({
|
|
42141
42140
|
parseListOutput: claudeParseListOutput,
|
|
@@ -132339,7 +132338,7 @@ proc cleanScreen {value} {
|
|
|
132339
132338
|
proc compactScreen {value} {
|
|
132340
132339
|
set value [cleanScreen $value]
|
|
132341
132340
|
regsub -all {[[:space:]]+} $value {} value
|
|
132342
|
-
return
|
|
132341
|
+
return $value
|
|
132343
132342
|
}
|
|
132344
132343
|
|
|
132345
132344
|
proc extractPluginTrustDialog {value} {
|
|
@@ -132354,6 +132353,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
132354
132353
|
return [string range $cleaned $dialogStart end]
|
|
132355
132354
|
}
|
|
132356
132355
|
|
|
132356
|
+
proc extractPluginTrustIdentity {value} {
|
|
132357
|
+
set cleaned [cleanScreen $value]
|
|
132358
|
+
set lowered [string tolower $cleaned]
|
|
132359
|
+
set identityStart -1
|
|
132360
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
132361
|
+
set markerStart [string last $marker $lowered]
|
|
132362
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
132363
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
132364
|
+
}
|
|
132365
|
+
}
|
|
132366
|
+
if {$identityStart < 0} { return "" }
|
|
132367
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
132368
|
+
if {$identityEnd < 0} { return "" }
|
|
132369
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
132370
|
+
}
|
|
132371
|
+
|
|
132357
132372
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
132358
132373
|
global expect_out
|
|
132359
132374
|
set buffer ""
|
|
@@ -132425,12 +132440,14 @@ if {$dialog eq ""} {
|
|
|
132425
132440
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
132426
132441
|
exit 113
|
|
132427
132442
|
}
|
|
132428
|
-
set
|
|
132429
|
-
|
|
132430
|
-
|
|
132431
|
-
|
|
132432
|
-
}
|
|
132433
|
-
|
|
132443
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
132444
|
+
set compactIdentity [compactScreen $identity]
|
|
132445
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
132446
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
132447
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
132448
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
132449
|
+
exit 111
|
|
132450
|
+
}
|
|
132434
132451
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
132435
132452
|
exit 112
|
|
132436
132453
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.10",
|
|
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.9.
|
|
22
|
+
"Prepare a release plan for version 0.9.10.",
|
|
23
23
|
"Help me understand the release workflow."
|
|
24
24
|
]
|
|
25
25
|
}
|
|
@@ -9,9 +9,9 @@ const __bundlePkgRoot = __bundleResolve(__bundleDirname(__bundleFileURLToPath(im
|
|
|
9
9
|
// Provide a real require() for CJS packages bundled into ESM (e.g. yaml, ajv).
|
|
10
10
|
const __bundleRealRequire = __bundleCreateRequire(import.meta.url);
|
|
11
11
|
// Package identity injected at build time — closure-independent --version probe.
|
|
12
|
-
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.
|
|
12
|
+
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.10"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b5ea47eca1374c2a893a3a56dd274973673ff0fe4e424564f55e6646b7763b3a";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -42134,8 +42134,7 @@ var init_registry2 = __esm({
|
|
|
42134
42134
|
name: "claude",
|
|
42135
42135
|
pluginDirName: ".claude-plugin",
|
|
42136
42136
|
templateFileName: "plugin.json",
|
|
42137
|
-
|
|
42138
|
-
hasMarketplace: true
|
|
42137
|
+
hasMarketplace: false
|
|
42139
42138
|
}),
|
|
42140
42139
|
strategy: Object.freeze({
|
|
42141
42140
|
parseListOutput: claudeParseListOutput,
|
|
@@ -132339,7 +132338,7 @@ proc cleanScreen {value} {
|
|
|
132339
132338
|
proc compactScreen {value} {
|
|
132340
132339
|
set value [cleanScreen $value]
|
|
132341
132340
|
regsub -all {[[:space:]]+} $value {} value
|
|
132342
|
-
return
|
|
132341
|
+
return $value
|
|
132343
132342
|
}
|
|
132344
132343
|
|
|
132345
132344
|
proc extractPluginTrustDialog {value} {
|
|
@@ -132354,6 +132353,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
132354
132353
|
return [string range $cleaned $dialogStart end]
|
|
132355
132354
|
}
|
|
132356
132355
|
|
|
132356
|
+
proc extractPluginTrustIdentity {value} {
|
|
132357
|
+
set cleaned [cleanScreen $value]
|
|
132358
|
+
set lowered [string tolower $cleaned]
|
|
132359
|
+
set identityStart -1
|
|
132360
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
132361
|
+
set markerStart [string last $marker $lowered]
|
|
132362
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
132363
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
132364
|
+
}
|
|
132365
|
+
}
|
|
132366
|
+
if {$identityStart < 0} { return "" }
|
|
132367
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
132368
|
+
if {$identityEnd < 0} { return "" }
|
|
132369
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
132370
|
+
}
|
|
132371
|
+
|
|
132357
132372
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
132358
132373
|
global expect_out
|
|
132359
132374
|
set buffer ""
|
|
@@ -132425,12 +132440,14 @@ if {$dialog eq ""} {
|
|
|
132425
132440
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
132426
132441
|
exit 113
|
|
132427
132442
|
}
|
|
132428
|
-
set
|
|
132429
|
-
|
|
132430
|
-
|
|
132431
|
-
|
|
132432
|
-
}
|
|
132433
|
-
|
|
132443
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
132444
|
+
set compactIdentity [compactScreen $identity]
|
|
132445
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
132446
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
132447
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
132448
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
132449
|
+
exit 111
|
|
132450
|
+
}
|
|
132434
132451
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
132435
132452
|
exit 112
|
|
132436
132453
|
}
|
|
@@ -9,9 +9,9 @@ const __bundlePkgRoot = __bundleResolve(__bundleDirname(__bundleFileURLToPath(im
|
|
|
9
9
|
// Provide a real require() for CJS packages bundled into ESM (e.g. yaml, ajv).
|
|
10
10
|
const __bundleRealRequire = __bundleCreateRequire(import.meta.url);
|
|
11
11
|
// Package identity injected at build time — closure-independent --version probe.
|
|
12
|
-
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.
|
|
12
|
+
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.10"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b5ea47eca1374c2a893a3a56dd274973673ff0fe4e424564f55e6646b7763b3a";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -42134,8 +42134,7 @@ var init_registry2 = __esm({
|
|
|
42134
42134
|
name: "claude",
|
|
42135
42135
|
pluginDirName: ".claude-plugin",
|
|
42136
42136
|
templateFileName: "plugin.json",
|
|
42137
|
-
|
|
42138
|
-
hasMarketplace: true
|
|
42137
|
+
hasMarketplace: false
|
|
42139
42138
|
}),
|
|
42140
42139
|
strategy: Object.freeze({
|
|
42141
42140
|
parseListOutput: claudeParseListOutput,
|
|
@@ -132339,7 +132338,7 @@ proc cleanScreen {value} {
|
|
|
132339
132338
|
proc compactScreen {value} {
|
|
132340
132339
|
set value [cleanScreen $value]
|
|
132341
132340
|
regsub -all {[[:space:]]+} $value {} value
|
|
132342
|
-
return
|
|
132341
|
+
return $value
|
|
132343
132342
|
}
|
|
132344
132343
|
|
|
132345
132344
|
proc extractPluginTrustDialog {value} {
|
|
@@ -132354,6 +132353,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
132354
132353
|
return [string range $cleaned $dialogStart end]
|
|
132355
132354
|
}
|
|
132356
132355
|
|
|
132356
|
+
proc extractPluginTrustIdentity {value} {
|
|
132357
|
+
set cleaned [cleanScreen $value]
|
|
132358
|
+
set lowered [string tolower $cleaned]
|
|
132359
|
+
set identityStart -1
|
|
132360
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
132361
|
+
set markerStart [string last $marker $lowered]
|
|
132362
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
132363
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
132364
|
+
}
|
|
132365
|
+
}
|
|
132366
|
+
if {$identityStart < 0} { return "" }
|
|
132367
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
132368
|
+
if {$identityEnd < 0} { return "" }
|
|
132369
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
132370
|
+
}
|
|
132371
|
+
|
|
132357
132372
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
132358
132373
|
global expect_out
|
|
132359
132374
|
set buffer ""
|
|
@@ -132425,12 +132440,14 @@ if {$dialog eq ""} {
|
|
|
132425
132440
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
132426
132441
|
exit 113
|
|
132427
132442
|
}
|
|
132428
|
-
set
|
|
132429
|
-
|
|
132430
|
-
|
|
132431
|
-
|
|
132432
|
-
}
|
|
132433
|
-
|
|
132443
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
132444
|
+
set compactIdentity [compactScreen $identity]
|
|
132445
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
132446
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
132447
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
132448
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
132449
|
+
exit 111
|
|
132450
|
+
}
|
|
132434
132451
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
132435
132452
|
exit 112
|
|
132436
132453
|
}
|
|
@@ -9,9 +9,9 @@ const __bundlePkgRoot = __bundleResolve(__bundleDirname(__bundleFileURLToPath(im
|
|
|
9
9
|
// Provide a real require() for CJS packages bundled into ESM (e.g. yaml, ajv).
|
|
10
10
|
const __bundleRealRequire = __bundleCreateRequire(import.meta.url);
|
|
11
11
|
// Package identity injected at build time — closure-independent --version probe.
|
|
12
|
-
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.
|
|
12
|
+
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.10"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b5ea47eca1374c2a893a3a56dd274973673ff0fe4e424564f55e6646b7763b3a";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -42134,8 +42134,7 @@ var init_registry2 = __esm({
|
|
|
42134
42134
|
name: "claude",
|
|
42135
42135
|
pluginDirName: ".claude-plugin",
|
|
42136
42136
|
templateFileName: "plugin.json",
|
|
42137
|
-
|
|
42138
|
-
hasMarketplace: true
|
|
42137
|
+
hasMarketplace: false
|
|
42139
42138
|
}),
|
|
42140
42139
|
strategy: Object.freeze({
|
|
42141
42140
|
parseListOutput: claudeParseListOutput,
|
|
@@ -132339,7 +132338,7 @@ proc cleanScreen {value} {
|
|
|
132339
132338
|
proc compactScreen {value} {
|
|
132340
132339
|
set value [cleanScreen $value]
|
|
132341
132340
|
regsub -all {[[:space:]]+} $value {} value
|
|
132342
|
-
return
|
|
132341
|
+
return $value
|
|
132343
132342
|
}
|
|
132344
132343
|
|
|
132345
132344
|
proc extractPluginTrustDialog {value} {
|
|
@@ -132354,6 +132353,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
132354
132353
|
return [string range $cleaned $dialogStart end]
|
|
132355
132354
|
}
|
|
132356
132355
|
|
|
132356
|
+
proc extractPluginTrustIdentity {value} {
|
|
132357
|
+
set cleaned [cleanScreen $value]
|
|
132358
|
+
set lowered [string tolower $cleaned]
|
|
132359
|
+
set identityStart -1
|
|
132360
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
132361
|
+
set markerStart [string last $marker $lowered]
|
|
132362
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
132363
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
132364
|
+
}
|
|
132365
|
+
}
|
|
132366
|
+
if {$identityStart < 0} { return "" }
|
|
132367
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
132368
|
+
if {$identityEnd < 0} { return "" }
|
|
132369
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
132370
|
+
}
|
|
132371
|
+
|
|
132357
132372
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
132358
132373
|
global expect_out
|
|
132359
132374
|
set buffer ""
|
|
@@ -132425,12 +132440,14 @@ if {$dialog eq ""} {
|
|
|
132425
132440
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
132426
132441
|
exit 113
|
|
132427
132442
|
}
|
|
132428
|
-
set
|
|
132429
|
-
|
|
132430
|
-
|
|
132431
|
-
|
|
132432
|
-
}
|
|
132433
|
-
|
|
132443
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
132444
|
+
set compactIdentity [compactScreen $identity]
|
|
132445
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
132446
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
132447
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
132448
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
132449
|
+
exit 111
|
|
132450
|
+
}
|
|
132434
132451
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
132435
132452
|
exit 112
|
|
132436
132453
|
}
|
|
@@ -9,9 +9,9 @@ const __bundlePkgRoot = __bundleResolve(__bundleDirname(__bundleFileURLToPath(im
|
|
|
9
9
|
// Provide a real require() for CJS packages bundled into ESM (e.g. yaml, ajv).
|
|
10
10
|
const __bundleRealRequire = __bundleCreateRequire(import.meta.url);
|
|
11
11
|
// Package identity injected at build time — closure-independent --version probe.
|
|
12
|
-
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.
|
|
12
|
+
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.10"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b5ea47eca1374c2a893a3a56dd274973673ff0fe4e424564f55e6646b7763b3a";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -42134,8 +42134,7 @@ var init_registry2 = __esm({
|
|
|
42134
42134
|
name: "claude",
|
|
42135
42135
|
pluginDirName: ".claude-plugin",
|
|
42136
42136
|
templateFileName: "plugin.json",
|
|
42137
|
-
|
|
42138
|
-
hasMarketplace: true
|
|
42137
|
+
hasMarketplace: false
|
|
42139
42138
|
}),
|
|
42140
42139
|
strategy: Object.freeze({
|
|
42141
42140
|
parseListOutput: claudeParseListOutput,
|
|
@@ -132339,7 +132338,7 @@ proc cleanScreen {value} {
|
|
|
132339
132338
|
proc compactScreen {value} {
|
|
132340
132339
|
set value [cleanScreen $value]
|
|
132341
132340
|
regsub -all {[[:space:]]+} $value {} value
|
|
132342
|
-
return
|
|
132341
|
+
return $value
|
|
132343
132342
|
}
|
|
132344
132343
|
|
|
132345
132344
|
proc extractPluginTrustDialog {value} {
|
|
@@ -132354,6 +132353,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
132354
132353
|
return [string range $cleaned $dialogStart end]
|
|
132355
132354
|
}
|
|
132356
132355
|
|
|
132356
|
+
proc extractPluginTrustIdentity {value} {
|
|
132357
|
+
set cleaned [cleanScreen $value]
|
|
132358
|
+
set lowered [string tolower $cleaned]
|
|
132359
|
+
set identityStart -1
|
|
132360
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
132361
|
+
set markerStart [string last $marker $lowered]
|
|
132362
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
132363
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
132364
|
+
}
|
|
132365
|
+
}
|
|
132366
|
+
if {$identityStart < 0} { return "" }
|
|
132367
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
132368
|
+
if {$identityEnd < 0} { return "" }
|
|
132369
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
132370
|
+
}
|
|
132371
|
+
|
|
132357
132372
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
132358
132373
|
global expect_out
|
|
132359
132374
|
set buffer ""
|
|
@@ -132425,12 +132440,14 @@ if {$dialog eq ""} {
|
|
|
132425
132440
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
132426
132441
|
exit 113
|
|
132427
132442
|
}
|
|
132428
|
-
set
|
|
132429
|
-
|
|
132430
|
-
|
|
132431
|
-
|
|
132432
|
-
}
|
|
132433
|
-
|
|
132443
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
132444
|
+
set compactIdentity [compactScreen $identity]
|
|
132445
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
132446
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
132447
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
132448
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
132449
|
+
exit 111
|
|
132450
|
+
}
|
|
132434
132451
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
132435
132452
|
exit 112
|
|
132436
132453
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.10",
|
|
4
4
|
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "广州市风荷科技有限公司"
|
|
@@ -23,7 +23,6 @@
|
|
|
23
23
|
"release-skill": "./bin/release-skill.mjs"
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
|
-
".agents/",
|
|
27
26
|
".claude-plugin/",
|
|
28
27
|
".codebuddy-plugin/",
|
|
29
28
|
".codex-plugin/",
|
package/platform-manifest.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"platformId": "release-skill",
|
|
4
4
|
"platformName": "release-skill Plugin Platform",
|
|
5
|
-
"version": "0.9.
|
|
5
|
+
"version": "0.9.10",
|
|
6
6
|
"logicalRoot": "skills-src/",
|
|
7
7
|
"logicalRootDigest": "aec96745b30289ed48d576fbfc98ecd3aacb834f83394be76d4734d7d0fc0ad4",
|
|
8
8
|
"projectionDigest": "e5117d89c9f965e15a1464cc84f542cb1e75a685f842183d0cfc7a105ace5ceb",
|
|
9
|
-
"projectionId": "release-skill:platform:0.9.
|
|
9
|
+
"projectionId": "release-skill:platform:0.9.10",
|
|
10
10
|
"manifestRequired": true,
|
|
11
11
|
"projectionSources": {
|
|
12
12
|
"skills-src-root": {
|
|
@@ -1010,7 +1010,7 @@ proc cleanScreen {value} {
|
|
|
1010
1010
|
proc compactScreen {value} {
|
|
1011
1011
|
set value [cleanScreen $value]
|
|
1012
1012
|
regsub -all {[[:space:]]+} $value {} value
|
|
1013
|
-
return
|
|
1013
|
+
return $value
|
|
1014
1014
|
}
|
|
1015
1015
|
|
|
1016
1016
|
proc extractPluginTrustDialog {value} {
|
|
@@ -1025,6 +1025,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
1025
1025
|
return [string range $cleaned $dialogStart end]
|
|
1026
1026
|
}
|
|
1027
1027
|
|
|
1028
|
+
proc extractPluginTrustIdentity {value} {
|
|
1029
|
+
set cleaned [cleanScreen $value]
|
|
1030
|
+
set lowered [string tolower $cleaned]
|
|
1031
|
+
set identityStart -1
|
|
1032
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
1033
|
+
set markerStart [string last $marker $lowered]
|
|
1034
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
1035
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
if {$identityStart < 0} { return "" }
|
|
1039
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
1040
|
+
if {$identityEnd < 0} { return "" }
|
|
1041
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1028
1044
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
1029
1045
|
global expect_out
|
|
1030
1046
|
set buffer ""
|
|
@@ -1096,12 +1112,14 @@ if {$dialog eq ""} {
|
|
|
1096
1112
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
1097
1113
|
exit 113
|
|
1098
1114
|
}
|
|
1099
|
-
set
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
}
|
|
1104
|
-
|
|
1115
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
1116
|
+
set compactIdentity [compactScreen $identity]
|
|
1117
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
1118
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
1119
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
1120
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
1121
|
+
exit 111
|
|
1122
|
+
}
|
|
1105
1123
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
1106
1124
|
exit 112
|
|
1107
1125
|
}
|
|
@@ -187,8 +187,7 @@ const CLAUDE = Object.freeze({
|
|
|
187
187
|
name: 'claude',
|
|
188
188
|
pluginDirName: '.claude-plugin',
|
|
189
189
|
templateFileName: 'plugin.json',
|
|
190
|
-
|
|
191
|
-
hasMarketplace: true,
|
|
190
|
+
hasMarketplace: false,
|
|
192
191
|
}),
|
|
193
192
|
strategy: Object.freeze({
|
|
194
193
|
parseListOutput: claudeParseListOutput,
|
|
@@ -199,8 +199,8 @@ export function computeBuildAdaptersDigest(sourceBytes) {
|
|
|
199
199
|
|
|
200
200
|
// Platform definitions, derived from the platform registry (the single source
|
|
201
201
|
// of platform knowledge). The build shape mirrors the legacy inline table
|
|
202
|
-
//
|
|
203
|
-
//
|
|
202
|
+
// marketplaceFileName is present only when a platform adapter is itself a
|
|
203
|
+
// marketplace. Plugin payload adapters do not create private marketplaces.
|
|
204
204
|
//
|
|
205
205
|
// The build adapter NAME defaults to the platform id, but a platform may keep a
|
|
206
206
|
// historical directory name distinct from its pipeline id via
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "release-skill",
|
|
3
|
-
"interface": {
|
|
4
|
-
"displayName": "Release Skill",
|
|
5
|
-
"shortDescription": "Safe preparation and frozen GitHub/npm production publishing",
|
|
6
|
-
"category": "DevOps"
|
|
7
|
-
},
|
|
8
|
-
"plugins": [
|
|
9
|
-
{
|
|
10
|
-
"name": "release-skill",
|
|
11
|
-
"source": {
|
|
12
|
-
"source": "local",
|
|
13
|
-
"path": "./"
|
|
14
|
-
},
|
|
15
|
-
"policy": {
|
|
16
|
-
"installation": "AVAILABLE",
|
|
17
|
-
"authentication": "ON_INSTALL"
|
|
18
|
-
},
|
|
19
|
-
"category": "DevOps",
|
|
20
|
-
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"name": "foundation-adoption-review",
|
|
24
|
-
"source": {
|
|
25
|
-
"source": "url",
|
|
26
|
-
"url": "https://github.com/ifoohoo/foundation-adoption-review.git",
|
|
27
|
-
"ref": "refs/tags/foundation-adoption-review-v0.1.0",
|
|
28
|
-
"sha": "7e8032735f7589dbbeecc1012c8f6a1f32390ada"
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
]
|
|
32
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "release-skill",
|
|
3
|
-
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
4
|
-
"owner": {
|
|
5
|
-
"name": "ifoohoo",
|
|
6
|
-
"url": "https://github.com/ifoohoo"
|
|
7
|
-
},
|
|
8
|
-
"plugins": [
|
|
9
|
-
{
|
|
10
|
-
"name": "release-skill",
|
|
11
|
-
"source": "./",
|
|
12
|
-
"version": "0.9.8",
|
|
13
|
-
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
14
|
-
"author": {
|
|
15
|
-
"name": "广州市风荷科技有限公司"
|
|
16
|
-
},
|
|
17
|
-
"license": "Apache-2.0"
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
"name": "foundation-adoption-review",
|
|
21
|
-
"source": {
|
|
22
|
-
"source": "github",
|
|
23
|
-
"repo": "ifoohoo/foundation-adoption-review",
|
|
24
|
-
"ref": "foundation-adoption-review-v0.1.0",
|
|
25
|
-
"sha": "7e8032735f7589dbbeecc1012c8f6a1f32390ada"
|
|
26
|
-
},
|
|
27
|
-
"version": "0.1.0"
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "release-skill",
|
|
3
|
-
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
4
|
-
"owner": {
|
|
5
|
-
"name": "ifoohoo",
|
|
6
|
-
"url": "https://github.com/ifoohoo"
|
|
7
|
-
},
|
|
8
|
-
"plugins": [
|
|
9
|
-
{
|
|
10
|
-
"name": "release-skill",
|
|
11
|
-
"source": "./",
|
|
12
|
-
"version": "0.9.8",
|
|
13
|
-
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
14
|
-
"author": {
|
|
15
|
-
"name": "广州市风荷科技有限公司"
|
|
16
|
-
},
|
|
17
|
-
"license": "Apache-2.0"
|
|
18
|
-
}
|
|
19
|
-
]
|
|
20
|
-
}
|