fix: fetch agent config only on page load and refresh

This commit is contained in:
lzt404 committed 2026-07-27 16:00:44 +08:00
1 parent a72994d479
commit 3140d205cc
2 files changed
+23 -14

No files matched your search

+8 -8
View File
@@ -573,7 +573,7 @@ struct AgentConfigActionResult {
conflict_files: Vec<String>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize)]
#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)]
#[serde(rename_all = "camelCase")]
struct AgentModelOption {
name: String,
@@ -1594,6 +1594,7 @@ async fn apply_agent_config(
gui_config_state: tauri::State<'_, GuiConfigState>,
client: String,
model: String,
models: Vec<AgentModelOption>,
oauth_configuration: bool,
) -> Result<AgentConfigActionResult, String> {
let client = AgentClient::parse(&client)?;
@@ -1604,10 +1605,9 @@ async fn apply_agent_config(
let config = gui_config_state.snapshot()?;
let api_key = effective_agent_api_key(&config);
validate_agent_can_enable(client, &home, config.port, api_key)?;
let available_models = fetch_agent_models(config.port, api_key).await?;
let model = resolve_available_agent_model(&available_models, &validate_agent_model(&model)?)?;
let model = resolve_available_agent_model(&models, &validate_agent_model(&model)?)?;
let codex_models = if client == AgentClient::Codex {
Some(fetch_codex_model_catalog_specs(&config, &available_models).await)
Some(fetch_codex_model_catalog_specs(&config, &models).await)
} else {
None
};
@@ -1621,7 +1621,7 @@ async fn apply_agent_config(
api_key,
&model,
AgentConfigurationOptions {
models: &available_models,
models: &models,
codex_models: codex_models.as_deref(),
oauth_configuration,
},
@@ -1634,6 +1634,7 @@ async fn reset_agent_config_to_default(
gui_config_state: tauri::State<'_, GuiConfigState>,
client: String,
model: String,
models: Vec<AgentModelOption>,
oauth_configuration: bool,
) -> Result<AgentConfigActionResult, String> {
let client = AgentClient::parse(&client)?;
@@ -1644,10 +1645,9 @@ async fn reset_agent_config_to_default(
let config = gui_config_state.snapshot()?;
let api_key = effective_agent_api_key(&config);
validate_agent_can_enable(client, &home, config.port, api_key)?;
let available_models = fetch_agent_models(config.port, api_key).await?;
let model = resolve_available_agent_model(&available_models, &validate_agent_model(&model)?)?;
let model = resolve_available_agent_model(&models, &validate_agent_model(&model)?)?;
let codex_models = if client == AgentClient::Codex {
Some(fetch_codex_model_catalog_specs(&config, &available_models).await)
Some(fetch_codex_model_catalog_specs(&config, &models).await)
} else {
None
};
+15 -6
View File
@@ -511,6 +511,7 @@ export function AgentsPage() {
const [closeAppNotice, setCloseAppNotice] = useState('');
const [closeAppConfirmOpen, setCloseAppConfirmOpen] = useState(false);
const [oauthConfiguration, setOauthConfiguration] = useState(false);
const autoLoadedModelClientRef = useRef<AgentClientId | null>(null);
const loadStatuses = useCallback(async (forceRefresh = false) => {
const command = forceRefresh
@@ -543,21 +544,27 @@ export function AgentsPage() {
setLoading(true);
setDetectionError('');
try {
await Promise.all([loadStatuses(true), loadModels()]);
await loadStatuses(true);
} catch (requestError) {
setDetectionError(String(requestError));
} finally {
setLoading(false);
}
}, [loadModels, loadStatuses]);
}, [loadStatuses]);
useEffect(() => {
setLoading(true);
setDetectionError('');
void Promise.all([loadStatuses(), loadModels()])
void loadStatuses()
.catch((requestError) => setDetectionError(String(requestError)))
.finally(() => setLoading(false));
}, [loadModels, loadStatuses]);
}, [loadStatuses]);
useEffect(() => {
if (autoLoadedModelClientRef.current === selected) return;
autoLoadedModelClientRef.current = selected;
void loadModels();
}, [loadModels, selected]);
useEffect(() => {
let disposed = false;
@@ -565,7 +572,7 @@ export function AgentsPage() {
void listen('config-files-changed', () => {
if (disposed) return;
setDetectionError('');
void Promise.all([loadStatuses(true), loadModels()]).catch((requestError) => {
void loadStatuses(true).catch((requestError) => {
if (!disposed) setDetectionError(String(requestError));
});
}).then((unlisten) => {
@@ -576,7 +583,7 @@ export function AgentsPage() {
disposed = true;
stop?.();
};
}, [loadModels, loadStatuses]);
}, [loadStatuses]);
useEffect(() => {
writeSelectedAgentClient(selected);
@@ -724,6 +731,7 @@ export function AgentsPage() {
await invoke<AgentConfigActionResult>('apply_agent_config', {
client: selected,
model,
models,
oauthConfiguration,
});
await reloadStatusesAfterAction();
@@ -743,6 +751,7 @@ export function AgentsPage() {
await invoke<AgentConfigActionResult>('reset_agent_config_to_default', {
client: selected,
model,
models,
oauthConfiguration,
});
setDefaultConfirmOpen(false);