phi_agent/cli/
approval.rs1use agent_base::{AgentResult, ApprovalDecision, ApprovalHandler, ApprovalRequest};
2use async_trait::async_trait;
3
4#[derive(Clone, Debug)]
6pub enum ApprovalMode {
7 Auto,
9 DenyAll,
11}
12
13pub struct AutoApprovalHandler {
15 mode: ApprovalMode,
16}
17
18impl AutoApprovalHandler {
19 pub fn new(mode: ApprovalMode) -> Self {
20 Self { mode }
21 }
22}
23
24#[async_trait]
25impl ApprovalHandler for AutoApprovalHandler {
26 async fn approve(
27 &self,
28 request: ApprovalRequest,
29 _cancel_token: tokio_util::sync::CancellationToken,
30 ) -> AgentResult<ApprovalDecision> {
31 match &self.mode {
32 ApprovalMode::Auto => {
33 tracing::info!(decision = "AllowAlways", tool = %request.title, "auto-approved");
34 Ok(ApprovalDecision::AllowAlways)
35 }
36 ApprovalMode::DenyAll => {
37 tracing::info!(decision = "Deny", tool = %request.title, "auto-denied");
38 Ok(ApprovalDecision::Deny)
39 }
40 }
41 }
42}