rainskills 0.1.21 → 0.1.22
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/README.md +1 -1
- package/SKILL.md +1 -1
- 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 +2 -2
- package/package.json +2 -2
- package/rainbond-app-assistant/SKILL.md +40 -1452
- package/rainbond-app-assistant/references/operational-reference.md +27 -0
- package/rainbond-app-assistant/references/routing.md +15 -0
- package/rainbond-app-assistant/references/runtime-gate.md +167 -0
- package/rainbond-app-assistant/references/workflow-rules.md +344 -0
- package/rainbond-app-assistant/scripts/validate_cross_skill_routing.py +637 -0
- package/rainbond-app-assistant/scripts/validate_progressive_loading.py +149 -0
- package/rainbond-app-version-assistant/SKILL.md +1 -1
- package/rainbond-delivery-verifier/SKILL.md +1 -1
- package/rainbond-env-sync/SKILL.md +1 -1
- package/rainbond-fullstack-bootstrap/SKILL.md +1 -1
- package/rainbond-fullstack-troubleshooter/SKILL.md +1 -1
- package/rainbond-opensource-app-deploy/SKILL.md +30 -301
- package/rainbond-opensource-app-deploy/agents/openai.yaml +1 -1
- package/rainbond-opensource-app-deploy/references/deployment-workflow.md +168 -0
- package/rainbond-opensource-app-deploy/references/runtime-gate.md +147 -0
- package/rainbond-platform-installer/SKILL.md +1 -1
- package/rainbond-platform-installer/scripts/installed-version.js +1 -1
- package/rainbond-platform-query/SKILL.md +1 -1
- package/rainbond-project-init/SKILL.md +1 -1
- package/rainbond-template-installer/SKILL.md +1 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Open-source application deployment workflow
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Turn an upstream application's official deployment material into a working Rainbond application. Derive the topology from evidence, create and connect every component, preserve state, then iterate until runtime health, the real external entry, and the application's UI or core flow all pass.
|
|
6
|
+
|
|
7
|
+
**Core principle:** importing images is not completion. Completion means the topology is evidence-backed and the deployed application works through its real user-facing entry.
|
|
8
|
+
|
|
9
|
+
Use the protected local Rainskills CLI as the only transport for Rainbond runtime truth. Never call Rainbond MCP directly, start a local Rainskills MCP service, or invent component state, internal addresses, credentials, or external URLs.
|
|
10
|
+
|
|
11
|
+
## Progress checklist
|
|
12
|
+
|
|
13
|
+
Track this checklist throughout the run:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
Open-source deployment:
|
|
17
|
+
- [ ] 0. Official topology derived
|
|
18
|
+
- [ ] 1. Components, dependencies, ports, env, and storage modeled
|
|
19
|
+
- [ ] 2. Required upstream documentation obtained
|
|
20
|
+
- [ ] 3. Deployment reached terminal build states
|
|
21
|
+
- [ ] 4. All component health checked
|
|
22
|
+
- [ ] 5. Every blocker converged or stopped within budget
|
|
23
|
+
- [ ] 6. Real entry and UI/core smoke verified
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 0. Derive the official topology
|
|
27
|
+
|
|
28
|
+
Before any Rainbond write, obtain the upstream project's official `docker-compose.yml`, Compose fragments, Helm chart values/templates, image documentation, and installation guide. Prefer a pinned release or image tag over an unbounded moving tag.
|
|
29
|
+
|
|
30
|
+
Build one deployment inventory from those sources:
|
|
31
|
+
|
|
32
|
+
- every required service and its image, tag, command, and role
|
|
33
|
+
- container ports and which single service is the intended user entry
|
|
34
|
+
- required environment variables, secrets that must come from the user, and defaults
|
|
35
|
+
- every provider/consumer relationship from `depends_on` and from host references embedded in env, URLs, DSNs, callbacks, and proxy configuration
|
|
36
|
+
- named volumes, bind mounts, data directories, and volumes shared by multiple services
|
|
37
|
+
- health checks, initialization jobs, profiles, anchors, `env_file` inputs, and config files
|
|
38
|
+
- reverse-proxy routes and same-origin browser requirements
|
|
39
|
+
|
|
40
|
+
Do not reconstruct a complex suite from model memory when the official descriptor is unavailable. Ask for the descriptor or permission to use a clearly named official alternative before writing runtime state.
|
|
41
|
+
|
|
42
|
+
If the application is actually available in the Rainbond market, stop and route to `rainbond-template-installer`.
|
|
43
|
+
|
|
44
|
+
For Helm input, pin the chart version and merge the user's values before deriving the inventory. Render with the upstream-supported `helm template` path when available. Map the rendered intent as follows:
|
|
45
|
+
|
|
46
|
+
- Deployment or StatefulSet workloads → long-running Rainbond components backed by their declared images
|
|
47
|
+
- Service ports → Rainbond inner/outer ports; Ingress routes → the single external entry and proxy routing
|
|
48
|
+
- persistent volume claims → evidence-backed persistent storage requirements
|
|
49
|
+
- ConfigMaps and non-secret files → `config-file` mounts; Secrets → user-supplied secret inputs that are never printed
|
|
50
|
+
- startup/readiness/liveness probes → `rainbond_manage_component_probe`
|
|
51
|
+
- init containers, Jobs, hooks, privileged host integration, operators, and custom resources → explicit compatibility decisions, not silent omission
|
|
52
|
+
|
|
53
|
+
If a chart relies on Kubernetes behavior that cannot be represented safely by current Rainbond component capabilities, stop with a semantic-compatibility blocker. Do not claim that reading a chart is equivalent to installing it unchanged.
|
|
54
|
+
|
|
55
|
+
## 1. Import components and model the deployment
|
|
56
|
+
|
|
57
|
+
Create or reuse the target Rainbond application, then model the inventory in dependency order.
|
|
58
|
+
|
|
59
|
+
1. Create every image-backed component with `rainbond_create_component_from_image` and keep initial deployment disabled until its ports, env, dependencies, storage, and config files are ready.
|
|
60
|
+
2. Configure inner ports first. Enable an outer port only on the intended external entry. Add the port with `rainbond_manage_component_ports`, then call `rainbond_manage_component_ports(operation=update_alias)` for that port to set `port_alias` and `k8s_service_name`; do not assume the add call persisted both values.
|
|
61
|
+
3. Create every accepted provider/consumer edge with `rainbond_manage_component_dependency`, including both declared `depends_on` edges and edges implied by URLs, DSNs, callbacks, or proxy upstreams.
|
|
62
|
+
4. Configure provider-side connection variables with `rainbond_manage_component_connection_envs`, then let explicit dependencies inject them. Keep consumer-local env only for names or combined URLs the application itself requires. Ask for missing secrets without displaying or persisting them in reports.
|
|
63
|
+
5. Attach persistent storage to every stateful data directory before deployment. For image-created stateless components, use `rainbond_manage_component_storage` with an explicit `volume_name`, `volume_type=share-file`, and the official `volume_path`. When multiple components must see the same files, mount the same shared writable volume on each required component. Never invent a storage class, host path, or retention guarantee. If the upstream requires local, block, or single-writer stateful semantics that the available component cannot preserve, stop and report the mismatch instead of silently weakening it.
|
|
64
|
+
6. Mount required proxy or application config as `config-file` storage before deploying the component that consumes it.
|
|
65
|
+
7. Preserve health probes through `rainbond_manage_component_probe`. Run one-shot initialization only through an evidence-backed supported path; do not create a long-running component that is expected to exit successfully and then misclassify its restart loop as health.
|
|
66
|
+
|
|
67
|
+
If any required MCP capability above is unavailable, stop with a capability blocker and name the missing operation. Do not silently emulate it with an unsafe delivery-mode or storage-semantic change.
|
|
68
|
+
|
|
69
|
+
### Component addressing
|
|
70
|
+
|
|
71
|
+
Prefer **port alias injection**:
|
|
72
|
+
|
|
73
|
+
- set the provider port alias to the env prefix expected by the consumer
|
|
74
|
+
- create the explicit dependency edge
|
|
75
|
+
- consume the platform-injected `<PREFIX>_HOST` and `<PREFIX>_PORT`
|
|
76
|
+
- do not copy a Compose service name or hard-code a container-local hostname into Rainbond env
|
|
77
|
+
|
|
78
|
+
When a hostname must be embedded inside a URL, DSN, callback, or connection string, set a semantic internal domain with `k8s_service_name` and render that verified domain into the value. Use DNS-safe hyphenated names. If deploying another copy in the same namespace, choose unique internal domains and rewrite every matching reference consistently.
|
|
79
|
+
|
|
80
|
+
Before any env write on a component with dependency-injected or port-alias env, run `rainbond_analyze_env_conflicts`. Do not create a local env that collides with an injected `_HOST` or `_PORT` value.
|
|
81
|
+
|
|
82
|
+
### Deployment best practices
|
|
83
|
+
|
|
84
|
+
1. **Explicit dependency edges.** Runtime DNS reachability is not a substitute for a Rainbond dependency. Verify the final accepted edge set is complete.
|
|
85
|
+
2. **Single reverse-proxy entry.** When browser UI and APIs require same-origin path routing, retain the official proxy, mount its routing config, wire every proxy-to-upstream edge, and expose only the proxy externally. Never deploy a stock proxy without its routing config.
|
|
86
|
+
3. **Persistent storage for state.** Databases, uploaded files, generated keys, and other durable state must survive restart. Verify storage is mounted at the official data path and is writable by the running process.
|
|
87
|
+
|
|
88
|
+
## 2. Acquire documentation on two tracks
|
|
89
|
+
|
|
90
|
+
Classify each blocker before searching:
|
|
91
|
+
|
|
92
|
+
- **Configuration-class:** missing required env, wrong provider address, dependency not wired, storage path absent, config file overriding env. Use logs, Rainbond evidence, the deployment inventory, and [failure-mode-playbook.md](failure-mode-playbook.md) first.
|
|
93
|
+
- **Protocol/framework-class:** the process is healthy but login, encryption, callbacks, cookies, setup, or a framework-specific operation behaves incorrectly. Search the official upstream source, README, issue tracker, or operations guide before changing runtime state.
|
|
94
|
+
|
|
95
|
+
When clean logs conflict with broken user behavior, treat that as protocol/framework-class. Do not guess a destructive storage or database repair from a browser symptom.
|
|
96
|
+
|
|
97
|
+
## 3. Deploy and wait for terminal build states
|
|
98
|
+
|
|
99
|
+
Deploy only after the step 1 readiness gates pass. Use `rainbond_operate_app` for the deployment and `rainbond_wait_for_build_completion` for each returned build event.
|
|
100
|
+
|
|
101
|
+
- Keep waiting with the same anchored event while the tool reports `running`.
|
|
102
|
+
- Treat the terminal result and its classified reason as evidence.
|
|
103
|
+
- Do not replace the bounded wait with repeated unanchored status polling.
|
|
104
|
+
- A slow image pull is not a failure by elapsed time alone; distinguish active pulling from a terminal image-pull error.
|
|
105
|
+
|
|
106
|
+
## 4. Check application health
|
|
107
|
+
|
|
108
|
+
Use `rainbond_get_app_health_overview` as the default whole-application signal. Inspect each abnormal component's blocker, then obtain the minimum supporting pod, event, log, env, dependency, port, and storage evidence needed to explain it.
|
|
109
|
+
|
|
110
|
+
Continue to step 6 only when every required component is green. If any required component is building, waiting, abnormal, or capacity-blocked, continue to step 5.
|
|
111
|
+
|
|
112
|
+
## 5. Diagnose, repair, and converge
|
|
113
|
+
|
|
114
|
+
Read [failure-mode-playbook.md](failure-mode-playbook.md) when the evidence matches one of its deployment patterns.
|
|
115
|
+
|
|
116
|
+
Use `rainbond-fullstack-troubleshooter` as the repair engine for existing-component build or runtime blockers. Follow its `RuntimeState` classification, evidence order, config-override gate, connection contract, event anchoring, destructive-action boundary, and attempt budget.
|
|
117
|
+
|
|
118
|
+
For each blocker:
|
|
119
|
+
|
|
120
|
+
1. Collect fresh anchored evidence.
|
|
121
|
+
2. Classify the blocker and choose the smallest evidence-backed repair.
|
|
122
|
+
3. Before env changes, run the env-conflict check and inspect mounted config files that may override env.
|
|
123
|
+
4. Announce and apply one known low-risk Rainbond-side repair. Ask before destructive, data-mutating, broad, or low-confidence actions.
|
|
124
|
+
5. Redeploy only the affected scope, wait for its terminal event, then return to step 4.
|
|
125
|
+
|
|
126
|
+
Budget rules:
|
|
127
|
+
|
|
128
|
+
- Allow at most one repair attempt for the same blocker signature, then re-verify.
|
|
129
|
+
- If the same signature remains, stop and report the evidence and required human decision.
|
|
130
|
+
- Stop after three distinct repair attempts in one run, or after two consecutive health passes with no material improvement.
|
|
131
|
+
- Stop immediately for a confirmed unreachable upstream image, cluster capacity failure, or source-code/build defect that Rainbond configuration cannot repair.
|
|
132
|
+
- Repeated identical read-only checks without new anchored evidence do not count as progress.
|
|
133
|
+
|
|
134
|
+
## 6. Pass the delivery gate
|
|
135
|
+
|
|
136
|
+
Completion requires all of the following:
|
|
137
|
+
|
|
138
|
+
1. `rainbond_get_app_health_overview` shows every required component green.
|
|
139
|
+
2. Read the real external entry from Rainbond `access_infos`; never fabricate or infer a URL.
|
|
140
|
+
3. If official documentation requires a public base URL, callback URL, trusted proxy, or secure-cookie setting, use that real entry to complete the two-phase public-URL configuration, redeploy once, and read `access_infos` again.
|
|
141
|
+
4. Verify that real entry is reachable through the intended proxy or application component.
|
|
142
|
+
5. Perform an application-specific **UI smoke** or core-flow smoke through the real entry, not only a root-path status check. Examples include loading the setup/login UI, signing in with user-provided test credentials, creating a minimal object, or completing the application's primary read/write flow.
|
|
143
|
+
6. Recheck stateful storage and the explicit dependency set after the smoke test.
|
|
144
|
+
7. When durable application state is part of the acceptance target, perform one controlled restart and verify the smoke-created object or equivalent state is still readable.
|
|
145
|
+
|
|
146
|
+
If UI automation is unavailable, stop at `needs manual UI validation`; provide the real entry and exact manual steps, but do not call the deployment complete.
|
|
147
|
+
|
|
148
|
+
Report concisely:
|
|
149
|
+
|
|
150
|
+
- topology created and external entry component
|
|
151
|
+
- component health and any intentionally omitted optional services
|
|
152
|
+
- explicit dependencies and persistent/shared storage verified
|
|
153
|
+
- real access URL from `access_infos`
|
|
154
|
+
- UI/core smoke performed and result
|
|
155
|
+
- unresolved blocker, if any, plus the exhausted attempt budget
|
|
156
|
+
|
|
157
|
+
## Common mistakes
|
|
158
|
+
|
|
159
|
+
- Treating image import or all-green containers as final delivery.
|
|
160
|
+
- Copying Compose service names directly into consumer env.
|
|
161
|
+
- Wiring only `depends_on` while missing env-reference or proxy edges.
|
|
162
|
+
- Exposing web and API separately when the official UI assumes one origin.
|
|
163
|
+
- Deploying a reverse proxy before mounting its routing config.
|
|
164
|
+
- Deploying a database or generated-key directory without persistent storage.
|
|
165
|
+
- Editing env while a mounted config file supplies the effective value.
|
|
166
|
+
- Declaring a slow image pull failed before its event reaches a terminal state.
|
|
167
|
+
- Testing a browser protocol with an incompatible plain HTTP request and misdiagnosing the result.
|
|
168
|
+
- Reporting a guessed URL instead of Rainbond `access_infos`.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Open-source App Deploy runtime gate
|
|
2
|
+
|
|
3
|
+
Canonical progressive-loading contract: `rainskills.skill-runtime-contract.v1`.
|
|
4
|
+
|
|
5
|
+
<!-- rainskills-runtime-gate:start -->
|
|
6
|
+
## 单运行环境 CLI 门禁(最高优先级)
|
|
7
|
+
|
|
8
|
+
本机只允许连接一个 Rainbond 运行环境。当前 Skill 在本会话第一次调用 Rainbond 前,执行固定 launcher 的 `runtime status --json`。返回 `connected` 且 `usable=true` 后,所有查询和变更直接通过本地 `~/.rainbond/bin/rainskills-tools.js` 执行。不得配置或直接调用客户端 MCP,不得执行环境枚举或业务 operation 生命周期命令,也不得生成或传递运行环境 ID、业务 operation ID 或 intent JSON。
|
|
9
|
+
|
|
10
|
+
没有运行环境时,让用户选择 Rainbond Cloud 或一个已有/新建的私有 Rainbond,并执行对应的 `runtime connect`。连接和重新授权必须进入浏览器 Device Flow,不复用 Shell 中缓存的 JWT;新凭据通过 live probe 后才覆盖唯一运行环境。CLI 返回 401 时,只读调用可在 `runtime reconnect` 成功后重试一次;写调用不得自动重放,必须先查询平台真实状态。403 直接停止,不重新授权。
|
|
11
|
+
|
|
12
|
+
`context resolve` 是无状态调用:单一工作空间直接返回上下文,多个候选返回组合选项;用户选择后由当前任务直接携带 team/region 参数,不执行 `context select`,不写本地 operation。所有可变 `call` 仍需先取得 confirmation ID,再以完全相同的输入追加 `--confirm` 执行一次。
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"schema": "rainskills.single-runtime-contract.v1",
|
|
17
|
+
"package_version": "rainskills@0.1.22",
|
|
18
|
+
"runtime_status": [
|
|
19
|
+
"node",
|
|
20
|
+
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
21
|
+
"runtime",
|
|
22
|
+
"status",
|
|
23
|
+
"--json"
|
|
24
|
+
],
|
|
25
|
+
"runtime_connect": {
|
|
26
|
+
"saas": [
|
|
27
|
+
"node",
|
|
28
|
+
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
29
|
+
"runtime",
|
|
30
|
+
"connect",
|
|
31
|
+
"<target>",
|
|
32
|
+
"--saas"
|
|
33
|
+
],
|
|
34
|
+
"private_existing": [
|
|
35
|
+
"node",
|
|
36
|
+
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
37
|
+
"runtime",
|
|
38
|
+
"connect",
|
|
39
|
+
"<target>",
|
|
40
|
+
"--rainbond-url",
|
|
41
|
+
"<console-origin>"
|
|
42
|
+
],
|
|
43
|
+
"install_private": [
|
|
44
|
+
"node",
|
|
45
|
+
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
46
|
+
"runtime",
|
|
47
|
+
"connect",
|
|
48
|
+
"<target>",
|
|
49
|
+
"--install-private",
|
|
50
|
+
"--location",
|
|
51
|
+
"<local-or-server>"
|
|
52
|
+
],
|
|
53
|
+
"reconnect": [
|
|
54
|
+
"node",
|
|
55
|
+
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
56
|
+
"runtime",
|
|
57
|
+
"reconnect",
|
|
58
|
+
"<target>"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
"input_commands": {
|
|
62
|
+
"context_resolve": {
|
|
63
|
+
"argv": [
|
|
64
|
+
"node",
|
|
65
|
+
"<home>/.rainbond/bin/rainskills-tools.js",
|
|
66
|
+
"context",
|
|
67
|
+
"resolve",
|
|
68
|
+
"--input",
|
|
69
|
+
"-",
|
|
70
|
+
"--skill-id",
|
|
71
|
+
"rainbond-opensource-app-deploy"
|
|
72
|
+
],
|
|
73
|
+
"stdin": {
|
|
74
|
+
"required": [
|
|
75
|
+
"enterprise",
|
|
76
|
+
"workspace"
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"read": {
|
|
81
|
+
"argv": [
|
|
82
|
+
"node",
|
|
83
|
+
"<home>/.rainbond/bin/rainskills-tools.js",
|
|
84
|
+
"read",
|
|
85
|
+
"<tool>",
|
|
86
|
+
"--input",
|
|
87
|
+
"-",
|
|
88
|
+
"--skill-id",
|
|
89
|
+
"rainbond-opensource-app-deploy"
|
|
90
|
+
],
|
|
91
|
+
"stdin_schema_source": "tool-catalog"
|
|
92
|
+
},
|
|
93
|
+
"call": {
|
|
94
|
+
"argv": [
|
|
95
|
+
"node",
|
|
96
|
+
"<home>/.rainbond/bin/rainskills-tools.js",
|
|
97
|
+
"call",
|
|
98
|
+
"<tool>",
|
|
99
|
+
"--input",
|
|
100
|
+
"-",
|
|
101
|
+
"--skill-id",
|
|
102
|
+
"rainbond-opensource-app-deploy"
|
|
103
|
+
],
|
|
104
|
+
"stdin_schema_source": "tool-catalog"
|
|
105
|
+
},
|
|
106
|
+
"call_confirm": {
|
|
107
|
+
"argv": [
|
|
108
|
+
"node",
|
|
109
|
+
"<home>/.rainbond/bin/rainskills-tools.js",
|
|
110
|
+
"call",
|
|
111
|
+
"<tool>",
|
|
112
|
+
"--input",
|
|
113
|
+
"-",
|
|
114
|
+
"--skill-id",
|
|
115
|
+
"rainbond-opensource-app-deploy",
|
|
116
|
+
"--confirm",
|
|
117
|
+
"<confirmation-id>"
|
|
118
|
+
],
|
|
119
|
+
"stdin_schema_source": "same-confirmed-input"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
<!-- rainskills-runtime-gate:end -->
|
|
125
|
+
|
|
126
|
+
受限沙箱(包括 Codex)执行本地状态命令时,必须申请用户级受保护目录访问权限;在 Codex 中使用 `require_escalated`。不得修改 `~/.rainbond` 权限、复制受保护状态到工作区,或因沙箱权限错误建议重装。
|
|
127
|
+
|
|
128
|
+
涉及浏览器或设备授权的 `runtime connect`,以及恢复/安装场景中的 `rainskills <target> --self-hosted`,必须在附加交互终端(TTY)中运行;在 Codex 中设置 `tty: true` 并保持进程附着直到授权完成。禁止通过非交互命令要求用户粘贴 JWT;非交互模式只可复用已存在的受保护凭据。
|
|
129
|
+
|
|
130
|
+
执行优化:同一会话内只检查一次 Node.js(首次使用本地 CLI 前);仅在 Node.js 或 Rainskills 安装、升级,或 PATH 变更后失效。固定 launcher 和 argv 已在本 Skill 中,禁止读取、搜索或探测 `rainskills.js`,也禁止执行 `npm root -g`。每个新的业务操作仍需要刷新一次环境列表;带已有 `operation_id` 或 `onboarding-id` 的续接复用已绑定的环境 ID,不重复枚举环境。
|
|
131
|
+
|
|
132
|
+
<!-- rainskills-runtime-routing:start -->
|
|
133
|
+
## 缺少运行环境时
|
|
134
|
+
|
|
135
|
+
先说:“可以,我会帮你部署未收录到应用市场的开源应用。不过目前还没有可用的应用运行环境。你刚安装的 Rainskills 是 AI 部署助手,它负责分析项目并执行部署;应用实际会运行在 Rainbond 上。Rainbond 是一套应用运行和管理平台,负责容器运行、域名访问、日志和存储等工作,你不需要了解 Kubernetes。”
|
|
136
|
+
|
|
137
|
+
#### 选择运行环境
|
|
138
|
+
|
|
139
|
+
请提示“请选择应用要运行的环境:”,并只显示:
|
|
140
|
+
|
|
141
|
+
1) 云端环境(免费体验)
|
|
142
|
+
2) 本机环境
|
|
143
|
+
3) 独立服务器
|
|
144
|
+
4) 已有 Rainbond
|
|
145
|
+
|
|
146
|
+
选择 1 时执行 `saas` route;选择 2 时执行 `install-private` 并使用 `["--location", "local"]`;选择 3 时执行 `install-private` 并使用 `["--location", "server"]`;选择 4 时执行本地 launcher + `["runtime", "message", "--id", "private-console-origin"]` 后执行 `private-existing`。不得显示“私有环境”或部署位置中间层,不得在运行环境准备完成前继续读取或修改部署描述文件。
|
|
147
|
+
<!-- rainskills-runtime-routing:end -->
|
|
@@ -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.22` 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 连接或修改服务器。
|
|
@@ -17,7 +17,7 @@ description: Use for a user-requested, read-only Rainbond platform query about t
|
|
|
17
17
|
```json
|
|
18
18
|
{
|
|
19
19
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
20
|
-
"package_version": "rainskills@0.1.
|
|
20
|
+
"package_version": "rainskills@0.1.22",
|
|
21
21
|
"runtime_status": [
|
|
22
22
|
"node",
|
|
23
23
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -17,7 +17,7 @@ description: "Use only when the user explicitly asks to initialize or link a loc
|
|
|
17
17
|
```json
|
|
18
18
|
{
|
|
19
19
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
20
|
-
"package_version": "rainskills@0.1.
|
|
20
|
+
"package_version": "rainskills@0.1.22",
|
|
21
21
|
"runtime_status": [
|
|
22
22
|
"node",
|
|
23
23
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|
|
@@ -17,7 +17,7 @@ description: "Use when the user explicitly asks to install a local or cloud Rain
|
|
|
17
17
|
```json
|
|
18
18
|
{
|
|
19
19
|
"schema": "rainskills.single-runtime-contract.v1",
|
|
20
|
-
"package_version": "rainskills@0.1.
|
|
20
|
+
"package_version": "rainskills@0.1.22",
|
|
21
21
|
"runtime_status": [
|
|
22
22
|
"node",
|
|
23
23
|
"<home>/.rainbond/lib/rainskills/bin/rainskills.js",
|