diff --git a/apps/x/apps/renderer/src/App.tsx b/apps/x/apps/renderer/src/App.tsx index 40923262..4b01c2fb 100644 --- a/apps/x/apps/renderer/src/App.tsx +++ b/apps/x/apps/renderer/src/App.tsx @@ -387,6 +387,8 @@ function FixedSidebarToggle({ onNewChat, onOpenSearch, meetingState, + meetingSummarizing, + meetingAvailable, onToggleMeeting, leftInsetPx, }: { @@ -397,6 +399,8 @@ function FixedSidebarToggle({ onNewChat: () => void onOpenSearch: () => void meetingState: MeetingTranscriptionState + meetingSummarizing: boolean + meetingAvailable: boolean onToggleMeeting: () => void leftInsetPx: number }) { @@ -433,31 +437,37 @@ function FixedSidebarToggle({ > - - - - - - {meetingState === 'recording' ? 'Stop meeting notes' : 'Take new meeting notes'} - - + {meetingAvailable && ( + + + + + + {meetingSummarizing ? 'Generating meeting notes...' : meetingState === 'recording' ? 'Stop meeting notes' : 'Take new meeting notes'} + + + )} {/* Back / Forward navigation */} {isCollapsed && ( <> @@ -3352,6 +3362,7 @@ function App() { }, [loadDirectory, navigateToFile, fileTabs]) const meetingNotePathRef = useRef(null) + const [meetingSummarizing, setMeetingSummarizing] = useState(false) const [showMeetingPermissions, setShowMeetingPermissions] = useState(false) const startMeetingAfterPermissions = useCallback(async () => { @@ -3371,6 +3382,7 @@ function App() { // Read the final transcript and generate meeting notes via LLM const notePath = meetingNotePathRef.current if (notePath) { + setMeetingSummarizing(true) try { const result = await window.ipc.invoke('workspace:readFile', { path: notePath, encoding: 'utf8' }) const fileContent = result.data @@ -3398,6 +3410,7 @@ function App() { } catch (err) { console.error('[meeting] Failed to generate meeting notes:', err) } + setMeetingSummarizing(false) meetingNotePathRef.current = null } } else if (meetingTranscription.state === 'idle') { @@ -4278,6 +4291,8 @@ function App() { onNewChat={handleNewChatTab} onOpenSearch={() => setIsSearchOpen(true)} meetingState={meetingTranscription.state} + meetingSummarizing={meetingSummarizing} + meetingAvailable={voiceAvailable} onToggleMeeting={() => { void handleToggleMeeting() }} leftInsetPx={isMac ? MACOS_TRAFFIC_LIGHTS_RESERVED_PX : 0} /> diff --git a/apps/x/apps/renderer/src/hooks/useMeetingTranscription.ts b/apps/x/apps/renderer/src/hooks/useMeetingTranscription.ts index e680b033..3fc40cce 100644 --- a/apps/x/apps/renderer/src/hooks/useMeetingTranscription.ts +++ b/apps/x/apps/renderer/src/hooks/useMeetingTranscription.ts @@ -12,6 +12,7 @@ const DEEPGRAM_PARAMS = new URLSearchParams({ interim_results: 'true', smart_format: 'true', punctuate: 'true', + language: 'en', }); const DEEPGRAM_LISTEN_URL = `wss://api.deepgram.com/v1/listen?${DEEPGRAM_PARAMS.toString()}`;