Commit Graph

24302 Commits

Author SHA1 Message Date
Han Yang 68ee3113a9
Fix: CDP profiles prefer cdpPort over stale WebSocket cdpUrl (Resolves #58494) (#58499)
* fix(browser): prefer cdpPort over stale WebSocket cdpUrl for attach-only profiles

* fix(browser): preserve profile host when dropping stale devtools WS path
2026-03-31 21:09:31 -04:00
Kenny Xie 2650ce31fc
fix(media): resolve relative MEDIA paths against agent workspace (#58624)
* fix(media): resolve relative MEDIA: paths against agent workspace dir

* fix(agents): remove stale ollama compat import

* fix(media): preserve workspace dir in outbound access
2026-03-31 21:09:28 -04:00
ryanngit 0b3d31c0ce
feat(auth): WHAM-aware Codex cooldown for multi-profile setups (#58625)
Instead of exponential backoff guesses on Codex 429, probe the WHAM
usage API to determine real availability and write accurate cooldowns.

- Burst/concurrency contention: 15s circuit-break
- Genuine rate limit: proportional to real reset time (capped 2-4h)
- Expired token: 12h cooldown
- Dead account: 24h cooldown
- Probe failure: 30s fail-open

This prevents cascade lockouts when multiple agents share a pool of
Codex profiles, and avoids wasted retries on genuinely exhausted
profiles.

Closes #26329, relates to #1815, #1522, #23996, #54060

Co-authored-by: ryanngit <ryanngit@users.noreply.github.com>
2026-03-31 21:09:25 -04:00
Jalen 915e15c13d
fix(gateway): skip restart when config.patch has no actual changes (#58502)
config.patch unconditionally writes the config file and sends SIGUSR1
even when diffConfigPaths detects zero changed paths. This causes a
full gateway restart (~10s downtime, all SSE/WebSocket connections
dropped) on every control-plane config.patch call, even when the
config is identical — e.g. a model hot-apply that doesn't change any
gateway.* paths.

Fix: when changedPaths is empty, return early with `noop: true`
without writing the file or scheduling SIGUSR1. The validated config
is still returned so the caller knows the current state.

This lets control-plane clients safely call config.patch for
idempotent updates without triggering unnecessary restarts.
2026-03-31 21:09:23 -04:00
Rico0919x ee42e44d88
fix(auth): add qwen-dashscope and anthropic-openai to known API key env vars (#58503) 2026-03-31 21:09:20 -04:00
Andy 4d8c07b97c
feat(cron): add --tools flag for per-job tool allow-list (#58504)
Add toolsAllow field to cron agent-turn payloads, enabling users to
restrict which tool schemas are sent to the model for a given cron job.

When --tools is set:
- Only listed tools are included in the provider request
- promptMode is forced to 'minimal' (strips skills catalog, reply tags,
  heartbeat, messaging, docs, memory, model aliases, silent replies)
- Dramatically reduces input tokens for small local models (~16K to ~800)

CLI surface:
- openclaw cron add --tools exec,read,write
- openclaw cron edit <id> --tools exec
- openclaw cron edit <id> --clear-tools (remove allow-list)

Closes #58435

Co-authored-by: andyk-ms <andyk-ms@users.noreply.github.com>
2026-03-31 21:09:17 -04:00
Qkal 3a52b475ab
Docs: clarify first-contribution fallback when no good-first-issue labels are open (#58530) 2026-03-31 21:09:10 -04:00
Lee Pender 8b6b4b18a8
feat: add agents.defaults.params for global default provider params (#58548)
Allow setting provider params (e.g. cacheRetention) once at the
agents.defaults level instead of repeating them per-model. The merge
order is now: defaults.params -> defaults.models[key].params ->
list[agentId].params.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 21:09:07 -04:00
hcl b8fea43bf2
fix(gateway): return default scopes when trusted HTTP request has no scope header (#58603)
resolveTrustedHttpOperatorScopes() returns [] when the x-openclaw-scopes
header is absent, even for trusted requests (--auth none). This causes
403 "missing scope: operator.write" on /v1/chat/completions.

Root cause: src/gateway/http-utils.ts:138-140. PR #57783 (f0af18672)
replaced the old resolveGatewayRequestedOperatorScopes which had an
explicit fallback to CLI_DEFAULT_OPERATOR_SCOPES when no header was
present. The new function treats absent header the same as empty header
— both return [].

Fix: distinguish absent header (undefined → return defaults) from empty
header ("" → return []). Trusted clients without an explicit scope
header get the default operator scopes, matching pre-#57783 behavior.

Closes #58357

Signed-off-by: HCL <chenglunhu@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 21:09:05 -04:00
Peter Steinberger 5b8f0cf1d5
test: centralize inbound contract suites 2026-04-01 02:04:53 +01:00
Peter Steinberger b59adf9d2a
test: fix outbound payload contract import 2026-04-01 02:02:07 +01:00
Peter Steinberger 051e31fb55
test: centralize outbound payload contracts 2026-04-01 02:01:48 +01:00
Peter Steinberger ddf39180a4
test: remove extension dm policy wrappers 2026-04-01 01:59:22 +01:00
Peter Steinberger 2db2b078ca
test: remove extension group policy wrappers 2026-04-01 01:57:18 +01:00
Peter Steinberger aea016d02c
test: fix registry-backed contract import 2026-04-01 01:54:03 +01:00
Peter Steinberger 1f97f907b2
test: centralize registry-backed channel contracts 2026-04-01 01:53:23 +01:00
Peter Steinberger 7614c45980
test: fix channel catalog contract import 2026-04-01 01:52:01 +01:00
Peter Steinberger ba5b373ad4
test: centralize channel catalog contracts 2026-04-01 01:51:26 +01:00
Peter Steinberger 85679252c4
test: remove extension provider contract wrappers 2026-04-01 01:49:55 +01:00
Peter Steinberger 4af52a7428
test: centralize provider runtime, discovery, and auth contracts 2026-04-01 01:49:11 +01:00
Peter Steinberger 78be556299
test: consolidate plugin registration contracts 2026-04-01 01:46:56 +01:00
Peter Steinberger 63819bb383
test: consolidate provider and web-search contracts 2026-04-01 01:44:43 +01:00
Peter Steinberger b910cc5869
test: remove extension manifest and core-extension wrappers 2026-04-01 01:44:43 +01:00
Peter Steinberger c41df4873e
test: consolidate package manifest and core-extension contracts 2026-04-01 01:44:43 +01:00
Mingxuan 302c047d86
hotfix(ollama): Show only Ollama models after provider selection (#55290)
* Fix: Add ollama to NON_PI_NATIVE_MODEL_PROVIDERS to ensure correct model selection

* Add test coverage for ollama provider to ensure models are merged correctly

* Fix test case for ollama provider by adding required model properties

* Changelog: add Ollama model picker fix

* Changelog: move Ollama fix entry to section tail

---------

Co-authored-by: Bruce MacDonald <brucewmacdonald@gmail.com>
2026-03-31 16:48:22 -07:00
Gustavo Madeira Santana bea53d7a3f
Fix: move bootstrap session grammar into plugin-owned session-key surfaces (#58400)
Merged via squash.

Prepared head SHA: b062b18b03
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-03-31 19:41:01 -04:00
oliviareid-svg bf0f33db32
fix(compaction): resolve model override in runtime context for all context engines (#56710)
Merged via squash.

Prepared head SHA: 72550aa5f0
Co-authored-by: oliviareid-svg <269669958+oliviareid-svg@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
2026-03-31 15:25:16 -07:00
Peter Steinberger 78d1120a41
test: retry gateway acp bind warmup 2026-03-31 23:20:25 +01:00
Peter Steinberger d771f7dcb7
fix: harden acpx live startup 2026-03-31 23:20:24 +01:00
Peter Steinberger f21abb2151
fix: harden queue cleanup lane resolution 2026-03-31 23:20:24 +01:00
Peter Steinberger cdaf6d5749
docs: allow sponsor table markup in markdownlint 2026-03-31 23:18:55 +01:00
Josh Lehman adc329b26b
test: dedupe extension-owned coverage (#58554)
* test: dedupe extension-owned coverage

* test: remove duplicate coverage files

* test: move helper coverage into extensions

* test: trim duplicate helper assertions

* test: remove cloudflare helper import from agent test

* test: align stale expectations with current main
2026-03-31 15:18:29 -07:00
Peter Steinberger d7e9d341cc
fix: require npm auth for dist-tag mirror 2026-03-31 23:14:19 +01:00
Peter Steinberger 4f83409345
docs: add theme-aware sponsor logos 2026-04-01 07:14:05 +09:00
Peter Steinberger 091c6105a4
style(test): format skills install test 2026-03-31 23:11:53 +01:00
Peter Steinberger aa6cf87814
refactor(approvals): share origin target reconciliation 2026-03-31 23:11:53 +01:00
Peter Steinberger ddce362d34
refactor(approvals): share native delivery runtime 2026-03-31 23:11:53 +01:00
Peter Steinberger 5997317c09
docs: add NVIDIA sponsor logo 2026-04-01 06:59:06 +09:00
Peter Steinberger 9ea7e06460
build: bump version to 2026.4.1 2026-03-31 22:53:17 +01:00
Peter Steinberger 313a27d82f
docs: update appcast for 2026.3.31 2026-03-31 22:51:49 +01:00
Vincent Koc 11318ef9b9 fix(status): align session_status with /status 2026-04-01 06:40:50 +09:00
Vincent Koc 94d72efedc fix(slack): accept bare approve fallback 2026-04-01 06:34:01 +09:00
Vincent Koc ee8baf6766 fix(reply): stop mention-wrapped status double replies 2026-04-01 06:32:34 +09:00
Peter Steinberger ad06d5ab4d
build: reuse release preflight artifacts 2026-04-01 06:30:36 +09:00
Gustavo Madeira Santana 6679690737 fix(regression): restore diffs viewer toolbar buttons 2026-03-31 17:26:20 -04:00
Vincent Koc db0f7c2cd5 changelog: note discord and telegram approval UX fixes 2026-04-01 06:21:56 +09:00
Vincent Koc b73dd9b326 fix(approvals): suppress manual native approval narration 2026-04-01 06:21:56 +09:00
Vincent Koc 211b5a51af docs(changelog): note status followups 2026-04-01 06:16:15 +09:00
Vincent Koc e1d2b299f6 fix(reply): avoid double status replies 2026-04-01 06:12:47 +09:00
Peter Steinberger 968bc3d5b0
fix(ci): preserve workspace openclaw plugin links 2026-03-31 22:05:59 +01:00