File size: 1,290 Bytes
e5034c3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | use derive_setters::Setters;
use forge_domain::{McpServers, ToolDefinition};
use serde::{Deserialize, Serialize};
/// A comprehensive view of all tools available in the environment,
/// categorized by their source type for easier navigation and understanding.
#[derive(Default, Debug, Clone, Serialize, Deserialize, PartialEq, Setters)]
#[setters(into, strip_option)]
pub struct ToolsOverview {
/// System tools provided by the Forge environment
pub system: Vec<ToolDefinition>,
/// Tools provided by registered agents
pub agents: Vec<ToolDefinition>,
/// Tools provided by MCP servers, grouped by server name
pub mcp: McpServers,
}
impl ToolsOverview {
/// Create a new empty ToolsOverview
pub fn new() -> Self {
ToolsOverview::default()
}
// Creates a flat list of all tool definitions
pub fn as_vec(&self) -> Vec<&ToolDefinition> {
let mut tools = Vec::new();
tools.extend(&self.system);
tools.extend(&self.agents);
for server_tools in self.mcp.get_servers().values() {
tools.extend(server_tools);
}
tools
}
}
impl From<ToolsOverview> for Vec<ToolDefinition> {
fn from(value: ToolsOverview) -> Self {
value.as_vec().into_iter().cloned().collect()
}
}
|