Commit Graph

33755 Commits

Author SHA1 Message Date
Neerav Makwana ca83f0fd7a fix(outbound): bail live delivery when a concurrent drain wins the claim
If a reconnect/startup drain observes the newly enqueued queue entry and
calls claimRecoveryEntry before the live delivery path reaches
tryClaimActiveDelivery, tryClaimActiveDelivery returns false. Previously
the live path still proceeded to deliverOutboundPayloadsCore and then
ack/fail, which would race the drain's own delivery and ack/fail for the
same entry id and produce duplicate outbound messages.

Treat a failed claim acquisition as "another in-process owner is already
handling this queue entry" and bail out with an empty result array, leaving
the queue entry in place for the drain to deliver and clean up. This closes
the narrow residual race called out by the Aisle security review on
openclaw/openclaw#70428.

Made-with: Cursor
2026-04-23 03:23:38 +01:00
Neerav Makwana c94a8702c7 fix(outbound): hold active-delivery claim so reconnect drain skips live sends
Reconnect drain (drainPendingDeliveries) matches fresh pending entries by
design to preserve crash-replay, but the live delivery path in
deliverOutboundPayloads held no in-memory claim while the send was running.
A reconnect firing mid-send therefore re-drove the same queue entry and
produced duplicate outbound messages (e.g. WhatsApp cron sends going out
7-12x when the 30-minute inbound-silence watchdog fired during delivery).

Claim the queueId against the existing entriesInProgress set right after
enqueueDelivery and release it in the finally branch around ack/fail. Drain
already skips claimed ids via claimRecoveryEntry, so no drain-side change is
needed. The claim is process-local on purpose: a crashed owner leaves no
claim behind, so startup recovery still reclaims orphaned entries.

Fixes #70386.

Made-with: Cursor
2026-04-23 03:23:38 +01:00
Peter Steinberger adda0dcf20 test: cover bundled plugin dependency activation 2026-04-23 03:17:06 +01:00
Peter Steinberger 90696bffff fix: defer bundled plugin runtime deps until enabled 2026-04-23 03:17:06 +01:00
Peter Steinberger 4479d4d437 ci: fold gateway watch into build artifacts 2026-04-23 03:15:56 +01:00
Peter Steinberger 688a6ef4fd ci: keep gateway watch skip-build artifact fresh 2026-04-23 03:11:51 +01:00
Peter Steinberger bae057fd77 fix: accept Codex MCP approval elicitations (#68807) 2026-04-23 03:11:26 +01:00
Peter Steinberger 24f5198caf ci: trust restored gateway watch artifacts 2026-04-23 03:09:40 +01:00
Peter Steinberger 51ed22e608 feat(providers): add streaming stt providers 2026-04-23 03:05:53 +01:00
Peter Steinberger 5b68092351 ci: pass gateway watch artifacts across runners 2026-04-23 03:04:22 +01:00
Peter Steinberger c4242890f4 ci: reuse runtime artifacts for gateway watch 2026-04-23 03:01:08 +01:00
Peter Steinberger 74dfeaae0d fix(qa): preserve image generation plugin allowlist 2026-04-23 02:55:22 +01:00
Peter Steinberger e3e2626583 fix: update generated protocol models 2026-04-23 02:49:50 +01:00
Peter Steinberger c9ea10b184 ci: rotate ci concurrency key 2026-04-23 02:47:42 +01:00
Gustavo Madeira Santana c992a8e5d8 Harden diagnostic stability bundle imports 2026-04-22 21:47:23 -04:00
Peter Steinberger 1489febee9 test: cover docker MCP cleanup for subagents 2026-04-23 02:46:13 +01:00
Peter Steinberger ccf2e77e8d fix: retire one-shot subagent MCP runtimes 2026-04-23 02:46:13 +01:00
Peter Steinberger dcff528805 ci: rebalance extension shards 2026-04-23 02:43:02 +01:00
Peter Steinberger 2e90a2247e fix: harden Slack stream fallback delivery (#70370) (thanks @mvanhorn) 2026-04-23 02:42:48 +01:00
Matt Van Horn e55b932632 fix(slack): fall back to chat.postMessage when stream finalize fails pre-flush
Address adversarial review finding on #70295: the prior swallow-on-benign
fix silently dropped short replies to Slack Connect users. The SDK's
ChatStreamer buffers text locally until buffer_size (256 default), so
short replies never trigger chat.startStream via append(). streamer.stop()
then issues startStream internally; on Slack Connect recipients this
throws user_not_found. With the prior fix that error was swallowed and
the dispatcher marked the turn delivered - user saw 'done' reaction but
no message.

SlackStreamSession now tracks delivered (true once any Slack API call
returned a response) and pendingText (accumulation of every append +
final-stop text). stopSlackStream:
  - swallows the benign code when delivered=true (prior append flushed;
    text is visible; same behavior as before)
  - throws a new SlackStreamNotDeliveredError carrying pendingText when
    delivered=false (nothing reached Slack)

dispatch.ts catches SlackStreamNotDeliveredError and posts pendingText
via a rename-bound chat.postMessage (to dodge the unicorn lint rule),
and flips streamFallbackDelivered so anyReplyDelivered stays correct.

Fixes #70295
2026-04-23 02:42:48 +01:00
Matt Van Horn 676ed34cbd fix(slack): treat Slack Connect finalize errors as benign in stopSlackStream
When Slack's chat.stopStream fails with user_not_found (Slack Connect DM
recipients), team_not_found (cross-workspace shared channels), or
missing_recipient_user_id (DM closed mid-stream), the text already
delivered via append() is still visible to the user. Swallow those
specific codes and mark the session stopped rather than surfacing a
spurious 'slack-stream: failed to stop stream' error in dispatch. Other
Slack API errors still propagate.

Fixes #70295
2026-04-23 02:42:48 +01:00
Peter Steinberger 688fc288af ci: trim duplicate android apk build 2026-04-23 02:38:01 +01:00
Peter Steinberger 5461195035 docs: document session mailbox discovery (#69839) 2026-04-23 02:33:55 +01:00
Peter Steinberger b53bce9f47 fix(agents): filter session previews after visibility 2026-04-23 02:33:55 +01:00
dangoZhang 13882581b6 fix(agents): clean up sessions_list forwarding 2026-04-23 02:33:55 +01:00
dangoZhang 1a4c32e366 feat: expose mailbox session discovery in sessions_list 2026-04-23 02:33:55 +01:00
Peter Steinberger dcc243c889 test: stabilize loopback port release check 2026-04-23 02:25:53 +01:00
Peter Steinberger 4ff720a837 fix(openai): harden realtime stt 2026-04-23 02:22:17 +01:00
Peter Steinberger 26bf916382 fix(gateway): resolve dynamic models during warmup 2026-04-23 02:20:11 +01:00
Peter Steinberger 1cbd5a9470 fix(codex): harden app-server approvals 2026-04-23 02:20:10 +01:00
Peter Steinberger de95e414d1 style: format stale source files 2026-04-23 02:20:10 +01:00
Peter Steinberger 0ada97d513 fix: restore legacy update compat sidecars 2026-04-23 02:19:19 +01:00
Peter Steinberger 0f77fcac31 test: improve xai realtime stt live coverage 2026-04-23 02:06:07 +01:00
Peter Steinberger 6a1d6b7d89 ci: run docker smoke for scope changes 2026-04-23 01:58:58 +01:00
Peter Steinberger b5cc7ea879 ci: expand docker smoke changed scope 2026-04-23 01:57:25 +01:00
Peter Steinberger 71ae0d737a fix: override vulnerable uuid dependency 2026-04-23 01:56:14 +01:00
dulingxiao c4dea58712 fix(moonshot): preserve native Kimi tool_call IDs in openai-completions replay 2026-04-23 01:52:58 +01:00
Peter Steinberger 23a448986f fix(xai): declare websocket runtime dependency 2026-04-23 01:50:00 +01:00
Gustavo Madeira Santana 28818f9140 Improve gateway diagnostics export for support reports (#70324)
Merged via squash.

Prepared head SHA: 3d6ee85993
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-22 20:47:14 -04:00
Peter Steinberger 6b41ef311f fix: isolate external direct-message runtime policy 2026-04-23 01:39:56 +01:00
Peter Steinberger 67f09ea87a feat: add xai realtime transcription 2026-04-23 01:38:11 +01:00
Peter Steinberger d4c171f594 ci: keep extension batch parallelism at two 2026-04-23 01:35:30 +01:00
Peter Steinberger 53f388fa83 docs(plugins): document npm update behavior 2026-04-23 01:29:32 +01:00
Peter Steinberger 67850c4fc8 ci: run extension batches three-wide 2026-04-23 01:29:20 +01:00
Peter Steinberger 87a64a33f1 fix(plugins): clarify installed plugin replacement 2026-04-23 01:25:29 +01:00
Peter Steinberger fa43cbfcba fix: drop invalid Codex app-server service tiers 2026-04-23 01:24:25 +01:00
Peter Steinberger 9f358456db ci: skip duplicate extension fast on main 2026-04-23 01:23:23 +01:00
Peter Steinberger 0946e37523 fix(plugins): skip unchanged npm updates 2026-04-23 01:23:03 +01:00
Peter Steinberger bf132d6fb9 test(qa-matrix): stabilize sync timeout cursor 2026-04-23 01:21:52 +01:00
Peter Steinberger f72c97afca test(qa-matrix): stabilize sync timeout 2026-04-23 01:20:45 +01:00