Skip to content

Commit 361996d

Browse files
committed
Merge remote-tracking branch 'origin/main' into feat/ask-user-followups
# Conflicts: # ui/src/pages/chat/components/chat-composer.ts
2 parents a9a4fea + cad4e39 commit 361996d

157 files changed

Lines changed: 5073 additions & 759 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/workflows/openclaw-release-checks.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -711,7 +711,7 @@ jobs:
711711
(.imageArtifactDigest | hex64) and
712712
(.imageArtifactRunId | tostring | digits) and
713713
(.imageArtifactRunAttempt | tostring | digits) and
714-
(.imageArchiveSha256 | hex64)'
714+
(.imageArchiveSha256 | hex64)' \
715715
<<< "$CANDIDATE_ARTIFACT_JSON" >/dev/null
716716
717717
install_smoke_release_checks:

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Docs: https://docs.openclaw.ai
4242

4343
### Fixes
4444

45+
- **Codex model status diagnostics:** report a configured Codex route as unavailable when its harness plugin is disabled, missing, or quarantined, while preserving the separate credential result and making `models status --check` fail instead of silently treating fallback execution as healthy. Thanks @shakkernerd.
4546
- **Gateway control-plane rate limiting:** use per-method buckets with a 30-per-minute budget so interactive admin writes remain responsive while retaining runaway-loop protection.
4647
- **External supervisor restart health:** accept device-identity policy closes only when the replacement gateway lock and listener PID agree, preventing OCM-managed restarts from timing out after a successful handoff. Thanks @shakkernerd.
4748
- **ACPX cleanup process inspection:** bound host process-table reads so stalled `ps` calls cannot hang gateway startup or session cleanup while retaining fail-closed ownership checks. Thanks @Alix-007.

config/max-lines-baseline.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,6 @@ src/gateway/tools-invoke-http.test.ts
896896
src/gateway/watch-node-http.ts
897897
src/gateway/worker-environments/bootstrap.ts
898898
src/gateway/worker-environments/inference-runtime.ts
899-
src/gateway/worker-environments/live-events.ts
900899
src/gateway/worker-environments/service.test.ts
901900
src/gateway/worker-environments/service.ts
902901
src/gateway/worker-environments/store.ts

docs/.generated/plugin-sdk-api-baseline.sha256

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ e1b72e4c2d926d39d216df80775e0a5f44705d04f5040c01fe1043ad7a2c2fe4 module/heartbe
136136
21a233e9008f0701df1efbefe521a9ced45c61da6e297e788bdd86895d793128 module/image-generation-runtime
137137
f6e3c44e7d1090a97aca554a3c247219b8de78b3cb4399cac5efde8a0a6c1156 module/inbound-envelope
138138
d3102bd433eea32ca2a761030788fe18294aa34266f2fb2d01d74268cbf8fb54 module/inbound-reply-dispatch
139-
a5b9f46c1d3e5af2ffe9c68806c6de4309b1d2e83f66ff288b384eba4abcf97b module/infra-runtime
139+
30b0b311f2488a12bdfb3eceb70a14327c9dfa2833519f24666141a734f9e7d1 module/infra-runtime
140140
3d0431e2575abf67c7fd9e9763b08b7a46018e01c290ffea8d4af9874d3c3fc4 module/inline-image-data-url-runtime
141141
74fee62a94618d830a5282a7816a73b85570b2e4ce17b90078078734510511d7 module/interactive-runtime
142142
9353103e334009222e5ae4fe4a2992a1d00552735013a69f93f17f74f14eb9ee module/json-schema-runtime

docs/ci.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ replace the separate strict, App-owned test-merge check against current `main`.
7070
A later pending or failed rerun does not erase an earlier successful result for
7171
that unchanged head during the freshness window.
7272

73-
The default-branch ruleset requires the GitHub Actions-owned `openclaw/ci-gate` check without a repository-role bypass. The separate strict App-owned test-merge check still binds the head to current `main`. A maintainer therefore cannot manually merge a head whose selected CI lanes failed, as happened before this rule was enforced.
73+
The default-branch ruleset requires the GitHub Actions-owned `openclaw/ci-gate` check. Repository maintainers and admins have an audited break-glass bypass intended only for signed direct fast-forward landings; the organization ruleset still blocks deletion and non-fast-forward updates. Normal pull-request merges should continue to use the gate rather than bypass failed CI. The separate strict App-owned test-merge check still binds the head to current `main`.
7474

7575
GitHub may mark superseded pull-request jobs as `cancelled` when a newer head lands. Treat that as CI noise unless the newest run for the same PR is also failing. Canonical `main` runs are not canceled after admission; when merge traffic arrives, GitHub replaces only the older pending run with the newest tip. Matrix jobs use `fail-fast: false`, and `build-artifacts` reports embedded channel, core-support-boundary, and gateway-watch failures directly instead of queuing tiny verifier jobs. The automatic CI concurrency key is versioned (`CI-v7-*`) so a GitHub-side zombie in an old queue group cannot indefinitely block newer main runs. Manual full-suite runs use `CI-manual-v1-*` and do not cancel in-progress runs. The plugin-list startup-memory guard keeps a 350 MiB ceiling on self-hosted Blacksmith Linux and allows 425 MiB on GitHub-hosted Linux, whose RSS baseline is higher for the same built CLI.
7676

docs/cli/config.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ openclaw config set 'agents.list[1].tools.exec.node' "node-id-or-name"
5757

5858
Reads a value from the redacted config snapshot (secrets never print). `--json` prints the raw value as JSON; otherwise strings/numbers/booleans print bare and objects/arrays print as formatted JSON.
5959

60+
When the path is missing, `--json` writes `{ "error": "Config path not found: <path>" }` to stdout and exits with status 1. Without `--json`, the diagnostic remains on stderr.
61+
6062
```bash
6163
openclaw config get browser.executablePath
6264
openclaw config get agents.defaults.model --json

docs/cli/models.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,24 @@ openclaw models scan
3030

3131
### Status
3232

33-
`openclaw models status` shows the resolved default/fallbacks plus an auth overview. When provider usage snapshots are available, the OAuth/API-key status section includes provider usage windows and quota snapshots. Current usage-window providers: Anthropic, GitHub Copilot, Gemini CLI, OpenAI, MiniMax, Xiaomi, and z.ai. Usage auth comes from provider-specific hooks when available; otherwise OpenClaw falls back to matching OAuth/API-key credentials from auth profiles, env, or config.
33+
`openclaw models status` shows the resolved default/fallbacks plus an auth overview. For plugin-owned agent runtimes such as Codex, it also checks whether the owning plugin is enabled and passed startup payload verification. A route with valid credentials but an unavailable runtime reports `status: unavailable` instead of `usable`; JSON output includes separate `authStatus`, `runtimeStatus`, and bounded runtime diagnostics. When provider usage snapshots are available, the OAuth/API-key status section includes provider usage windows and quota snapshots. Current usage-window providers: Anthropic, GitHub Copilot, Gemini CLI, OpenAI, MiniMax, Xiaomi, and z.ai. Usage auth comes from provider-specific hooks when available; otherwise OpenClaw falls back to matching OAuth/API-key credentials from auth profiles, env, or config.
3434

3535
In `--json` output, `auth.providers` is the env/config/store-aware provider overview, while `auth.oauth` is auth-store profile health only.
3636

3737
Options:
3838

39-
| Flag | Effect |
40-
| ------------------------- | ------------------------------------------------------------------------------------------------------------- |
41-
| `--json` | JSON output; auth-profile, provider, and startup diagnostics go to stderr so stdout stays pipeable into `jq`. |
42-
| `--plain` | Plain text output. |
43-
| `--check` | Exit non-zero if auth is expiring/expired: `1` = expired/missing, `2` = expiring. |
44-
| `--probe` | Live probe of configured auth profiles. Real requests; may consume tokens and trigger rate limits. |
45-
| `--probe-provider <name>` | Probe one provider only. |
46-
| `--probe-profile <id>` | Probe specific auth profile ids (repeat or comma-separated). |
47-
| `--probe-timeout <ms>` | Per-probe timeout. |
48-
| `--probe-concurrency <n>` | Concurrent probes. |
49-
| `--probe-max-tokens <n>` | Probe max tokens (best effort). |
50-
| `--agent <id>` | Configured agent id; overrides `OPENCLAW_AGENT_DIR`. |
39+
| Flag | Effect |
40+
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
41+
| `--json` | JSON output; auth-profile, provider, and startup diagnostics go to stderr so stdout stays pipeable into `jq`. |
42+
| `--plain` | Plain text output. |
43+
| `--check` | Exit non-zero if auth is expiring/expired or a selected agent runtime is unavailable: `1` = unavailable/expired/missing, `2` = expiring. |
44+
| `--probe` | Live probe of configured auth profiles. Real requests; may consume tokens and trigger rate limits. |
45+
| `--probe-provider <name>` | Probe one provider only. |
46+
| `--probe-profile <id>` | Probe specific auth profile ids (repeat or comma-separated). |
47+
| `--probe-timeout <ms>` | Per-probe timeout. |
48+
| `--probe-concurrency <n>` | Concurrent probes. |
49+
| `--probe-max-tokens <n>` | Probe max tokens (best effort). |
50+
| `--agent <id>` | Configured agent id; overrides `OPENCLAW_AGENT_DIR`. |
5151

5252
Probe rows can come from auth profiles, env credentials, or `models.json`. Probe status buckets: `ok`, `auth`, `rate_limit`, `billing`, `timeout`, `format`, `unknown`, `no_model`.
5353

docs/cli/onboard.md

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ openclaw onboard --import-from hermes --import-source ~/.hermes
4646
openclaw onboard --skip-bootstrap
4747
openclaw onboard recommendations --json
4848
openclaw onboard recommendations acknowledge
49+
openclaw onboard recommendations refresh
4950
openclaw onboard --mode remote --remote-url wss://gateway-host:18789
5051
```
5152

@@ -55,8 +56,9 @@ the first-run bootstrap. The command does not rescan installed apps or call a
5556
model. Its output contains only validated install IDs, source, and tier; it
5657
intentionally omits untrusted marketplace prose, model reasons, and local app
5758
labels. After the recommendation offer has been answered, the command returns
58-
an empty list and future onboarding runs skip the step entirely. A future
59-
explicit refresh command can clear that accepted state and run discovery again.
59+
an empty list and future onboarding runs skip the step entirely.
60+
`openclaw onboard recommendations refresh` clears the stored offer so the next
61+
onboarding run rescans installed apps and creates a new offer.
6062

6163
Fresh workspaces defer the recommendation choice to the bootstrap conversation.
6264
After that conversation handles the user's choices,
@@ -122,13 +124,13 @@ the same plan the conversational `openclaw setup` chat would apply on "yes" —
122124
then offers plugin and skill recommendations from installed apps; app names
123125
are matched through your configured model and ClawHub search, and the step can
124126
be disabled with [`wizard.appRecommendations`](/gateway/configuration-reference#wizard).
125-
On a macOS console, it then opens the authenticated Control UI dashboard and
126-
waits up to 60 seconds for the browser client to connect. Over SSH, it prints a
127-
prominent copy-pasteable dashboard URL, including an SSH port-forward command
128-
for a loopback Gateway, and waits up to five minutes. A successful connection
129-
continues in the browser; an unreachable Gateway or a timeout falls back to the
130-
same terminal hatch as before. Pass `--tui` to skip the browser handoff and
131-
force that terminal hatch. Other platforms currently keep the terminal hatch.
127+
In a macOS, Linux, or Windows desktop session, it then opens the authenticated
128+
Control UI dashboard and waits up to 60 seconds for the browser client to
129+
connect. On headless Linux or over SSH, it prints a prominent copy-pasteable
130+
dashboard URL, including an SSH port-forward command for a loopback Gateway,
131+
and waits up to five minutes. A successful connection continues in the browser;
132+
an unreachable Gateway or a timeout falls back to the same terminal hatch as
133+
before. Pass `--tui` to skip the browser handoff and force that terminal hatch.
132134
If applying setup fails, onboarding falls back to the conversational OpenClaw
133135
chat to finish interactively. Channels, agents,
134136
plugins, and other optional features remain OpenClaw chat territory: run

docs/cli/secrets.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ Scans OpenClaw state for:
6060
- generated `agents/*/agent/models.json` residues (provider `apiKey` values and sensitive provider headers)
6161
- legacy residues (legacy auth store entries, OAuth reminders)
6262

63+
The `.env` scan covers the effective state directory and the directory containing the active config. When both paths name the same file, it is scanned once.
64+
6365
Sensitive provider header detection is name-heuristic based: it flags headers whose name matches common auth/credential fragments (`authorization`, `x-api-key`, `token`, `secret`, `password`, `credential`).
6466

6567
```bash
@@ -108,6 +110,7 @@ Notes:
108110
- Supports creating new `auth-profiles.json` mappings directly in the picker flow.
109111
- Runs preflight resolution before apply.
110112
- Generated plans default to scrub options enabled (`scrubEnv`, `scrubAuthProfilesForProviderTargets`, `scrubLegacyAuthJson`). Apply is one-way for scrubbed plaintext values.
113+
- `--plan-out` refuses to create a plan whose UTF-8 serialized form exceeds 16 MiB (16,777,216 bytes), matching the `apply --from` input limit.
111114
- Without `--apply`, the CLI still prompts `Apply this plan now?` after preflight.
112115
- With `--apply` (and no `--yes`), the CLI prompts an extra irreversible-migration confirmation.
113116
- `--json` prints the plan + preflight report, but still requires an interactive TTY.
@@ -128,12 +131,14 @@ openclaw secrets apply --from /tmp/openclaw-secrets-plan.json --json
128131

129132
`--dry-run` validates preflight without writing files; exec SecretRef checks are skipped by default in dry-run. Write mode rejects plans containing exec SecretRefs/providers unless `--allow-exec`. Use `--allow-exec` to opt in to exec provider checks/execution in either mode.
130133

134+
`--from` must point to a regular file no larger than 16 MiB (16,777,216 bytes). The byte limit applies to the complete serialized file, including whitespace.
135+
131136
What `apply` may update:
132137

133138
- `openclaw.json` (SecretRef targets + provider upserts/deletes)
134139
- `auth-profiles.json` (provider-target scrubbing)
135140
- legacy `auth.json` residues
136-
- `~/.openclaw/.env` known secret keys whose values were migrated
141+
- `.env` files in the effective state and active-config directories, for known secret keys whose values were migrated
137142

138143
Plan contract details (allowed target paths, validation rules, failure semantics): [Secrets Apply Plan Contract](/gateway/secrets-plan-contract).
139144

docs/docs_map.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3879,6 +3879,7 @@ Do not edit it by hand; run `pnpm docs:map:gen`.
38793879

38803880
- Route: /gateway/secrets-plan-contract
38813881
- Headings:
3882+
- H2: Plan file requirements
38823883
- H2: Plan file shape
38833884
- H2: Provider upserts and deletes
38843885
- H2: Supported target scope
@@ -8652,6 +8653,10 @@ Do not edit it by hand; run `pnpm docs:map:gen`.
86528653
- H2: Agent schema history
86538654
- H2: State schema history
86548655
- H2: Integrity checks
8656+
- H2: Troubleshooting
8657+
- H3: Why you cannot go back after updating to 2026.7.2
8658+
- H3: The Gateway refuses to start with a newer schema version error
8659+
- H3: A database is quarantined after integrity verification failed
86558660
- H2: Downgrades are unsupported
86568661
- H3: Example: agent schema 11 to 9
86578662

0 commit comments

Comments
 (0)