use async_trait::async_trait;
use everruns_core::execution_loading::SessionStore;
use everruns_core::session_files::SessionFileSystem;
use everruns_core::session_task::SessionTaskRegistry;
use everruns_core::subagent_delegation::SubagentSessionDelegate;
use everruns_core::tool_context::ToolContextExtensions;
use everruns_core::tools::ToolRegistry;
use everruns_provider::error::Result;
use everruns_provider::tool_types::ToolDefinition;
use everruns_provider::typed_id::SessionId;
use std::sync::Arc;
pub type ToolContextExtensionsFactory =
Arc<dyn Fn(i64, SessionId) -> ToolContextExtensions + Send + Sync>;
pub type SubagentDelegateFactory =
Arc<dyn Fn(i64, SessionId) -> Arc<dyn SubagentSessionDelegate> + Send + Sync>;
#[async_trait]
pub trait HostToolAugmentor: Send + Sync {
fn disabled_hook_contributions(
&self,
_capability_id: &str,
_config: &serde_json::Value,
) -> Vec<String> {
Vec::new()
}
async fn augment_reason_tools(
&self,
session_id: SessionId,
session_store: Arc<dyn SessionStore>,
task_registry: Option<Arc<dyn SessionTaskRegistry>>,
definitions: &mut Vec<ToolDefinition>,
) -> Result<()>;
async fn augment_act_tools(
&self,
session_id: SessionId,
session_store: Arc<dyn SessionStore>,
task_registry: Option<Arc<dyn SessionTaskRegistry>>,
file_store: Arc<dyn SessionFileSystem>,
requested_definitions: &[ToolDefinition],
registry: &mut ToolRegistry,
) -> Result<()>;
}