use super::*;
use crate::tools::ToolCapability;
fn all_tool_capabilities() -> [ToolCapability; 11] {
[
ToolCapability::Read,
ToolCapability::ViewImage,
ToolCapability::Bash,
ToolCapability::HashEdit,
ToolCapability::Write,
ToolCapability::Grep,
ToolCapability::Find,
ToolCapability::ListFiles,
ToolCapability::Subagents,
ToolCapability::Web,
ToolCapability::AstGrep,
]
}
fn expected_card_role(capability: ToolCapability) -> TranscriptCardRole {
match capability {
ToolCapability::Read => TranscriptCardRole::Read,
ToolCapability::ViewImage => TranscriptCardRole::ViewImage,
ToolCapability::Bash => TranscriptCardRole::Bash,
ToolCapability::HashEdit => TranscriptCardRole::HashEdit,
ToolCapability::Write => TranscriptCardRole::Write,
ToolCapability::Grep => TranscriptCardRole::Grep,
ToolCapability::Find => TranscriptCardRole::Find,
ToolCapability::ListFiles => TranscriptCardRole::ListFiles,
ToolCapability::Subagents => TranscriptCardRole::SubagentBatch,
ToolCapability::Web => TranscriptCardRole::Tool,
ToolCapability::AstGrep => TranscriptCardRole::AstGrep,
}
}
#[test]
fn canonical_capabilities_and_dispatch_aliases_use_expected_card_routes() {
for capability in all_tool_capabilities() {
let names = std::iter::once(capability.canonical_name())
.chain(capability.aliases().iter().copied());
for (index, name) in names.enumerate() {
assert_eq!(
ToolCapability::from_dispatch_name(name),
Some(capability),
"dispatch name {name:?}"
);
let state = linked_tool_state(
&format!("route-{capability:?}-{index}"),
name,
name,
ActivityStatus::Running,
Vec::new(),
"pending",
);
assert_eq!(
project_cards(&state)[0].role,
expected_card_role(capability),
"dispatch name {name:?} capability {capability:?}"
);
}
}
}
#[test]
fn dynamic_mcp_and_unknown_tool_names_remain_generic() {
for name in [
"mcp__server__custom_tool",
"mcp__server__subagents",
"ast-grep",
"web-search",
] {
let state = linked_tool_state(
&format!("unknown-{name}"),
name,
name,
ActivityStatus::Running,
Vec::new(),
"pending",
);
assert_eq!(
project_cards(&state)[0].role,
TranscriptCardRole::Tool,
"{name}"
);
}
}