release-skill 0.7.5 → 0.7.7
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 +37 -0
- package/INSTALL.md +2 -2
- package/INSTALL.zh-CN.md +2 -2
- package/README.md +22 -11
- package/README.zh-CN.md +17 -8
- package/SECURITY.md +12 -6
- 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 +1729 -1159
- package/adapters/claude/schemas/release-plan.schema.json +47 -0
- package/adapters/claude/schemas/release-project.schema.json +24 -0
- package/adapters/claude/skills/release-prepare/SKILL.md +5 -1
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +1729 -1159
- package/adapters/codex/schemas/release-plan.schema.json +47 -0
- package/adapters/codex/schemas/release-project.schema.json +24 -0
- package/adapters/codex/skills/release-assess/SKILL.md +1 -1
- package/adapters/codex/skills/release-config/SKILL.md +1 -1
- package/adapters/codex/skills/release-docs/SKILL.md +1 -1
- package/adapters/codex/skills/release-help/SKILL.md +1 -1
- package/adapters/codex/skills/release-marketplace/SKILL.md +1 -1
- package/adapters/codex/skills/release-prepare/SKILL.md +6 -2
- package/adapters/codex/skills/release-publish/SKILL.md +1 -1
- package/adapters/codex/skills/release-reconcile/SKILL.md +1 -1
- package/adapters/codex/skills/release-setup/SKILL.md +1 -1
- package/adapters/codex/skills/release-verify/SKILL.md +1 -1
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +1729 -1159
- package/adapters/kimi/schemas/release-plan.schema.json +47 -0
- package/adapters/kimi/schemas/release-project.schema.json +24 -0
- package/adapters/kimi/skills/release-prepare/SKILL.md +5 -1
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +1729 -1159
- package/adapters/workbuddy/schemas/release-plan.schema.json +47 -0
- package/adapters/workbuddy/schemas/release-project.schema.json +24 -0
- package/adapters/workbuddy/skills/release-prepare/SKILL.md +5 -1
- package/bin/release-skill-cli.mjs +116 -47
- package/bin/release-skill.bundle.mjs +1729 -1159
- package/package.json +1 -1
- package/platform-manifest.json +4 -4
- package/references/.render-manifest.json +4 -4
- package/references/02-project-config.md +73 -29
- package/schemas/release-plan.schema.json +47 -0
- package/schemas/release-project.schema.json +24 -0
- package/skills/release-prepare/SKILL.md +5 -1
- package/skills-src/release-prepare/SKILL.md +5 -1
- package/src/adapters/git-github.mjs +139 -26
- package/src/commands/prepare.mjs +76 -6
- package/src/commands/publish.mjs +36 -0
- package/src/commands/verify.mjs +53 -1
- package/src/core/config.mjs +31 -0
- package/src/core/plan.mjs +78 -0
- package/src/core/release-assets.mjs +54 -0
- package/src/core/source-authority.mjs +127 -3
- package/src/producers/build-adapters.mjs +1 -1
|
@@ -53,6 +53,53 @@
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
},
|
|
56
|
+
"publicSourceAuthorityReceipt": {
|
|
57
|
+
"type": "object",
|
|
58
|
+
"required": [
|
|
59
|
+
"coordinatorUnitId",
|
|
60
|
+
"subjectUnitIds",
|
|
61
|
+
"asset"
|
|
62
|
+
],
|
|
63
|
+
"additionalProperties": false,
|
|
64
|
+
"properties": {
|
|
65
|
+
"coordinatorUnitId": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"pattern": "^(?!\\.{1,2}$)[A-Za-z0-9][A-Za-z0-9._-]*$"
|
|
68
|
+
},
|
|
69
|
+
"subjectUnitIds": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"minItems": 1,
|
|
72
|
+
"uniqueItems": true,
|
|
73
|
+
"items": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"pattern": "^(?!\\.{1,2}$)[A-Za-z0-9][A-Za-z0-9._-]*$"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"asset": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"required": [
|
|
81
|
+
"name",
|
|
82
|
+
"path",
|
|
83
|
+
"sha256"
|
|
84
|
+
],
|
|
85
|
+
"additionalProperties": false,
|
|
86
|
+
"properties": {
|
|
87
|
+
"name": {
|
|
88
|
+
"const": "source-authority-receipt.json"
|
|
89
|
+
},
|
|
90
|
+
"path": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"minLength": 1,
|
|
93
|
+
"pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\).+$"
|
|
94
|
+
},
|
|
95
|
+
"sha256": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
56
103
|
"baseline": {
|
|
57
104
|
"type": "object",
|
|
58
105
|
"required": [
|
|
@@ -44,6 +44,30 @@
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
|
+
"publicSourceAuthorityReceipt": {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"description": "Optional public source-authority receipt uploaded to one coordinator GitHub Release after all subject npm tarballs are frozen.",
|
|
50
|
+
"required": [
|
|
51
|
+
"coordinatorUnitId",
|
|
52
|
+
"subjectUnitIds"
|
|
53
|
+
],
|
|
54
|
+
"additionalProperties": false,
|
|
55
|
+
"properties": {
|
|
56
|
+
"coordinatorUnitId": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"pattern": "^(?!\\.{1,2}$)[A-Za-z0-9][A-Za-z0-9._-]*$"
|
|
59
|
+
},
|
|
60
|
+
"subjectUnitIds": {
|
|
61
|
+
"type": "array",
|
|
62
|
+
"minItems": 1,
|
|
63
|
+
"uniqueItems": true,
|
|
64
|
+
"items": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"pattern": "^(?!\\.{1,2}$)[A-Za-z0-9][A-Za-z0-9._-]*$"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
47
71
|
"releaseUnits": {
|
|
48
72
|
"type": "array",
|
|
49
73
|
"minItems": 1,
|
|
@@ -5,7 +5,7 @@ description: Identify project topology and evaluate gaps in public documentation
|
|
|
5
5
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
|
-
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md
|
|
8
|
+
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
9
|
> 令 `RELEASE_SKILL_ENTRY=PLUGIN_ROOT/bin/release-skill.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
10
|
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_ENTRY`,然后执行 `node "$RELEASE_SKILL_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|
|
@@ -5,7 +5,7 @@ description: "Config-only workflow profile: route confirms config-only diff, ass
|
|
|
5
5
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
|
-
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md
|
|
8
|
+
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
9
|
> 令 `RELEASE_SKILL_ENTRY=PLUGIN_ROOT/bin/release-skill.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
10
|
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_ENTRY`,然后执行 `node "$RELEASE_SKILL_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|
|
@@ -5,7 +5,7 @@ description: "Docs-only workflow profile: route confirms docs-only diff, style-g
|
|
|
5
5
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
|
-
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md
|
|
8
|
+
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
9
|
> 令 `RELEASE_SKILL_ENTRY=PLUGIN_ROOT/bin/release-skill.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
10
|
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_ENTRY`,然后执行 `node "$RELEASE_SKILL_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|
|
@@ -5,7 +5,7 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
5
5
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
|
-
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md
|
|
8
|
+
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
9
|
> 令 `RELEASE_SKILL_ENTRY=PLUGIN_ROOT/bin/release-skill.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
10
|
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_ENTRY`,然后执行 `node "$RELEASE_SKILL_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|
|
@@ -5,7 +5,7 @@ description: "Marketplace-only workflow profile: route confirms marketplace-only
|
|
|
5
5
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
|
-
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md
|
|
8
|
+
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
9
|
> 令 `RELEASE_SKILL_ENTRY=PLUGIN_ROOT/bin/release-skill.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
10
|
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_ENTRY`,然后执行 `node "$RELEASE_SKILL_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|
|
@@ -5,7 +5,7 @@ description: Freeze an immutable release plan with local configuration, document
|
|
|
5
5
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
|
-
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md
|
|
8
|
+
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
9
|
> 令 `RELEASE_SKILL_ENTRY=PLUGIN_ROOT/bin/release-skill.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
10
|
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_ENTRY`,然后执行 `node "$RELEASE_SKILL_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|
|
@@ -20,7 +20,7 @@ description: Freeze an immutable release plan with local configuration, document
|
|
|
20
20
|
|
|
21
21
|
运行项目构建/测试 hook,生成公开快照并扫描泄漏,冻结不可变发布计划。prepare 自身不调用发布 adapter,但会执行用户配置的 hook。
|
|
22
22
|
|
|
23
|
-
**Hook 授权契约(配置时刻即授权,FM-16 处置 A)**: hook 是任意本地进程——在 `.release-skill/project.yaml` 中配置 hook 命令即完成授权,构成「配置时刻即授权」的显式契约。hook 不提供沙箱、无文件系统/网络隔离、触发前无确认点,命令调用本身即授权执行已配置的 hook 和 gate,不再设置额外人工授权环节;hook
|
|
23
|
+
**Hook 授权契约(配置时刻即授权,FM-16 处置 A)**: hook 是任意本地进程——在 `.release-skill/project.yaml` 中配置 hook 命令即完成授权,构成「配置时刻即授权」的显式契约。hook 不提供沙箱、无文件系统/网络隔离、触发前无确认点,命令调用本身即授权执行已配置的 hook 和 gate,不再设置额外人工授权环节;hook 可能产生项目目录外的副作用或远端写入,配置者须对其内容负责。旧参数 `--acknowledge-hook-side-effects` 和 `--acknowledge-gate-side-effects` 仍可解析,但只作为无效果的兼容输入,不能改变授权或执行语义。恢复「触发前强制确认门」属于后续加固项(属设计变更,需随新版本引入),当前版本不提供该确认门。
|
|
24
24
|
|
|
25
25
|
**阶段通过规则**: 本阶段的通过只能由 CLI exit code 0 和结构化状态码 `PREPARED` 确认。Agent 无权自行宣布计划冻结成功。
|
|
26
26
|
|
|
@@ -40,6 +40,10 @@ description: Freeze an immutable release plan with local configuration, document
|
|
|
40
40
|
|
|
41
41
|
若用户明确要求 GitHub+npm 生产发布,加入 `--production`。该模式还会封存独立
|
|
42
42
|
Git commit/tree 和 npm tarball,并把路径、SHA/integrity、branch/tag 写入计划。
|
|
43
|
+
配置声明 `publicSourceAuthorityReceipt` 时,prepare 必须在所有 subject npm tarball
|
|
44
|
+
冻结后生成 `source-authority-receipt.json`,并把该文件的路径与 SHA-256 绑定到
|
|
45
|
+
coordinator unit 的 `github-release` action。该能力不支持非生产 prepare;不得手工
|
|
46
|
+
补写 receipt 或把私有 plan/run 字段复制进公开文件。
|
|
43
47
|
每个 npm tarball 在计划落盘前必须静态验证 `package.json` 的具体
|
|
44
48
|
`bin`/`main`/`module`/`types`/`typings`/`exports` 入口均为 tarball 内普通文件;
|
|
45
49
|
该门禁不依赖项目是否配置 `requiredPublicFiles` 或 `smokeBin`。通配符 exports 不做
|
|
@@ -5,7 +5,7 @@ description: "从已批准的生产计划发布冻结 Git branch/tag、npm tarba
|
|
|
5
5
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
|
-
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md
|
|
8
|
+
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
9
|
> 令 `RELEASE_SKILL_ENTRY=PLUGIN_ROOT/bin/release-skill.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
10
|
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_ENTRY`,然后执行 `node "$RELEASE_SKILL_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|
|
@@ -5,7 +5,7 @@ description: Query remote actual state, handle partial publish successes, safe r
|
|
|
5
5
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
|
-
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md
|
|
8
|
+
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
9
|
> 令 `RELEASE_SKILL_ENTRY=PLUGIN_ROOT/bin/release-skill.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
10
|
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_ENTRY`,然后执行 `node "$RELEASE_SKILL_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|
|
@@ -5,7 +5,7 @@ description: "首次接入 release-skill:只读发现发布单元与个性化
|
|
|
5
5
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
|
-
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md
|
|
8
|
+
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
9
|
> 令 `RELEASE_SKILL_ENTRY=PLUGIN_ROOT/bin/release-skill.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
10
|
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_ENTRY`,然后执行 `node "$RELEASE_SKILL_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|
|
@@ -5,7 +5,7 @@ description: Post-publish verification including remote state recheck, exact npm
|
|
|
5
5
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
|
-
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md
|
|
8
|
+
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
9
|
> 令 `RELEASE_SKILL_ENTRY=PLUGIN_ROOT/bin/release-skill.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
10
|
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_ENTRY`,然后执行 `node "$RELEASE_SKILL_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|