Commit Graph

73894 Commits

Author SHA1 Message Date
WhatsSkiLL e5cee36b46 fix(memory): retry failed queued session targets (#115923)
* fix(memory): retain failed queued sync targets

* fix(memory): drain retained targets on idle sync

* test(memory): prove idle queued sync recovery

* fix(memory): preserve queued sync ownership

* fix(memory): avoid queued sync self-deadlock

* fix(memory): stop queued recovery during close

* fix(memory): clear retained sync state on close

* test(memory): prove live queued rejection transition

* fix(memory): enforce sync repro invariants

* test(memory): bound archive recovery proof

* test(memory): seed archive proof transcript

* test(memory): exercise archived transcript recovery

* chore(knip): register memory sync repro

* fix(memory): reject blank queries before settings

* style(memory): satisfy queue recovery lint

* test(memory): align doctor migration expectations

* test(memory): insert explicit provenance fixture

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-30 02:47:59 -07:00
Dallin Romney 4edc0e9d9e fix(ci): pass target SHA to Telegram evidence finalizer (#116331) 2026-07-30 17:31:45 +08:00
Vincent Koc ea894bba8a fix(test): preserve failed shard diagnostics (#116289) 2026-07-30 17:17:17 +08:00
WhatsSkiLL c63fdc631f fix(sessions): release closed SQLite entry caches (#115794)
* fix(sessions): release closed sqlite entry caches

* chore(ci): register sqlite cache lifetime proof

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-07-30 02:06:44 -07:00
Dallin Romney 714a46d7f2 fix(qa): align live scenario selection (#115767) 2026-07-30 16:59:01 +08:00
Ayaan Zaidi 21d3533460 fix(channels): ack mentions in groups that do not require them
The group-mentions ack gate returned false whenever a group did not require mentions, conflating group policy with whether this message mentioned the agent. Under the default scope, mentioning the agent in a group configured to answer everything produced no ack at all, so the user had no signal the turn was picked up until the reply arrived.

Behavior change on a default path: those groups now show the 👀 ack (and the lifecycle status reactions when messages.statusReactions.enabled is true) on mentions. Mention-required groups, group-all, unmentioned messages, and off/none are unchanged. The gate no longer reads requireMention, so the parameter is gone from the shared type and all channel call sites.

Proven live on Telegram across three configurations, including a no-mention control confirming group-mentions did not become group-all.
2026-07-30 17:58:46 +09:00
Dallin Romney 2e26244cec fix(ci): support legacy Telegram release candidates (#116305)
* fix(ci): support legacy Telegram release candidates

* fix(ci): bound Telegram legacy evidence exception
2026-07-30 16:52:31 +08:00
Dallin Romney b765ada174 fix: stop WhatsApp restart loop after remote logout (#114445) 2026-07-30 16:48:32 +08:00
Dallin Romney 184069f3df fix(qa): make Slack observer lazy and abortable (#116312) 2026-07-30 16:46:49 +08:00
Vincent Koc 91dca69dae fix(qqbot): use Gateway timezone for reminders (#116294) 2026-07-30 16:32:18 +08:00
Vincent Koc 835dafb5a8 test(openai): cover out-of-order named mark acks 2026-07-30 16:29:29 +08:00
Vincent Koc c240b2714d docs(openai): clarify cumulative playback marks 2026-07-30 16:29:29 +08:00
Vincent Koc ba9e352e95 test(openai): cover sustained unnamed mark acknowledgements 2026-07-30 16:29:29 +08:00
Vincent Koc 750dc99903 fix(openai): preserve playback acknowledgement order 2026-07-30 16:29:29 +08:00
Vincent Koc 0ae46459d8 test(openai): verify bounded playback acknowledgements 2026-07-30 16:29:29 +08:00
Vincent Koc 567d04076a fix(openai): bound realtime playback marks 2026-07-30 16:29:29 +08:00
Vincent Koc ec53d0eaae test(agents): mock incremental registry persistence (#116307) 2026-07-30 16:27:31 +08:00
Yuval Dinodia d952566385 fix(memory-core): MEMORY.md compaction deletes user notes written under a promotion-style heading (#116180)
* fix(memory-core): stop MEMORY.md compaction from deleting marker-free user sections

Budget compaction decided that a MEMORY.md section belonged to OpenClaw purely
from its heading text, so a user-authored section under a heading that looks
generated, such as "## Promoted From Short-Term Memory (2026-04-10)", was
eligible for deletion once the file plus the new promotion exceeded
memoryFileMaxChars. The rewrite succeeded silently and the atomic replace made
the loss durable.

A matching heading is now provisional: the block is classified as a promotion
only when it structurally contains at least one
"<!-- openclaw-memory-promotion:... -->" marker, which buildPromotionSection
emits for every promoted candidate. Marker-free sections are preserved.
Generated sections, including the multi-project shape whose markers sit under
"### Global" and "### Project:" subsections, are still dropped oldest-first, so
the size bound from #73691 is unchanged.

Extends #116057, which made only subsection handling marker-aware and left the
top-level heading classifier trusting presentation text.

* fix(memory-core): preserve mixed promotion blocks

Validate the complete marker-and-entry grammar before treating a promotion-shaped block as writer-owned. Preserve marker-only and mixed blocks so unheaded operator notes cannot be deleted during budget compaction.

Co-authored-by: yetval <yetvald@gmail.com>

* test(memory-core): allow cold citation startup

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 16:24:32 +08:00
Huang Wanjia ef5be76394 feat(reply): annotate recent history images (#100866)
* feat(reply): annotate recent history images

* fix(reply): describe bounded history image positions

---------

Co-authored-by: martin <huangtongxuedev@outlook.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 16:24:09 +08:00
joshavant cc570a7453 chore(ios): refresh native i18n inventory 2026-07-30 03:04:42 -05:00
joshavant 28f73d93c1 fix(ios): isolate capability router handlers 2026-07-30 03:04:42 -05:00
joshavant e6f7a400e2 docs(ios): cut 2026.7.22 release notes 2026-07-30 03:04:42 -05:00
joshavant 1237c0cf81 docs(hooks): document validation responses 2026-07-30 02:59:06 -05:00
joshavant a56f7a2b98 test(qa): assert hook account rejection reasons 2026-07-30 02:59:06 -05:00
joshavant 54a6dba0d3 fix(gateway): validate hook delivery accounts 2026-07-30 02:59:06 -05:00
Jason (Json) a67ad03eea perf(gateway): bound prepared runtime startup work (#116261) 2026-07-30 01:41:35 -06:00
Vincent Koc d30d22d33c fix(agents): prevent registry stalls during large fan-outs (#116286)
* fix(agents): persist subagent registry mutations incrementally

* chore(agents): leave release notes to release process
2026-07-30 15:40:54 +08:00
Peter Steinberger d5f8be355d fix(sqlite): preserve replaced snapshot targets on Windows (#116284) 2026-07-30 00:40:20 -07:00
Dallin Romney c8f0db2c24 fix(ci): load frozen shard runner without repository fetch (#116273)
* fix(ci): load frozen shard runner without repository fetch

* test(ci): preserve workflow expression delimiters

* fix(ci): use non-cone frozen runner checkout
2026-07-30 15:37:44 +08:00
Ayaan Zaidi 7c47e4ad0e fix(channels): collapse cumulative commentary snapshots onto one progress-draft line
Providers stream commentary as cumulative snapshots, and the draft line id was derived from the commentary text, so each snapshot minted a new id and stacked another line instead of replacing the open one. Id-less commentary now remembers its open line and reuses that id when the next snapshot continues it; a snapshot sanitized to nothing no longer clears the line, since only an explicit item id retracts.

Also fixes activation: the commentary gate guessed "partial" when streaming.mode was unset, which made progress.commentary a silent no-op on channels whose own default is progress (Telegram, Discord). It now takes the caller's resolved mode, matching resolveChannelStreamingPreviewToolProgress. Proven live on Telegram: three overlapping commentary lines collapse to one.
2026-07-30 16:36:16 +09:00
Ayaan Zaidi 4bd56b8ad8 test(e2e): tag the mock Responses preamble with its wire phase
The mock streamed pre-tool assistant text on the Responses path without `phase: "commentary"`, the field the API sets and the transport reads, so the draft-proof scenario ran green while never exercising the preamble lane on that transport. Proven live on Telegram: the preamble now renders as the status headline, and as a commentary line when progress.commentary is on.
2026-07-30 16:34:38 +09:00
Peter Steinberger 2c436594de fix: clean npm preflight cache restore targets (#116276) 2026-07-30 00:33:55 -07:00
joshavant 32a61cabf0 fix(matrix): observe automatic reply settlement 2026-07-30 02:31:15 -05:00
Vincent Koc 1daea4c898 fix(macos): preserve replacement notification overlays (#116226) 2026-07-30 15:27:40 +08:00
Vincent Koc ad1dc60259 fix(openai): scope realtime readiness state 2026-07-30 15:22:02 +08:00
Vincent Koc 21463e6e19 test(openai): verify terminal audio cleanup 2026-07-30 15:22:02 +08:00
Vincent Koc 3133abed32 fix(openai): bound pre-ready realtime audio 2026-07-30 15:22:02 +08:00
openclaw-mantis[bot] 81d165c612 chore(i18n): refresh native locales (#116213)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-30 15:17:38 +08:00
Peter Steinberger 3e67671d92 fix(e2e): apply default service identity per flow (#116265) 2026-07-30 00:00:14 -07:00
joshavant e4e7f37d24 chore(android): record 2026.7.4 Play metadata 2026-07-30 01:49:07 -05:00
Dallin Romney 6e60f48bad fix(ci): accept one verified Telegram SUT launch (#116267) 2026-07-30 14:42:46 +08:00
joshavant eb263c5104 chore(android): prepare 2026.7.4 Play release 2026-07-30 01:19:40 -05:00
Peter Steinberger 62cbbcc800 fix(e2e): align service account state (#116254) 2026-07-29 23:00:16 -07:00
Dallin Romney 7df05d5fc0 refactor(qa): remove live-channel scenario registries and wrappers (#115752)
* refactor(qa): remove duplicate channel scenario registries

* refactor(qa): route live scenarios through shared runners

* fix(qa): isolate WhatsApp driver retries

* refactor(qa): add module export flow arguments

* test(qa): include scenario metadata in matrix fixture
2026-07-30 13:56:34 +08:00
Dallin Romney 47a21192fd fix(ci): let trusted Telegram QA stage runtime (#116252) 2026-07-30 13:45:01 +08:00
Peter Steinberger ea42a4612a fix(plugins): plugin install survives pnpm-only overrides (#116245)
* fix(plugins): preserve compatible npm overrides on retry

* fix(plugins): keep npm compatibility type internal

* fix(plugins): bound managed override retries
2026-07-29 22:43:34 -07:00
Peter Steinberger 353c05d547 test(qa): recognize internal image completions (#116234) 2026-07-29 22:09:45 -07:00
Vincent Koc 814d1fdf1a fix(test): review Codex runtime scan chunks (#116212)
* fix(test): review Codex runtime scan chunks

* fix(test): count reviewed scan findings
2026-07-30 13:02:57 +08:00
Miorbnli 5e1e70e423 fix(systemd): clear start-limit latch before gateway start (#116178)
* fix(systemd): clear start-limit latch before gateway start

systemd latches a unit into failed/start-limit-hit after a crash loop,
then refuses systemctl start until reset-failed clears the latch. The
reset-failed step only ran for the restart action, so the natural
recovery command `openclaw gateway start` failed on a crash-looped
gateway while `openclaw gateway restart` recovered it.

Run reset-failed before both start and restart (stop is unchanged),
mirroring launchd's startLaunchAgent which calls launchctl enable before
kickstart. reset-failed is idempotent and a no-op on a healthy unit.

* test(systemd): cover start-limit latch clearing on system-scope start

Mirrors the existing system-scope restart test: when startSystemdService
targets a system unit as root, it must emit reset-failed before start so
a crash-looped gateway recovers via `openclaw gateway start` too.

* test(systemd): assert healthy start tolerates reset-failed no-op

reset-failed is idempotent on a non-failed unit (systemd returns success
without changing unit state), so prepending it to start cannot regress a
healthy gateway. Covers the merge-risk concern that every start now
depends on an extra reset-failed call.

* test(systemd): cover reset failure and stop controls

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 12:47:56 +08:00
Vincent Koc 2899323fe3 fix(security): expose every executable call in plugin scans (#116222)
* fix(security): report every scanner line match

* fix(security): bound scanner match evidence
2026-07-30 12:45:25 +08:00