Always sync bundled extensions (#7057)

This commit is contained in:
Zane
2026-02-09 09:15:56 -08:00
committed by GitHub
parent 942bcfa4b2
commit 320f22b231
+17 -21
View File
@@ -207,28 +207,24 @@ export const ConfigProvider: React.FC<ConfigProviderProps> = ({ children }) => {
const extensionsResponse = await apiGetExtensions(); const extensionsResponse = await apiGetExtensions();
let extensions = extensionsResponse.data?.extensions || []; let extensions = extensionsResponse.data?.extensions || [];
// If no bundled MCP extensions exist, seed config from bundled-extensions.json // Always sync bundled extensions from bundled-extensions.json
// This ensures fresh installs get the default extensions (developer, computercontroller, etc.) // 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 // Platform extensions (code_execution, todo, etc.) are handled by the backend
const hasBundledExtensions = extensions.some( const addExtensionForSync = async (
(ext) => ext.type === 'builtin' && 'bundled' in ext && ext.bundled name: string,
); config: ExtensionConfig,
enabled: boolean
if (!hasBundledExtensions) { ) => {
console.log('No bundled extensions found, syncing from bundled-extensions.json'); const query: ExtensionQuery = { name, config, enabled };
const addExtensionForSync = async ( await apiAddExtension({ body: query });
name: string, };
config: ExtensionConfig, await syncBundledExtensions(extensions, addExtensionForSync);
enabled: boolean // Reload extensions after sync
) => { const refreshedResponse = await apiGetExtensions();
const query: ExtensionQuery = { name, config, enabled }; extensions = refreshedResponse.data?.extensions || [];
await apiAddExtension({ body: query });
};
await syncBundledExtensions(extensions, addExtensionForSync);
// Reload extensions after sync
const refreshedResponse = await apiGetExtensions();
extensions = refreshedResponse.data?.extensions || [];
}
setExtensionsList(extensions); setExtensionsList(extensions);
setExtensionWarnings(extensionsResponse.data?.warnings || []); setExtensionWarnings(extensionsResponse.data?.warnings || []);