release-skill 0.9.31 → 0.9.32
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/.cursor-plugin/plugin.json +1 -1
- package/.kimi-plugin/plugin.json +1 -1
- package/.qoder-plugin/plugin.json +1 -1
- package/CHANGELOG.md +26 -0
- package/INSTALL.md +2 -2
- package/INSTALL.zh-CN.md +2 -2
- package/README.md +9 -12
- package/README.zh-CN.md +9 -12
- package/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/adapters/claude/bin/release-skill.bundle.mjs +40 -4
- package/adapters/claude/skills/release-help/SKILL.md +3 -3
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +40 -4
- package/adapters/codex/skills/release-help/SKILL.md +3 -3
- package/adapters/cursor/.cursor-plugin/plugin.json +1 -1
- package/adapters/cursor/bin/release-skill.bundle.mjs +40 -4
- package/adapters/cursor/skills/release-help/SKILL.md +3 -3
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +40 -4
- package/adapters/kimi/skills/release-help/SKILL.md +3 -3
- package/adapters/qoder/.qoder-plugin/plugin.json +1 -1
- package/adapters/qoder/bin/release-skill.bundle.mjs +40 -4
- package/adapters/qoder/skills/release-help/SKILL.md +3 -3
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +40 -4
- package/adapters/workbuddy/skills/release-help/SKILL.md +3 -3
- package/bin/release-skill.bundle.mjs +40 -4
- package/package.json +1 -1
- package/platform-manifest.json +4 -4
- package/skills/release-help/SKILL.md +3 -3
- package/skills-src/release-help/SKILL.md +3 -3
- package/src/commands/post-release-local.mjs +38 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.32",
|
|
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.32.",
|
|
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,31 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.9.32 locale=en baseline=sha256:760080f3cd309b1d75cc9f41fe29c9ac5dc80f228f9946db9e6d0cf303954f42 -->
|
|
4
|
+
## [0.9.32] - 2026-10-17
|
|
5
|
+
|
|
6
|
+
0.9.32 fixes the adapter failure caused by waiting for a complete title after selection movement in the Kimi 2.2.0 removal menu while retaining exact Foundation 0.25.0 dependencies. This note is not evidence of publication, real-host acceptance, consumer installation verification, or independent acceptance.
|
|
7
|
+
|
|
8
|
+
### Security
|
|
9
|
+
|
|
10
|
+
- Maintains strict confirmation boundaries: exact plugin ID and selection must be verified before removal. No changes to frozen install URL/ref/sha or post-install payload validation. Hub gate failure prevents GitHub Git Data API write. Writes bind the observed branch head through `compare-and-swap`. Partial Hub publication is never rolled back or force-pushed; completed steps are not overwritten. Existing `RELEASE_SKILL_HUB_RELEASE_EVIDENCE` environment variable continues to require an existing regular file at an absolute path (not a symlink), validated via `npm run release:check -- --release-evidence <file>`. Independent checkpoint approval, no replay of historical frozen plans, and `ALREADY_CURRENT` gate remain enforced.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Skill Family Hub remains the unified market. GitHub Git Data API integration continues with `compare-and-swap` write semantics; no automatic rollback or overwrite of completed steps.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Handle Kimi 2.2.0 menu redraws that omit the plugin title and final newline after selection movement. The adapter must re-observe the selection after movement and confirm unique selection of `Remove plugin` before proceeding.
|
|
19
|
+
- Initial exact plugin ID is verified before frame reading. Direction key is sent only after reading the frame, followed by a full incremental frame to confirm unique selection. Full title redraw still validates exact ID. Unknown, ambiguous, un-moved, incomplete frame, timeout, or EOF all stop the update before installation.
|
|
20
|
+
|
|
21
|
+
### Upgrade Notes
|
|
22
|
+
|
|
23
|
+
This fix applies to real update workflows, not limited to offline testing. Retain Kimi 0.40.1’s actual prompt `Confirm remove plugin "<id>"?`, bracketed paste, and CSI Enter input method. Frozen install URL/ref/sha, post-install name/version, and payload verification rules unchanged. Shared setup for same `unitId/plugin/version` is merged by unit, plugin, and version; different physical `skillFile` paths in Claude/Codex no longer count as separate setups, as per 0.9.31. Each host’s installation, loading, and configuration must still be verified separately, with feedback bound to `host/unit/path/plan/config/root`. Failure does not alter `VERIFIED`/`DISTRIBUTED` state. `Foundation 0.25.0` exact dependencies remain in use. The old release-skill standalone marketplace is deprecated; use `ifoohoo/skill-family-hub` and `release-skill@skill-family-hub`. Provider upgrades do not republish domain plugins or expand host authorization.
|
|
24
|
+
|
|
25
|
+
Real Kimi 2.2.0 was observed through exact identity checks, selection movement, and selection verification, then canceled with Esc and exited without removal, installation, or update. All 47 focused tests passed, and independent code review found no issues. Full real-consumer update and loading acceptance remains pending.
|
|
26
|
+
<!-- release-skill:changelog:end version=0.9.32 locale=en -->
|
|
27
|
+
|
|
28
|
+
|
|
3
29
|
<!-- release-skill:changelog:start version=0.9.31 locale=en baseline=sha256:d40f153bfc277e24178ac5d32d20a0b6d824cf611d0fa65709cea01463b037ea -->
|
|
4
30
|
## [0.9.31] - 2026-10-17
|
|
5
31
|
|
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.32 -->
|
|
6
6
|
## Prerequisites
|
|
7
7
|
|
|
8
8
|
- Node.js `>=22.22.2 <23` (22.22.2 or newer, and below 23)
|
|
@@ -125,7 +125,7 @@ tag pinned to the exact version (never the bare repository URL, which installs
|
|
|
125
125
|
the latest release or default branch), confirm the trust prompt, then reload:
|
|
126
126
|
|
|
127
127
|
```
|
|
128
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.
|
|
128
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.32
|
|
129
129
|
/plugins reload
|
|
130
130
|
```
|
|
131
131
|
|
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.32 -->
|
|
6
6
|
## 前置条件
|
|
7
7
|
|
|
8
8
|
- Node.js `>=22.22.2 <23`(22.22.2 及以上,且低于 23)
|
|
@@ -113,7 +113,7 @@ release-skill 当前只采用并验证 Kimi Code 的交互式 TUI 路径,**无
|
|
|
113
113
|
(切勿使用裸仓库地址,它会安装最新 release 或默认分支),确认信任提示后重新加载:
|
|
114
114
|
|
|
115
115
|
```
|
|
116
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.
|
|
116
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.32
|
|
117
117
|
/plugins reload
|
|
118
118
|
```
|
|
119
119
|
|
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.32 -->
|
|
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,9 +14,9 @@ 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.32** (2026-10-17)
|
|
18
18
|
|
|
19
|
-
0.9.
|
|
19
|
+
0.9.32 fixes the adapter failure caused by waiting for a complete title after selection movement in the Kimi 2.2.0 removal menu while retaining exact Foundation 0.25.0 dependencies. This note is not evidence of publication, real-host acceptance, consumer installation verification, or independent acceptance.
|
|
20
20
|
|
|
21
21
|
**Security**
|
|
22
22
|
|
|
@@ -28,21 +28,18 @@ report stays in a temporary session directory.
|
|
|
28
28
|
|
|
29
29
|
**Fixed**
|
|
30
30
|
|
|
31
|
-
- Kimi 2.2.0
|
|
32
|
-
-
|
|
33
|
-
- The adapter retains the existing `Confirm remove plugin "<id>"?` wording, bracketed paste, and CSI Enter input method from Kimi 0.40.1. Frozen install URL/ref/sha, post-install name/version, and payload verification remain unchanged. Offline Expect/fake validation only; no real Kimi consumer installation or update performed.
|
|
34
|
-
- Shared environment setup for the same `unitId/plugin/version` is now merged. Different physical `skillFile` paths under Claude/Codex no longer count as separate setup owners. Only one precise setup feedback from a loaded host is required to satisfy shared environment checks.
|
|
35
|
-
- Host-specific installation, loading, and configuration still require separate verification. Feedback continues to bind `host/unit/path/plan/config/root`. True multiple plugin ownership still requires disambiguation. Failure in any host (Kimi or others) results in `FAILED` status; `VERIFIED`/`DISTRIBUTED` release state is unchanged.
|
|
31
|
+
- Handle Kimi 2.2.0 menu redraws that omit the plugin title and final newline after selection movement. The adapter must re-observe the selection after movement and confirm unique selection of `Remove plugin` before proceeding.
|
|
32
|
+
- Initial exact plugin ID is verified before frame reading. Direction key is sent only after reading the frame, followed by a full incremental frame to confirm unique selection. Full title redraw still validates exact ID. Unknown, ambiguous, un-moved, incomplete frame, timeout, or EOF all stop the update before installation.
|
|
36
33
|
|
|
37
34
|
**Upgrade Notes**
|
|
38
35
|
|
|
39
|
-
|
|
36
|
+
This fix applies to real update workflows, not limited to offline testing. Retain Kimi 0.40.1’s actual prompt `Confirm remove plugin "<id>"?`, bracketed paste, and CSI Enter input method. Frozen install URL/ref/sha, post-install name/version, and payload verification rules unchanged. Shared setup for same `unitId/plugin/version` is merged by unit, plugin, and version; different physical `skillFile` paths in Claude/Codex no longer count as separate setups, as per 0.9.31. Each host’s installation, loading, and configuration must still be verified separately, with feedback bound to `host/unit/path/plan/config/root`. Failure does not alter `VERIFIED`/`DISTRIBUTED` state. `Foundation 0.25.0` exact dependencies remain in use. The old release-skill standalone marketplace is deprecated; use `ifoohoo/skill-family-hub` and `release-skill@skill-family-hub`. Provider upgrades do not republish domain plugins or expand host authorization.
|
|
40
37
|
|
|
41
|
-
|
|
38
|
+
Real Kimi 2.2.0 was observed through exact identity checks, selection movement, and selection verification, then canceled with Esc and exited without removal, installation, or update. All 47 focused tests passed, and independent code review found no issues. Full real-consumer update and loading acceptance remains pending.
|
|
42
39
|
<!-- release-skill:managed:end id=latest-release -->
|
|
43
40
|
|
|
44
41
|
<!-- release-skill:capability:external-write-boundary -->
|
|
45
|
-
> **Current boundary:** v0.9.
|
|
42
|
+
> **Current boundary:** v0.9.32: this README records capabilities and verification boundaries;
|
|
46
43
|
> it is not evidence of
|
|
47
44
|
> publication, consumer-installation verification, or independent acceptance.
|
|
48
45
|
> Release availability must be established from the corresponding release records
|
|
@@ -66,7 +63,7 @@ The old release-skill standalone marketplace is deprecated; use `ifoohoo/skill-f
|
|
|
66
63
|
> publish global preflight.
|
|
67
64
|
|
|
68
65
|
<!-- release-skill:capability:safe-first-command -->
|
|
69
|
-
> **Production path verified since the v0.1.1 milestone; for v0.9.
|
|
66
|
+
> **Production path verified since the v0.1.1 milestone; for v0.9.32,
|
|
70
67
|
> publication, consumer-installation verification, and independent acceptance
|
|
71
68
|
> require version-specific release records and verification results.**
|
|
72
69
|
> The npm-installed CLI is the supported user entry. Source checkout
|
package/README.zh-CN.md
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
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.32 -->
|
|
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.32** (2026-10-17)
|
|
12
12
|
|
|
13
|
-
0.9.
|
|
13
|
+
0.9.32 修复 Kimi 2.2.0 移除菜单移动后,适配器因等待完整标题而失败的问题,继续采用精确的 Foundation 0.25.0 依赖。本说明不代表已经发布、完成真实宿主验收、完成消费者安装验证或通过独立验收。
|
|
14
14
|
|
|
15
15
|
**安全**
|
|
16
16
|
|
|
@@ -22,21 +22,18 @@ release-skill 帮助维护者回答三个问题:准备发布什么、还有哪
|
|
|
22
22
|
|
|
23
23
|
**修复**
|
|
24
24
|
|
|
25
|
-
- Kimi 2.2.0
|
|
26
|
-
-
|
|
27
|
-
- Kimi 2.2.0:保留 Kimi 0.40.1 已支持的实际措辞 `Confirm remove plugin "<id>"?`、括号粘贴及 CSI Enter 输入方式。冻结的安装URL/ref/sha、安装后name/version和载荷核对未改变。本轮采用离线 Expect/fake 验证,不构成真实 Kimi 消费者验收。
|
|
28
|
-
- 同一 `unitId/plugin/version` 的共享环境setup按 unitId/plugin/version 归并;Claude/Codex不同物理skillFile路径不再视为多个setup归属。仅需一个已加载宿主的精确setup反馈即可承接共享环境检查。
|
|
29
|
-
- 各宿主安装、加载及专属配置仍分别核实。反馈继续绑定 host/unit/path/plan/config/root;真正多插件归属仍须消歧,Kimi失败或其他宿主失败仍使收尾 FAILED;不改 VERIFIED/DISTRIBUTED 发布状态。
|
|
25
|
+
- 适配 Kimi 2.2.0 在方向键移动后只输出菜单增量重绘、不重发插件标题且最后一行没有换行的行为。适配器在移动后必须重新观察选中项,确认唯一选中 `Remove plugin` 后才允许提交操作。
|
|
26
|
+
- 读取帧前先核实初始精确插件 ID,读完该帧后才发送方向键,再读取完整增量帧并核对唯一选中项,完整标题重绘时仍核对精确 ID。未知、歧义、未移动、帧未完成、timeout、EOF 均导致失败关闭。
|
|
30
27
|
|
|
31
28
|
**升级说明**
|
|
32
29
|
|
|
33
|
-
|
|
30
|
+
本修复用于真实更新流程,非仅限离线测试。保留 Kimi 0.40.1 实际措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version 与载荷核对规则不变。同一 `unitId/plugin/version` 的共享 setup 按单元、插件、版本归并,Claude/Codex 不同物理 `skillFile` 路径不再视为多个 setup 归属,沿用 0.9.31 已有逻辑。各宿主安装、加载及专属配置仍需分别核实,反馈绑定 `host/unit/path/plan/config/root`。失败不改 `VERIFIED`/`DISTRIBUTED` 状态。`Foundation 0.25.0` 精确依赖继续采用。旧版独立的 `release-skill` 市场已弃用,使用 `ifoohoo/skill-family-hub` 与 `release-skill@skill-family-hub`。获取新提供方后可继续原冻结计划,无需重发原领域插件,也不扩大宿主授权。
|
|
34
31
|
|
|
35
|
-
|
|
32
|
+
真实 Kimi 2.2.0 已完成确认前的精确身份、移动及选中项观察,随后按 Esc 取消并退出,未执行移除、安装或更新。47 项聚焦测试通过,独立代码审阅无发现;真实消费者的完整更新与加载验收仍待执行。
|
|
36
33
|
<!-- release-skill:managed:end id=latest-release -->
|
|
37
34
|
|
|
38
35
|
<!-- release-skill:capability:external-write-boundary -->
|
|
39
|
-
> **当前边界:** v0.9.
|
|
36
|
+
> **当前边界:** v0.9.32 的能力范围与验证边界见本 README,
|
|
40
37
|
> 不代表已经发布、完成消费者安装验证或通过独立验收。
|
|
41
38
|
> 版本可用性以对应发布记录及发布后验证结果为准。
|
|
42
39
|
> v0.4.1 是更早的已发布里程碑(v0.2.2 曾处于已发布状态,后因平台验证收敛修复而更新)。
|
|
@@ -52,7 +49,7 @@ release-skill 帮助维护者回答三个问题:准备发布什么、还有哪
|
|
|
52
49
|
> 远端唯一性检查在 `publish` 全局预检执行。
|
|
53
50
|
|
|
54
51
|
<!-- release-skill:capability:safe-first-command -->
|
|
55
|
-
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.9.
|
|
52
|
+
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.9.32 的发布、消费者安装验证和独立验收状态须由该版本的发布记录及验证结果确认。**
|
|
56
53
|
> npm 安装的 CLI 是受支持的用户入口;源码 checkout 保留为开发/贡献者路径。
|
|
57
54
|
>
|
|
58
55
|
> **第一条命令:**
|
|
@@ -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.32"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b023c0808411ba0bf3fea258860422e38fe89a744a6c33676eb07e08c2a43b0b";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -137336,9 +137336,45 @@ proc readKimi22RemoveDialog {prefix state timeoutCode unknownCode eofCode} {
|
|
|
137336
137336
|
}
|
|
137337
137337
|
set cleaned [cleanScreen $dialogBuffer]
|
|
137338
137338
|
}
|
|
137339
|
+
# Consume the initial synchronized frame before sending a selection key.
|
|
137340
|
+
# Otherwise its remaining rows can be mistaken for the selection repaint.
|
|
137341
|
+
if {[string last "\\033\\[?2026h" $dialogBuffer] > [string last "\\033\\[?2026l" $dialogBuffer]} {
|
|
137342
|
+
expect {
|
|
137343
|
+
-exact "\\033\\[?2026l" { append dialogBuffer $expect_out(buffer) }
|
|
137344
|
+
timeout { failTimeout $state $timeoutCode $unknownCode }
|
|
137345
|
+
eof { failEof $state $eofCode }
|
|
137346
|
+
}
|
|
137347
|
+
set cleaned [cleanScreen $dialogBuffer]
|
|
137348
|
+
}
|
|
137339
137349
|
return $cleaned
|
|
137340
137350
|
}
|
|
137341
137351
|
|
|
137352
|
+
proc readKimi22RemoveSelection {} {
|
|
137353
|
+
global expect_out removePlugin
|
|
137354
|
+
expect {
|
|
137355
|
+
-nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
|
|
137356
|
+
-nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
|
|
137357
|
+
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirm-selection 125 127 126]
|
|
137358
|
+
if {[kimi22RemoveIdentity $dialog] ne $removePlugin} {
|
|
137359
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137360
|
+
exit 127
|
|
137361
|
+
}
|
|
137362
|
+
return $dialog
|
|
137363
|
+
}
|
|
137364
|
+
-exact "\\033\\[?2026l" {
|
|
137365
|
+
# Kimi 2.2 redraws only the changed menu rows, with no title or final newline.
|
|
137366
|
+
# The initial dialog already bound the plugin; require one complete new frame.
|
|
137367
|
+
if {[string first "\\033\\[?2026h" $expect_out(buffer)] < 0} {
|
|
137368
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137369
|
+
exit 127
|
|
137370
|
+
}
|
|
137371
|
+
return [cleanScreen $expect_out(buffer)]
|
|
137372
|
+
}
|
|
137373
|
+
timeout { failTimeout remove-confirm-selection 125 127 }
|
|
137374
|
+
eof { failEof remove-confirm-selection 126 }
|
|
137375
|
+
}
|
|
137376
|
+
}
|
|
137377
|
+
|
|
137342
137378
|
proc confirmKimi22Remove {} {
|
|
137343
137379
|
global expect_out promptPattern removePlugin
|
|
137344
137380
|
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirmation 125 127 126]
|
|
@@ -137354,9 +137390,9 @@ proc confirmKimi22Remove {} {
|
|
|
137354
137390
|
send -- "\\033\\[A"
|
|
137355
137391
|
}
|
|
137356
137392
|
if {$action ne "selected-remove"} {
|
|
137357
|
-
set confirmedDialog [
|
|
137393
|
+
set confirmedDialog [readKimi22RemoveSelection]
|
|
137358
137394
|
set confirmedIdentity [kimi22RemoveIdentity $confirmedDialog]
|
|
137359
|
-
if {$confirmedIdentity
|
|
137395
|
+
if {$confirmedIdentity ne "" && $confirmedIdentity ne $removePlugin} {
|
|
137360
137396
|
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137361
137397
|
exit 127
|
|
137362
137398
|
}
|
|
@@ -29,11 +29,11 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
29
29
|
|
|
30
30
|
治理诊断只运行 release-skill 自己的只读检查程序,不运行目标 Skill、业务脚本、构建、hook 或发布动作,也不把 `prepare`、`verify`、`release-finish` 当作静态治理入口。用户要求实际接入或发布时,把已有授权带到对应原业务入口;各入口继续执行原有确认、副作用和状态机合同。
|
|
31
31
|
|
|
32
|
-
## 0.9.
|
|
32
|
+
## 0.9.32 能力与证据边界
|
|
33
33
|
|
|
34
|
-
0.9.
|
|
34
|
+
0.9.32 修复了 Kimi 2.2.0 移除菜单移动后,适配器因等待完整标题而失败的问题。真实终端只重绘变动的菜单行,不重发插件标题,末行也没有换行。适配器在移动后必须先重新观察选中项,确认唯一选中 `Remove plugin` 后才允许提交操作。读取帧前先核实初始精确插件 ID,读完该帧后才发送方向键,再读取完整增量帧并核对唯一选中项,完整标题重绘时仍核对精确 ID。未知、歧义、未移动、帧未完成、timeout、EOF 均导致失败关闭,不继续安装。 移除确认页仍采用 `Remove <displayName> (<id>)?`,包含 Cancel 和 Remove plugin 选项;已选中 `Remove plugin` 时无需方向键。显示名含 Confirm 或 Sure,或标题分块到达,仍核对精确身份,不触发旧宽泛正则路径。
|
|
35
35
|
|
|
36
|
-
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version
|
|
36
|
+
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version 与载荷核对规则未变。 真实 Kimi 2.2.0 已完成确认前的精确身份、移动及选中项观察,随后按 Esc 取消并退出,未执行移除、安装或更新。47 项聚焦测试通过,独立代码审阅无发现;真实消费者的完整更新与加载验收仍待执行。修复面向真实更新流程,提供方升级不扩大宿主授权,也无需重发原领域插件。
|
|
37
37
|
|
|
38
38
|
同一 `unitId/plugin/version` 的共享环境 setup 按单元、插件、版本归并,Claude/Codex 不同物理 `skillFile` 路径不再视为多个 setup 归属。仅需一个已加载宿主的精确 setup 反馈即可满足共享环境检查要求。各宿主的安装、加载及专属配置仍需分别核实,反馈继续绑定 `host/unit/path/plan/config/root`;真正多插件归属仍需消歧,Kimi 失败或其他宿主失败均导致收尾状态为 FAILED,不改变 `VERIFIED`/`DISTRIBUTED` 发布状态。
|
|
39
39
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.32",
|
|
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.32.",
|
|
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.32"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b023c0808411ba0bf3fea258860422e38fe89a744a6c33676eb07e08c2a43b0b";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -137336,9 +137336,45 @@ proc readKimi22RemoveDialog {prefix state timeoutCode unknownCode eofCode} {
|
|
|
137336
137336
|
}
|
|
137337
137337
|
set cleaned [cleanScreen $dialogBuffer]
|
|
137338
137338
|
}
|
|
137339
|
+
# Consume the initial synchronized frame before sending a selection key.
|
|
137340
|
+
# Otherwise its remaining rows can be mistaken for the selection repaint.
|
|
137341
|
+
if {[string last "\\033\\[?2026h" $dialogBuffer] > [string last "\\033\\[?2026l" $dialogBuffer]} {
|
|
137342
|
+
expect {
|
|
137343
|
+
-exact "\\033\\[?2026l" { append dialogBuffer $expect_out(buffer) }
|
|
137344
|
+
timeout { failTimeout $state $timeoutCode $unknownCode }
|
|
137345
|
+
eof { failEof $state $eofCode }
|
|
137346
|
+
}
|
|
137347
|
+
set cleaned [cleanScreen $dialogBuffer]
|
|
137348
|
+
}
|
|
137339
137349
|
return $cleaned
|
|
137340
137350
|
}
|
|
137341
137351
|
|
|
137352
|
+
proc readKimi22RemoveSelection {} {
|
|
137353
|
+
global expect_out removePlugin
|
|
137354
|
+
expect {
|
|
137355
|
+
-nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
|
|
137356
|
+
-nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
|
|
137357
|
+
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirm-selection 125 127 126]
|
|
137358
|
+
if {[kimi22RemoveIdentity $dialog] ne $removePlugin} {
|
|
137359
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137360
|
+
exit 127
|
|
137361
|
+
}
|
|
137362
|
+
return $dialog
|
|
137363
|
+
}
|
|
137364
|
+
-exact "\\033\\[?2026l" {
|
|
137365
|
+
# Kimi 2.2 redraws only the changed menu rows, with no title or final newline.
|
|
137366
|
+
# The initial dialog already bound the plugin; require one complete new frame.
|
|
137367
|
+
if {[string first "\\033\\[?2026h" $expect_out(buffer)] < 0} {
|
|
137368
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137369
|
+
exit 127
|
|
137370
|
+
}
|
|
137371
|
+
return [cleanScreen $expect_out(buffer)]
|
|
137372
|
+
}
|
|
137373
|
+
timeout { failTimeout remove-confirm-selection 125 127 }
|
|
137374
|
+
eof { failEof remove-confirm-selection 126 }
|
|
137375
|
+
}
|
|
137376
|
+
}
|
|
137377
|
+
|
|
137342
137378
|
proc confirmKimi22Remove {} {
|
|
137343
137379
|
global expect_out promptPattern removePlugin
|
|
137344
137380
|
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirmation 125 127 126]
|
|
@@ -137354,9 +137390,9 @@ proc confirmKimi22Remove {} {
|
|
|
137354
137390
|
send -- "\\033\\[A"
|
|
137355
137391
|
}
|
|
137356
137392
|
if {$action ne "selected-remove"} {
|
|
137357
|
-
set confirmedDialog [
|
|
137393
|
+
set confirmedDialog [readKimi22RemoveSelection]
|
|
137358
137394
|
set confirmedIdentity [kimi22RemoveIdentity $confirmedDialog]
|
|
137359
|
-
if {$confirmedIdentity
|
|
137395
|
+
if {$confirmedIdentity ne "" && $confirmedIdentity ne $removePlugin} {
|
|
137360
137396
|
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137361
137397
|
exit 127
|
|
137362
137398
|
}
|
|
@@ -37,11 +37,11 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
37
37
|
|
|
38
38
|
治理诊断只运行 release-skill 自己的只读检查程序,不运行目标 Skill、业务脚本、构建、hook 或发布动作,也不把 `prepare`、`verify`、`release-finish` 当作静态治理入口。用户要求实际接入或发布时,把已有授权带到对应原业务入口;各入口继续执行原有确认、副作用和状态机合同。
|
|
39
39
|
|
|
40
|
-
## 0.9.
|
|
40
|
+
## 0.9.32 能力与证据边界
|
|
41
41
|
|
|
42
|
-
0.9.
|
|
42
|
+
0.9.32 修复了 Kimi 2.2.0 移除菜单移动后,适配器因等待完整标题而失败的问题。真实终端只重绘变动的菜单行,不重发插件标题,末行也没有换行。适配器在移动后必须先重新观察选中项,确认唯一选中 `Remove plugin` 后才允许提交操作。读取帧前先核实初始精确插件 ID,读完该帧后才发送方向键,再读取完整增量帧并核对唯一选中项,完整标题重绘时仍核对精确 ID。未知、歧义、未移动、帧未完成、timeout、EOF 均导致失败关闭,不继续安装。 移除确认页仍采用 `Remove <displayName> (<id>)?`,包含 Cancel 和 Remove plugin 选项;已选中 `Remove plugin` 时无需方向键。显示名含 Confirm 或 Sure,或标题分块到达,仍核对精确身份,不触发旧宽泛正则路径。
|
|
43
43
|
|
|
44
|
-
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version
|
|
44
|
+
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version 与载荷核对规则未变。 真实 Kimi 2.2.0 已完成确认前的精确身份、移动及选中项观察,随后按 Esc 取消并退出,未执行移除、安装或更新。47 项聚焦测试通过,独立代码审阅无发现;真实消费者的完整更新与加载验收仍待执行。修复面向真实更新流程,提供方升级不扩大宿主授权,也无需重发原领域插件。
|
|
45
45
|
|
|
46
46
|
同一 `unitId/plugin/version` 的共享环境 setup 按单元、插件、版本归并,Claude/Codex 不同物理 `skillFile` 路径不再视为多个 setup 归属。仅需一个已加载宿主的精确 setup 反馈即可满足共享环境检查要求。各宿主的安装、加载及专属配置仍需分别核实,反馈继续绑定 `host/unit/path/plan/config/root`;真正多插件归属仍需消歧,Kimi 失败或其他宿主失败均导致收尾状态为 FAILED,不改变 `VERIFIED`/`DISTRIBUTED` 发布状态。
|
|
47
47
|
|
|
@@ -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.32"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b023c0808411ba0bf3fea258860422e38fe89a744a6c33676eb07e08c2a43b0b";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -137336,9 +137336,45 @@ proc readKimi22RemoveDialog {prefix state timeoutCode unknownCode eofCode} {
|
|
|
137336
137336
|
}
|
|
137337
137337
|
set cleaned [cleanScreen $dialogBuffer]
|
|
137338
137338
|
}
|
|
137339
|
+
# Consume the initial synchronized frame before sending a selection key.
|
|
137340
|
+
# Otherwise its remaining rows can be mistaken for the selection repaint.
|
|
137341
|
+
if {[string last "\\033\\[?2026h" $dialogBuffer] > [string last "\\033\\[?2026l" $dialogBuffer]} {
|
|
137342
|
+
expect {
|
|
137343
|
+
-exact "\\033\\[?2026l" { append dialogBuffer $expect_out(buffer) }
|
|
137344
|
+
timeout { failTimeout $state $timeoutCode $unknownCode }
|
|
137345
|
+
eof { failEof $state $eofCode }
|
|
137346
|
+
}
|
|
137347
|
+
set cleaned [cleanScreen $dialogBuffer]
|
|
137348
|
+
}
|
|
137339
137349
|
return $cleaned
|
|
137340
137350
|
}
|
|
137341
137351
|
|
|
137352
|
+
proc readKimi22RemoveSelection {} {
|
|
137353
|
+
global expect_out removePlugin
|
|
137354
|
+
expect {
|
|
137355
|
+
-nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
|
|
137356
|
+
-nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
|
|
137357
|
+
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirm-selection 125 127 126]
|
|
137358
|
+
if {[kimi22RemoveIdentity $dialog] ne $removePlugin} {
|
|
137359
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137360
|
+
exit 127
|
|
137361
|
+
}
|
|
137362
|
+
return $dialog
|
|
137363
|
+
}
|
|
137364
|
+
-exact "\\033\\[?2026l" {
|
|
137365
|
+
# Kimi 2.2 redraws only the changed menu rows, with no title or final newline.
|
|
137366
|
+
# The initial dialog already bound the plugin; require one complete new frame.
|
|
137367
|
+
if {[string first "\\033\\[?2026h" $expect_out(buffer)] < 0} {
|
|
137368
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137369
|
+
exit 127
|
|
137370
|
+
}
|
|
137371
|
+
return [cleanScreen $expect_out(buffer)]
|
|
137372
|
+
}
|
|
137373
|
+
timeout { failTimeout remove-confirm-selection 125 127 }
|
|
137374
|
+
eof { failEof remove-confirm-selection 126 }
|
|
137375
|
+
}
|
|
137376
|
+
}
|
|
137377
|
+
|
|
137342
137378
|
proc confirmKimi22Remove {} {
|
|
137343
137379
|
global expect_out promptPattern removePlugin
|
|
137344
137380
|
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirmation 125 127 126]
|
|
@@ -137354,9 +137390,9 @@ proc confirmKimi22Remove {} {
|
|
|
137354
137390
|
send -- "\\033\\[A"
|
|
137355
137391
|
}
|
|
137356
137392
|
if {$action ne "selected-remove"} {
|
|
137357
|
-
set confirmedDialog [
|
|
137393
|
+
set confirmedDialog [readKimi22RemoveSelection]
|
|
137358
137394
|
set confirmedIdentity [kimi22RemoveIdentity $confirmedDialog]
|
|
137359
|
-
if {$confirmedIdentity
|
|
137395
|
+
if {$confirmedIdentity ne "" && $confirmedIdentity ne $removePlugin} {
|
|
137360
137396
|
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137361
137397
|
exit 127
|
|
137362
137398
|
}
|
|
@@ -38,11 +38,11 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
38
38
|
|
|
39
39
|
治理诊断只运行 release-skill 自己的只读检查程序,不运行目标 Skill、业务脚本、构建、hook 或发布动作,也不把 `prepare`、`verify`、`release-finish` 当作静态治理入口。用户要求实际接入或发布时,把已有授权带到对应原业务入口;各入口继续执行原有确认、副作用和状态机合同。
|
|
40
40
|
|
|
41
|
-
## 0.9.
|
|
41
|
+
## 0.9.32 能力与证据边界
|
|
42
42
|
|
|
43
|
-
0.9.
|
|
43
|
+
0.9.32 修复了 Kimi 2.2.0 移除菜单移动后,适配器因等待完整标题而失败的问题。真实终端只重绘变动的菜单行,不重发插件标题,末行也没有换行。适配器在移动后必须先重新观察选中项,确认唯一选中 `Remove plugin` 后才允许提交操作。读取帧前先核实初始精确插件 ID,读完该帧后才发送方向键,再读取完整增量帧并核对唯一选中项,完整标题重绘时仍核对精确 ID。未知、歧义、未移动、帧未完成、timeout、EOF 均导致失败关闭,不继续安装。 移除确认页仍采用 `Remove <displayName> (<id>)?`,包含 Cancel 和 Remove plugin 选项;已选中 `Remove plugin` 时无需方向键。显示名含 Confirm 或 Sure,或标题分块到达,仍核对精确身份,不触发旧宽泛正则路径。
|
|
44
44
|
|
|
45
|
-
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version
|
|
45
|
+
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version 与载荷核对规则未变。 真实 Kimi 2.2.0 已完成确认前的精确身份、移动及选中项观察,随后按 Esc 取消并退出,未执行移除、安装或更新。47 项聚焦测试通过,独立代码审阅无发现;真实消费者的完整更新与加载验收仍待执行。修复面向真实更新流程,提供方升级不扩大宿主授权,也无需重发原领域插件。
|
|
46
46
|
|
|
47
47
|
同一 `unitId/plugin/version` 的共享环境 setup 按单元、插件、版本归并,Claude/Codex 不同物理 `skillFile` 路径不再视为多个 setup 归属。仅需一个已加载宿主的精确 setup 反馈即可满足共享环境检查要求。各宿主的安装、加载及专属配置仍需分别核实,反馈继续绑定 `host/unit/path/plan/config/root`;真正多插件归属仍需消歧,Kimi 失败或其他宿主失败均导致收尾状态为 FAILED,不改变 `VERIFIED`/`DISTRIBUTED` 发布状态。
|
|
48
48
|
|
|
@@ -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.32"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b023c0808411ba0bf3fea258860422e38fe89a744a6c33676eb07e08c2a43b0b";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -137336,9 +137336,45 @@ proc readKimi22RemoveDialog {prefix state timeoutCode unknownCode eofCode} {
|
|
|
137336
137336
|
}
|
|
137337
137337
|
set cleaned [cleanScreen $dialogBuffer]
|
|
137338
137338
|
}
|
|
137339
|
+
# Consume the initial synchronized frame before sending a selection key.
|
|
137340
|
+
# Otherwise its remaining rows can be mistaken for the selection repaint.
|
|
137341
|
+
if {[string last "\\033\\[?2026h" $dialogBuffer] > [string last "\\033\\[?2026l" $dialogBuffer]} {
|
|
137342
|
+
expect {
|
|
137343
|
+
-exact "\\033\\[?2026l" { append dialogBuffer $expect_out(buffer) }
|
|
137344
|
+
timeout { failTimeout $state $timeoutCode $unknownCode }
|
|
137345
|
+
eof { failEof $state $eofCode }
|
|
137346
|
+
}
|
|
137347
|
+
set cleaned [cleanScreen $dialogBuffer]
|
|
137348
|
+
}
|
|
137339
137349
|
return $cleaned
|
|
137340
137350
|
}
|
|
137341
137351
|
|
|
137352
|
+
proc readKimi22RemoveSelection {} {
|
|
137353
|
+
global expect_out removePlugin
|
|
137354
|
+
expect {
|
|
137355
|
+
-nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
|
|
137356
|
+
-nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
|
|
137357
|
+
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirm-selection 125 127 126]
|
|
137358
|
+
if {[kimi22RemoveIdentity $dialog] ne $removePlugin} {
|
|
137359
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137360
|
+
exit 127
|
|
137361
|
+
}
|
|
137362
|
+
return $dialog
|
|
137363
|
+
}
|
|
137364
|
+
-exact "\\033\\[?2026l" {
|
|
137365
|
+
# Kimi 2.2 redraws only the changed menu rows, with no title or final newline.
|
|
137366
|
+
# The initial dialog already bound the plugin; require one complete new frame.
|
|
137367
|
+
if {[string first "\\033\\[?2026h" $expect_out(buffer)] < 0} {
|
|
137368
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137369
|
+
exit 127
|
|
137370
|
+
}
|
|
137371
|
+
return [cleanScreen $expect_out(buffer)]
|
|
137372
|
+
}
|
|
137373
|
+
timeout { failTimeout remove-confirm-selection 125 127 }
|
|
137374
|
+
eof { failEof remove-confirm-selection 126 }
|
|
137375
|
+
}
|
|
137376
|
+
}
|
|
137377
|
+
|
|
137342
137378
|
proc confirmKimi22Remove {} {
|
|
137343
137379
|
global expect_out promptPattern removePlugin
|
|
137344
137380
|
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirmation 125 127 126]
|
|
@@ -137354,9 +137390,9 @@ proc confirmKimi22Remove {} {
|
|
|
137354
137390
|
send -- "\\033\\[A"
|
|
137355
137391
|
}
|
|
137356
137392
|
if {$action ne "selected-remove"} {
|
|
137357
|
-
set confirmedDialog [
|
|
137393
|
+
set confirmedDialog [readKimi22RemoveSelection]
|
|
137358
137394
|
set confirmedIdentity [kimi22RemoveIdentity $confirmedDialog]
|
|
137359
|
-
if {$confirmedIdentity
|
|
137395
|
+
if {$confirmedIdentity ne "" && $confirmedIdentity ne $removePlugin} {
|
|
137360
137396
|
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137361
137397
|
exit 127
|
|
137362
137398
|
}
|
|
@@ -37,11 +37,11 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
37
37
|
|
|
38
38
|
治理诊断只运行 release-skill 自己的只读检查程序,不运行目标 Skill、业务脚本、构建、hook 或发布动作,也不把 `prepare`、`verify`、`release-finish` 当作静态治理入口。用户要求实际接入或发布时,把已有授权带到对应原业务入口;各入口继续执行原有确认、副作用和状态机合同。
|
|
39
39
|
|
|
40
|
-
## 0.9.
|
|
40
|
+
## 0.9.32 能力与证据边界
|
|
41
41
|
|
|
42
|
-
0.9.
|
|
42
|
+
0.9.32 修复了 Kimi 2.2.0 移除菜单移动后,适配器因等待完整标题而失败的问题。真实终端只重绘变动的菜单行,不重发插件标题,末行也没有换行。适配器在移动后必须先重新观察选中项,确认唯一选中 `Remove plugin` 后才允许提交操作。读取帧前先核实初始精确插件 ID,读完该帧后才发送方向键,再读取完整增量帧并核对唯一选中项,完整标题重绘时仍核对精确 ID。未知、歧义、未移动、帧未完成、timeout、EOF 均导致失败关闭,不继续安装。 移除确认页仍采用 `Remove <displayName> (<id>)?`,包含 Cancel 和 Remove plugin 选项;已选中 `Remove plugin` 时无需方向键。显示名含 Confirm 或 Sure,或标题分块到达,仍核对精确身份,不触发旧宽泛正则路径。
|
|
43
43
|
|
|
44
|
-
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version
|
|
44
|
+
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version 与载荷核对规则未变。 真实 Kimi 2.2.0 已完成确认前的精确身份、移动及选中项观察,随后按 Esc 取消并退出,未执行移除、安装或更新。47 项聚焦测试通过,独立代码审阅无发现;真实消费者的完整更新与加载验收仍待执行。修复面向真实更新流程,提供方升级不扩大宿主授权,也无需重发原领域插件。
|
|
45
45
|
|
|
46
46
|
同一 `unitId/plugin/version` 的共享环境 setup 按单元、插件、版本归并,Claude/Codex 不同物理 `skillFile` 路径不再视为多个 setup 归属。仅需一个已加载宿主的精确 setup 反馈即可满足共享环境检查要求。各宿主的安装、加载及专属配置仍需分别核实,反馈继续绑定 `host/unit/path/plan/config/root`;真正多插件归属仍需消歧,Kimi 失败或其他宿主失败均导致收尾状态为 FAILED,不改变 `VERIFIED`/`DISTRIBUTED` 发布状态。
|
|
47
47
|
|
|
@@ -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.32"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b023c0808411ba0bf3fea258860422e38fe89a744a6c33676eb07e08c2a43b0b";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -137336,9 +137336,45 @@ proc readKimi22RemoveDialog {prefix state timeoutCode unknownCode eofCode} {
|
|
|
137336
137336
|
}
|
|
137337
137337
|
set cleaned [cleanScreen $dialogBuffer]
|
|
137338
137338
|
}
|
|
137339
|
+
# Consume the initial synchronized frame before sending a selection key.
|
|
137340
|
+
# Otherwise its remaining rows can be mistaken for the selection repaint.
|
|
137341
|
+
if {[string last "\\033\\[?2026h" $dialogBuffer] > [string last "\\033\\[?2026l" $dialogBuffer]} {
|
|
137342
|
+
expect {
|
|
137343
|
+
-exact "\\033\\[?2026l" { append dialogBuffer $expect_out(buffer) }
|
|
137344
|
+
timeout { failTimeout $state $timeoutCode $unknownCode }
|
|
137345
|
+
eof { failEof $state $eofCode }
|
|
137346
|
+
}
|
|
137347
|
+
set cleaned [cleanScreen $dialogBuffer]
|
|
137348
|
+
}
|
|
137339
137349
|
return $cleaned
|
|
137340
137350
|
}
|
|
137341
137351
|
|
|
137352
|
+
proc readKimi22RemoveSelection {} {
|
|
137353
|
+
global expect_out removePlugin
|
|
137354
|
+
expect {
|
|
137355
|
+
-nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
|
|
137356
|
+
-nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
|
|
137357
|
+
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirm-selection 125 127 126]
|
|
137358
|
+
if {[kimi22RemoveIdentity $dialog] ne $removePlugin} {
|
|
137359
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137360
|
+
exit 127
|
|
137361
|
+
}
|
|
137362
|
+
return $dialog
|
|
137363
|
+
}
|
|
137364
|
+
-exact "\\033\\[?2026l" {
|
|
137365
|
+
# Kimi 2.2 redraws only the changed menu rows, with no title or final newline.
|
|
137366
|
+
# The initial dialog already bound the plugin; require one complete new frame.
|
|
137367
|
+
if {[string first "\\033\\[?2026h" $expect_out(buffer)] < 0} {
|
|
137368
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137369
|
+
exit 127
|
|
137370
|
+
}
|
|
137371
|
+
return [cleanScreen $expect_out(buffer)]
|
|
137372
|
+
}
|
|
137373
|
+
timeout { failTimeout remove-confirm-selection 125 127 }
|
|
137374
|
+
eof { failEof remove-confirm-selection 126 }
|
|
137375
|
+
}
|
|
137376
|
+
}
|
|
137377
|
+
|
|
137342
137378
|
proc confirmKimi22Remove {} {
|
|
137343
137379
|
global expect_out promptPattern removePlugin
|
|
137344
137380
|
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirmation 125 127 126]
|
|
@@ -137354,9 +137390,9 @@ proc confirmKimi22Remove {} {
|
|
|
137354
137390
|
send -- "\\033\\[A"
|
|
137355
137391
|
}
|
|
137356
137392
|
if {$action ne "selected-remove"} {
|
|
137357
|
-
set confirmedDialog [
|
|
137393
|
+
set confirmedDialog [readKimi22RemoveSelection]
|
|
137358
137394
|
set confirmedIdentity [kimi22RemoveIdentity $confirmedDialog]
|
|
137359
|
-
if {$confirmedIdentity
|
|
137395
|
+
if {$confirmedIdentity ne "" && $confirmedIdentity ne $removePlugin} {
|
|
137360
137396
|
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137361
137397
|
exit 127
|
|
137362
137398
|
}
|
|
@@ -37,11 +37,11 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
37
37
|
|
|
38
38
|
治理诊断只运行 release-skill 自己的只读检查程序,不运行目标 Skill、业务脚本、构建、hook 或发布动作,也不把 `prepare`、`verify`、`release-finish` 当作静态治理入口。用户要求实际接入或发布时,把已有授权带到对应原业务入口;各入口继续执行原有确认、副作用和状态机合同。
|
|
39
39
|
|
|
40
|
-
## 0.9.
|
|
40
|
+
## 0.9.32 能力与证据边界
|
|
41
41
|
|
|
42
|
-
0.9.
|
|
42
|
+
0.9.32 修复了 Kimi 2.2.0 移除菜单移动后,适配器因等待完整标题而失败的问题。真实终端只重绘变动的菜单行,不重发插件标题,末行也没有换行。适配器在移动后必须先重新观察选中项,确认唯一选中 `Remove plugin` 后才允许提交操作。读取帧前先核实初始精确插件 ID,读完该帧后才发送方向键,再读取完整增量帧并核对唯一选中项,完整标题重绘时仍核对精确 ID。未知、歧义、未移动、帧未完成、timeout、EOF 均导致失败关闭,不继续安装。 移除确认页仍采用 `Remove <displayName> (<id>)?`,包含 Cancel 和 Remove plugin 选项;已选中 `Remove plugin` 时无需方向键。显示名含 Confirm 或 Sure,或标题分块到达,仍核对精确身份,不触发旧宽泛正则路径。
|
|
43
43
|
|
|
44
|
-
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version
|
|
44
|
+
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version 与载荷核对规则未变。 真实 Kimi 2.2.0 已完成确认前的精确身份、移动及选中项观察,随后按 Esc 取消并退出,未执行移除、安装或更新。47 项聚焦测试通过,独立代码审阅无发现;真实消费者的完整更新与加载验收仍待执行。修复面向真实更新流程,提供方升级不扩大宿主授权,也无需重发原领域插件。
|
|
45
45
|
|
|
46
46
|
同一 `unitId/plugin/version` 的共享环境 setup 按单元、插件、版本归并,Claude/Codex 不同物理 `skillFile` 路径不再视为多个 setup 归属。仅需一个已加载宿主的精确 setup 反馈即可满足共享环境检查要求。各宿主的安装、加载及专属配置仍需分别核实,反馈继续绑定 `host/unit/path/plan/config/root`;真正多插件归属仍需消歧,Kimi 失败或其他宿主失败均导致收尾状态为 FAILED,不改变 `VERIFIED`/`DISTRIBUTED` 发布状态。
|
|
47
47
|
|
|
@@ -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.32"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b023c0808411ba0bf3fea258860422e38fe89a744a6c33676eb07e08c2a43b0b";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -137336,9 +137336,45 @@ proc readKimi22RemoveDialog {prefix state timeoutCode unknownCode eofCode} {
|
|
|
137336
137336
|
}
|
|
137337
137337
|
set cleaned [cleanScreen $dialogBuffer]
|
|
137338
137338
|
}
|
|
137339
|
+
# Consume the initial synchronized frame before sending a selection key.
|
|
137340
|
+
# Otherwise its remaining rows can be mistaken for the selection repaint.
|
|
137341
|
+
if {[string last "\\033\\[?2026h" $dialogBuffer] > [string last "\\033\\[?2026l" $dialogBuffer]} {
|
|
137342
|
+
expect {
|
|
137343
|
+
-exact "\\033\\[?2026l" { append dialogBuffer $expect_out(buffer) }
|
|
137344
|
+
timeout { failTimeout $state $timeoutCode $unknownCode }
|
|
137345
|
+
eof { failEof $state $eofCode }
|
|
137346
|
+
}
|
|
137347
|
+
set cleaned [cleanScreen $dialogBuffer]
|
|
137348
|
+
}
|
|
137339
137349
|
return $cleaned
|
|
137340
137350
|
}
|
|
137341
137351
|
|
|
137352
|
+
proc readKimi22RemoveSelection {} {
|
|
137353
|
+
global expect_out removePlugin
|
|
137354
|
+
expect {
|
|
137355
|
+
-nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
|
|
137356
|
+
-nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
|
|
137357
|
+
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirm-selection 125 127 126]
|
|
137358
|
+
if {[kimi22RemoveIdentity $dialog] ne $removePlugin} {
|
|
137359
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137360
|
+
exit 127
|
|
137361
|
+
}
|
|
137362
|
+
return $dialog
|
|
137363
|
+
}
|
|
137364
|
+
-exact "\\033\\[?2026l" {
|
|
137365
|
+
# Kimi 2.2 redraws only the changed menu rows, with no title or final newline.
|
|
137366
|
+
# The initial dialog already bound the plugin; require one complete new frame.
|
|
137367
|
+
if {[string first "\\033\\[?2026h" $expect_out(buffer)] < 0} {
|
|
137368
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137369
|
+
exit 127
|
|
137370
|
+
}
|
|
137371
|
+
return [cleanScreen $expect_out(buffer)]
|
|
137372
|
+
}
|
|
137373
|
+
timeout { failTimeout remove-confirm-selection 125 127 }
|
|
137374
|
+
eof { failEof remove-confirm-selection 126 }
|
|
137375
|
+
}
|
|
137376
|
+
}
|
|
137377
|
+
|
|
137342
137378
|
proc confirmKimi22Remove {} {
|
|
137343
137379
|
global expect_out promptPattern removePlugin
|
|
137344
137380
|
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirmation 125 127 126]
|
|
@@ -137354,9 +137390,9 @@ proc confirmKimi22Remove {} {
|
|
|
137354
137390
|
send -- "\\033\\[A"
|
|
137355
137391
|
}
|
|
137356
137392
|
if {$action ne "selected-remove"} {
|
|
137357
|
-
set confirmedDialog [
|
|
137393
|
+
set confirmedDialog [readKimi22RemoveSelection]
|
|
137358
137394
|
set confirmedIdentity [kimi22RemoveIdentity $confirmedDialog]
|
|
137359
|
-
if {$confirmedIdentity
|
|
137395
|
+
if {$confirmedIdentity ne "" && $confirmedIdentity ne $removePlugin} {
|
|
137360
137396
|
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137361
137397
|
exit 127
|
|
137362
137398
|
}
|
|
@@ -29,11 +29,11 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
29
29
|
|
|
30
30
|
治理诊断只运行 release-skill 自己的只读检查程序,不运行目标 Skill、业务脚本、构建、hook 或发布动作,也不把 `prepare`、`verify`、`release-finish` 当作静态治理入口。用户要求实际接入或发布时,把已有授权带到对应原业务入口;各入口继续执行原有确认、副作用和状态机合同。
|
|
31
31
|
|
|
32
|
-
## 0.9.
|
|
32
|
+
## 0.9.32 能力与证据边界
|
|
33
33
|
|
|
34
|
-
0.9.
|
|
34
|
+
0.9.32 修复了 Kimi 2.2.0 移除菜单移动后,适配器因等待完整标题而失败的问题。真实终端只重绘变动的菜单行,不重发插件标题,末行也没有换行。适配器在移动后必须先重新观察选中项,确认唯一选中 `Remove plugin` 后才允许提交操作。读取帧前先核实初始精确插件 ID,读完该帧后才发送方向键,再读取完整增量帧并核对唯一选中项,完整标题重绘时仍核对精确 ID。未知、歧义、未移动、帧未完成、timeout、EOF 均导致失败关闭,不继续安装。 移除确认页仍采用 `Remove <displayName> (<id>)?`,包含 Cancel 和 Remove plugin 选项;已选中 `Remove plugin` 时无需方向键。显示名含 Confirm 或 Sure,或标题分块到达,仍核对精确身份,不触发旧宽泛正则路径。
|
|
35
35
|
|
|
36
|
-
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version
|
|
36
|
+
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version 与载荷核对规则未变。 真实 Kimi 2.2.0 已完成确认前的精确身份、移动及选中项观察,随后按 Esc 取消并退出,未执行移除、安装或更新。47 项聚焦测试通过,独立代码审阅无发现;真实消费者的完整更新与加载验收仍待执行。修复面向真实更新流程,提供方升级不扩大宿主授权,也无需重发原领域插件。
|
|
37
37
|
|
|
38
38
|
同一 `unitId/plugin/version` 的共享环境 setup 按单元、插件、版本归并,Claude/Codex 不同物理 `skillFile` 路径不再视为多个 setup 归属。仅需一个已加载宿主的精确 setup 反馈即可满足共享环境检查要求。各宿主的安装、加载及专属配置仍需分别核实,反馈继续绑定 `host/unit/path/plan/config/root`;真正多插件归属仍需消歧,Kimi 失败或其他宿主失败均导致收尾状态为 FAILED,不改变 `VERIFIED`/`DISTRIBUTED` 发布状态。
|
|
39
39
|
|
|
@@ -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.32"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "b023c0808411ba0bf3fea258860422e38fe89a744a6c33676eb07e08c2a43b0b";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -137336,9 +137336,45 @@ proc readKimi22RemoveDialog {prefix state timeoutCode unknownCode eofCode} {
|
|
|
137336
137336
|
}
|
|
137337
137337
|
set cleaned [cleanScreen $dialogBuffer]
|
|
137338
137338
|
}
|
|
137339
|
+
# Consume the initial synchronized frame before sending a selection key.
|
|
137340
|
+
# Otherwise its remaining rows can be mistaken for the selection repaint.
|
|
137341
|
+
if {[string last "\\033\\[?2026h" $dialogBuffer] > [string last "\\033\\[?2026l" $dialogBuffer]} {
|
|
137342
|
+
expect {
|
|
137343
|
+
-exact "\\033\\[?2026l" { append dialogBuffer $expect_out(buffer) }
|
|
137344
|
+
timeout { failTimeout $state $timeoutCode $unknownCode }
|
|
137345
|
+
eof { failEof $state $eofCode }
|
|
137346
|
+
}
|
|
137347
|
+
set cleaned [cleanScreen $dialogBuffer]
|
|
137348
|
+
}
|
|
137339
137349
|
return $cleaned
|
|
137340
137350
|
}
|
|
137341
137351
|
|
|
137352
|
+
proc readKimi22RemoveSelection {} {
|
|
137353
|
+
global expect_out removePlugin
|
|
137354
|
+
expect {
|
|
137355
|
+
-nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
|
|
137356
|
+
-nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
|
|
137357
|
+
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirm-selection 125 127 126]
|
|
137358
|
+
if {[kimi22RemoveIdentity $dialog] ne $removePlugin} {
|
|
137359
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137360
|
+
exit 127
|
|
137361
|
+
}
|
|
137362
|
+
return $dialog
|
|
137363
|
+
}
|
|
137364
|
+
-exact "\\033\\[?2026l" {
|
|
137365
|
+
# Kimi 2.2 redraws only the changed menu rows, with no title or final newline.
|
|
137366
|
+
# The initial dialog already bound the plugin; require one complete new frame.
|
|
137367
|
+
if {[string first "\\033\\[?2026h" $expect_out(buffer)] < 0} {
|
|
137368
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137369
|
+
exit 127
|
|
137370
|
+
}
|
|
137371
|
+
return [cleanScreen $expect_out(buffer)]
|
|
137372
|
+
}
|
|
137373
|
+
timeout { failTimeout remove-confirm-selection 125 127 }
|
|
137374
|
+
eof { failEof remove-confirm-selection 126 }
|
|
137375
|
+
}
|
|
137376
|
+
}
|
|
137377
|
+
|
|
137342
137378
|
proc confirmKimi22Remove {} {
|
|
137343
137379
|
global expect_out promptPattern removePlugin
|
|
137344
137380
|
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirmation 125 127 126]
|
|
@@ -137354,9 +137390,9 @@ proc confirmKimi22Remove {} {
|
|
|
137354
137390
|
send -- "\\033\\[A"
|
|
137355
137391
|
}
|
|
137356
137392
|
if {$action ne "selected-remove"} {
|
|
137357
|
-
set confirmedDialog [
|
|
137393
|
+
set confirmedDialog [readKimi22RemoveSelection]
|
|
137358
137394
|
set confirmedIdentity [kimi22RemoveIdentity $confirmedDialog]
|
|
137359
|
-
if {$confirmedIdentity
|
|
137395
|
+
if {$confirmedIdentity ne "" && $confirmedIdentity ne $removePlugin} {
|
|
137360
137396
|
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
137361
137397
|
exit 127
|
|
137362
137398
|
}
|
package/package.json
CHANGED
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.32",
|
|
6
6
|
"logicalRoot": "skills-src/",
|
|
7
|
-
"logicalRootDigest": "
|
|
8
|
-
"projectionDigest": "
|
|
9
|
-
"projectionId": "release-skill:platform:0.9.
|
|
7
|
+
"logicalRootDigest": "a1e30e490fe705ec8c4b1a60597cc30e2d85b136d74100fec0202327333d14d0",
|
|
8
|
+
"projectionDigest": "38de97ff9a7e11c1e1b3b50b9ab392dfef5312b05271abc7503a482aeefb210c",
|
|
9
|
+
"projectionId": "release-skill:platform:0.9.32",
|
|
10
10
|
"manifestRequired": true,
|
|
11
11
|
"projectionSources": {
|
|
12
12
|
"skills-src-root": {
|
|
@@ -29,11 +29,11 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
29
29
|
|
|
30
30
|
治理诊断只运行 release-skill 自己的只读检查程序,不运行目标 Skill、业务脚本、构建、hook 或发布动作,也不把 `prepare`、`verify`、`release-finish` 当作静态治理入口。用户要求实际接入或发布时,把已有授权带到对应原业务入口;各入口继续执行原有确认、副作用和状态机合同。
|
|
31
31
|
|
|
32
|
-
## 0.9.
|
|
32
|
+
## 0.9.32 能力与证据边界
|
|
33
33
|
|
|
34
|
-
0.9.
|
|
34
|
+
0.9.32 修复了 Kimi 2.2.0 移除菜单移动后,适配器因等待完整标题而失败的问题。真实终端只重绘变动的菜单行,不重发插件标题,末行也没有换行。适配器在移动后必须先重新观察选中项,确认唯一选中 `Remove plugin` 后才允许提交操作。读取帧前先核实初始精确插件 ID,读完该帧后才发送方向键,再读取完整增量帧并核对唯一选中项,完整标题重绘时仍核对精确 ID。未知、歧义、未移动、帧未完成、timeout、EOF 均导致失败关闭,不继续安装。 移除确认页仍采用 `Remove <displayName> (<id>)?`,包含 Cancel 和 Remove plugin 选项;已选中 `Remove plugin` 时无需方向键。显示名含 Confirm 或 Sure,或标题分块到达,仍核对精确身份,不触发旧宽泛正则路径。
|
|
35
35
|
|
|
36
|
-
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version
|
|
36
|
+
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version 与载荷核对规则未变。 真实 Kimi 2.2.0 已完成确认前的精确身份、移动及选中项观察,随后按 Esc 取消并退出,未执行移除、安装或更新。47 项聚焦测试通过,独立代码审阅无发现;真实消费者的完整更新与加载验收仍待执行。修复面向真实更新流程,提供方升级不扩大宿主授权,也无需重发原领域插件。
|
|
37
37
|
|
|
38
38
|
同一 `unitId/plugin/version` 的共享环境 setup 按单元、插件、版本归并,Claude/Codex 不同物理 `skillFile` 路径不再视为多个 setup 归属。仅需一个已加载宿主的精确 setup 反馈即可满足共享环境检查要求。各宿主的安装、加载及专属配置仍需分别核实,反馈继续绑定 `host/unit/path/plan/config/root`;真正多插件归属仍需消歧,Kimi 失败或其他宿主失败均导致收尾状态为 FAILED,不改变 `VERIFIED`/`DISTRIBUTED` 发布状态。
|
|
39
39
|
|
|
@@ -29,11 +29,11 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
29
29
|
|
|
30
30
|
治理诊断只运行 release-skill 自己的只读检查程序,不运行目标 Skill、业务脚本、构建、hook 或发布动作,也不把 `prepare`、`verify`、`release-finish` 当作静态治理入口。用户要求实际接入或发布时,把已有授权带到对应原业务入口;各入口继续执行原有确认、副作用和状态机合同。
|
|
31
31
|
|
|
32
|
-
## 0.9.
|
|
32
|
+
## 0.9.32 能力与证据边界
|
|
33
33
|
|
|
34
|
-
0.9.
|
|
34
|
+
0.9.32 修复了 Kimi 2.2.0 移除菜单移动后,适配器因等待完整标题而失败的问题。真实终端只重绘变动的菜单行,不重发插件标题,末行也没有换行。适配器在移动后必须先重新观察选中项,确认唯一选中 `Remove plugin` 后才允许提交操作。读取帧前先核实初始精确插件 ID,读完该帧后才发送方向键,再读取完整增量帧并核对唯一选中项,完整标题重绘时仍核对精确 ID。未知、歧义、未移动、帧未完成、timeout、EOF 均导致失败关闭,不继续安装。 移除确认页仍采用 `Remove <displayName> (<id>)?`,包含 Cancel 和 Remove plugin 选项;已选中 `Remove plugin` 时无需方向键。显示名含 Confirm 或 Sure,或标题分块到达,仍核对精确身份,不触发旧宽泛正则路径。
|
|
35
35
|
|
|
36
|
-
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version
|
|
36
|
+
保留 Kimi 0.40.1 的实际确认措辞 `Confirm remove plugin "<id>"?`、括号粘贴与 CSI Enter 输入方式。冻结的安装 URL/ref/sha、安装后 name/version 与载荷核对规则未变。 真实 Kimi 2.2.0 已完成确认前的精确身份、移动及选中项观察,随后按 Esc 取消并退出,未执行移除、安装或更新。47 项聚焦测试通过,独立代码审阅无发现;真实消费者的完整更新与加载验收仍待执行。修复面向真实更新流程,提供方升级不扩大宿主授权,也无需重发原领域插件。
|
|
37
37
|
|
|
38
38
|
同一 `unitId/plugin/version` 的共享环境 setup 按单元、插件、版本归并,Claude/Codex 不同物理 `skillFile` 路径不再视为多个 setup 归属。仅需一个已加载宿主的精确 setup 反馈即可满足共享环境检查要求。各宿主的安装、加载及专属配置仍需分别核实,反馈继续绑定 `host/unit/path/plan/config/root`;真正多插件归属仍需消歧,Kimi 失败或其他宿主失败均导致收尾状态为 FAILED,不改变 `VERIFIED`/`DISTRIBUTED` 发布状态。
|
|
39
39
|
|
|
@@ -1584,9 +1584,45 @@ proc readKimi22RemoveDialog {prefix state timeoutCode unknownCode eofCode} {
|
|
|
1584
1584
|
}
|
|
1585
1585
|
set cleaned [cleanScreen $dialogBuffer]
|
|
1586
1586
|
}
|
|
1587
|
+
# Consume the initial synchronized frame before sending a selection key.
|
|
1588
|
+
# Otherwise its remaining rows can be mistaken for the selection repaint.
|
|
1589
|
+
if {[string last "\\033\\[?2026h" $dialogBuffer] > [string last "\\033\\[?2026l" $dialogBuffer]} {
|
|
1590
|
+
expect {
|
|
1591
|
+
-exact "\\033\\[?2026l" { append dialogBuffer $expect_out(buffer) }
|
|
1592
|
+
timeout { failTimeout $state $timeoutCode $unknownCode }
|
|
1593
|
+
eof { failEof $state $eofCode }
|
|
1594
|
+
}
|
|
1595
|
+
set cleaned [cleanScreen $dialogBuffer]
|
|
1596
|
+
}
|
|
1587
1597
|
return $cleaned
|
|
1588
1598
|
}
|
|
1589
1599
|
|
|
1600
|
+
proc readKimi22RemoveSelection {} {
|
|
1601
|
+
global expect_out removePlugin
|
|
1602
|
+
expect {
|
|
1603
|
+
-nocase -re {Trust this folder\\?} { unexpectedDirectoryTrust }
|
|
1604
|
+
-nocase -re {Remove [^\\r\\n]*\\([^\\r\\n]+\\)\\?} {
|
|
1605
|
+
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirm-selection 125 127 126]
|
|
1606
|
+
if {[kimi22RemoveIdentity $dialog] ne $removePlugin} {
|
|
1607
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
1608
|
+
exit 127
|
|
1609
|
+
}
|
|
1610
|
+
return $dialog
|
|
1611
|
+
}
|
|
1612
|
+
-exact "\\033\\[?2026l" {
|
|
1613
|
+
# Kimi 2.2 redraws only the changed menu rows, with no title or final newline.
|
|
1614
|
+
# The initial dialog already bound the plugin; require one complete new frame.
|
|
1615
|
+
if {[string first "\\033\\[?2026h" $expect_out(buffer)] < 0} {
|
|
1616
|
+
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
1617
|
+
exit 127
|
|
1618
|
+
}
|
|
1619
|
+
return [cleanScreen $expect_out(buffer)]
|
|
1620
|
+
}
|
|
1621
|
+
timeout { failTimeout remove-confirm-selection 125 127 }
|
|
1622
|
+
eof { failEof remove-confirm-selection 126 }
|
|
1623
|
+
}
|
|
1624
|
+
}
|
|
1625
|
+
|
|
1590
1626
|
proc confirmKimi22Remove {} {
|
|
1591
1627
|
global expect_out promptPattern removePlugin
|
|
1592
1628
|
set dialog [readKimi22RemoveDialog $expect_out(buffer) remove-confirmation 125 127 126]
|
|
@@ -1602,9 +1638,9 @@ proc confirmKimi22Remove {} {
|
|
|
1602
1638
|
send -- "\\033\\[A"
|
|
1603
1639
|
}
|
|
1604
1640
|
if {$action ne "selected-remove"} {
|
|
1605
|
-
set confirmedDialog [
|
|
1641
|
+
set confirmedDialog [readKimi22RemoveSelection]
|
|
1606
1642
|
set confirmedIdentity [kimi22RemoveIdentity $confirmedDialog]
|
|
1607
|
-
if {$confirmedIdentity
|
|
1643
|
+
if {$confirmedIdentity ne "" && $confirmedIdentity ne $removePlugin} {
|
|
1608
1644
|
puts stderr "KIMI_TUI_STATE:remove-confirm-selection:unknown"
|
|
1609
1645
|
exit 127
|
|
1610
1646
|
}
|