use crate::CapabilityRef;
pub const GENERIC_HARNESS_NAME: &str = "generic";
pub fn generic_capabilities() -> Vec<CapabilityRef> {
vec![
CapabilityRef::new("human_intent"),
CapabilityRef::new("session_file_system"),
CapabilityRef::new("bashkit_shell"),
CapabilityRef::with_config(
"web_fetch",
serde_json::json!({"enable_file_download": true}),
),
CapabilityRef::new("session_storage"),
CapabilityRef::new("session"),
CapabilityRef::new("session_schedule"),
CapabilityRef::new("btw"),
CapabilityRef::new("agent_instructions"),
CapabilityRef::new("skills"),
CapabilityRef::new("infinity_context"),
CapabilityRef::new("auto_tool_search"),
CapabilityRef::new("budgeting"),
CapabilityRef::new("self_budget"),
CapabilityRef::new("loop_detection"),
CapabilityRef::with_config("parallel_tool_calls", serde_json::json!({"mode": "prefer"})),
CapabilityRef::with_config("error_disclosure", serde_json::json!({"mode": "detailed"})),
CapabilityRef::new("message_metadata"),
CapabilityRef::with_config(
"compaction",
serde_json::json!({
"strategy": "auto",
"proactive": true,
"budget_percent": 0.85
}),
),
CapabilityRef::new("tool_output_persistence"),
CapabilityRef::new("tool_output_distillation"),
CapabilityRef::new("citation_retrieval"),
CapabilityRef::new("citation_verification"),
CapabilityRef::new("ask_user"),
CapabilityRef::new("soft_approval"),
]
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn generic_carries_no_duplicate_capability() {
let capabilities = generic_capabilities();
let mut ids: Vec<_> = capabilities
.iter()
.map(|capability| capability.capability_id().to_string())
.collect();
ids.sort();
let count = ids.len();
ids.dedup();
assert_eq!(count, ids.len(), "a capability is listed twice");
}
#[test]
fn generic_configs_are_objects() {
for capability in generic_capabilities() {
assert!(
capability.config_value().is_object(),
"{} carries a non-object config",
capability.capability_id()
);
}
}
#[test]
fn generic_names_the_shell_and_filesystem_it_promises() {
let ids: Vec<_> = generic_capabilities()
.iter()
.map(|capability| capability.capability_id().to_string())
.collect();
for expected in ["session_file_system", "bashkit_shell", "web_fetch"] {
assert!(ids.iter().any(|id| id == expected), "missing {expected}");
}
}
}