use saya_agent::ToolError;
use super::DatabaseTools;
pub(crate) const WORKSPACE_GLOB_MAX_VISITED: usize = 2_000;
pub(crate) const WORKSPACE_GLOB_MAX_MATCHES: usize = 500;
impl DatabaseTools {
pub(super) async fn workspace_glob(
&self,
arguments: &serde_json::Value,
) -> Result<serde_json::Value, ToolError> {
let pattern = arguments
.get("pattern")
.and_then(serde_json::Value::as_str)
.ok_or(ToolError::PatternNotString)?;
let Some(workspace) = &self.workspace else {
return Err(ToolError::WorkspaceUnavailable);
};
let matches = workspace
.glob(
pattern,
WORKSPACE_GLOB_MAX_VISITED,
WORKSPACE_GLOB_MAX_MATCHES,
)
.map_err(|error| ToolError::Workspace(error.to_string()))?;
let paths: Vec<String> = matches.into_iter().map(|matched| matched.path).collect();
Ok(serde_json::json!({ "matches": paths }))
}
}