magi-code 0.63.4

Repository-aware CLI coding agent for terminal work
Documentation
use super::profiles;
use crate::{
    agent::AgentSession,
    agent::cancellation::AgentCancellation,
    config::McPaths,
    hooks::HookRuntime,
    output::{ActivityId, ActivitySender},
    providers::{Provider, ProviderSelection},
    thinking::ThinkingCapabilityScope,
    tools::ToolRuntime,
};
use std::{
    collections::BTreeMap,
    path::{Path, PathBuf},
    sync::Arc,
    time::Duration,
};

pub(crate) struct ResolvedProviderOverride {
    pub provider: Arc<dyn Provider>,
    pub scope: ThinkingCapabilityScope,
}

pub(crate) type SubagentProviderResolver = Arc<
    dyn Fn(&ProviderSelection, &Path) -> anyhow::Result<ResolvedProviderOverride> + Send + Sync,
>;

#[derive(Clone)]
pub(crate) struct SubagentProviderOverride {
    pub(super) paths: McPaths,
    pub(super) resolve_provider: SubagentProviderResolver,
}

impl SubagentProviderOverride {
    pub(crate) fn new(paths: McPaths, resolve_provider: SubagentProviderResolver) -> Self {
        Self {
            paths,
            resolve_provider,
        }
    }
}

#[derive(Clone)]
pub struct SubagentRunConfig {
    pub parent_agent: AgentSession,
    pub provider: Arc<dyn Provider>,
    pub provider_override: Option<SubagentProviderOverride>,
    pub parent_tools: ToolRuntime,
    pub parent_cwd: PathBuf,
    pub cancellation: AgentCancellation,
    pub profiles: BTreeMap<String, profiles::SubagentProfile>,
    pub subagent_profiles_prompt: Option<String>,
    pub sessions_root: Option<PathBuf>,
    pub depth: usize,
    pub parent_activity_id: Option<ActivityId>,
    pub activity_sender: Option<ActivitySender>,
    pub inherited_hooks: Option<HookRuntime>,
    pub semantic_progress_timeout: Duration,
    pub schema_validation_max_retries: u64,
}