rainskills 0.1.0 → 0.1.2

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.
Files changed (116) hide show
  1. package/README.md +156 -420
  2. package/SKILL.md +37 -7
  3. package/agents/openai.yaml +2 -2
  4. package/bin/rainskills-tools.js +712 -0
  5. package/bin/rainskills.js +1109 -4
  6. package/install.sh +536 -63
  7. package/marketplace/rainskills/.claude-plugin/plugin.json +2 -2
  8. package/marketplace/rainskills/.codex-plugin/plugin.json +5 -5
  9. package/marketplace/rainskills/skills/rainskills/SKILL.md +38 -8
  10. package/package.json +14 -5
  11. package/pi/rainskills-mcp.ts +214 -1850
  12. package/rainbond-app-assistant/SKILL.md +123 -49
  13. package/rainbond-app-assistant/evals/01-linked-topology-missing.response.md +3 -3
  14. package/rainbond-app-assistant/evals/02-linked-topology-building.response.md +3 -3
  15. package/rainbond-app-assistant/evals/03-runtime-healthy-delivery-unknown.response.md +3 -3
  16. package/rainbond-app-assistant/evals/04-delivered-stop-without-promotion.expected.yaml +1 -1
  17. package/rainbond-app-assistant/evals/04-delivered-stop-without-promotion.response.md +1 -1
  18. package/rainbond-app-assistant/evals/05-delivered-explicit-dev-to-test.response.md +3 -3
  19. package/rainbond-app-assistant/evals/06-manual-validation-stop.expected.yaml +1 -1
  20. package/rainbond-app-assistant/evals/06-manual-validation-stop.response.md +3 -3
  21. package/rainbond-app-assistant/evals/07-cluster-capacity-blocked.response.md +4 -4
  22. package/rainbond-app-assistant/evals/08-code-build-handoff-stop.response.md +2 -2
  23. package/rainbond-app-assistant/evals/09-source-backed-failure-no-fallback.response.md +2 -2
  24. package/rainbond-app-assistant/evals/10-identity-ambiguous-stop.response.md +3 -3
  25. package/rainbond-app-assistant/evals/12-complex-suite-needs-descriptor-stop.response.md +2 -2
  26. package/rainbond-app-assistant/evals/13-explicit-git-url-locks-source.response.md +2 -2
  27. package/rainbond-app-assistant/evals/14-strategy-switch-cleans-residue.response.md +2 -2
  28. package/rainbond-app-assistant/evals/15-turn-discipline-reuse-alias.response.md +2 -2
  29. package/rainbond-app-assistant/references/operational-reference.md +77 -0
  30. package/rainbond-app-assistant/references/output-contract.md +454 -0
  31. package/rainbond-app-assistant/references/product-object-model.md +1558 -0
  32. package/rainbond-app-assistant/references/workflow-rules.md +343 -0
  33. package/rainbond-app-assistant/schemas/app-assistant-result.schema.yaml +6 -1
  34. package/rainbond-app-version-assistant/SKILL.md +57 -18
  35. package/rainbond-delivery-verifier/SKILL.md +86 -13
  36. package/rainbond-env-sync/SKILL.md +52 -11
  37. package/rainbond-fullstack-bootstrap/SKILL.md +79 -11
  38. package/rainbond-fullstack-bootstrap/evals/01-reuse-only.response.md +1 -1
  39. package/rainbond-fullstack-bootstrap/evals/02-deferred-dependency.response.md +1 -1
  40. package/rainbond-fullstack-bootstrap/evals/03-capacity-blocked.response.md +1 -1
  41. package/rainbond-fullstack-bootstrap/evals/04-template-skip.response.md +1 -1
  42. package/rainbond-fullstack-bootstrap/evals/05-source-ambiguity-stop.response.md +1 -1
  43. package/rainbond-fullstack-bootstrap/evals/06-external-artifact-unreachable.response.md +1 -1
  44. package/rainbond-fullstack-bootstrap/evals/07-provider-connection-contract.response.md +1 -1
  45. package/rainbond-fullstack-bootstrap/evals/08-explicit-dependency-after-manual-components.response.md +1 -1
  46. package/rainbond-fullstack-bootstrap/evals/09-inferred-provider-consumer-gate.response.md +1 -1
  47. package/rainbond-fullstack-bootstrap/evals/10-compose-service-name-not-hostname.response.md +1 -1
  48. package/rainbond-fullstack-bootstrap/evals/11-reverse-proxy-not-dropped.response.md +1 -1
  49. package/rainbond-fullstack-bootstrap/evals/12-optional-services-disclose-not-deploy.response.md +1 -1
  50. package/rainbond-fullstack-bootstrap/evals/13-env-reference-dependency-completeness.response.md +1 -1
  51. package/rainbond-fullstack-bootstrap/evals/14-client-package-upload.expected.yaml +1 -1
  52. package/rainbond-fullstack-bootstrap/evals/14-client-package-upload.response.md +3 -3
  53. package/rainbond-fullstack-bootstrap/evals/15-unfinished-dockerfile-recovery.expected.yaml +25 -0
  54. package/rainbond-fullstack-bootstrap/evals/15-unfinished-dockerfile-recovery.response.md +44 -0
  55. package/rainbond-fullstack-bootstrap/evals/16-complete-cnb-recreate-confirmed.expected.yaml +25 -0
  56. package/rainbond-fullstack-bootstrap/evals/16-complete-cnb-recreate-confirmed.response.md +44 -0
  57. package/rainbond-fullstack-bootstrap/modules/10-context-loading.md +8 -8
  58. package/rainbond-fullstack-bootstrap/modules/30-creation-rules.md +10 -10
  59. package/rainbond-fullstack-bootstrap/modules/40-source-and-package-rules.md +13 -9
  60. package/rainbond-fullstack-bootstrap/modules/50-workflow-and-convergence.md +6 -6
  61. package/rainbond-fullstack-bootstrap/modules/60-verification-and-handoffs.md +4 -4
  62. package/rainbond-fullstack-bootstrap/modules/70-output-contract.md +3 -3
  63. package/rainbond-fullstack-bootstrap/references/quick-reference.md +6 -6
  64. package/rainbond-fullstack-bootstrap/references/source-build-parameter-guide.md +6 -6
  65. package/rainbond-fullstack-bootstrap/references/sql-init-recipe.md +3 -3
  66. package/rainbond-fullstack-bootstrap/schemas/bootstrap-result.schema.yaml +3 -2
  67. package/rainbond-fullstack-bootstrap/scripts/upload_local_package.py +1 -1
  68. package/rainbond-fullstack-bootstrap/scripts/validate_bootstrap_output.py +2 -2
  69. package/rainbond-fullstack-troubleshooter/SKILL.md +103 -13
  70. package/rainbond-fullstack-troubleshooter/evals/10-config-file-configmap-missing.expected.yaml +21 -0
  71. package/rainbond-fullstack-troubleshooter/evals/10-config-file-configmap-missing.response.md +51 -0
  72. package/rainbond-fullstack-troubleshooter/references/operational-reference.md +70 -0
  73. package/rainbond-fullstack-troubleshooter/references/output-contract.md +259 -0
  74. package/rainbond-fullstack-troubleshooter/references/root-cause-rules.md +210 -0
  75. package/rainbond-fullstack-troubleshooter/schemas/troubleshoot-result.schema.yaml +3 -1
  76. package/rainbond-fullstack-troubleshooter/scripts/validate_troubleshoot_output.py +22 -1
  77. package/rainbond-platform-installer/SKILL.md +73 -9
  78. package/rainbond-platform-installer/agents/openai.yaml +2 -2
  79. package/rainbond-platform-installer/references/installation-policy.json +35 -1
  80. package/rainbond-platform-installer/references/installation-policy.md +33 -8
  81. package/rainbond-platform-installer/references/troubleshooting.md +3 -2
  82. package/rainbond-platform-installer/scripts/auto-update.js +495 -0
  83. package/rainbond-platform-installer/scripts/console-origin.js +159 -0
  84. package/rainbond-platform-installer/scripts/environment-credentials.js +225 -0
  85. package/rainbond-platform-installer/scripts/environment-registry.js +349 -0
  86. package/rainbond-platform-installer/scripts/existing-kubernetes-installer.js +1370 -0
  87. package/rainbond-platform-installer/scripts/host-cluster-installer.js +2143 -0
  88. package/rainbond-platform-installer/scripts/local-runtime-commands.js +180 -0
  89. package/rainbond-platform-installer/scripts/local-runtime.js +18 -0
  90. package/rainbond-platform-installer/scripts/mcp-router.js +212 -0
  91. package/rainbond-platform-installer/scripts/mcp-server.js +79 -0
  92. package/rainbond-platform-installer/scripts/platform-installer.js +694 -255
  93. package/rainbond-platform-installer/scripts/platform-routing.js +326 -0
  94. package/rainbond-platform-installer/scripts/runtime-credentials.js +163 -0
  95. package/rainbond-platform-installer/scripts/runtime-intents.js +251 -0
  96. package/rainbond-platform-installer/scripts/runtime-operations.js +383 -0
  97. package/rainbond-platform-installer/scripts/runtime-state.js +656 -0
  98. package/rainbond-platform-installer/scripts/secure-state.js +59 -13
  99. package/rainbond-platform-installer/scripts/ssh-key-setup.js +242 -0
  100. package/rainbond-platform-installer/scripts/telemetry.js +244 -0
  101. package/rainbond-platform-installer/scripts/user-message.js +125 -0
  102. package/rainbond-platform-installer/scripts/windows-auth.js +1 -1
  103. package/rainbond-platform-installer/scripts/windows-client-config.js +101 -22
  104. package/rainbond-platform-installer/scripts/windows-onboarding.js +179 -83
  105. package/rainbond-platform-installer/scripts/windows-platform.js +3 -3
  106. package/rainbond-platform-installer/scripts/windows-platform.ps1 +264 -28
  107. package/rainbond-platform-installer/scripts/windows-read-user-environment.ps1 +16 -0
  108. package/rainbond-platform-query/SKILL.md +88 -0
  109. package/rainbond-platform-query/agents/openai.yaml +4 -0
  110. package/rainbond-platform-query/evals/01-current-enterprise.expected.yaml +10 -0
  111. package/rainbond-project-init/SKILL.md +68 -9
  112. package/rainbond-project-init/references/manifest-rules.md +487 -0
  113. package/rainbond-project-init/references/operational-reference.md +74 -0
  114. package/rainbond-project-init/references/output-contract.md +272 -0
  115. package/rainbond-project-init/references/workflow-and-verification.md +85 -0
  116. package/rainbond-template-installer/SKILL.md +80 -16
package/README.md CHANGED
@@ -1,525 +1,261 @@
1
- # Rainbond Skills
1
+ # Rainskills
2
2
 
3
- 一组面向 Rainbond 日常交付、排障和初始化流程的独立技能,支持 Codex 和 Claude Code
3
+ Rainskills 是一组面向应用识别、部署、排障和交付的 AI Skills,支持 Codex 和 Claude Code。用户在市场中只会看到一个 `Rainskills` 产品,安装后 10 个 `rainbond-*` Skill 仍会独立触发。
4
4
 
5
- ## 快速安装
5
+ ## 安装
6
6
 
7
- 从 Skill 市场安装完整的 Rainskills 产品:
7
+ 从 Skill 市场安装:
8
8
 
9
9
  ```bash
10
10
  npx skills add goodrain/rainskills
11
11
  ```
12
12
 
13
- Skill 市场命令当前要求 Node.js 22.20.0 或更高版本。无法升级时,可以直接运行下面的 Rainskills 安装器(最低支持 Node.js 18),或使用 CDN 入口。
14
-
15
- 市场只展示一个 `rainskills` 入口。首次使用时,该入口会启动随包携带的交互式安装器,继续完成客户端选择、Rainbond 环境选择、浏览器授权和 MCP 配置;内部 `rainbond-*` Skill 不需要单独安装。
16
-
17
- 安装完成后,9 个 `rainbond-*` Skill 仍各自独立加载、独立触发和独立维护。统一的是安装、授权和升级入口,不会把业务 Skill 合并成一个大 Skill。
18
-
19
- 也可以使用客户端自己的 Plugin 市场。无论使用哪种入口,都只会看到一个 `Rainskills`,第一次使用时仍然进入同一套初始化和授权流程。
20
-
21
- Codex Plugin:
22
-
23
- ```bash
24
- codex plugin marketplace add goodrain/rainskills
25
- codex plugin add rainskills@goodrain
26
- ```
27
-
28
- Claude Code Plugin(在 Claude Code 会话中执行):
29
-
30
- ```text
31
- /plugin marketplace add goodrain/rainskills
32
- /plugin install rainskills@goodrain
33
- /reload-plugins
34
- ```
35
-
36
- 也可以直接运行安装器:
37
-
38
- ```bash
39
- npx --yes rainskills
40
- ```
41
-
42
- 安装器会识别或引导选择 Codex / Claude Code、填写 Rainbond 地址、打开浏览器授权、注册 MCP 并安装全部独立 Skill。没有 Node.js 或 Node 版本低于 18 时,使用保留的 CDN 安装方式:
43
-
44
- ```bash
45
- bash <(curl -fsSL https://get.rainbond.com/rainskills/install.sh)
46
- ```
47
-
48
- > **给 AI 助手的指引**:
49
- > - 如果用户的请求是"帮我把这个 repo 装上 / 让我用上这套 Rainbond skills",优先让用户执行 `npx --yes rainskills`。
50
- > - 如果用户没有 Node.js、Node.js 低于 18,或 npm registry 不可用,改用上面的 CDN `curl` 命令。
51
- > - AI 应识别自己运行在 Codex 或 Claude Code,并把对应 target 传给安装器,不要再询问用户客户端类型。macOS、Linux 和 WSL 不支持 OpenClaw 或 Pi Agent 安装。
52
- > - 不要 `git clone` 后手工把目录复制到任一客户端的 Skills 目录。
53
- > - 不要手工拼 `~/.rainbond/mcp.env`、猜 JWT 或手改客户端 MCP 配置。
54
- > - 不要建议 `npm install -g`、`pip install` 或 `make`。`npx` 只是启动包内的 `install.sh`,两种入口使用同一套安装流程。
55
- > - 如果用户机器上需要换 MCP 服务地址、改默认安装路径,把对应 flag 直接追加到 `npx --yes rainskills` 或 `install.sh` 后面。
56
-
57
- ## 包含的 Skill
58
-
59
- - `rainbond-app-assistant`
60
- - `rainbond-app-version-assistant`
61
- - `rainbond-delivery-verifier`
62
- - `rainbond-env-sync`
63
- - `rainbond-fullstack-bootstrap`
64
- - `rainbond-fullstack-troubleshooter`
65
- - `rainbond-platform-installer`(内部安装流程,不作为独立产品使用)
66
- - `rainbond-project-init`
67
- - `rainbond-template-installer`
68
-
69
- ## 适用场景
70
-
71
- 这些 skill 适合以下场景:
72
-
73
- - 将本地项目首次接入 Rainbond
74
- - 为已绑定项目同步环境信息
75
- - 基于镜像或模板在 Rainbond 中完成初始化部署
76
- - 管理 Rainbond 应用版本中心中的创建快照、发布、本地/云市场发布事件和快照回滚流程
77
- - 对 Rainbond 全栈应用进行低风险排障
78
- - 在部署结束后做交付验收
79
- - 选择私有化但尚无平台时,在当前 Linux、当前 macOS、当前 Windows(预览)或远程 Linux 服务器部署 Rainbond 单机版
80
-
81
- ## 安装方式
82
-
83
- ### 0. 前置条件
84
-
85
- - 已安装 `Codex` 或 `Claude Code`
86
- - Skill 市场的 `npx skills add` 当前要求 Node.js 22.20.0 或更高版本
87
- - 直接运行 `npx rainskills` 推荐 Node.js 22 或 24,最低支持 Node.js 18
88
- - Node.js 18/20 已结束维护,安装器会警告但仍继续;Node.js 低于 18 请使用 CDN 安装方式
89
- - macOS/Linux 本机可执行 `bash`、`curl`、`python3`;CDN 入口还需要 `tar`。远程 Linux 安装还需要系统 `ssh` 和 `scp`
90
- - 使用 Rainbond Cloud 时需要可登录账号;私有化新安装会先创建平台,再在浏览器完成初始化和授权
91
-
92
- ### 1. 一行命令安装(推荐)
93
-
94
- 支持 macOS、Linux 和 Windows。Windows 本地安装目前是 preview,也可以改选 Linux 服务器:
13
+ Skill 市场当前要求 Node.js 22.20.0 或更高版本。直接运行 npx 安装器最低支持 Node.js 18
95
14
 
96
15
  ```bash
97
16
  npx --yes rainskills
98
17
  ```
99
18
 
100
- npm 包已经携带完整安装器和所有 skill,不会再次下载仓库 tarball。`npx` 保留终端交互,因此选择客户端、填写私有化地址和浏览器授权流程与原安装脚本完全一致。
101
-
102
- Windows 本地预览要求 Windows 10 build 19041+ 或 Windows 11 x64、已开启 CPU 虚拟化,并使用 Administrators 用户和 UAC。推荐 4 核 CPU、8 GB 内存、50 GB 可用磁盘;2 核、4 GB 内存、10 GB 可用磁盘是预检最低门槛,低于推荐配置时安装器会提示风险但继续尝试。安装器会创建独立的 Rainbond WSL2 环境,首次下载可能较久且可能重启一次;下载会显示进度,重启后从已保存断点继续。Windows 登录后通过 `http://127.0.0.1:7070` 访问 Console。Windows 10/11 真机验收完成前不视为正式支持。
103
-
104
- 常用参数可以直接追加:
105
-
106
- ```bash
107
- npx --yes rainskills codex --saas
108
- npx --yes rainskills claude --self-hosted --rainbond-url <url>
109
- npx --yes rainskills all --force
110
- ```
111
-
112
- ### 2. CDN 安装(保留的兜底方式)
113
-
114
- 国内推荐用 OSS 入口(CDN 加速,无需翻墙):
19
+ 没有合适的 Node.js 时可使用 CDN 入口:
115
20
 
116
21
  ```bash
117
22
  bash <(curl -fsSL https://get.rainbond.com/rainskills/install.sh)
118
23
  ```
119
24
 
120
- 海外或源码党可以直接用 GitHub 入口:
25
+ 仅安装 Skills 文件不需要 Node.js,CDN 入口在无 Node.js 时仍可完成这部分安装;这不代表应用部署、运行环境连接或私有平台安装已经可执行。用户首次提出需要运行环境的动作时,Rainskills 执行组件才要求 Node.js 18 或更高版本。
121
26
 
122
- ```bash
123
- bash <(curl -fsSL https://raw.githubusercontent.com/goodrain/rainskills/main/install.sh)
124
- ```
125
-
126
- 脚本会按 **用户覆盖 → OSS → GitHub** 的顺序自动尝试下载仓库 tarball,解压到 `~/.rainbond/skills`(可通过 `RAINBOND_SKILLS_HOME` 覆盖),然后继续走交互式安装流程。
127
-
128
- 可通过环境变量自定义下载源:
129
-
130
- - `RAINBOND_SKILLS_TARBALL_URL` — 用户显式指定的 tarball URL(最高优先)
131
- - `RAINBOND_SKILLS_OSS_URL` — OSS tarball URL(默认 `https://get.rainbond.com/rainskills/rainskills-latest.tar.gz`)
132
- - `RAINBOND_SKILLS_HOME` — 安装目录(默认 `~/.rainbond/skills`)
27
+ 也可以使用客户端 Plugin 市场。
133
28
 
134
- > 谨慎模式:如果不想让远程脚本直接执行,可以先下载再阅读:
135
- >
136
- > ```bash
137
- > curl -fsSLO https://get.rainbond.com/rainskills/install.sh
138
- > less install.sh # 自行审阅
139
- > bash install.sh
140
- > ```
141
-
142
- ### 3. 已有本地仓库
143
-
144
- 如果你已经 `git clone` 了 rainbond-skills 仓库,直接进入仓库根目录执行:
29
+ Codex:
145
30
 
146
31
  ```bash
147
- ./install.sh
148
- ```
149
-
150
- 如果只是让 Codex 或 CI 在非交互模式下覆盖本地 skill,直接执行 `./install.sh --force` 即可;未提供 Rainbond 参数时,脚本会自动跳过 MCP 配置。
151
-
152
- ### 安装脚本会做的事
153
-
154
- 不论使用 npx、CDN 还是本地仓库,安装器都会引导你完成这些动作:
155
-
156
- - AI 安装时自动识别当前客户端;直接运行命令时可选择 `Codex`、`Claude Code` 或全部
157
- - Skill 文件安装完成后,选择要连接的 Rainbond:
158
- - **Rainbond Cloud(SaaS)**:无需自行安装 Rainbond,地址固定为 `https://run.rainbond.com`
159
- - **私有化部署**:已有平台时填写 Console 地址;尚无平台时进入内置单机安装向导
160
- - 浏览器中完成登录并授权(无需在终端输入用户名/密码)
161
- - 自动接收一年期、仅限 Rainbond MCP 使用的 JWT,并写入 `~/.rainbond/mcp.env`
162
- - 自动配置 Codex 和 Claude Code 的原生 MCP
163
- - 自动把环境变量加载逻辑写入当前 shell 的 rc 文件
164
- - 自动验证所选客户端的专用 MCP 地址是否可用:
165
- - Codex:`/console/mcp/rainskills/codex/query`
166
- - Claude Code:`/console/mcp/rainskills/claude-code/query`
167
-
168
- #### AI 代为安装时的用户选择
169
-
170
- 如果用户尚未明确要连接的 Rainbond 环境,AI 不得在安装命令中自行添加 `--saas`、`--self-hosted` 或 `--rainbond-url`,也不得根据已有缓存替用户做决定。安装器会在 Skill 文件安装完成后进入用户选择阶段并输出:
171
-
172
- ```text
173
- [RAINSKILLS_USER_INPUT_REQUIRED:rainbond_connection]
32
+ codex plugin marketplace add goodrain/rainskills
33
+ codex plugin add rainskills@goodrain
174
34
  ```
175
35
 
176
- AI 看到该标记后必须暂停安装,把 Rainbond Cloud / 私有化部署的选择交给最终用户,不得代替用户选择,也不得通过空回车采用默认项。用户回答后,AI 应把选择写回仍在等待的安装进程。如果用户在发起安装时已经明确指定 Rainbond Cloud 或给出了私有化地址,AI 可以直接采用该选择,不必重复询问。
177
-
178
- 用户选择私有化部署后,还需要明确选择“已经有平台”或“还没有,帮我安装”。已有平台时,安装器输出:
36
+ Claude Code:
179
37
 
180
38
  ```text
181
- [RAINSKILLS_USER_INPUT_REQUIRED:rainbond_console_url]
182
- ```
183
-
184
- AI 看到该标记后,让用户发送浏览器中访问 Rainbond Console 的完整地址,然后把地址写回仍在等待的安装进程。
185
-
186
- 选择“还没有,帮我安装”时,当前阶段会保存 `0600` 权限的非敏感断点并输出一行固定 JSON:
187
-
188
- ```json
189
- {"schema":"rainskills.next-action.v1","action":"install-platform","onboarding_id":"<id>","argv":["platform","install","--onboarding-id","<id>"]}
190
- ```
191
-
192
- AI 必须把 `argv` 数组作为参数传回同一个 `rainskills` 命令,不得把输出拼成任意 shell 字符串。平台安装器会:
193
-
194
- - 检查系统、架构、推荐资源(4 核 CPU、8 GB 内存、50 GB 磁盘)、最低资源门槛(2 核 CPU、4 GB 内存、10 GB 磁盘)、权限和端口;低于推荐配置时只提示风险
195
- - 展示官方脚本实际可能修改的主机项目,并等待用户一次明确确认
196
- - 从固定 HTTPS 官方来源下载脚本,限制同源跳转和文件大小,检查 Bash 结构与语法,并用本次 SHA-256 保证远程/WSL 执行内容一致
197
- - 展示下载和启动阶段,保留受保护的本地日志
198
- - 独立验证 Rainbond 容器、K3s、`rbd-system` 组件和 Console
199
- - 自动执行 `npx rainskills resume --onboarding-id <id>`,继续浏览器授权
200
-
201
- 平台安装器会先识别当前设备,并统一提供“安装到本地”和“安装到 Linux 服务器”。回车默认安装到本地;Windows 本地路径由固定安装器自动准备 WSL2,用户不需要输入 WSL 命令。远程连接优先使用已有的 SSH Key;需要密码时由系统 SSH 在终端读取,Linux/macOS 会复用临时连接,Windows 自带 OpenSSH 可能在后续步骤再次请求密码,Rainskills 不会保存密码或私钥。
202
-
203
- 当前支持单机版,包括本机和远程 Linux 安装,以及 Windows 本地预览;不支持多节点、高可用、离线安装或自动清理已有容器和端口冲突。
204
-
205
- 当前版本默认从 `https://get.rainbond.com/` 下载并校验 Rainbond 官方安装脚本;Linux、macOS 和 Windows 的安装流程保持一致,不需要额外设置环境变量。
206
-
207
- 验证自定义 Rainbond 整体镜像时,可以在 `platform install` 命令后追加完整镜像名。安装器会在校验安装脚本后,仅替换 Rainbond 主镜像并继续执行原有安装、就绪检查和授权流程:
208
-
209
- ```bash
210
- npx --yes rainskills platform install --onboarding-id <id> \\
211
- --rainbond-image registry.cn-hangzhou.aliyuncs.com/goodrain/rainbond:v6.9.7-devs
39
+ /plugin marketplace add goodrain/rainskills
40
+ /plugin install rainskills@goodrain
41
+ /reload-plugins
212
42
  ```
213
43
 
214
- 镜像覆盖会记录在 onboarding 状态中,后续继续或恢复时无需重复填写;默认不指定时使用官方安装脚本当前配置的镜像。
44
+ 安装流程支持 Codex 和 Claude Code;macOS、Linux 和 WSL 不支持 OpenClaw 或 Pi Agent 安装。不要手工复制 Skill、拼接凭据或修改 MCP 配置。
215
45
 
216
- 如需使用包内固定的 `rainbond-console/script/install-rainbond.sh` 做本地回归测试,可显式设置 `RAINSKILLS_USE_BUNDLED_RAINBOND_INSTALLER=1`;正常安装不需要设置它。
46
+ ## 安装完成时用户会看到什么
217
47
 
218
- 远程部署完成后,Rainskills 会从当前设备验证 SSH 地址、Rainbond 上报地址和远端主网卡地址,自动选择实际可访问的 Console。云服务器的内网地址不可达时会优先使用 SSH 公网地址;只有全部候选都失败时才询问公网 IP 或域名。
219
-
220
- 如果 AI 使用的执行工具不能保持交互终端,平台预检后会输出:
48
+ 安装完成后只完成 Skills 安装并展示能力列表,不选择运行环境、不登录 Rainbond,也不配置业务 MCP:
221
49
 
222
50
  ```text
223
- [RAINSKILLS_USER_INPUT_REQUIRED:platform_install_confirmation]
224
- ```
225
-
226
- AI 应先把检测结果和系统变更展示给用户;用户明确同意后,再用相同参数追加 `--yes`,不得自行确认。
227
-
228
- `Ctrl+C` 会停止当前下载或安装子进程并保留断点。重新执行安装器输出的固定 `platform install` 命令即可从真实机器状态继续;Rainbond 已部署但授权未完成时,执行固定 `resume` 命令即可,不需要重新部署平台。
229
-
230
- #### 安装效果统计
231
-
232
- 安装脚本会把安装流程状态异步上报到固定地址 `https://log.rainbond.com/api/rainskills/installations`,用于统计脚本执行、授权和配置成功率。每次执行使用一个随机的 `install_attempt_id` 串联以下阶段:
233
-
234
- - `started`:脚本开始执行
235
- - `authorized`:完成 Rainbond 授权,并取得当前企业的 `eid`
236
- - `configured`:Codex / Claude Code MCP 配置完成
237
- - `failed`:流程失败,仅记录固定的失败阶段和分类
238
-
239
- 上报字段只包含安装尝试 ID、`eid`、客户端类型、安装或刷新动作、阶段和状态。不会上报 JWT、账号、密码、用户名、邮箱、Rainbond 地址、原始错误信息或本地代码。统计请求在后台执行;统计服务不可用、超时或企业信息读取失败都不会改变原安装结果。
240
-
241
- #### 浏览器登录是怎么发生的
242
-
243
- 安装器默认使用设备授权流程。终端显示八位授权码和 Rainbond 授权地址,并在
244
- 后台等待结果:
245
-
246
- - **本地 macOS / Linux 桌面**:自动打开当前 Rainbond 的 `/device` 页面。登录
247
- 后核对终端中的授权码,点击允许,终端自动继续。
248
- - **Windows / WSL**:使用固定 PowerShell 浏览器桥接打开 Windows 浏览器;授权
249
- 结果仍由原安装进程接收,不需要复制 Token。
250
- - **SSH、容器或无桌面 Linux**:不会尝试打开远程浏览器。使用任意能够访问该
251
- Rainbond 平台的电脑或手机打开终端中的地址,登录并允许访问;远程终端会自动
252
- 检测结果,不需要复制回调 URL、JWT 或在终端按回车。
253
-
254
- 设备码有效期为 10 分钟,只能成功交换一次。最终签发的 JWT 默认有效期为一年,
255
- 并带有 `token_use=mcp`、`scope=mcp` 和 `aud=rainbond-mcp` 限制,不能用于普通
256
- Console API。安装器仅在确认旧版 Console 没有 Device Flow 路由时,才回退到
257
- 原来的本机回调/复制回调兼容流程。
258
-
259
- `--no-browser` 只禁止自动打开浏览器,设备授权地址仍会输出:
260
-
261
- ```bash
262
- npx --yes rainskills all --no-browser
51
+ Rainskills 安装完成,下一条消息即可直接使用。
263
52
 
264
- # AI 包装器或脚本也可以使用环境变量
265
- RAINSKILLS_NO_BROWSER=1 npx --yes rainskills all
266
- ```
267
-
268
- Device Flow 默认要求 HTTPS。Windows 本地安装使用的 loopback 或受管私网 Console
269
- 地址会自动允许 HTTP,不再要求额外参数;其他私有环境只有显式使用
270
- `--allow-insecure-http` 才能继续,终端和浏览器授权页都会提示长期凭证可能被截获。
271
- CI 或完全非交互环境仍应通过 `--token` / `RAINBOND_JWT` 提供已有凭证。
272
-
273
- 私有化平台升级时,应先发布包含 `/#/device` 的 Rainbond UI,再执行 Console 数据库
274
- 迁移,最后设置 `RAINBOND_MCP_DEVICE_FLOW_ENABLED=true`。平台有固定外部地址时同时
275
- 设置 `RAINBOND_MCP_DEVICE_PUBLIC_ORIGIN=https://你的平台地址`,避免代理请求头影响
276
- 浏览器授权地址。未开启功能开关时,Rainskills 会自动使用旧版授权兼容流程。
53
+ 下一步可以直接说:
277
54
 
278
- 默认技能安装目录:
55
+ - 帮我部署当前项目
56
+ - 帮我部署一个 Git 仓库
57
+ - 帮我通过镜像或安装包部署应用
58
+ - 帮我安装一个应用模板
59
+ - 帮我分析当前项目应该如何部署
279
60
 
280
- - `~/.claude/skills`
281
- - `~/.codex/skills`
282
-
283
- #### 显式指定部署形态
284
-
285
- ```bash
286
- # npx 模式
287
- npx --yes rainskills all --saas
288
- npx --yes rainskills all --self-hosted --rainbond-url <url>
289
-
290
- # CDN 模式:参数追加在脚本之后
291
- bash <(curl -fsSL https://get.rainbond.com/rainskills/install.sh) all --saas
292
- bash <(curl -fsSL https://get.rainbond.com/rainskills/install.sh) all --self-hosted --rainbond-url <url>
293
-
294
- # 本地仓库模式
295
- ./install.sh all --saas # Rainbond Cloud
296
- ./install.sh all --self-hosted --rainbond-url <url> # 私有化
61
+ 也可以直接告诉我你想部署什么应用。
297
62
  ```
298
63
 
299
- ### 4. 只安装到单个平台
64
+ 用户第一次提出部署、查询、排障、验证、快照或模板安装等需要运行环境的动作时,Rainskills 才检查和连接运行环境。
300
65
 
301
- 只装并配置 Claude Code:
66
+ ## 按需连接应用运行环境
302
67
 
303
- ```bash
304
- npx --yes rainskills claude
305
- ```
68
+ 每个业务 Skill 都必须先通过相同门禁:
306
69
 
307
- 只装并配置 Codex:
70
+ 0. 第一步检查 Node.js 是否存在且主版本不低于 18。缺失或低于 18 时,只说明 Rainskills 执行组件需要 Node.js 18 或更高版本并停止;不选择运行环境、不调用 MCP、不猜测替代命令。只有用户或 agent 明确同意后才安装或升级 Node.js,再从同一原始 intent 继续。
308
71
 
309
- ```bash
310
- npx --yes rainskills codex
311
- ```
312
-
313
- 同时装并配置全部平台:
72
+ 固定 launcher 来自当前 `package.json` 版本:
314
73
 
315
- ```bash
316
- npx --yes rainskills all
74
+ ```json
75
+ ["npx", "--yes", "rainskills@0.1.2"]
317
76
  ```
318
77
 
319
- ### 5. SSH、容器与 CI 授权
78
+ 所有调用都把 launcher 与参数合并成 argv 数组后直接执行;不得使用 `rainskills@latest`,不得把参数拼成 shell 字符串。
320
79
 
321
- SSH、容器和有交互终端的无桌面 Linux 会自动进入跨设备授权模式,不需要提前
322
- 准备 Token。终端会持续轮询授权状态,在另一台电脑完成浏览器授权后自动
323
- 继续。仅连接旧版 Console 时才会显示粘贴提示;此时把浏览器地址栏中的完整回调
324
- URL 粘贴进去即可。
80
+ 1. 执行 launcher + `["environment", "list", "--json"]`,先于项目扫描和任何业务 MCP。未指定环境时只使用全局默认环境,默认不可用时停止,不自动回退。
81
+ 2. 每个请求生成独立 operation UUID,并执行 `operation begin`;显式环境只写入这次 operation。每个 Rainbond MCP 调用都携带返回的 `rainskills_operation_id`。项目不保存环境、团队或应用绑定,同一项目可以部署到多个目标。
82
+ 3. 将动作转换为 `runtime-intents.js` 中对应的受限 intent 并完成字段校验。target 只允许 `codex`、`claude`、`all`;按用户选择构造 launcher + `["runtime", "connect", "<target>", ...环境参数, "--intent-json", "<JSON.stringify(已校验 intent)>"]`。
83
+ 4. 环境参数必须恰好选择一组且互斥:Cloud 用 `["--saas"]`,已有私有环境用 `["--rainbond-url", "<已验证 Console origin>"]`,新建私有环境用 `["--install-private", "--location", "local"]` 或 `["--install-private", "--location", "server"]`。
84
+ 5. 安装私有环境时,只消费完成 schema、action、onboarding id 和参数边界校验的 `rainskills.next-action.v1.argv`;拒绝字符串命令和其他输出字段。
85
+ 6. 探针失败进入 reconnect。连接或安装完成后执行 launcher + `["intent", "resume", "--onboarding-id", "<同一 onboarding-id>"]`,恢复受保护的原始 intent 和 `resume_step`,不重新猜测用户动作。
325
86
 
326
- CI 等没有可交互 TTY 的环境不能粘贴回调地址,可以使用下面两条兼容路径:
87
+ `deploy`/`create` 允许先只保存动作类型。选择私有环境后,先完整完成本地单机、服务器单机、主机集群或已有 Kubernetes 的平台安装和验收;此阶段不得询问本地项目路径、Git 仓库 URL、镜像地址或安装包路径。恢复到 `project-analysis` 后才识别当前项目或询问缺失的应用来源。
327
88
 
328
- 1. **预先在浏览器拿到 JWT 再传进来**(推荐):
89
+ ### 新应用环境选择
329
90
 
330
- ```bash
331
- ./install.sh all --non-interactive \
332
- --self-hosted --rainbond-url https://your-rainbond.example.com \
333
- --token "$RAINBOND_JWT"
334
- ```
91
+ 新应用场景使用以下说明:
335
92
 
336
- 建议通过 CI Secret 注入 `RAINBOND_JWT`,不要把 JWT 写入仓库或命令日志。
93
+ > 可以,我会帮你完成应用识别、构建、部署和访问验证。
94
+ >
95
+ > 不过目前还没有可用的应用运行环境。
96
+ >
97
+ > 你刚安装的 Rainskills 是负责“部署”的 AI 助手,它会分析项目并执行部署流程;Rainbond 负责为应用提供稳定运行环境。
98
+ >
99
+ #### 选择运行环境
337
100
 
338
- 2. **私有化兼容用户名/密码(已不推荐,未来移除)**:
101
+ 提示“请选择应用要运行的环境:”,并只显示:
339
102
 
340
- ```bash
341
- ./install.sh all --non-interactive \
342
- --self-hosted --rainbond-url http://your-rainbond.example.com:7070 \
343
- --username admin \
344
- --allow-insecure-http
345
- ```
103
+ 1) 云端环境(免费体验)
104
+ 2) 私有环境(去对接)
346
105
 
347
- 仅当部署没有开 `USE_SAAS`、确实是用户名/密码模式时可用;SaaS 模式下没有这个登录入口。
106
+ 选择私有环境后,直接显示:
348
107
 
349
- 如果你的 Rainbond 还是 `http://`,安装脚本会明确提示风险,并要求你确认(交互模式)或要求显式 `--allow-insecure-http`(非交互模式)。
108
+ 请选择部署位置:
350
109
 
351
- ### 6. 当前终端的环境变量说明
110
+ 1、部署到本机
111
+ 2、部署到独立服务器
112
+ 3、部署到已有 Rainbond
352
113
 
353
- 脚本会把 JWT 保存到:
114
+ 选择 1 时执行 `install-private` route 并传入 `--location local`;选择 2 时执行 `install-private` route 并传入 `--location server`;选择 3 时询问已有私有环境地址并执行 `private-existing` route。不会再显示额外的接入方式中间步骤。不得在进入平台安装器后重复询问部署位置,也不得在环境准备完成前询问应用来源。
354
115
 
355
- ```bash
356
- ~/.rainbond/mcp.env
357
- ```
116
+ 选择“部署到独立服务器”后,只显示:
358
117
 
359
- 并自动把下面这类加载逻辑写入当前 shell 的 rc 文件:
118
+ 请选择服务器类型:
360
119
 
361
- ```bash
362
- [ -f "$HOME/.rainbond/mcp.env" ] && source "$HOME/.rainbond/mcp.env"
363
- ```
120
+ 1、单台服务器(Linux)
121
+ 2、三台及以上服务器(Linux)
122
+ 3、已有 Kubernetes 集群
364
123
 
365
- 注意:
124
+ ### 服务器 SSH 固定流程
366
125
 
367
- - 新开的终端会自动加载 `RAINBOND_JWT`
368
- - 当前已经打开的终端不会被子进程脚本直接改写
369
- - 安装完成后,如果你想立刻在当前终端运行 `codex` 或 `claude`,请执行脚本最后提示的 `source ~/.zshrc` 或 `source ~/.bashrc`
126
+ 部署到独立服务器或主机集群时,流程不再根据 Agent 是否提供可见终端而变化:
370
127
 
371
- ### 7. 覆盖已安装版本
128
+ 1. Rainskills 先使用 `BatchMode=yes` 检查 SSH 免密连接。
129
+ 2. 已可连接时直接继续安装流程;不可连接时固定停止,不在 Agent 任务终端里等待密码。
130
+ 3. 单台服务器时,用户在系统终端执行一条版本锁定的 `ssh prepare --ssh <user@host> --ssh-port <port>` 命令。
131
+ 4. 主机集群时,Rainskills 先检查全部节点,一次列出所有待处理节点的名称、IP 和端口,再只给出一条版本锁定的 `ssh prepare-cluster --cluster-config <path>` 命令。该命令依次处理全部节点,已可免密连接的节点自动跳过;不得逐台显示命令或逐台等待用户回复。
132
+ 5. 指纹和一次服务器密码均由系统 SSH 读取;两种命令都只准备公钥连接,不安装 Rainbond。全部节点处理完后,用户统一回复一次“已完成”。
133
+ 6. Agent 使用同一版本、同一 `onboarding-id` 和原安装参数继续。不得重新询问环境、安装模式、节点或应用来源。
134
+ 7. 后续传输、安装和验收全部使用免密 SSH;系统终端不会继续安装或授权。
135
+ 8. Rainbond 验收通过后只进行一次浏览器授权,随后自动恢复最初的应用任务;不得回到 Agent 后再次授权。
372
136
 
373
- 如果目标目录里已经存在同名 skill,默认会跳过,避免覆盖本地修改。
137
+ 主机密钥发生变化时直接阻断并要求人工核对,不自动替换 `known_hosts`。聊天中永远不接收密码、私钥或 Token。
374
138
 
375
- 需要强制覆盖时:
139
+ ## 多运行环境
376
140
 
377
- ```bash
378
- npx --yes rainskills --force
379
- npx --yes rainskills codex --force
380
- ```
141
+ - 第一个连接成功的环境自动成为全局默认环境;以后新增环境不修改默认值。
142
+ - 用户未指定环境时使用默认环境;用户明确指定时只覆盖本次 operation。
143
+ - 环境名称自动生成,可重命名;内部不可变 ID 不随重命名改变。
144
+ - 添加、重命名、重新授权或删除环境不改项目配置,也不需要为每个环境重新配置 Agent MCP。
145
+ - 新增环境直接建立独立连接,不读取或恢复旧版单环境状态;HTTPS 直接进入授权,明文 HTTP 只增加一次可信网络确认。
146
+ - 新增环境与首次部署复用同一套固定选择:先选“云端环境(免费体验)/私有环境(去对接)”;选择私有环境后直接选“部署到本机/部署到独立服务器/部署到已有 Rainbond”,不再出现旧的接入方式中间步骤。
147
+ - Agent 始终连接一个本地 Rainskills MCP。Rainskills 按 `operation_id` 从隔离凭据存储中选择目标 Rainbond。
148
+ - 明确说“团队”表示默认或指定运行环境中的 Rainbond 团队;明确说“运行环境/平台”表示环境。裸名称同时匹配两者时必须询问。
381
149
 
382
- ### 8. 安装到自定义目录
150
+ 常用管理命令:
383
151
 
384
152
  ```bash
385
- npx --yes rainskills --dest ~/.claude/skills
386
- npx --yes rainskills --dest ~/.codex/skills --force
153
+ node <已安装的 Skills 根目录>/rainbond-platform-installer/scripts/local-runtime.js environment list --json
154
+ node <已安装的 Skills 根目录>/rainbond-platform-installer/scripts/local-runtime.js environment rename --environment-id <uuid> --name <name>
155
+ node <已安装的 Skills 根目录>/rainbond-platform-installer/scripts/local-runtime.js environment set-default --environment-id <uuid>
156
+ node <已安装的 Skills 根目录>/rainbond-platform-installer/scripts/local-runtime.js environment remove --environment-id <uuid>
387
157
  ```
388
158
 
389
- `--dest` 适合:
159
+ 这些本地状态命令不访问 npm 或网络。Agent 从当前已加载 Skill 的同级目录解析实际绝对路径;只有连接或安装运行环境时才调用固定版本的 npx launcher。
390
160
 
391
- - 调试安装过程
392
- - 安装到非标准目录
393
- - 在 CI 或临时目录中做验证
161
+ ### 已有应用环境选择
394
162
 
395
- 注意:`--dest` 只复制 skill,不会自动配置 Rainbond MCP。
163
+ 查询、排障、修改、交付验证、快照、发布和回滚属于已有应用操作,只让用户选择 Rainbond Cloud 或承载目标应用的已有私有 Rainbond,绝不执行 `install-private`,也不安装一个空的新平台代替目标应用。每个 Skill 的第一句话应匹配当前动作,例如“验证应用交付状态和访问地址”,不要全部写成“部署当前项目”。
396
164
 
397
- ## 更新方式
165
+ ### 认证与权限恢复
398
166
 
399
- 从市场安装时,只更新一个 Rainskills 入口;更新后的入口会运行对应版本的安装器,再同步完整的内部 Skill:
167
+ 业务 MCP 返回 401 时,依次执行以下 argv 参数:
400
168
 
401
- ```bash
402
- # 通用 Skill 市场
403
- npx skills update rainskills
404
-
405
- # Codex Plugin 市场
406
- codex plugin marketplace upgrade goodrain
169
+ ```json
170
+ ["runtime", "record-failure", "--onboarding-id", "<同一 onboarding-id>", "--step", "<当前固定步骤>", "--reason", "credential-expired"]
171
+ ["runtime", "reconnect", "--onboarding-id", "<同一 onboarding-id>"]
172
+ ["intent", "resume", "--onboarding-id", "<同一 onboarding-id>"]
407
173
  ```
408
174
 
409
- Claude Code 在会话中执行:
175
+ 只允许重新授权一次,并只重试记录的步骤;第二次 401 停止。403 时执行 `["runtime", "record-failure", "--onboarding-id", "<同一 onboarding-id>", "--step", "<当前固定步骤>", "--reason", "permission-denied"]`,随后立即停止,不 reconnect、不重新授权、不自动重试。
410
176
 
411
- ```text
412
- /plugin marketplace update goodrain
413
- /plugin update rainskills@goodrain
414
- /reload-plugins
415
- ```
177
+ 凭据只由受保护的本地状态和客户端配置处理。不要在聊天、intent、日志或命令行参数中发送密码、JWT、Token 或私钥。
416
178
 
417
- npx 模式:显式使用 `latest` 并覆盖已有 skill:
179
+ ## 私有 Rainbond 安装
418
180
 
419
- ```bash
420
- npx --yes rainskills@latest --force
421
- ```
181
+ 环境选择按渐进流程展示:
422
182
 
423
- CDN 模式:再跑一次同一行命令即可。脚本会重新下载最新 tarball 解压到 `~/.rainbond/skills`,然后继续安装流程:
183
+ 1. 用户选择“私有环境”后,直接选择部署到本机、独立服务器或已有 Rainbond。
184
+ 2. 部署到已有 Rainbond 只询问环境地址,不执行平台安装。
185
+ 3. 部署到本机直接进入单机版,不展示 ROI 或 Kubernetes;只有选择独立服务器后,再选择单台 Linux、三台及以上 Linux 或已有 Kubernetes。
424
186
 
425
- ```bash
426
- bash <(curl -fsSL https://get.rainbond.com/rainskills/install.sh) --force
427
- ```
428
-
429
- 本地仓库模式:
187
+ 主机集群支持 1、2 或 N 台 Linux 服务器,不要求固定三台;etcd 节点数必须是正奇数。首次进入该分支时,Rainskills 会生成一份受保护的 `cluster.yaml` 示例文件。用户一次性修改服务器地址、SSH 端口和节点角色后回复“已完成”,Rainskills 会一次列出全部可确定的配置问题;校验通过后只准备全部节点的 SSH 免密连接,再展示拓扑和安装变更供用户确认,不再执行额外的 CPU、内存、磁盘、端口、网络或已有安装检查。生成的文件中不得填写密码、私钥或 Token,SSH 密码仍只由系统 `ssh` 在终端中读取。确认后仅查询 bootstrap 节点架构以选择对应的 ROI 文件,实际安装条件由 ROI 判断。已有 Kubernetes 分支使用指定 kubeconfig 和 context 安装,要求 Kubernetes 1.24 或更高版本。
430
188
 
431
- ```bash
432
- git pull
433
- ./install.sh --force
434
- ```
189
+ Windows 本地安装是预览能力,也可以改选 Linux 服务器。它要求 Windows 10 build 19041+ 或 Windows 11 x64、已开启虚拟化并允许 UAC;安装器使用受管 WSL2 环境。macOS 本地路径使用 OrbStack。用户不需要理解这些底层实现。
435
190
 
436
- 如果只想更新某一个平台:
191
+ 常用固定参数:
437
192
 
438
193
  ```bash
439
- ./install.sh claude --force
440
- ./install.sh codex --force
441
- ```
442
-
443
- ## 目录结构
444
-
445
- ```text
446
- rainbond-skills/
447
- README.md
448
- install.sh
449
- package.json
450
- bin/rainskills.js
451
- .gitignore
452
- rainbond-app-assistant/
453
- SKILL.md
454
- rainbond-delivery-verifier/
455
- SKILL.md
456
- ...
457
- ```
194
+ # 本地单机
195
+ npx --yes rainskills@0.1.2 platform install --onboarding-id <id> \
196
+ --location local --mode single-node
458
197
 
459
- ## 产品对象模型
198
+ # Linux 服务器单机
199
+ npx --yes rainskills@0.1.2 platform install --onboarding-id <id> \
200
+ --location server --mode single-node --ssh <user@host>
460
201
 
461
- `docs/product-object-model.md` 描述了 skills 之间共享的产品对象(project、app、component、environment、delivery 等)和跨-skill 边界。如果你要扩展某个 skill 的输入/输出,或新增一个 skill,先看它。
202
+ # 服务器主机集群(自动生成受保护示例文件)
203
+ npx --yes rainskills@0.1.2 platform install --onboarding-id <id> \
204
+ --location server --mode host-cluster
462
205
 
463
- ## 仓库维护约定
206
+ # 已有高级 ROI cluster.yaml 才追加:--cluster-config <path>
464
207
 
465
- - 每个 skill 使用单独目录,目录名和 skill 名保持一致
466
- - 每个 skill 至少包含一个 `SKILL.md`
467
- - 如果后续需要补充 `scripts/`、`references/`、`assets/`,请放在对应 skill 目录下
468
- - 安装脚本默认复制所有 `rainbond-*` 目录
469
-
470
- ## 常见问题
471
-
472
- ### 1. 安装后没有生效
473
-
474
- Codex / Claude Code 请按安装器提示重启。
475
-
476
- ### 2. 为什么当前终端里还是连不上 MCP
477
-
478
- 因为 `./install.sh` 是一个子进程,不能直接改写你当前 shell 的环境变量。
479
-
480
- 处理方式:
208
+ # 已有 Kubernetes
209
+ npx --yes rainskills@0.1.2 platform install --onboarding-id <id> \
210
+ --location server --mode existing-kubernetes \
211
+ --kubeconfig <path> --kube-context <name> --chart-version <version>
212
+ ```
481
213
 
482
- - 直接执行脚本最后提示的 `source ~/.zshrc` `source ~/.bashrc`
483
- - 或者开一个新的终端
214
+ 可以为已有 Kubernetes 追加 `--values <path>`。非交互流程只有在展示预检和系统变更、用户明确同意后才追加 `--yes`。
484
215
 
485
- ### 3. 为什么默认不覆盖已有 skill
216
+ ### 安全与恢复边界
486
217
 
487
- 因为有些使用者会在本地做二次调整。默认跳过更安全,`--force` 才会覆盖。
218
+ - Console origin 会先规范化、探测并锁定。HTTPS 跨 origin 跳转必须重新确认;明文 HTTP 只允许用户明确确认的可信内网。
219
+ - ROI 和 Helm 制品只从固定官方 HTTPS 来源获取,限制跳转和大小,并锁定版本与摘要;恢复时复用已验证字节。
220
+ - kubeconfig、values、ROI 配置和断点使用受保护文件;所有 kubectl/Helm 调用都绑定固定 kubeconfig、context 和集群 identity。
221
+ - 执行安装前必须完成只读预检和 dry-run(适用时),并单独确认真实下载/安装效果。
222
+ - 取消会停止活动子进程但保留断点。失败或取消后只执行安装器输出的固定重试 argv;不要凭记忆改写命令。
223
+ - 检测到目标、配置、集群 identity、版本或摘要漂移时停止,不静默换目标。
488
224
 
489
- ### 4. JWT 会保存在哪里
225
+ 平台安装成功必须验证节点/平台组件、`rbd-app-ui` Console 可访问,再恢复原始应用动作。详细规则见 `rainbond-platform-installer/references/installation-policy.md`。
490
226
 
491
- 保存在:
227
+ ## 更新
492
228
 
493
- ```bash
494
- ~/.rainbond/mcp.env
495
- ```
229
+ Rainskills 会在用户下一次发起业务动作时静默检查更新,且只跟随 npm `latest` 指向的正式版。当前版本是 RC 或其他预发布版本时不会查询、不会自动升级;npm 上的新 RC 版本也不参与正式版自动升级。
496
230
 
497
- 脚本不会保存你的 Rainbond 用户名和密码。
231
+ 发现更高的正式版后,当前 launcher 只委托到经过校验的精确版本,例如 `rainskills@1.2.3`,不会执行浮动的 `@latest` 业务代码。新版本先原子刷新已经安装的 Rainskills Skills,再继续原业务操作。版本检查失败、安装位置不安全或文件迁移失败时会保留旧版本继续,不要求用户处理。
498
232
 
499
- ### 5. MCP 突然返回 401 / 403 怎么办
233
+ 升级只更新 Rainskills 自身,不触发 Rainbond 安装、运行环境选择、登录授权、MCP 配置或重新对接。原始业务操作会继续执行;只有该业务操作本身需要运行环境时,才按既有门禁检查当前连接。可用连接直接复用,401 只重新授权一次,403 立即停止,从未连接过运行环境时才进入环境选择。
500
234
 
501
- 通常是 `~/.rainbond/mcp.env` 里的 JWT 到期了。无需重装 skills,也不要手工改文件,直接用下面任一命令刷新:
235
+ 正在执行或等待恢复的部署、私有平台安装和授权流程继续使用启动时锁定的旧版本,自动升级不会插入这些流程。操作结束后的下一次普通业务请求才会再次检查正式版。
502
236
 
503
- ```bash
504
- npx --yes rainskills refresh
505
- # 或:bash <(curl -fsSL https://get.rainbond.com/rainskills/install.sh) refresh
506
- # 或:bash ~/.rainbond/skills/install.sh refresh
507
- ```
237
+ 如需手工恢复安装,可执行 `npx --yes rainskills@latest --force`;正常使用不需要主动运行更新命令。
508
238
 
509
- `refresh` 不会改动 skill 文件。它会刷新 `~/.rainbond/mcp.env`,并检查 RainSkills 早期版本写入的旧通用 MCP 地址。只有地址完全等于当前 Rainbond 的 `/console/mcp/query` 且认证配置仍是脚本管理格式时,才会先生成 `.rainskills-backup` 备份,再迁移到对应客户端的专用地址;自定义 MCP 地址不会被修改。迁移失败时会恢复原配置。
510
-
511
- 刷新后按终端提示重启 Codex / Claude Code。
239
+ ## 包含的 Skill
512
240
 
513
- ### 6. 如何确认安装到了哪里
241
+ - `rainbond-app-assistant`
242
+ - `rainbond-app-version-assistant`
243
+ - `rainbond-delivery-verifier`
244
+ - `rainbond-env-sync`
245
+ - `rainbond-fullstack-bootstrap`
246
+ - `rainbond-fullstack-troubleshooter`
247
+ - `rainbond-opensource-app-deploy`
248
+ - `rainbond-platform-installer`
249
+ - `rainbond-platform-query`
250
+ - `rainbond-project-init`
251
+ - `rainbond-template-installer`
514
252
 
515
- 脚本会输出每个目标目录和每个 skill 的安装结果。
253
+ ## 部署类 skill 怎么选
516
254
 
517
- ## 开发者说明
255
+ - 应用市场里有的应用 → `rainbond-template-installer`(一键安装商店模板)
256
+ - 市场里没有的开源软件(有 docker-compose、Helm 或镜像)→ `rainbond-opensource-app-deploy`
257
+ - 部署你自己写的项目(源码或私有镜像)→ `rainbond-app-assistant`
518
258
 
519
- 如果你要新增或修改 skill,建议流程如下:
259
+ ## License
520
260
 
521
- 1. 在仓库里直接修改对应 skill 目录
522
- 2. 先查看 `docs/product-object-model.md`,它是当前产品对象模型和跨-skill 边界的主文档
523
- 3. 在虚拟环境中执行 `python3 -m pip install -r requirements-test.txt`,再执行 `npm test` 跑 helper、评测、安装器、包内容和 PTY 信号测试;测试在隔离临时目录中运行,无需输入,也不应打开真实浏览器
524
- 4. 执行 `./install.sh --dest /tmp/rainbond-skills-test --force` 做一次本地验证
525
- 5. 确认无误后再提交到 Git 仓库
261
+ Apache-2.0