Skip to content

Commit e6ad029

Browse files
Merge remote-tracking branch 'origin/main' into maint-83701-20260518
# Conflicts: # CHANGELOG.md
2 parents b2e70a4 + 78f3985 commit e6ad029

61 files changed

Lines changed: 2316 additions & 187 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.

.github/pull_request_template.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Describe the problem and fix in 2–5 bullets:
55
If this PR fixes a plugin beta-release blocker, title it `fix(<plugin-id>): beta blocker - <summary>` and link the matching `Beta blocker: <plugin-name> - <summary>` issue labeled `beta-blocker`. Contributors cannot label PRs, so the title is the PR-side signal for maintainers and automation.
66

77
- Problem:
8-
- Why it matters:
8+
- Solution:
99
- What changed:
1010
- What did NOT change (scope boundary):
1111

@@ -35,6 +35,12 @@ If this PR fixes a plugin beta-release blocker, title it `fix(<plugin-id>): beta
3535
- Related #
3636
- [ ] This PR fixes a bug or regression
3737

38+
## Motivation
39+
40+
Explain why this change should exist now. Link it to the user pain, failure mode, maintainer need, or product goal. If this is purely mechanical, write `N/A`.
41+
42+
-
43+
3844
## Real behavior proof (required for external PRs)
3945

4046
External contributors must show after-fix evidence from a real OpenClaw setup. Unit tests, mocks, lint, typechecks, snapshots, and CI are supplemental only. Screenshots are encouraged even for CLI, console, text, or log changes; terminal screenshots and copied live output count. Be mindful of private information like IP addresses, API keys, phone numbers, non-public endpoints, or other private details when providing evidence.

.github/workflows/real-behavior-proof.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ jobs:
1818
name: Real behavior proof
1919
permissions:
2020
contents: read
21+
issues: read
2122
pull-requests: read
2223
runs-on: ubuntu-24.04
2324
steps:
@@ -31,6 +32,7 @@ jobs:
3132
with:
3233
app-id: "2729701"
3334
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
35+
permission-issues: read
3436
permission-members: read
3537
- uses: actions/create-github-app-token@v3
3638
id: app-token-fallback
@@ -39,8 +41,10 @@ jobs:
3941
with:
4042
app-id: "2971289"
4143
private-key: ${{ secrets.GH_APP_PRIVATE_KEY_FALLBACK }}
44+
permission-issues: read
4245
permission-members: read
4346
- name: Check real behavior proof
4447
env:
4548
GH_APP_TOKEN: ${{ steps.app-token.outputs.token || steps.app-token-fallback.outputs.token }}
49+
GITHUB_TOKEN: ${{ github.token }}
4650
run: node scripts/github/real-behavior-proof-check.mjs

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ Docs: https://docs.openclaw.ai
1616
- Mac app: redesign Settings pages with consistent card layouts, cached navigation, cleaner permissions/voice/skills/cron/exec/debug panes, and steadier spacing around the native sidebar.
1717
- Skills: rename the repo-local Codex closeout review skill and helper to `autoreview` while preserving the Codex-first fallback behavior.
1818
- Skills: add a meme-maker skill for curated template search, local SVG/PNG rendering, Imgflip hosted rendering, and Know Your Meme provenance links.
19+
- Skills CLI: allow `openclaw skills install` and `openclaw skills update` to target shared managed skills with `--global`. (#74466) Thanks @Marvae.
1920
- Browser: surface pending and recently handled modal dialogs in snapshots, return `blockedByDialog` when an action opens a modal, and allow `browser dialog --dialog-id` to answer pending dialogs.
21+
- Browser CLI: add `openclaw browser evaluate --timeout-ms` so long-running page functions can extend both the evaluate action and request timeout budgets. (#83447) Thanks @eefreenyc.
2022
- Codex app-server: scope OpenClaw prompt guidance by runtime surface so native Codex keeps Codex-owned base/personality instructions while OpenClaw contributes only runtime context, delivery guidance, and explicitly scoped command hints. (#83454) Thanks @100yenadmin.
2123
- Agents/tools: shorten built-in tool descriptions and schema hints across media, messaging, sessions, cron, Gateway, web, image/PDF, TTS, nodes, and plan tools while preserving routing guardrails.
2224
- Skills: add node inspector debugging, fused diagram generation, and throwaway spike workflow skills.
@@ -36,19 +38,27 @@ Docs: https://docs.openclaw.ai
3638
- QA-Lab: hard-gate required OpenClaw dynamic runtime-tool drift in the standard Codex-vs-Pi tier with a blocking release-check verifier and publish the tool coverage report artifact. Fixes #80339; refs #80319. Thanks @100yenadmin.
3739
- QA-Lab: add the personal-agent approval-denial scenario so the benchmark pack verifies denied local reads stop cleanly without tool progress or fixture leaks. (#83150) Thanks @iFiras-Max1.
3840
- QA-Lab: extend the personal-agent benchmark pack with a local task followthrough scenario for proof-backed pending, blocked, and done status reporting. Thanks @iFiras-Max1.
41+
- QA-Lab: add a report-only dreaming shadow-trial scenario so candidate memory promotion can be evaluated without mutating `MEMORY.md`. Thanks @iFiras-Max1.
3942
- Gateway/performance: add `pnpm test:restart:gateway` benchmark tooling for repeated restart readiness, downtime, trace, and resource-slope evidence. (#83299) Thanks @samzong.
4043
- Android: switch Talk Mode to realtime Gateway relay voice sessions with streaming mic input, realtime audio playback, tool-result bridging, and on-screen transcripts. (#83130) Thanks @sliekens.
4144
- Gateway/config: expose config lookup reload metadata so tools can distinguish restart-required, hot-reloadable, and no-op fields before applying config edits. Fixes #81409. (#81612) Thanks @LLagoon3.
45+
- Telegram: add allowlisted native DM draft previews for transient tool progress while keeping final answers on the normal persistent delivery path. (#83622) Thanks @akrimm702.
4246

4347
### Fixes
4448

4549
- Agents/subagents: keep collect-mode announce queues batching unresolved-origin items with compatible same-route messages and resume collection after a true cross-channel drain when a later compatible batch remains. Fixes #83577.
50+
- Browser: enforce current-tab URL allowlist checks for `/act` evaluate/batch actions and `/highlight` routes while leaving tab-management actions unblocked. (#78523)
51+
- CI: require real-behavior-proof verdict markers to come from the ClawSweeper GitHub App before accepting exact-head proof. (#83692)
4652
- Agents/image generation: allow distinct `image_generate` prompts to start separate session-backed background tasks while same-prompt retries still return the active task status. (#83614) Thanks @Elarwei001.
53+
- Control UI: stop the chat reading indicator from sticking after an assistant response finishes. (#83515) Thanks @njuboy11.
54+
- Skills: reject empty or whitespace-only skill names and descriptions during quick validation. (#27061)
4755
- Sessions: skip trailing custom transcript entries when checking tail assistant replies so embedded CLI gap-fill does not duplicate canonical assistant output. (#83635) Thanks @yaoyi1222.
4856
- Memory Wiki: keep `wiki_lint` tool output path-safe by reporting vault-internal lint reports as relative paths in tool text and details while preserving absolute report paths for CLI/file callers. (#83439) Thanks @LLagoon3.
4957
- Telegram: keep verbose tool progress visible without mirroring non-final progress into active session transcripts, preventing embedded provider replies from aborting mid-run. (#83631) Thanks @kurplunkin.
58+
- Telegram: log successful outbound text and media deliveries with account, chat, message, operation, thread, reply, silent, and chunk metadata while keeping message bodies out of logs. Fixes #83196. (#83247) Thanks @jrwrest.
5059
- Cron: link isolated scheduled task runs to their stable cron session so task status and cleanup can follow the backing agent run. (#83606) Thanks @jai.
5160
- CLI: enforce the documented Node.js 22.19 runtime floor in the source launcher.
61+
- Release stability: repair broad-gate regressions in requester-agent completion handoff, QA-Lab mock spawn attribution, Slack monitor test isolation, plugin uninstall peer fixtures, and Node-floor launcher contract coverage.
5262
- Agents/replies: persist queued follow-up user messages and assistant error stubs only once across model-fallback retries, preventing repeated provider rejections from corrupted same-role session transcripts. Fixes #83404. (#83417) Thanks @yetval.
5363
- Slack: persist delivered inbound message IDs and fail closed when same-channel thread replies lose their thread context, preventing delayed duplicate replies and accidental channel-root posts. Fixes #83521. Thanks @shannon0430.
5464
- Codex app-server: complete OpenClaw dynamic tool diagnostics at the request boundary so successful, failed, timed out, aborted, and blocked tool calls do not leave active tool state behind. Fixes #83474. Thanks @rozmiarD.
@@ -1644,6 +1654,7 @@ Docs: https://docs.openclaw.ai
16441654
- Dependencies: bump transitive `basic-ftp` to 5.3.1 so the runtime lockfile no longer includes the vulnerable 5.3.0 build flagged by the production dependency audit. (#78637) Thanks @sallyom.
16451655
- Hooks/cron: log returned `/hooks/agent` isolated-run errors and failed cron jobs with cron diagnostic summaries, so rejected `payload.model` values are visible instead of looking like accepted-but-missing runs. Fixes #78597. (#78655) Thanks @kevinslin.
16461656
- Managed proxy/security: classify raw socket callsites and proxy runtime mutations in boundary checks so new direct egress or unmanaged proxy-state changes cannot land without explicit review. (#77126) Thanks @jesse-merhi.
1657+
- Memory indexing: propagate memory directory creation failures immediately instead of reporting an unusable directory as ready. Thanks @he-yufeng.
16471658
- Channels/iMessage: surface the silent group-allowlist drop at default log level by emitting a one-time `warn` per account at monitor startup when `channels.imessage.groupPolicy: "allowlist"` is set without a `channels.imessage.groups` block, plus a one-time `warn` per `chat_id` when the runtime gate drops a specific group, naming the exact `channels.imessage.groups[...]` key to add to allow it. Fixes #78749. (#79190) Thanks @omarshahine.
16481659
- WhatsApp: stop Gateway-originated outbound echoes from advancing inbound activity in `openclaw channels status`, so outbound self-sends no longer look like handled inbound messages. Fixes #79056. (#79057) Thanks @ai-hpc and @bittoby.
16491660
- Gateway/nodes: preserve the live node registry session and invoke ownership when an older same-node WebSocket closes after reconnecting. (#78351) Thanks @samzong.
@@ -5184,6 +5195,7 @@ Docs: https://docs.openclaw.ai
51845195

51855196
### Fixes
51865197

5198+
- CLI/skills: require unique case-insensitive fallback matches in `openclaw skills info` so case-only collisions return not-found instead of showing guidance for the wrong skill. (#38713)
51875199
- Agents/Ollama: forward the configured embedded-run timeout into the global undici stream timeout tuning so slow local Ollama runs no longer inherit the default stream cutoff instead of the operator-set run timeout. (#63175) Thanks @mindcraftreader and @vincentkoc.
51885200
- Models/Codex: include `apiKey` in the codex provider catalog output so the Pi ModelRegistry validator no longer rejects the entry and silently drops all custom models from every provider in `models.json`. (#66180) Thanks @hoyyeva.
51895201
- Tools/image+pdf: normalize configured provider/model refs before media-tool registry lookup so image and PDF tool runs stop rejecting valid Ollama vision models as unknown just because the tool path skipped the usual model-ref normalization step. (#59943) Thanks @yqli2420 and @vincentkoc.

docs/channels/telegram.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
307307

308308
- direct chats: preview message + `editMessageText`
309309
- groups/topics: preview message + `editMessageText`
310+
- direct-chat tool progress: optional native `sendMessageDraft` status preview when enabled and supported
310311

311312
Requirement:
312313

@@ -316,7 +317,28 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
316317
- `streaming.preview.commandText` controls command/exec detail inside those tool-progress lines: `raw` (default, preserves released behavior) or `status` (tool label only)
317318
- legacy `channels.telegram.streamMode` and boolean `streaming` values are detected; run `openclaw doctor --fix` to migrate them to `channels.telegram.streaming.mode`
318319

319-
Tool-progress preview updates are the short status lines shown while tools run, for example command execution, file reads, planning updates, patch summaries, or Codex preamble/commentary text in Codex app-server mode. Telegram keeps these enabled by default to match released OpenClaw behavior from `v2026.4.22` and later. To keep the edited preview for answer text but hide tool-progress lines, set:
320+
Tool-progress preview updates are the short status lines shown while tools run, for example command execution, file reads, planning updates, patch summaries, or Codex preamble/commentary text in Codex app-server mode. Telegram keeps these enabled by default to match released OpenClaw behavior from `v2026.4.22` and later.
321+
322+
Direct chats can use native Telegram drafts for these tool-progress lines without persisting tool chatter into chat history. Native drafts stop before answer text starts; final answers stay on the normal persistent delivery path. This lane is off by default and should be gated to trusted DM IDs first:
323+
324+
```json
325+
{
326+
"channels": {
327+
"telegram": {
328+
"streaming": {
329+
"mode": "partial",
330+
"preview": {
331+
"toolProgress": true,
332+
"nativeToolProgress": true,
333+
"nativeToolProgressAllowFrom": ["123456789"]
334+
}
335+
}
336+
}
337+
}
338+
}
339+
```
340+
341+
To keep the edited preview for answer text but hide tool-progress lines, set:
320342

321343
```json
322344
{

docs/cli/browser.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,12 @@ openclaw browser select <ref> OptionA OptionB
191191
openclaw browser fill --fields '[{"ref":"1","value":"Ada"}]'
192192
openclaw browser wait --text "Done"
193193
openclaw browser evaluate --fn '(el) => el.textContent' --ref <ref>
194+
openclaw browser evaluate --timeout-ms 30000 --fn 'async () => { await window.ready; return true; }'
194195
```
195196
197+
Use `evaluate --timeout-ms <ms>` when the page-side function may need longer
198+
than the default evaluate timeout.
199+
196200
Action responses return the current raw `targetId` after action-triggered page
197201
replacement when OpenClaw can prove the replacement tab. Scripts should still
198202
store and pass `suggestedTargetId`/labels for long-lived workflows.

docs/cli/skills.md

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,12 @@ openclaw skills install <slug>
2626
openclaw skills install <slug> --version <version>
2727
openclaw skills install <slug> --force
2828
openclaw skills install <slug> --agent <id>
29+
openclaw skills install <slug> --global
2930
openclaw skills update <slug>
31+
openclaw skills update <slug> --global
3032
openclaw skills update --all
3133
openclaw skills update --all --agent <id>
34+
openclaw skills update --all --global
3235
openclaw skills list
3336
openclaw skills list --eligible
3437
openclaw skills list --json
@@ -42,12 +45,13 @@ openclaw skills check --agent <id>
4245
openclaw skills check --json
4346
```
4447

45-
`search`/`install`/`update` use ClawHub directly and install into the active
46-
workspace `skills/` directory. `list`/`info`/`check` still inspect the local
47-
skills visible to the current workspace and config. Workspace-backed commands
48-
resolve the target workspace from `--agent <id>`, then the current working
49-
directory when it is inside a configured agent workspace, then the default
50-
agent.
48+
`search`/`install`/`update` use ClawHub directly. By default, `install` and
49+
`update` target the active workspace `skills/` directory; with `--global`, they
50+
target the shared managed skills directory. `list`/`info`/`check` still inspect
51+
the local skills visible to the current workspace and config. Workspace-backed
52+
commands resolve the target workspace from `--agent <id>`, then the current
53+
working directory when it is inside a configured agent workspace, then the
54+
default agent.
5155

5256
This CLI `install` command downloads skill folders from ClawHub. Gateway-backed
5357
skill dependency installs triggered from onboarding or Skills settings use the
@@ -60,9 +64,14 @@ Notes:
6064
- `search --limit <n>` caps returned results.
6165
- `install --force` overwrites an existing workspace skill folder for the same
6266
slug.
67+
- `--global` targets the shared managed skills directory and cannot be combined
68+
with `--agent <id>`.
6369
- `--agent <id>` targets one configured agent workspace and overrides current
6470
working directory inference.
65-
- `update --all` only updates tracked ClawHub installs in the active workspace.
71+
- `update <slug>` updates a single tracked skill. Add `--global` to target the
72+
shared managed skills directory instead of the workspace.
73+
- `update --all` updates tracked ClawHub installs in the selected workspace, or
74+
in the shared managed skills directory when combined with `--global`.
6675
- `check --agent <id>` checks the selected agent's workspace and reports which
6776
ready skills are actually visible to that agent's prompt or command surface.
6877
- `list` is the default action when no subcommand is provided.

docs/concepts/dreaming.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,18 @@ Deep ranking uses six weighted base signals plus phase reinforcement:
107107

108108
Light and REM phase hits add a small recency-decayed boost from `memory/.dreams/phase-signals.json`.
109109

110+
## QA shadow trial report coverage
111+
112+
QA Lab includes a report-only scenario for exploring how a future dreaming
113+
shadow trial could review a candidate memory before promotion. The scenario asks
114+
an agent to compare a baseline answer with an answer that can use the candidate
115+
memory, then write a local report with a verdict, reason, and risk flags.
116+
117+
This coverage is intentionally scoped to QA. It verifies that the report artifact
118+
stays separate from `MEMORY.md` and that the agent does not claim the candidate
119+
was promoted. It does not add production shadow-trial behavior or change the
120+
deep-phase promotion engine.
121+
110122
## Scheduling
111123

112124
When enabled, `memory-core` auto-manages one cron job for a full dreaming sweep. Each sweep runs phases in order: light → REM → deep.

docs/gateway/config-channels.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,13 @@ for every group/channel request.
799799

800800
If the message tool is unavailable under the active tool policy, OpenClaw falls back to automatic visible replies instead of silently suppressing the response. `openclaw doctor` warns about this mismatch.
801801

802-
The gateway hot-reloads `messages` config after the file is saved. Restart only when file watching or config reload is disabled in the deployment.
802+
**Troubleshooting: group @mention triggers typing then silence (no error)**
803+
804+
Symptom: a group/channel @mention shows the typing indicator and the gateway log reports `dispatch complete (queuedFinal=false, replies=0)`, but no message lands in the room. DMs to the same agent reply normally.
805+
806+
Cause: the group/channel visible-reply mode resolves to `"message_tool"`, so OpenClaw runs the turn but suppresses the final assistant text unless the agent calls `message(action=send)`. There is no error because suppression is the configured behavior. Normal group and channel turns default to `"automatic"`, so this symptom only appears when `messages.groupChat.visibleReplies` (or global `messages.visibleReplies`) is explicitly set to `"message_tool"`. Harness `defaultVisibleReplies` does not apply here — the group/channel resolver ignores it; it only affects direct/source chats (the Codex harness suppresses direct-chat finals that way).
807+
808+
Fix: either pick a stronger tool-calling model, remove the explicit `"message_tool"` override to fall back to the `"automatic"` default, or set `messages.groupChat.visibleReplies: "automatic"` to force visible replies for every group/channel request. The gateway hot-reloads `messages` config after the file is saved; only restart the gateway when file watching or config reload is disabled in the deployment.
803809

804810
**Mention types:**
805811

0 commit comments

Comments
 (0)