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 {
18 mode: ApprovalMode,
19}
20
21impl AutoApprovalHandler {
22 pub fn new(mode: ApprovalMode) -> Self {
24 Self { mode }
25 }
26}
27
28#[async_trait]
29impl ApprovalHandler for AutoApprovalHandler {
30 async fn approve(
31 &self,
32 request: ApprovalRequest,
33 _cancel_token: tokio_util::sync::CancellationToken,
34 ) -> AgentResult<ApprovalDecision> {
35 match &self.mode {
36 ApprovalMode::Auto => {
37 tracing::info!(decision = "AllowAlways", tool = %request.title, "auto-approved");
38 Ok(ApprovalDecision::AllowAlways)
39 },
40 ApprovalMode::DenyAll => {
41 tracing::info!(decision = "Deny", tool = %request.title, "auto-denied");
42 Ok(ApprovalDecision::Deny)
43 },
44 }
45 }
46}