Commit Graph

20908 Commits

Author SHA1 Message Date
Peter Steinberger ec0e4ff218 test: refresh unit timing snapshot 2026-03-22 05:59:46 +00:00
Peter Steinberger b2f9ab9a1f test: trim import-heavy startup paths 2026-03-22 05:59:46 +00:00
Vincent Koc 041f0b87ec
perf(inbound): trim cold startup import graph (#52082)
* perf(inbound): trim cold startup import graph

* chore(reply): drop redundant inline action type import

* fix(inbound): restore warning and maintenance seams

* fix(reply): restore type seam and secure forked transcripts
2026-03-21 22:32:21 -07:00
Vincent Koc c96a12aeb9
Agents: add per-agent defaults and safe model fallback (#51974)
* Agents: add per-agent defaults and safe model fallback

* Docs: add per-agent thinking/reasoning/fast defaults to config reference and thinking docs

* Format get-reply directives

* Auto-reply: guard agent reasoning defaults

* Docs: update config baseline
2026-03-21 22:27:24 -07:00
Bryan Tegomoh, MD, MPH f783101735
fix: accept session_status sessionKey=current alias (#39574)
* fix: normalize sessionKey=current in shared session resolution

Move the "current" alias handling from a narrow session_status-only
mapping into the shared session resolution layer so every session tool
(session_status, sessions_history, sessions_send) resolves it
consistently.

Changes:
- Register "current" as a canonical session key in looksLikeSessionKey
  so it is never misclassified as a sessionId
- Normalize "current" to the requester's own session key inside
  resolveSessionReference and resolveInternalSessionKey
- Add "current" normalization in session_status before local store
  lookup via the existing "main" alias scoping
- Add regression tests covering both main-session and cross-agent
  resolution paths

Fixes #39570

* fix: keep session_status current bound to requester

* fix: preserve literal current session targets

* fix: preserve literal current in session_status

* fix: defer current alias in session_status

* fix: scope session_status current to active store (#39574) (thanks @BryanTegomoh)

* fix: preserve literal current session previews (#39574) (thanks @BryanTegomoh)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 10:55:05 +05:30
Peter Steinberger 707eb8e1b3 test: refresh unit timing snapshot 2026-03-22 05:03:10 +00:00
Peter Steinberger e1854dfbf6 test: trim import-heavy startup paths 2026-03-22 05:03:10 +00:00
Peter Steinberger 8727338372 perf: extract lightweight runtime seams 2026-03-22 05:03:10 +00:00
Vincent Koc 2b210703a3
fix(models): cache models.json readiness for embedded runs (#52077)
* fix(models): cache models.json readiness for embedded runs

* fix(models): harden readiness cache inputs
2026-03-21 21:58:10 -07:00
Tak Hoffman 432e8943ad
fix(discord): dedupe inbound message deliveries (#51950)
* fix(discord): dedupe inbound message deliveries

* test(discord): disable debounce in tool-result dispatch spec
2026-03-21 23:55:52 -05:00
Vincent Koc 7a0dacbfba
refactor(doctor): extract note emission (#52076)
* refactor(doctor): extract note emission

* test(doctor): cover optional note emission paths
2026-03-21 21:52:14 -07:00
Felippe Mercurio 8790c54635
fix(android): use scheme default port for gateway setup URLs (#43540)
* fix(android): use scheme default port for gateway setup URLs

* test(android): cover gateway endpoint default ports

* fix(android): preserve direct gateway default port

* fix(android): preserve explicit cleartext port display

* fix: preserve Android gateway setup URL ports (#43540) (thanks @fmercurio)

---------

Co-authored-by: clawdia <clawdia@fmercurio.tech>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 10:21:38 +05:30
Tak Hoffman 0f6dbb4390
Fix configure cache ownership for plugin resolvers (#52018)
* fix configure cache ownership

* address web-search cache review

* rekey provider wizard cache

* honor plugin cache opt-outs

* fix cache invalidation gaps

* align plugin snapshot ttl

* refresh snapshot cache keys
2026-03-21 23:41:45 -05:00
Vincent Koc ec59974a46
refactor(doctor): extract flow finalization (#52067)
* refactor(doctor): extract flow finalization

* test(doctor): pin repair finalization to cfg
2026-03-21 21:27:51 -07:00
Vincent Koc 60f559e217
refactor(doctor): extract matrix sequencing (#52056) 2026-03-21 21:10:48 -07:00
Peter Steinberger 4c9f411f6d test(discord): stabilize tool-result reply tests 2026-03-22 04:07:38 +00:00
Peter Steinberger 7ac312b8fe
fix(agents): migrate remaining media artifacts 2026-03-21 21:05:33 -07:00
Goweii e7e4c68caf
Android: update status bar appearance in OpenClawTheme (#51098)
* Android: update status bar appearance in OpenClawTheme

* fix: update Android status bar appearance (#51098) (thanks @goweii)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 09:33:24 +05:30
Peter Steinberger a2472dc31b refactor(test): dedupe channel startup test setup 2026-03-22 03:50:41 +00:00
Vincent Koc 177136c964
perf(inbound): trim reply startup imports (#51988)
* perf(inbound): narrow reply startup imports

* perf(inbound): trim reply startup imports

* fix(perf): dedupe archive helpers
2026-03-21 20:49:41 -07:00
Vincent Koc b2380b3ab1
refactor(doctor): extract repair sequencing (#51980)
* refactor(doctor): extract repair sequencing

* fix(doctor): sanitize repair runner notes
2026-03-21 20:43:16 -07:00
Peter Steinberger 89bc66feef refactor(test): dedupe startup channel test helpers 2026-03-22 03:41:25 +00:00
Peter Steinberger 36feecf018 refactor(test): dedupe bluebubbles webhook auth helpers 2026-03-22 03:24:22 +00:00
Kaneki 1e98dbcad3
Android: fix Bitmap memory leaks in PhotosHandler (#41888)
* Android: fix Bitmap memory leaks in PhotosHandler

Bitmaps created by decodeScaledBitmap and intermediate scaled copies
inside encodeJpegUnderBudget were never recycled, leaking native memory
on every photos.latest invocation (up to 20 bitmaps per call).

- latest(): wrap bitmap usage in try/finally to guarantee recycle
- decodeScaledBitmap(): recycle the decoded bitmap after scaling
- encodeJpegUnderBudget(): use try/finally to recycle intermediate
  scaled bitmaps on all exit paths (success, compress failure, and
  cannot-shrink-further early returns)

Made-with: Cursor

* Android: guard decodeScaledBitmap against scale() exceptions

* fix: note Android photos bitmap cleanup (#41888) (thanks @Kaneki-x)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 08:53:26 +05:30
Kaneki 2909d8cd12
Android: fix Bitmap memory leaks in CanvasController snapshots (#41889)
* Android: fix Bitmap memory leaks in CanvasController snapshots

snapshotPngBase64() and snapshotBase64() create bitmaps via
captureBitmap() and scaleForMaxWidth() but never recycle them,
leaking native memory on every canvas snapshot invocation.

Wrap both methods in nested try/finally blocks:
- outer: always recycles the captured bitmap
- inner: recycles the scaled bitmap only when it differs from the
  captured one (scaleForMaxWidth returns `this` when no scaling needed)

Made-with: Cursor

* fix: note Android canvas snapshot bitmap leak in changelog (#41889) (thanks @Kaneki-x)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 08:50:42 +05:30
Kaneki 88da51d91b
Android: fix temp file leak in CameraHandler.handleClip (#41890)
* Android: fix temp file leak in CameraHandler.handleClip

When readBytes() throws (IOException, OOM, etc.), the recorded clip
file was never deleted because delete() only ran on the success path.

Move file.delete() into a finally block so the temp file is cleaned up
regardless of whether readBytes() succeeds or fails.

Made-with: Cursor

* fix: Android camera clip cleanup (#41890) (thanks @Kaneki-x)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 08:49:50 +05:30
Ayaan Zaidi 506861efd0 fix: Android contacts search wildcard escaping (#41891) (thanks @Kaneki-x) 2026-03-22 08:48:29 +05:30
kaneki f7866c1c15 Android: escape SQL LIKE wildcards in contacts search query
The contacts search passed user input directly into a LIKE pattern
without escaping % and _ characters, causing them to act as SQL
wildcards and return incorrect results.

Add an escapeLikePattern() helper that escapes \, %, and _ with a
backslash, and add ESCAPE '\' to the selection clause so SQLite
treats them as literal characters.

Made-with: Cursor
2026-03-22 08:48:29 +05:30
Peter Steinberger 6c4eced494 refactor(test): dedupe bluebubbles webhook helpers 2026-03-22 03:15:48 +00:00
Ayaan Zaidi eea84bc6ec fix: land Android camera bitmap leak (#41902) (thanks @Kaneki-x) 2026-03-22 08:44:06 +05:30
kaneki d38561acbe Android: fix Bitmap memory leaks in CameraCaptureManager.snap 2026-03-22 08:44:06 +05:30
Kaneki d6346aaf63
Android: fix sensor callback race condition in MotionHandler (#43781)
* Android: fix sensor callback race in MotionHandler using tryResume

* call completeResume before unregisterListener to avoid coroutine leak

* replace internal tryResume/completeResume with AtomicBoolean guard

* use CancellableContinuation.resume(value, onCancellation) for cancellation safety

* use non-deprecated resume overload for kotlinx.coroutines 1.10+

* fix: simplify Android motion continuation resume

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 08:41:02 +05:30
Kaneki e7814f7ba0
Android: fix incomplete JS string escaping in A2UI action status (#43784)
* Android: fix incomplete JS string escaping in A2UI action status

* escape U+2028/U+2029 Unicode line terminators in JS strings

* refactor(android): serialize A2UI action status strings

* fix: serialize Android A2UI action status strings (#43784) (thanks @Kaneki-x)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 08:39:53 +05:30
Ayaan Zaidi b67baae1f6 fix: make permission rationale completion single-shot 2026-03-22 08:34:02 +05:30
kaneki 6db72746fb Android: keep permission dialog cleanup on the main thread 2026-03-22 08:34:02 +05:30
kaneki 518d2dd6a9 Android: harden permission dialogs across activity teardown 2026-03-22 08:34:02 +05:30
Val Alexander 14237aa6c0
refactor(usage): drop empty detail placeholder state (#52013)
* refactor(usage): drop empty detail placeholder state

* docs(changelog): add entry for usage detail cleanup
2026-03-21 21:58:55 -05:00
Peter Steinberger 8e6a4c2d82 perf: narrow discord timeout import seam 2026-03-22 02:42:57 +00:00
Peter Steinberger b1ab7ba3ac refactor(test): trim bluebubbles webhook fixtures 2026-03-22 02:41:44 +00:00
Peter Steinberger 4f210e98a5 refactor(test): dedupe bluebubbles monitor helpers 2026-03-22 02:18:00 +00:00
Peter Steinberger 7b344b8a8a test: refresh unit timing snapshot 2026-03-22 02:11:43 +00:00
Peter Steinberger d81772dbc7 test: trim import-heavy startup paths 2026-03-22 02:11:43 +00:00
Peter Steinberger 2cc777539a perf: reduce plugin and memory startup overhead 2026-03-22 02:11:43 +00:00
wilsonIs 1ad3893b39
Control UI: disambiguate duplicate agent session labels (#48209)
* Control UI: disambiguate duplicate agent sessions

* Control UI: avoid prefixed session label collisions

* Control UI: align session defaults typing

---------

Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com>
2026-03-21 21:11:15 -05:00
Peter Steinberger 17713ec988 refactor(test): dedupe bluebubbles webhook tests 2026-03-22 01:30:22 +00:00
Tak Hoffman 1e4688a584
CI: exempt bad-barnacle from dirty auto-close 2026-03-21 20:23:17 -05:00
Tak Hoffman d6c05c1941
ci: surface hidden failures in smoke helpers (#51954)
* ci: surface hidden failures in smoke helpers

* changelog: add ci smoke failure-signal note
2026-03-21 20:21:48 -05:00
Vincent Koc ab38f6471c
perf(inbound): narrow reply startup imports (#51943)
* perf(inbound): narrow reply startup imports

* fix(reply): restore activation parsing semantics

Cherry-picked review fixes for activation parsing semantics and native command surface cache invalidation.

* fix(reply): preserve case-insensitive command matching

Cherry-picked review fix to lowercase only the slash-command token in commands-context while preserving argument casing.
2026-03-21 18:18:41 -07:00
Peter Steinberger f1b2c5639a refactor(test): dedupe startup and nostr test fixtures 2026-03-22 01:12:31 +00:00
Vincent Koc 3775651480
refactor(doctor): extract preview warning collection (#51942)
* refactor(doctor): extract preview warning collection

* fix(doctor): sanitize preview empty allowlist warnings

* test(doctor): cover sanitized preview warnings
2026-03-21 18:11:28 -07:00