diff --git a/crates/assistant_tool/src/assistant_tool.rs b/crates/assistant_tool/src/assistant_tool.rs index dd7458b75b..1f025eda63 100644 --- a/crates/assistant_tool/src/assistant_tool.rs +++ b/crates/assistant_tool/src/assistant_tool.rs @@ -4,7 +4,7 @@ mod tool_working_set; use std::sync::Arc; use anyhow::Result; -use gpui::{App, Entity, Task}; +use gpui::{App, Entity, SharedString, Task}; use project::Project; pub use crate::tool_registry::*; @@ -14,6 +14,14 @@ pub fn init(cx: &mut App) { ToolRegistry::default_global(cx); } +#[derive(Debug, PartialEq, Eq, Clone)] +pub enum ToolSource { + /// A native tool built-in to Zed. + Native, + /// A tool provided by a context server. + ContextServer { id: SharedString }, +} + /// A tool that can be used by a language model. pub trait Tool: 'static + Send + Sync { /// Returns the name of the tool. @@ -22,6 +30,11 @@ pub trait Tool: 'static + Send + Sync { /// Returns the description of the tool. fn description(&self) -> String; + /// Returns the source of the tool. + fn source(&self) -> ToolSource { + ToolSource::Native + } + /// Returns the JSON schema that describes the tool's input. fn input_schema(&self) -> serde_json::Value { serde_json::Value::Object(serde_json::Map::default()) diff --git a/crates/context_server/src/context_server_tool.rs b/crates/context_server/src/context_server_tool.rs index d5dacb556c..5601a0d245 100644 --- a/crates/context_server/src/context_server_tool.rs +++ b/crates/context_server/src/context_server_tool.rs @@ -1,7 +1,7 @@ use std::sync::Arc; use anyhow::{anyhow, bail, Result}; -use assistant_tool::Tool; +use assistant_tool::{Tool, ToolSource}; use gpui::{App, Entity, Task}; use project::Project; @@ -37,6 +37,12 @@ impl Tool for ContextServerTool { self.tool.description.clone().unwrap_or_default() } + fn source(&self) -> ToolSource { + ToolSource::ContextServer { + id: self.server_id.clone().into(), + } + } + fn input_schema(&self) -> serde_json::Value { match &self.tool.input_schema { serde_json::Value::Null => {