Commit Graph

72818 Commits

Author SHA1 Message Date
Peter Steinberger
97c19a98e3 fix(ci): keep fork embedded-agent shard alive on cold runners (#115035)
* fix(ci): unstick fork embedded-agent shard

* test(ci): allow cold embedded harness setup
2026-07-28 04:04:38 -04:00
Bharghav Srinivasan
7072ba50e2 fix(gateway): shutdown reports unresolved SecretRef warnings when channel credentials use exec/file refs (#112717)
* fix(gateway): clear secrets runtime snapshot only after channel teardown

Shutdown cleared the secrets runtime snapshot in the close prelude, which
also drops the pinned runtime config. The channels close step then lazily
re-pins the raw config, so stopChannel's resolveAccount hit unresolved
SecretRefs and every shutdown of a gateway with an exec/file SecretRef
credential logged an unresolved-SecretRef WARN and completed with
warnings. The failed resolveAccount also skipped the per-account stop
bookkeeping (graceful wait, task/abort cleanup, stopped-runtime state)
and the plugin stopAccount hook.

Move the scrub into the close handler's finally block so it still always
runs, but only after every step that can read credentials.

Fixes #112681

* chore: drop release-owned changelog entry

---------

Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-07-28 02:01:42 -06:00
Nick
5d4ff17d7d fix: macOS reports CLI-only Tailscale as not installed (#114179)
* fix(macos): detect CLI-only Tailscale

* fix(macos): distinguish Tailscale app and CLI installs

Co-authored-by: Nick <18488428+nickxma@users.noreply.github.com>

* chore(macos): refresh native i18n inventory

* test(pr): provide rg in artifact fixture

* fix(macos): gate Tailscale interface evidence

* chore(pr): drop superseded fixture shim

* chore(macos): realign native i18n inventory

* refactor(macos): keep Tailscale status guidance generic

---------

Co-authored-by: Nick <18488428+nickxma@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 04:00:18 -04:00
Vincent Koc
75531b2fb7 refactor(plugins): remove dead provider test reset (#115043) 2026-07-28 15:54:06 +08:00
Vito Cappello
accc6ccaa2 improve(sqlite): reuse synchronous prepared statements (#114777)
* perf(sqlite): cache synchronous prepared statements

* fix(sqlite): refresh cached statement metadata

* fix(sqlite): bound cached statement retention

* fix(sqlite): close statement cache lifecycle gaps

* test: suppress SQLite warning in retention child

* test(sqlite): make transcript-load counter statement-cache-aware and allowlist raw test SQL

* test(sessions): type the wrapped iterate against its overloaded signature

* test: share a statement-cache-aware SQLite execution counter across prepare-count tests

* fix(pr): validate head SHA with bash regex so fork-CI runners without ripgrep pass the artifacts-init guard

---------

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 03:53:16 -04:00
Peter Steinberger
5a8939d88e refactor(ui): restructure Communications settings (Messages/Talk/Voice) (#114948)
* refactor(ui): communications settings own messages/talk/voice; channels config lives on Channels page

* test(ui): update route subtitle expectations for communications/infrastructure
2026-07-28 03:48:42 -04:00
Vincent Koc
c738887f05 fix(ui): clarify chat startup status labels (#115044) 2026-07-28 15:47:50 +08:00
Peter Steinberger
fe19f8f54b fix(agents): prevent cancelled prompts from spawning zombie runs (#115011) 2026-07-28 03:43:20 -04:00
Peter Steinberger
0d7fb8eb39 refactor(fs): adopt fs-safe 0.5 core primitives (#113705)
* refactor(fs): unify exclusive file publication

* fix(fs): fence stale lock reclamation

* refactor(fs): bound wiki scans and secret reads

* chore(fs): finalize fs-safe 0.5 compatibility

* fix(fs): preserve publication ownership and legacy mode

* fix(fs): fail closed on unverifiable lock owners

* fix(fs): preserve concurrent backup publications

* refactor(fs): preserve ambiguous backup outputs

* fix(fs): preserve mixed-version lock coordination

* refactor(file-transfer): adopt fs-safe archive extraction

* refactor(fs): add bounded walk and secret seams

* refactor(auth): replace proper-lockfile with fs-safe

* fix(fs): honor Windows mode override casing

* refactor(snapshot): adopt fs-safe publication

* refactor(memory-wiki): adopt prunable root walks

* refactor(fleet): adopt bounded archive restore

* fix(fs): preserve post-publication ownership receipts

* refactor(fs): harvest final fs-safe primitives

* style(fs): clean harvest lint

* chore(plugin-sdk): refresh move helper API baseline

* refactor(snapshot): adopt native Windows ACL facts

* refactor(fs): adopt hardened atomic outputs

* fix(fs): scope lock reentrancy to logical owners

* chore(config): lower env var count budget

* fix(deps): adopt published fs-safe 0.5.0

* fix(ci): align SDK surface ratchets

* fix(ci): regenerate SDK API baseline after rebase

* fix(fs): preserve owner-scoped file lock nesting

* fix(ci): refresh SDK API baseline for file locks

* fix(fs): separate SQLite and file lock reentrancy

* fix(imessage): bound pinned attachment reads

* fix(agents): narrow session-key lock options

* fix(fs): preserve fs-safe 0.5 compatibility contracts

* fix(windows): retain private SQLite directory owner

* refactor(sqlite): centralize exclusive coordinator

* refactor(snapshot): isolate Windows ACL policy

* fix(windows): retain snapshot ACL inspector

* chore(config): realign env budget after rebase

* test(agents): accept canonical sandbox escape error

* docs(changelog): defer fs-safe release note
2026-07-28 03:41:47 -04:00
Peter Steinberger
78d6c6c047 fix(slack): bound read-only Web API calls (#115018)
Co-authored-by: zw-xysk <zhao.wang1@xydigit.com>
2026-07-28 03:37:54 -04:00
Peter Steinberger
6b255f1f74 improve(gateway): reduce plugin startup memory (#115020)
* perf(gateway): reduce plugin startup memory

* test(plugins): cover effective alias order caching
2026-07-28 03:33:03 -04:00
Peter Steinberger
0216fbd4e4 fix(providers): prevent idle timeouts during hidden reasoning (#114997) 2026-07-28 03:30:43 -04:00
Peter Steinberger
0771486cc1 fix(ui): mirror optimistic session-settings patches into the sessions capability snapshot (#115009)
Chat kept optimistic thinking-level and fast-mode row patches only in the
host copy of the session list. Any mid-flight capability publish (for
example the loading flip at the start of the post-patch list refresh)
replaced that copy wholesale and reverted the patched row until the
refreshed canonical list landed. The reasoning slider visibly snapped
back to the inherited default during that window and keyboard commits
landing inside it were swallowed, which is the race behind the flaky
chat-composer-redesign thinking-slider e2e assertion on CI.

patchSessionRow now mirrors the optimistic fields into the published
capability snapshot via a new SessionCapability.patchRowLocal, matching
how model overrides already live capability-side, so intermediate
publishes carry the patch and the revert window is gone.
2026-07-28 03:27:51 -04:00
Vincent Koc
d2d6108d2c fix(qa-lab): filter unsupported profile channels (#115026) 2026-07-28 15:25:36 +08:00
Peter Steinberger
0bc6f7525a fix(tui): recover from transient session subscription failures (#115010) 2026-07-28 03:21:34 -04:00
Peter Steinberger
86e92486aa fix(macos): stop replacement handoff retry storms (#114975)
* fix(macos): bound app replacement handoffs

* chore: leave release notes to release flow

* chore(macos): refresh native i18n inventory

* chore(apps): sync native i18n inventory

* fix(macos): revalidate terminal replacement target
2026-07-28 03:21:25 -04:00
Peter Steinberger
a1174b10b5 fix(usage): normalize current MiniMax quota windows (#115030) 2026-07-28 03:21:16 -04:00
Peter Steinberger
d9b498f7f0 fix(agents): prefer native Windows PowerShell on PATH (#114999) 2026-07-28 03:18:59 -04:00
Peter Steinberger
81478b564e fix(ui): prevent duplicate Workboard widget loads and card moves (#114972)
* fix(ui): coalesce concurrent Workboard widget updates

* fix(ui): remove stale Workboard refresh guard
2026-07-28 03:18:26 -04:00
Peter Steinberger
ca2681313b fix(channels): fail channel start when the durable ingress queue is denied (#114998)
An untrusted channel plugin cannot open its durable ingress queue, but the shared
ingress monitor resolved the queue lazily, so start() armed the poll timer anyway and
every tick re-invoked the throwing factory. On a production gateway that produced one
INFO-level "slack ingress drain failed" line per second for 26+ hours while Slack
reported connected and healthy and every inbound event was silently dropped.

Open the queue before arming the poll timer so an unusable monitor fails channel start
through the caller instead of spinning. Also report the actual denied capability:
openChannelIngressQueue and openSyncKeyedStore both announced themselves as
openKeyedStore, and the message named neither the plugin nor its origin.
2026-07-28 03:17:09 -04:00
Peter Steinberger
177f81028e fix(config): demote tool policy allowlists to advanced settings tier (#114941)
* fix(config): demote tool policy allowlists to advanced settings tier

* fix(config): demote sandbox tool allowlist to advanced tier
2026-07-28 03:16:55 -04:00
Peter Steinberger
991a521d12 fix(gateway): let crash-looping channels reach their give-up state (#114976)
The health monitor treated an account sleeping between its own auto-restart
attempts as "stopped" and force-restarted it. That start booted nothing (the
channel supervisor still owned the account task), but the accompanying
resetRestartAttempts wiped the retry ladder, so a crash-looping channel
restarted at attempt 1 every cooldown and could never reach
"giving up after 10 restart attempts".

ChannelManager now reports isAutoRestartScheduled for the supervisor's backoff
sleep and replacement start, and the health monitor defers to it instead of
restarting, resetting attempts, or spending its cooldown/hourly budget. The
monitor stays the last restart owner once the supervisor gives up.

Live evidence (clawmac gateway logs, 2026-07-27/28): 198 "restarting
(reason: stopped)" lines, zero give-ups, attempt ladders truncated at 8/10.

Related: #110802, #111572
2026-07-28 03:16:36 -04:00
Vincent Koc
b3fe7a1246 refactor(auto-reply): deduplicate command context rewrites (#115002) 2026-07-28 15:14:52 +08:00
Vincent Koc
9d5ecc73da Merge pull request #115024 from openclaw/fix/native-source-baseline-20260728
* commit '5c9564c42871a6771ca0c68959f5e3c691f4f914':
  fix(i18n): refresh native source baseline
2026-07-28 09:11:37 +02:00
Peter Steinberger
b0a8346ae2 perf(gateway): single-entry reads and config-keyed projections for chat startup (#115007) 2026-07-28 03:07:03 -04:00
Peter Steinberger
c903ca8158 feat(agents): default code mode to per-model auto activation (#114906) 2026-07-28 03:00:22 -04:00
Vincent Koc
5c9564c428 fix(i18n): refresh native source baseline 2026-07-28 08:54:52 +02:00
Peter Steinberger
85f03ac637 fix: trim trailing whitespace from final reply chunks (#114973)
Preserve unsplit message whitespace while matching final chunk trimming to all preceding chunks. Covers the reported examples and the auto-reply delivery path. Fixes #64036.
2026-07-28 02:41:42 -04:00
Vincent Koc
f0ef1c6d33 Merge pull request #115003 from openclaw/fix/release-generated-drift-20260728
* origin/fix/release-generated-drift-20260728:
  fix(config): refresh generated docs baseline
2026-07-28 08:39:23 +02:00
Peter Steinberger
2ed2e46763 fix(mac): cache gateway profile registry and isolate dev keychain items (#114956) 2026-07-28 02:36:25 -04:00
Vincent Koc
a15f080a12 fix(config): refresh generated docs baseline 2026-07-28 08:35:25 +02:00
Peter Steinberger
d6096f36e4 refactor(plugins): reuse prepared channel discovery (#114942)
* refactor(plugins): reuse prepared channel discovery

* fix(plugins): keep prepared catalog types acyclic

* test(auto-reply): preserve real plugin registry exports
2026-07-28 02:34:39 -04:00
Paul Frederiksen
28ecf953f3 fix(discord): reject mismatched reply context (#114716)
* fix(discord): reject mismatched reply context

* test(discord): prove safe reply context propagation
2026-07-28 02:26:55 -04:00
joshavant
cb167acf5e fix(auto-reply): keep fast approval result private 2026-07-28 01:23:35 -05:00
joshavant
5e481fdeae fix(auto-reply): satisfy approval boundary checks 2026-07-28 01:23:35 -05:00
joshavant
2987571782 fix(imessage): unblock text approval fallback 2026-07-28 01:23:35 -05:00
joshavant
f1f46f58a4 fix(imessage): keep approval test resets internal 2026-07-28 01:23:35 -05:00
joshavant
6df2be1d06 fix(gateway): narrow channel approval runtime types 2026-07-28 01:23:35 -05:00
joshavant
6b5eaa6e22 fix(imessage): resolve approval controls safely 2026-07-28 01:23:35 -05:00
joshavant
245dc90543 fix(imessage): harden native approval polls 2026-07-28 01:23:35 -05:00
Omar Shahine
42aeccd149 feat(imessage): add native poll approval controls 2026-07-28 01:23:35 -05:00
Peter Steinberger
4b59f06d27 fix(mac): bound node worker crash retries (#114974) 2026-07-28 02:22:27 -04:00
Peter Steinberger
30fda068aa fix(channels): keep running-channel connectivity tri-state (#114970)
e0a119dabf (#114775) collapsed the account-status `connected` tri-state into a
boolean for running accounts: `resolveChannelAccountState` resolved
`input.runtime.connected ?? false` and the projection emitted the field
unconditionally. Every channel that never publishes connectivity (17 of 27
channel plugins, including imessage, signal, sms, googlechat, line, msteams)
therefore reported `connected: false` while running.

`evaluateChannelHealth` reads `connected === false` on a running account as
`disconnected`, so the gateway health monitor stopped and started every
socketless channel once per cooldown window, forever.

Restores absent connectivity as "no transport signal" in the one place it was
lost. Explicit `true`/`false` from socket channels is unchanged.
2026-07-28 02:22:02 -04:00
Peter Steinberger
54309a832a feat(ui): expand the Lobsterdex with 14 palettes, lore tooltips, and a collection page (#114959)
* feat(ui): expand the Lobsterdex with 14 palettes, lore tooltips, and a collection page

* fix(ui): keep Lobsterdex view types internal
2026-07-28 02:22:00 -04:00
Peter Steinberger
0778c397fe fix(agents): honor models.providers auth mode pin in credential eligibility (#114944)
* fix(agents): honor provider auth mode pin in credential eligibility

* fix(agents): scope provider auth pin to ambient credential imports

* fix(agents): enforce auth pin in embedded runs

* test(agents): satisfy provider config shape in auth-pin repro cast

* test(agents): reach embedded auth-plan seam via knip-ignored test-support
2026-07-28 02:19:58 -04:00
Vincent Koc
7838c6a6fd fix(apps): fence stale mobile delivery state 2026-07-28 08:15:52 +02:00
Peter Steinberger
faa7b2fe11 test(pr): provide ripgrep surface in review harness (#114958) 2026-07-28 02:10:53 -04:00
Peter Steinberger
681535cb8b fix(code-mode): bound and simplify worker lifecycles (#114945)
* fix(code-mode): bound and simplify worker lifecycles

* fix(code-mode): keep worker input internal

* fix(code-mode): retry failed wasm initialization safely

* docs(code-mode): explain live node tool budget invariant

* test(code-mode): prove hostless promises fail without worker churn
2026-07-28 02:08:17 -04:00
joshavant
817aec8445 fix(mattermost): prevent hook-controlled preview leaks 2026-07-28 01:04:51 -05:00
Peter Steinberger
ca82f7dfbc fix(tool-display): avoid recursive search summaries (#114933)
* fix(tool-display): avoid recursive search summaries

Fixes #113401.\n\nCo-authored-by: qingminlong <qing.minlong@xydigit.com>

* fix(tool-display): recognize neutral search summaries

* style(tool-display): format summary matcher
2026-07-28 02:03:56 -04:00