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)));
assert!(auto_full.effective_read_only_nudge());
assert!(!make_runtime_bits(Full, false, AgentAutonomy::Auto).effective_read_only_nudge());
assert!(make_runtime_bits(Full, false, AgentAutonomy::Manual).effective_read_only_nudge());
}