diff --git a/apps/api/src/scripts/generate-openapi.ts b/apps/api/src/scripts/generate-openapi.ts index ff79030151..e9036f0468 100644 --- a/apps/api/src/scripts/generate-openapi.ts +++ b/apps/api/src/scripts/generate-openapi.ts @@ -33,4 +33,4 @@ async function main() { } } -main(); +void main(); diff --git a/apps/api/src/stt/stt.test.ts b/apps/api/src/stt/stt.test.ts index 98091b62bc..e92fc84dcf 100644 --- a/apps/api/src/stt/stt.test.ts +++ b/apps/api/src/stt/stt.test.ts @@ -6,7 +6,7 @@ import { payloadIsControlMessage, } from "./utils"; -mock.module("../env", () => ({ +void mock.module("../env", () => ({ env: { DEEPGRAM_API_KEY: "test-deepgram-key", ASSEMBLYAI_API_KEY: "test-assemblyai-key", diff --git a/apps/bot/src/devin/poller.ts b/apps/bot/src/devin/poller.ts index 61a1cb830d..17c0870033 100644 --- a/apps/bot/src/devin/poller.ts +++ b/apps/bot/src/devin/poller.ts @@ -256,7 +256,9 @@ export class DevinStatusPoller { `Discovered ${this.trackedPRs.size} PRs with active Devin sessions`, ); } catch (error) { - this.logger.error(`Failed to discover existing sessions: ${error}`); + this.logger.error( + `Failed to discover existing sessions: ${error instanceof Error ? error.message : String(error)}`, + ); } } @@ -295,7 +297,7 @@ export class DevinStatusPoller { await this.checkPRStatus(pr, sessionsByPrUrl); } catch (error) { this.logger.error( - `Failed to check status for PR ${pr.prUrl}: ${error}`, + `Failed to check status for PR ${pr.prUrl}: ${error instanceof Error ? error.message : String(error)}`, ); } } @@ -329,7 +331,9 @@ export class DevinStatusPoller { return; } } catch (error) { - this.logger.error(`Failed to check PR state for ${pr.prUrl}: ${error}`); + this.logger.error( + `Failed to check PR state for ${pr.prUrl}: ${error instanceof Error ? error.message : String(error)}`, + ); } // Use cached session lookup instead of making individual API calls @@ -380,7 +384,7 @@ export class DevinStatusPoller { this.untrackPR(pr.prUrl); } catch (error) { this.logger.error( - `Failed to verify session status for ${pr.sessionId}: ${error}`, + `Failed to verify session status for ${pr.sessionId}: ${error instanceof Error ? error.message : String(error)}`, ); } return; @@ -510,7 +514,9 @@ export class DevinStatusPoller { `Updated check for PR ${pr.prUrl}: ${status} ${conclusion ?? ""}`, ); } catch (error) { - this.logger.error(`Failed to update check for PR ${pr.prUrl}: ${error}`); + this.logger.error( + `Failed to update check for PR ${pr.prUrl}: ${error instanceof Error ? error.message : String(error)}`, + ); } } } diff --git a/apps/bot/src/features/devin-status.ts b/apps/bot/src/features/devin-status.ts index 303bea4cb1..656da21fe7 100644 --- a/apps/bot/src/features/devin-status.ts +++ b/apps/bot/src/features/devin-status.ts @@ -38,7 +38,9 @@ export function registerDevinStatusHandler(app: Probot): void { try { await checkDevinSession(context, owner, repo, prNumber, headSha, prUrl); } catch (error) { - context.log.error(`[Devin] Failed to check Devin session: ${error}`); + context.log.error( + `[Devin] Failed to check Devin session: ${error instanceof Error ? error.message : String(error)}`, + ); } }, ); diff --git a/apps/bot/src/features/fix-merge-conflict.ts b/apps/bot/src/features/fix-merge-conflict.ts index 24fed70573..ec1224ddb9 100644 --- a/apps/bot/src/features/fix-merge-conflict.ts +++ b/apps/bot/src/features/fix-merge-conflict.ts @@ -59,7 +59,7 @@ export function registerFixMergeConflictHandler(app: Probot): void { } } catch (error) { context.log.error( - `Failed to handle merge conflict check for PR #${pr.number}: ${error}`, + `Failed to handle merge conflict check for PR #${pr.number}: ${error instanceof Error ? error.message : String(error)}`, ); } } diff --git a/apps/bot/src/features/pr-closed.ts b/apps/bot/src/features/pr-closed.ts index a878385097..fb053b8143 100644 --- a/apps/bot/src/features/pr-closed.ts +++ b/apps/bot/src/features/pr-closed.ts @@ -31,7 +31,7 @@ export function registerPrClosedHandler(app: Probot): void { ); } catch (error) { context.log.error( - `Failed to terminate Devin session for ${prUrl}: ${error}`, + `Failed to terminate Devin session for ${prUrl}: ${error instanceof Error ? error.message : String(error)}`, ); } }); diff --git a/apps/bot/src/server.ts b/apps/bot/src/server.ts index 582f8c749d..9d6cdbcadd 100644 --- a/apps/bot/src/server.ts +++ b/apps/bot/src/server.ts @@ -17,4 +17,4 @@ async function start() { await server.start(); } -start(); +void start(); diff --git a/apps/desktop/src/auth.tsx b/apps/desktop/src/auth.tsx index c3f21162c0..31227cb204 100644 --- a/apps/desktop/src/auth.tsx +++ b/apps/desktop/src/auth.tsx @@ -123,7 +123,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { } else { setSession(res.data.session); setServerReachable(true); - supabase.auth.startAutoRefresh(); + void supabase.auth.startAutoRefresh(); } }; @@ -149,20 +149,20 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { const unlistenFocus = appWindow.listen("tauri://focus", () => { if (serverReachable) { - supabase.auth.startAutoRefresh(); + void supabase.auth.startAutoRefresh(); } }); const unlistenBlur = appWindow.listen("tauri://blur", () => { - supabase.auth.stopAutoRefresh(); + void supabase.auth.stopAutoRefresh(); }); - onOpenUrl(([url]) => { - handleAuthCallback(url); + void onOpenUrl(([url]) => { + void handleAuthCallback(url); }); return () => { - unlistenFocus.then((fn) => fn()); - unlistenBlur.then((fn) => fn()); + void unlistenFocus.then((fn) => fn()); + void unlistenBlur.then((fn) => fn()); }; }, [serverReachable]); @@ -198,14 +198,14 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { ) { setServerReachable(false); setSession(data.session); - supabase.auth.startAutoRefresh(); + void supabase.auth.startAutoRefresh(); return; } } if (refreshData.session) { setSession(refreshData.session); setServerReachable(true); - supabase.auth.startAutoRefresh(); + void supabase.auth.startAutoRefresh(); } } } catch (e) { @@ -223,14 +223,14 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { } }; - initSession(); + void initSession(); const { data: { subscription }, } = supabase.auth.onAuthStateChange((event, session) => { if (event === "TOKEN_REFRESHED" && !session) { if (isLocalAuthServer(env.VITE_SUPABASE_URL)) { - clearAuthStorage(); + void clearAuthStorage(); setServerReachable(false); } } diff --git a/apps/desktop/src/billing.tsx b/apps/desktop/src/billing.tsx index 0d0e7f40d4..5ba6f482af 100644 --- a/apps/desktop/src/billing.tsx +++ b/apps/desktop/src/billing.tsx @@ -46,7 +46,7 @@ export function BillingProvider({ children }: { children: ReactNode }) { ); const upgradeToPro = useCallback(() => { - openUrl(`${env.VITE_APP_URL}/app/checkout?period=monthly`); + void openUrl(`${env.VITE_APP_URL}/app/checkout?period=monthly`); }, []); const value = useMemo( diff --git a/apps/desktop/src/components/changelog-listener.tsx b/apps/desktop/src/components/changelog-listener.tsx index 47280e6930..06c790c8b3 100644 --- a/apps/desktop/src/components/changelog-listener.tsx +++ b/apps/desktop/src/components/changelog-listener.tsx @@ -15,7 +15,7 @@ export function ChangelogListener() { } let unlisten: null | UnlistenFn = null; - events.updatedEvent + void events.updatedEvent .listen(({ payload: { previous, current } }) => { openNew({ type: "changelog", diff --git a/apps/desktop/src/components/chat/input.tsx b/apps/desktop/src/components/chat/input.tsx index 5266e4b69c..a5a035c2e8 100644 --- a/apps/desktop/src/components/chat/input.tsx +++ b/apps/desktop/src/components/chat/input.tsx @@ -44,7 +44,7 @@ export function ChatMessageInput({ return; } - analyticsCommands.event({ event: "chat_message_sent" }); + void analyticsCommands.event({ event: "chat_message_sent" }); onSendMessage(text, [{ type: "text", text }]); editorRef.current?.editor?.commands.clearContent(); }, [disabled, onSendMessage]); diff --git a/apps/desktop/src/components/main-app-layout.tsx b/apps/desktop/src/components/main-app-layout.tsx index e364dd3667..177f276270 100644 --- a/apps/desktop/src/components/main-app-layout.tsx +++ b/apps/desktop/src/components/main-app-layout.tsx @@ -38,7 +38,7 @@ const useNavigationEvents = () => { const webview = getCurrentWebviewWindow(); - windowsEvents + void windowsEvents .navigate(webview) .listen(({ payload }) => { if (payload.path === "/app/settings") { @@ -59,7 +59,7 @@ const useNavigationEvents = () => { openNew({ type: "settings" }); } } else { - navigate({ + void navigate({ to: payload.path, search: payload.search ?? undefined, }); @@ -69,7 +69,7 @@ const useNavigationEvents = () => { unlistenNavigate = fn; }); - windowsEvents + void windowsEvents .openTab(webview) .listen(({ payload }) => { openNew(payload.tab); @@ -78,9 +78,9 @@ const useNavigationEvents = () => { unlistenOpenTab = fn; }); - deeplink2Events.deepLinkEvent + void deeplink2Events.deepLinkEvent .listen(({ payload }) => { - navigate({ to: payload.to, search: payload.search }); + void navigate({ to: payload.to, search: payload.search }); }) .then((fn) => { unlistenDeepLink = fn; diff --git a/apps/desktop/src/components/main/body/contacts/organization-details.tsx b/apps/desktop/src/components/main/body/contacts/organization-details.tsx index 2bdbcb2b27..79fb1423d5 100644 --- a/apps/desktop/src/components/main/body/contacts/organization-details.tsx +++ b/apps/desktop/src/components/main/body/contacts/organization-details.tsx @@ -102,7 +102,7 @@ export function OrganizationDetailsColumn({ size="icon" onClick={(e) => { e.stopPropagation(); - openUrl(`mailto:${human.email}`); + void openUrl(`mailto:${human.email}`); }} title="Send email" > diff --git a/apps/desktop/src/components/main/body/extensions/index.tsx b/apps/desktop/src/components/main/body/extensions/index.tsx index d801a4ab5b..0f0551e855 100644 --- a/apps/desktop/src/components/main/body/extensions/index.tsx +++ b/apps/desktop/src/components/main/body/extensions/index.tsx @@ -247,7 +247,7 @@ export function TabContentExtension({ tab }: { tab: ExtensionTab }) { if (!iframeRef.current || !store) return; if (synchronizerRef.current) { - synchronizerRef.current.destroy(); + void synchronizerRef.current.destroy(); } const synchronizer = createIframeSynchronizer( @@ -266,7 +266,7 @@ export function TabContentExtension({ tab }: { tab: ExtensionTab }) { useEffect(() => { return () => { if (synchronizerRef.current) { - synchronizerRef.current.destroy(); + void synchronizerRef.current.destroy(); synchronizerRef.current = null; } }; diff --git a/apps/desktop/src/components/main/body/folders/index.tsx b/apps/desktop/src/components/main/body/folders/index.tsx index eb8d2043b4..ee4c7e29ee 100644 --- a/apps/desktop/src/components/main/body/folders/index.tsx +++ b/apps/desktop/src/components/main/body/folders/index.tsx @@ -32,8 +32,8 @@ export const TabItemFolder: TabItem> = ( const TabItemFolderAll: TabItem> = ({ tab, tabIndex, - handleCloseThis: handleCloseThis, - handleSelectThis: handleSelectThis, + handleCloseThis, + handleSelectThis, handleCloseAll, handleCloseOthers, }) => { diff --git a/apps/desktop/src/components/main/body/index.tsx b/apps/desktop/src/components/main/body/index.tsx index ec9fab1ba5..5712840b2d 100644 --- a/apps/desktop/src/components/main/body/index.tsx +++ b/apps/desktop/src/components/main/body/index.tsx @@ -54,7 +54,7 @@ export function Body() { ); useEffect(() => { - loadExtensionPanels(); + void loadExtensionPanels(); }, []); if (!currentTab) { diff --git a/apps/desktop/src/components/main/body/prompts/details.tsx b/apps/desktop/src/components/main/body/prompts/details.tsx index 6b316c5e66..70f6f2b20c 100644 --- a/apps/desktop/src/components/main/body/prompts/details.tsx +++ b/apps/desktop/src/components/main/body/prompts/details.tsx @@ -53,7 +53,7 @@ function PromptDetails({ selectedTask }: { selectedTask: TaskType }) { typeof templateCommands.render >[0]; - templateCommands + void templateCommands .render(templateName, {}) .then((result) => { if (result.status === "ok") { diff --git a/apps/desktop/src/components/main/body/sessions/floating/listen.tsx b/apps/desktop/src/components/main/body/sessions/floating/listen.tsx index 873bd6e33e..866764b46d 100644 --- a/apps/desktop/src/components/main/body/sessions/floating/listen.tsx +++ b/apps/desktop/src/components/main/body/sessions/floating/listen.tsx @@ -269,10 +269,10 @@ function OptionsMenu({ fromResult(miscCommands.audioImport(sessionId, path)), Effect.tap(() => Effect.sync(() => { - queryClient.invalidateQueries({ + void queryClient.invalidateQueries({ queryKey: ["audio", sessionId, "exist"], }); - queryClient.invalidateQueries({ + void queryClient.invalidateQueries({ queryKey: ["audio", sessionId, "url"], }); }), diff --git a/apps/desktop/src/components/main/body/sessions/note-input/header.tsx b/apps/desktop/src/components/main/body/sessions/note-input/header.tsx index bb9a4ce976..c312938751 100644 --- a/apps/desktop/src/components/main/body/sessions/note-input/header.tsx +++ b/apps/desktop/src/components/main/body/sessions/note-input/header.tsx @@ -100,7 +100,7 @@ function HeaderTabEnhanced({ const handleRegenerateClick = useCallback( (e: React.MouseEvent) => { e.stopPropagation(); - onRegenerate(null); + void onRegenerate(null); }, [onRegenerate], ); @@ -251,7 +251,7 @@ function CreateOtherFormatButton({ return; } - analyticsCommands.event({ + void analyticsCommands.event({ event: "template_summary_created", template_id: templateId, }); @@ -472,7 +472,7 @@ function useEnhanceLogic(sessionId: string, enhancedNoteId: string) { setMissingModelError(null); - analyticsCommands.event({ + void analyticsCommands.event({ event: "summary_generated", is_auto: false, }); diff --git a/apps/desktop/src/components/main/body/sessions/note-input/raw.tsx b/apps/desktop/src/components/main/body/sessions/note-input/raw.tsx index 5d3b08cacc..4d5c52cae9 100644 --- a/apps/desktop/src/components/main/body/sessions/note-input/raw.tsx +++ b/apps/desktop/src/components/main/body/sessions/note-input/raw.tsx @@ -63,9 +63,12 @@ export const RawEditor = forwardRef< hasTrackedWriteRef.current = false; }, [sessionId]); - const hasNonEmptyText = (node?: JSONContent): boolean => - !!node?.text?.trim() || - !!node?.content?.some((child) => hasNonEmptyText(child)); + const hasNonEmptyText = useCallback( + (node?: JSONContent): boolean => + !!node?.text?.trim() || + !!node?.content?.some((child) => hasNonEmptyText(child)), + [], + ); const handleChange = useCallback( (input: JSONContent) => { @@ -75,14 +78,14 @@ export const RawEditor = forwardRef< const hasContent = hasNonEmptyText(input); if (hasContent) { hasTrackedWriteRef.current = true; - analyticsCommands.event({ + void analyticsCommands.event({ event: "note_written", has_content: true, }); } } }, - [persistChange], + [persistChange, hasNonEmptyText], ); const mentionConfig = useMemo( diff --git a/apps/desktop/src/components/main/body/sessions/note-input/transcript/editing-controls.tsx b/apps/desktop/src/components/main/body/sessions/note-input/transcript/editing-controls.tsx index d1db5bcf75..2090f9a40b 100644 --- a/apps/desktop/src/components/main/body/sessions/note-input/transcript/editing-controls.tsx +++ b/apps/desktop/src/components/main/body/sessions/note-input/transcript/editing-controls.tsx @@ -90,7 +90,7 @@ export function EditingControls({ const handleRedoClick = useCallback(() => { setOpen(false); - handleRedoTranscript(); + void handleRedoTranscript(); }, [handleRedoTranscript]); const viewModeControls = audioExists ? ( diff --git a/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/hooks.ts b/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/hooks.ts index b145694aed..c51237570f 100644 --- a/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/hooks.ts +++ b/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/hooks.ts @@ -105,7 +105,7 @@ export function useFinalSpeakerHints( }); return convertStorageHintsToRuntime(storageHints, wordIdToIndex); - }, [store, wordIds, speakerHintIds, transcriptId]); + }, [store, wordIds, speakerHintIds]); } export function useTranscriptOffset(transcriptId: string): number { diff --git a/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/index.tsx b/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/index.tsx index 1bf12b0551..1edc2d8ea5 100644 --- a/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/index.tsx +++ b/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/index.tsx @@ -95,7 +95,7 @@ export function TranscriptContainer({ const handleSelectionAction = (action: string, selectedText: string) => { if (action === "copy") { - navigator.clipboard.writeText(selectedText); + void navigator.clipboard.writeText(selectedText); } }; diff --git a/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/segment-header.tsx b/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/segment-header.tsx index 9694410a93..02a827818b 100644 --- a/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/segment-header.tsx +++ b/apps/desktop/src/components/main/body/sessions/note-input/transcript/shared/segment-header.tsx @@ -56,7 +56,7 @@ export function SegmentHeader({ formatTimestamp, ); return `${from} - ${to}`; - }, [segment.words.length, formatTimestamp]); + }, [segment.words, formatTimestamp]); const color = useSegmentColor(segment.key); const label = useSpeakerLabel(segment.key, speakerLabelManager); diff --git a/apps/desktop/src/components/main/body/sessions/outer-header/overflow.tsx b/apps/desktop/src/components/main/body/sessions/outer-header/overflow.tsx index 5de1702f24..c341b23d63 100644 --- a/apps/desktop/src/components/main/body/sessions/outer-header/overflow.tsx +++ b/apps/desktop/src/components/main/body/sessions/outer-header/overflow.tsx @@ -261,7 +261,7 @@ function DeleteNote({ sessionId }: { sessionId: string }) { const handleDeleteNote = useCallback(() => { deleteRow(); - miscCommands.audioDelete(sessionId); + void miscCommands.audioDelete(sessionId); }, [sessionId, deleteRow]); return ( @@ -291,7 +291,7 @@ function DeleteRecording({ sessionId }: { sessionId: string }) { ]); }, onSuccess: () => { - queryClient.invalidateQueries({ + void queryClient.invalidateQueries({ predicate: (query) => query.queryKey.length >= 2 && query.queryKey[0] === "audio" && diff --git a/apps/desktop/src/components/main/body/sessions/title-input.tsx b/apps/desktop/src/components/main/body/sessions/title-input.tsx index 36f46fc736..80bd1f25b2 100644 --- a/apps/desktop/src/components/main/body/sessions/title-input.tsx +++ b/apps/desktop/src/components/main/body/sessions/title-input.tsx @@ -22,9 +22,11 @@ export function TitleInput({ main.STORE_ID, ); + const editorId = editor ? "active" : "inactive"; + return ( handleEditTitle(e.target.value)} diff --git a/apps/desktop/src/components/main/body/templates/template-form.tsx b/apps/desktop/src/components/main/body/templates/template-form.tsx index 4a27f3213f..617a9ff7ea 100644 --- a/apps/desktop/src/components/main/body/templates/template-form.tsx +++ b/apps/desktop/src/components/main/body/templates/template-form.tsx @@ -89,7 +89,7 @@ export function TemplateForm({ form: { errors }, } = formApi.getAllErrors(); if (errors.length === 0) { - formApi.handleSubmit(); + void formApi.handleSubmit(); } }); }, diff --git a/apps/desktop/src/components/main/body/update.tsx b/apps/desktop/src/components/main/body/update.tsx index 5cbd8b4a3e..d6e07785f3 100644 --- a/apps/desktop/src/components/main/body/update.tsx +++ b/apps/desktop/src/components/main/body/update.tsx @@ -29,11 +29,12 @@ export function Update() { setShow(!!pendingUpdate.data); }, [pendingUpdate.data]); + const { refetch } = pendingUpdate; useEffect(() => { let unlisten: null | UnlistenFn = null; - events.updateReadyEvent + void events.updateReadyEvent .listen(({ payload: { version: _ } }) => { - pendingUpdate.refetch(); + void refetch(); }) .then((f) => { unlisten = f; @@ -43,7 +44,7 @@ export function Update() { unlisten?.(); unlisten = null; }; - }, []); + }, [refetch]); const handleInstallUpdate = useCallback(async () => { try { diff --git a/apps/desktop/src/components/main/shared.ts b/apps/desktop/src/components/main/shared.ts index 04286ae333..cce0f09433 100644 --- a/apps/desktop/src/components/main/shared.ts +++ b/apps/desktop/src/components/main/shared.ts @@ -32,7 +32,10 @@ export function useNewNote({ title: "", }); - analyticsCommands.event({ event: "note_created", has_event_id: false }); + void analyticsCommands.event({ + event: "note_created", + has_event_id: false, + }); const ff = behavior === "new" ? openNew : openCurrent; ff({ type: "sessions", id: sessionId }); diff --git a/apps/desktop/src/components/main/sidebar/devtool.tsx b/apps/desktop/src/components/main/sidebar/devtool.tsx index c904c19f56..e106924bac 100644 --- a/apps/desktop/src/components/main/sidebar/devtool.tsx +++ b/apps/desktop/src/components/main/sidebar/devtool.tsx @@ -127,12 +127,12 @@ function ExtensionStateMonitor() { function NavigationList() { const handleShowMain = useCallback(() => { - windowsCommands.windowShow({ type: "main" }); + void windowsCommands.windowShow({ type: "main" }); }, []); const handleShowOnboarding = useCallback(() => { - windowsCommands.windowShow({ type: "onboarding" }).then(() => { - windowsCommands.windowEmitNavigate( + void windowsCommands.windowShow({ type: "onboarding" }).then(() => { + void windowsCommands.windowEmitNavigate( { type: "onboarding" }, { path: "/app/onboarding", search: {} }, ); diff --git a/apps/desktop/src/components/main/sidebar/profile/ota/index.tsx b/apps/desktop/src/components/main/sidebar/profile/ota/index.tsx index d0e7d9fb29..43755413dc 100644 --- a/apps/desktop/src/components/main/sidebar/profile/ota/index.tsx +++ b/apps/desktop/src/components/main/sidebar/profile/ota/index.tsx @@ -48,7 +48,7 @@ export function UpdateChecker() {