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