aidens-tool-kit 0.1.0

Tool registry, exposure planning, and safe sandbox-validated dispatch
Documentation
use aidens_contracts::{CanonicalToolSideEffectClass, ProviderRouteReportV1};
use aidens_permit_kit::PermitPolicyV1;
use std::collections::BTreeSet;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ToolExposurePolicyV1 {
    pub allowed_tool_ids: Option<BTreeSet<String>>,
    pub allowed_risk_classes: BTreeSet<CanonicalToolSideEffectClass>,
    pub max_tools: Option<usize>,
    pub native_tool_loop_available: bool,
    pub permit_policy: PermitPolicyV1,
    pub sandbox_root: Option<String>,
}

impl ToolExposurePolicyV1 {
    pub fn read_only_default() -> Self {
        Self {
            allowed_tool_ids: None,
            allowed_risk_classes: BTreeSet::from([CanonicalToolSideEffectClass::ReadOnly]),
            max_tools: Some(64),
            native_tool_loop_available: false,
            permit_policy: PermitPolicyV1::default(),
            sandbox_root: None,
        }
    }

    pub fn coding_agent_default() -> Self {
        Self {
            allowed_tool_ids: None,
            allowed_risk_classes: BTreeSet::from([
                CanonicalToolSideEffectClass::ReadOnly,
                CanonicalToolSideEffectClass::Write,
                CanonicalToolSideEffectClass::Admin,
            ]),
            max_tools: Some(64),
            native_tool_loop_available: false,
            permit_policy: PermitPolicyV1::default(),
            sandbox_root: None,
        }
    }

    pub fn for_provider_route(mut self, route: &ProviderRouteReportV1) -> Self {
        self.native_tool_loop_available = route.native_tool_loop;
        self
    }

    pub fn with_permit_policy(mut self, permit_policy: PermitPolicyV1) -> Self {
        self.permit_policy = permit_policy;
        self
    }

    pub fn with_sandbox_root(mut self, sandbox_root: impl Into<String>) -> Self {
        self.sandbox_root = Some(sandbox_root.into());
        self
    }
}