use std::sync::Arc;
use crate::brain::tools::registry::ToolRegistry;
use crate::config::Config;
use crate::db::Database;
pub(crate) fn register_core_agent_tools(
tool_registry: &Arc<ToolRegistry>,
db: &Database,
config: &Config,
) {
use crate::brain::tools::{
bash::BashTool, code_exec::CodeExecTool, config_tool::ConfigTool, context::ContextTool,
doc_parser::DocParserTool, edit::EditTool, follow_up_question::FollowUpQuestionTool,
glob::GlobTool, grep::GrepTool, http::HttpClientTool, load_brain_file::LoadBrainFileTool,
ls::LsTool, memory_search::MemorySearchTool, notebook::NotebookEditTool,
pdf_to_images::PdfToImagesTool, plan_tool::PlanTool, read::ReadTool,
rename_session::RenameSessionTool, session_search::SessionSearchTool,
slash_command::SlashCommandTool, task::TaskTool, web_search::WebSearchTool,
write::WriteTool, write_opencrabs_file::WriteOpenCrabsFileTool,
};
tool_registry.register(Arc::new(ReadTool));
tool_registry.register(Arc::new(WriteTool));
tool_registry.register(Arc::new(EditTool));
tool_registry.register(Arc::new(crate::brain::tools::hashline::HashlineEditTool));
tool_registry.register(Arc::new(BashTool));
tool_registry.register(Arc::new(LsTool));
tool_registry.register(Arc::new(GlobTool));
tool_registry.register(Arc::new(GrepTool));
tool_registry.register(Arc::new(WebSearchTool));
tool_registry.register(Arc::new(CodeExecTool));
tool_registry.register(Arc::new(NotebookEditTool));
tool_registry.register(Arc::new(DocParserTool));
tool_registry.register(Arc::new(PdfToImagesTool));
tool_registry.register(Arc::new(TaskTool));
tool_registry.register(Arc::new(ContextTool));
tool_registry.register(Arc::new(HttpClientTool));
tool_registry.register(Arc::new(PlanTool));
tool_registry.register(Arc::new(MemorySearchTool));
tool_registry.register(Arc::new(LoadBrainFileTool));
tool_registry.register(Arc::new(WriteOpenCrabsFileTool));
tool_registry.register(Arc::new(SessionSearchTool::new(db.pool().clone())));
tool_registry.register(Arc::new(
crate::brain::tools::mission_control_report::MissionControlReportTool::new(
db.pool().clone(),
),
));
tool_registry.register(Arc::new(
crate::brain::tools::channel_search::ChannelSearchTool::new(
crate::db::ChannelMessageRepository::new(db.pool().clone()),
),
));
tool_registry.register(Arc::new(
crate::brain::tools::cron_manage::CronManageTool::new(crate::db::CronJobRepository::new(
db.pool().clone(),
)),
));
tool_registry.register(Arc::new(crate::brain::tools::a2a_send::A2aSendTool::new()));
tool_registry.register(Arc::new(ConfigTool));
tool_registry.register(Arc::new(SlashCommandTool));
tool_registry.register(Arc::new(RenameSessionTool));
tool_registry.register(Arc::new(FollowUpQuestionTool));
tool_registry.register(Arc::new(
crate::brain::tools::tool_search::ToolSearchTool::new(tool_registry.clone()),
));
super::ui::register_config_dependent_tools(tool_registry, config);
let subagent_manager = Arc::new(crate::brain::tools::subagent::SubAgentManager::new());
tool_registry.register(Arc::new(
crate::brain::tools::subagent::SpawnAgentTool::new(
subagent_manager.clone(),
tool_registry.clone(),
),
));
tool_registry.register(Arc::new(crate::brain::tools::subagent::WaitAgentTool::new(
subagent_manager.clone(),
)));
tool_registry.register(Arc::new(crate::brain::tools::subagent::SendInputTool::new(
subagent_manager.clone(),
)));
tool_registry.register(Arc::new(
crate::brain::tools::subagent::CloseAgentTool::new(subagent_manager.clone()),
));
tool_registry.register(Arc::new(
crate::brain::tools::subagent::ResumeAgentTool::new(
subagent_manager.clone(),
tool_registry.clone(),
),
));
let team_manager = Arc::new(crate::brain::tools::subagent::TeamManager::new());
tool_registry.register(Arc::new(
crate::brain::tools::subagent::TeamCreateTool::new(
subagent_manager.clone(),
team_manager.clone(),
tool_registry.clone(),
),
));
tool_registry.register(Arc::new(
crate::brain::tools::subagent::TeamDeleteTool::new(
subagent_manager.clone(),
team_manager.clone(),
),
));
tool_registry.register(Arc::new(
crate::brain::tools::subagent::TeamBroadcastTool::new(
subagent_manager.clone(),
team_manager.clone(),
),
));
tracing::info!("Registered 8 sub-agent + team orchestration tools");
tool_registry.register(Arc::new(
crate::brain::tools::feedback_record::FeedbackRecordTool,
));
tool_registry.register(Arc::new(
crate::brain::tools::feedback_analyze::FeedbackAnalyzeTool,
));
tool_registry.register(Arc::new(crate::brain::tools::self_improve::SelfImproveTool));
tracing::info!("Registered 3 recursive self-improvement tools");
}
pub(crate) fn register_runtime_tools(tool_registry: &Arc<ToolRegistry>, config: &Config) {
let tools_toml_path = crate::brain::tools::dynamic::DynamicToolLoader::default_path()
.unwrap_or_else(|| std::path::PathBuf::from("tools.toml"));
let dynamic_count =
crate::brain::tools::dynamic::DynamicToolLoader::load(&tools_toml_path, tool_registry);
if dynamic_count > 0 {
tracing::info!("Loaded {dynamic_count} dynamic tool(s) from tools.toml");
}
tool_registry.register(Arc::new(
crate::brain::tools::tool_manage::ToolManageTool::new(
tool_registry.clone(),
tools_toml_path,
),
));
#[cfg(feature = "browser")]
{
let browser_manager = Arc::new(crate::brain::tools::browser::BrowserManager::new(
config.browser.clone(),
));
tool_registry.register(Arc::new(
crate::brain::tools::browser::BrowserNavigateTool::new(browser_manager.clone()),
));
tool_registry.register(Arc::new(
crate::brain::tools::browser::BrowserScreenshotTool::new(browser_manager.clone()),
));
tool_registry.register(Arc::new(
crate::brain::tools::browser::BrowserClickTool::new(browser_manager.clone()),
));
tool_registry.register(Arc::new(
crate::brain::tools::browser::BrowserTypeTool::new(browser_manager.clone()),
));
tool_registry.register(Arc::new(
crate::brain::tools::browser::BrowserEvalTool::new(browser_manager.clone()),
));
tool_registry.register(Arc::new(
crate::brain::tools::browser::BrowserContentTool::new(browser_manager.clone()),
));
tool_registry.register(Arc::new(
crate::brain::tools::browser::BrowserWaitTool::new(browser_manager.clone()),
));
tool_registry.register(Arc::new(
crate::brain::tools::browser::BrowserFindTool::new(browser_manager.clone()),
));
tool_registry.register(Arc::new(
crate::brain::tools::browser::BrowserCloseTool::new(browser_manager),
));
tracing::info!("Browser automation tools registered (9 tools)");
}
#[cfg(not(feature = "browser"))]
let _ = config;
}