#[cfg(feature = "openai")]
pub mod openai;
#[cfg(feature = "anthropic")]
pub mod anthropic;
#[cfg(feature = "langchain")]
pub mod langchain;
use atd_protocol::ToolSummary;
pub fn resolve_sanitized_id<'a>(sanitized: &str, known: &'a [ToolSummary]) -> Option<&'a str> {
let ids = known.iter().map(|t| t.id.as_str());
atd_protocol::sanitize::desanitize_tool_name(sanitized, ids)
}
#[cfg(test)]
mod tests {
use super::*;
use atd_protocol::{ToolSummary, ToolTier, ToolVisibility};
fn make_summary(id: &str) -> ToolSummary {
ToolSummary {
id: id.into(),
name: id.into(),
description: "test tool".into(),
domain: "test".into(),
tier: ToolTier::Warm,
visibility: ToolVisibility::Read,
tags: vec![],
input_schema: None,
}
}
#[test]
fn resolve_known_id_returns_original() {
let summaries = vec![make_summary("ref:fs.read"), make_summary("ref:shell.exec")];
assert_eq!(
resolve_sanitized_id("ref_fs_read", &summaries),
Some("ref:fs.read")
);
}
#[test]
fn resolve_unknown_returns_none() {
let summaries = vec![make_summary("ref:fs.read")];
assert_eq!(resolve_sanitized_id("nonexistent", &summaries), None);
}
#[test]
fn resolve_empty_slice_returns_none() {
assert_eq!(resolve_sanitized_id("ref_fs_read", &[]), None);
}
}