release-skill 0.9.8 → 0.9.9
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/marketplace.json +1 -1
- 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 +25 -0
- package/INSTALL.md +2 -2
- package/INSTALL.zh-CN.md +2 -2
- package/README.md +14 -16
- package/README.zh-CN.md +14 -16
- package/adapters/claude/.claude-plugin/marketplace.json +1 -1
- package/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/adapters/claude/bin/release-skill.bundle.mjs +27 -9
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +27 -9
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +27 -9
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +27 -9
- package/bin/release-skill.bundle.mjs +27 -9
- package/package.json +1 -1
- package/platform-manifest.json +2 -2
- package/src/commands/post-release-local.mjs +25 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.9",
|
|
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.9.",
|
|
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,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.9.9 locale=en baseline=sha256:44d7cba7d5e4cbe182157c8b200e3a2d9b494d61a9555cd5af5c62c97a60fb37 -->
|
|
4
|
+
## [0.9.9] - 2026-09-04
|
|
5
|
+
|
|
6
|
+
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.
|
|
7
|
+
|
|
8
|
+
### Security
|
|
9
|
+
|
|
10
|
+
- 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.
|
|
11
|
+
- 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.
|
|
12
|
+
- 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.
|
|
13
|
+
- 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.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- The English and Chinese README scope descriptions identify 0.9.9 as the current source candidate.
|
|
18
|
+
- 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.
|
|
19
|
+
- 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.
|
|
20
|
+
- 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.
|
|
21
|
+
|
|
22
|
+
### Upgrade Notes
|
|
23
|
+
|
|
24
|
+
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.
|
|
25
|
+
<!-- release-skill:changelog:end version=0.9.9 locale=en -->
|
|
26
|
+
|
|
27
|
+
|
|
3
28
|
<!-- release-skill:changelog:start version=0.9.8 locale=en baseline=sha256:ed56048811dd7946bfdaa4022d0430906db713ef86eed1528395dbfb031b075e -->
|
|
4
29
|
## [0.9.8] - 2026-09-04
|
|
5
30
|
|
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.9 -->
|
|
6
6
|
## Prerequisites
|
|
7
7
|
|
|
8
8
|
- Node.js 22.0.0 or later
|
|
@@ -114,7 +114,7 @@ tag pinned to the exact version (never the bare repository URL, which installs
|
|
|
114
114
|
the latest release or default branch), confirm the trust prompt, then reload:
|
|
115
115
|
|
|
116
116
|
```
|
|
117
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.
|
|
117
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.9
|
|
118
118
|
/plugins reload
|
|
119
119
|
```
|
|
120
120
|
|
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.9 -->
|
|
6
6
|
## 前置条件
|
|
7
7
|
|
|
8
8
|
- Node.js 22.0.0 或更高版本
|
|
@@ -104,7 +104,7 @@ release-skill 当前只采用并验证 Kimi Code 的交互式 TUI 路径,**无
|
|
|
104
104
|
(切勿使用裸仓库地址,它会安装最新 release 或默认分支),确认信任提示后重新加载:
|
|
105
105
|
|
|
106
106
|
```
|
|
107
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.
|
|
107
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.9
|
|
108
108
|
/plugins reload
|
|
109
109
|
```
|
|
110
110
|
|
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.9 -->
|
|
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,31 @@ 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.9** (2026-09-04)
|
|
18
18
|
|
|
19
|
-
0.9.
|
|
19
|
+
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.
|
|
20
20
|
|
|
21
21
|
**Security**
|
|
22
22
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- Kimi Code
|
|
23
|
+
- 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.
|
|
24
|
+
- 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.
|
|
25
|
+
- 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.
|
|
26
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.
|
|
27
27
|
|
|
28
28
|
**Changed**
|
|
29
29
|
|
|
30
|
-
- The
|
|
31
|
-
-
|
|
32
|
-
- Kimi Code
|
|
33
|
-
- The
|
|
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.
|
|
30
|
+
- The English and Chinese README scope descriptions identify 0.9.9 as the current source candidate.
|
|
31
|
+
- 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.
|
|
32
|
+
- 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.
|
|
33
|
+
- 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.
|
|
36
34
|
|
|
37
35
|
**Upgrade Notes**
|
|
38
36
|
|
|
39
|
-
Prepare and approve a new 0.9.
|
|
37
|
+
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.
|
|
40
38
|
<!-- release-skill:managed:end id=latest-release -->
|
|
41
39
|
|
|
42
40
|
<!-- release-skill:capability:external-write-boundary -->
|
|
43
|
-
> **Current boundary:** v0.9.
|
|
41
|
+
> **Current boundary:** v0.9.9 is the current source candidate. This README
|
|
44
42
|
> records intended scope and verification boundaries; it is not evidence of
|
|
45
43
|
> publication, consumer-installation verification, or independent acceptance.
|
|
46
44
|
> Release availability must be established from the corresponding release records
|
|
@@ -64,7 +62,7 @@ Prepare and approve a new 0.9.8 production plan for these changes. After verify
|
|
|
64
62
|
> publish global preflight.
|
|
65
63
|
|
|
66
64
|
<!-- release-skill:capability:safe-first-command -->
|
|
67
|
-
> **Production path verified since the v0.1.1 milestone; v0.9.
|
|
65
|
+
> **Production path verified since the v0.1.1 milestone; v0.9.9 is the current
|
|
68
66
|
> source candidate. Its README does not establish publication,
|
|
69
67
|
> consumer-installation verification, or independent acceptance.**
|
|
70
68
|
> The npm-installed CLI is the supported user entry. Source checkout
|
|
@@ -93,7 +91,7 @@ checkpoints remain intact and use matching-version recovery. Evidence v1 stays
|
|
|
93
91
|
read-only; v2 uses a closed top level with phase extensions in `details`.
|
|
94
92
|
Summaries and recovery suggestions are diagnostic, never publication authority.
|
|
95
93
|
|
|
96
|
-
The current 0.9.
|
|
94
|
+
The current 0.9.9 candidate includes the narrow R-05 Hook cache v2 consumer
|
|
97
95
|
path, the public `postverify` path, and the stable isolated install-tree record
|
|
98
96
|
path (A2/A3). It still
|
|
99
97
|
excludes R-02 safe full-tree inventory, R-10 historical-release verification
|
package/README.zh-CN.md
CHANGED
|
@@ -2,39 +2,37 @@
|
|
|
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.9 -->
|
|
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.9** (2026-09-04)
|
|
12
12
|
|
|
13
|
-
0.9.
|
|
13
|
+
0.9.9 是修正 Kimi Code 插件信任身份精确比较的本地源码候选。三项 Foundation 依赖均精确消费已发布的 0.16.0。本说明不代表已经发布、完成真实宿主验收、完成消费者安装验证或通过独立验收。
|
|
14
14
|
|
|
15
15
|
**安全**
|
|
16
16
|
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
- Kimi Code
|
|
17
|
+
- Kimi Code 会从插件信任对话框提取完整安装身份,清除 ANSI/OSC 控制序列并归一软换行,再与冻结安装 URL 精确比较。相似仓库名、tag 前缀或 tag 后缀均失败关闭。
|
|
18
|
+
- Claude 和 Codex 继续在确实需要重绑时,于第一条市场或插件写命令前验证冻结的 marketplace 仓库、ref 和 commit。远端不可达、ref 缺失或 commit 不一致时,该宿主以零写入返回 `MANUAL_REQUIRED`,其他已选宿主继续。
|
|
19
|
+
- Kimi Code 只有在选中项确认为 `Trust and install` 时才继续。出现 `Trust this folder?`、未知界面、超时、EOF 或身份不一致时,在意外确认前失败关闭。
|
|
20
20
|
- 任何宿主计划都必须是合格冻结计划,并要求同一发布谱系的 VERIFIED run 才能开始宿主验收;本源码候选不提供该验收。
|
|
21
21
|
|
|
22
22
|
**变更**
|
|
23
23
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
- Kimi Code
|
|
27
|
-
-
|
|
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。
|
|
24
|
+
- 中英文 README 的范围说明统一把 0.9.9 标为当前源码候选。
|
|
25
|
+
- 公共 release-finish 继续只把 `proposal-inbox` postVerify hook 定义为提案送达和送达证据。接收端按自身 runbook 和治理应用、渲染与同步提案;公共 Skill 不内置 Hub 仓库或推送顺序。
|
|
26
|
+
- Kimi Code 有效配置根继续依次取显式 `kimiHome`、`KIMI_CODE_HOME` 和 `~/.kimi-code`;TUI 进程与安装后观察使用同一根目录。
|
|
27
|
+
- 当前 0.9.9 候选保留窄范围的 R-05 Hook cache v2 消费路径,保留 CodeBuddy 插件显式的 `marketplace: release-skill` 条目,并在 release-finish 本机收尾示例中保留 `--root <project-root>`。Foundation 三包继续精确依赖已发布的 0.16.0。
|
|
30
28
|
|
|
31
29
|
**升级说明**
|
|
32
30
|
|
|
33
|
-
采用这些修复时,应准备并批准新的 0.9.
|
|
31
|
+
采用这些修复时,应准备并批准新的 0.9.9 production plan。verify 达到 `VERIFIED` 后,先用各 hook 独立的不可变 checkpoint approval 完成所有已声明 postVerify,再运行 release-finish。真实宿主验收只有在 0.9.9 正式发布并达到 VERIFIED 后才能开始;必须先安装或重载正式的 0.9.9 入口。源码候选、旧的已安装入口,或仅存在计划和运行文件,都不能完成真实宿主验收。每个已选宿主都必须完成首次成功更新。第二次运行时,Claude、Kimi、CodeBuddy 和 WorkBuddy 必须返回 `ALREADY_CURRENT`;Codex 可以返回 `UPDATED`,但只有在重新安装同一精确 0.9.9 冻结引用、载荷验证通过并声明 `restartRequired=true` 时才允许这样返回。本机 updater 采用已针对 Kimi Code 0.40.1 验证的 TUI 路径,不切换到 Web 或 REST 安装路径。插件信任界面显示的完整冻结安装 URL 必须精确一致;插件安装过程中不得批准目录信任界面。本候选不宣称 0.9.9 已经发布或达到 VERIFIED。
|
|
34
32
|
<!-- release-skill:managed:end id=latest-release -->
|
|
35
33
|
|
|
36
34
|
<!-- release-skill:capability:external-write-boundary -->
|
|
37
|
-
> **当前边界:** v0.9.
|
|
35
|
+
> **当前边界:** v0.9.9 只是当前源码候选。本 README 记录预期范围与验证边界,
|
|
38
36
|
> 不代表已经发布、完成消费者安装验证或通过独立验收。
|
|
39
37
|
> 版本可用性以对应发布记录及发布后验证结果为准。
|
|
40
38
|
> v0.4.1 是更早的已发布里程碑(v0.2.2 曾处于已发布状态,后因平台验证收敛修复而更新)。
|
|
@@ -50,7 +48,7 @@ release-skill 帮助维护者回答三个问题:准备发布什么、还有哪
|
|
|
50
48
|
> 远端唯一性检查在 `publish` 全局预检执行。
|
|
51
49
|
|
|
52
50
|
<!-- release-skill:capability:safe-first-command -->
|
|
53
|
-
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.9.
|
|
51
|
+
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.9.9 是当前源码候选,本 README 不证明该候选已经发布、完成消费者安装验证或通过独立验收。**
|
|
54
52
|
> npm 安装的 CLI 是受支持的用户入口;源码 checkout 保留为开发/贡献者路径。
|
|
55
53
|
>
|
|
56
54
|
> **第一条命令:**
|
|
@@ -68,7 +66,7 @@ marketplace 委托目标工作区发布的边界不变。
|
|
|
68
66
|
|
|
69
67
|
旧 production 计划缺少 `sourceAuthority` 时,在外部写入前拒绝。未发生外部写入的计划必须重新 prepare 并批准新摘要,不能补写旧计划或迁移批准。已有 `PARTIAL` 保留检查点,走匹配版本的恢复路径。evidence v1 只读;v2 顶层封闭,阶段扩展放在 `details`。摘要和恢复建议只作诊断,不构成发布权威。
|
|
70
68
|
|
|
71
|
-
当前 0.9.
|
|
69
|
+
当前 0.9.9 候选包含窄范围的 R-05 Hook cache v2 消费路径、公开 `postverify` 路径和稳定隔离安装树记录路径(A2/A3)。当前仍不包含 R-02 安全整树盘点、R-10 历史发布验证的产品实现、真实 Kimi/WorkBuddy 公开市场安装与调用门禁或 Audit 公开离线发布记录验证器。本范围说明不构成远端发布记录或消费者升级指引。
|
|
72
70
|
|
|
73
71
|
Foundation 三包精确依赖已发布的 0.16.0。新生成的 Kimi/CodeBuddy 同仓计划在 verify 阶段调用正式 `runPluginVerification`,把完整冻结载荷交给 Foundation,并记录最小的 `install-only` 观察收据。Kimi 映射为 `kimi-code`,CodeBuddy 映射为兼容的 `workbuddy`。`observed` 与 `payloadMatches` 只表示机制观察结果,不代表远端已发布或 release-skill 已完成领域验证。独立市场来源、真实市场安装和宿主调用仍是人工后续任务。
|
|
74
72
|
|
|
@@ -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.9"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "ef2ec274a982afcf48acdbccdf32439d199dd1d79b4a39b1aeaef23195fadbfb";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -132339,7 +132339,7 @@ proc cleanScreen {value} {
|
|
|
132339
132339
|
proc compactScreen {value} {
|
|
132340
132340
|
set value [cleanScreen $value]
|
|
132341
132341
|
regsub -all {[[:space:]]+} $value {} value
|
|
132342
|
-
return
|
|
132342
|
+
return $value
|
|
132343
132343
|
}
|
|
132344
132344
|
|
|
132345
132345
|
proc extractPluginTrustDialog {value} {
|
|
@@ -132354,6 +132354,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
132354
132354
|
return [string range $cleaned $dialogStart end]
|
|
132355
132355
|
}
|
|
132356
132356
|
|
|
132357
|
+
proc extractPluginTrustIdentity {value} {
|
|
132358
|
+
set cleaned [cleanScreen $value]
|
|
132359
|
+
set lowered [string tolower $cleaned]
|
|
132360
|
+
set identityStart -1
|
|
132361
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
132362
|
+
set markerStart [string last $marker $lowered]
|
|
132363
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
132364
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
132365
|
+
}
|
|
132366
|
+
}
|
|
132367
|
+
if {$identityStart < 0} { return "" }
|
|
132368
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
132369
|
+
if {$identityEnd < 0} { return "" }
|
|
132370
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
132371
|
+
}
|
|
132372
|
+
|
|
132357
132373
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
132358
132374
|
global expect_out
|
|
132359
132375
|
set buffer ""
|
|
@@ -132425,12 +132441,14 @@ if {$dialog eq ""} {
|
|
|
132425
132441
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
132426
132442
|
exit 113
|
|
132427
132443
|
}
|
|
132428
|
-
set
|
|
132429
|
-
|
|
132430
|
-
|
|
132431
|
-
|
|
132432
|
-
}
|
|
132433
|
-
|
|
132444
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
132445
|
+
set compactIdentity [compactScreen $identity]
|
|
132446
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
132447
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
132448
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
132449
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
132450
|
+
exit 111
|
|
132451
|
+
}
|
|
132434
132452
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
132435
132453
|
exit 112
|
|
132436
132454
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.9",
|
|
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.9.",
|
|
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.9"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "ef2ec274a982afcf48acdbccdf32439d199dd1d79b4a39b1aeaef23195fadbfb";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -132339,7 +132339,7 @@ proc cleanScreen {value} {
|
|
|
132339
132339
|
proc compactScreen {value} {
|
|
132340
132340
|
set value [cleanScreen $value]
|
|
132341
132341
|
regsub -all {[[:space:]]+} $value {} value
|
|
132342
|
-
return
|
|
132342
|
+
return $value
|
|
132343
132343
|
}
|
|
132344
132344
|
|
|
132345
132345
|
proc extractPluginTrustDialog {value} {
|
|
@@ -132354,6 +132354,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
132354
132354
|
return [string range $cleaned $dialogStart end]
|
|
132355
132355
|
}
|
|
132356
132356
|
|
|
132357
|
+
proc extractPluginTrustIdentity {value} {
|
|
132358
|
+
set cleaned [cleanScreen $value]
|
|
132359
|
+
set lowered [string tolower $cleaned]
|
|
132360
|
+
set identityStart -1
|
|
132361
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
132362
|
+
set markerStart [string last $marker $lowered]
|
|
132363
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
132364
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
132365
|
+
}
|
|
132366
|
+
}
|
|
132367
|
+
if {$identityStart < 0} { return "" }
|
|
132368
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
132369
|
+
if {$identityEnd < 0} { return "" }
|
|
132370
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
132371
|
+
}
|
|
132372
|
+
|
|
132357
132373
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
132358
132374
|
global expect_out
|
|
132359
132375
|
set buffer ""
|
|
@@ -132425,12 +132441,14 @@ if {$dialog eq ""} {
|
|
|
132425
132441
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
132426
132442
|
exit 113
|
|
132427
132443
|
}
|
|
132428
|
-
set
|
|
132429
|
-
|
|
132430
|
-
|
|
132431
|
-
|
|
132432
|
-
}
|
|
132433
|
-
|
|
132444
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
132445
|
+
set compactIdentity [compactScreen $identity]
|
|
132446
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
132447
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
132448
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
132449
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
132450
|
+
exit 111
|
|
132451
|
+
}
|
|
132434
132452
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
132435
132453
|
exit 112
|
|
132436
132454
|
}
|
|
@@ -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.9"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "ef2ec274a982afcf48acdbccdf32439d199dd1d79b4a39b1aeaef23195fadbfb";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -132339,7 +132339,7 @@ proc cleanScreen {value} {
|
|
|
132339
132339
|
proc compactScreen {value} {
|
|
132340
132340
|
set value [cleanScreen $value]
|
|
132341
132341
|
regsub -all {[[:space:]]+} $value {} value
|
|
132342
|
-
return
|
|
132342
|
+
return $value
|
|
132343
132343
|
}
|
|
132344
132344
|
|
|
132345
132345
|
proc extractPluginTrustDialog {value} {
|
|
@@ -132354,6 +132354,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
132354
132354
|
return [string range $cleaned $dialogStart end]
|
|
132355
132355
|
}
|
|
132356
132356
|
|
|
132357
|
+
proc extractPluginTrustIdentity {value} {
|
|
132358
|
+
set cleaned [cleanScreen $value]
|
|
132359
|
+
set lowered [string tolower $cleaned]
|
|
132360
|
+
set identityStart -1
|
|
132361
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
132362
|
+
set markerStart [string last $marker $lowered]
|
|
132363
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
132364
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
132365
|
+
}
|
|
132366
|
+
}
|
|
132367
|
+
if {$identityStart < 0} { return "" }
|
|
132368
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
132369
|
+
if {$identityEnd < 0} { return "" }
|
|
132370
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
132371
|
+
}
|
|
132372
|
+
|
|
132357
132373
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
132358
132374
|
global expect_out
|
|
132359
132375
|
set buffer ""
|
|
@@ -132425,12 +132441,14 @@ if {$dialog eq ""} {
|
|
|
132425
132441
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
132426
132442
|
exit 113
|
|
132427
132443
|
}
|
|
132428
|
-
set
|
|
132429
|
-
|
|
132430
|
-
|
|
132431
|
-
|
|
132432
|
-
}
|
|
132433
|
-
|
|
132444
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
132445
|
+
set compactIdentity [compactScreen $identity]
|
|
132446
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
132447
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
132448
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
132449
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
132450
|
+
exit 111
|
|
132451
|
+
}
|
|
132434
132452
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
132435
132453
|
exit 112
|
|
132436
132454
|
}
|
|
@@ -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.9"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "ef2ec274a982afcf48acdbccdf32439d199dd1d79b4a39b1aeaef23195fadbfb";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -132339,7 +132339,7 @@ proc cleanScreen {value} {
|
|
|
132339
132339
|
proc compactScreen {value} {
|
|
132340
132340
|
set value [cleanScreen $value]
|
|
132341
132341
|
regsub -all {[[:space:]]+} $value {} value
|
|
132342
|
-
return
|
|
132342
|
+
return $value
|
|
132343
132343
|
}
|
|
132344
132344
|
|
|
132345
132345
|
proc extractPluginTrustDialog {value} {
|
|
@@ -132354,6 +132354,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
132354
132354
|
return [string range $cleaned $dialogStart end]
|
|
132355
132355
|
}
|
|
132356
132356
|
|
|
132357
|
+
proc extractPluginTrustIdentity {value} {
|
|
132358
|
+
set cleaned [cleanScreen $value]
|
|
132359
|
+
set lowered [string tolower $cleaned]
|
|
132360
|
+
set identityStart -1
|
|
132361
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
132362
|
+
set markerStart [string last $marker $lowered]
|
|
132363
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
132364
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
132365
|
+
}
|
|
132366
|
+
}
|
|
132367
|
+
if {$identityStart < 0} { return "" }
|
|
132368
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
132369
|
+
if {$identityEnd < 0} { return "" }
|
|
132370
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
132371
|
+
}
|
|
132372
|
+
|
|
132357
132373
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
132358
132374
|
global expect_out
|
|
132359
132375
|
set buffer ""
|
|
@@ -132425,12 +132441,14 @@ if {$dialog eq ""} {
|
|
|
132425
132441
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
132426
132442
|
exit 113
|
|
132427
132443
|
}
|
|
132428
|
-
set
|
|
132429
|
-
|
|
132430
|
-
|
|
132431
|
-
|
|
132432
|
-
}
|
|
132433
|
-
|
|
132444
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
132445
|
+
set compactIdentity [compactScreen $identity]
|
|
132446
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
132447
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
132448
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
132449
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
132450
|
+
exit 111
|
|
132451
|
+
}
|
|
132434
132452
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
132435
132453
|
exit 112
|
|
132436
132454
|
}
|
|
@@ -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.9"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "ef2ec274a982afcf48acdbccdf32439d199dd1d79b4a39b1aeaef23195fadbfb";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -132339,7 +132339,7 @@ proc cleanScreen {value} {
|
|
|
132339
132339
|
proc compactScreen {value} {
|
|
132340
132340
|
set value [cleanScreen $value]
|
|
132341
132341
|
regsub -all {[[:space:]]+} $value {} value
|
|
132342
|
-
return
|
|
132342
|
+
return $value
|
|
132343
132343
|
}
|
|
132344
132344
|
|
|
132345
132345
|
proc extractPluginTrustDialog {value} {
|
|
@@ -132354,6 +132354,22 @@ proc extractPluginTrustDialog {value} {
|
|
|
132354
132354
|
return [string range $cleaned $dialogStart end]
|
|
132355
132355
|
}
|
|
132356
132356
|
|
|
132357
|
+
proc extractPluginTrustIdentity {value} {
|
|
132358
|
+
set cleaned [cleanScreen $value]
|
|
132359
|
+
set lowered [string tolower $cleaned]
|
|
132360
|
+
set identityStart -1
|
|
132361
|
+
foreach marker {"install third-party plugin " "trust and install from "} {
|
|
132362
|
+
set markerStart [string last $marker $lowered]
|
|
132363
|
+
if {$markerStart >= 0 && $markerStart + [string length $marker] > $identityStart} {
|
|
132364
|
+
set identityStart [expr {$markerStart + [string length $marker]}]
|
|
132365
|
+
}
|
|
132366
|
+
}
|
|
132367
|
+
if {$identityStart < 0} { return "" }
|
|
132368
|
+
set identityEnd [string first "?" $cleaned $identityStart]
|
|
132369
|
+
if {$identityEnd < 0} { return "" }
|
|
132370
|
+
return [string range $cleaned $identityStart [expr {$identityEnd - 1}]]
|
|
132371
|
+
}
|
|
132372
|
+
|
|
132357
132373
|
proc failTimeout {state timeoutCode unknownCode} {
|
|
132358
132374
|
global expect_out
|
|
132359
132375
|
set buffer ""
|
|
@@ -132425,12 +132441,14 @@ if {$dialog eq ""} {
|
|
|
132425
132441
|
puts stderr "KIMI_TUI_STATE:plugin-trust:dialog-unknown"
|
|
132426
132442
|
exit 113
|
|
132427
132443
|
}
|
|
132428
|
-
set
|
|
132429
|
-
|
|
132430
|
-
|
|
132431
|
-
|
|
132432
|
-
}
|
|
132433
|
-
|
|
132444
|
+
set identity [extractPluginTrustIdentity $dialog]
|
|
132445
|
+
set compactIdentity [compactScreen $identity]
|
|
132446
|
+
if {$identity eq "" || $compactIdentity ne [compactScreen $installUrl]} {
|
|
132447
|
+
set expectedRepoPrefix "[compactScreen $expectedRepo]/releases/tag/"
|
|
132448
|
+
if {[string first $expectedRepoPrefix $compactIdentity] != 0} {
|
|
132449
|
+
puts stderr "KIMI_TUI_STATE:plugin-trust:repo-mismatch"
|
|
132450
|
+
exit 111
|
|
132451
|
+
}
|
|
132434
132452
|
puts stderr "KIMI_TUI_STATE:plugin-trust:tag-mismatch"
|
|
132435
132453
|
exit 112
|
|
132436
132454
|
}
|
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.9",
|
|
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.9",
|
|
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
|
}
|