1use std::path::PathBuf;
4
5use async_trait::async_trait;
6use tokio_util::sync::CancellationToken;
7
8use crate::{AgentError, ToolRisk};
9
10#[derive(Debug, Clone)]
11pub struct ApprovalRequest {
12 pub call_id: String,
13 pub name: String,
14 pub risk: ToolRisk,
15 pub cwd: PathBuf,
16 pub summary: String,
18 pub command: Option<String>,
21}
22
23#[async_trait]
24pub trait ApprovalGate: Send + Sync {
25 async fn approve(
26 &self,
27 request: ApprovalRequest,
28 cancellation: CancellationToken,
29 ) -> Result<bool, AgentError>;
30}