use super::*;
#[test]
fn tool_contract_constants_preserve_provider_names_and_runtime_aliases() {
assert_eq!(
MVP_TOOL_CAPABILITIES
.iter()
.map(|tool| tool.canonical_name())
.collect::<Vec<_>>(),
vec![
contract::tool_name::READ,
contract::tool_name::VIEW_IMAGE,
contract::tool_name::BASH,
contract::tool_name::BROWSER,
contract::tool_name::HASH_EDIT,
contract::tool_name::WRITE,
contract::tool_name::GREP,
contract::tool_name::FIND,
contract::tool_name::LIST_FILES,
contract::tool_name::REPO_MAP,
contract::tool_name::SUBAGENTS,
contract::tool_name::WEB_SEARCH,
contract::tool_name::CODE_SEARCH,
contract::tool_name::AST_GREP,
]
);
assert_eq!(
ToolCapability::Bash.aliases(),
contract::BASH_DISPATCH_ALIASES
);
assert_eq!(
contract::BASH_COMMAND_ARG_KEYS,
[contract::arg_key::COMMAND, contract::arg_key::CMD]
);
let definitions = mvp_tool_definitions_json();
let bash = definitions
.as_array()
.unwrap()
.iter()
.find(|definition| definition["name"] == contract::tool_name::BASH)
.unwrap();
assert!(
bash["parameters"]["properties"]
.get(contract::arg_key::COMMAND)
.is_some()
);
assert!(
bash["parameters"]["properties"]
.get(contract::arg_key::CMD)
.is_none()
);
assert_eq!(
ToolCapability::from_dispatch_name(contract::BASH_DISPATCH_ALIASES[0]),
Some(ToolCapability::Bash)
);
}
#[test]
fn cloned_runtimes_share_path_search_service() {
let (temp, runtime) = runtime();
fs::write(temp.path().join("lib.rs"), "").unwrap();
let cloned = runtime
.clone_for_cwd_with_subagent_depth(temp.path(), 1)
.unwrap();
let first = runtime.dispatch("find", json!({"query":"lib"}));
let second = cloned.dispatch("find", json!({"query":"lib"}));
assert!(first.success, "{}", first.content);
assert!(second.success, "{}", second.content);
assert!(Arc::ptr_eq(&runtime.path_search, &cloned.path_search));
}