Commit Graph

14431 Commits

Author SHA1 Message Date
Dallin Romney 3e53c7adac fix: align browser and Codex ports with v6.11 2026-07-14 04:57:00 -07:00
Dallin Romney c9edb42529 chore(release): prepare 2026.6.33 2026-07-14 03:29:58 -07:00
Dallin Romney b69a38a5d6 fix(codex): keep approval decision on request connection
(cherry picked from commit d12b201a3f)
2026-07-14 02:42:05 -07:00
Ayaan Zaidi 16eedb8f93 fix(telegram): scope reply-fence abort authority to pre-adoption dispatch
(cherry picked from commit d11d1d0ee6)
2026-07-14 02:39:28 -07:00
Dallin Romney 948bbdf7ca fix(qa): expect Telegram authorization rejection
(cherry picked from commit 606a5b32b1)
2026-07-14 02:38:48 -07:00
Dallin Romney 628c8c832a fix(qa): fence Telegram replies by send time
(cherry picked from commit ec36c3cbbf)
2026-07-14 02:38:39 -07:00
Peter Steinberger d0dacf3ec0 test(telegram): cover sender-less channel post fragments (#106854)
(cherry picked from commit a81bb12fc2)
2026-07-14 02:38:26 -07:00
Dallin Romney a947d594cb fix(telegram): preserve channel post classification
(cherry picked from commit 28e79cf2ea)
2026-07-14 02:38:12 -07:00
Peter Steinberger c9c4072f4c fix(telegram): restore bot-to-bot LTS release probe (#106755)
* docs: clarify Codex worktree invocations

* fix(telegram): deliver peer-bot replies visibly

* fix(telegram): harden deferred cleanup

* fix(ci): align LTS Telegram checks

(cherry picked from commit b68060a7cb)
2026-07-14 02:37:48 -07:00
Markus 0dfcb1f202 fix(outbound): bound message timeout reconciliation
(cherry picked from commit d00ed02f62)
2026-07-14 02:26:59 -07:00
Peter Steinberger faf6c429d2 fix(browser): apply profile proxy policy to tab list redaction (#104715)
* fix(browser): apply profile proxy policy to tab list redaction

* test(browser): cover proxy tab redaction route proof

* test(browser): streamline proxy tab redaction coverage

* fix(browser): scope proxy inference to managed profiles

---------

Co-authored-by: llagy007 <0668001470@xydigit.com>
(cherry picked from commit 5a6d684019)
2026-07-14 02:23:43 -07:00
Peter Steinberger 8d13a35d51 fix(channels): tombstone corrupt ingress rows (#105259)
* fix(infra): guard channel ingress queue parseJson against corrupted JSON

* fix(infra): fix type assertion in ingress queue test

* fix(infra): use tagged parse result and validate payload before claiming

* fix(infra): remove unnecessary non-null assertion in ingress queue test

* fix(infra): scan corrupt ingress rows in claimNext

* test(gateway): avoid typed empty mock call tuple access

* fix(infra): tombstone corrupt ingress rows on duplicate enqueue and stale recovery

Two P1 gaps: enqueue() threw on duplicate when the existing row had corrupt
payload_json, and recoverStaleClaims() silently skipped corrupt claimed rows,
leaving them invisible to recovery. Both paths now tombstone the unrecoverable
row as failed with reason "corrupt_payload" and return a proper result.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(infra): resolve lint shadow and await-thenable in recoverStaleClaims

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(channels): tombstone corrupt ingress rows

* test(channels): use explicit placeholder claim tokens

* refactor(channels): name claim token values

* refactor(channels): keep claim projection direct

* fix(channels): preserve active ingress claims

* fix(channels): make corrupt recovery policy-aware

* refactor(channels): name corrupt claim token

* fix(channels): bound corrupt ingress reconciliation

* fix(channels): paginate pending ingress by key

* refactor(telegram): return live owner check directly

* build(plugin-sdk): refresh public export budget

---------

Co-authored-by: Pick-cat <huang.ting3@xydigit.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
(cherry picked from commit a824078101)
2026-07-14 02:22:12 -07:00
Pavan Kumar Gondhi 366e632cfd fix: protect SMS webhook callback quota [AI] (#103620)
* fix: scope SMS webhook rate limiting after validation

* fix: separate SMS webhook validation throttles

* fix: loosen SMS pre-validation throttle

* docs: clarify SMS webhook quota stages

* fix: preserve signed sms callback capacity

* fix: name sms invalid request limiter

* test: cover sms validation disabled quota

* fix: skip signed limiter without sms validation

* docs: clarify sms webhook request budget

* fix: keep sms disabled validation dispatch cap

(cherry picked from commit ef9383d88a)
2026-07-14 02:19:24 -07:00
xingzhou 47b5c81f92 fix(sms): replayed Twilio webhooks process again after high inbound traffic (#101107)
* fix(sms): replayed Twilio webhooks process again after high inbound traffic

* fix(sms): harden Twilio replay saturation

* test(sms): expose response header spy

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit 8d5f7e27b2)
2026-07-14 02:19:06 -07:00
Peter Steinberger 6e74760a29 fix(codex): defer sandbox cleanup until process close (#103617)
(cherry picked from commit b07a2eecc0)
2026-07-14 02:16:01 -07:00
Peter Steinberger addcb1a5a8 fix(codex): require human approval for app-server commands (#103457)
* fix(codex): require human approval for app-server commands

* docs(exec): clarify Codex approval fallback

(cherry picked from commit a97633a9ad)
2026-07-14 02:15:46 -07:00
Peter Steinberger f31d7a3ba8 fix: harden exec auto-review approvals (#103430)
(cherry picked from commit 9d4fb60e90)
2026-07-14 02:13:41 -07:00
Peter Steinberger 8e03b0c62e fix(browser): keep remote CDP credentials out of responses (#103139)
* fix(browser): contain remote CDP credentials

* fix(browser): probe authenticated discovery before attach

* chore: keep release note in PR metadata

(cherry picked from commit 8b300e57f0)
2026-07-14 02:09:46 -07:00
Dallin Romney 4ab146c4ae fix(openai): complete v6.11 realtime client-secret adaptation
Completes the bounded v6.11 adaptation of 9566aded5c by using the current client_secrets endpoint for transcription and preserving the selected API-key rejection message.
2026-07-14 02:08:24 -07:00
Peter Steinberger fb988756c0 fix(openai): correct Realtime auth and transcription secrets (#102518)
* fix(openai): correct Realtime auth and transcription secrets

* chore: leave release notes to release automation

(cherry picked from commit 9566aded5c)
2026-07-14 02:07:11 -07:00
cxbAsDev 9ac745d71e fix(voice-call): handle tunnel child stream errors and stop-after-exit hang (#101394)
* fix(voice-call): handle tunnel child stream errors and stop-after-exit hang

* fix(voice-call): stop children after stream failures

* style(voice-call): satisfy timer lint

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit 735b7b2f34)
2026-07-14 02:05:22 -07:00
Yuval Dinodia c342750cb9 fix(discord): stop retrying non-idempotent sends on post-connect-ambiguous errors (#103867)
* fix(discord): stop retrying non-idempotent sends on post-connect-ambiguous errors

Discord's outbound retry runner treated every transient transport error as
retryable, including ECONNRESET, ETIMEDOUT, AbortError, and the undici
headers/body/socket timeouts. Those errors can fire after Discord has already
received and created the message but before the client reads the response, so
replaying the non-idempotent createChannelMessage POST delivers the same
message twice while reporting success.

Add a pre-connect-only classifier (isRetryableDiscordPreConnectError) covering
errors that provably never reached Discord (DNS/connect refused/connect
timeout) plus rate-limit rejections, mirroring the Telegram send-path
carve-out. The retry runner now accepts a per-call nonIdempotent option; the
message-create and thread-create call sites opt in so ambiguous post-connect
errors surface to the caller instead of double-sending. Idempotent REST calls
(reactions, edits, DM-channel lookup, uploads) keep the broader transient set.

* fix(discord): retry nonce-enforced message creates

* fix(discord): scope create retries by endpoint

* fix(discord): stabilize sticker and poll create nonce across retries

* fix(discord): tighten create retry safety

* fix(discord): preserve nonce-safe retries

* fix(discord): scope nonce fields to message creates

* test(discord): cover nonce-safe direct sends

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit df883ab81a)
2026-07-14 02:03:56 -07:00
tiffanychum 3307417b00 fix(discord): messages sent during gateway reconnect are silently dropped (#100896)
* fix(discord): drain queued outbound deliveries after gateway reconnect (#56610)

Discord sends that failed while the gateway websocket was reconnecting
(close codes 1005/1006) stayed stuck in the outbound delivery queue and
were silently dropped. Classify sends that fail while the registered
gateway is disconnected as retryable, and drain pending discord queue
entries when the gateway reconnects, matching the WhatsApp/Telegram
reconnect drains.

* fix(discord): harden reconnect recovery

Co-authored-by: tiffanychum <71036662+tiffanychum@users.noreply.github.com>

* refactor(discord): remove unsafe reconnect replay

* fix(discord): bound reconnect retry per request

Co-authored-by: tiffanychum <71036662+tiffanychum@users.noreply.github.com>

* chore(changelog): leave reconnect fix to release flow

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit da0103f025)
2026-07-14 02:03:41 -07:00
Yuya Hirayama a20d9d7e14 Fail closed when Slack mention detection is unavailable (#91584)
* fix(slack): fail closed when mention detection is unavailable

* fix(slack): coordinate app mention retry history

* fix(slack): reject user-token mention identity

* fix(slack): reject user-token mention identity

---------

Co-authored-by: OpenClaw Agent <openclaw-agent@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit fe8234621e)
2026-07-14 02:02:58 -07:00
Peter Steinberger d51a45e839 fix(slack): warn when bot token authenticates as user (#99931)
Co-authored-by: luyifan <al3060388206@gmail.com>
(cherry picked from commit 65e2819136)
2026-07-14 02:02:15 -07:00
cxbAsDev 89250c241b fix(codex): honor timeoutSeconds for dynamic tool calls when timeoutMs is absent (#100722)
* fix(codex): honor timeoutSeconds for dynamic tool calls when timeoutMs is absent

* fix(codex): enforce integer timeoutSeconds and cover side-question path

* chore(proof): extend codex timeoutSeconds proof to side-question path and fractional rejection

* fix(codex): leave headroom when arming watchdog from timeoutSeconds

* fix(codex): preserve dynamic tool timeout budgets

* test(codex): satisfy dynamic tool response types

* test(codex): type structured timeout promise

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit 68487e4c1e)
2026-07-14 01:58:00 -07:00
Vincent Koc 0bf40630ac fix(codex): extend native hook relay timeout
(cherry picked from commit 123ec165bb)
2026-07-14 01:57:26 -07:00
Vincent Koc 9d6b88d0e8 fix(codex): ignore missing mirrored session history (#100484)
* fix(codex): ignore missing mirrored session history

* test(codex): prove missing mirrored history stays quiet

* fix(codex): narrow missing history proof

---------

Co-authored-by: Alex Tang <alextangli@outlook.com>
(cherry picked from commit 17ba497424)
2026-07-14 01:57:26 -07:00
alkor2000 bc3c12f488 fix(codex): derive terminal-idle watchdog from explicit run timeout (#85296)
* fix(codex): derive terminal-idle watchdog from effective run timeout

Fixes the early-abort half of #85242. The Codex app-server terminal-idle
watchdog used a hardcoded 30-minute default that was not derived from the
effective run timeout, so a scheduled turn configured with a longer
timeoutSeconds could be aborted early at 30 minutes even with budget left.

resolveCodexTurnTerminalIdleTimeoutMs (now in attempt-timeouts.ts after the
upstream split) accepts the effective run timeout and, with no explicit
override, follows the run budget instead of the 30-minute default:
- explicit override always wins (advanced config / tests)
- otherwise terminal-idle = max(30min floor, run budget), so a longer run is
  no longer cut short and existing protection is never shortened
- falls back to the 30min default when no run budget is known

Reuses the existing resolvePositiveIntegerTimeoutMs helper, matching the
neighbouring post-tool resolver. Adds focused unit tests for the derivation.

The diagnostic-wording half of #85242 (naming the terminal-idle watchdog in
the surfaced guidance) is left as a separate follow-up.

* fix(codex): derive terminal-idle watchdog from effective run timeout

* fix(codex): preserve default terminal idle watchdog

---------

Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
(cherry picked from commit 4076ba0bd9)
2026-07-14 01:57:26 -07:00
NIO cf6f4c9537 fix(telegram): bound Bot API response reads to prevent OOM (#97271)
* fix(telegram): bound Bot API response reads to prevent OOM

* fix(scripts): make proof-telegram-bound.mjs lint-clean

---------

Co-authored-by: NIO <nocodet@mail.com>
(cherry picked from commit a07d59e014)
2026-07-14 01:55:13 -07:00
Pavan Kumar Gondhi b8e998fa5c fix(line): keep group allowlists scoped (#106056)
Prevent LINE group allowlist policy from inheriting DM allowFrom entries, so open DMs do not broaden group access. Keep group-specific allowlists and per-group overrides as the only group admission sources, and document the scoped behavior.

Co-authored-by: pgondhi987 <pgondhi987@users.noreply.github.com>
(cherry picked from commit ffff72c43a)
2026-07-14 01:54:47 -07:00
NIO 160750f527 fix(googlechat): bound webhook cert fetch during token verification (#102924)
* fix(googlechat): bound webhook cert fetch during token verification

* refactor(googlechat): consolidate cert timeout proof

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit ce990a3ad9)
2026-07-14 01:54:28 -07:00
Pavan Kumar Gondhi abd8178e37 fix: isolate Synology webhook preauth throttling [AI] (#103619)
* fix: scope Synology preauth throttling by client ip

* fix: clarify Synology preauth limiter comments

(cherry picked from commit 5f709cfd87)
2026-07-14 01:54:28 -07:00
Alix-007 2968bcd576 fix(twilio): redact webhook turnToken diagnostics (#102089)
* fix(twilio): redact webhook turnToken diagnostics

* chore(twilio): rerun ci

* fix(twilio): contain webhook URL diagnostics

Co-authored-by: Alix-007 <li.long15@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit b37476ab0b)
2026-07-14 01:52:58 -07:00
NIO e2498b8e00 fix(googlechat): cap approval binding registries (#101744)
Co-authored-by: NIO <nocodet@mail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
(cherry picked from commit 32dee52329)
2026-07-14 01:52:34 -07:00
xingzhou 562748887e fix(discord): prevent stale gateway error listeners after restart (#101617)
* fix(discord): remove gateway error listener on dispose

* fix(discord): preserve late gateway error guard

* fix(discord): retain late gateway diagnostics

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit 1017ea5bc8)
2026-07-14 01:52:34 -07:00
wangmiao0668000666 f9fffe241b fix(nostr): clear per-relay publish timeout timer to prevent dangling handles (#98720)
(cherry picked from commit a7a444e7ef)
2026-07-14 01:52:18 -07:00
Leonidas Lux dadc1c3faa fix(whatsapp): restore malformed credentials from backup (#99070)
* fix(whatsapp): wrap JSON.parse with try-catch in auth store and test helpers

Add defensive try-catch around JSON.parse calls in WhatsApp extension
to prevent crashes from corrupted state files.

- restoreCredsFromBackupIfNeeded: wrap creds.json/backup validation
  JSON.parse with try-catch; corrupted creds.json now properly falls
  through to backup restoration instead of skipping it entirely
- updateLastRouteMock: wrap JSON.parse with try-catch, initialize
  empty store on corrupted file

* test(whatsapp): add regression test for malformed creds.json longer than one byte

- Add a focused regression test for the exact case ClawSweeper
  flagged: readWebCredsJsonRawSync returns non-null content for
  files with stat.size > 1, so malformed JSON like "{x" (2 bytes)
  reaches JSON.parse — the inner try-catch now catches the parse
  failure and falls through to backup restoration
- Without this patch, JSON.parse("{x") throws to the outer catch
  and restoreCredsFromBackupIfNeeded returns false, skipping backup

🦞 diamond lobster: L2 evidence (real function call + real filesystem objects)

Ref. https://github.com/openclaw/openclaw/pull/99070

* fix(whatsapp): restore malformed creds from backup

Co-authored-by: LeonidasLux <LeonidasLux@users.noreply.github.com>

* docs(changelog): defer credential recovery entry to aggregate

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: LeonidasLux <LeonidasLux@users.noreply.github.com>
(cherry picked from commit 42464de58d)
2026-07-14 01:52:18 -07:00
Peter Lee 1a621a17b6 fix(whatsapp): thread authDir through command authorization and owner bypass for LID JID resolution (#93379)
* fix(whatsapp): thread authDir through command authorization and owner bypass for LID JID resolution

WhatsApp group commands (/new, /stop) can be ignored when Baileys reports the sender as a LID JID (@lid) instead of a phone JID (@s.whatsapp.net). The resolveWhatsAppCommandAuthorized() and isOwnerSender() functions called getSelfIdentity/getSenderIdentity without passing authDir, so the LID-to-phone reverse mapping could not happen.

Fix: thread account.authDir through both command authorization and group owner-bypass identity resolution paths so that LID JIDs are properly resolved to phone E.164 identities before owner/allowlist checks.

* fix(whatsapp): replace deprecated top-level fields with admission overrides in LID JID test

(cherry picked from commit 85f7834852)
2026-07-14 01:52:18 -07:00
Agustin Rivera edf8b9037d fix(voicecall): redact read-scoped status payloads (#97870)
* fix(voicecall): redact read-scoped status payloads

* fix(voicecall): make status assertion lint-safe

(cherry picked from commit 825aafac57)
2026-07-14 01:52:17 -07:00
Yuval Dinodia 4dc6dc7b6c fix(google-meet): fall back to manual OAuth paste when callback port is occupied (#96492)
The Google Meet OAuth login binds a fixed localhost:8085 callback listener
and let listener failures propagate, so meet auth login aborted entirely when
port 8085 was already in use. The sibling Gemini CLI OAuth path already
recovers by switching to the manual copy/paste flow on EADDRINUSE/listen
errors; bring Google Meet to parity by catching listener errors and reusing
the existing manual-paste handler instead of failing the login.

(cherry picked from commit 38ab207591)
2026-07-14 01:52:17 -07:00
frank-beans cc05b93c39 Preserve provider settings during onboarding updates (#100107)
* Preserve provider settings during onboarding updates

* fix(onboarding): clear omitted request auth

* fix(onboarding): retain canonical provider keys

* fix(onboarding): canonicalize provider updates

* fix(minimax): preserve models across provider aliases

* fix(minimax): preserve secret references during onboarding

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit 664464c750)
2026-07-14 01:52:05 -07:00
zw-xysk 3b9caa7d49 fix(feishu): keep top-level appSecret SecretRef active for the implicit default account (#96965)
When a Feishu channel has top-level appId/appSecret using SecretRef
format and sub-accounts with their own inline appSecret, the secrets
resolver marks the top-level SecretRef as inactive because
isBaseFieldActiveForChannelSurface only checks whether any explicit
account inherits the field.

Feishu account listing always creates an implicit default account from
top-level credentials.  The fix detects this implicit default account
and keeps the top-level appSecret active accordingly, without changing
the shared channel secret helper semantics for other channels.

Fixes #96929

Signed-off-by: 赵旺0668001248 <0668001248@duomai.com>
(cherry picked from commit 4e7992cc9b)
2026-07-14 01:52:05 -07:00
Wynne668 02b0020d37 fix(mattermost): strip internal tool-trace banners from outbound text (#98693)
* fix(mattermost): strip internal tool-trace banners from outbound text

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(mattermost): prove outbound sanitizer send path

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
(cherry picked from commit 1ef4544871)
2026-07-14 01:52:05 -07:00
Wynne668 34686282d6 fix(sms): strip internal tool traces from replies
(cherry picked from commit 06b841fa58)
2026-07-14 01:52:05 -07:00
Masato Hoshino 6dc6789e75 fix(slack): sanitize internal tool-trace lines from outbound text (#97367)
Wrap the slack outbound sanitizeText hook with sanitizeAssistantVisibleText so assistant internal tool-trace scaffolding is stripped before delivery, matching the sibling channel fixes under #90684 (Telegram #95774, Google Chat #95084, IRC #97214).

(cherry picked from commit cd6d0f9b00)
2026-07-14 01:52:05 -07:00
Masato Hoshino ba74027ca5 fix(matrix): sanitize internal tool-trace lines from outbound text (#97372)
Wrap the matrix outbound sanitizeText hook with sanitizeAssistantVisibleText so assistant internal tool-trace scaffolding is stripped before delivery, matching the sibling channel fixes under #90684 (Telegram #95774, Google Chat #95084, IRC #97214).

(cherry picked from commit 25490d4c42)
2026-07-14 01:52:04 -07:00
Masato Hoshino 1245f8af67 fix(irc): sanitize internal tool-trace lines from outbound text (#97214)
* fix(irc): sanitize internal tool-trace lines from outbound text

* fix(irc): sanitize internal tool-trace lines from outbound text

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
(cherry picked from commit ddedf13190)
2026-07-14 01:52:04 -07:00
wangmiao0668000666 6283802dbf fix(chutes-oauth-plugin): bound plugin JSON response reads
(cherry picked from commit 5723222bbb)
2026-07-14 01:51:57 -07:00
Peter Steinberger c077b89dd8 fix(agent-core): ignore truncated tool calls (#97140)
* fix(agent-core): ignore truncated tool calls

Co-authored-by: Galin Iliev <5711535+galiniliev@users.noreply.github.com>

* fix(agent-core): require explicit tool-call terminals

---------

Co-authored-by: Galin Iliev <5711535+galiniliev@users.noreply.github.com>
(cherry picked from commit 56259606d1)
2026-07-14 01:51:37 -07:00