pub use memstead_base::workspace::MutationsSection;
pub const DEFAULT_TOKEN_BUDGET: usize = 10_000;
pub fn validate_disabled_tools(
requested: &[String],
known: &[String],
) -> (std::collections::HashSet<String>, Vec<String>) {
use std::collections::HashSet;
let known_set: HashSet<&str> = known.iter().map(String::as_str).collect();
let mut effective: HashSet<String> = HashSet::new();
let mut unknown: Vec<String> = Vec::new();
for name in requested {
if known_set.contains(name.as_str()) {
effective.insert(name.clone());
} else {
unknown.push(name.clone());
}
}
(effective, unknown)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn validate_disabled_tools_partitions_known_and_unknown() {
let known = vec![
"memstead_entity".to_string(),
"memstead_search".to_string(),
"memstead_mem_create".to_string(),
];
let requested = vec![
"memstead_entity".to_string(),
"bogus".to_string(),
"memstead_search".to_string(),
"also_unknown".to_string(),
];
let (effective, unknown) = validate_disabled_tools(&requested, &known);
assert_eq!(effective.len(), 2);
assert!(effective.contains("memstead_entity"));
assert!(effective.contains("memstead_search"));
assert_eq!(
unknown,
vec!["bogus".to_string(), "also_unknown".to_string()]
);
}
#[test]
fn validate_disabled_tools_empty_requested_is_empty_pair() {
let known = vec!["memstead_entity".to_string()];
let (effective, unknown) = validate_disabled_tools(&[], &known);
assert!(effective.is_empty());
assert!(unknown.is_empty());
}
}