Skip to content

Commit 307922a

Browse files
committed
Auto-merge upstream openclaw/openclaw
2 parents 47560da + fdc2f42 commit 307922a

163 files changed

Lines changed: 8941 additions & 2251 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.

.agents/skills/openclaw-parallels-smoke/SKILL.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ Use this skill for Parallels guest workflows and smoke interpretation. Do not lo
4646

4747
- Preferred entrypoint: `pnpm test:parallels:macos`
4848
- Default upgrade coverage on macOS should now include: fresh snapshot -> site installer pinned to the latest stable tag -> `openclaw update --channel dev` on the guest. Treat this as part of the default Tahoe regression plan, not an optional side quest.
49+
- `parallels-macos-smoke.sh --mode upgrade` should run that release-to-dev lane by default. Keep the older host-tgz upgrade path only when the caller explicitly passes `--target-package-spec`.
50+
- Because the default upgrade lane no longer needs a host tgz, skip `npm pack` + host HTTP server startup for `--mode upgrade` unless `--target-package-spec` is set. Keep the pack/server path for `fresh` and `both`.
4951
- If that release-to-dev lane fails with `reason=preflight-no-good-commit` and repeated `sh: pnpm: command not found` tails from `preflight build`, treat it as an updater regression first. The fix belongs in the git/dev updater bootstrap path, not in Parallels retry logic.
52+
- Until the public stable train includes that updater bootstrap fix, the macOS release-to-dev lane may seed a temporary guest-local `pnpm` shim immediately before `openclaw update --channel dev`. Keep that workaround scoped to the smoke harness and remove it once the latest stable no longer needs it.
5053
- Default to the snapshot closest to `macOS 26.3.1 latest`.
5154
- On Peter's Tahoe VM, `fresh-latest-march-2026` can hang in `prlctl snapshot-switch`; if restore times out there, rerun with `--snapshot-hint 'macOS 26.3.1 latest'` before blaming auth or the harness.
5255
- `parallels-macos-smoke.sh` now retries `snapshot-switch` once after force-stopping a stuck running/suspended guest. If Tahoe still times out after that recovery path, then treat it as a real Parallels/host issue and rerun manually.
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
name: openclaw-qa-testing
3+
description: Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.
4+
---
5+
6+
# OpenClaw QA Testing
7+
8+
Use this skill for `qa-lab` / `qa-channel` work. Repo-local QA only.
9+
10+
## Read first
11+
12+
- `docs/concepts/qa-e2e-automation.md`
13+
- `docs/help/testing.md`
14+
- `docs/channels/qa-channel.md`
15+
- `qa/QA_KICKOFF_TASK.md`
16+
- `qa/seed-scenarios.json`
17+
- `extensions/qa-lab/src/suite.ts`
18+
19+
## Model policy
20+
21+
- Live OpenAI lane: `openai/gpt-5.4`
22+
- Fast mode: on
23+
- Do not use:
24+
- `openai/gpt-5.4-pro`
25+
- `openai/gpt-5.4-mini`
26+
- Only change model policy if the user explicitly asks.
27+
28+
## Default workflow
29+
30+
1. Read the seed plan and current suite implementation.
31+
2. Decide lane:
32+
- mock/dev: `mock-openai`
33+
- real validation: `live-openai`
34+
3. For live OpenAI, use:
35+
36+
```bash
37+
OPENCLAW_LIVE_OPENAI_KEY="${OPENAI_API_KEY}" \
38+
pnpm openclaw qa suite \
39+
--provider-mode live-openai \
40+
--model openai/gpt-5.4 \
41+
--alt-model openai/gpt-5.4 \
42+
--fast \
43+
--output-dir .artifacts/qa-e2e/run-all-live-openai-<tag>
44+
```
45+
46+
4. Watch outputs:
47+
- summary: `.artifacts/qa-e2e/run-all-live-openai-<tag>/qa-suite-summary.json`
48+
- report: `.artifacts/qa-e2e/run-all-live-openai-<tag>/qa-suite-report.md`
49+
5. If the user wants to watch the live UI, find the current `openclaw-qa` listen port and report `http://127.0.0.1:<port>`.
50+
6. If a scenario fails, fix the product or harness root cause, then rerun the full lane.
51+
52+
## Repo facts
53+
54+
- Seed scenarios live in `qa/`.
55+
- Main live runner: `extensions/qa-lab/src/suite.ts`
56+
- QA lab server: `extensions/qa-lab/src/lab-server.ts`
57+
- Child gateway harness: `extensions/qa-lab/src/gateway-child.ts`
58+
- Synthetic channel: `extensions/qa-channel/`
59+
60+
## What “done” looks like
61+
62+
- Full suite green for the requested lane.
63+
- User gets:
64+
- watch URL if applicable
65+
- pass/fail counts
66+
- artifact paths
67+
- concise note on what was fixed
68+
69+
## Common failure patterns
70+
71+
- Live timeout too short:
72+
- widen live waits in `extensions/qa-lab/src/suite.ts`
73+
- Discovery cannot find repo files:
74+
- point prompts at `repo/...` inside seeded workspace
75+
- Subagent proof too brittle:
76+
- prefer stable final reply evidence over transient child-session listing
77+
- Harness “rebuild” delay:
78+
- dirty tree can trigger a pre-run build; expect that before ports appear
79+
80+
## When adding scenarios
81+
82+
- Add scenario metadata to `qa/seed-scenarios.json`
83+
- Keep kickoff expectations in `qa/QA_KICKOFF_TASK.md` aligned
84+
- Add executable coverage in `extensions/qa-lab/src/suite.ts`
85+
- Prefer end-to-end assertions over mock-only checks
86+
- Save outputs under `.artifacts/qa-e2e/`
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
interface:
2+
display_name: "QA Test OpenClaw"
3+
short_description: "Run and debug qa-lab and qa-channel scenarios"
4+
default_prompt: "Use $openclaw-qa-testing to run or extend the OpenClaw QA suite with qa-lab and qa-channel, using regular openai/gpt-5.4 in fast mode for live OpenAI runs."

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,15 @@ Docs: https://docs.openclaw.ai
3434
- Agents/cache: stabilize cache-relevant system prompt fingerprints by normalizing equivalent structured prompt whitespace, line endings, hook-added system context, and runtime capability ordering so semantically unchanged prompts reuse KV/cache more reliably. Thanks @vincentkoc.
3535
- Agents/tool prompts: remove the duplicate in-band tool inventory from agent system prompts so tool-calling models rely on the structured tool definitions as the single source of truth, improving prompt stability and reducing stale tool guidance.
3636
- Tools/video generation: add bundled xAI (`grok-imagine-video`) and Alibaba Model Studio Wan video providers, plus live-test/default model wiring for both.
37+
- Tools/video generation: add a bundled Runway video provider (`runway/gen4.5`) with native async task polling, local image/video reference support via data URIs, provider docs, and live-test wiring.
38+
- Agents/video generation: register `video_generate` runs in the task ledger with task/run ids and lifecycle updates so long-running generations can be tracked more reliably.
39+
- Agents/video generation: make session-backed `video_generate` runs detach into background tasks, wake the same agent session on completion, and have the agent post the finished video back into the original channel as a follow-up reply.
40+
- Agents/video generation: add active-task prompt hints plus a hard duplicate guard so session-backed `video_generate` returns task status for in-flight jobs instead of spawning the same video request twice, and expose `action=status` for explicit lookup.
3741
- Providers/CLI: remove bundled CLI text-provider backends and the `agents.defaults.cliBackends` surface, while keeping ACP harness sessions and Gemini media understanding on the native bundled providers.
3842
- Matrix/exec approvals: clarify unavailable-approval replies so Matrix no longer claims chat approvals are unsupported when native exec approvals are merely unconfigured. (#61424) Thanks @gumadeiras.
3943
- Docs/IRC: replace public IRC hostname examples with `irc.example.com` and recommend private servers for bot coordination while listing common public networks for intentional use.
4044
- Memory/dreaming: write dreaming trail content to top-level `DREAMS.md` instead of daily memory notes, update `/dreaming` help text to point there, and keep `DREAMS.md` available for explicit reads without pulling it into default recall. Thanks @davemorin.
45+
- Plugins/Lobster: run bundled Lobster workflows in process instead of spawning the external CLI, reducing transport overhead and unblocking native runtime integration. (#61523) Thanks @mbelinky.
4146

4247
### Fixes
4348

@@ -52,6 +57,7 @@ Docs: https://docs.openclaw.ai
5257
- Discord/reply tags: strip leaked `[[reply_to_current]]` control tags from preview text and honor explicit reply-tag threading during final delivery, so Discord replies stay attached to the triggering message instead of printing reply metadata into chat.
5358
- Discord/replies: replace the unshipped `replyToOnlyWhenBatched` flag with `replyToMode: "batched"` so native reply references only attach on debounced multi-message turns while explicit reply tags still work.
5459
- Discord/image generation: include the real generated `MEDIA:` paths in tool output, avoid duplicate plain-output media requeueing, and persist volatile workspace-generated media into durable outbound media before final reply delivery so generated image replies stop pointing at missing local files.
60+
- Tools/image generation: ignore unsupported provider geometry overrides such as OpenAI `aspectRatio` hints, report the dropped overrides in tool output, and keep compatible provider fallbacks working instead of failing early.
5561
- Slack: route live DM replies back to the concrete inbound DM channel while keeping persisted routing metadata user-scoped, so normal assistant replies stop disappearing when pairing and system messages still arrive. (#59030) Thanks @afurm.
5662
- WhatsApp: restore `channels.whatsapp.blockStreaming` and reset watchdog timeouts after reconnect so quiet chats stop falling into reconnect loops. (#60007, #60069) Thanks @MonkeyLeeT and @mcaxtr.
5763
- Android/Talk Mode: cancel in-flight `talk.speak` playback when speech is explicitly stopped, and restore spoken replies on both node-scoped and gateway-backed sessions by keeping reply routing and embedded transport overrides aligned with the current playback path. (#60306, #61164, #61214)
@@ -108,12 +114,14 @@ Docs: https://docs.openclaw.ai
108114
- Exec approvals: remove heuristic command-obfuscation gating from host exec so gateway and node runs rely on explicit policy, allowlist, and strict inline-eval rules only.
109115
- Agents/tool results: cap live tool-result persistence and overflow-recovery truncation at 40k characters so oversized tool output stays bounded without discarding recent context entirely.
110116
- Discord/video replies: split text-plus-video deliveries into a text reply followed by a media-only send, and let live provider auth checks honor manifest-declared API key env vars like `MODELSTUDIO_API_KEY`.
117+
- Providers/fal video: switch long-running fal video generation to the queue-backed submit/status/result flow, and accept `FAL_API_KEY` as a compatibility alias for the canonical `FAL_KEY`.
111118
- Config/All Settings: keep the raw config view intact when sensitive fields are blank instead of corrupting or dropping the rendered snapshot. (#28214) Thanks @solodmd.
112119
- Plugin SDK/facades: back-fill bundled plugin facade sentinels before plugin-id tracking re-enters config loading, so CLI/provider startup no longer crashes with `shouldNormalizeGoogleProviderConfig is not a function` or other empty-facade reads during bundled plugin re-entry. Thanks @adam91holt.
113120
- Plugins/facades: back-fill facade sentinels before tracked-plugin resolution re-enters config loading, so facade exports stay defined during circular provider normalization. (#61180) Thanks @adam91holt.
114121
- Discord/image generation: include the real generated `MEDIA:` paths in tool output and avoid duplicate plain-output media requeueing so Discord image replies stop pointing at missing local files.
115122
- Slack: route live DM replies back to the concrete inbound DM channel while keeping persisted routing metadata user-scoped, so normal assistant replies stop disappearing when pairing and system messages still arrive. (#59030) Thanks @afurm.
116123
- Discord/reply tags: strip leaked `[[reply_to_current]]` control tags from preview text and honor explicit reply-tag threading during final delivery, so Discord replies stay attached to the triggering message instead of printing reply metadata into chat.
124+
- CLI/update: block `openclaw update --channel dev` with a clearer explainer when the git checkout has edited local files, instead of failing later once commit-switching work starts.
117125
- Telegram: fix current-model checks in the model picker, HTML-format non-default `/model` confirmations, explicit topic replies, persisted reaction ownership across restarts, caption-media placeholder and `file_id` preservation on download failure, and upgraded-install inbound image reads. (#60384, #60042, #59634, #59207, #59948, #59971) Thanks @sfuminya, @GitZhangChi, @dashhuang, @samzong, @v1p0r, and @neeravmakwana.
118126
- Telegram: restore DM voice-note preflight transcription so direct-message audio stops arriving as raw `<media:audio>` placeholders. (#61008) Thanks @manueltarouca.
119127
- Telegram/reasoning: only create a Telegram reasoning preview lane when the session is explicitly `reasoning:stream`, so hidden `<think>` traces from streamed replies stop surfacing as chat previews on normal sessions. Thanks @vincentkoc.
@@ -158,6 +166,7 @@ Docs: https://docs.openclaw.ai
158166
- Plugins/OpenAI: tune the OpenAI prompt overlay for live-chat cadence so GPT replies stay shorter, more human, and less wall-of-text by default.
159167
- Providers/compat: stop forcing OpenAI-only defaults on proxy and custom OpenAI-compatible routes, preserve native vendor-specific reasoning/tool/streaming behavior across Anthropic-compatible, Moonshot, Mistral, ModelStudio, OpenRouter, xAI, and Z.ai endpoints, and route GitHub Copilot Claude models through Anthropic Messages instead of OpenAI Responses.
160168
- Providers/GitHub Copilot: send IDE identity headers on runtime model requests and GitHub token exchange so IDE-authenticated Copilot runs stop failing with missing `Editor-Version`. (#60641) Thanks @VACInc and @vincentkoc.
169+
- Discord/native commands: authorize slash commands and autocomplete in explicitly allowlisted guild channels when `commands.allowFrom` is unset, while still keeping `commands.allowFrom` authoritative when it is configured and denying non-allowlisted channels.
161170
- Providers/OpenRouter failover: classify `403 “Key limit exceeded”` spending-limit responses as billing so model fallback continues instead of stopping on generic auth. (#59892) Thanks @rockcent.
162171
- Providers/Anthropic: keep `claude-cli/*` auth on live Claude CLI credentials at runtime, avoid persisting stale bearer-token profiles, and suppress macOS Keychain prompts during non-interactive Claude CLI setup. (#61234) Thanks @darkamenosa.
163172
- Providers/Anthropic: when Claude CLI auth becomes the default, write a real `claude-cli` auth profile so local and gateway agent runs can use Claude CLI immediately without missing-API-key failures. Thanks @vincentkoc.

docs/automation/tasks.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,14 @@ openclaw tasks flow cancel <lookup>
7777
| Subagent orchestration | `subagent` | Spawning a subagent via `sessions_spawn` | `done_only` |
7878
| Cron jobs (all types) | `cron` | Every cron execution (main-session and isolated) | `silent` |
7979
| CLI operations | `cli` | `openclaw agent` commands that run through the gateway | `silent` |
80+
| Agent media jobs | `cli` | Session-backed `video_generate` runs | `silent` |
8081

8182
Main-session cron tasks use `silent` notify policy by default — they create records for tracking but do not generate notifications. Isolated cron tasks also default to `silent` but are more visible because they run in their own session.
8283

84+
Session-backed `video_generate` runs also use `silent` notify policy. They still create task records, but completion is handed back to the original agent session as an internal wake so the agent can write the follow-up message and attach the finished video itself.
85+
86+
While a session-backed `video_generate` task is still active, the tool also acts as a guardrail: repeated `video_generate` calls in that same session return the active task status instead of starting a second concurrent generation. Use `action: "status"` when you want an explicit progress/status lookup from the agent side.
87+
8388
**What does not create tasks:**
8489

8590
- Heartbeat turns — main-session; see [Heartbeat](/gateway/heartbeat)

docs/cli/memory.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ openclaw memory status --deep --index
3434
openclaw memory status --deep --index --verbose
3535
openclaw memory status --agent main
3636
openclaw memory index --agent main --verbose
37+
openclaw memory promote-explain "router vlan"
38+
openclaw memory rem-harness --json
3739
```
3840

3941
## Options
@@ -90,6 +92,33 @@ Full options:
9092
- `--include-promoted`: include already promoted candidates in output.
9193
- `--json`: print JSON output.
9294

95+
`memory promote-explain`:
96+
97+
Explain why a specific candidate would or would not promote, with a full score breakdown.
98+
99+
```bash
100+
openclaw memory promote-explain "<selector>"
101+
```
102+
103+
- `<selector>`: candidate key, path fragment, or snippet fragment to match.
104+
- `--agent <id>`: scope to a single agent (default: the default agent).
105+
- `--include-promoted`: include already promoted candidates.
106+
- `--json`: print JSON output.
107+
108+
`memory rem-harness`:
109+
110+
Preview REM reflections, candidate truths, and deep promotion output without writing anything. Useful for staging and debugging the REM phase before it runs for real.
111+
112+
```bash
113+
openclaw memory rem-harness [--json] [--agent <id>] [--include-promoted]
114+
```
115+
116+
- `--agent <id>`: scope to a single agent (default: the default agent).
117+
- `--include-promoted`: include already promoted deep candidates.
118+
- `--json`: print JSON output.
119+
120+
See [Dreaming](/concepts/dreaming) for the full phase model and how REM fits in.
121+
93122
## Dreaming (experimental)
94123

95124
Dreaming is the background memory consolidation system with three cooperative

docs/concepts/dreaming.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,20 @@ openclaw memory status --deep
225225

226226
See [memory CLI](/cli/memory) for the full flag reference.
227227

228+
### Preview and explain tools
229+
230+
Two additional subcommands help you inspect promotion and REM behavior without writing anything:
231+
232+
```bash
233+
# Explain why a candidate would or would not promote
234+
openclaw memory promote-explain "meeting notes"
235+
236+
# Preview REM reflections, candidate truths, and deep promotions
237+
openclaw memory rem-harness --json
238+
```
239+
240+
See [memory CLI](/cli/memory) for full options.
241+
228242
## How it works
229243

230244
### Light phase pipeline

docs/concepts/model-providers.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ Current bundled examples:
198198
media-understanding and video-generation provider registrations for its
199199
multimodal surfaces; Qwen video generation uses the Standard DashScope video
200200
endpoints with bundled Wan models such as `wan2.6-t2v` and `wan2.7-r2v`
201+
- `runway`: plugin-owned video-generation provider registration for native
202+
Runway task-based models such as `gen4.5`
201203
- `minimax`: plugin-owned catalogs, bundled video-generation provider
202204
registration for Hailuo video models, bundled image-generation provider
203205
registration for `image-01`, hybrid Anthropic/OpenAI replay-policy

docs/docs.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1233,6 +1233,7 @@
12331233
{
12341234
"group": "Providers",
12351235
"pages": [
1236+
"providers/alibaba",
12361237
"providers/anthropic",
12371238
"providers/bedrock",
12381239
"providers/bedrock-mantle",
@@ -1241,6 +1242,7 @@
12411242
"providers/cloudflare-ai-gateway",
12421243
"providers/deepgram",
12431244
"providers/deepseek",
1245+
"providers/fal",
12441246
"providers/github-copilot",
12451247
"providers/glm",
12461248
"providers/google",
@@ -1260,6 +1262,7 @@
12601262
"providers/perplexity-provider",
12611263
"providers/qianfan",
12621264
"providers/qwen",
1265+
"providers/runway",
12631266
"providers/sglang",
12641267
"providers/stepfun",
12651268
"providers/synthetic",

0 commit comments

Comments
 (0)