rainskills 0.1.19 → 0.1.21

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 (40) hide show
  1. package/README.md +34 -39
  2. package/SKILL.md +12 -10
  3. package/bin/rainskills-tools.js +114 -240
  4. package/bin/rainskills.js +134 -591
  5. package/install.sh +68 -94
  6. package/marketplace/rainskills/.claude-plugin/plugin.json +1 -1
  7. package/marketplace/rainskills/.codex-plugin/plugin.json +1 -1
  8. package/marketplace/rainskills/skills/rainskills/SKILL.md +13 -11
  9. package/package.json +2 -2
  10. package/rainbond-app-assistant/SKILL.md +116 -151
  11. package/rainbond-app-version-assistant/SKILL.md +98 -98
  12. package/rainbond-delivery-verifier/SKILL.md +98 -68
  13. package/rainbond-env-sync/SKILL.md +98 -69
  14. package/rainbond-fullstack-bootstrap/SKILL.md +101 -89
  15. package/rainbond-fullstack-bootstrap/modules/10-context-loading.md +1 -1
  16. package/rainbond-fullstack-troubleshooter/SKILL.md +98 -68
  17. package/rainbond-opensource-app-deploy/SKILL.md +102 -81
  18. package/rainbond-platform-installer/SKILL.md +4 -4
  19. package/rainbond-platform-installer/scripts/auto-update.js +0 -9
  20. package/rainbond-platform-installer/scripts/installed-version.js +1 -1
  21. package/rainbond-platform-installer/scripts/platform-installer.js +3 -89
  22. package/rainbond-platform-installer/scripts/runtime-state.js +14 -251
  23. package/rainbond-platform-installer/scripts/single-runtime.js +114 -0
  24. package/rainbond-platform-installer/scripts/user-message.js +3 -49
  25. package/rainbond-platform-installer/scripts/windows-client-config.js +0 -51
  26. package/rainbond-platform-installer/scripts/windows-onboarding.js +0 -3
  27. package/rainbond-platform-installer/scripts/windows-platform.ps1 +1 -1
  28. package/rainbond-platform-query/SKILL.md +103 -61
  29. package/rainbond-project-init/SKILL.md +102 -79
  30. package/rainbond-template-installer/SKILL.md +102 -80
  31. package/rainbond-platform-installer/scripts/environment-credentials.js +0 -225
  32. package/rainbond-platform-installer/scripts/environment-registry.js +0 -349
  33. package/rainbond-platform-installer/scripts/local-runtime-commands.js +0 -180
  34. package/rainbond-platform-installer/scripts/local-runtime.js +0 -58
  35. package/rainbond-platform-installer/scripts/runtime-context-resolver.js +0 -189
  36. package/rainbond-platform-installer/scripts/runtime-credentials.js +0 -163
  37. package/rainbond-platform-installer/scripts/runtime-intents.js +0 -386
  38. package/rainbond-platform-installer/scripts/runtime-operations.js +0 -597
  39. package/rainbond-platform-installer/scripts/windows-client-config.ps1 +0 -9
  40. package/rainbond-platform-installer/scripts/windows-read-user-environment.ps1 +0 -16
package/README.md CHANGED
@@ -67,7 +67,7 @@ Rainskills 安装完成,下一条消息即可直接使用。
67
67
 
68
68
  每个业务 Skill 都必须先通过相同门禁:
69
69
 
70
- 0. 第一步检查 Node.js 是否存在且主版本不低于 18。缺失或低于 18 时,只说明 Rainskills 执行组件需要 Node.js 18 或更高版本并停止;不选择运行环境、不调用 MCP、不猜测替代命令。只有用户或 agent 明确同意后才安装或升级 Node.js,再从同一原始 intent 继续。
70
+ 0. 第一步检查 Node.js 是否存在且主版本不低于 18。缺失或低于 18 时,只说明 Rainskills 执行组件需要 Node.js 18 或更高版本并停止;不连接运行环境、不调用 CLI、不猜测替代命令。
71
71
 
72
72
  固定 launcher 来自当前 `package.json` 版本:
73
73
 
@@ -77,12 +77,11 @@ Rainskills 安装完成,下一条消息即可直接使用。
77
77
 
78
78
  所有调用都把 launcher 与参数合并成 argv 数组后直接执行;不得使用 `rainskills@latest`,不得把参数拼成 shell 字符串。
79
79
 
80
- 1. 执行 launcher + `["environment", "list", "--json"]`,先于项目扫描和任何 Rainbond 业务调用。未指定环境时只使用全局默认环境,默认不可用时停止,不自动回退。
81
- 2. 每个请求生成独立 operation UUID,并执行 `operation begin`;显式环境只写入这次 operation。所有 Rainbond 查询和变更都通过 `~/.rainbond/bin/rainskills-tools.js`,并绑定返回的 operation ID。项目不保存环境、团队或应用绑定,同一项目可以部署到多个目标。
82
- 3. 将动作转换为 `runtime-intents.js` 中对应的受限 intent 并完成字段校验。target 只允许 `codex`、`claude`、`pi`、`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`,不重新猜测用户动作。
80
+ 1. 本会话首次使用时执行 launcher + `["runtime", "status", "--json"]`。只有返回 `connected` 且 `usable=true` 才进入业务流程。
81
+ 2. 本机只保存一个 Rainbond 运行环境。没有环境时使用 `runtime connect` 连接 Cloud、已有私有 Rainbond,或安装一个私有 Rainbond;重新授权使用 `runtime reconnect <target>`。
82
+ 3. 所有 Rainbond 查询和变更都直接通过 `~/.rainbond/bin/rainskills-tools.js`。不配置客户端 MCP,不创建业务 runtime operation,不传环境 ID、operation ID intent JSON
83
+ 4. 写操作仍由 CLI 生成 confirmation ID;只有完全相同的输入追加 `--confirm` 后才执行一次。
84
+ 5. 安装私有环境时,只消费完成 schema、action、onboarding id 和参数边界校验的 `rainskills.next-action.v1.argv`;onboarding id 只属于平台安装断点。
86
85
 
87
86
  `deploy`/`create` 允许先只保存动作类型。选择私有环境后,先完整完成本地单机、服务器单机、主机集群或已有 Kubernetes 的平台安装和验收;此阶段不得询问本地项目路径、Git 仓库 URL、镜像地址或安装包路径。恢复到 `project-analysis` 后才识别当前项目或询问缺失的应用来源。
88
87
 
@@ -101,17 +100,11 @@ Rainskills 安装完成,下一条消息即可直接使用。
101
100
  提示“请选择应用要运行的环境:”,并只显示:
102
101
 
103
102
  1) 云端环境(免费体验)
104
- 2) 私有环境(去对接)
103
+ 2) 本机环境
104
+ 3) 独立服务器
105
+ 4) 已有 Rainbond
105
106
 
106
- 选择私有环境后,直接显示:
107
-
108
- 请选择部署位置:
109
-
110
- 1、部署到本机
111
- 2、部署到独立服务器
112
- 3、部署到已有 Rainbond
113
-
114
- 选择 1 时执行 `install-private` route 并传入 `--location local`;选择 2 时执行 `install-private` route 并传入 `--location server`;选择 3 时询问已有私有环境地址并执行 `private-existing` route。不会再显示额外的接入方式中间步骤。不得在进入平台安装器后重复询问部署位置,也不得在环境准备完成前询问应用来源。
107
+ 选择 1 时执行 `saas` route;选择 2 时执行 `install-private` route 并传入 `--location local`;选择 3 时执行 `install-private` route 并传入 `--location server`;选择 4 时询问已有 Rainbond 地址并执行 `private-existing` route。不得显示“私有环境”中间层,不得在进入平台安装器后重复询问部署位置,也不得在环境准备完成前询问应用来源。
115
108
 
116
109
  选择“部署到独立服务器”后,只显示:
117
110
 
@@ -132,31 +125,35 @@ Rainskills 安装完成,下一条消息即可直接使用。
132
125
  5. 指纹和一次服务器密码均由系统 SSH 读取;两种命令都只准备公钥连接,不安装 Rainbond。全部节点处理完后,用户统一回复一次“已完成”。
133
126
  6. Agent 使用同一版本、同一 `onboarding-id` 和原安装参数继续。不得重新询问环境、安装模式、节点或应用来源。
134
127
  7. 后续传输、安装和验收全部使用免密 SSH;系统终端不会继续安装或授权。
135
- 8. Rainbond 验收通过后只进行一次浏览器授权,随后自动恢复最初的应用任务;不得回到 Agent 后再次授权。
128
+ 8. Rainbond 验收通过后只进行一次浏览器授权;授权成功后由当前 Agent 会话继续应用任务。
136
129
 
137
130
  主机密钥发生变化时直接阻断并要求人工核对,不自动替换 `known_hosts`。聊天中永远不接收密码、私钥或 Token。
138
131
 
139
- ## 多运行环境
132
+ ## 单运行环境
133
+
134
+ - 本机只保存一个 Rainbond Console origin 和对应凭据。
135
+ - 更换环境时,新凭据通过 live probe 后才覆盖当前运行环境。
136
+ - 连接和重新授权始终进入浏览器 Device Flow,不复用 Shell 中缓存的 JWT。
137
+ - Agent 始终执行受保护的本地 Rainskills CLI,不配置或直接调用客户端 MCP。
138
+ - 项目的 preview/production 配置仍属于应用配置投影,与本机连接的 Rainbond 运行环境不是同一概念。
140
139
 
141
- - 第一个连接成功的环境自动成为全局默认环境;以后新增环境不修改默认值。
142
- - 用户未指定环境时使用默认环境;用户明确指定时只覆盖本次 operation。
143
- - 环境名称自动生成,可重命名;内部不可变 ID 不随重命名改变。
144
- - 添加、重命名、重新授权或删除环境不改项目配置,也不需要为每个 Agent 单独配置 MCP。
145
- - 新增环境直接建立独立连接,不读取或恢复旧版单环境状态;HTTPS 直接进入授权,明文 HTTP 只增加一次可信网络确认。
146
- - 新增环境与首次部署复用同一套固定选择:先选“云端环境(免费体验)/私有环境(去对接)”;选择私有环境后直接选“部署到本机/部署到独立服务器/部署到已有 Rainbond”,不再出现旧的接入方式中间步骤。
147
- - Agent 始终执行同一个受保护的本地 Rainskills CLI。CLI 按 `operation_id` 从隔离凭据存储中选择目标 Rainbond;Rainskills 不提供本地 MCP 服务,Agent 也不得绕过 CLI 直接调用 Rainbond MCP。
148
- - 明确说“团队”表示默认或指定运行环境中的 Rainbond 团队;明确说“运行环境/平台”表示环境。裸名称同时匹配两者时必须询问。
140
+ 业务 CLI 默认忽略 Shell 中遗留的 `RAINBOND_URL` / `RAINBOND_JWT`。CI 需要使用环境变量凭据时,显式设置:
141
+
142
+ ```bash
143
+ RAINSKILLS_CREDENTIAL_SOURCE=environment \
144
+ RAINBOND_URL=https://rainbond.example.com \
145
+ RAINBOND_JWT="$RAINBOND_JWT" \
146
+ node ~/.rainbond/bin/rainskills-tools.js status --skill-id rainbond-platform-query
147
+ ```
149
148
 
150
- 常用管理命令:
149
+ 常用命令:
151
150
 
152
151
  ```bash
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>
152
+ node ~/.rainbond/lib/rainskills/bin/rainskills.js runtime status --json
153
+ node ~/.rainbond/lib/rainskills/bin/rainskills.js runtime reconnect codex
157
154
  ```
158
155
 
159
- 这些本地状态命令不访问 npm 或网络。Agent 从当前已加载 Skill 的同级目录解析实际绝对路径;只有连接或安装运行环境时才调用固定版本的 npx launcher。
156
+ `runtime status` 会通过当前唯一环境执行 live probe。业务 Tool 继续通过 `~/.rainbond/bin/rainskills-tools.js` 调用。
160
157
 
161
158
  ### 已有应用环境选择
162
159
 
@@ -164,15 +161,13 @@ node <已安装的 Skills 根目录>/rainbond-platform-installer/scripts/local-r
164
161
 
165
162
  ### 认证与权限恢复
166
163
 
167
- Rainbond 能力端点经 CLI 返回 401 时,依次执行以下 argv 参数:
164
+ Rainbond CLI 返回 401 时执行:
168
165
 
169
166
  ```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>"]
167
+ ["runtime", "reconnect", "<target>"]
173
168
  ```
174
169
 
175
- 只允许重新授权一次,并只重试记录的步骤;第二次 401 停止。403 时执行 `["runtime", "record-failure", "--onboarding-id", "<同一 onboarding-id>", "--step", "<当前固定步骤>", "--reason", "permission-denied"]`,随后立即停止,不 reconnect、不重新授权、不自动重试。
170
+ 只读调用可在重新授权后重试一次。写调用不得自动重放,必须先查询平台真实状态。403 立即停止,不 reconnect
176
171
 
177
172
  凭据只由受保护的本地状态和客户端配置处理。不要在聊天、intent、日志或命令行参数中发送密码、JWT、Token 或私钥。
178
173
 
@@ -228,7 +223,7 @@ node ~/.rainbond/lib/rainskills/bin/rainskills.js platform install --onboarding-
228
223
 
229
224
  Rainskills 会在用户下一次发起业务动作时,由本地运行时立即返回环境查询结果,并另行启动后台任务静默检查更新。更新只跟随 npm `latest` 指向的正式版。当前版本是 RC 或其他预发布版本时不会查询、不会自动升级;npm 上的新 RC 版本也不参与正式版自动升级。
230
225
 
231
- 发现更高的正式版后,后台任务只委托到经过校验的精确版本,例如 `rainskills@0.1.19`,不会执行浮动的 `@latest` 业务代码。新版本原子刷新已经安装的 Rainskills Skills;当前业务继续使用启动时已经加载的版本,最迟从下一条新任务开始使用新版。npm 超时、版本检查失败、安装位置不安全或文件迁移失败时会保留旧版本,且不会阻塞或改变当前操作。
226
+ 发现更高的正式版后,后台任务只委托到经过校验的精确版本,例如 `rainskills@0.1.21`,不会执行浮动的 `@latest` 业务代码。新版本原子刷新已经安装的 Rainskills Skills;当前业务继续使用启动时已经加载的版本,最迟从下一条新任务开始使用新版。npm 超时、版本检查失败、安装位置不安全或文件迁移失败时会保留旧版本,且不会阻塞或改变当前操作。
232
227
 
233
228
  升级只更新 Rainskills 自身,不触发 Rainbond 安装、运行环境选择、登录授权或重新对接,也不会新增 Agent MCP 配置。更新内容仅包括 Skills 和本地 CLI。原始业务操作会继续执行;只有该业务操作本身需要运行环境时,才按既有门禁检查当前连接。可用连接直接复用,401 只重新授权一次,403 立即停止,从未连接过运行环境时才进入环境选择。
234
229
 
package/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: rainskills
3
- description: Use when a user asks to install, set up, initialize, update, repair, start using Rainskills, or list, add, rename, remove, reconnect, or change the default Rainskills runtime environment.
3
+ description: Use when a user asks to install, set up, initialize, update, repair, start using Rainskills, or connect, reconnect, inspect, or replace the single Rainskills runtime.
4
4
  ---
5
5
 
6
6
  # Rainskills
@@ -18,7 +18,7 @@ If the adjacent installer is missing, check the local Node.js version before cho
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
 
21
- 执行优化:同一会话内只检查一次 Node.js(首次使用本地 CLI 前);仅在 Node.jsRainskills 安装、升级,或 PATH 变更后失效。固定 launcher 和 argv 已在本 Skill 中,禁止读取、搜索或探测 `rainskills.js`,也禁止执行 `npm root -g`。每个新的业务操作仍需要刷新一次环境列表;带已有 `operation_id` 或 `onboarding-id` 的续接复用已绑定的环境 ID,不重复枚举环境。
21
+ 执行优化:同一会话内只检查一次 Node.js 和运行环境状态;仅在 Node.jsRainskills 或唯一运行环境发生变化后失效。固定 launcher 和 argv 已在本 Skill 中,禁止读取、搜索或探测 `rainskills.js`,也禁止执行 `npm root -g`。
22
22
 
23
23
  ## Completion Message
24
24
 
@@ -38,18 +38,20 @@ Rainskills 安装完成,下一条消息即可直接使用。
38
38
  也可以直接告诉我你想部署什么应用。
39
39
  ```
40
40
 
41
- ## Manage Runtime Environments
41
+ ## Manage the Single Runtime
42
42
 
43
43
  受限沙箱(包括 Codex)执行本地状态命令时,必须申请用户级受保护目录访问权限;在 Codex 中使用 `require_escalated`。不得修改 `~/.rainbond` 权限、复制受保护状态到工作区,或因沙箱权限错误建议重装。
44
44
 
45
45
  涉及浏览器或设备授权的 `runtime connect`,以及恢复/安装场景中的 `rainskills <target> --self-hosted`,必须在附加交互终端(TTY)中运行;在 Codex 中设置 `tty: true` 并保持进程附着直到授权完成。禁止通过非交互命令要求用户粘贴 JWT;非交互模式只可复用已存在的受保护凭据。
46
46
 
47
- 环境是全局列表,不是项目绑定。本地状态命令必须定位已安装的同级 `rainbond-platform-installer/scripts/local-runtime.js`,解析为绝对路径后通过 `node` 以 argv 数组执行;不得为了查询本地环境访问 npm。只有连接或安装环境时才使用与当前技能包一致的固定 launcher `node <home>/.rainbond/lib/rainskills/bin/rainskills.js`(运行包版本 `rainskills@0.1.19`)。
47
+ Rainskills 只保存一个全局运行环境,不维护环境列表、名称、默认值或环境 ID。使用固定 launcher `node <home>/.rainbond/lib/rainskills/bin/rainskills.js`(运行包版本 `rainskills@0.1.21`):
48
48
 
49
- - 列表:用本地 launcher 执行 `environment list --json`,只展示名称、类型、状态、是否默认和最近验证时间。
50
- - 重命名:用本地 launcher 执行 `environment rename --environment-id <uuid> --name <name>`。
51
- - 设为默认:用本地 launcher 执行 `environment set-default --environment-id <uuid>`。只影响之后未指定环境的新操作。
52
- - 删除:用本地 launcher 执行 `environment remove --environment-id <uuid>`;默认环境或活动操作使用中的环境必须先阻断。
53
- - 添加:新增环境时直接生成 operation UUID,以 `{"type":"environment-add"}` 执行 runtime connect。先原样展示 `runtime message --id add-environment-location`。选择云端环境时直接执行 `--saas` route;选择私有环境时立即原样展示 `runtime message --id private-deployment-location`,并与首次部署保持完全相同的路径:选择 1(部署到本机)执行 `--install-private --location local`,选择 2(部署到独立服务器)执行 `--install-private --location server`,选择 3(部署到已有 Rainbond)原样展示 `runtime message --id private-console-origin`,收到地址后执行 `--rainbond-url <已验证 Console origin>`。不得展示任何额外的接入方式中间步骤。授权成功后必须把 launcher 返回的 `user_message` 中完整环境列表原样展示给用户,再按用户要求重命名并执行 `operation complete --operation-id <uuid>`。第二个环境不得自动改成默认环境。不得先执行 `runtime status`,不得检查、迁移、备份、删除或修复旧的 `runtime-connection-v1.json`;旧 runtime 状态不是新增环境的前置条件,连接失败时只执行 launcher 返回的固定恢复 argv,不得自行设计恢复流程。
49
+ - 状态:执行 `runtime status --json`。
50
+ - 首次连接:执行 `runtime connect <target> --saas` `runtime connect <target> --rainbond-url <Console origin>`。
51
+ - 安装私有环境:执行 `runtime connect <target> --install-private --location local|server`。
52
+ - 重新授权:执行 `runtime reconnect <target>`;必须进入浏览器 Device Flow,不复用 Shell 中缓存的 JWT。
53
+ - 更换环境:明确告知用户会替换当前唯一环境;新授权和 live probe 成功后再覆盖凭据。
54
54
 
55
- 用户在一次业务请求中明确指定运行环境时,只把该环境 ID 传给本次 `operation begin`;同一项目可以部署到任意多个环境和团队。明确“团队”表示环境内团队;明确“运行环境/平台”表示环境;裸名称同时匹配两者时必须询问,不能靠名称中是否含“环境”二字猜测。
55
+ 所有 Rainbond 查询和变更继续通过 `~/.rainbond/bin/rainskills-tools.js`。不得配置客户端 MCP,也不得恢复环境枚举、业务 operation 生命周期、环境 ID 或 intent 恢复协议。
56
+
57
+ 业务 CLI 默认只读取受保护的唯一运行环境文件,忽略 Shell 中遗留的 `RAINBOND_URL` / `RAINBOND_JWT`。CI 若要显式使用环境变量凭据,必须同时设置 `RAINSKILLS_CREDENTIAL_SOURCE=environment`。