manjunath22466 and Darren Dignam
af461febae
feat(voice): add typed AI chat beside voice
...
Chat sits next to the mic in the command dock. Replies are silent and never
request the microphone; the first message connects with the selected provider
and runs the same map actions as voice through each provider's text API
(OpenAI OPENAI_CHAT_MODEL, Gemini GEMINI_CHAT_MODEL via generateContent, which
never starts Live). Only one mode runs at a time.
- Chat panel rendered by the voice control presenter: conversation, recent and
quick-command suggestions, Up/Down history, attachments (map-layer
references or small UTF-8 text files, sent only with the message)
- Chat and voice panels sit above the dock or dock into the right rail's
column; minimized bars sit centred above the dock, and height animates on
swaps
- A centred panel steps down to its bar for the Location and Visual Presets
trays without moving focus, rests above an open tray, and docks right while
expanded over one; it returns to the centre once the trays close
- Minimized voice previews the last sentence from each side; the empty Voice
Preview suggests things to say
- Settings opened from chat keep chat's frame and show the shared AI provider
and quick commands; voice Settings show Back to voice
- Closing chat ends a typed session; the voice panel's close turns voice off
- The dock widens its voice control for the chat button and restyles its
wings, which show icons only at 900px and below; assistant panels share the
left panels' glass, and Cyber keeps its own surfaces
- Server text-chat handlers with body, time and per-IP limits
(GEV_RATELIMIT_*_CHAT_PER_MIN), documented in SECURITY.md; tests and all
eleven locales
Co-authored-by: Darren Dignam <[email protected] >
2026-11-02 20:56:39 +05:30
..
2026-10-19 15:19:07 +01:00
2026-11-01 22:40:28 -08:00
2026-11-01 17:37:56 -08:00
2026-11-02 00:09:18 -08:00
2026-10-29 14:04:11 +00:00
2026-11-02 20:56:39 +05:30
2026-11-02 06:58:29 -08:00
2026-11-01 16:47:39 -08:00
2026-11-01 20:15:02 -08:00
2026-11-01 16:47:39 -08:00
2026-11-01 16:47:39 -08:00
2026-10-24 23:39:51 -07:00
2026-10-28 14:59:33 -07:00
2026-10-29 14:33:17 +00:00
2026-10-22 19:00:40 -07:00
2026-11-02 00:09:18 -08:00
2026-11-01 16:47:39 -08:00
2026-10-29 11:20:49 +00:00
2026-10-31 23:51:47 -07:00
2026-11-01 21:50:25 -08:00
2026-11-01 23:42:33 -08:00
2026-11-02 20:56:39 +05:30
2026-10-29 11:34:19 +00:00
2026-11-02 20:56:39 +05:30
2026-09-12 21:55:18 -07:00
2026-09-24 01:52:41 -05:00
2026-10-22 17:46:57 -07:00
2026-10-31 20:03:17 -07:00
2026-10-22 19:00:40 -07:00
2026-09-28 19:07:57 -05:00
2026-11-01 13:53:31 -08:00
2026-10-23 14:51:42 -07:00
2026-10-22 19:00:40 -07:00
2026-10-22 18:09:37 -07:00
2026-09-15 07:26:32 -07:00
2026-10-22 18:09:37 -07:00
2026-10-31 21:20:27 -07:00
2026-10-29 11:20:49 +00:00
2026-10-31 21:20:27 -07:00
2026-10-16 21:00:28 +04:00
2026-10-16 21:00:28 +04:00
2026-10-22 19:00:40 -07:00
2026-08-24 17:02:16 -05:00
2026-11-01 15:01:41 -08:00
2026-11-01 21:41:49 -08:00
2026-11-01 21:41:49 -08:00
2026-10-31 16:39:08 -07:00
2026-09-15 07:26:32 -07:00
2026-08-24 17:02:16 -05:00
2026-09-23 20:31:56 -07:00
2026-09-23 20:31:56 -07:00
2026-10-29 11:20:49 +00:00
2026-10-29 11:20:49 +00:00
2026-10-14 12:23:49 -07:00
2026-09-15 07:26:32 -07:00
2026-10-22 19:26:09 -07:00
2026-10-16 21:00:28 +04:00
2026-08-24 17:02:16 -05:00
2026-11-01 11:02:39 -08:00
2026-11-01 13:23:51 -08:00
2026-10-02 20:17:21 -07:00
2026-10-22 22:09:37 -07:00
2026-11-01 16:47:39 -08:00
2026-11-01 16:47:39 -08:00
2026-10-31 22:18:50 -07:00
2026-09-23 20:31:56 -07:00
2026-09-23 20:31:56 -07:00
2026-09-23 20:31:56 -07:00
2026-09-23 20:31:56 -07:00
2026-09-23 20:31:56 -07:00
2026-09-14 18:55:24 -05:00
2026-10-16 17:09:03 +05:30
2026-10-25 17:54:16 -07:00
2026-10-19 23:23:52 +01:00
2026-10-22 22:09:37 -07:00
2026-10-31 22:53:03 -07:00
2026-10-31 22:53:03 -07:00
2026-11-02 06:51:15 -08:00
2026-10-31 22:53:03 -07:00
2026-11-02 20:56:39 +05:30
2026-11-02 20:56:39 +05:30
2026-11-02 20:56:39 +05:30
2026-09-16 08:48:31 -04:00
2026-09-16 08:48:31 -04:00
2026-09-21 11:56:33 +02:00
2026-09-12 16:37:04 -07:00
2026-09-11 15:08:23 -07:00
2026-09-21 11:30:49 +02:00
2026-11-01 16:47:39 -08:00
2026-10-30 23:23:58 -07:00
2026-10-31 22:18:50 -07:00
2026-10-31 22:18:50 -07:00
2026-10-29 10:41:58 +00:00
2026-09-23 20:31:56 -07:00
2026-10-16 21:00:28 +04:00
2026-10-16 21:00:28 +04:00
2026-10-29 20:05:03 +04:00
2026-10-31 22:18:50 -07:00
2026-10-28 14:59:33 -07:00
2026-10-31 22:18:50 -07:00
2026-10-31 22:18:50 -07:00
2026-10-13 19:13:12 +04:00
2026-10-13 19:13:12 +04:00
2026-10-22 18:09:37 -07:00
2026-10-28 14:09:56 +00:00
2026-10-28 14:09:56 +00:00
2026-11-01 16:47:39 -08:00
2026-11-01 16:47:39 -08:00
2026-10-19 21:40:40 +05:30
2026-10-16 17:09:03 +05:30
2026-10-16 21:00:28 +04:00
2026-09-21 17:28:23 +02:00
2026-10-16 21:00:28 +04:00
2026-10-16 21:00:28 +04:00
2026-10-16 21:00:28 +04:00
2026-10-31 19:51:39 -07:00
2026-10-02 20:02:48 -07:00
2026-10-02 19:56:42 -07:00
2026-10-31 12:05:19 -07:00
2026-10-19 11:01:18 +05:30
2026-10-20 06:31:50 +05:30
2026-10-22 19:00:40 -07:00
2026-08-24 17:02:16 -05:00
2026-09-15 07:26:32 -07:00
2026-08-24 17:02:16 -05:00
2026-10-12 19:24:42 +04:00
2026-11-01 14:48:31 -08:00
2026-10-31 19:28:02 -07:00
2026-11-01 15:38:23 -08:00
2026-09-13 18:59:29 -07:00
2026-09-13 18:59:29 -07:00
2026-09-13 18:59:29 -07:00
2026-10-04 10:49:06 -07:00
2026-10-30 17:47:52 -07:00
2026-10-16 19:28:59 +04:00
2026-10-16 21:00:28 +04:00
2026-10-17 13:17:43 -05:00
2026-09-28 19:07:57 -05:00
2026-10-25 17:04:43 -07:00
2026-10-25 17:04:43 -07:00
2026-09-15 07:26:32 -07:00
2026-09-28 19:07:57 -05:00
2026-10-16 16:52:01 +05:30
2026-11-01 13:53:31 -08:00
2026-09-12 19:55:02 -07:00
2026-11-01 14:48:31 -08:00
2026-10-16 17:09:03 +05:30
2026-10-25 18:53:32 -07:00
2026-08-31 17:49:45 -05:00
2026-09-14 19:34:23 -05:00
2026-10-23 12:26:41 +01:00
2026-10-20 15:12:33 +01:00
2026-08-24 17:02:16 -05:00
2026-08-24 17:02:16 -05:00
2026-11-01 11:59:30 -08:00
2026-11-01 09:56:47 -08:00
2026-09-15 07:26:32 -07:00
2026-08-24 17:02:16 -05:00
2026-10-30 16:28:08 -07:00
2026-10-30 16:41:29 -07:00
2026-09-14 20:09:41 -05:00
2026-10-25 12:36:50 -07:00
2026-10-25 12:36:50 -07:00
2026-10-26 00:24:27 -05:00
2026-10-26 00:24:27 -05:00
2026-10-26 00:24:27 -05:00
2026-10-24 08:25:42 -07:00
2026-11-01 14:28:02 -08:00
2026-10-26 15:31:51 -07:00
2026-11-01 16:47:39 -08:00
2026-10-26 13:56:19 -07:00
2026-10-31 19:51:39 -07:00
2026-08-24 17:02:16 -05:00
2026-11-01 08:33:18 -08:00
2026-10-24 23:14:55 -07:00
2026-11-02 20:56:39 +05:30
2026-09-14 18:55:24 -05:00
2026-10-14 11:59:14 -07:00
2026-10-29 11:34:19 +00:00
2026-10-14 15:06:52 -07:00
2026-10-14 15:06:52 -07:00
2026-09-15 07:26:32 -07:00
2026-08-24 17:02:16 -05:00