Commit Graph

2225 Commits

Author SHA1 Message Date
Ayaan Zaidi 6f63fc288a fix(android): return NOT_AUTHORIZED when notify permission is lost 2026-03-01 20:32:14 +05:30
Ayaan Zaidi 0d672e43b9 chore(protocol): sync generated swift models 2026-03-01 20:32:14 +05:30
Ayaan Zaidi 759a0fc1b2 chore(android): remove deprecated AGP gradle flags 2026-03-01 20:32:14 +05:30
Ayaan Zaidi 9c2f7e2a9d style(android): format gradle kotlin scripts 2026-03-01 20:32:14 +05:30
Ayaan Zaidi 348a7dd5b3 fix(android): guard notification post permission 2026-03-01 20:32:14 +05:30
Ayaan Zaidi 7f9274b71d chore(android): add kotlin lint/format tooling 2026-03-01 20:32:14 +05:30
Greg Mousseau ba430cc65b fix(android): drainingTts identity check, mark stopped on WebSocket failure
- Codex P2: drain coroutine now only clears drainingTts if it's the
  same instance (=== check), preventing a newer drain from being
  unreachable by stopTts.
- Codex P2: set stopped=true on WebSocket onFailure so subsequent
  sendText calls are rejected and stale state doesn't persist.
2026-03-01 20:03:26 +05:30
Greg Mousseau ccca99c472 fix(android): ignore stale out-of-order agent events in streaming TTS
Agent events arrive on multiple threads concurrently. A stale event
with shorter accumulated text was falsely triggering 'text diverged',
causing the streaming TTS to restart with a new WebSocket — resulting
in multiple simultaneous ElevenLabs connections (2-3 voices) and
eventual system TTS fallback when hasReceivedAudio was false.

Fix: if sentFullText.startsWith(fullText), the event is stale (we
already have this text), not diverged. Accept and ignore it.
2026-03-01 20:03:26 +05:30
Greg Mousseau a583261775 fix(android): wire speaker mute to TalkMode, release audio focus on stop
- Codex P1: setSpeakerEnabled now syncs talkMode.setPlaybackEnabled
  so muting the speaker works when ttsOnAllResponses is active.
- Codex P2: abandonAudioFocus() called in stopSpeaking to prevent
  audio focus leak after TTS completes or is interrupted.
2026-03-01 20:03:26 +05:30
Greg Mousseau 930841cd7c fix(android): wire MP3 fallback call, prevent double-speaking
- Codex P1: streamAndPlayMp3 was computed but never called after PCM
  failure. Now properly invoked as fallback.
- Codex P2: MicCaptureManager.speakAssistantReply now skipped when
  TalkModeManager.ttsOnAllResponses is active, preventing both
  pipelines from speaking the same assistant reply.
2026-03-01 20:03:26 +05:30
Greg Mousseau 587790e84a fix(android): talk mode stability — thread safety, TTS fallback, mic cooldown
Bug fixes:
- @Synchronized on ElevenLabsStreamingTts.sendText/finish to prevent
  sentFullText/sentTextLength races across OkHttp and caller threads
- Pre-set pendingRunId via onRunIdKnown callback before chat.send to
  eliminate race where gateway events arrive before runId is stored
- Track drain coroutine as Job; cancel prior on rapid mic toggle to
  prevent duplicate TTS and stale transcript sends
- Mic button disabled during 2s drain cooldown (micCooldown StateFlow)

Codex review fixes:
- Gate agent streaming TTS on sessionKey to prevent cross-session
  audio leaks (P1)
- Clear ElevenLabs credentials when talk.provider is not elevenlabs;
  gate streaming TTS on activeProviderIsElevenLabs (P2)

System TTS fallback fixes:
- Null streamingTts immediately in finishStreamingTts so next response
  gets a fresh TTS instance
- Add hasReceivedAudio flag to ElevenLabsStreamingTts to detect when
  WebSocket connects but returns no audio (invalid key, network error)
- Fall back to playTtsForText when streaming TTS produced no audio
- Track ttsJob to cleanly cancel prior playTtsForText on new response
- Re-throw CancellationException instead of cascading into fallback
  attempts that also get cancelled
2026-03-01 20:03:26 +05:30
Greg Mousseau 4748ba491d fix(android): chat history refresh and mic capture improvements for voice
ChatController:
- final/aborted/error run events now trigger a history refresh regardless of
  whether the runId is in pendingRuns; only delta events require the run to be
  tracked (prevents voice-initiated responses from being silently dropped)

MicCaptureManager:
- Don't auto-send on onResults silence detection — accumulate transcript
  segments and send when mic is toggled off, giving the recognizer time to
  finish processing buffered audio
- Capture any partial live transcript if no final segments arrived (2s drain
  window before stop)
- Join multi-segment transcripts with sentence-ending punctuation to avoid
  run-on text sent to the gateway
2026-03-01 20:03:26 +05:30
Greg Mousseau 68db055f1a feat(android): wire TalkModeManager into NodeRuntime for voice screen TTS
TalkModeManager is instantiated lazily in NodeRuntime and drives ElevenLabs
streaming TTS for all assistant responses when the voice screen is active.
MicCaptureManager continues to own STT and chat.send; TalkModeManager is
TTS-only (ttsOnAllResponses = true, setEnabled never called).

- talkMode.ttsOnAllResponses = true when mic is enabled or voice screen active
- Barge-in: tapping the mic button calls stopTts() before re-enabling mic
- Lifecycle: PostOnboardingTabs LaunchedEffect + VoiceTabScreen onDispose both
  call setVoiceScreenActive(false) so TTS stops cleanly on tab switch or
  app backgrounding
- applyMainSessionKey wires the session key into TalkModeManager so it
  subscribes to the correct chat session for TTS
2026-03-01 20:03:26 +05:30
Greg Mousseau f0fcecd7c1 feat(android): ElevenLabsStreamingTts — WebSocket streaming TTS with PCM playback
Streams text to the ElevenLabs WebSocket API and plays audio in real-time
via AudioTrack (PCM 24kHz). Key design points:

- sendText(fullText) takes the full accumulated text and only transmits the
  new suffix, detecting divergence for restart
- Chunks are queued if the WebSocket isn't yet connected; flushed in onOpen
- finish() sends EOS to ElevenLabs; deferred if called before onOpen fires
- sendText returns true (not false) when finished=true to avoid treating a
  normal end-of-stream as a diverge restart
- finishStreamingTts coroutine uses identity check before nulling streamingTts
  to prevent a mid-drain restart from orphaning a live TTS session
- eleven_v3 does NOT support WebSocket streaming; use eleven_flash_v2_5
2026-03-01 20:03:26 +05:30
Ayaan Zaidi 1d7b76a90e fix(android-voice): rotate playback token per assistant reply 2026-02-28 20:05:59 +05:30
Ayaan Zaidi addc619087 fix(android-voice): retry talk config after transient failures 2026-02-28 20:05:59 +05:30
Ayaan Zaidi 930e94024a fix(android-voice): cancel in-flight speech when speaker muted 2026-02-28 20:05:59 +05:30
Ayaan Zaidi 727ae469cf perf(android): reduce mic conversation update churn 2026-02-28 20:05:59 +05:30
Ayaan Zaidi 3daed77ba9 fix(android): unify voice speaker gating and config refresh 2026-02-28 20:05:59 +05:30
Ayaan Zaidi 72e135083a feat(android-voice): add speaker toggle in voice tab 2026-02-28 20:05:59 +05:30
Ayaan Zaidi fb92a91ef7 fix(android): speak final voice replies in mic capture flow 2026-02-28 20:05:59 +05:30
Ayaan Zaidi fcf3e5b0a0 fix(android): expose talk-mode assistant speech entrypoint 2026-02-28 20:05:59 +05:30
Ayaan Zaidi eea081c709 fix(android): update onboarding pairing commands 2026-02-28 20:05:59 +05:30
Ayaan Zaidi 548a28a13f fix(android): request onboarding permissions per toggle 2026-02-28 20:05:59 +05:30
Ayaan Zaidi 3f056a7294 fix(android): block onboarding advance until special setup is complete 2026-02-28 12:29:52 +05:30
Ayaan Zaidi cd61edb0f3 fix(android): add missing capability setup surfaces 2026-02-28 12:29:52 +05:30
Ayaan Zaidi f1bb26642c fix(gateway): scope notification wakeups to session 2026-02-28 11:18:01 +05:30
Ayaan Zaidi 9d3ccf4754 feat(gateway): enable Android notify + notification events 2026-02-28 11:18:01 +05:30
Ayaan Zaidi 1bc9da8f9e fix(android): stabilize motion sampling and gate pedometer command 2026-02-28 09:27:54 +05:30
Ayaan Zaidi 18e7938dfd refactor(android): remove unreachable motion classify branch 2026-02-28 09:27:54 +05:30
Ayaan Zaidi 943dce37be feat(android): wire new device capabilities into runtime 2026-02-28 09:27:54 +05:30
Ayaan Zaidi b9e474deb4 feat(android): add motion activity and pedometer handlers 2026-02-28 09:27:54 +05:30
Ayaan Zaidi f75385981a feat(android): add calendar capability handlers 2026-02-28 09:27:54 +05:30
Ayaan Zaidi 81ebe7de46 feat(android): add contacts capability handlers 2026-02-28 09:27:54 +05:30
Ayaan Zaidi c8ad229776 feat(android): add photos latest handler 2026-02-28 09:27:54 +05:30
Ayaan Zaidi f637cbd246 feat(android): add system notification handler 2026-02-28 09:27:54 +05:30
Ayaan Zaidi 3f06693e7d refactor(android): share node capability and command manifest 2026-02-28 08:46:50 +05:30
Peter Steinberger fe807e4bed chore(release): bump 2026.2.27 and split changelog 2026-02-27 16:09:28 +01:00
Ayaan Zaidi 3a35035512 fix(android): send object params for canvas capability refresh 2026-02-27 13:26:42 +05:30
Ayaan Zaidi 6222d6650b fix(android): avoid duplicate A2UI readiness probe on happy path 2026-02-27 12:16:36 +05:30
Ayaan Zaidi 8187fbc571 fix(android): refresh scoped canvas URLs without trailing slash 2026-02-27 12:16:36 +05:30
Ayaan Zaidi d53b24d185 fix(android): return valid debug.ed25519 diagnostics JSON 2026-02-27 12:16:36 +05:30
Ayaan Zaidi 34486f8c10 fix(android): retry A2UI after canvas capability refresh 2026-02-27 12:16:36 +05:30
Ayaan Zaidi 9b64ad30c4 docs(android): add integration test preconditions and pitfalls 2026-02-27 12:16:36 +05:30
Ayaan Zaidi 0896bb09b0 feat(android): wire runtime canvas capability refresh 2026-02-27 12:16:36 +05:30
Ayaan Zaidi 22d422a792 refactor(android-node): share battery snapshot parsing across device handlers 2026-02-27 10:15:21 +05:30
Ayaan Zaidi 284f75500c refactor(android-node): unify notifications snapshot rebind preflight 2026-02-27 10:15:21 +05:30
Ayaan Zaidi bbab0b005e fix(android): rebind listener before notification actions 2026-02-27 10:15:21 +05:30
Ayaan Zaidi 8807267bfd fix(android): allow open and reply on non-clearable notifications 2026-02-27 10:15:21 +05:30
Ayaan Zaidi d0ec3de588 feat(android): implement device diagnostics and notification actions 2026-02-27 10:15:21 +05:30
Ayaan Zaidi e99b323a6b feat(node): add device diagnostics and notification action commands 2026-02-27 10:15:21 +05:30
Ayaan Zaidi e48513d512 fix(android): scale invoke result ack timeout to invoke budget 2026-02-27 10:15:21 +05:30
Ayaan Zaidi 1f7b3c613d feat(android): add camera list and device selection 2026-02-27 10:15:21 +05:30
Ayaan Zaidi 0f7664fda3 fix(android): reject non-positive camera maxWidth 2026-02-27 09:10:10 +05:30
Ayaan Zaidi adb41e48ae test(android): cover camera clip payload size guard 2026-02-27 09:10:10 +05:30
Ayaan Zaidi fb34c46074 refactor(android): make camera clip transport deterministic 2026-02-27 09:10:10 +05:30
Ayaan Zaidi 120a7abbab test(android): cover camera clip upload URL JSON parsing 2026-02-27 09:10:10 +05:30
Ayaan Zaidi 67609cc16f fix(android): parse camera and screen invoke params as JSON 2026-02-27 09:10:10 +05:30
Peter Steinberger 5b62d5603d fix: unblock CI minimatch audit and host policy check 2026-02-26 22:48:09 +00:00
Peter Steinberger c35368c6dd fix(ios): eliminate Swift warnings and clean build logs 2026-02-26 22:42:23 +00:00
Philipp Spiess a29b18c003 Protocol: regenerate Swift models for systemRunPlanV2 2026-02-26 23:05:23 +01:00
Peter Steinberger 10481097f8 refactor(security): enforce v1 node exec approval binding 2026-02-26 18:09:01 +01:00
Shakker 15e3e63705
protocol: regenerate Swift models for exec env field 2026-02-26 16:19:44 +00:00
Peter Steinberger 4894d907fa refactor(exec-approvals): unify system.run binding and generate host env policy 2026-02-26 16:58:01 +01:00
Ayaan Zaidi cf327f60ba fix(android): require validated network for device status 2026-02-26 21:26:11 +05:30
Ayaan Zaidi d14e734e9c refactor(android): remove dead thermal sdk branch 2026-02-26 21:26:11 +05:30
Ayaan Zaidi d768c1f81c feat(android): wire device commands into runtime 2026-02-26 21:26:11 +05:30
Ayaan Zaidi 67f6a13c5a feat(android): add device status and info handler 2026-02-26 21:26:11 +05:30
Ayaan Zaidi 551647aa96 feat(android): add device invoke protocol commands 2026-02-26 21:26:11 +05:30
Peter Steinberger 9a4b2266cc fix(security): bind node system.run approvals to env 2026-02-26 16:38:07 +01:00
Harold Hunt 62a248eb99 core(protocol): pnpm protocol:check 2026-02-26 20:03:25 +05:30
Peter Steinberger 081b1aa1ed refactor(gateway): unify v3 auth payload builders and vectors 2026-02-26 15:08:50 +01:00
Nimrod Gutman 185c393459 fix(ios): remove talk voice directive hint 2026-02-26 15:19:07 +02:00
Peter Steinberger 490cb5174d fix(apps): sign gateway device auth with v3 payload 2026-02-26 14:16:49 +01:00
Harold Hunt f53e4e9ffb chore: Fix broken build protocol:check 2026-02-26 18:22:38 +05:30
Peter Steinberger caace61ba1 chore: bump versions to 2026.2.26 2026-02-26 12:11:02 +01:00
Ayaan Zaidi 05817187fe refactor(android): unify notifications.list status flow 2026-02-26 14:33:14 +05:30
Ayaan Zaidi cf4fe41957 feat(android): add notifications.list node command 2026-02-26 14:33:14 +05:30
Ayaan Zaidi ac6539ed03 refactor(android): unify invoke availability gating 2026-02-26 12:17:32 +05:30
Ayaan Zaidi a87d961ebc fix(android): require gateway device auth store 2026-02-26 12:17:32 +05:30
Ayaan Zaidi f7865527af fix(android): omit websocket Origin for native gateway connect 2026-02-26 12:17:32 +05:30
Ayaan Zaidi c3f54fcddd refactor(android): unify invoke error parsing 2026-02-26 12:17:32 +05:30
Ayaan Zaidi 39d362aeff refactor(android): distill invoke dispatcher command flow 2026-02-26 12:17:32 +05:30
Ayaan Zaidi 18fc4c113b refactor(android): centralize invoke command registry 2026-02-26 12:17:32 +05:30
Ayaan Zaidi d4ae8a8d34 test(android): cover invoke paramsJSON and error mapping 2026-02-26 12:17:32 +05:30
Ayaan Zaidi 8117a13dd6 fix(nodes): default camera snap to front high-quality image 2026-02-26 12:17:32 +05:30
Ayaan Zaidi bee0c564cf test(android): add GatewaySession invoke roundtrip test 2026-02-26 12:17:32 +05:30
Peter Steinberger 5500000492 chore(protocol): regenerate Swift gateway models 2026-02-26 04:43:27 +01:00
Ayaan Zaidi 410ba918fb fix(android): hydrate gateway token state on init 2026-02-26 07:50:09 +05:30
Ayaan Zaidi 3175640ea2 docs(android): add perf CLI workflow docs 2026-02-26 07:50:09 +05:30
Ayaan Zaidi b49c2cbdd9 perf(android): tighten startup path and add perf tooling 2026-02-26 07:50:09 +05:30
Ayaan Zaidi 4a07c89816 perf(android): make gateway token writes async 2026-02-26 07:50:09 +05:30
Ayaan Zaidi 8d68199793 perf(android): cache device identity and speed hex encoding 2026-02-26 07:50:09 +05:30
Ayaan Zaidi 00fc1f56f1 perf(android): remove startup bc provider registration 2026-02-26 07:50:09 +05:30
Peter Steinberger 2011edc9e5 fix(gateway): preserve agentId through gateway send path
Landed from #23249 by @Sid-Qin.
Includes extra regression tests for agentId precedence + blank fallback.

Co-authored-by: Sid <201593046+Sid-Qin@users.noreply.github.com>
2026-02-25 23:31:35 +00:00
Peter Steinberger 8f3310000a refactor(macos): remove anthropic oauth onboarding flow 2026-02-26 00:17:03 +01:00
Ayaan Zaidi b12216af93 fix(android): refresh settings permissions on resume 2026-02-25 18:23:50 +05:30
Ayaan Zaidi 2b7db53d06 fix(android): recover stuck voice sends after missing finals 2026-02-25 18:23:50 +05:30
Ayaan Zaidi 285a0f48e5 fix(android): sync mic manager on toggle 2026-02-25 18:23:50 +05:30
Ayaan Zaidi f729cc7b07 fix(android): stop auto canvas rehydrate on node connect 2026-02-25 18:23:50 +05:30
Ayaan Zaidi 10a1593e0c feat(android): redesign voice mode layout for full-height conversation 2026-02-25 18:23:50 +05:30
Ayaan Zaidi f9c3fdba45 refactor(android): expose voice conversation state to viewmodel 2026-02-25 18:23:50 +05:30
Ayaan Zaidi 434dc46531 feat(android): stream voice turns from mic manager events 2026-02-25 18:23:50 +05:30
Ayaan Zaidi 73677f2707 refactor(android): remove legacy voice wake controls from settings 2026-02-25 18:23:50 +05:30
Ayaan Zaidi 6798330c24 feat(android): replace voice placeholder with mic transcript UI 2026-02-25 18:23:50 +05:30
Ayaan Zaidi 3d29233bab feat(android): add single-path mic capture runtime manager 2026-02-25 18:23:50 +05:30
Ayaan Zaidi 90ddb3f271 fix(android): stabilize gateway operator reconnect 2026-02-25 18:23:50 +05:30
Ayaan Zaidi ed34129637 test(android): cover non-string setupCode QR payload 2026-02-25 14:05:56 +05:30
Ayaan Zaidi 036e3e633e fix(android): harden scanned setup code parsing 2026-02-25 14:05:56 +05:30
Ayaan Zaidi 9c1c083d98 fix(android): remove tab bar gap above system nav 2026-02-25 14:05:56 +05:30
Ayaan Zaidi 7725c0b9b3 fix(android): stabilize chat ime insets and tab bar 2026-02-25 14:05:56 +05:30
Ayaan Zaidi 959cbafcdb fix(android): stabilize chat composer ime and tab layout 2026-02-25 14:05:56 +05:30
Ayaan Zaidi f894c23e64 docs(android): update README for native Android workflow 2026-02-25 14:05:56 +05:30
Ayaan Zaidi 2e3c05d9da feat(android): make QR scanning first-class onboarding 2026-02-25 14:05:56 +05:30
Ayaan Zaidi 81752564e9 refactor(android): return sendNodeEvent status to callers 2026-02-25 11:43:35 +05:30
Ayaan Zaidi b065265b73 fix(android): gate canvas restore on node connectivity 2026-02-25 11:43:35 +05:30
Ayaan Zaidi 41870fac16 fix(android): preserve scoped canvas URL suffix on TLS rewrite 2026-02-25 11:43:35 +05:30
Ayaan Zaidi f701224a69 feat(canvas): add narrow-screen A2UI layout overrides 2026-02-25 11:43:35 +05:30
Ayaan Zaidi 35a4641bb6 fix(android): use mobile viewport settings for canvas webview 2026-02-25 11:43:35 +05:30
Ayaan Zaidi 1c0c58e30d feat(android): add screen-tab canvas restore flow 2026-02-25 11:43:35 +05:30
Ayaan Zaidi e5399835b2 fix(android): normalize canvas host URLs for TLS gateways 2026-02-25 11:43:35 +05:30
Peter Steinberger 52d933b3a9 refactor: replace bot.molt identifiers with ai.openclaw 2026-02-25 05:03:24 +00:00
Ayaan Zaidi 1edd9f8bf5 build(android): migrate to AGP 9 new DSL kotlin setup 2026-02-25 09:32:07 +05:30
Ayaan Zaidi 797843c39a build(android): bump stable dependencies 2026-02-25 09:32:07 +05:30
Ayaan Zaidi ff4dc050cc feat(android): add gfm chat markdown renderer 2026-02-25 09:32:07 +05:30
Ayaan Zaidi 6969027025 fix(android): restore chat text streaming 2026-02-25 09:32:07 +05:30
Peter Steinberger 480cc4b85c chore: roll to 2026.2.25 unreleased 2026-02-25 03:35:33 +00:00
Peter Steinberger 3c95f89662 refactor(exec): split system.run phases and align ts/swift validator contracts 2026-02-25 00:35:06 +00:00
Peter Steinberger ce1dbeb986 fix(macos): clean warnings and harden gateway/talk config parsing 2026-02-25 00:27:36 +00:00
Peter Steinberger 16b228e4a6 fix(macos): resolve webchat panel corner clipping (#22458)
Co-authored-by: apethree <3081182+apethree@users.noreply.github.com>
Co-authored-by: agisilaos <3073709+agisilaos@users.noreply.github.com>
2026-02-25 00:14:56 +00:00
Peter Steinberger 1970a1e9e5 fix(macos): keep Return for IME marked text commit (#25178)
Co-authored-by: jft0m <9837901+bottotl@users.noreply.github.com>
2026-02-25 00:14:00 +00:00
Peter Steinberger 11a0495d5f fix(macos): default voice wake forwarding to webchat (#25440)
Co-authored-by: Peter Machona <7957943+chilu18@users.noreply.github.com>
2026-02-25 00:12:44 +00:00
Peter Steinberger 31e6d18538 fix(macos): prefer openclaw binary while keeping pnpm fallback (#25512)
Co-authored-by: Peter Machona <7957943+chilu18@users.noreply.github.com>
2026-02-25 00:11:53 +00:00
Peter Steinberger 236b22b6a2 fix(macos): guard voice audio paths with no input device (#25817)
Co-authored-by: Stefan Förster <103369858+sfo2001@users.noreply.github.com>
2026-02-25 00:10:14 +00:00
Peter Steinberger 55cf92578d fix(security): harden system.run companion command binding 2026-02-25 00:02:03 +00:00
Peter Steinberger f4e6f87303 refactor(ios): drop legacy talk payload and keychain fallbacks 2026-02-24 22:39:37 +00:00
Ayaan Zaidi 8892a1cd45 refactor(android-ui): unify gateway config resolution paths 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 7a74cf34ba fix(android-security): remove token-derived logging from prefs 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 8b24830e07 fix(android-gateway): avoid token clear on transient connect failure 2026-02-24 22:13:49 +05:30
Ayaan Zaidi e11e329238 refactor(android-chat): move thread selector above composer 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 75f145ebcc docs(android): document alpha rebuild status and feature checklist 2026-02-24 22:13:49 +05:30
Ayaan Zaidi baf98a87f6 refactor(android-settings): remove gateway controls duplicated in connect 2026-02-24 22:13:49 +05:30
Ayaan Zaidi bb27884474 feat(android-tabs): add coming-soon voice and screen tabs 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 94f426b29e fix(android-nav): hide tab bar while keyboard is open 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 577c554150 style(android-chat): redesign composer controls and actions 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 81ff074a51 style(android-chat): align bubbles and markdown with RN 2026-02-24 22:13:49 +05:30
Ayaan Zaidi b658000bf7 style(android-chat): refine thread shell and empty states 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 02e3fbef77 style(android): align settings screen with RN visual system 2026-02-24 22:13:49 +05:30
Ayaan Zaidi cf031d6ad4 chore(android): remove unused legacy ui components 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 439d8e609e fix(android): use native client id for operator session 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 14f5217e22 fix(android): retry with shared token after device-token failure 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 4b188dcf97 fix(android): persist gateway auth state across onboarding 2026-02-24 22:13:49 +05:30
Ayaan Zaidi f853622eca feat(android): switch post-onboarding app to five-tab shell 2026-02-24 22:13:49 +05:30
Ayaan Zaidi c015382a77 feat(android): add connect tab screen with setup and manual modes 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 757a4dc9fa docs(android): generalize style guide from onboarding baseline 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 5d88e77420 docs(android): add native UI style guide 2026-02-24 22:13:49 +05:30
Ayaan Zaidi d6bbe93d4c feat(android): add settings action to rerun onboarding 2026-02-24 22:13:49 +05:30
Ayaan Zaidi b9cc2599f1 feat(android): add native four-step onboarding flow 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 3e2e010952 feat(android): add onboarding and gateway auth state plumbing 2026-02-24 22:13:49 +05:30
Ayaan Zaidi 36c352453f build(android): bump AGP and update gradle defaults 2026-02-24 22:13:49 +05:30
Peter Steinberger 80daaeba38 fix(ios): split watch notify normalization helpers
Co-authored-by: Mariano Belinky <mbelinky@gmail.com>
2026-02-24 15:16:11 +00:00
Mariano Belinky d06d8701fd iOS: normalize watch quick actions and fix test signing 2026-02-24 15:16:11 +00:00
Nimrod Gutman d58f71571a feat(talk): add provider-agnostic config with legacy compatibility 2026-02-24 15:02:52 +00:00
DoncicX 32d7756d8c iOS: extract device/platform info into DeviceInfoHelper, keep Settings platform string as iOS X.Y.Z 2026-02-24 13:56:43 +00:00
Peter Steinberger 7c99a733a9 fix: harden macOS usage cost submenu recursion guard (#25341) (thanks @yingchunbai) 2026-02-24 13:48:59 +00:00
yingchunbai 96b21f4823 fix(macos): remove self-delegate on cost usage submenu to prevent recursive dropdown
The cost usage submenu set `menu.delegate = self` (the MenuSessionsInjector),
which caused `menuWillOpen(_:)` to call `inject(into:)` on the submenu when
it opened. This re-inserted the "Usage cost (30 days)" item into the submenu,
creating an infinite recursive dropdown.

Fix: remove the delegate assignment from the submenu — it does not need
the injector's delegate behavior since it only contains a static chart view.

Closes #25167

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:48:59 +00:00
Peter Steinberger 2bad30b4d3 chore(release): bump version to 2026.2.24 2026-02-24 13:42:43 +00:00
Peter Steinberger 19d0ddc679 fix: regenerate protocol swift models for nodeId (#24991) (thanks @stakeswky) 2026-02-24 04:34:49 +00:00
Peter Steinberger ff4e6ca0d9 fix(ios): gate agent deep links with local confirmation 2026-02-24 02:51:58 +00:00
Ayaan Zaidi 61db3d4a16 fix(protocol): regenerate swift gateway models 2026-02-23 11:52:42 +05:30
Tak Hoffman 9e1a13bf4c
Gateway/UI: data-driven agents tools catalog with provenance (openclaw#24199) thanks @Takhoffman
Verified:
- pnpm install --frozen-lockfile
- pnpm build
- gh pr checks 24199 --watch --fail-fast

Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-02-22 23:55:59 -06:00
Peter Steinberger 558a0137bb chore(release): bump versions to 2026.2.23 2026-02-23 05:13:46 +01:00
Tak Hoffman f8171ffcdc
Config UI: tag filters and complete schema help/labels coverage (#23796)
* Config UI: add tag filters and complete schema help/labels

* Config UI: finalize tags/help polish and unblock test suite

* Protocol: regenerate Swift gateway models
2026-02-22 15:17:07 -06:00
Peter Steinberger e80c803fa8 fix(security): block shell env allowlist bypass in system.run 2026-02-22 12:47:05 +01:00
Yuzuru Suzuki 6f7e5f92c3
fix: add operator.read and operator.write to default CLI scopes (#22582)
Merged via /review-pr -> /prepare-pr -> /merge-pr.

Prepared head SHA: 8569fc88c9
Co-authored-by: YuzuruS <1485195+YuzuruS@users.noreply.github.com>
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com>
Reviewed-by: @obviyus
2026-02-22 16:36:18 +05:30
Peter Steinberger a96d89f343 refactor: unify exec wrapper resolution and parity fixtures 2026-02-22 10:26:44 +01:00
Peter Steinberger 2b63592be5 fix: harden exec allowlist wrapper resolution 2026-02-22 09:52:02 +01:00
Peter Steinberger c2c7114ed3 fix(security): block HOME and ZDOTDIR env override injection 2026-02-22 09:42:55 +01:00
Peter Steinberger 8887f41d7d refactor(gateway)!: remove legacy v1 device-auth handshake 2026-02-22 09:27:03 +01:00
Peter Steinberger bfe016fa29 fix: clear stale remote discovery endpoints (#21618) (thanks @bmendonca3) 2026-02-22 00:04:36 +01:00
Brian Mendonca 617e38cec0 Security/macos: enforce wss for non-loopback direct gateway 2026-02-21 23:57:34 +01:00
Brian Mendonca 8942ac04a8 fix(security): fail closed on unauthenticated discovery routing 2026-02-21 23:57:34 +01:00
Peter Steinberger 1bc5c2a7e9 refactor: unify exec shell parser parity and gateway websocket test helpers 2026-02-21 23:17:12 +01:00
Peter Steinberger 2028ca4428 fix(macos): unify exec allowlist validation pipeline 2026-02-21 23:09:07 +01:00
Peter Steinberger dd41fadcaf fix(macos): enforce path-only exec allowlist patterns 2026-02-21 22:58:40 +01:00
Peter Steinberger 90a378ca3a fix(macos): block quoted shell substitution in allowlist checks 2026-02-21 22:57:53 +01:00
Peter Steinberger 25e89cc863 fix(security): harden shell env fallback 2026-02-21 20:01:08 +01:00
Nimrod Gutman d6353cc54b fix(ios): suppress expected speech cancellation errors 2026-02-21 20:52:05 +02:00
Nimrod Gutman 8a661e30c9 fix(ios): prefetch talk tts segments 2026-02-21 20:52:05 +02:00
Peter Steinberger e371da38aa fix(macos): consolidate exec approval evaluation 2026-02-21 19:30:35 +01:00
Peter Steinberger fa89ae8e9e fix: stabilize swift protocol generation and flaky tests 2026-02-21 16:53:46 +01:00
Peter Steinberger 5da03e6221 fix(macos): harden exec allowlist shell-chain checks 2026-02-21 16:27:18 +01:00
Onur 8178ea472d
feat: thread-bound subagents on Discord (#21805)
* docs: thread-bound subagents plan

* docs: add exact thread-bound subagent implementation touchpoints

* Docs: prioritize auto thread-bound subagent flow

* Docs: add ACP harness thread-binding extensions

* Discord: add thread-bound session routing and auto-bind spawn flow

* Subagents: add focus commands and ACP/session binding lifecycle hooks

* Tests: cover thread bindings, focus commands, and ACP unbind hooks

* Docs: add plugin-hook appendix for thread-bound subagents

* Plugins: add subagent lifecycle hook events

* Core: emit subagent lifecycle hooks and decouple Discord bindings

* Discord: handle subagent bind lifecycle via plugin hooks

* Subagents: unify completion finalizer and split registry modules

* Add subagent lifecycle events module

* Hooks: fix subagent ended context key

* Discord: share thread bindings across ESM and Jiti

* Subagents: add persistent sessions_spawn mode for thread-bound sessions

* Subagents: clarify thread intro and persistent completion copy

* test(subagents): stabilize sessions_spawn lifecycle cleanup assertions

* Discord: add thread-bound session TTL with auto-unfocus

* Subagents: fail session spawns when thread bind fails

* Subagents: cover thread session failure cleanup paths

* Session: add thread binding TTL config and /session ttl controls

* Tests: align discord reaction expectations

* Agent: persist sessionFile for keyed subagent sessions

* Discord: normalize imports after conflict resolution

* Sessions: centralize sessionFile resolve/persist helper

* Discord: harden thread-bound subagent session routing

* Rebase: resolve upstream/main conflicts

* Subagents: move thread binding into hooks and split bindings modules

* Docs: add channel-agnostic subagent routing hook plan

* Agents: decouple subagent routing from Discord

* Discord: refactor thread-bound subagent flows

* Subagents: prevent duplicate end hooks and orphaned failed sessions

* Refactor: split subagent command and provider phases

* Subagents: honor hook delivery target overrides

* Discord: add thread binding kill switches and refresh plan doc

* Discord: fix thread bind channel resolution

* Routing: centralize account id normalization

* Discord: clean up thread bindings on startup failures

* Discord: add startup cleanup regression tests

* Docs: add long-term thread-bound subagent architecture

* Docs: split session binding plan and dedupe thread-bound doc

* Subagents: add channel-agnostic session binding routing

* Subagents: stabilize announce completion routing tests

* Subagents: cover multi-bound completion routing

* Subagents: suppress lifecycle hooks on failed thread bind

* tests: fix discord provider mock typing regressions

* docs/protocol: sync slash command aliases and delete param models

* fix: add changelog entry for Discord thread-bound subagents (#21805) (thanks @onutc)

---------

Co-authored-by: Shadow <hi@shadowing.dev>
2026-02-21 16:14:55 +01:00
Peter Steinberger f202e73077 refactor(security): centralize host env policy and harden env ingestion 2026-02-21 13:04:39 +01:00
Peter Steinberger 2cdbadee1f fix(security): block startup-file env injection across host execution paths 2026-02-21 11:44:20 +01:00
Peter Steinberger 9231d7d30f chore: bump version to 2026.2.21 2026-02-21 11:02:30 +01:00
Nimrod Gutman 78caf9ec3d
feat(ios): surface gateway talk defaults and refresh icon assets (#22530)
Merged via /review-pr -> /prepare-pr -> /merge-pr.

Prepared head SHA: 54f3a40e22
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com>
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com>
Reviewed-by: @ngutman
2026-02-21 10:34:20 +02:00
Vincent Koc f4a59eb5d8
Chore: harden A2UI bundle dependency resolution (#22507)
Merged via /review-pr -> /prepare-pr -> /merge-pr.

Prepared head SHA: d84c5bde51
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com>
Reviewed-by: @obviyus
2026-02-21 13:16:31 +05:30
Vincent Koc 55eab106ac
chore: remove root long and rolldown deps (#22481)
* chore(deadcode): add deadcode scanning and remove unused lockfile deps

* chore(changelog): mention deadcode CI scan pass

* ci: disable deadcode job temporarily

* docs(changelog): add PR ref and thanks for deadcode scan entry

* ci: comment out deadcode job condition while keeping it disabled

* Deps: remove dead root dependency from package manifest

* Changelog: reference PR for deadcode dependency cleanup

* Deps: remove unused root signal-utils

* Chore: remove unused lit context deps

* Chore: remove unused root lit dependency

* Chore: remove root long and rolldown deps

* Chore: add changelog for root long/rolldown removal

* Chore: fix a2ui bundling after root lit dependency removal

* Chore: simplify a2ui bundle script dependencies
2026-02-21 02:05:41 -05:00
Harold Hunt 844d84a7f5
Issue 17774 - Usage - Local - Show data from midnight to midnight of selected dates for browser time zone (AI assisted) (openclaw#19357) thanks @huntharo
Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm check
- pnpm test:macmini (override approved by Tak for this run; local baseline failures outside PR scope)

Co-authored-by: huntharo <5617868+huntharo@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-02-20 20:09:03 -06:00