@clawops/cli 1.7.9 → 2.0.1

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 (98) hide show
  1. package/README.md +504 -76
  2. package/dist/apply-KYFPWI5U.js +27 -0
  3. package/dist/automation-RMAIBNVC.js +44 -0
  4. package/dist/bedrock-XVASJX2K.js +61 -0
  5. package/dist/{bootstrap-HL4DNUNG.js → bootstrap-HNGKY6WW.js} +31 -19
  6. package/dist/bootstrap.sh.tmpl +51 -31
  7. package/dist/channels-KBUR42IU.js +53 -0
  8. package/dist/chunk-2I7KCMXZ.js +142 -0
  9. package/dist/{chunk-DQDAWNGB.js → chunk-2Z7J3ERQ.js} +1 -1
  10. package/dist/chunk-3OLUJPCB.js +36 -0
  11. package/dist/chunk-5XT5IAJK.js +69 -0
  12. package/dist/chunk-AEEMRFZV.js +24 -0
  13. package/dist/chunk-BSLIYB5Q.js +106 -0
  14. package/dist/{chunk-3XK66DKK.js → chunk-E4NJSJ54.js} +57 -93
  15. package/dist/chunk-FEK7VJAY.js +16 -0
  16. package/dist/{chunk-UKTP332Z.js → chunk-GAZPPSKU.js} +6 -7
  17. package/dist/chunk-GIEVAGEK.js +126 -0
  18. package/dist/chunk-HSPHXG6W.js +67 -0
  19. package/dist/chunk-IVWP4QUJ.js +901 -0
  20. package/dist/{chunk-PVUVI35Y.js → chunk-JW5A7E3X.js} +5 -1
  21. package/dist/{chunk-GZN7PKP4.js → chunk-KC3GC3PE.js} +328 -121
  22. package/dist/chunk-LBE6COC4.js +244 -0
  23. package/dist/chunk-LEVIW2PV.js +890 -0
  24. package/dist/chunk-LT4XMO5D.js +50 -0
  25. package/dist/chunk-MC5ATCXS.js +108 -0
  26. package/dist/chunk-N4WZLWJ4.js +16 -0
  27. package/dist/chunk-NUDIHZEH.js +55 -0
  28. package/dist/chunk-NUL5F6YV.js +56 -0
  29. package/dist/chunk-RHOWYIWT.js +52 -0
  30. package/dist/chunk-STLRHLLV.js +193 -0
  31. package/dist/chunk-V25QRZRB.js +45 -0
  32. package/dist/chunk-VOEJYRIK.js +33 -0
  33. package/dist/{providers-2OABPW2E.js → chunk-VUFMZEIM.js} +3 -2
  34. package/dist/chunk-W3OLNNJW.js +51 -0
  35. package/dist/cli-WLD3EBEM.js +11 -0
  36. package/dist/cli-auth-GD5SK7JU.js +13 -0
  37. package/dist/cli.js +1296 -695
  38. package/dist/config-validate-K2N6XLDX.js +76 -0
  39. package/dist/context-7EVC6W45.js +20 -0
  40. package/dist/docker-3PDO4TS7.js +12 -0
  41. package/dist/{firewall-XQGO7HWK.js → firewall-5VKZ4WBH.js} +32 -1
  42. package/dist/generate-I6YQ5V2T.js +29 -0
  43. package/dist/{harden-URPXLSVF.js → harden-72JMRT4E.js} +51 -11
  44. package/dist/health-5CCOXYGG.js +11 -0
  45. package/dist/index.d.ts +56 -0
  46. package/dist/known-hosts-file-I3Q3NBYQ.js +22 -0
  47. package/dist/logs-5A7YYA53.js +15 -0
  48. package/dist/{mcp-wire-7E5JQY47.js → mcp-wire-3SWBM7D6.js} +32 -16
  49. package/dist/models-AGTQWYDL.js +32 -0
  50. package/dist/network-args-PYJRJBYO.js +64 -0
  51. package/dist/{package-5AR4ZPK4.js → package-5BCMEBTE.js} +11 -4
  52. package/dist/passphrase-MJBE45N7.js +15 -0
  53. package/dist/plugins-DTST3OER.js +49 -0
  54. package/dist/{pool-QGFQRMGU.js → pool-PIIKJ4L2.js} +3 -2
  55. package/dist/preflight-EF52S3WW.js +162 -0
  56. package/dist/preflight-MWWM5JT3.js +181 -0
  57. package/dist/preflight-TFD4N5ZU.js +141 -0
  58. package/dist/privileged-JFA6LLTV.js +17 -0
  59. package/dist/providers-FW6H6OPF.js +11 -0
  60. package/dist/ready-KDNRBNSU.js +95 -0
  61. package/dist/{remote-config-QDLN4UMG.js → remote-config-3HZLUWEA.js} +4 -3
  62. package/dist/runtime-X3KW5TCP.js +44 -0
  63. package/dist/server-GBA7BJGK.js +46 -0
  64. package/dist/spec-path-KQOOIQCA.js +9 -0
  65. package/dist/ssh-VAI5DU5M.js +11 -0
  66. package/dist/ssh-key-DUO6OKOI.js +7 -0
  67. package/dist/stack-config-R4SPSUQZ.js +12 -0
  68. package/dist/upgrade-ULD4KFYC.js +88 -0
  69. package/dist/validate-YVI3BJ55.js +14 -0
  70. package/dist/{version-guard-VUCNZXQS.js → version-guard-XVYW5WFJ.js} +2 -2
  71. package/dist/{versions-2UVAT6PQ.js → versions-W5LRQCAJ.js} +2 -2
  72. package/dist/wait-WO72TRRQ.js +79 -0
  73. package/package.json +11 -4
  74. package/spec/deploy-plan.schema.json +114 -25
  75. package/spec/integrations.yaml +135 -28
  76. package/spec/mcp-tools.yaml +89 -37
  77. package/spec/models.yaml +23 -3
  78. package/spec/openclaw-2.0.config.schema.json +1 -0
  79. package/spec/openclaw-versions.yaml +116 -27
  80. package/spec/providers.schema.json +163 -28
  81. package/dist/apply-F3KY2HTB.js +0 -17
  82. package/dist/automation-RULUSJBW.js +0 -30
  83. package/dist/aws-L4RR2LSE.js +0 -254
  84. package/dist/azure-7OXQENQL.js +0 -262
  85. package/dist/chunk-35WVQY3X.js +0 -122
  86. package/dist/chunk-6X45DDGH.js +0 -42
  87. package/dist/chunk-A4QR4TXW.js +0 -120
  88. package/dist/chunk-C5X375RO.js +0 -85
  89. package/dist/chunk-FNS56UQY.js +0 -741
  90. package/dist/chunk-P5LKWRPL.js +0 -114
  91. package/dist/chunk-SEZMVVAS.js +0 -156
  92. package/dist/context-5LCUG2QR.js +0 -10
  93. package/dist/gcp-UG6AWPIZ.js +0 -193
  94. package/dist/generate-OAGYT3VH.js +0 -15
  95. package/dist/local-DXBEVZ5C.js +0 -47
  96. package/dist/server-FIZCOLHL.js +0 -32
  97. package/dist/ssh-CNJNLM3E.js +0 -8
  98. package/dist/validate-CFQ4FH2T.js +0 -10
@@ -1,9 +1,44 @@
1
1
  # spec/integrations.yaml — OpenClaw channel integration catalog for the setup wizard.
2
2
  # Read at runtime by src/cli/commands/setup.ts — not compiled or code-generated.
3
3
  #
4
- # Each integration maps to a key in openclaw.json's `channels` object.
4
+ # Each integration maps to a key in the `channels` object of OpenClaw's config.
5
5
  # infraRequired: true means a publicly reachable webhook URL must be registered
6
6
  # with the provider after the stack is deployed.
7
+ #
8
+ # ── Checked against OpenClaw 2026.9.2 (WO-60) ────────────────────────────────
9
+ #
10
+ # EVERY channel in 2.0 is an install-gated plugin. `openclaw channels list --all --json`
11
+ # reports all 31 as `origin: "installable"`, and none is bundled — the same shape as model
12
+ # providers (WO-43), which is why `plugin:` below carries the package to install.
13
+ #
14
+ # Configuring a channel without installing it produces a gateway that starts, reports
15
+ # healthy, and never connects to the channel.
16
+ #
17
+ # `dmPolicy` and `groupPolicy` are REQUIRED by the schema on every channel here, and Slack
18
+ # and WhatsApp require more. `defaults:` carries OpenClaw's own default for each of them, and
19
+ # the wizard writes them — a JSON Schema default does not satisfy `required`, so a config
20
+ # omitting them is REJECTED. Every channel the wizard wrote was invalid before this.
21
+ #
22
+ # Every credential field also accepts a SecretRef — `{source: env, provider, id}` — as well
23
+ # as a plain string, so a token need not be inlined into the config.
24
+ #
25
+ # The catalog was wrong in four ways before this pass, all of which would have produced a
26
+ # config OpenClaw rejects or ignores: the Teams key was `teams` (the schema has `msteams`),
27
+ # Discord's token field was `botToken` (it is `token`), WhatsApp's `phoneNumberId` and
28
+ # `accessToken` do not exist on that channel at all, and EVERY `envDefault` used an
29
+ # `OPENCLAW_*` name that OpenClaw does not read.
30
+ #
31
+ # `envVar` below is the variable `openclaw channels add --use-env` actually reads, taken from
32
+ # the binary's own error message. `useEnvSupported: false` means that flag is rejected for the
33
+ # channel outright — measured, not assumed.
34
+ #
35
+ # `plugin.version` is pinned to the runtime floor, and it is not decoration. Measured on
36
+ # 2026.9.2: `@openclaw/discord@2026.9.3` refuses to install with
37
+ #
38
+ # plugin "discord" requires plugin API >=2026.9.3, but this OpenClaw runtime exposes 2026.9.2
39
+ #
40
+ # The same drift that forced version pins on model providers in WO-43. `latest` would break
41
+ # the deploy the moment upstream publishes ahead of the runtime, which it already has.
7
42
 
8
43
  integrations:
9
44
  - id: discord
@@ -11,12 +46,21 @@ integrations:
11
46
  displayName: Discord
12
47
  description: Connect OpenClaw agents to a Discord server via bot
13
48
  infraRequired: false
49
+ plugin:
50
+ package: "@openclaw/discord"
51
+ source: npm
52
+ version: "2026.9.2"
53
+ useEnvSupported: true
54
+ requiredConfig: [dmPolicy, groupPolicy]
55
+ defaults:
56
+ dmPolicy: pairing
57
+ groupPolicy: allowlist
14
58
  fields:
15
- - name: botToken
59
+ - name: token
16
60
  label: Bot token
17
61
  description: Bot token from the Discord Developer Portal (Bot → Token)
18
62
  sensitive: true
19
- envDefault: OPENCLAW_DISCORD_TOKEN
63
+ envDefault: DISCORD_BOT_TOKEN
20
64
  setupUrl: https://discord.com/developers/applications
21
65
 
22
66
  - id: telegram
@@ -24,33 +68,69 @@ integrations:
24
68
  displayName: Telegram
25
69
  description: Connect OpenClaw agents to a Telegram bot
26
70
  infraRequired: false
71
+ # Bundled in the image: `channels add --channel telegram --use-env` succeeds with
72
+ # `--network none`, so there is nothing to download and no egress needed. It is listed
73
+ # as "installable" alongside the rest, which is why this looked unresolved at first.
74
+ plugin:
75
+ package: ""
76
+ source: bundled
77
+ useEnvSupported: true
78
+ requiredConfig: [dmPolicy, groupPolicy]
79
+ defaults:
80
+ dmPolicy: pairing
81
+ groupPolicy: allowlist
27
82
  fields:
28
83
  - name: botToken
29
84
  label: Bot token
30
85
  description: Token from @BotFather (/newbot)
31
86
  sensitive: true
32
- envDefault: OPENCLAW_TELEGRAM_TOKEN
87
+ envDefault: TELEGRAM_BOT_TOKEN
33
88
  setupUrl: https://t.me/BotFather
34
89
 
35
90
  - id: slack
36
91
  channelKey: slack
37
92
  displayName: Slack
38
- description: Connect OpenClaw agents to a Slack workspace via app
39
- infraRequired: true
40
- infraNote: >
41
- After deployment, register the gateway webhook URL in your Slack app
42
- configuration at api.slack.com (Event Subscriptions → Request URL).
93
+ description: Connect OpenClaw agents to a Slack workspace via app (Socket Mode)
94
+ # Socket Mode, not a webhook. `mode` defaults to "socket" in OpenClaw and it is what
95
+ # `channels add --use-env` drives: the gateway opens an OUTBOUND WebSocket to Slack, so
96
+ # there is no public URL to register and no inbound rule to open.
97
+ #
98
+ # This entry said infraRequired: true — the `http` mode setup — while declaring the
99
+ # socket credentials incompletely. It described one setup while the tooling installed
100
+ # the other, and the config it produced failed validation either way.
101
+ #
102
+ # `mode: http` is still available: it needs a public webhook at `webhookPath` and a
103
+ # signingSecret to verify inbound requests. That is a deliberate choice, not the default,
104
+ # and clawops does not configure it.
105
+ infraRequired: false
106
+ plugin:
107
+ package: "@openclaw/slack"
108
+ source: npm
109
+ version: "2026.9.2"
110
+ # Socket Mode is what --use-env drives, and it demands SLACK_APP_TOKEN:
111
+ # "Slack Socket Mode requires SLACK_APP_TOKEN when using --use-env."
112
+ useEnvSupported: true
113
+ # Slack requires more than the two policies: the schema also demands postAs, mode,
114
+ # webhookPath and userTokenReadOnly.
115
+ requiredConfig: [dmPolicy, groupPolicy, postAs, mode, webhookPath, userTokenReadOnly]
116
+ defaults:
117
+ dmPolicy: pairing
118
+ groupPolicy: allowlist
119
+ postAs: bot
120
+ mode: socket
121
+ webhookPath: /slack/events
122
+ userTokenReadOnly: true
43
123
  fields:
44
124
  - name: botToken
45
125
  label: Bot OAuth token
46
126
  description: "Bot User OAuth Token (starts with xoxb-)"
47
127
  sensitive: true
48
- envDefault: OPENCLAW_SLACK_TOKEN
49
- - name: signingSecret
50
- label: Signing secret
51
- description: App signing secret from Basic Information → App Credentials
128
+ envDefault: SLACK_BOT_TOKEN
129
+ - name: appToken
130
+ label: App-level token
131
+ description: "App-level token for Socket Mode (starts with xapp-), from Basic Information → App-Level Tokens"
52
132
  sensitive: true
53
- envDefault: OPENCLAW_SLACK_SIGNING_SECRET
133
+ envDefault: SLACK_APP_TOKEN
54
134
  setupUrl: https://api.slack.com/apps
55
135
 
56
136
  - id: whatsapp
@@ -62,27 +142,49 @@ integrations:
62
142
  After deployment, register the gateway webhook URL in the Meta Developer
63
143
  Console (WhatsApp → Configuration → Webhook). The gateway URL is printed
64
144
  at the end of setup.
65
- fields:
66
- - name: phoneNumberId
67
- label: Phone number ID
68
- description: Phone Number ID from Meta Developer Console → WhatsApp → API Setup
69
- sensitive: false
70
- envDefault: ""
71
- - name: accessToken
72
- label: Access token
73
- description: Permanent system user access token from Meta Business Suite
74
- sensitive: true
75
- envDefault: OPENCLAW_WHATSAPP_TOKEN
145
+ plugin:
146
+ package: "@openclaw/whatsapp"
147
+ source: npm
148
+ version: "2026.9.2"
149
+ # `openclaw channels add --use-env` answers: OpenClaw does not recognize option
150
+ # "--use-env". There is no non-interactive path for this channel.
151
+ useEnvSupported: false
152
+ requiredConfig: [dmPolicy, groupPolicy, mediaMaxMb]
153
+ defaults:
154
+ dmPolicy: pairing
155
+ groupPolicy: allowlist
156
+ mediaMaxMb: 50
157
+ # WhatsApp has no top-level credential fields in 2.0 — credentials live under
158
+ # `accounts.<name>`, with `defaultAccount` selecting one. The wizard cannot collect a
159
+ # flat token for it, so it is marked unsupported rather than collecting fields that go
160
+ # nowhere. `phoneNumberId` and `accessToken`, which this entry used to declare, are not
161
+ # properties of the whatsapp channel at all.
162
+ wizardSupported: false
163
+ unsupportedNote: >
164
+ WhatsApp uses per-account credentials (`channels.whatsapp.accounts.<name>`) rather
165
+ than a single token. Configure it with `openclaw channels add --channel whatsapp`
166
+ on the host after deployment.
167
+ fields: []
76
168
  setupUrl: https://developers.facebook.com/apps
77
169
 
78
- - id: teams
79
- channelKey: teams
170
+ - id: msteams
171
+ channelKey: msteams
80
172
  displayName: Microsoft Teams
81
173
  description: Connect OpenClaw agents to a Microsoft Teams channel via bot
82
174
  infraRequired: true
83
175
  infraNote: >
84
176
  After deployment, update the bot's messaging endpoint in Azure Bot Service
85
177
  to the gateway webhook URL.
178
+ plugin:
179
+ package: "@openclaw/msteams"
180
+ source: npm
181
+ version: "2026.9.2"
182
+ # Same as WhatsApp: --use-env is rejected outright.
183
+ useEnvSupported: false
184
+ requiredConfig: [dmPolicy, groupPolicy]
185
+ defaults:
186
+ dmPolicy: pairing
187
+ groupPolicy: allowlist
86
188
  fields:
87
189
  - name: appId
88
190
  label: App (client) ID
@@ -93,5 +195,10 @@ integrations:
93
195
  label: App password
94
196
  description: Client secret from the Azure app registration
95
197
  sensitive: true
96
- envDefault: OPENCLAW_TEAMS_APP_PASSWORD
198
+ envDefault: "" # no --use-env path; collected interactively on the host
199
+ - name: tenantId
200
+ label: Directory (tenant) ID
201
+ description: Azure AD tenant ID for the app registration
202
+ sensitive: false
203
+ envDefault: ""
97
204
  setupUrl: https://portal.azure.com/
@@ -11,6 +11,15 @@
11
11
  # R8 — enums for closed sets
12
12
  # R10 — all four annotation hints set
13
13
  # R11 — annotations bound to safety modes (--read-only, --no-destructive)
14
+ #
15
+ # NOTE on `output:` — these blocks are DESCRIPTIVE, not generated. gen-schemas reads
16
+ # `input:` and `annotations:` only; nothing emits an MCP outputSchema, and no handler is
17
+ # checked against what its entry claims to return. Making them real means generating an
18
+ # outputSchema per tool and returning `structuredContent` from every handler — worth doing,
19
+ # but it is a change to all 18 handlers, not a spec edit. Until then, treat `output:` as the
20
+ # intended shape and the handler as the truth. Keeping them honest is not optional:
21
+ # clawops_status declared health, uptimeSec, openclawVersion and agentCount for three
22
+ # releases while returning none of them (WO-47).
14
23
 
15
24
  version: 1
16
25
 
@@ -32,14 +41,15 @@ tools:
32
41
  - name: clawops_status
33
42
  toolset: [cli, read]
34
43
  description: |
35
- Get current status of a clawops-managed stack: gateway health, OpenClaw
36
- version, agent count, uptime.
44
+ Get what is deployed for a clawops-managed stack: public IP, gateway URL,
45
+ SSH user, or that nothing is deployed yet. Reads stack outputs; does not
46
+ contact the host.
37
47
 
38
- Use when: the user asks about the health of a deployed instance, whether
39
- the gateway is responding, or wants a quick overview.
48
+ Use when: the user asks what exists for a stack, or where to reach it.
40
49
 
41
- Do NOT use when: the user asks for live logs (use clawops_logs) or wants
42
- to see specific configuration values (use clawops_config_get).
50
+ Do NOT use when: the user asks whether the gateway is actually WORKING —
51
+ that needs the host, so use clawops_doctor. Also not for live logs (use
52
+ clawops_logs_tail) or config values (use clawops_config_get).
43
53
  annotations:
44
54
  title: Get Stack Status
45
55
  readOnlyHint: true
@@ -51,15 +61,60 @@ tools:
51
61
  type: string
52
62
  optional: true
53
63
  description: Stack name. Defaults to active stack from config.
64
+ # What the handler returns: the stack's deployment outputs. Health, version and agent
65
+ # count are NOT here — they need the host, and asking for them is clawops_doctor.
54
66
  output:
55
- health: { type: enum, values: [healthy, degraded, down, unknown] }
67
+ stack: { type: string }
68
+ publicIp: { type: string }
56
69
  gatewayUrl: { type: string, format: uri }
57
- uptimeSec: { type: integer }
58
- openclawVersion: { type: string }
59
- agentCount: { type: integer }
60
- provider: { type: enum, values: [aws, gcp, azure, local] }
70
+ sshUser: { type: string }
71
+ status: { type: enum, values: [not bootstrapped, not deployed] }
61
72
  region: { type: string }
62
73
 
74
+ - name: clawops_doctor
75
+ toolset: [cli, read]
76
+ description: |
77
+ Run clawops's diagnostics and return the report: Node and Pulumi runtime, config,
78
+ SSH key and known_hosts, cloud credentials per configured provider, and the
79
+ supported OpenClaw range. With stackName, also contacts the host for container
80
+ state, the deployed OpenClaw version, a real gateway health probe, whether the
81
+ port is published to the internet, disk usage on the state directory, log
82
+ rotation, and hardening drift.
83
+
84
+ Use when: something is not working and you do not yet know what; before any
85
+ deploy, upgrade or migration; or to find out which OpenClaw version a gateway is
86
+ actually running.
87
+
88
+ Do NOT use when: you already know the problem and want to fix it. This tool only
89
+ reports — it changes nothing, and never runs `openclaw doctor --fix`. Repair is
90
+ part of clawops_gateway_update, where it is gated on a verified backup.
91
+
92
+ Every check carries a status: fail (something is wrong that clawops can name),
93
+ warn (worth knowing, not broken), info (did not apply). `ok` is false only when
94
+ something failed — a fresh machine with no stacks is full of warnings and healthy.
95
+ annotations:
96
+ title: Run Diagnostics
97
+ readOnlyHint: true
98
+ destructiveHint: false
99
+ idempotentHint: true
100
+ openWorldHint: true
101
+ input:
102
+ stackName:
103
+ type: string
104
+ optional: true
105
+ description: |
106
+ Stack to include remote checks for. Without it, only the local machine is
107
+ checked — no SSH connection is made.
108
+ failuresOnly:
109
+ type: boolean
110
+ optional: true
111
+ default: false
112
+ description: Return only failing and warning checks. Passing checks are counted, not listed.
113
+ output:
114
+ ok: { type: boolean }
115
+ counts: { type: object }
116
+ sections: { type: array }
117
+
63
118
  - name: clawops_logs_tail
64
119
  toolset: [cli, read]
65
120
  description: |
@@ -236,10 +291,29 @@ tools:
236
291
  description: Defaults to provider configured for this stack
237
292
  region: { type: string, optional: true }
238
293
  instanceType:
239
- type: enum
240
- values: [micro, small, medium, large, gpu]
294
+ type: string
241
295
  optional: true
242
296
  default: small
297
+ description: |
298
+ A clawops size (micro|small|medium|large|gpu) or a provider-native machine type.
299
+ Not an enum: Azure offers SKU families per subscription, and an account offered
300
+ none of the five sizes clawops names would otherwise have no way to deploy.
301
+ sshCidr:
302
+ type: string
303
+ optional: true
304
+ description: |
305
+ CIDR(s) allowed to reach SSH, comma-separated, or 'auto' for the caller's own
306
+ address. Omitted means none, and nothing will be able to connect — including
307
+ every clawops day-two command.
308
+ gatewayCidr:
309
+ type: string
310
+ optional: true
311
+ description: CIDR(s) allowed to reach the gateway port. Requires publishGateway=all.
312
+ publishGateway:
313
+ type: enum
314
+ values: [loopback, all]
315
+ optional: true
316
+ description: Which interface the gateway binds. 'all' serves plaintext HTTP.
243
317
  openclawVersion: { type: string, optional: true, description: "semver or 'stable'/'dev'" }
244
318
  dryRun: { type: boolean, optional: true, default: false }
245
319
  output:
@@ -399,28 +473,6 @@ tools:
399
473
  valid: { type: boolean }
400
474
  issues: { type: array, items: { type: string } }
401
475
 
402
- - name: clawops_agents_restart
403
- toolset: [cli]
404
- description: |
405
- Restart a specific OpenClaw agent on the remote gateway.
406
-
407
- Use when: the user reports an agent is stuck, errored, or unresponsive;
408
- or after a config change that the agent needs to pick up.
409
-
410
- Do NOT use when: the issue is gateway-wide — use clawops_gateway_restart.
411
- annotations:
412
- title: Restart OpenClaw Agent
413
- readOnlyHint: false
414
- destructiveHint: true
415
- idempotentHint: true
416
- openWorldHint: true
417
- input:
418
- stackName: { type: string, optional: true }
419
- agentId: { type: string }
420
- output:
421
- previousStatus: { type: string }
422
- newStatus: { type: string }
423
-
424
476
  - name: clawops_gateway_restart
425
477
  toolset: [cli]
426
478
  description: |
@@ -429,8 +481,8 @@ tools:
429
481
  Use when: a gateway-wide config change requires reload, or the gateway is
430
482
  reported as unresponsive.
431
483
 
432
- Do NOT use when: only a specific agent is affected — use
433
- clawops_agents_restart. Brief downtime (~10s).
484
+ Note: OpenClaw 2.0 removed per-agent restart; `gateway restart` is the only
485
+ restart it offers, and it affects every agent on the host. Brief downtime (~10s).
434
486
  annotations:
435
487
  title: Restart Gateway Daemon
436
488
  readOnlyHint: false
package/spec/models.yaml CHANGED
@@ -39,6 +39,9 @@ providers:
39
39
  - { id: deepseek-reasoner, displayName: "DeepSeek Reasoner (R1)" }
40
40
  defaultModel: deepseek-chat
41
41
  configPath: models.providers.deepseek
42
+ plugin:
43
+ package: "@openclaw/deepseek-provider"
44
+ version: "2026.9.2"
42
45
 
43
46
  - id: kimi
44
47
  displayName: Kimi (Moonshot AI)
@@ -50,13 +53,27 @@ providers:
50
53
  - { id: moonshot-v1-128k, displayName: "Moonshot v1 128K" }
51
54
  defaultModel: moonshot-v1-8k
52
55
  configPath: models.providers.kimi
56
+ plugin:
57
+ package: "@openclaw/kimi-provider"
58
+ version: "2026.9.2"
53
59
 
54
60
  - id: bedrock
55
61
  displayName: AWS Bedrock
56
62
  credentialSource: aws-profile
57
- # No API key — uses EC2 instance role (AmazonBedrockFullAccess) via IMDS.
58
- # The Pulumi program attaches AmazonBedrockFullAccess to the instance profile
59
- # and passes AWS_PROFILE=default into the container via --env-file.
63
+ # Bedrock is a plugin provider, so OpenClaw does not resolve its transport on its own:
64
+ # without `api` the call routes through the OpenAI-compatible transport and fails with
65
+ # "requires an explicit base URL". Bundled providers do resolve it — `anthropic` selects
66
+ # anthropic-messages with nothing in the config — so this key is set here and nowhere
67
+ # else. See docs/spikes/SP-12-bedrock-config-shape.md.
68
+ api: bedrock-converse-stream
69
+ # No API key — credentials come from the EC2 instance role via IMDS, resolved by the AWS
70
+ # SDK chain at call time. The old `AWS_PROFILE=default` env-file mechanism is obsolete
71
+ # (SP-08); so is the `auth: "aws-sdk"` marker as a *requirement* — Bedrock was reached
72
+ # with it absent (SP-12 §4) — though clawops still writes it to document the auth route.
73
+ #
74
+ # modelId below is the FOUNDATION model id. Bedrock refuses these for on-demand
75
+ # inference; clawops resolves each to a regional inference profile at plan time, because
76
+ # the right profile depends on the deployment region and cannot be written down here.
60
77
  iamPolicy: AmazonBedrockFullAccess
61
78
  iamNote: >
62
79
  Credentials are provided by the EC2 instance role. clawops attaches
@@ -80,6 +97,9 @@ providers:
80
97
  - { id: deepseek-r1, displayName: "DeepSeek-R1", modelId: "deepseek.r1-v1:0", family: DeepSeek }
81
98
  defaultModel: claude-sonnet-46
82
99
  configPath: models.providers.amazon-bedrock
100
+ plugin:
101
+ package: "@openclaw/amazon-bedrock-provider"
102
+ version: "2026.9.2"
83
103
 
84
104
  - id: ollama
85
105
  displayName: Ollama (self-hosted)