pub mod converter;
pub mod delegation;
pub mod dynamic_generation;
pub mod manager;
pub mod parallel_executor;
pub mod parser;
pub mod spawner;
pub mod workload_balancer;
pub use parallel_executor::{
AggregationStrategy, ExecutionStatus, ParallelConfig, ParallelExecutionResult,
ParallelExecutor, TaskExecutionResult,
};
pub use spawner::SpawnTask;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::path::PathBuf;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubagentDefinition {
pub name: String,
pub description: String,
pub tools: SubagentTools,
pub capabilities: Vec<String>,
#[serde(default)]
pub metadata: HashMap<String, serde_json::Value>,
#[serde(default)]
pub execution_config: spawner::ExecutionConfig,
#[serde(default)]
pub resource_limits: spawner::ResourceLimits,
#[serde(default)]
pub spawn_context: Option<spawner::SpawnContext>,
#[serde(default)]
pub handoff_config: Option<spawner::HandoffConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubagentTools {
pub standard: Vec<String>,
#[serde(default)]
pub semantic: Vec<String>,
#[serde(default)]
pub memory: Vec<String>,
#[serde(default)]
pub custom: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubagentConfig {
pub agents_dir: PathBuf,
#[serde(default = "default_true")]
pub enable_dynamic_generation: bool,
#[serde(default = "default_max_concurrent")]
pub max_concurrent_agents: usize,
#[serde(default)]
pub hybrid_mode: bool,
}
fn default_true() -> bool {
true
}
fn default_max_concurrent() -> usize {
5
}
impl Default for SubagentConfig {
fn default() -> Self {
Self {
agents_dir: PathBuf::from(".claude/agents"),
enable_dynamic_generation: true,
max_concurrent_agents: 5,
hybrid_mode: false,
}
}
}
pub type SubagentResult<T> = Result<T, SubagentError>;
#[derive(Debug, thiserror::Error)]
pub enum SubagentError {
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("Parse error: {0}")]
Parse(String),
#[error("Subagent not found: {0}")]
NotFound(String),
#[error("Validation error: {0}")]
Validation(String),
#[error("Delegation error: {0}")]
Delegation(String),
#[error("Serialization error: {0}")]
Serialization(#[from] serde_json::Error),
#[error("Execution error: {0}")]
ExecutionError(String),
}