Skip to content

feat(web): persist and send voice input message across session navigation (#1435) - #1436

Open
swear01 wants to merge 51 commits into
tiann:mainfrom
swear01:feat/web-persist-voice-input-session-switch
Open

swear01 wants to merge 51 commits into
tiann:mainfrom
swear01:feat/web-persist-voice-input-session-switch

Conversation

@swear01

@swear01 swear01 commented Aug 9, 2026 •

Copy link
Copy Markdown
Contributor

Closes #1435.

Result

An explicitly requested voice send finishes for its original session even if the operator navigates away while transcription or delivery is pending. The voice resolver fetches current session activity and permission settings when transcription finishes, resumes inactive targets before delivery, and avoids reusing render-time activity. Background completion respects the operator's current page.

Standard and realtime sends preserve source and destination follow-up drafts on success and failure, including new text identical to the submitted draft. Session-scoped edit revisions distinguish a fresh follow-up from an unchanged persisted baseline; resumed transfers sample live composer text when persistence completes. Failed delivery restores the retryable transcript without reviving intentionally deleted text.

Realtime finalization owns the already-locked ElevenLabs Scribe client connection until a committed transcript, bounded fallback, or error. Ordinary recording cancellation still closes it. The current upstream composer layout retains both the large Stop control and the compact voice Send path, alongside existing rich-input flushing, attachments, scheduling, and delivery-mode guards.

Voice sends carry a client localId, like ordinary sends. Without one, shared Codex assigned the turn a random clientUserMessageId and echoed the user message back under it; the hub could not dedupe the echo, so every voice message appeared twice in Codex sessions.

The direct-send callback also refreshes when empty attachment hydration completes, so its visible eligibility and the invoked recording action remain consistent.

Validation — 2026-10-18

  • Merged upstream f13a1aaea. Root typecheck and the complete Web suite passed: 3,439 tests.
  • sendVoiceMessage regression coverage asserts a distinct local-* id per send; dictation tests now require a localId instead of null. Production evidence before the fix: each dictated Codex message was stored as a webapp row with localId: null followed by an identical cli echo.

Validation — 2026-10-14

  • Integrated upstream 5847b034e into the existing branch while retaining its previous head as an ancestor.
  • Root typecheck, all five package suites, and fixture generation passed after conflict resolution; generated fixtures had no drift.
  • After the follow-up draft repair, Web typecheck and its complete suite passed: 3,414 tests. Unchanged packages retain the integration's passing checks.
  • Regression coverage reproduces same-text follow-up loss before the fix, then exercises standard/realtime, same-session/resume, live/unmounted, and successful/failed delivery. It also covers intentionally cleared drafts and delayed realtime commit after unmount.
  • The final composer callback repair passed Web typecheck and 45 composer/send-error/button tests. Its regression reproduces an eligible Send button invoking the stale recording action before the dependency fix.
  • The final resolver repair passed Web typecheck and 61 unique related tests, including a real resolver wired into delayed background ElevenLabs finalization after the source goes offline, active/inactive transitions, current permissions, and lookup/resume errors.
  • The pushed head requests fresh GitHub CI and HAPI Bot review; their current results are shown in Checks.

Live transcription-provider finalization remains unverified.

AI disclosure: Codex assisted with integration, regression tests, and verification.

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:web Web PWA / React client community-pr PR from non-collaborator contributor enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(web): persist and send voice input message across session navigation

2 participants