use serde::{Deserialize, Serialize};
use super::SourceLocation;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ToolSurface {
pub name: String,
pub description: Option<String>,
pub input_schema: Option<serde_json::Value>,
pub output_schema: Option<serde_json::Value>,
pub declared_permissions: Vec<DeclaredPermission>,
pub defined_at: Option<SourceLocation>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeclaredPermission {
pub permission_type: PermissionType,
pub target: Option<String>,
pub description: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PermissionType {
FileRead,
FileWrite,
NetworkAccess,
ProcessExec,
EnvAccess,
DatabaseAccess,
Unknown,
}