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 NeedsApproval,
34}