Skip to main content

agent_sdk/types/
permissions.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4// Re-export shared permission types from starpod-hooks
5pub use starpod_hooks::{PermissionLevel, PermissionUpdate};
6
7/// Result of a permission check from the `can_use_tool` callback.
8#[derive(Debug, Clone, Serialize, Deserialize)]
9#[serde(tag = "behavior")]
10pub enum PermissionResult {
11    #[serde(rename = "allow")]
12    Allow {
13        #[serde(skip_serializing_if = "Option::is_none")]
14        updated_input: Option<HashMap<String, serde_json::Value>>,
15        #[serde(skip_serializing_if = "Option::is_none")]
16        updated_permissions: Option<Vec<PermissionUpdate>>,
17        #[serde(skip_serializing_if = "Option::is_none")]
18        tool_use_id: Option<String>,
19    },
20    #[serde(rename = "deny")]
21    Deny {
22        message: String,
23        #[serde(skip_serializing_if = "Option::is_none")]
24        interrupt: Option<bool>,
25        #[serde(skip_serializing_if = "Option::is_none")]
26        tool_use_id: Option<String>,
27    },
28}
29
30/// Options passed to the `can_use_tool` callback.
31#[derive(Debug, Clone)]
32pub struct CanUseToolOptions {
33    pub suggestions: Vec<PermissionUpdate>,
34    pub blocked_path: Option<String>,
35    pub decision_reason: Option<String>,
36    pub tool_use_id: String,
37    pub agent_id: Option<String>,
38}