fix extension selector not displaying the correct enabled extensions (#7290)

This commit is contained in:
Zane
2026-02-17 18:11:09 -08:00
committed by GitHub
parent 7eb4e442a7
commit e30382066f
3 changed files with 42 additions and 15 deletions
+32 -13
View File
@@ -678,7 +678,7 @@ impl Agent {
} }
match agent_ref match agent_ref
.add_extension(config_clone, &session_id_clone) .add_extension_inner(config_clone, &session_id_clone)
.await .await
{ {
Ok(_) => ExtensionLoadResult { Ok(_) => ExtensionLoadResult {
@@ -700,13 +700,43 @@ impl Agent {
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
futures::future::join_all(extension_futures).await let results = futures::future::join_all(extension_futures).await;
// Persist once after all extensions are loaded
if results.iter().any(|r| r.success) {
if let Err(e) = self.persist_extension_state(&session_id).await {
warn!("Failed to persist extension state after bulk load: {}", e);
}
}
results
} }
pub async fn add_extension( pub async fn add_extension(
&self, &self,
extension: ExtensionConfig, extension: ExtensionConfig,
session_id: &str, session_id: &str,
) -> ExtensionResult<()> {
self.add_extension_inner(extension, session_id).await?;
// Persist extension state after successful add
self.persist_extension_state(session_id)
.await
.map_err(|e| {
error!("Failed to persist extension state: {}", e);
crate::agents::extension::ExtensionError::SetupError(format!(
"Failed to persist extension state: {}",
e
))
})?;
Ok(())
}
async fn add_extension_inner(
&self,
extension: ExtensionConfig,
session_id: &str,
) -> ExtensionResult<()> { ) -> ExtensionResult<()> {
let session = self let session = self
.config .config
@@ -760,17 +790,6 @@ impl Agent {
} }
} }
// Persist extension state after successful add
self.persist_extension_state(session_id)
.await
.map_err(|e| {
error!("Failed to persist extension state: {}", e);
crate::agents::extension::ExtensionError::SetupError(format!(
"Failed to persist extension state: {}",
e
))
})?;
Ok(()) Ok(())
} }
@@ -33,6 +33,11 @@ export const BottomMenuExtensionSelection = ({ sessionId }: BottomMenuExtensionS
const { extensionsList: allExtensions } = useConfig(); const { extensionsList: allExtensions } = useConfig();
const isHubView = !sessionId; const isHubView = !sessionId;
useEffect(() => {
setIsSessionExtensionsLoaded(false);
setSessionExtensions([]);
}, [sessionId]);
useEffect(() => { useEffect(() => {
const handleExtensionsLoaded = () => { const handleExtensionsLoaded = () => {
setRefreshTrigger((prev) => prev + 1); setRefreshTrigger((prev) => prev + 1);
@@ -53,8 +58,11 @@ export const BottomMenuExtensionSelection = ({ sessionId }: BottomMenuExtensionS
}; };
}, []); }, []);
// Fetch session-specific extensions or use global defaults
useEffect(() => { useEffect(() => {
if (refreshTrigger === 0 && !isOpen) {
return;
}
const fetchExtensions = async () => { const fetchExtensions = async () => {
if (!sessionId) { if (!sessionId) {
return; return;
@@ -75,7 +83,6 @@ export const BottomMenuExtensionSelection = ({ sessionId }: BottomMenuExtensionS
} }
}; };
setIsSessionExtensionsLoaded(false);
fetchExtensions(); fetchExtensions();
}, [sessionId, isOpen, refreshTrigger]); }, [sessionId, isOpen, refreshTrigger]);
+1
View File
@@ -433,6 +433,7 @@ export function useChatStream({
}, },
}, },
}); });
window.dispatchEvent(new CustomEvent(AppEvents.SESSION_EXTENSIONS_LOADED));
onSessionLoaded?.(); onSessionLoaded?.();
return; return;
} }