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
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
081b1aa1ed
refactor(gateway): unify v3 auth payload builders and vectors
2026-02-26 15:08:50 +01:00
Peter Steinberger
490cb5174d
fix(apps): sign gateway device auth with v3 payload
2026-02-26 14:16:49 +01:00
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
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
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
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
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
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
Nimrod Gutman
d58f71571a
feat(talk): add provider-agnostic config with legacy compatibility
2026-02-24 15:02:52 +00:00
Peter Steinberger
2bad30b4d3
chore(release): bump version to 2026.2.24
2026-02-24 13:42:43 +00:00
Peter Steinberger
558a0137bb
chore(release): bump versions to 2026.2.23
2026-02-23 05:13:46 +01:00
Peter Steinberger
8887f41d7d
refactor(gateway)!: remove legacy v1 device-auth handshake
2026-02-22 09:27:03 +01:00
Peter Steinberger
9231d7d30f
chore: bump version to 2026.2.21
2026-02-21 11:02:30 +01:00
Peter Steinberger
f66b23de75
chore(release): bump versions to 2026.2.20
2026-02-20 00:02:53 +01:00
Peter Steinberger
b0e55283d5
chore: bump release metadata to 2026.2.19
2026-02-19 16:17:34 +01:00
Peter Steinberger
4bf3338834
chore: bump version to 2026.2.18 unreleased
2026-02-18 04:40:06 +01:00
Peter Steinberger
9a2c39419e
chore(release): bump version to 2026.2.17
2026-02-17 23:08:55 +01:00
Peter Steinberger
39fa81dc96
chore: bump version to 2026.2.16
2026-02-16 06:08:47 +01:00
Peter Steinberger
31a16157f3
fix(android): make lint pass
2026-02-15 05:38:35 +01:00
Peter Steinberger
379b445582
chore: bump version to 2026.2.15
2026-02-15 04:50:31 +01:00
Peter Steinberger
1ff15e60d3
chore(release): bump versions to 2026.2.14
2026-02-15 02:53:35 +01:00
Peter Steinberger
054366dea4
fix(security): require explicit trust for first-time TLS pins
2026-02-14 17:55:20 +01:00
Peter Steinberger
d583782ee3
fix(security): harden discovery routing and TLS pins
2026-02-14 17:18:14 +01:00
Peter Steinberger
a3574bbde4
fix(android): add bcprov dependency for device identity store
2026-02-13 19:20:15 +00:00
Sk Akram
4c86821aca
fix: allow device-paired clients to retrieve TTS API keys ( #14613 )
...
* refactor: add config.get to READ_METHODS set
* refactor(gateway): scope talk secrets via talk.config
* fix: resolve rebase conflicts for talk scope refactor
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-02-13 17:07:49 +01:00
Ahmad Bitar
c179f71f42
feat: Android companion app improvements & gateway URL camera payloads ( #13541 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 9c179c9c31
Co-authored-by: smartprogrammer93 <33181301+smartprogrammer93@users.noreply.github.com>
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
Reviewed-by: @steipete
2026-02-13 16:49:28 +01:00