Commit Graph

18038 Commits

Author SHA1 Message Date
Peter Steinberger
ad3e36ef33 fix(feishu): unify outbound delivery lifecycle (#117223)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 23:16:04 -07:00
Yuval Dinodia
2364078063 fix(clickclack): thread replies stop being answered past the 100-reply thread window (#117225)
* fix(clickclack): answer thread replies past the server thread-reply window

Thread replies stopped being answered once a ClickClack thread passed 100
replies, with no reply, no transcript entry, no gateway warning, and no
replay after reconnect.

The gateway resolved a thread.reply_created event by fetching the whole
thread and searching its reply list. The ClickClack thread endpoint caps
that response at 100 earliest replies by default, so reply 101 was absent,
the lookup returned null, and the event was treated as handled while the
websocket cursor advanced past it. A DM thread reply was worse: it hit the
DM branch first, and thread replies never appear in the root DM timeline
that branch pages, so every DM thread reply was dropped.

Resolve the event's own message_id through the authoritative single-message
endpoint the plugin already uses, which collapses the three window
heuristics into one canonical path. Transient failures still propagate so
reconnect replays them; only a 404 resolves to unreadable, and that now
records an operator warning instead of counting as a handled event.

* test(clickclack): harden reply recovery proof

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 14:10:47 +08:00
Vincent Koc
6922ddd936 fix(qa): isolate runner discovery facades (#117203) 2026-08-01 13:40:11 +08:00
Dallin Romney
bcff3a0de3 fix(qa): bind Codex auth fixture to runtime version (#116859)
* fix(qa): update Codex auth fixture protocol version

* test(qa): bind Codex auth fixture to runtime version

* test(qa): load Codex fixture version through public surface
2026-08-01 13:36:31 +08:00
Dallin Romney
947886e764 fix(qa): align release harness contracts (#116812) 2026-08-01 13:24:10 +08:00
Dallin Romney
8b1a9ccaa4 fix(voice-call): preserve tool invocation context (#116856)
* fix(voice-call): preserve tool invocation context

* fix(voice-call): trust requester tool context

* style(voice-call): format invocation context test
2026-08-01 13:23:24 +08:00
Dallin Romney
2261a9c5b4 test(qa): align fanout catalog with public evidence (#117202) 2026-08-01 13:07:18 +08:00
Dallin Romney
40f0847fc3 fix(qa): isolate Slack MPIM dedupe proof (#116843) 2026-08-01 12:56:10 +08:00
Dallin Romney
f58570cb8c fix(qa): stabilize Slack progress and table proofs (#116847)
* fix(qa): stabilize Slack progress and table proofs

* fix(qa): type Slack invalid-blocks instrumentation
2026-08-01 12:55:39 +08:00
Dallin Romney
bf32414a4a fix(qa): keep memory context proof on the QA channel (#116849)
* fix(qa): correct memory and Codex watchdog contracts

* test(qa): keep channel assertion in channel catalog
2026-08-01 12:53:00 +08:00
Vincent Koc
1b3572d08b Merge pull request #117201 from openclaw/fix/voice-call-provider-state-cleanup
fix(voice-call): release terminal provider state
2026-08-01 12:36:02 +08:00
Peter Steinberger
121a862105 fix(whatsapp): preserve accepted delivery across failures (#117198)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 21:31:06 -07:00
Peter Steinberger
cb16d739cf fix(inference): harden Codex streaming, cancellation, and live QA (#116012)
* fix(inference): harden Codex turns, streams, and live QA

* fix(inference): dispatch open CR-delimited response frames

* fix(inference): finish live goal and split streaming regressions

* fix(codex): wait for interrupted turn completion

* fix(codex): narrow terminal collector notification ownership

* fix(inference): harden completion authority and lifecycle

* fix(inference): use canonical source delivery contract

* test(inference): align lifecycle probes with current main

* style(inference): format source delivery verification

* fix(goals): prevent premature completion across staged work

* fix(qa): settle streamed goal turns before continuation

* fix(goals): require visible replies after goal completion

* test(qa): keep goal flow regressions within lint limits
2026-07-31 21:29:33 -07:00
xingzhou
8f8b23ff2c fix(voice-call): reject malformed UTF-8 provider JSON (#114267) 2026-07-31 21:13:42 -07:00
Peter Steinberger
ba81a26db6 fix(imessage): preserve attachment filenames and bound recovery clocks (#117197)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 21:12:24 -07:00
Alix-007
94ba7cc392 fix(nextcloud-talk): validate non-interactive base URLs (#111054) 2026-07-31 21:08:51 -07:00
Vincent Koc
6c886107c3 merge(main): refresh voice call provider state cleanup
* commit '441d6ab254df14fb6939a8a261f474904ff9c500': (388 commits)
  fix(qqbot): ignore blank app id fallbacks (#109460)
  fix(feishu): consume implicit reply targets across media delivery (#117196)
  fix(exec): preserve approved command output when sessions resume (#117177)
  fix(qa): use public subagent fanout evidence (#116832)
  fix(googlechat): cancel unread auth response bodies before release (#115873)
  fix(queue): prevent cron saturation from starving hook dispatch (#116666)
  fix(gateway): sessions.steer retry no longer interrupts an active run when replaying a cached idempotency key (#116969)
  fix(irc): config validation rejects documented channels.irc.configWrites key (#112392)
  fix(mistral): keep terminal error branch lint-clean
  fix(onboard): stop a full reset from resetting the default workspace when the config is unreadable (#114110)
  refactor(i18n): remove unused Apple contradiction report (#117182)
  fix(google): stop scraping Gemini CLI OAuth credentials (#117167)
  perf: count large histories before Gateway prewarm (#117118)
  fix(signal): restore provider-safe original attachment filenames (#115107)
  refactor(channels): unify setup ownership across bundled channels (#117188)
  fix: allow gateway service commands for named profiles (#116314)
  fix(plugins): invalidate bundled artifact locations after metadata refresh (#117041)
  fix(ollama): honor model requests and pull completion contracts (#117171)
  fix(agents): prevent fallback after stale lifecycle abort (#117168)
  fix(telegram): confirm polling before long poll (#116970)
  ...
2026-08-01 12:03:58 +08:00
RileyJJY
441d6ab254 fix(qqbot): ignore blank app id fallbacks (#109460) 2026-07-31 21:01:56 -07:00
Peter Steinberger
b521ce626b fix(feishu): consume implicit reply targets across media delivery (#117196)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 21:01:45 -07:00
Vincent Koc
e73ff43db6 Merge pull request #117190 from openclaw/fix/mistral-realtime-transcript-bound-v2
* commit '834af948f4d9086b8c0d9a950150544d487dfe3c':
  fix(mistral): keep terminal error branch lint-clean
  fix(mistral): make realtime errors terminal
  test(mistral): cover realtime transcript overflow
  fix(mistral): bound realtime transcript accumulation
2026-08-01 11:58:52 +08:00
Yiğit ERDOĞAN
9dfbf6a8a0 fix(googlechat): cancel unread auth response bodies before release (#115873)
The size guard in readGoogleAuthResponseBytes inspects content-length and
throws before it reaches response.body.getReader(), so an oversized auth
response leaves the stream untouched and the finally block releases the
dispatcher without cancelling it.

This is the same shape #111290 just fixed in api.ts, applied to the auth
transport's own guard site.
2026-07-31 20:54:06 -07:00
Ayaan Gazali
d2c9e74702 fix(irc): config validation rejects documented channels.irc.configWrites key (#112392) 2026-07-31 20:46:10 -07:00
Vincent Koc
834af948f4 fix(mistral): keep terminal error branch lint-clean 2026-08-01 11:45:06 +08:00
Vincent Koc
fcc20d14a3 fix(google): stop scraping Gemini CLI OAuth credentials (#117167)
* fix(google): delegate Gemini OAuth refresh to the CLI

* refactor(google): remove retired Gemini OAuth stack

* chore(ci): prune retired Google OAuth baseline

* fix(google): retire Gemini CLI usage telemetry

* fix(google): remove retired usage token parser
2026-08-01 11:36:24 +08:00
Vincent Koc
f581cf7f53 merge(main): refresh Mistral realtime transcript bound
* commit '6938f7dddb63bad59862c014c427d63f0a41a6f4': (368 commits)
  fix: allow gateway service commands for named profiles (#116314)
  fix(plugins): invalidate bundled artifact locations after metadata refresh (#117041)
  fix(ollama): honor model requests and pull completion contracts (#117171)
  fix(agents): prevent fallback after stale lifecycle abort (#117168)
  fix(telegram): confirm polling before long poll (#116970)
  fix(tlon): wire autoDiscoverChannels through the settings-store round-trip (#114949)
  fix(gateway): yield before post-ready background work (#117083)
  fix(ui): keep canvas lease renewals lifecycle-owned and timer-safe (#117173)
  fix(teams): restore the official square product icon (#117170)
  refactor(ui): replace duplicated locale bundles with canonical translation memory (#117157)
  fix(ui): retire stale Gateway event-log observers (#117169)
  fix(agents): keep subagent status consistent after restart and large fan-outs (#117141)
  refactor(ui): unify filtered session list ownership (#117158)
  refactor(agents): consolidate context budgets and compaction recovery (#117149)
  fix(net-policy): redact sig and x-* auth params in URLs and bodies (#116957)
  refactor(agents): remove duplicate generated-media delivery fallbacks (#117150)
  refactor(reply): unify turn lifecycle state ownership (#117145)
  fix(ui): preserve emoji agent avatar initials (#104912)
  refactor(auto-reply): unify command and directive ownership (#117143)
  refactor(plugins): consolidate descriptor and startup ownership (#117146)
  ...
2026-08-01 11:35:42 +08:00
Peter Steinberger
982add9618 fix(signal): restore provider-safe original attachment filenames (#115107)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>
2026-07-31 20:34:34 -07:00
Peter Steinberger
654744da17 refactor(channels): unify setup ownership across bundled channels (#117188) 2026-07-31 20:33:20 -07:00
Vincent Koc
065d39067e Merge pull request #117179 from openclaw/fix/google-live-transcript-bound
fix(google): stop runaway realtime transcript growth
2026-08-01 11:22:39 +08:00
Peter Steinberger
865a7286c8 fix(ollama): honor model requests and pull completion contracts (#117171)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 20:19:57 -07:00
Vincent Koc
5ab24717f1 merge: refresh google live transcript bound onto main
* origin/main:
  fix(telegram): confirm polling before long poll (#116970)
  fix(tlon): wire autoDiscoverChannels through the settings-store round-trip (#114949)
  fix(gateway): yield before post-ready background work (#117083)
  fix(ui): keep canvas lease renewals lifecycle-owned and timer-safe (#117173)
2026-08-01 11:16:28 +08:00
Jason (Json)
a0fe02a6dc fix(telegram): confirm polling before long poll (#116970) 2026-07-31 21:11:00 -06:00
ml12580
02457657f0 fix(tlon): wire autoDiscoverChannels through the settings-store round-trip (#114949)
parseSettingsResponse and applySettingsUpdate read/wrote a dead
`autoDiscover` key, while every consumer (monitor/settings-helpers.ts)
and the settings migration use `autoDiscoverChannels`. As a result the
settings-store hot-reload override for auto-discover-channels never took
effect and the migration re-fired on every restart. Align the field name
and add a regression test covering both the load and subscription paths.

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-31 20:05:16 -07:00
Vincent Koc
a09830c2b7 merge: refresh google live transcript bound onto main
* commit '87e900bb64094b6fa365d47333c30b926ed62ce6':
  fix(teams): restore the official square product icon (#117170)
2026-08-01 10:54:01 +08:00
Peter Steinberger
87e900bb64 fix(teams): restore the official square product icon (#117170)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 19:51:17 -07:00
Vincent Koc
541593dcb4 merge: refresh google live transcript bound onto main
* commit '7e78de747b8a64d52f30aee948b697bf4c528691': (359 commits)
  refactor(ui): replace duplicated locale bundles with canonical translation memory (#117157)
  fix(ui): retire stale Gateway event-log observers (#117169)
  fix(agents): keep subagent status consistent after restart and large fan-outs (#117141)
  refactor(ui): unify filtered session list ownership (#117158)
  refactor(agents): consolidate context budgets and compaction recovery (#117149)
  fix(net-policy): redact sig and x-* auth params in URLs and bodies (#116957)
  refactor(agents): remove duplicate generated-media delivery fallbacks (#117150)
  refactor(reply): unify turn lifecycle state ownership (#117145)
  fix(ui): preserve emoji agent avatar initials (#104912)
  refactor(auto-reply): unify command and directive ownership (#117143)
  refactor(plugins): consolidate descriptor and startup ownership (#117146)
  fix(messages): reply actions leak citation markers and reply/poll answers draw the no-reply fallback (#116909)
  fix(slack): let durable ingress retry transient thread lookups (#117135)
  refactor(doctor): consolidate shipped state migration ownership (#117142)
  fix(ai): Codex stream shows internal parser text on a malformed frame (#116966)
  fix: guard every migrated session accessor path (#117140)
  fix(terminal): measure unicode display width consistently (#117062)
  fix(openai): clear ChatGPT SSE fallback per session (#117123)
  fix(mistral): reject incomplete streamed tool terminals (#117137)
  fix(ai): preserve structured chat content and refusals (#117136)
  ...
2026-08-01 10:45:53 +08:00
Vincent Koc
5ee5113104 merge main into voice-call pacer fix
* commit 'c41f033b87545b658215a9c3bbe03f88fbaa867d': (347 commits)
  refactor(plugins): consolidate descriptor and startup ownership (#117146)
  fix(messages): reply actions leak citation markers and reply/poll answers draw the no-reply fallback (#116909)
  fix(slack): let durable ingress retry transient thread lookups (#117135)
  refactor(doctor): consolidate shipped state migration ownership (#117142)
  fix(ai): Codex stream shows internal parser text on a malformed frame (#116966)
  fix: guard every migrated session accessor path (#117140)
  fix(terminal): measure unicode display width consistently (#117062)
  fix(openai): clear ChatGPT SSE fallback per session (#117123)
  fix(mistral): reject incomplete streamed tool terminals (#117137)
  fix(ai): preserve structured chat content and refusals (#117136)
  fix(doctor): persist normalized agent roster (#117115)
  fix(signal): avoid replay after ambiguous quote delivery errors (#117134)
  fix(cron): reject disabled delivery accounts when scheduling (#116899)
  fix(gateway): honor HTTP If-Modified-Since media validators (#117133)
  fix(config): delete one array element per config patch delete (#116463)
  fix(plugins): report installed dependency health authoritatively (#117029)
  fix(ui): recover moving sessions across paged gateway rosters (#117016)
  fix(ui): clear hidden session selection before bulk deletion (#117015)
  fix(discord): avoid replaying ambiguous voice deliveries (#117127)
  fix(ui): scope Gateway reconnect lineage to its target (#117125)
  ...
2026-08-01 10:04:40 +08:00
Peter Steinberger
a0c98de0af fix(slack): let durable ingress retry transient thread lookups (#117135)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 18:37:37 -07:00
Peter Steinberger
65717fd3be fix(signal): avoid replay after ambiguous quote delivery errors (#117134)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 17:59:10 -07:00
Peter Steinberger
a8dfd37332 fix(discord): avoid replaying ambiguous voice deliveries (#117127)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 17:40:05 -07:00
Peter Steinberger
7dd74db836 fix: preserve completion delivery and truthful agent session state (#117119) 2026-07-31 17:35:14 -07:00
Peter Steinberger
45f274f757 fix(line): avoid replaying ambiguous auto replies (#117126)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 17:32:53 -07:00
Yuval Dinodia
e8d546c8da fix(buzz): reconnect silently skips retained inbound messages (#116925)
* fix(buzz): page reconnect history instead of dropping older messages

On reconnect the Buzz gateway asked the relay for a single capped page of
room history and treated EOSE as a complete recovery. Any backlog larger
than the per-room replay limit was never requested again, so those messages
never reached handleBuzzInbound, the agent, or the session transcript, and
nothing reported the loss.

The room subscription now records how much history its first page returned
and, when that page filled the limit, pages older history through the relay
until it is exhausted. Each page is dispatched through the existing bounded
replay queue and the next page waits for queue capacity, so recovery stays
memory bounded. A room whose backlog cannot be paged past a single
timestamp is now reported instead of dropped silently.

Membership tracking moves to room-membership-tracker.ts because buzz-bus.ts
was already at the 700 line ceiling.

* fix(buzz): hold dispatch capacity while a history page is in flight

Catch-up asked the replay queue whether capacity existed and then issued the
relay query, but nothing held those slots. Live room events arriving while
the query was in flight could consume them, so admitting the page afterwards
could report overflow, which closes the dispatch queue and drops every
queued message before forcing a reconnect. A busy room with slow inbound
handlers could repeat that instead of finishing recovery.

Capacity is now reserved rather than sampled. reserveCapacity resolves with a
reservation that owns its slots until released, page events are admitted
through that reservation, and the reservation is released once the page is
enqueued. Live enqueues keep the full pending limit and are never rejected
earlier because a reservation is outstanding. An overflow reported through a
reservation means the relay exceeded the page it was asked for, so it is
reported as a history error instead of tearing down the session.

* fix(buzz): bound reconnect history pages

* fix(buzz): preserve replay reservations

* test(buzz): cover catch-up settlement paths

* fix(buzz): drain saturated history ranges

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 08:28:03 +08:00
Peter Steinberger
a1b41d5ddb refactor(channels): share Matrix and Slack progress draft composition (#117097) 2026-07-31 17:17:07 -07:00
Vincent Koc
a1c689e375 fix(outbound): preserve fenced tool call examples (#117089) 2026-08-01 08:13:05 +08:00
Vincent Koc
89aadef6ef feat(plugins): externalize iMessage channel (#117101) 2026-08-01 08:01:18 +08:00
Peter Steinberger
9e4381eb1c refactor(channels): unify bundled channel setup contracts (#117106)
* refactor(channels): canonicalize bundled setup contracts

* test(matrix): use scoped environment fixtures
2026-07-31 16:57:29 -07:00
Peter Steinberger
533807ab61 refactor: consolidate secure channel approval reaction bindings (#117105) 2026-07-31 16:51:25 -07:00
Peter Steinberger
b8b4a11b38 refactor(telegram): unify outbound media delivery (#117102) 2026-07-31 16:46:22 -07:00
Peter Steinberger
01cd336a63 refactor(discord): consolidate model picker navigation (#117093) 2026-07-31 16:43:34 -07:00
Peter Steinberger
ea1d6cc35e refactor(memory): unify embedding provider adaptation (#117094) 2026-07-31 16:30:22 -07:00