diff --git a/apps/desktop/src/renderer/App.tsx b/apps/desktop/src/renderer/App.tsx index 78c096c4..8ed4acbf 100644 --- a/apps/desktop/src/renderer/App.tsx +++ b/apps/desktop/src/renderer/App.tsx @@ -438,12 +438,40 @@ function NotesApp() { // Plugin runtime: init once, React observes const discoveredPlugins = useStore(pluginRuntimeStore, s => s.plugins); const pluginErrors = useStore(pluginRuntimeStore, s => s.errors); + const [builtInEnabledMap, setBuiltInEnabledMap] = useState>({}); useEffect(() => { void pluginRuntimeStore.getState().init(); + // Load built-in plugin enabled states + void (async () => { + const stateList = await window.readied.plugins.listState(); + const map: Record = {}; + for (const s of stateList) { + map[s.pluginId] = s.enabled; + } + setBuiltInEnabledMap(map); + })(); + }, []); + + // Re-check built-in enabled state when plugins reload + useEffect(() => { + const handler = () => { + void (async () => { + const stateList = await window.readied.plugins.listState(); + const map: Record = {}; + for (const s of stateList) { + map[s.pluginId] = s.enabled; + } + setBuiltInEnabledMap(map); + })(); + }; + return window.readied.ipc.on('plugins:reload', handler); }, []); - const allPlugins = useMemo(() => [...builtInPlugins, ...discoveredPlugins], [discoveredPlugins]); + const allPlugins = useMemo(() => { + const enabledBuiltIn = builtInPlugins.filter(p => builtInEnabledMap[p.id] !== false); + return [...enabledBuiltIn, ...discoveredPlugins]; + }, [discoveredPlugins, builtInEnabledMap]); const configBridge = useMemo( () => ({ diff --git a/apps/desktop/src/renderer/pages/settings/sections/plugins/PluginCard.tsx b/apps/desktop/src/renderer/pages/settings/sections/plugins/PluginCard.tsx index 9bffbb85..51357077 100644 --- a/apps/desktop/src/renderer/pages/settings/sections/plugins/PluginCard.tsx +++ b/apps/desktop/src/renderer/pages/settings/sections/plugins/PluginCard.tsx @@ -59,7 +59,6 @@ export function PluginCard({ id={`plugin-${name.toLowerCase().replace(/\s+/g, '-')}`} checked={enabled} onChange={checked => onToggle?.(checked)} - disabled={isBuiltIn} /> {!isBuiltIn && onUninstall && (