magi-code 0.102.0

Repository-aware CLI coding agent for terminal work
Documentation
use super::{ToolResult, args::SubagentsArgs};
use crate::output::ToolDispatchContext;
use serde_json::Value;

pub(super) type SubagentsRunner = dyn Fn(Value, ToolDispatchContext) -> ToolResult + Send + Sync;

pub(super) struct SubagentsContext<'a> {
    pub(super) runner: Option<&'a SubagentsRunner>,
}

impl SubagentsContext<'_> {
    pub(super) fn run(
        &self,
        arguments: Value,
        context: ToolDispatchContext,
    ) -> anyhow::Result<ToolResult> {
        let tool_args: SubagentsArgs = serde_json::from_value(arguments)?;
        let runtime_args = crate::subagents::SubagentsArgs::try_from(tool_args)?;
        let arguments = serde_json::to_value(runtime_args)?;
        self.runner
            .map(|runner| runner(arguments, context))
            .ok_or_else(|| anyhow::anyhow!("subagents runtime is not configured"))
    }
}