feat(agent): implement agent execution engine and turn handling with background processing

This commit is contained in:
asepharyana
2026-07-20 16:29:39 +07:00
parent 2e8a4f2443
commit efcd191f96
15 changed files with 452 additions and 247 deletions
+39
View File
@@ -292,6 +292,45 @@ fn handle_submit_input(state: &mut AppStateRest, text: String) {
state.input.cursor = 0;
state.input.history_idx = None;
state.dirty = true;
// Resolve LLM provider credentials
let provider_name = &state.settings.provider;
let provider_cfg = state.app_config.providers.get(provider_name).cloned();
let mut api_key = String::new();
if let Some(key) = state.settings.api_keys.get(provider_name) {
api_key = key.clone();
} else if let Some(ref cfg) = provider_cfg {
if let Some(ref default_key) = cfg.default_api_key {
api_key = default_key.clone();
}
if api_key.is_empty() {
if let Some(ref env_name) = cfg.api_key_env {
if let Ok(val) = std::env::var(env_name) {
api_key = val;
}
}
}
}
let messages = state
.session_runtime
.as_ref()
.map(|rt| rt.messages.clone())
.unwrap_or_default();
let params = zesdex_infrastructure::agent::AgentTurnParams {
messages,
session_dir: state.session_dir.clone(),
workspace_roots: state.workspace_roots.clone(),
turn_events: state.turn_events.clone(),
in_flight: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)),
abort: state.abort_flag.clone(),
api_key,
model: state.settings.model.clone(),
api_base: provider_cfg.map(|cfg| cfg.api_base.clone()),
};
zesdex_infrastructure::agent::spawn_agent_turn(params);
}
fn handle_delete_char(state: &mut AppStateRest) {