Commit Graph

32437 Commits

Author SHA1 Message Date
Gustavo Madeira Santana
569816fbdf fix: guard chat sends for deleted agents 2026-04-19 18:44:47 -04:00
Gustavo Madeira Santana
2291deff63 fix: preserve shared-store sessions on agent delete 2026-04-19 18:44:46 -04:00
Gustavo Madeira Santana
8e8d5ce530 fix: preserve deleted main-store ownership 2026-04-19 18:44:46 -04:00
Gustavo Madeira Santana
c79a5f324e fix: canonicalize legacy main session aliases 2026-04-19 18:44:46 -04:00
Gustavo Madeira Santana
1a98cc03b9 test: cover agent delete session purge 2026-04-19 18:44:46 -04:00
Gustavo Madeira Santana
d51b697f48 refactor: clarify main session alias handling 2026-04-19 18:44:46 -04:00
Gustavo Madeira Santana
1feb21bb02 fix: guard deleted main-agent sessions 2026-04-19 18:44:46 -04:00
bittoby
386623191f fix: guard sessions.send/steer against deleted agents (#65524) 2026-04-19 18:44:45 -04:00
bittoby
b87d619072 fix: share session purge across CLI and gateway agent delete paths (#65524) 2026-04-19 18:44:45 -04:00
bittoby
ae17248040 test: cover deleted-agent guard on sessionId and label resolve paths 2026-04-19 18:44:45 -04:00
bittoby
0d473e8020 update 2026-04-19 18:44:45 -04:00
bittoby
945259ce15 fix: invalidate orphaned sessions on agent deletion (#65524) 2026-04-19 18:44:45 -04:00
B.K.
4277078bc5 fix(subagent): include role, session key, and timing in error payloads (#68726)
Merged via squash.

Prepared head SHA: 55c756142f
Co-authored-by: BKF-Gitty <263413630+BKF-Gitty@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-19 18:31:31 -04:00
Gustavo Madeira Santana
f9a1875127 qa-matrix: cover Matrix allowlist hot reload
Add a Matrix QA scenario that removes an observer from the running account group allowlist and verifies the existing gateway stops replying without relying on a channel restart.

The scenario disables generic config reload and defers restart during the probe so it specifically covers the Matrix handler per-message live allowlist read.
2026-04-19 18:10:51 -04:00
Gustavo Madeira Santana
f309656325 fix(matrix): align mention-stripped command body 2026-04-19 17:34:37 -04:00
Bulut M.
f039d80306 refactor(terminal): optimize log sanitization (#67205)
* refactor(terminal): optimize sanitizeForLog with dynamic regex

* perf(terminal): optimize log sanitization

---------

Co-authored-by: Altay <altay@uinaf.dev>
2026-04-20 00:21:32 +03:00
Gustavo Madeira Santana
4d4f3eb404 chore(docs): remove stale ref 2026-04-19 17:13:02 -04:00
Mr.NightQ
733c0c2fda fix(matrix): strip mention prefix before slash command matching (#68570)
Merged via squash.

Prepared head SHA: d2c1ed5832
Co-authored-by: nightq <3429433+nightq@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-19 16:50:06 -04:00
Gustavo Madeira Santana
efc19f0ddb Add Matrix QA coverage for MXID-prefixed commands
Add a qa-matrix contract scenario that sends a Matrix self MXID-prefixed
control command from an observer and expects no SUT reply. This captures the
regression fixed by the Matrix command precheck change.
2026-04-19 16:46:49 -04:00
Omar Shahine
8fbf0972e7 bluebubbles: always set method explicitly on text sends, force Private API on macOS 26 (#69070)
Merged via squash.

Prepared head SHA: e3af5c5d83
Co-authored-by: omarshahine <198016546+xqing3@users.noreply.github.com>
Co-authored-by: omarshahine <10343873+omarshahine@users.noreply.github.com>
Reviewed-by: @omarshahine
2026-04-19 13:42:56 -07:00
澄潭
f38a498985 fix(matrix): hot-reload dm.allowFrom and groupAllowFrom on each inbound message (#68546)
Merged via squash.

Prepared head SHA: ab369851c8
Co-authored-by: johnlanni <6763318+johnlanni@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-19 15:55:18 -04:00
Gustavo Madeira Santana
55f094ea33 Skills: require manual test performance invocation 2026-04-19 15:48:18 -04:00
Gustavo Madeira Santana
d64948f5c2 Skills: add OpenClaw test performance workflow 2026-04-19 15:38:38 -04:00
Masato Hoshino
517801282a fix(matrix): pin event-helpers import to canonical matrix-js-sdk subpath (refs #50477) (#68498)
Merged via squash.

Prepared head SHA: 32e08e4d8e
Co-authored-by: masatohoshino <246810661+masatohoshino@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-19 15:35:34 -04:00
Ayaan Zaidi
c206702add docs(changelog): note cron delivery validation follow-ups 2026-04-19 23:18:27 +05:30
Ayaan Zaidi
9b38606d5c fix(gateway): preserve cron delivery validation behavior 2026-04-19 23:18:27 +05:30
Ayaan Zaidi
c0563aa532 test(gateway): cover cron delivery validation follow-ups 2026-04-19 23:18:27 +05:30
Marcus Castro
aa76cf43f0 fix(whatsapp): stabilize auth state and reconcile local runtime after CLI login (#67815)
* WhatsApp: harden auth persistence and backup recovery

* WhatsApp: model unstable auth state across runtime and setup

* WhatsApp: recover login and monitor startup from unstable auth

* Channels: surface auth stabilizing in status and health

* Gateway protocol: add channels.start surface

* Gateway: reconcile local channel runtime after CLI login

* Channels UI: reflect recovered login start state

* Changelog: note WhatsApp auth stabilization

* Gateway: fix lint in call test
2026-04-19 14:20:46 -03:00
Ayaan Zaidi
1d4e4314dd fix: preserve deferred cron heartbeat target (#69021)
* test(cron): cover deferred heartbeat target preservation

* fix(cron): preserve deferred heartbeat target override

* test(cron): update timer expectation for deferred heartbeat target

* fix(cron): preserve agent heartbeat config for targeted wakes

* test(cron): use wake request type in scheduler helper

* fix(cron): forward heartbeat overrides through gateway wake adapter

* fix(cron): preserve coalesced wake heartbeat overrides

* fix: preserve deferred cron heartbeat target (#69021)
2026-04-19 22:48:46 +05:30
Ayaan Zaidi
64089fd15e fix: reject invalid cron announce delivery config (#69015)
* test(gateway): cover invalid cron announce delivery config

* fix(gateway): reject invalid cron announce delivery config

* style(gateway): use toSorted for configured channels

* fix: reject invalid cron announce delivery config (#69015)

* fix: preserve default-agent cron delivery validation (#69015)
2026-04-19 22:05:24 +05:30
Ayaan Zaidi
99fb9ab444 fix: key recurring delivery dedupe to execution (#69000) 2026-04-19 21:16:57 +05:30
Ayaan Zaidi
34334f0e68 test(cron): cover recurring delivery dedupe 2026-04-19 21:16:57 +05:30
Ayaan Zaidi
21cfc21e4f fix(cron): key delivery dedupe by execution 2026-04-19 21:16:57 +05:30
Ayaan Zaidi
f44a7423c2 refactor(cron): share execution id helper 2026-04-19 21:16:57 +05:30
Omar Shahine
055c17b088 bluebubbles: consolidate HTTP traffic through typed BlueBubblesClient (#68234)
Merged via squash.

Prepared head SHA: ee72657bc8
Co-authored-by: omarshahine <10343873+omarshahine@users.noreply.github.com>
Co-authored-by: omarshahine <10343873+omarshahine@users.noreply.github.com>
Reviewed-by: @omarshahine
2026-04-19 08:43:32 -07:00
Bob
84cd786911 fix: tolerate partial discord channel metadata (#68953)
Merged via squash.

Prepared head SHA: 2026540d3e
Co-authored-by: dutifulbob <261991368+dutifulbob@users.noreply.github.com>
Co-authored-by: osolmaz <2453968+osolmaz@users.noreply.github.com>
Reviewed-by: @osolmaz
2026-04-19 17:00:30 +02:00
Mariano
bd3ad3436e tasks: add detached runtime plugin registration contract (#68915)
* tasks: register detached runtime plugins

* tasks: harden detached runtime ownership

* tasks: extract detached runtime contract types

* changelog: note detached runtime contract

* changelog: attribute detached runtime contract
2026-04-19 13:13:11 +02:00
termtek
c67a9c5259 docs(changelog): add thanks for kimi fix 2026-04-19 19:09:29 +08:00
termtek
28ee477930 docs(changelog): note kimi thinking default fix 2026-04-19 19:07:42 +08:00
Frank Yang
4ca5f51430 fix: default kimi thinking to off (#68907)
Co-authored-by: termtek <termtek@ubuntu.tail2b72cd.ts.net>
2026-04-19 18:50:54 +08:00
Mariano
8cb73844c8 browser: route existing-session user profile through browser nodes (#68891)
* browser: route user profile through browser nodes

* browser: align existing-session node docs

* browser: preserve host fallback on node discovery errors

* browser: preserve configured node pin errors

* browser: widen config mock in node pin test
2026-04-19 12:21:23 +02:00
Ayaan Zaidi
d83215084f test(tasks): align detached runtime mock return types 2026-04-19 15:21:03 +05:30
Viz
4cfc8cd5be fix(browser): discover CDP websocket from bare ws:// URL before attach (#68715)
* fix(browser): discover CDP websocket from bare ws:// URL before attach

When browser.cdpUrl is set to a bare ws://host:port (no /devtools/ path), ensureBrowserAvailable would call isChromeReachable -> canOpenWebSocket against the URL verbatim. Chrome only accepts WebSocket upgrades at the specific path returned by /json/version, so the handshake failed immediately with HTTP 400. With attachOnly: true, that surfaced as:

  Browser attachOnly is enabled and profile "openclaw" is not running.

even though the CDP endpoint was reachable and the profile was healthy. Reproduced by the new tests in chrome.test.ts and cdp.test.ts (#68027).

Fix: introduce isDirectCdpWebSocketEndpoint(url) — true only when a ws/wss URL has a /devtools/<kind>/<id> handshake path. Route any other ws/wss cdpUrl (including the bare ws://host:port shape) through HTTP /json/version discovery by normalising the scheme via the existing normalizeCdpHttpBaseForJsonEndpoints helper. Apply this in isChromeReachable, getChromeWebSocketUrl, and createTargetViaCdp. Direct WS endpoints with a /devtools/ path are still opened without an extra discovery round-trip.

Fixes #68027

* test(browser): add seeded fuzz coverage for CDP URL helpers

Adds property-based / seeded-fuzz tests for the URL helpers the
attachOnly CDP fix depends on (#68027):

  - isWebSocketUrl
  - isDirectCdpWebSocketEndpoint
  - normalizeCdpHttpBaseForJsonEndpoints
  - parseBrowserHttpUrl
  - redactCdpUrl
  - appendCdpPath
  - getHeadersWithAuth

Follows the existing repo convention (see
src/gateway/http-common.fuzz.test.ts): no fast-check dep, small
mulberry32 PRNG + hand-rolled generators, deterministic per-describe
seeds so failures are reproducible.

Lifts cdp.helpers.ts coverage from 77.77% -> 89.54% statements,
67.9% -> 80.24% branches, 78% -> 90% lines. Remaining uncovered
lines are inside the WS sender internals (createCdpSender,
withCdpSocket, fetchCdpChecked rate-limit branch), which require
integration-style mocks and are unrelated to the attachOnly fix.

* test(browser): drive cdp.helpers/cdp/chrome to 100% coverage

Lifts the three files touched by the #68027 attachOnly fix to 100% statements/branches/functions/lines across the extensions test suite. Adds cdp.helpers.internal.test.ts, cdp.internal.test.ts, and chrome.internal.test.ts covering error paths, branch matrices, CDP session helpers, Chrome spawn/launch/stop flows, and canRunCdpHealthCommand. Defensively unreachable guards are annotated with c8 ignore + inline justifications.

* fix(browser): restore WS fallback for non-/devtools ws:// CDP URLs

When /json/version discovery is unavailable (or returns no
webSocketDebuggerUrl), fall back to treating the original bare ws/wss
URL as a direct WebSocket endpoint. This preserves the #68027 fix for
Chrome's debug port while restoring compatibility with Browserless/
Browserbase-style providers that expose a direct WebSocket root without
a /json/version endpoint.

Priority order for bare ws/wss cdpUrl inputs:
  1. /devtools/<kind>/<id> URL \u2192 direct handshake, no discovery (unchanged)
  2. bare ws/wss root \u2192 try HTTP discovery first; if discovery returns a
     webSocketDebuggerUrl use it; otherwise fall back to the original URL
     as a direct WS endpoint
  3. HTTP/HTTPS URL \u2192 HTTP discovery only, no fallback (unchanged)

Affected call sites: isChromeReachable, getChromeWebSocketUrl,
createTargetViaCdp.

Also renames a misleading test ('still enforces SSRF policy for direct
WebSocket URLs') to accurately describe what it tests: SSRF enforcement
on the navigation target URL, not on the CDP endpoint.

New tests added for all three fallback paths. Coverage remains 100% on
all three touched files (238 tests).

* fix: browser attachOnly bare ws CDP follow-ups (#68715) (thanks @visionik)
2026-04-19 05:43:39 -04:00
ZC
25e51bba52 fix: parse PowerShell cron tools allow-list (#68858) (thanks @chen-zhang-cs-code)
* fix(cron): parse PowerShell tools allow list

* fix(cron): clarify tools allow-list help

* fix: parse PowerShell cron tools allow-list (#68858) (thanks @chen-zhang-cs-code)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-19 15:11:14 +05:30
Peter Steinberger
53495f5136 test: complete workspace setup in update smokes 2026-04-19 10:28:10 +01:00
Mariano
0787266637 tasks: extract detached task lifecycle runtime (#68886)
* tasks: extract detached task lifecycle runtime

* tests: relax gateway seam expectation

---------

Co-authored-by: Mariano Belinky <mariano@mb-server-643.local>
2026-04-19 10:56:31 +02:00
Peter Steinberger
2ecea9395b test: make OpenWebUI smoke deterministic 2026-04-19 09:22:20 +01:00
Peter Steinberger
ec193a2b82 test: tolerate empty fireworks live responses 2026-04-19 09:09:53 +01:00
Peter Steinberger
8c4ecf42df fix: stabilize release smoke reruns 2026-04-19 09:05:33 +01:00
Subash Natarajan
6682b12563 fix: strip orphaned OpenAI reasoning blocks before responses API call (#55787)
Merged via squash.

Prepared head SHA: 263b952d88
Co-authored-by: suboss87 <11032439+suboss87@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
2026-04-19 00:57:03 -07:00