Skip to main content

vv_agent/tools/
policy.rs

1#[derive(Clone, Default)]
2pub struct ToolPolicy {
3    pub allowed_tools: Option<Vec<String>>,
4    pub disallowed_tools: Vec<String>,
5    pub approval: ApprovalPolicy,
6    pub max_concurrency: Option<usize>,
7}
8
9impl ToolPolicy {
10    pub fn allow_only(mut self, tools: impl IntoIterator<Item = impl Into<String>>) -> Self {
11        self.allowed_tools = Some(tools.into_iter().map(Into::into).collect());
12        self
13    }
14
15    pub fn disallow(mut self, tool: impl Into<String>) -> Self {
16        self.disallowed_tools.push(tool.into());
17        self
18    }
19}
20
21#[derive(Debug, Clone, Default, PartialEq, Eq)]
22pub enum ApprovalPolicy {
23    #[default]
24    Never,
25    Always,
26    OnRequest,
27}
28
29#[derive(Debug, Clone, PartialEq, Eq)]
30pub enum ApprovalDecision {
31    Approved,
32    Denied(String),
33    TimedOut(String),
34    NeedsApproval,
35}
36
37impl ApprovalDecision {
38    pub fn allow() -> Self {
39        Self::Approved
40    }
41
42    pub fn deny(reason: impl Into<String>) -> Self {
43        Self::Denied(reason.into())
44    }
45
46    pub fn timeout(reason: impl Into<String>) -> Self {
47        Self::TimedOut(reason.into())
48    }
49}