feat(vela-ui): add placeholder push-to-talk control shell
This commit is contained in:
@@ -16,6 +16,7 @@ Current UI baseline:
|
||||
- the browser opens a WebSocket directly to `/ws`
|
||||
- the UI tracks connection status separately from gateway session status
|
||||
- the UI can send `mocked.turn.trigger` after `session.ready` while connected to request one deterministic mocked turn for the active session
|
||||
- the UI exposes a push-to-talk mic control shell that sends placeholder `input_audio.append` on press and `input_audio.commit` on release without capturing real audio
|
||||
|
||||
## WebSocket Message Envelope
|
||||
|
||||
@@ -62,6 +63,7 @@ type ClientEvent =
|
||||
- a mocked turn emits deterministic `transcript.final`, `response.text.delta`, `response.completed`, and `session.state` events in protocol-valid order
|
||||
- `input_audio.append` updates the ephemeral session record and moves the session to `listening`
|
||||
- `input_audio.commit` resets the minimal buffered state and returns the session to `idle`
|
||||
- after a completed placeholder input cycle, the same socket can still send `mocked.turn.trigger`
|
||||
- `response.cancel` is safe to send even when no mocked turn is active
|
||||
- `response.cancel` stops any still-pending mocked turn events for the active turn and resets the minimal session state back to `idle`
|
||||
- a second mocked-turn trigger during an active mocked turn produces `error` with code `mocked_turn_in_flight`
|
||||
@@ -86,6 +88,9 @@ Notes:
|
||||
- this UI state is transport-oriented and is separate from the shared gateway `session.state` payload
|
||||
- `session.state` currently reflects the gateway session phase (`idle`, `listening`, `thinking`, `speaking`)
|
||||
- the UI disables the mocked-turn control until `session.ready` arrives, while disconnected, or while a mocked turn is already in flight
|
||||
- the UI disables the mic control while disconnected, before `session.ready`, or while a mocked turn is already in flight
|
||||
- pressing the mic control sends one placeholder `input_audio.append` chunk and releasing it sends `input_audio.commit`
|
||||
- the UI copy explicitly labels the mic button as a control shell and not real microphone capture
|
||||
- the UI shows a cancel control and enables it only while a mocked turn is active
|
||||
- after cancel returns the gateway to `idle`, the UI clears the active-turn indicator but keeps any transcript or response text that was already rendered
|
||||
- the UI treats malformed server messages, browser WebSocket errors, and gateway `error` events as safe error states instead of throwing
|
||||
|
||||
Reference in New Issue
Block a user