fix: trying this approach to undo regressions for extension loading (#6568)
This commit is contained in:
@@ -54,22 +54,22 @@ fn get_extensions_map() -> IndexMap<String, ExtensionEntry> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !extensions_map.is_empty() {
|
// Always inject platform extensions (code_execution, todo, skills, etc.)
|
||||||
for (name, def) in PLATFORM_EXTENSIONS.iter() {
|
// These are internal agent extensions that should always be available
|
||||||
if !extensions_map.contains_key(*name) {
|
for (name, def) in PLATFORM_EXTENSIONS.iter() {
|
||||||
extensions_map.insert(
|
if !extensions_map.contains_key(*name) {
|
||||||
name.to_string(),
|
extensions_map.insert(
|
||||||
ExtensionEntry {
|
name.to_string(),
|
||||||
config: ExtensionConfig::Platform {
|
ExtensionEntry {
|
||||||
name: def.name.to_string(),
|
config: ExtensionConfig::Platform {
|
||||||
description: def.description.to_string(),
|
name: def.name.to_string(),
|
||||||
bundled: Some(true),
|
description: def.description.to_string(),
|
||||||
available_tools: Vec::new(),
|
bundled: Some(true),
|
||||||
},
|
available_tools: Vec::new(),
|
||||||
enabled: def.default_enabled,
|
|
||||||
},
|
},
|
||||||
);
|
enabled: def.default_enabled,
|
||||||
}
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
extensions_map
|
extensions_map
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import {
|
|||||||
providers,
|
providers,
|
||||||
getProviderModels as apiGetProviderModels,
|
getProviderModels as apiGetProviderModels,
|
||||||
} from '../api';
|
} from '../api';
|
||||||
|
import { syncBundledExtensions } from './settings/extensions';
|
||||||
import type {
|
import type {
|
||||||
ConfigResponse,
|
ConfigResponse,
|
||||||
UpsertConfigQuery,
|
UpsertConfigQuery,
|
||||||
@@ -218,7 +219,32 @@ export const ConfigProvider: React.FC<ConfigProviderProps> = ({ children }) => {
|
|||||||
// Load extensions
|
// Load extensions
|
||||||
try {
|
try {
|
||||||
const extensionsResponse = await apiGetExtensions();
|
const extensionsResponse = await apiGetExtensions();
|
||||||
setExtensionsList(extensionsResponse.data?.extensions || []);
|
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.)
|
||||||
|
// 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 || [];
|
||||||
|
}
|
||||||
|
|
||||||
|
setExtensionsList(extensions);
|
||||||
setExtensionWarnings(extensionsResponse.data?.warnings || []);
|
setExtensionWarnings(extensionsResponse.data?.warnings || []);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to load extensions:', error);
|
console.error('Failed to load extensions:', error);
|
||||||
|
|||||||
Reference in New Issue
Block a user