Skip to content

Commit eb17a81

Browse files
committed
Auto-merge upstream openclaw/openclaw
2 parents b53a96b + e2f4aa4 commit eb17a81

212 files changed

Lines changed: 11048 additions & 1567 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: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Use this skill for Parallels guest workflows and smoke interpretation. Do not lo
1414
- Stable `2026.3.12` pre-upgrade diagnostics may require a plain `gateway status --deep` fallback.
1515
- Treat `precheck=latest-ref-fail` on that stable pre-upgrade lane as baseline, not automatically a regression.
1616
- Pass `--json` for machine-readable summaries.
17-
- Per-phase logs land under `/tmp/openclaw-parallels-*`.
17+
- Per-phase logs land under `.artifacts/parallels/openclaw-parallels-*` by default. Override with `OPENCLAW_PARALLELS_ARTIFACT_ROOT` when a run needs another artifact volume.
1818
- Do not run local and gateway agent turns in parallel on the same fresh workspace or session.
1919
- Hard-cap every top-level Parallels lane with host `timeout --foreground` (or `gtimeout --foreground` if that is the available binary) so a stalled install, snapshot switch, or `prlctl exec` transport cannot consume the rest of the testing window. Defaults:
2020
- macOS: `75m`
@@ -68,8 +68,13 @@ Use this skill for Parallels guest workflows and smoke interpretation. Do not lo
6868
- The Windows same-guest update helper should write stage markers to its log before long steps like tgz download and `npm install -g` so the outer progress monitor does not sit on `waiting for first log line` during healthy but quiet installs.
6969
- Linux same-guest update verification should also export `HOME=/root`, pass `OPENAI_API_KEY` via `prlctl exec ... /usr/bin/env`, and use `openclaw agent --local`; the fresh Linux baseline does not rely on persisted gateway credentials.
7070
- The npm-update wrapper now prints per-lane progress from the nested log files. If a lane still looks stuck, inspect the nested logs in `runDir` first (`macos-fresh.log`, `windows-fresh.log`, `linux-fresh.log`, `macos-update.log`, `windows-update.log`, `linux-update.log`) instead of assuming the outer wrapper hung.
71-
- If the wrapper fails a lane, read the auto-dumped tail first, then the full nested lane log under `/tmp/openclaw-parallels-npm-update.*`.
71+
- Each run writes both `summary.json` and `summary.md`; read the markdown first for quick human triage, then the JSON/timings for automation.
72+
- For full beta validation after a tag is published, prefer one command:
73+
- `timeout --foreground 150m pnpm test:parallels:npm-update -- --beta-validation beta3 --json`
74+
This resolves `beta3` to the latest `*-beta.3` version, runs latest->that-version same-guest update coverage, and then runs fresh install smoke for that exact published target on the same selected OS matrix. Use `--platform macos|windows|linux` to narrow reruns.
75+
- If the wrapper fails a lane, read the auto-dumped tail first, then the full nested lane log under `.artifacts/parallels/openclaw-parallels-npm-update.*`.
7276
- Current known macOS update-lane transport signature when the fallback is missing or bypassed: `Unable to authenticate the user. Make sure that the specified credentials are correct and try again.` Treat that as Parallels current-user authentication before blaming npm or OpenClaw.
77+
- A macOS packaged fresh install with global package directories or bundled files mode `0777` usually means the harness used the root `prlctl exec` fallback under a permissive umask. The POSIX guest transports should prepend `umask 022`; verify the phase preflight line before blaming npm.
7378

7479
## CLI invocation footgun
7580

CHANGELOG.md

Lines changed: 66 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
3e7cbffbe3849b5201716f359dde9089d61d618c1a4206255c20887a855d85a9 config-baseline.json
1+
953aece02c70b8df690b51e865a4aea838b53bbe9d43ef9495f80f719a831e38 config-baseline.json
22
31ec333df9f8b92c7656ac7107cecd5860dd02e08f7e18c7c674dc47a8811baa config-baseline.core.json
3-
655d1309b70505e73198df20c5088784290b33098efd42027d3c09beeb3704a7 config-baseline.channel.json
4-
055fae0d0067a751dc10125af7421da45633f73519c94c982d02b0c4eb2bdf67 config-baseline.plugin.json
3+
e10ba2f29f25fc665b96c714075af954eed686c56ca12783cf1f49498f86ac98 config-baseline.channel.json
4+
606641569764473005f8343f4550500dcbe99cf54e1dc21960018cf455912196 config-baseline.plugin.json
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
0dd4f5abaf72f0d6b3fe5777cbf16c7a8c8052eece17436dc0ac2809b0ea27de plugin-sdk-api-baseline.json
2-
2c2170cf2f1193f7dbecdef3ccd1b601992407e3d99863d1aa13cb1817c238fd plugin-sdk-api-baseline.jsonl
1+
c38441e2e18aa519c5dc22c2b593694444869673447740327c87f16f3d4a0f8d plugin-sdk-api-baseline.json
2+
5711948923b5a4f89ac04a182266ee0fb57275369a3a8112433f3758a7d38c86 plugin-sdk-api-baseline.jsonl

docs/ci.md

Lines changed: 83 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -493,16 +493,93 @@ The sanity check fails fast when required root files such as `pnpm-lock.yaml` di
493493

494494
`pnpm testbox:run` also terminates a local Blacksmith CLI invocation that stays in the sync phase for more than five minutes without post-sync output. Set `OPENCLAW_TESTBOX_SYNC_TIMEOUT_MS=0` to disable that guard, or use a larger millisecond value for unusually large local diffs.
495495

496-
Crabbox is the repo-owned second remote-box path for Linux proof when Blacksmith is unavailable or when owned cloud capacity is preferable. Warm a box, hydrate it through the project workflow, then run commands through the Crabbox CLI:
496+
Crabbox is the repo-owned remote-box wrapper for maintainer Linux proof. Use it when a check is too broad for a local edit loop, when CI parity matters, or when the proof needs secrets, Docker, package lanes, reusable boxes, or remote logs. The normal OpenClaw backend is `blacksmith-testbox`; owned AWS/Hetzner capacity is a fallback for Blacksmith outages, quota issues, or explicit owned-capacity testing.
497+
498+
Before a first run, check the wrapper from the repo root:
499+
500+
```bash
501+
pnpm crabbox:run -- --help | sed -n '1,120p'
502+
```
503+
504+
The repo wrapper refuses a stale Crabbox binary that does not advertise `blacksmith-testbox`. Pass the provider explicitly even though `.crabbox.yaml` has owned-cloud defaults.
505+
506+
Changed gate:
507+
508+
```bash
509+
pnpm crabbox:run -- --provider blacksmith-testbox \
510+
--blacksmith-org openclaw \
511+
--blacksmith-workflow .github/workflows/ci-check-testbox.yml \
512+
--blacksmith-job check \
513+
--blacksmith-ref main \
514+
--idle-timeout 90m \
515+
--ttl 240m \
516+
--timing-json \
517+
--shell -- \
518+
"env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_TEST_PROJECTS_PARALLEL=6 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm check:changed"
519+
```
520+
521+
Focused test rerun:
522+
523+
```bash
524+
pnpm crabbox:run -- --provider blacksmith-testbox \
525+
--blacksmith-org openclaw \
526+
--blacksmith-workflow .github/workflows/ci-check-testbox.yml \
527+
--blacksmith-job check \
528+
--blacksmith-ref main \
529+
--idle-timeout 90m \
530+
--ttl 240m \
531+
--timing-json \
532+
--shell -- \
533+
"env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm test <path-or-filter>"
534+
```
535+
536+
Full suite:
537+
538+
```bash
539+
pnpm crabbox:run -- --provider blacksmith-testbox \
540+
--blacksmith-org openclaw \
541+
--blacksmith-workflow .github/workflows/ci-check-testbox.yml \
542+
--blacksmith-job check \
543+
--blacksmith-ref main \
544+
--idle-timeout 90m \
545+
--ttl 240m \
546+
--timing-json \
547+
--shell -- \
548+
"env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_TEST_PROJECTS_PARALLEL=6 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm test"
549+
```
550+
551+
Read the final JSON summary. The useful fields are `provider`, `leaseId`, `syncDelegated`, `exitCode`, `commandMs`, and `totalMs`. One-shot Blacksmith-backed Crabbox runs should stop the Testbox automatically; if a run is interrupted or cleanup is unclear, inspect live boxes and stop only the boxes you created:
552+
553+
```bash
554+
blacksmith testbox list
555+
blacksmith testbox stop --id <tbx_id>
556+
```
557+
558+
Use reuse only when you intentionally need multiple commands on the same hydrated box:
559+
560+
```bash
561+
pnpm crabbox:run -- --provider blacksmith-testbox --id <tbx_id> --no-sync --timing-json --shell -- "pnpm test <path-or-filter>"
562+
pnpm crabbox:stop -- <tbx_id>
563+
```
564+
565+
If Crabbox is the broken layer but Blacksmith itself works, use direct Blacksmith as a narrow fallback:
566+
567+
```bash
568+
blacksmith testbox warmup ci-check-testbox.yml --ref main --idle-timeout 90
569+
blacksmith testbox run --id <tbx_id> "env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_TEST_PROJECTS_PARALLEL=6 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm check:changed"
570+
blacksmith testbox stop --id <tbx_id>
571+
```
572+
573+
Escalate to owned Crabbox capacity only when Blacksmith is down, quota-limited, missing the needed environment, or owned capacity is explicitly the goal:
497574

498575
```bash
499-
pnpm crabbox:warmup -- --idle-timeout 90m
500-
pnpm crabbox:hydrate -- --id <cbx_id>
501-
pnpm crabbox:run -- --id <cbx_id> --shell "OPENCLAW_TESTBOX=1 pnpm check:changed"
502-
pnpm crabbox:stop -- <cbx_id>
576+
pnpm crabbox:warmup -- --provider aws --class beast --market on-demand --idle-timeout 90m
577+
pnpm crabbox:hydrate -- --id <cbx_id-or-slug>
578+
pnpm crabbox:run -- --id <cbx_id-or-slug> --timing-json --shell -- "env NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_TEST_PROJECTS_PARALLEL=6 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm check:changed"
579+
pnpm crabbox:stop -- <cbx_id-or-slug>
503580
```
504581

505-
`.crabbox.yaml` owns provider, sync, and GitHub Actions hydration defaults. It excludes local `.git` so the hydrated Actions checkout keeps its own remote Git metadata instead of syncing maintainer-local remotes and object stores, and it excludes local runtime/build artifacts that should never be transferred. `.github/workflows/crabbox-hydrate.yml` owns checkout, Node/pnpm setup, `origin/main` fetch, and the non-secret environment handoff that later `crabbox run --id <cbx_id>` commands source.
582+
`.crabbox.yaml` owns provider, sync, and GitHub Actions hydration defaults for owned-cloud lanes. It excludes local `.git` so the hydrated Actions checkout keeps its own remote Git metadata instead of syncing maintainer-local remotes and object stores, and it excludes local runtime/build artifacts that should never be transferred. `.github/workflows/crabbox-hydrate.yml` owns checkout, Node/pnpm setup, `origin/main` fetch, and the non-secret environment handoff for owned-cloud `crabbox run --id <cbx_id>` commands.
506583

507584
## Related
508585

docs/cli/plugins.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ is available, then fall back to `latest`.
134134

135135
Use `npm:<package>` when you want to make npm resolution explicit. Bare package specs also install directly from npm during the launch cutover.
136136

137-
Bare specs and `@latest` stay on the stable track. If npm resolves either of those to a prerelease, OpenClaw stops and asks you to opt in explicitly with a prerelease tag such as `@beta`/`@rc` or an exact prerelease version such as `@1.2.3-beta.4`.
137+
Bare specs and `@latest` stay on the stable track. OpenClaw date-stamped correction versions such as `2026.5.3-1` are stable releases for this check. If npm resolves either of those to a prerelease, OpenClaw stops and asks you to opt in explicitly with a prerelease tag such as `@beta`/`@rc` or an exact prerelease version such as `@1.2.3-beta.4`.
138138

139139
If a bare install spec matches an official plugin id (for example `diffs`), OpenClaw installs the catalog entry directly. To install an npm package with the same name, use an explicit scoped spec (for example `@scope/diffs`).
140140

docs/cli/proxy.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ semantics.
6868

6969
- `start` defaults to `127.0.0.1` unless `--host` is set.
7070
- `run` starts a local debug proxy and then runs the command after `--`.
71+
- The debug proxy's direct upstream forwarding opens upstream sockets for diagnostics. When OpenClaw managed proxy mode is active, direct forwarding for proxy requests and CONNECT tunnels is disabled by default; set `OPENCLAW_DEBUG_PROXY_ALLOW_DIRECT_CONNECT_WITH_MANAGED_PROXY=1` only for approved local diagnostics.
7172
- `validate` exits with code 1 when proxy config or destination checks fail.
7273
- Captures are local debugging data; use `openclaw proxy purge` when finished.
7374

docs/concepts/mantis.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,51 @@ Useful desktop smoke flags:
111111
- `--keep-lease` or `OPENCLAW_MANTIS_KEEP_VM=1` keeps a newly created passing lease open for VNC inspection. Failed runs keep the lease by default when one was created so an operator can reconnect.
112112
- `--class`, `--idle-timeout`, and `--ttl` tune machine size and lease lifetime.
113113

114+
The first full desktop transport primitive is the Slack desktop smoke:
115+
116+
```bash
117+
pnpm openclaw qa mantis slack-desktop-smoke \
118+
--output-dir .artifacts/qa-e2e/mantis/slack-desktop \
119+
--gateway-setup \
120+
--scenario slack-canary \
121+
--keep-lease
122+
```
123+
124+
It leases or reuses a Crabbox desktop machine, syncs the current checkout into
125+
the VM, runs `pnpm openclaw qa slack` inside that VM, opens Slack Web in the VNC
126+
browser, captures the visible desktop, and copies both the Slack QA artifacts and
127+
the VNC screenshot back to the local output directory. This is the first Mantis
128+
shape where the SUT OpenClaw gateway and the browser both live inside the same
129+
Linux desktop VM.
130+
131+
With `--gateway-setup`, the command prepares a persistent disposable OpenClaw
132+
home at `$HOME/.openclaw-mantis/slack-openclaw`, patches Slack Socket Mode
133+
configuration for the selected channel, starts `openclaw gateway run` on port
134+
`38973`, and keeps Chrome running in the VNC session. This is the "leave me a
135+
Linux desktop with Slack and a claw running" mode; the bot-to-bot Slack QA lane
136+
remains the default when `--gateway-setup` is omitted.
137+
138+
Required inputs for `--credential-source env`:
139+
140+
- `OPENCLAW_QA_SLACK_CHANNEL_ID`
141+
- `OPENCLAW_QA_SLACK_DRIVER_BOT_TOKEN`
142+
- `OPENCLAW_QA_SLACK_SUT_BOT_TOKEN`
143+
- `OPENCLAW_QA_SLACK_SUT_APP_TOKEN`
144+
- `OPENCLAW_LIVE_OPENAI_KEY` for the remote model lane. If only
145+
`OPENAI_API_KEY` is set locally, Mantis maps it to `OPENCLAW_LIVE_OPENAI_KEY`
146+
before invoking Crabbox so Crabbox's `OPENCLAW_*` env forwarding can carry it
147+
into the VM.
148+
149+
Useful Slack desktop flags:
150+
151+
- `--lease-id <cbx_...>` reruns against a machine where an operator already logged in to Slack Web through VNC.
152+
- `--gateway-setup` starts a persistent OpenClaw Slack gateway in the VM instead of only running the bot-to-bot QA lane.
153+
- `--slack-url <url>` opens a specific Slack Web URL. Without it, Mantis derives `https://app.slack.com/client/<team>/<channel>` from Slack `auth.test` when the SUT bot token is available.
154+
- `--slack-channel-id <id>` controls the Slack channel allowlist used by gateway setup.
155+
- `OPENCLAW_MANTIS_SLACK_BROWSER_PROFILE_DIR` controls the persistent Chrome profile inside the VM. The default is `$HOME/.config/openclaw-mantis/slack-chrome-profile`, so a manual Slack Web login survives reruns on the same lease.
156+
- `--credential-source convex --credential-role ci` uses the shared credential pool instead of direct Slack env tokens.
157+
- `--provider-mode`, `--model`, `--alt-model`, and `--fast` pass through to the Slack live lane.
158+
114159
The GitHub smoke workflow is `Mantis Discord Smoke`. The before and after GitHub
115160
workflow for the first real scenario is `Mantis Discord Status Reactions`. It
116161
accepts:

docs/concepts/progress-drafts.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,33 @@ Limit how many lines stay visible:
217217
}
218218
```
219219

220+
Progress lines are compacted automatically to reduce chat-bubble reflow while the draft is edited.
221+
222+
OpenClaw truncates long progress lines by default so repeated draft edits do not
223+
wrap differently on every update. The prefix stays readable, and long details
224+
such as paths or raw commands are shortened with an ellipsis.
225+
226+
Slack can render progress lines as structured Block Kit fields instead of a
227+
single text body:
228+
229+
```json5
230+
{
231+
channels: {
232+
slack: {
233+
streaming: {
234+
mode: "progress",
235+
progress: {
236+
render: "rich",
237+
},
238+
},
239+
},
240+
},
241+
}
242+
```
243+
244+
Rich rendering keeps the same plain-text fallback so channels and clients that
245+
do not support the richer shape can still show the compact progress text.
246+
220247
Keep the single progress draft but hide tool and task lines:
221248

222249
```json5

0 commit comments

Comments
 (0)