Peter Steinberger
14b3360c22
chore: bump versions to 2026.3.26
2026-03-27 02:03:22 +00:00
Seungwoo hong
138a92373b
fix(talk): prevent double TTS playback when system voice times out ( #53511 )
...
Merged via squash.
Prepared head SHA: 864d556fa6
Co-authored-by: hongsw <1100974+hongsw@users.noreply.github.com >
Co-authored-by: grp06 <1573959+grp06@users.noreply.github.com >
Reviewed-by: @grp06
2026-03-26 15:37:40 -07:00
Peter Steinberger
883239a560
build: prepare 2026.3.25 unreleased
2026-03-26 13:57:45 +00:00
Tak Hoffman
ab37d8810d
test: introduce planner-backed test runner, stabilize local builds ( #54650 )
...
* test: stabilize ci and local vitest workers
* test: introduce planner-backed test runner
* test: address planner review follow-ups
* test: derive planner budgets from host capabilities
* test: restore planner filter helper import
* test: align planner explain output with execution
* test: keep low profile as serial alias
* test: restrict explicit planner file targets
* test: clean planner exits and pnpm launch
* test: tighten wrapper flag validation
* ci: gate heavy fanout on check
* test: key shard assignments by unit identity
* ci(bun): shard vitest lanes further
* test: restore ci overlap and stabilize planner tests
* test: relax planner output worker assertions
* test: reset plugin runtime state in optional tools suite
* ci: split macos node and swift jobs
* test: honor no-isolate top-level concurrency budgets
* ci: fix macos swift format lint
* test: cap max-profile top-level concurrency
* ci: shard macos node checks
* ci: use four macos node shards
* test: normalize explain targets before classification
2026-03-25 18:11:58 -05:00
Peter Steinberger
97a7e93db4
build: prepare 2026.3.24 release
2026-03-25 09:31:05 -07:00
Peter Steinberger
e9ac2860c1
docs: prepare 2026.3.24-beta.2 release
2026-03-25 06:58:39 -07:00
Peter Steinberger
b19cc399b6
test: fix clobbered config snapshot expectation
2026-03-25 04:54:37 -07:00
Peter Steinberger
d874f3970a
build: prepare 2026.3.24-beta.1
2026-03-25 04:41:26 -07:00
Tak Hoffman
9c7823350b
feat: add /tools runtime availability view ( #54088 )
...
* test(memory): lock qmd status counts regression
* feat: make /tools show what the agent can use right now
* fix: sync web ui slash commands with the shared registry
* feat: add profile and unavailable counts to /tools
* refine: keep /tools focused on available tools
* fix: resolve /tools review regressions
* fix: honor model compat in /tools inventory
* fix: sync generated protocol models for /tools
* fix: restore canonical slash command names
* fix: avoid ci lint drift in google helper exports
* perf: stop computing unused /tools unavailable counts
* docs: clarify /tools runtime behavior
2026-03-24 21:09:51 -05:00
scoootscooob
3a4cc89c53
fix: allow compact retry after failed session compaction ( #53875 )
2026-03-24 11:23:42 -07:00
scoootscooob
a395c757ab
Chat UI: guard compact retries
2026-03-24 10:58:09 -07:00
scoootscooob
19093112ce
Chat UI: tighten compact transport handling
2026-03-24 10:58:09 -07:00
scoootscooob
44e27c6092
Webchat: handle bare /compact as session compaction
2026-03-24 10:58:09 -07:00
Val Alexander
a710366e9e
feat(ui): Control UI polish — skills revamp, markdown preview, agent workspace, macOS config tree ( #53411 ) thanks @BunsDev
...
Co-authored-by: BunsDev <68980965+BunsDev@users.noreply.github.com >
Co-authored-by: Nova <nova@openknot.ai >
2026-03-24 01:21:13 -05:00
Peter Steinberger
5ab3782215
fix: add config clobber forensics
2026-03-24 04:50:30 +00:00
Peter Steinberger
dc4d2ca263
build: prepare 2026.3.24
2026-03-23 21:05:59 -07:00
Peter Steinberger
6c58277577
build: prepare 2026.3.23
2026-03-23 12:58:00 -07:00
Peter Steinberger
870b0d216a
build: prepare 2026.3.23-beta.1
2026-03-23 11:54:49 -07:00
Vincent Koc
8b02ef1332
fix(android): gate canvas bridge to trusted pages ( #52722 )
...
* fix(android): gate canvas bridge to trusted pages
* fix(changelog): note android canvas bridge gating
* Update apps/android/app/src/main/java/ai/openclaw/app/node/CanvasActionTrust.kt
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* fix(android): snapshot canvas URL on UI thread
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-23 01:24:51 -07:00
Peter Steinberger
4d50084c6e
fix(exec): escape invisible approval filler chars
2026-03-22 22:52:14 -07:00
Peter Steinberger
412a3eb1ac
build: bump version to 2026.3.22
2026-03-22 11:58:33 -07:00
Vincent Koc
4113db7d78
fix(protocol): sync generated swift bindings
2026-03-22 11:58:25 -07:00
Peter Steinberger
719bfb46ff
style: format macos sources for ci
2026-03-22 17:32:30 +00:00
Kaneki
d551d8b8f7
fix: make Android current-location callback cancellation-safe ( #52318 ) (thanks @Kaneki-x)
...
* Android: make current-location callback cancellation-safe
* fix: make Android current-location callback cancellation-safe (#52318 ) (thanks @Kaneki-x)
---------
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-03-22 22:40:45 +05:30
Kaneki
c7788773bf
fix: serialize TalkModeManager player cleanup ( #52310 ) (thanks @Kaneki-x)
...
* Android: fix MediaPlayer double-release race in TalkModeManager
* Android: guard currentPosition read against concurrent player release
* fix: serialize TalkModeManager player cleanup
* fix: serialize TalkModeManager player cleanup (#52310 ) (thanks @Kaneki-x)
---------
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-03-22 22:31:30 +05:30
Peter Steinberger
a94ec3b79b
fix(security): harden exec approval boundaries
2026-03-22 09:35:25 -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
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
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
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
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
2fd372836e
iOS: improve QR pairing flow ( #51359 )
...
- improve QR pairing UX and bootstrap token handling
- preserve repeated optimistic user messages during refresh
- add regression coverage for refresh reconciliation
Thanks @ImLukeF
2026-03-21 01:10:29 -05:00
Josh Avant
7abfff756d
Exec: harden host env override handling across gateway and node ( #51207 )
...
* Exec: harden host env override enforcement and fail closed
* Node host: enforce env override diagnostics before shell filtering
* Env overrides: align Windows key handling and mac node rejection
2026-03-20 15:44:15 -05:00
Ayaan Zaidi
4c60956d8e
build(android): update Gradle tooling
2026-03-20 17:12:10 +05:30
Ayaan Zaidi
3bda64f75c
perf(android): reduce tab-switch CPU churn
2026-03-20 17:10:18 +05:30
Ayaan Zaidi
0c2e6fe97f
ci(android): use explicit flavor debug tasks
2026-03-20 12:55:52 +05:30
Ayaan Zaidi
f09f98532c
feat(android): hide restricted capabilities in play builds
2026-03-20 12:45:25 +05:30
Ayaan Zaidi
ecec0d5b2c
build(android): add play and third-party release flavors
2026-03-20 12:45:25 +05:30
Ayaan Zaidi
a73e517ae3
build(protocol): regenerate swift talk models
2026-03-20 11:12:53 +05:30
Ayaan Zaidi
2afd65741c
fix: preserve talk provider and speaking state
2026-03-20 11:08:21 +05:30
Ayaan Zaidi
47e412bd0b
fix(review): preserve talk directive overrides
2026-03-20 11:01:24 +05:30
Ayaan Zaidi
4a0341ed03
fix(review): address talk cleanup feedback
2026-03-20 11:01:24 +05:30
Ayaan Zaidi
4386a0ace8
refactor(android): remove legacy elevenlabs talk stack
2026-03-20 11:01:24 +05:30