use super::*;
fn make_runtime_bits(
mode: ChildPermissionMode,
read_only: bool,
autonomy: AgentAutonomy,
) -> Arc<MultiAgentRuntime> {
let config = MultiAgentConfig {
child_permission_mode: mode,
child_read_only: read_only,
control: ControlConfig {
autonomy,
..Default::default()
},
..MultiAgentConfig::enabled()
};
Arc::new(MultiAgentRuntime::new(
config,
Arc::new(StreamingStub),
vec![],
tokio_util::sync::CancellationToken::new(),
None,
agent_base::Language::En,
None,
None,
))
}
#[test]
fn autonomy_floors_permission_and_forces_nudge() {
use ChildPermissionMode::{Full, None as NoPerm, PerSpawn};
let auto_full = make_runtime_bits(Full, true, AgentAutonomy::Auto);
assert!(auto_full.spawn_permission(Some(false)));
assert!(auto_full.spawn_permission(None));
let auto_no = make_runtime_bits(NoPerm, true, AgentAutonomy::Auto);
assert!(!auto_no.spawn_permission(Some(true)));
let auto_per = make_runtime_bits(PerSpawn, true, AgentAutonomy::Auto);
assert!(auto_per.spawn_permission(Some(true)));
assert!(!auto_per.spawn_permission(None));
let manual_full = make_runtime_bits(Full, false, AgentAutonomy::Manual);
assert!(!manual_full.spawn_permission(Some(true)));
let write_tools: Vec<String> = vec!["write_file".to_string(), "edit_file".to_string()];
let no_exclusions = std::collections::BTreeSet::new();
assert!(crate::multi_agent::capability::read_only_nudge(
AgentAutonomy::Manual,
false,
&no_exclusions,
&write_tools
));
assert!(!crate::multi_agent::capability::read_only_nudge(
AgentAutonomy::Auto,
false,
&no_exclusions,
&write_tools
));
assert!(crate::multi_agent::capability::read_only_nudge(
AgentAutonomy::Auto,
true,
&no_exclusions,
&write_tools
));
}