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();
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 || []);