rainskills 0.1.48 → 0.1.49

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 (25) hide show
  1. package/SKILL.md +1 -1
  2. package/contracts/runtime/skills/rainbond-scheduled-task.yaml +13 -0
  3. package/contracts/tool-references.json +51 -1
  4. package/marketplace/rainskills/.claude-plugin/plugin.json +1 -1
  5. package/marketplace/rainskills/.codex-plugin/plugin.json +1 -1
  6. package/marketplace/rainskills/skills/rainskills/SKILL.md +2 -2
  7. package/package.json +2 -1
  8. package/rainbond-ai-assistant/references/generated/runtime-gate.md +2 -2
  9. package/rainbond-app-assistant/references/generated/runtime-gate.md +3 -3
  10. package/rainbond-app-version-assistant/references/generated/runtime-gate.md +2 -2
  11. package/rainbond-delivery-verifier/references/generated/runtime-gate.md +2 -2
  12. package/rainbond-env-sync/references/generated/runtime-gate.md +2 -2
  13. package/rainbond-fullstack-bootstrap/references/generated/runtime-gate.md +3 -3
  14. package/rainbond-fullstack-troubleshooter/references/generated/runtime-gate.md +2 -2
  15. package/rainbond-opensource-app-deploy/references/generated/runtime-gate.md +2 -2
  16. package/rainbond-platform-installer/SKILL.md +1 -1
  17. package/rainbond-platform-installer/scripts/installed-version.js +1 -1
  18. package/rainbond-platform-plugin-manager/references/generated/runtime-gate.md +2 -2
  19. package/rainbond-platform-query/references/generated/runtime-gate.md +2 -2
  20. package/rainbond-project-init/references/generated/runtime-gate.md +2 -2
  21. package/rainbond-scheduled-task/SKILL.md +55 -0
  22. package/rainbond-scheduled-task/references/generated/runtime-gate.md +178 -0
  23. package/rainbond-scheduled-task/references/generated/runtime-routing.md +15 -0
  24. package/rainbond-template-installer/references/generated/runtime-gate.md +2 -2
  25. package/scripts/install-local-cli.mjs +1 -0
package/SKILL.md CHANGED
@@ -56,7 +56,7 @@ Hermes Agent 中必须使用 `terminal` 以 `background=true` 启动授权命令
56
56
 
57
57
  DeepSeek Harness 和 WorkBuddy 也必须保持原命令附着直到退出;如果宿主把长命令转成持久终端或后台任务,只能轮询该原始命令句柄,不得另起 `runtime status` 推测授权结果。WorkBuddy 安装后若当前任务的 Skill 清单尚未刷新,在下一条业务动作前先刷新 Skill 列表或新建任务,不得退回内置 Sites 代替 Rainbond 部署。
58
58
 
59
- Rainskills 只保存一个全局运行环境,不维护环境列表、名称、默认值或环境 ID。使用固定 launcher `node <home>/.rainbond/lib/rainskills/bin/rainskills.js`(运行包版本 `rainskills@0.1.48`):
59
+ Rainskills 只保存一个全局运行环境,不维护环境列表、名称、默认值或环境 ID。使用固定 launcher `node <home>/.rainbond/lib/rainskills/bin/rainskills.js`(运行包版本 `rainskills@0.1.49`):
60
60
 
61
61
  - 状态:执行 `runtime status --json`。
62
62
  - 首次连接:执行 `runtime connect <target> --saas` 或 `runtime connect <target> --rainbond-url <Console origin>`。
@@ -0,0 +1,13 @@
1
+ schema: rainskills.runtime-overlay.v1
2
+ skill_id: rainbond-scheduled-task
3
+ profiles: [cli, embedded]
4
+ command_set: [context_resolve, read, call, call_confirm]
5
+ version_guard: none
6
+ missing_runtime_mode: existing_application
7
+ scope_discriminator: workspace
8
+ resume_target: scheduled-task
9
+ invariants:
10
+ - Recurring cron tasks are created only after the user confirms frequency, target, and prompt in one line.
11
+ - Deletion and disabling require a second explicit confirmation and never run unattended.
12
+ - Notification policies other than record_only require schedule_check_notification to succeed first.
13
+ - Never report a task as created, updated, or deleted unless the tool result confirms it.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "note": "embedded skills 引用的 rainbond_* 工具清单。由 scripts/export-tool-references.mjs 生成,请勿手工编辑。",
3
+ "note": "embedded skills 引用的 rainbond_*/schedule_* 工具清单。由 scripts/export-tool-references.mjs 生成,请勿手工编辑。",
4
4
  "skills": [
5
5
  "rainbond-ai-assistant",
6
6
  "rainbond-app-assistant",
@@ -10,6 +10,7 @@
10
10
  "rainbond-fullstack-troubleshooter",
11
11
  "rainbond-platform-plugin-manager",
12
12
  "rainbond-platform-query",
13
+ "rainbond-scheduled-task",
13
14
  "rainbond-template-installer"
14
15
  ],
15
16
  "tools": [
@@ -707,8 +708,57 @@
707
708
  "rainbond-fullstack-troubleshooter",
708
709
  "rainbond-platform-plugin-manager",
709
710
  "rainbond-platform-query",
711
+ "rainbond-scheduled-task",
710
712
  "rainbond-template-installer"
711
713
  ]
714
+ },
715
+ {
716
+ "name": "schedule_check_notification",
717
+ "skills": [
718
+ "rainbond-scheduled-task"
719
+ ]
720
+ },
721
+ {
722
+ "name": "schedule_create_task",
723
+ "skills": [
724
+ "rainbond-scheduled-task"
725
+ ]
726
+ },
727
+ {
728
+ "name": "schedule_delete_task",
729
+ "skills": [
730
+ "rainbond-scheduled-task"
731
+ ]
732
+ },
733
+ {
734
+ "name": "schedule_list_runs",
735
+ "skills": [
736
+ "rainbond-scheduled-task"
737
+ ]
738
+ },
739
+ {
740
+ "name": "schedule_list_tasks",
741
+ "skills": [
742
+ "rainbond-scheduled-task"
743
+ ]
744
+ },
745
+ {
746
+ "name": "schedule_set_task_enabled",
747
+ "skills": [
748
+ "rainbond-scheduled-task"
749
+ ]
750
+ },
751
+ {
752
+ "name": "schedule_test_task",
753
+ "skills": [
754
+ "rainbond-scheduled-task"
755
+ ]
756
+ },
757
+ {
758
+ "name": "schedule_update_task",
759
+ "skills": [
760
+ "rainbond-scheduled-task"
761
+ ]
712
762
  }
713
763
  ]
714
764
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rainskills",
3
- "version": "0.1.48",
3
+ "version": "0.1.49",
4
4
  "description": "Install the complete Rainskills AI deployment skill suite as one product.",
5
5
  "author": {
6
6
  "name": "Goodrain",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rainskills",
3
- "version": "0.1.48",
3
+ "version": "0.1.49",
4
4
  "description": "Install the complete Rainskills AI deployment skill suite as one product.",
5
5
  "author": {
6
6
  "name": "Goodrain",
@@ -14,7 +14,7 @@ This is the single marketplace entry for the complete Rainskills product. The in
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.48 <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.
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.49 <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
 
@@ -56,7 +56,7 @@ Hermes Agent 中必须使用 `terminal` 以 `background=true` 启动授权命令
56
56
 
57
57
  DeepSeek Harness 和 WorkBuddy 也必须保持原命令附着直到退出;如果宿主把长命令转成持久终端或后台任务,只能轮询该原始命令句柄,不得另起 `runtime status` 推测授权结果。WorkBuddy 安装后若当前任务的 Skill 清单尚未刷新,在下一条业务动作前先刷新 Skill 列表或新建任务,不得退回内置 Sites 代替 Rainbond 部署。
58
58
 
59
- Rainskills 只保存一个全局运行环境,不维护环境列表、名称、默认值或环境 ID。使用固定 launcher `node <home>/.rainbond/lib/rainskills/bin/rainskills.js`(运行包版本 `rainskills@0.1.48`):
59
+ Rainskills 只保存一个全局运行环境,不维护环境列表、名称、默认值或环境 ID。使用固定 launcher `node <home>/.rainbond/lib/rainskills/bin/rainskills.js`(运行包版本 `rainskills@0.1.49`):
60
60
 
61
61
  - 状态:执行 `runtime status --json`。
62
62
  - 首次连接:执行 `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.48",
3
+ "version": "0.1.49",
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",
@@ -52,6 +52,7 @@
52
52
  "rainbond-platform-plugin-manager/",
53
53
  "rainbond-platform-query/",
54
54
  "rainbond-project-init/",
55
+ "rainbond-scheduled-task/",
55
56
  "rainbond-template-installer/",
56
57
  "scripts/build-skill-manifest.mjs",
57
58
  "scripts/sync-ai-engine-contract.mjs",
@@ -1,5 +1,5 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: 956b34343cd01699bbb4bbbdd2ae3d9ac3f114a20ebc3f1989b3e053cad40204 -->
2
+ <!-- source-sha256: d06c9b30ca47087456572741d9a597193bd23827778a65d76da1ff08825b335f -->
3
3
  <!-- profile: cli -->
4
4
  <!-- rainskills-runtime-gate:start -->
5
5
  # 单运行环境 CLI 门禁(生成文件)
@@ -48,7 +48,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
48
48
  ```json
49
49
  {
50
50
  "schema": "rainskills.single-runtime-contract.v1",
51
- "package_version": "rainskills@0.1.48",
51
+ "package_version": "rainskills@0.1.49",
52
52
  "runtime_status": [
53
53
  "node",
54
54
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -1,12 +1,12 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: 6f505bc057d0772f2c2a66c39ff77baf0b9b0efe05233c5bd06a8b2f76f130db -->
2
+ <!-- source-sha256: 94b0c8fa4413883455940f35188e9bc6423b6b0e7448dc2687ffde10bddbf11b -->
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。固定 batch/recipe 请求和 CLI 返回的 confirmation_id 属于受保护调用协议,不是模型自建业务工作流。
8
8
 
9
- 运行状态的 `package_version` 必须与下方 JSON contract 完全一致;缺失或不一致时先执行固定版本 `rainskills@0.1.48` 的更新/修复流程。不得在版本错配时继续业务调用。
9
+ 运行状态的 `package_version` 必须与下方 JSON contract 完全一致;缺失或不一致时先执行固定版本 `rainskills@0.1.49` 的更新/修复流程。不得在版本错配时继续业务调用。
10
10
 
11
11
  如果 integrity.status=failed 或 repair_required=true,停止业务调用并修复相同版本的本地安装;不得将缺模块当作 API 参数错误排查或绕过兼容入口。
12
12
 
@@ -47,7 +47,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
47
47
  ```json
48
48
  {
49
49
  "schema": "rainskills.single-runtime-contract.v1",
50
- "package_version": "rainskills@0.1.48",
50
+ "package_version": "rainskills@0.1.49",
51
51
  "runtime_status": [
52
52
  "node",
53
53
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -1,5 +1,5 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: ec4052fe70a2c90addbe883cce5cd50b49bb846e048234928ea7487b60a30d79 -->
2
+ <!-- source-sha256: 344563b8207113b055405462b61b2f7f94e4254f6cfc9eebfb8c8b9a8cac3833 -->
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.48",
49
+ "package_version": "rainskills@0.1.49",
50
50
  "runtime_status": [
51
51
  "node",
52
52
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -1,5 +1,5 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: a70987d9e8647849ba3ab52fda45cf5d3a63c08863ee046803534bea2ba2829f -->
2
+ <!-- source-sha256: b0f9b8ee3645e4e50a063bd38981a168fc71d62311f449c9a44f44a58fc011ce -->
3
3
  <!-- profile: cli -->
4
4
  <!-- rainskills-runtime-gate:start -->
5
5
  # 单运行环境 CLI 门禁(生成文件)
@@ -47,7 +47,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
47
47
  ```json
48
48
  {
49
49
  "schema": "rainskills.single-runtime-contract.v1",
50
- "package_version": "rainskills@0.1.48",
50
+ "package_version": "rainskills@0.1.49",
51
51
  "runtime_status": [
52
52
  "node",
53
53
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -1,5 +1,5 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: e845c61215e823b32777db264c7ae1d7639c25ac864ca69bb1ef889191945448 -->
2
+ <!-- source-sha256: f4077d75aca982886a47ba01e21717996e9f135142b915837641b1f7fb13f4b6 -->
3
3
  <!-- profile: cli -->
4
4
  <!-- rainskills-runtime-gate:start -->
5
5
  # 单运行环境 CLI 门禁(生成文件)
@@ -47,7 +47,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
47
47
  ```json
48
48
  {
49
49
  "schema": "rainskills.single-runtime-contract.v1",
50
- "package_version": "rainskills@0.1.48",
50
+ "package_version": "rainskills@0.1.49",
51
51
  "runtime_status": [
52
52
  "node",
53
53
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -1,12 +1,12 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: 5d68e4ae0d5cc0e635bbc8382f9ad3d6490f0c9aacf676d1556bcfa5456a5c46 -->
2
+ <!-- source-sha256: 3a8f6745191f8a11e76fbe37af0516e919620a92b72ba46d02f790de655a467b -->
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。固定 batch/recipe 请求和 CLI 返回的 confirmation_id 属于受保护调用协议,不是模型自建业务工作流。
8
8
 
9
- 运行状态的 `package_version` 必须与下方 JSON contract 完全一致;缺失或不一致时先执行固定版本 `rainskills@0.1.48` 的更新/修复流程。不得在版本错配时继续业务调用。
9
+ 运行状态的 `package_version` 必须与下方 JSON contract 完全一致;缺失或不一致时先执行固定版本 `rainskills@0.1.49` 的更新/修复流程。不得在版本错配时继续业务调用。
10
10
 
11
11
  如果 integrity.status=failed 或 repair_required=true,停止业务调用并修复相同版本的本地安装;不得将缺模块当作 API 参数错误排查或绕过兼容入口。
12
12
 
@@ -47,7 +47,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
47
47
  ```json
48
48
  {
49
49
  "schema": "rainskills.single-runtime-contract.v1",
50
- "package_version": "rainskills@0.1.48",
50
+ "package_version": "rainskills@0.1.49",
51
51
  "runtime_status": [
52
52
  "node",
53
53
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -1,5 +1,5 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: 581087e0add894e5a54144793408923b5d7b8291e19597ff794a3953e59dd518 -->
2
+ <!-- source-sha256: 6219ab17406558d9bdc4a9ebc4c69ad7a4f6b7abaf80285a2e6bc67017e83fef -->
3
3
  <!-- profile: cli -->
4
4
  <!-- rainskills-runtime-gate:start -->
5
5
  # 单运行环境 CLI 门禁(生成文件)
@@ -47,7 +47,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
47
47
  ```json
48
48
  {
49
49
  "schema": "rainskills.single-runtime-contract.v1",
50
- "package_version": "rainskills@0.1.48",
50
+ "package_version": "rainskills@0.1.49",
51
51
  "runtime_status": [
52
52
  "node",
53
53
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -1,5 +1,5 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: 561da2b6cec0ca06af76928f22912855c1b01bdb53312d31cfaacf437fe1d4b7 -->
2
+ <!-- source-sha256: b159d7cc3288ce01cad6a436f4045d1364adb10ab44b299d6d982d1dd135643a -->
3
3
  <!-- profile: cli -->
4
4
  <!-- rainskills-runtime-gate:start -->
5
5
  # 单运行环境 CLI 门禁(生成文件)
@@ -47,7 +47,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
47
47
  ```json
48
48
  {
49
49
  "schema": "rainskills.single-runtime-contract.v1",
50
- "package_version": "rainskills@0.1.48",
50
+ "package_version": "rainskills@0.1.49",
51
51
  "runtime_status": [
52
52
  "node",
53
53
  "<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.48` 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.
35
+ 2. Use the installed local launcher `["node", "<home>/.rainbond/lib/rainskills/bin/rainskills.js"]`; its protected runtime package marker is `rainskills@0.1.49` 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 连接或修改服务器。
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
 
3
3
  module.exports = Object.freeze({
4
- version: "0.1.48",
4
+ version: "0.1.49",
5
5
  });
@@ -1,5 +1,5 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: 980f0e4d46020ec403777f9b9b27042cbd93daa9cfbf7eda0778a06bffddc108 -->
2
+ <!-- source-sha256: 53ee1e25073e9c773aeb11b1785f777b450117c083867d3c9c6243301dc99eba -->
3
3
  <!-- profile: cli -->
4
4
  <!-- rainskills-runtime-gate:start -->
5
5
  # 单运行环境 CLI 门禁(生成文件)
@@ -47,7 +47,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
47
47
  ```json
48
48
  {
49
49
  "schema": "rainskills.single-runtime-contract.v1",
50
- "package_version": "rainskills@0.1.48",
50
+ "package_version": "rainskills@0.1.49",
51
51
  "runtime_status": [
52
52
  "node",
53
53
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -1,5 +1,5 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: c6f64621e73bc3f87a7c826ac3a4a2f3088bf645671b7bb12d13d72df3315242 -->
2
+ <!-- source-sha256: 7c043b27a36ae34aa47f62ae3d1e45a73d0ec751895382ccf4fee51867f07fa8 -->
3
3
  <!-- profile: cli -->
4
4
  <!-- rainskills-runtime-gate:start -->
5
5
  # 单运行环境 CLI 门禁(生成文件)
@@ -47,7 +47,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
47
47
  ```json
48
48
  {
49
49
  "schema": "rainskills.single-runtime-contract.v1",
50
- "package_version": "rainskills@0.1.48",
50
+ "package_version": "rainskills@0.1.49",
51
51
  "runtime_status": [
52
52
  "node",
53
53
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -1,5 +1,5 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: 8001348d8c01b25770adef316ca3ef95899bd7922e85597f43fae393e41e6f84 -->
2
+ <!-- source-sha256: 9f3508c02c004b230ecca84b39ec6fa4666e29e3c64a37fad5918a60f7a62331 -->
3
3
  <!-- profile: cli -->
4
4
  <!-- rainskills-runtime-gate:start -->
5
5
  # 单运行环境 CLI 门禁(生成文件)
@@ -47,7 +47,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
47
47
  ```json
48
48
  {
49
49
  "schema": "rainskills.single-runtime-contract.v1",
50
- "package_version": "rainskills@0.1.48",
50
+ "package_version": "rainskills@0.1.49",
51
51
  "runtime_status": [
52
52
  "node",
53
53
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: rainbond-scheduled-task
3
+ description: Create, inspect, pause, resume, delete, or trial-run recurring (cron) Rainbond scheduled tasks for enterprise administrators, using the schedule_* tools. Exclude one-time reminders and non-admin users.
4
+ ---
5
+
6
+ # Rainbond Scheduled Task
7
+
8
+ ## Purpose
9
+
10
+ 用自然语言管理**周期**定时任务:创建、查看、修改、启停、删除、试跑、看运行历史。
11
+
12
+ 只支持 cron 周期任务;一次性提醒不支持。仅企业管理员可用(工具对成员不注册,直接告知无权限)。
13
+
14
+ ## Fast path
15
+
16
+ 1. Read the [generated Runtime Gate](references/generated/runtime-gate.md) once per session; if absent, follow [generated Runtime Routing](references/generated/runtime-routing.md).
17
+ 2. 解析:频率、目标(team/region/app/component)、要执行的 prompt、是否需要飞书通知。
18
+ 3. 用**一句话**向用户确认,不铺表格:
19
+
20
+ > 每天 09:00 巡检 default/rainbond 的 nginx,汇总结果、仅记录。确认创建?
21
+
22
+ 4. 确认后调用 `schedule_create_task`;成功只回一句“已创建,下次 10-30 09:00”。
23
+
24
+ ## Field mapping
25
+
26
+ | 用户表达 | 取值 |
27
+ |---|---|
28
+ | 每天 9 点 | `0 9 * * *` |
29
+ | 每周一 10 点 | `0 10 * * 1` |
30
+ | 每 30 分钟 | `*/30 * * * *` |
31
+ | 未指定目标 | 使用当前会话的 team/region/app/component |
32
+ | “有问题发飞书” | `notification_policy=attention_required` |
33
+ | 未指定通知 | `notification_policy=record_only` |
34
+ | 结果模式 | 固定 `result_mode=report`(汇总) |
35
+ | 审批 | 固定 `approval_mode=manual`,高风险与删除永远人工 |
36
+
37
+ ## Management
38
+
39
+ | 请求 | 工具 |
40
+ |---|---|
41
+ | 看有哪些任务 | `schedule_list_tasks` |
42
+ | 改成 8 点半 | `schedule_update_task` |
43
+ | 先暂停 / 恢复 | `schedule_set_task_enabled` |
44
+ | 删除 | `schedule_delete_task`(先二次确认) |
45
+ | 现在跑一次 | `schedule_test_task` |
46
+ | 最近结果 | `schedule_list_runs` |
47
+ | 飞书是否就绪 | `schedule_check_notification` |
48
+
49
+ ## Constraints
50
+
51
+ - 不要说“已创建”除非工具返回成功;
52
+ - 不猜企业 ID,不跨企业创建;
53
+ - 删除、停用必须二次确认;
54
+ - 定时任务运行不写记忆,不要向用户承诺“会记住上次巡检”;
55
+ - 通知策略非 `record_only` 时,先 `schedule_check_notification`,未就绪则提示先绑定飞书群。
@@ -0,0 +1,178 @@
1
+ <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
+ <!-- source-sha256: 1a4feeb33211ef95016d74be264e86e660e268f7b44c2776db28c721892aff4d -->
3
+ <!-- profile: cli -->
4
+ <!-- rainskills-runtime-gate:start -->
5
+ # 单运行环境 CLI 门禁(生成文件)
6
+
7
+ 本机只允许连接一个 Rainbond 运行环境。当前 Skill 在本会话第一次调用 Rainbond 前,执行固定 launcher 的 `runtime status --json`。只有命令退出码为 0、`state=connected` 且 `usable=true` 时才继续。不得配置或直接调用客户端 MCP,不得枚举环境、读取凭据、创建自定义业务 operation,或生成运行环境 ID、业务 operation ID 与 intent JSON。固定 batch/recipe 请求和 CLI 返回的 confirmation_id 属于受保护调用协议,不是模型自建业务工作流。
8
+
9
+ 运行状态必须来自固定 launcher;不得使用未验证的替代 CLI 或传输。
10
+
11
+ 如果 integrity.status=failed 或 repair_required=true,停止业务调用并修复相同版本的本地安装;不得将缺模块当作 API 参数错误排查或绕过兼容入口。
12
+
13
+ 没有可用运行环境时,严格按下方 overlay 的 `missing_runtime_mode` 进入对应的 Runtime Routing;不得扩大可选环境范围。连接和重新授权必须使用浏览器 Device Flow,不复用 Shell 中缓存的 JWT;Device Flow 不依赖 stdin TTY,必须保持进程附着直到完成。新凭据只有通过 live probe 后才可覆盖唯一运行环境。CLI 返回 401 时,只读调用可在 `runtime reconnect` 成功后重试一次;写调用不得自动重放,必须先查询平台真实状态。403 直接停止,不重新授权。
14
+
15
+ 授权命令是同步门禁。命令返回“进程仍在运行”或会话 ID 时,只等待或轮询同一个命令会话;在该会话结束前禁止任何后续业务步骤。浏览器页面显示成功不代表完成;只有原命令退出码为 0,并输出 `rainskills.runtime-connect-result.v1` 且 `state=connected`,才可继续。不得另起 `runtime status` 猜测完成。
16
+
17
+ Codex 中取得 `session_id` 后,对该会话反复调用 `write_stdin`(空输入轮询),直到返回 `exit_code`。`RAINSKILLS_AGENT_WAIT_REQUIRED:runtime-connect` 与 `RAINSKILLS_AGENT_WAIT_COMPLETE:runtime-connect` 都不替代最终退出码。
18
+
19
+ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对原会话调用 `process(action="poll")` 和 `process(action="wait")`。带 `--input -` 的短业务命令使用前台 `terminal` 和单引号 heredoc 写入完整 JSON;不得用 `echo`、把 JSON 放入 argv、合并 stderr 或后台化短命令。
20
+
21
+ 固定 `<target>`:Codex=`codex`、Claude Code=`claude`、Pi Agent=`pi`、DeepSeek Harness=`dsh`、WorkBuddy=`workbuddy`、Hermes Agent=`hermes`。DeepSeek Harness 和 WorkBuddy 返回持久终端或后台句柄时,只轮询原句柄直到退出。
22
+
23
+ 构建、镜像拉取或部署收敛在一个用户回合内最多等待 60 秒:同一 event 只调用一次 `rainbond_wait_for_build_completion(timeout=60)`。返回 `status=running` 时立即结束当前回复,报告已完成动作、当前状态和 event;不得在同一回合再次等待、手工轮询或继续推理。用户之后明确说“继续”时,才对同一 event 开始新的 60 秒检查回合。
24
+
25
+ 受限沙箱执行本地状态命令时必须申请用户级受保护目录访问权限;不得修改 `~/.rainbond` 权限或复制受保护状态。固定 launcher 与 argv 已在本文件声明,禁止搜索或探测 `rainskills.js`,也禁止执行 `npm root -g`。
26
+
27
+ `context resolve` 是无状态调用。首次 stdin 固定为 `{"required":["enterprise","workspace"]}` 字面请求体;显式 team/region 放入 `hints`,多候选选择通过 `selection.option_id` 重新查询验证。不得执行 `context select` 或写本地 context。所有可变 `call` 必须先取得 confirmation ID,再以完全相同输入追加 `--confirm` 执行一次。
28
+
29
+ ## Skill overlay
30
+
31
+ - `skill_id`: `rainbond-scheduled-task`
32
+ - `supported_profiles`: `cli, embedded`
33
+ - `command_set`: `context_resolve, read, call, call_confirm`
34
+ - `version_guard`: `none`
35
+ - `missing_runtime_mode`: `existing_application`
36
+ - `scope_discriminator`: `workspace`
37
+ - `resume_target`: `scheduled-task`
38
+
39
+ 不可弱化的不变量:
40
+
41
+ - Recurring cron tasks are created only after the user confirms frequency, target, and prompt in one line.
42
+ - Deletion and disabling require a second explicit confirmation and never run unattended.
43
+ - Notification policies other than record_only require schedule_check_notification to succeed first.
44
+ - Never report a task as created, updated, or deleted unless the tool result confirms it.
45
+
46
+ ## 固定 CLI contract
47
+
48
+ ```json
49
+ {
50
+ "schema": "rainskills.single-runtime-contract.v1",
51
+ "package_version": "rainskills@0.1.49",
52
+ "runtime_status": [
53
+ "node",
54
+ "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
55
+ "runtime",
56
+ "status",
57
+ "--json"
58
+ ],
59
+ "runtime_connect": {
60
+ "saas": [
61
+ "node",
62
+ "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
63
+ "runtime",
64
+ "connect",
65
+ "<target>",
66
+ "--saas"
67
+ ],
68
+ "private_existing": [
69
+ "node",
70
+ "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
71
+ "runtime",
72
+ "connect",
73
+ "<target>",
74
+ "--rainbond-url",
75
+ "<console-origin>"
76
+ ],
77
+ "install_private": [
78
+ "node",
79
+ "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
80
+ "runtime",
81
+ "connect",
82
+ "<target>",
83
+ "--install-private",
84
+ "--location",
85
+ "<local-or-server>"
86
+ ],
87
+ "reconnect": [
88
+ "node",
89
+ "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
90
+ "runtime",
91
+ "reconnect",
92
+ "<target>"
93
+ ]
94
+ },
95
+ "input_commands": {
96
+ "context_resolve": {
97
+ "argv": [
98
+ "node",
99
+ "<home>/.rainbond/bin/rainskills-tools.js",
100
+ "context",
101
+ "resolve",
102
+ "--input",
103
+ "-",
104
+ "--skill-id",
105
+ "rainbond-scheduled-task"
106
+ ],
107
+ "stdin": {
108
+ "default": {
109
+ "required": [
110
+ "enterprise",
111
+ "workspace"
112
+ ]
113
+ },
114
+ "with_hints": {
115
+ "required": [
116
+ "enterprise",
117
+ "workspace"
118
+ ],
119
+ "hints": {
120
+ "team_name": "<team-name>"
121
+ }
122
+ },
123
+ "with_selection": {
124
+ "required": [
125
+ "enterprise",
126
+ "workspace"
127
+ ],
128
+ "selection": {
129
+ "option_id": "<option-id>"
130
+ }
131
+ }
132
+ }
133
+ },
134
+ "read": {
135
+ "argv": [
136
+ "node",
137
+ "<home>/.rainbond/bin/rainskills-tools.js",
138
+ "read",
139
+ "<tool>",
140
+ "--input",
141
+ "-",
142
+ "--skill-id",
143
+ "rainbond-scheduled-task"
144
+ ],
145
+ "stdin_schema_source": "tool-catalog"
146
+ },
147
+ "call": {
148
+ "argv": [
149
+ "node",
150
+ "<home>/.rainbond/bin/rainskills-tools.js",
151
+ "call",
152
+ "<tool>",
153
+ "--input",
154
+ "-",
155
+ "--skill-id",
156
+ "rainbond-scheduled-task"
157
+ ],
158
+ "stdin_schema_source": "tool-catalog"
159
+ },
160
+ "call_confirm": {
161
+ "argv": [
162
+ "node",
163
+ "<home>/.rainbond/bin/rainskills-tools.js",
164
+ "call",
165
+ "<tool>",
166
+ "--input",
167
+ "-",
168
+ "--skill-id",
169
+ "rainbond-scheduled-task",
170
+ "--confirm",
171
+ "<confirmation-id>"
172
+ ],
173
+ "stdin_schema_source": "same-confirmed-input"
174
+ }
175
+ }
176
+ }
177
+ ```
178
+ <!-- rainskills-runtime-gate:end -->
@@ -0,0 +1,15 @@
1
+ <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
+ <!-- source-sha256: f10e79ab32b41119c94424da267187156934609047684f4c5d788595bcb1616f -->
3
+ <!-- profile: cli -->
4
+ <!-- rainskills-runtime-routing:start -->
5
+ # 缺少运行环境时(生成文件)
6
+
7
+ - `skill_id`: `rainbond-scheduled-task`
8
+ - `missing_runtime_mode`: `existing_application`
9
+ - `resume_target`: `scheduled-task`
10
+
11
+ 只让用户选择 `Rainbond Cloud` 或 `已有私有 Rainbond`。已有私有 Rainbond 使用固定 launcher 的 `runtime message --id private-console-origin` 获取 Console origin;不得安装新平台,也不得用新平台代替目标资源。
12
+
13
+ 连接和 live probe 成功后恢复到 `scheduled-task`;不得提前询问无关业务字段,也不得保存环境 ID、operation ID 或 intent JSON。
14
+
15
+ <!-- rainskills-runtime-routing:end -->
@@ -1,5 +1,5 @@
1
1
  <!-- generated-by: scripts/sync-runtime-contracts.mjs -->
2
- <!-- source-sha256: 2aa4255f9367afe03d464ee1c941e0d3616d6c3bc5bb8769d0002a06f5bf9e9b -->
2
+ <!-- source-sha256: daa5be8e31f57c5a040ccda7e512b341c88f78f4cc06917dcb5a49bf1a9aa108 -->
3
3
  <!-- profile: cli -->
4
4
  <!-- rainskills-runtime-gate:start -->
5
5
  # 单运行环境 CLI 门禁(生成文件)
@@ -47,7 +47,7 @@ Hermes Agent 使用 `terminal` 且 `background=true` 启动授权,随后只对
47
47
  ```json
48
48
  {
49
49
  "schema": "rainskills.single-runtime-contract.v1",
50
- "package_version": "rainskills@0.1.48",
50
+ "package_version": "rainskills@0.1.49",
51
51
  "runtime_status": [
52
52
  "node",
53
53
  "<home>/.rainbond/lib/rainskills/bin/rainskills.js",
@@ -27,6 +27,7 @@ const RUNTIME_BUNDLE_DIRECTORIES = Object.freeze([
27
27
  "rainbond-platform-plugin-manager",
28
28
  "rainbond-platform-query",
29
29
  "rainbond-project-init",
30
+ "rainbond-scheduled-task",
30
31
  "rainbond-template-installer",
31
32
  ]);
32
33
  const RUNTIME_BUNDLE_FILES = Object.freeze(["install.sh", "package.json"]);