From c46b1283d1f34cfe5ecaed044b08801c2d450892 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Mon, 23 Feb 2026 22:35:58 -0600 Subject: [PATCH] feat: voice assistant integration, PiP window fixes, widget improvements and pixel art scrollbar - Android voice assistant: RecognitionService, VoiceInteractionSession with startAssistantActivity, es-HN speech recognition - Voice transcript sent to first alive terminal via WebSocket, opens FloatingTranscriptDebug on correct session - PiP window: fix close button using getCurrentWebviewWindow(), add mini/restore toggle, remove alwaysOnTop - Add webview-close and window-destroy permissions to capabilities - Pixel art ocean scrollbar on /transcript-debug respecting scroll nav mode settings - Widget improvements: terminal list service, input widget provider, updated layouts --- frontend/src/App.vue | 40 +-- frontend/src/components/WindowControls.vue | 52 ++-- frontend/src/pages/TranscriptDebugPage.vue | 226 ++++++++++++++- server/routes/session-state-proxy.ts | 14 +- src-tauri/capabilities/default.json | 14 +- .../android/app/src/main/AndroidManifest.xml | 18 +- .../agentui/desktop/InputWidgetProvider.kt | 217 ++++++++++++++ .../java/com/agentui/desktop/MainActivity.kt | 269 +++++++++--------- .../desktop/TerminalListWidgetService.kt | 130 +++++++-- .../main/res/layout/widget_terminal_item.xml | 28 +- .../src/main/res/layout/widget_transcript.xml | 75 +++-- .../app/src/main/res/values/strings.xml | 1 + .../main/res/xml/transcript_widget_info.xml | 2 +- src-tauri/tauri.conf.json | 3 +- 14 files changed, 837 insertions(+), 252 deletions(-) create mode 100644 src-tauri/gen/android/app/src/main/java/com/agentui/desktop/InputWidgetProvider.kt diff --git a/frontend/src/App.vue b/frontend/src/App.vue index b242339..6163e9d 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -32,6 +32,7 @@ const serverConfig = isTauri ? useServerConfig() : null const showServerConfig = ref(false) const needsServerConfig = computed(() => isTauri && serverConfig && !serverConfig.isConfigured) +const isPipWindow = computed(() => route.query.pip === '1') const showVoice = ref(false) const showTranscriptDebug = ref(false) const showDebugConsole = ref(false) @@ -229,23 +230,16 @@ onMounted(async () => { return true } - // Bridge for Android voice assistant — opens FloatingTranscriptDebug on the target terminal + // Bridge for Android voice assistant — navigates to transcript-debug page on the target terminal ;(window as any).__VOICE_OPEN_TERMINAL__ = (ephemeralSessionId: string) => { const entry = sessionState.terminalRegistry.find( t => t.ephemeralSessionId === ephemeralSessionId ) - if (entry && transcriptDebugRef.value) { - transcriptDebugRef.value.switchToTerminal(entry.transcriptSessionId) - showTranscriptDebug.value = true - return true - } - // Fallback: open on first terminal - if (sessionState.terminalRegistry.length && transcriptDebugRef.value) { - transcriptDebugRef.value.switchToTerminal(sessionState.terminalRegistry[0].transcriptSessionId) - showTranscriptDebug.value = true - return true - } - return false + const idx = entry + ? sessionState.terminalRegistry.indexOf(entry) + 1 + : 1 + router.push(`/transcript-debug/${idx}`) + return true } // Sync Windows titlebar color with CSS variable @@ -372,8 +366,8 @@ if (serverConfig) {