diff --git a/ui/desktop/src/components/ConfigContext.tsx b/ui/desktop/src/components/ConfigContext.tsx index 23ab2a18662e..6c169e26f242 100644 --- a/ui/desktop/src/components/ConfigContext.tsx +++ b/ui/desktop/src/components/ConfigContext.tsx @@ -207,28 +207,24 @@ export const ConfigProvider: React.FC = ({ children }) => { const extensionsResponse = await apiGetExtensions(); let extensions = extensionsResponse.data?.extensions || []; - // If no bundled MCP extensions exist, seed config from bundled-extensions.json - // This ensures fresh installs get the default extensions (developer, computercontroller, etc.) + // Always sync bundled extensions from bundled-extensions.json + // This ensures: + // 1. Fresh installs get the default extensions (developer, computercontroller, etc.) + // 2. Existing users get NEW bundled extensions added in subsequent releases + // The syncBundledExtensions function skips extensions that already exist and are marked as bundled // Platform extensions (code_execution, todo, etc.) are handled by the backend - const hasBundledExtensions = extensions.some( - (ext) => ext.type === 'builtin' && 'bundled' in ext && ext.bundled - ); - - if (!hasBundledExtensions) { - console.log('No bundled extensions found, syncing from bundled-extensions.json'); - const addExtensionForSync = async ( - name: string, - config: ExtensionConfig, - enabled: boolean - ) => { - const query: ExtensionQuery = { name, config, enabled }; - await apiAddExtension({ body: query }); - }; - await syncBundledExtensions(extensions, addExtensionForSync); - // Reload extensions after sync - const refreshedResponse = await apiGetExtensions(); - extensions = refreshedResponse.data?.extensions || []; - } + const addExtensionForSync = async ( + name: string, + config: ExtensionConfig, + enabled: boolean + ) => { + const query: ExtensionQuery = { name, config, enabled }; + await apiAddExtension({ body: query }); + }; + await syncBundledExtensions(extensions, addExtensionForSync); + // Reload extensions after sync + const refreshedResponse = await apiGetExtensions(); + extensions = refreshedResponse.data?.extensions || []; setExtensionsList(extensions); setExtensionWarnings(extensionsResponse.data?.warnings || []);