rainskills 0.1.43 → 0.1.44
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/SKILL.md +2 -2
- package/install.sh +5 -6
- package/marketplace/rainskills/.claude-plugin/plugin.json +1 -1
- package/marketplace/rainskills/.codex-plugin/plugin.json +1 -1
- package/marketplace/rainskills/skills/rainskills/SKILL.md +3 -3
- package/package.json +2 -2
- package/rainbond-ai-assistant/references/generated/runtime-gate.md +2 -2
- package/rainbond-app-assistant/references/generated/runtime-gate.md +3 -3
- package/rainbond-app-version-assistant/references/generated/runtime-gate.md +2 -2
- package/rainbond-delivery-verifier/references/generated/runtime-gate.md +2 -2
- package/rainbond-env-sync/references/generated/runtime-gate.md +2 -2
- package/rainbond-fullstack-bootstrap/references/generated/runtime-gate.md +3 -3
- package/rainbond-fullstack-troubleshooter/references/generated/runtime-gate.md +2 -2
- package/rainbond-opensource-app-deploy/references/generated/runtime-gate.md +2 -2
- package/rainbond-platform-installer/SKILL.md +1 -1
- package/rainbond-platform-installer/scripts/auto-update.js +1 -0
- package/rainbond-platform-installer/scripts/host-targets.js +1 -1
- package/rainbond-platform-installer/scripts/installed-version.js +1 -1
- package/rainbond-platform-installer/scripts/single-runtime.js +9 -1
- package/rainbond-platform-installer/scripts/windows-onboarding.js +12 -1
- package/rainbond-platform-plugin-manager/references/generated/runtime-gate.md +2 -2
- package/rainbond-platform-query/references/generated/runtime-gate.md +2 -2
- package/rainbond-project-init/references/generated/runtime-gate.md +2 -2
- package/rainbond-template-installer/references/generated/runtime-gate.md +2 -2
- package/scripts/install-local-cli.mjs +1 -0
package/SKILL.md
CHANGED
|
@@ -9,7 +9,7 @@ This is the single marketplace entry for the complete Rainskills product. The in
|
|
|
9
9
|
|
|
10
10
|
## Initialize
|
|
11
11
|
|
|
12
|
-
1. Detect the current host client and map it to exactly one supported installer target: Codex=`codex`, Claude Code=`claude`, Pi Agent=`pi`, DeepSeek Harness=`dsh`, WorkBuddy=`workbuddy`, or Hermes Agent=`hermes`. All six use the same CLI profile, installed Skills, and protected local Rainskills CLI; none requires a separate client MCP adapter. DeepSeek Harness installs to `$DSH_HOME/skills` (default `~/.dsh/skills`). WorkBuddy installs to `$WORKBUDDY_CONFIG_DIR/skills` (default `~/.workbuddy
|
|
12
|
+
1. Detect the current host client and map it to exactly one supported installer target: Codex=`codex`, Claude Code=`claude`, Pi Agent=`pi`, DeepSeek Harness=`dsh`, WorkBuddy=`workbuddy`, or Hermes Agent=`hermes`. All six use the same CLI profile, installed Skills, and protected local Rainskills CLI; none requires a separate client MCP adapter. DeepSeek Harness installs to `$DSH_HOME/skills` (default `~/.dsh/skills`). WorkBuddy installs to `$WORKBUDDY_CONFIG_DIR/skills` (default `~/.workbuddy/skills`). Hermes Agent installs to `$HERMES_HOME/skills` (default `~/.hermes/skills`); `AI_AGENT=hermes-agent` or `HERMES_AGENT=true` is a reliable fallback when the host must be detected from a terminal subprocess. The macOS, Linux, and WSL installer intentionally does not support OpenClaw; report that limitation instead of invoking an unsupported target. Do not ask the user which supported client they are currently using. If the host cannot be determined reliably, omit the target and let the installer ask.
|
|
13
13
|
2. Resolve the directory containing this `SKILL.md`. On native Windows, if the adjacent `bin/rainskills.js` exists, run it by absolute path with the detected target in an attached interactive terminal: `node <skill-directory>/bin/rainskills.js <target>`. On macOS, Linux, or WSL, if the adjacent `install.sh` exists, run `bash <skill-directory>/install.sh <target>` the same way. Do not replace the installer with manual file copies.
|
|
14
14
|
3. Keep stdin, stdout, and stderr attached. When `RAINSKILLS_USER_INPUT_REQUIRED` appears, pause for that installer choice. If the installer emits `rainskills.next-action.v1`, execute only its fixed `argv` through the same launcher; never evaluate output as a shell command. If the adjacent `bin/rainskills.js` exists, use it for fixed next actions; otherwise use the same versioned npm package fallback described below.
|
|
15
15
|
4. Stay attached until every independent Skill is installed. Do not select, connect, or configure an application runtime during installation. In the user-facing response, output only the fixed completion message below.
|
|
@@ -54,7 +54,7 @@ Hermes Agent 中必须使用 `terminal` 以 `background=true` 启动授权命令
|
|
|
54
54
|
|
|
55
55
|
DeepSeek Harness 和 WorkBuddy 也必须保持原命令附着直到退出;如果宿主把长命令转成持久终端或后台任务,只能轮询该原始命令句柄,不得另起 `runtime status` 推测授权结果。WorkBuddy 安装后若当前任务的 Skill 清单尚未刷新,在下一条业务动作前先刷新 Skill 列表或新建任务,不得退回内置 Sites 代替 Rainbond 部署。
|
|
56
56
|
|
|
57
|
-
Rainskills 只保存一个全局运行环境,不维护环境列表、名称、默认值或环境 ID。使用固定 launcher `node <home>/.rainbond/lib/rainskills/bin/rainskills.js`(运行包版本 `rainskills@0.1.
|
|
57
|
+
Rainskills 只保存一个全局运行环境,不维护环境列表、名称、默认值或环境 ID。使用固定 launcher `node <home>/.rainbond/lib/rainskills/bin/rainskills.js`(运行包版本 `rainskills@0.1.44`):
|
|
58
58
|
|
|
59
59
|
- 状态:执行 `runtime status --json`。
|
|
60
60
|
- 首次连接:执行 `runtime connect <target> --saas` 或 `runtime connect <target> --rainbond-url <Console origin>`。
|
package/install.sh
CHANGED
|
@@ -251,7 +251,7 @@ Environment:
|
|
|
251
251
|
RAINBOND_LOGIN_TIMEOUT Browser login timeout in seconds (default 600)
|
|
252
252
|
RAINSKILLS_NO_BROWSER Set to 1 to print the authorization URL without opening it
|
|
253
253
|
DSH_HOME DeepSeek Harness home (default: ~/.dsh)
|
|
254
|
-
WORKBUDDY_CONFIG_DIR WorkBuddy config home (default: ~/.workbuddy
|
|
254
|
+
WORKBUDDY_CONFIG_DIR WorkBuddy config home (default: ~/.workbuddy)
|
|
255
255
|
HERMES_HOME Hermes Agent home (default: ~/.hermes)
|
|
256
256
|
EOF
|
|
257
257
|
}
|
|
@@ -1489,7 +1489,7 @@ collect_destinations() {
|
|
|
1489
1489
|
destinations+=("${DSH_HOME:-$HOME/.dsh}/skills")
|
|
1490
1490
|
;;
|
|
1491
1491
|
workbuddy)
|
|
1492
|
-
destinations+=("${WORKBUDDY_CONFIG_DIR:-$HOME/.workbuddy
|
|
1492
|
+
destinations+=("${WORKBUDDY_CONFIG_DIR:-$HOME/.workbuddy}/skills")
|
|
1493
1493
|
;;
|
|
1494
1494
|
hermes)
|
|
1495
1495
|
destinations+=("${HERMES_HOME:-$HOME/.hermes}/skills")
|
|
@@ -1499,7 +1499,7 @@ collect_destinations() {
|
|
|
1499
1499
|
destinations+=("$HOME/.codex/skills")
|
|
1500
1500
|
destinations+=("$HOME/.pi/agent/skills")
|
|
1501
1501
|
destinations+=("${DSH_HOME:-$HOME/.dsh}/skills")
|
|
1502
|
-
destinations+=("${WORKBUDDY_CONFIG_DIR:-$HOME/.workbuddy
|
|
1502
|
+
destinations+=("${WORKBUDDY_CONFIG_DIR:-$HOME/.workbuddy}/skills")
|
|
1503
1503
|
destinations+=("${HERMES_HOME:-$HOME/.hermes}/skills")
|
|
1504
1504
|
;;
|
|
1505
1505
|
*)
|
|
@@ -3177,9 +3177,8 @@ main() {
|
|
|
3177
3177
|
[[ "${#skills[@]}" -gt 0 ]] || die "在 $SCRIPT_DIR 下没有找到 rainbond-* skill 目录。"
|
|
3178
3178
|
|
|
3179
3179
|
local root_skill_dir="$SCRIPT_DIR/marketplace/rainskills/skills/rainskills"
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
fi
|
|
3180
|
+
[[ -d "$root_skill_dir" ]] || die "Rainskills 安装包缺少 rainskills 根入口 Skill。"
|
|
3181
|
+
skills+=("$root_skill_dir")
|
|
3183
3182
|
|
|
3184
3183
|
for skill_dir in "${skills[@]}"; do
|
|
3185
3184
|
validate_skill_dir "$skill_dir"
|
|
@@ -9,12 +9,12 @@ This is the single marketplace entry for the complete Rainskills product. The in
|
|
|
9
9
|
|
|
10
10
|
## Initialize
|
|
11
11
|
|
|
12
|
-
1. Detect the current host client and map it to exactly one supported installer target: Codex=`codex`, Claude Code=`claude`, Pi Agent=`pi`, DeepSeek Harness=`dsh`, WorkBuddy=`workbuddy`, or Hermes Agent=`hermes`. All six use the same CLI profile, installed Skills, and protected local Rainskills CLI; none requires a separate client MCP adapter. DeepSeek Harness installs to `$DSH_HOME/skills` (default `~/.dsh/skills`). WorkBuddy installs to `$WORKBUDDY_CONFIG_DIR/skills` (default `~/.workbuddy
|
|
12
|
+
1. Detect the current host client and map it to exactly one supported installer target: Codex=`codex`, Claude Code=`claude`, Pi Agent=`pi`, DeepSeek Harness=`dsh`, WorkBuddy=`workbuddy`, or Hermes Agent=`hermes`. All six use the same CLI profile, installed Skills, and protected local Rainskills CLI; none requires a separate client MCP adapter. DeepSeek Harness installs to `$DSH_HOME/skills` (default `~/.dsh/skills`). WorkBuddy installs to `$WORKBUDDY_CONFIG_DIR/skills` (default `~/.workbuddy/skills`). Hermes Agent installs to `$HERMES_HOME/skills` (default `~/.hermes/skills`); `AI_AGENT=hermes-agent` or `HERMES_AGENT=true` is a reliable fallback when the host must be detected from a terminal subprocess. The macOS, Linux, and WSL installer intentionally does not support OpenClaw; report that limitation instead of invoking an unsupported target. Do not ask the user which supported client they are currently using. If the host cannot be determined reliably, omit the target and let the installer ask.
|
|
13
13
|
2. Resolve the directory containing this `SKILL.md`. On native Windows, if the adjacent `bin/rainskills.js` exists, run it by absolute path with the detected target in an attached interactive terminal: `node <skill-directory>/bin/rainskills.js <target>`. On macOS, Linux, or WSL, if the adjacent `install.sh` exists, run `bash <skill-directory>/install.sh <target>` the same way. Do not replace the installer with manual file copies.
|
|
14
14
|
3. Keep stdin, stdout, and stderr attached. When `RAINSKILLS_USER_INPUT_REQUIRED` appears, pause for that installer choice. If the installer emits `rainskills.next-action.v1`, execute only its fixed `argv` through the same launcher; never evaluate output as a shell command. If the adjacent `bin/rainskills.js` exists, use it for fixed next actions; otherwise use the same versioned npm package fallback described below.
|
|
15
15
|
4. Stay attached until every independent Skill is installed. Do not select, connect, or configure an application runtime during installation. In the user-facing response, output only the fixed completion message below.
|
|
16
16
|
|
|
17
|
-
If the adjacent installer is missing, check the local Node.js version before choosing the fallback. With `npx` and Node.js 18 or newer, use `npx --yes rainskills@0.1.
|
|
17
|
+
If the adjacent installer is missing, check the local Node.js version before choosing the fallback. With `npx` and Node.js 18 or newer, use `npx --yes rainskills@0.1.44 <target>`. With no Node.js or a version below 18, use `bash <(curl -fsSL https://get.rainbond.com/rainskills/install.sh) <target>` instead. Omit `<target>` only when the host cannot be determined reliably. Keep either command attached to the interactive terminal. For an update or repair, refresh this marketplace Skill first, then run the installer again; it compares and updates every independent internal Skill.
|
|
18
18
|
|
|
19
19
|
Skills-only 安装不需要 Node.js;CDN fallback 只负责安装 Skill 文件,不代表运行环境连接、应用部署或平台安装已经可执行。用户首次提出需要运行环境的动作时,对应业务 Skill 才检查 Node.js;固定 Rainskills launcher 需要 Node.js 18 或更高版本。缺失或版本过低时保留原始 intent 并停止,等待用户或 agent 明确同意安装或升级 Node.js,安装完成消息不得提前提示 Node.js。
|
|
20
20
|
|
|
@@ -54,7 +54,7 @@ Hermes Agent 中必须使用 `terminal` 以 `background=true` 启动授权命令
|
|
|
54
54
|
|
|
55
55
|
DeepSeek Harness 和 WorkBuddy 也必须保持原命令附着直到退出;如果宿主把长命令转成持久终端或后台任务,只能轮询该原始命令句柄,不得另起 `runtime status` 推测授权结果。WorkBuddy 安装后若当前任务的 Skill 清单尚未刷新,在下一条业务动作前先刷新 Skill 列表或新建任务,不得退回内置 Sites 代替 Rainbond 部署。
|
|
56
56
|
|
|
57
|
-
Rainskills 只保存一个全局运行环境,不维护环境列表、名称、默认值或环境 ID。使用固定 launcher `node <home>/.rainbond/lib/rainskills/bin/rainskills.js`(运行包版本 `rainskills@0.1.
|
|
57
|
+
Rainskills 只保存一个全局运行环境,不维护环境列表、名称、默认值或环境 ID。使用固定 launcher `node <home>/.rainbond/lib/rainskills/bin/rainskills.js`(运行包版本 `rainskills@0.1.44`):
|
|
58
58
|
|
|
59
59
|
- 状态:执行 `runtime status --json`。
|
|
60
60
|
- 首次连接:执行 `runtime connect <target> --saas` 或 `runtime connect <target> --rainbond-url <Console origin>`。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rainskills",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.44",
|
|
4
4
|
"description": "Agent Skills for deploying, troubleshooting, and verifying applications on Rainbond from Codex, Claude Code, and other AI coding agents",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://www.rainbond.com/rainskills",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
"test:runtime-routing": "node --test tests/runtime-onboarding-routing.test.js && python3 rainbond-app-assistant/scripts/validate_progressive_loading.py && python3 rainbond-app-assistant/scripts/validate_cross_skill_routing.py && python3 tests/progressive-loading-validators.test.py && python3 tests/local_project_init_gate_test.py && python3 tests/run_skill_routing_evals.py",
|
|
114
114
|
"test:telemetry": "node --test tests/telemetry.test.js",
|
|
115
115
|
"test:platform": "node --test tests/platform-installer.test.js tests/host-cluster-installer.test.js tests/existing-kubernetes-installer.test.js tests/ssh-key-setup.test.js",
|
|
116
|
-
"test:windows": "node --test tests/windows-onboarding.test.js tests/windows-platform.test.js",
|
|
116
|
+
"test:windows": "node --test tests/windows-onboarding.test.js tests/windows-platform.test.js tests/windows-runtime-store.test.js",
|
|
117
117
|
"test:package-upload": "python3 tests/package_upload_helper_test.py && python3 tests/package_upload_workflow_contract_test.py && python3 rainbond-fullstack-bootstrap/scripts/run_bootstrap_evals.py",
|
|
118
118
|
"test:package": "node --test tests/npm-package.test.js",
|
|
119
119
|
"test:installer": "bash tests/browser_authorization_mode_test.sh && bash tests/device_authorization_flow_test.sh && python3 tests/install_test_suite_tty_test.py",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: 407be69c4a1e05267351de92bea3bd86de25e214da29ccab0161cf03995010b4 -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
@@ -46,7 +46,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
46
46
|
```json
|
|
47
47
|
{
|
|
48
48
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
49
|
-
"package_version": "rainskills@0.1.
|
|
49
|
+
"package_version": "rainskills@0.1.44",
|
|
50
50
|
"runtime_status": [
|
|
51
51
|
"node",
|
|
52
52
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: a5776748a0eea260fdab887e06ab14e942104a91af58376b6074a16bfaa8c3a8 -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
6
6
|
|
|
7
7
|
本机只允许连接一个 Rainbond 运行环境。当前 Skill 在本会话第一次调用 Rainbond 前,执行固定 launcher 的 `runtime status --json`。只有命令退出码为 0、`state=connected` 且 `usable=true` 时才继续。不得配置或直接调用客户端 MCP,不得枚举环境、读取凭据、创建业务 operation,或生成运行环境 ID、业务 operation ID 与 intent JSON。
|
|
8
8
|
|
|
9
|
-
运行状态的 `package_version` 必须与下方 JSON contract 完全一致;缺失或不一致时先执行固定版本 `rainskills@0.1.
|
|
9
|
+
运行状态的 `package_version` 必须与下方 JSON contract 完全一致;缺失或不一致时先执行固定版本 `rainskills@0.1.44` 的更新/修复流程。不得在版本错配时继续业务调用。
|
|
10
10
|
|
|
11
11
|
没有可用运行环境时,严格按下方 overlay 的 `missing_runtime_mode` 进入对应的 Runtime Routing;不得扩大可选环境范围。连接和重新授权必须使用浏览器 Device Flow,不复用 Shell 中缓存的 JWT;Device Flow 不依赖 stdin TTY,必须保持进程附着直到完成。新凭据只有通过 live probe 后才可覆盖唯一运行环境。CLI 返回 401 时,只读调用可在 `runtime reconnect` 成功后重试一次;写调用不得自动重放,必须先查询平台真实状态。403 直接停止,不重新授权。
|
|
12
12
|
|
|
@@ -45,7 +45,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
45
45
|
```json
|
|
46
46
|
{
|
|
47
47
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
48
|
-
"package_version": "rainskills@0.1.
|
|
48
|
+
"package_version": "rainskills@0.1.44",
|
|
49
49
|
"runtime_status": [
|
|
50
50
|
"node",
|
|
51
51
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: 0207d062ca886a2af80e400a85489eda888379f1bffe23d1fdc30ca7de3698d7 -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
@@ -44,7 +44,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
44
44
|
```json
|
|
45
45
|
{
|
|
46
46
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
47
|
-
"package_version": "rainskills@0.1.
|
|
47
|
+
"package_version": "rainskills@0.1.44",
|
|
48
48
|
"runtime_status": [
|
|
49
49
|
"node",
|
|
50
50
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: 7b579e60e98ccb039e5bb1b17bebbd0b4f19441159a5ef7bfc4d5ddc36bfb97a -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
@@ -45,7 +45,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
45
45
|
```json
|
|
46
46
|
{
|
|
47
47
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
48
|
-
"package_version": "rainskills@0.1.
|
|
48
|
+
"package_version": "rainskills@0.1.44",
|
|
49
49
|
"runtime_status": [
|
|
50
50
|
"node",
|
|
51
51
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: e324c222832c1fa91a7205587d637a77cdfcc28cc8b075608b179a0fbac992ef -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
@@ -45,7 +45,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
45
45
|
```json
|
|
46
46
|
{
|
|
47
47
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
48
|
-
"package_version": "rainskills@0.1.
|
|
48
|
+
"package_version": "rainskills@0.1.44",
|
|
49
49
|
"runtime_status": [
|
|
50
50
|
"node",
|
|
51
51
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: af604e84211aa7dc20a033117bd0d39720d7cace979068864f473cd2c79aa7fa -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
6
6
|
|
|
7
7
|
本机只允许连接一个 Rainbond 运行环境。当前 Skill 在本会话第一次调用 Rainbond 前,执行固定 launcher 的 `runtime status --json`。只有命令退出码为 0、`state=connected` 且 `usable=true` 时才继续。不得配置或直接调用客户端 MCP,不得枚举环境、读取凭据、创建业务 operation,或生成运行环境 ID、业务 operation ID 与 intent JSON。
|
|
8
8
|
|
|
9
|
-
运行状态的 `package_version` 必须与下方 JSON contract 完全一致;缺失或不一致时先执行固定版本 `rainskills@0.1.
|
|
9
|
+
运行状态的 `package_version` 必须与下方 JSON contract 完全一致;缺失或不一致时先执行固定版本 `rainskills@0.1.44` 的更新/修复流程。不得在版本错配时继续业务调用。
|
|
10
10
|
|
|
11
11
|
没有可用运行环境时,严格按下方 overlay 的 `missing_runtime_mode` 进入对应的 Runtime Routing;不得扩大可选环境范围。连接和重新授权必须使用浏览器 Device Flow,不复用 Shell 中缓存的 JWT;Device Flow 不依赖 stdin TTY,必须保持进程附着直到完成。新凭据只有通过 live probe 后才可覆盖唯一运行环境。CLI 返回 401 时,只读调用可在 `runtime reconnect` 成功后重试一次;写调用不得自动重放,必须先查询平台真实状态。403 直接停止,不重新授权。
|
|
12
12
|
|
|
@@ -45,7 +45,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
45
45
|
```json
|
|
46
46
|
{
|
|
47
47
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
48
|
-
"package_version": "rainskills@0.1.
|
|
48
|
+
"package_version": "rainskills@0.1.44",
|
|
49
49
|
"runtime_status": [
|
|
50
50
|
"node",
|
|
51
51
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: 705856e35a6691b7295b8fec2e4bc6a9aa5f806a462cbfb5c91dda530b692183 -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
@@ -45,7 +45,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
45
45
|
```json
|
|
46
46
|
{
|
|
47
47
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
48
|
-
"package_version": "rainskills@0.1.
|
|
48
|
+
"package_version": "rainskills@0.1.44",
|
|
49
49
|
"runtime_status": [
|
|
50
50
|
"node",
|
|
51
51
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: e7f02f9aa92464bf47e7f92126e6075b1f88616093e64aefb953ee814166444f -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
@@ -45,7 +45,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
45
45
|
```json
|
|
46
46
|
{
|
|
47
47
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
48
|
-
"package_version": "rainskills@0.1.
|
|
48
|
+
"package_version": "rainskills@0.1.44",
|
|
49
49
|
"runtime_status": [
|
|
50
50
|
"node",
|
|
51
51
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -32,7 +32,7 @@ Do not use it to deploy an application to an existing Rainbond. Route those requ
|
|
|
32
32
|
## Workflow
|
|
33
33
|
|
|
34
34
|
1. Read [installation-policy.md](references/installation-policy.md).
|
|
35
|
-
2. Use the installed local launcher `["node", "<home>/.rainbond/lib/rainskills/bin/rainskills.js"]`; its protected runtime package marker is `rainskills@0.1.
|
|
35
|
+
2. Use the installed local launcher `["node", "<home>/.rainbond/lib/rainskills/bin/rainskills.js"]`; its protected runtime package marker is `rainskills@0.1.44` and must equal this package's `package.json`. For a Rainskills marker, first validate schema `rainskills.next-action.v1`, action, onboarding id, and the bounded `argv` array, then append that array to the launcher. Never use `latest` or evaluate a shell string from output.
|
|
36
36
|
3. 业务 Skill 的四项运行环境菜单会把本机或独立服务器选择写入 `rainskills.next-action.v1` 的显式 `--location`;收到这类 next-action 后直接执行固定 argv,不得再次调用 `private-deployment-location`。只有用户直接要求安装 Rainbond 平台且尚未选择部署位置时,才执行 launcher + `["runtime", "message", "--id", "private-deployment-location"]` 并原样输出固定的三项部署位置消息:选择 1 后执行带 `["--location", "local", "--mode", "single-node"]` 的 `platform install`;选择 2 后执行带 `["--location", "server"]` 的 `platform install`,由 helper 继续显示固定的服务器类型消息;选择 3 后执行 launcher + `["runtime", "message", "--id", "private-console-origin"]` 并进入已有环境连接,不得执行 `platform install`。平台安装 onboarding 只保存安装断点,不保存或恢复业务 intent。
|
|
37
37
|
4. Let the helper perform one read-only preflight against the already selected local or remote target, then show resources, blockers, and applicable host changes. Never invoke `platform install` without an explicit `--location`; the helper must not ask for the deployment location again.
|
|
38
38
|
5. 主机集群开始前必须获得 explicit confirmation,并使用受限 AI 交接:首次调用在固定安装 argv 后追加 `--agent-handoff`,记录该子进程会话;用户确认后,使用相同固定 argv 追加 `--agent-handoff --yes` 一次。不得向等待进程写入 `y`、不得启动第二个竞争安装、不得 `kill` 安装进程,也不得让用户复制完整安装或恢复命令。用户取消时,仅使用同一 argv 追加 `--agent-handoff --cancel`;它只能清除匹配的待确认状态,不能建立 SSH 连接或修改服务器。
|
|
@@ -36,7 +36,7 @@ function workBuddySkillsDirectory(home, env = process.env) {
|
|
|
36
36
|
const configHome = typeof env.WORKBUDDY_CONFIG_DIR === "string"
|
|
37
37
|
&& env.WORKBUDDY_CONFIG_DIR.trim()
|
|
38
38
|
? env.WORKBUDDY_CONFIG_DIR.trim()
|
|
39
|
-
: path.join(home, ".workbuddy
|
|
39
|
+
: path.join(home, ".workbuddy");
|
|
40
40
|
return path.join(path.resolve(configHome), "skills");
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -57,10 +57,18 @@ function validateSingleRuntime(input) {
|
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
function createDefaultStateStore(platform, home) {
|
|
61
|
+
if (platform === "win32") {
|
|
62
|
+
const { createWindowsSecureStateStore } = require("./windows-platform.js");
|
|
63
|
+
return createWindowsSecureStateStore({ home });
|
|
64
|
+
}
|
|
65
|
+
return createSecureStateStore({ platform, home });
|
|
66
|
+
}
|
|
67
|
+
|
|
60
68
|
function createSingleRuntimeStore({
|
|
61
69
|
platform = process.platform,
|
|
62
70
|
home = os.homedir(),
|
|
63
|
-
stateStore =
|
|
71
|
+
stateStore = createDefaultStateStore(platform, home),
|
|
64
72
|
now = () => new Date().toISOString(),
|
|
65
73
|
} = {}) {
|
|
66
74
|
const runtimePath = path.join(home, ".rainbond", "rainskills", "single-runtime-v1.json");
|
|
@@ -197,7 +197,18 @@ function discoverSkills(packageRoot) {
|
|
|
197
197
|
"skills",
|
|
198
198
|
"rainskills"
|
|
199
199
|
);
|
|
200
|
-
if (fs.existsSync(rootSkill))
|
|
200
|
+
if (fs.existsSync(rootSkill)) {
|
|
201
|
+
skills.push(rootSkill);
|
|
202
|
+
} else {
|
|
203
|
+
const packageFile = path.join(packageRoot, "package.json");
|
|
204
|
+
let officialPackage = false;
|
|
205
|
+
try {
|
|
206
|
+
officialPackage = JSON.parse(fs.readFileSync(packageFile, "utf8")).name === "rainskills";
|
|
207
|
+
} catch (error) {
|
|
208
|
+
if (error.code !== "ENOENT") throw error;
|
|
209
|
+
}
|
|
210
|
+
if (officialPackage) throw new Error("官方 Rainskills 包缺少 rainskills 根入口 Skill");
|
|
211
|
+
}
|
|
201
212
|
if (skills.length === 0) {
|
|
202
213
|
throw new Error(`在 ${packageRoot} 下没有找到 rainbond-* skill 目录`);
|
|
203
214
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: 6e8d3eb9fe4bbc9d07ce8318824b6b0f35cdd938bb90819e4f7a882b2231a432 -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
@@ -45,7 +45,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
45
45
|
```json
|
|
46
46
|
{
|
|
47
47
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
48
|
-
"package_version": "rainskills@0.1.
|
|
48
|
+
"package_version": "rainskills@0.1.44",
|
|
49
49
|
"runtime_status": [
|
|
50
50
|
"node",
|
|
51
51
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: 6680fe773d693223188f304b9c560d978d38fd015090bff55b806017be5ee165 -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
@@ -45,7 +45,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
45
45
|
```json
|
|
46
46
|
{
|
|
47
47
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
48
|
-
"package_version": "rainskills@0.1.
|
|
48
|
+
"package_version": "rainskills@0.1.44",
|
|
49
49
|
"runtime_status": [
|
|
50
50
|
"node",
|
|
51
51
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: 7b78902f6a310444505373a91113a650031ee468dc3bd61c5bd7f70966878890 -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
@@ -45,7 +45,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
45
45
|
```json
|
|
46
46
|
{
|
|
47
47
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
48
|
-
"package_version": "rainskills@0.1.
|
|
48
|
+
"package_version": "rainskills@0.1.44",
|
|
49
49
|
"runtime_status": [
|
|
50
50
|
"node",
|
|
51
51
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- generated-by: scripts/sync-runtime-contracts.mjs -->
|
|
2
|
-
<!-- source-sha256:
|
|
2
|
+
<!-- source-sha256: 8776f14d0763a14a1ec01da5080e0131231b18133b10b274a38c5815564979e5 -->
|
|
3
3
|
<!-- profile: cli -->
|
|
4
4
|
<!-- rainskills-runtime-gate:start -->
|
|
5
5
|
# 单运行环境 CLI 门禁(生成文件)
|
|
@@ -45,7 +45,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
|
|
|
45
45
|
```json
|
|
46
46
|
{
|
|
47
47
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
48
|
-
"package_version": "rainskills@0.1.
|
|
48
|
+
"package_version": "rainskills@0.1.44",
|
|
49
49
|
"runtime_status": [
|
|
50
50
|
"node",
|
|
51
51
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|