+ {/* Main message */}
+
+
+ Windows support in Maestro is actively being improved. You may encounter more bugs
+ compared to Mac and Linux versions. We're working on it!
+
+
+
+ {/* Recommendations */}
+
+
+ Recommendations
+
+
+ {/* Beta channel toggle */}
+
+
+ {/* Report issues */}
+
+
+ {/* Join Discord */}
+
+
+ {/* Create Debug Package */}
+
+
+
+ {/* Suppress checkbox */}
+
+
+
+ );
+}
+
+/**
+ * Debug function to show the Windows warning modal from the console.
+ * Usage: window.__showWindowsWarningModal()
+ */
+export function exposeWindowsWarningModalDebug(
+ setShowWindowsWarning: (show: boolean) => void
+): void {
+ (window as any).__showWindowsWarningModal = () => {
+ setShowWindowsWarning(true);
+ console.log('[WindowsWarningModal] Modal triggered via console command');
+ };
+}
+
+export default WindowsWarningModal;
diff --git a/src/renderer/constants/modalPriorities.ts b/src/renderer/constants/modalPriorities.ts
index 5a80294f..f19988b8 100644
--- a/src/renderer/constants/modalPriorities.ts
+++ b/src/renderer/constants/modalPriorities.ts
@@ -179,6 +179,9 @@ export const MODAL_PRIORITIES = {
/** Debug package generation modal */
DEBUG_PACKAGE: 605,
+ /** Windows warning modal - shown on startup for Windows users */
+ WINDOWS_WARNING: 615,
+
/** About/info modal */
ABOUT: 600,
diff --git a/src/renderer/contexts/ModalContext.tsx b/src/renderer/contexts/ModalContext.tsx
index 219a4886..0783eaf7 100644
--- a/src/renderer/contexts/ModalContext.tsx
+++ b/src/renderer/contexts/ModalContext.tsx
@@ -264,6 +264,10 @@ export interface ModalContextValue {
// Symphony Modal
symphonyModalOpen: boolean;
setSymphonyModalOpen: (open: boolean) => void;
+
+ // Windows Warning Modal
+ windowsWarningModalOpen: boolean;
+ setWindowsWarningModalOpen: (open: boolean) => void;
}
// Create context with null as default (will throw if used outside provider)
@@ -446,6 +450,9 @@ export function ModalProvider({ children }: ModalProviderProps) {
// Symphony Modal
const [symphonyModalOpen, setSymphonyModalOpen] = useState(false);
+ // Windows Warning Modal
+ const [windowsWarningModalOpen, setWindowsWarningModalOpen] = useState(false);
+
// Convenience methods
const openSettings = useCallback((tab?: SettingsTab) => {
if (tab) setSettingsTab(tab);
@@ -696,6 +703,10 @@ export function ModalProvider({ children }: ModalProviderProps) {
// Symphony Modal
symphonyModalOpen,
setSymphonyModalOpen,
+
+ // Windows Warning Modal
+ windowsWarningModalOpen,
+ setWindowsWarningModalOpen,
}),
[
// Settings Modal
@@ -811,6 +822,8 @@ export function ModalProvider({ children }: ModalProviderProps) {
tourFromWizard,
// Symphony Modal
symphonyModalOpen,
+ // Windows Warning Modal
+ windowsWarningModalOpen,
]
);
diff --git a/src/renderer/hooks/settings/useSettings.ts b/src/renderer/hooks/settings/useSettings.ts
index 07ac9848..d18bb4ef 100644
--- a/src/renderer/hooks/settings/useSettings.ts
+++ b/src/renderer/hooks/settings/useSettings.ts
@@ -350,6 +350,10 @@ export interface UseSettingsReturn {
// File tab auto-refresh settings
fileTabAutoRefreshEnabled: boolean;
setFileTabAutoRefreshEnabled: (value: boolean) => void;
+
+ // Windows warning suppression
+ suppressWindowsWarning: boolean;
+ setSuppressWindowsWarning: (value: boolean) => void;
}
export function useSettings(): UseSettingsReturn {
@@ -508,6 +512,9 @@ export function useSettings(): UseSettingsReturn {
// File tab auto-refresh settings
const [fileTabAutoRefreshEnabled, setFileTabAutoRefreshEnabledState] = useState(false); // Default: disabled
+ // Windows warning suppression
+ const [suppressWindowsWarning, setSuppressWindowsWarningState] = useState(false); // Default: show warning
+
// Wrapper functions that persist to electron-store
// PERF: All wrapped in useCallback to prevent re-renders
const setLlmProvider = useCallback((value: LLMProvider) => {
@@ -1322,6 +1329,12 @@ export function useSettings(): UseSettingsReturn {
window.maestro.settings.set('fileTabAutoRefreshEnabled', value);
}, []);
+ // Windows warning suppression toggle
+ const setSuppressWindowsWarning = useCallback((value: boolean) => {
+ setSuppressWindowsWarningState(value);
+ window.maestro.settings.set('suppressWindowsWarning', value);
+ }, []);
+
// Load settings from electron-store
// This function is called on mount and on system resume (after sleep/suspend)
// PERF: Use batch loading to reduce IPC calls from ~60 to 3
@@ -1396,6 +1409,7 @@ export function useSettings(): UseSettingsReturn {
const savedSshRemoteHonorGitignore = allSettings['sshRemoteHonorGitignore'];
const savedAutomaticTabNamingEnabled = allSettings['automaticTabNamingEnabled'];
const savedFileTabAutoRefreshEnabled = allSettings['fileTabAutoRefreshEnabled'];
+ const savedSuppressWindowsWarning = allSettings['suppressWindowsWarning'];
if (savedEnterToSendAI !== undefined) setEnterToSendAIState(savedEnterToSendAI as boolean);
if (savedEnterToSendTerminal !== undefined)
@@ -1760,6 +1774,11 @@ export function useSettings(): UseSettingsReturn {
if (savedFileTabAutoRefreshEnabled !== undefined) {
setFileTabAutoRefreshEnabledState(savedFileTabAutoRefreshEnabled as boolean);
}
+
+ // Windows warning suppression
+ if (savedSuppressWindowsWarning !== undefined) {
+ setSuppressWindowsWarningState(savedSuppressWindowsWarning as boolean);
+ }
} catch (error) {
console.error('[Settings] Failed to load settings:', error);
} finally {
@@ -1938,6 +1957,8 @@ export function useSettings(): UseSettingsReturn {
setAutomaticTabNamingEnabled,
fileTabAutoRefreshEnabled,
setFileTabAutoRefreshEnabled,
+ suppressWindowsWarning,
+ setSuppressWindowsWarning,
}),
[
// State values
@@ -2083,6 +2104,8 @@ export function useSettings(): UseSettingsReturn {
setAutomaticTabNamingEnabled,
fileTabAutoRefreshEnabled,
setFileTabAutoRefreshEnabled,
+ suppressWindowsWarning,
+ setSuppressWindowsWarning,
]
);
}