Skip to content

Commit d71a4e4

Browse files
Auto-merge upstream openclaw/openclaw
2 parents 4b87f1a + f3ce1bd commit d71a4e4

82 files changed

Lines changed: 2368 additions & 306 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 1 addition & 19 deletions
Large diffs are not rendered by default.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
8c38d3e2d0a61c02db70070e0d032b54b1de474000e1c1221332efc495e8681d plugin-sdk-api-baseline.json
2-
d057310712f83b27f64b53dbe45ef2e92795407e56503a255de0f29d915c1ee4 plugin-sdk-api-baseline.jsonl
1+
0cd9a43c490bb5511890171543a3029754d44c9f1fe1ebf6f5c845fb49f44452 plugin-sdk-api-baseline.json
2+
66e1a9dff2b6c170dd1caceef1f15ad63c18f89c897d98f502cac1f2f46d26c2 plugin-sdk-api-baseline.jsonl

docs/automation/cron-jobs.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,9 @@ openclaw doctor
389389
- Delivery mode is `none` means no external message is expected.
390390
- Delivery target missing/invalid (`channel`/`to`) means outbound was skipped.
391391
- Channel auth errors (`unauthorized`, `Forbidden`) mean delivery was blocked by credentials.
392+
- If the isolated run returns only the silent token (`NO_REPLY` / `no_reply`),
393+
OpenClaw suppresses direct outbound delivery and also suppresses the fallback
394+
queued summary path, so nothing is posted back to chat.
392395
- For cron-owned isolated jobs, do not expect the agent to use the message tool
393396
as a fallback. The runner owns final delivery; `--no-deliver` keeps it
394397
internal instead of allowing a direct send.

docs/channels/discord.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -944,17 +944,17 @@ Default slash command settings:
944944

945945
</Accordion>
946946

947-
<Accordion title="Exec approvals in Discord">
948-
Discord supports button-based exec approvals in DMs and can optionally post approval prompts in the originating channel.
947+
<Accordion title="Approvals in Discord">
948+
Discord supports button-based approval handling in DMs and can optionally post approval prompts in the originating channel.
949949

950950
Config path:
951951

952952
- `channels.discord.execApprovals.enabled`
953-
- `channels.discord.execApprovals.approvers` (optional; falls back to owner IDs inferred from `allowFrom` and explicit DM `defaultTo` when possible)
953+
- `channels.discord.execApprovals.approvers` (optional; falls back to `commands.ownerAllowFrom` when possible)
954954
- `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, default: `dm`)
955955
- `agentFilter`, `sessionFilter`, `cleanupAfterResolve`
956956

957-
Discord auto-enables native exec approvals when `enabled` is unset or `"auto"` and at least one approver can be resolved, either from `execApprovals.approvers` or from the account's existing owner config (`allowFrom`, legacy `dm.allowFrom`, or explicit DM `defaultTo`). Set `enabled: false` to disable Discord as a native approval client explicitly.
957+
Discord auto-enables native exec approvals when `enabled` is unset or `"auto"` and at least one approver can be resolved, either from `execApprovals.approvers` or from `commands.ownerAllowFrom`. Discord does not infer exec approvers from channel `allowFrom`, legacy `dm.allowFrom`, or direct-message `defaultTo`. Set `enabled: false` to disable Discord as a native approval client explicitly.
958958

959959
When `target` is `channel` or `both`, the approval prompt is visible in the channel. Only resolved approvers can use the buttons; other users receive an ephemeral denial. Approval prompts include the command text, so only enable channel delivery in trusted channels. If the channel ID cannot be derived from the session key, OpenClaw falls back to DM delivery.
960960

@@ -967,7 +967,16 @@ Default slash command settings:
967967
- remote-mode support via `gateway.remote.*` when applicable
968968
- URL overrides are override-safe: CLI overrides do not reuse implicit credentials, and env overrides use env credentials only
969969

970-
Exec approvals expire after 30 minutes by default. If approvals fail with unknown approval IDs, verify approver resolution and feature enablement.
970+
Approval resolution behavior:
971+
972+
- IDs prefixed with `plugin:` resolve through `plugin.approval.resolve`.
973+
- Other IDs resolve through `exec.approval.resolve`.
974+
- Discord does not do an extra exec-to-plugin fallback hop here; the id
975+
prefix decides which gateway method it calls.
976+
977+
Exec approvals expire after 30 minutes by default. If approvals fail with
978+
unknown approval IDs, verify approver resolution, feature enablement, and
979+
that the delivered approval id kind matches the pending request.
971980

972981
Related docs: [Exec approvals](/tools/exec-approvals)
973982

docs/channels/matrix.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,12 @@ Matrix can act as an exec approval client for a Matrix account.
667667

668668
Approvers must be Matrix user IDs such as `@owner:example.org`. Matrix auto-enables native exec approvals when `enabled` is unset or `"auto"` and at least one approver can be resolved, either from `execApprovals.approvers` or from `channels.matrix.dm.allowFrom`. Set `enabled: false` to disable Matrix as a native approval client explicitly. Approval requests otherwise fall back to other configured approval routes or the exec approval fallback policy.
669669

670+
Native Matrix routing is exec-only today:
671+
672+
- `channels.matrix.execApprovals.*` controls native DM/channel routing for exec approvals only.
673+
- Plugin approvals still use shared same-chat `/approve` plus any configured `approvals.plugin` forwarding.
674+
- Matrix can still reuse `channels.matrix.dm.allowFrom` for plugin-approval authorization when it can infer approvers safely, but it does not expose a separate native plugin-approval DM/channel fanout path.
675+
670676
Delivery rules:
671677

672678
- `target: "dm"` sends approval prompts to approver DMs
@@ -677,7 +683,7 @@ Matrix uses text approval prompts today. Approvers resolve them with `/approve <
677683

678684
Only resolved approvers can approve or deny. Channel delivery includes the command text, so only enable `channel` or `both` in trusted rooms.
679685

680-
Matrix approval prompts reuse the shared core approval planner. The Matrix-specific surface is transport only: room/DM routing and message send/update/delete behavior.
686+
Matrix approval prompts reuse the shared core approval planner. The Matrix-specific native surface is transport only for exec approvals: room/DM routing and message send/update/delete behavior.
681687

682688
Per-account override:
683689

docs/channels/pairing.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ That bootstrap token carries the built-in pairing bootstrap profile:
8282
- primary handed-off `node` token stays `scopes: []`
8383
- any handed-off `operator` token stays bounded to the bootstrap allowlist:
8484
`operator.approvals`, `operator.read`, `operator.talk.secrets`, `operator.write`
85+
- bootstrap scope checks are role-prefixed, not one flat scope pool:
86+
operator scope entries only satisfy operator requests, and non-operator roles
87+
must still request scopes under their own role prefix
8588

8689
Treat the setup code like a password while it is valid.
8790

docs/channels/slack.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,11 @@ Notes:
513513

514514
## Exec approvals in Slack
515515

516-
Exec approval prompts can route natively through Slack using interactive buttons and interactions, instead of falling back to the Web UI or terminal. Approver authorization is enforced: only users identified as approvers can approve or deny requests through Slack.
516+
Slack can act as a native approval client with interactive buttons and interactions, instead of falling back to the Web UI or terminal.
517+
518+
- Exec approvals use `channels.slack.execApprovals.*` for native DM/channel routing.
519+
- Plugin approvals can still resolve through the same Slack-native button surface when the request already lands in Slack and the approval id kind is `plugin:`.
520+
- Approver authorization is still enforced: only users identified as approvers can approve or deny requests through Slack.
517521

518522
This uses the same shared approval button surface as other channels. When `interactivity` is enabled in your Slack app settings, approval prompts render as Block Kit buttons directly in the conversation.
519523

@@ -555,8 +559,10 @@ opt into origin-chat delivery:
555559
}
556560
```
557561

558-
Shared `approvals.exec` forwarding is separate. Use it only when approval prompts must also route
559-
to other chats or explicit out-of-band targets.
562+
Shared `approvals.exec` forwarding is separate. Use it only when exec approval prompts must also
563+
route to other chats or explicit out-of-band targets. Shared `approvals.plugin` forwarding is also
564+
separate; Slack-native buttons can still resolve plugin approvals when those requests already land
565+
in Slack.
560566

561567
Same-chat `/approve` also works in Slack channels and DMs that already support commands. See [Exec approvals](/tools/exec-approvals) for the full approval forwarding model.
562568

docs/channels/telegram.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
358358
- `/pair approve` when there is only one pending request
359359
- `/pair approve latest` for most recent
360360

361-
The setup code carries a short-lived bootstrap token. Built-in bootstrap handoff keeps the primary node token at `scopes: []`; any handed-off operator token stays bounded to `operator.approvals`, `operator.read`, `operator.talk.secrets`, and `operator.write`.
361+
The setup code carries a short-lived bootstrap token. Built-in bootstrap handoff keeps the primary node token at `scopes: []`; any handed-off operator token stays bounded to `operator.approvals`, `operator.read`, `operator.talk.secrets`, and `operator.write`. Bootstrap scope checks are role-prefixed, so that operator allowlist only satisfies operator requests; non-operator roles still need scopes under their own role prefix.
362362

363363
If a device retries with changed auth details (for example role/scopes/public key), the previous pending request is superseded and the new request uses a different `requestId`. Re-run `/pair pending` before approving.
364364

@@ -832,6 +832,16 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
832832

833833
Only resolved approvers can approve or deny. Non-approvers cannot use `/approve` and cannot use Telegram approval buttons.
834834

835+
Approval resolution behavior:
836+
837+
- IDs prefixed with `plugin:` always resolve through plugin approvals.
838+
- Other approval IDs try `exec.approval.resolve` first.
839+
- If Telegram is also authorized for plugin approvals and the gateway says
840+
the exec approval is unknown/expired, Telegram retries once through
841+
`plugin.approval.resolve`.
842+
- Real exec approval denials/errors do not silently fall through to plugin
843+
approval resolution.
844+
835845
Channel delivery shows the command text in the chat, so only enable `channel` or `both` in trusted groups/topics. When the prompt lands in a forum topic, OpenClaw preserves the topic for both the approval prompt and the post-approval follow-up. Exec approvals expire after 30 minutes by default.
836846

837847
Inline approval buttons also depend on `channels.telegram.capabilities.inlineButtons` allowing the target surface (`dm`, `group`, or `all`).

docs/channels/troubleshooting.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Healthy baseline:
2626

2727
- `Runtime: running`
2828
- `RPC probe: ok`
29-
- Channel probe shows connected/ready
29+
- Channel probe shows transport connected and, where supported, `works` or `audit ok`
3030

3131
## WhatsApp
3232

docs/cli/channels.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ openclaw channels logs --channel all
3333
- `channels resolve`: `<entries...>`, `--channel <name>`, `--account <id>`, `--kind <auto|user|group>`, `--json`
3434
- `channels logs`: `--channel <name|all>`, `--lines <n>`, `--json`
3535

36+
`channels status --probe` is the live path: on a reachable gateway it runs per-account
37+
`probeAccount` and optional `auditAccount` checks, so output can include transport
38+
state plus probe results such as `works`, `probe failed`, `audit ok`, or `audit failed`.
39+
If the gateway is unreachable, `channels status` falls back to config-only summaries
40+
instead of live probe output.
41+
3642
## Add / remove accounts
3743

3844
```bash

0 commit comments

Comments
 (0)