use argentor_core::{ArgentorResult, ToolCall, ToolResult};
use argentor_security::{Capability, PermissionSet};
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SkillDescriptor {
pub name: String,
pub description: String,
pub parameters_schema: serde_json::Value,
pub required_capabilities: Vec<Capability>,
#[serde(default)]
pub requires_approval: bool,
}
#[async_trait]
pub trait Skill: Send + Sync {
fn descriptor(&self) -> &SkillDescriptor;
async fn execute(&self, call: ToolCall) -> ArgentorResult<ToolResult>;
fn validate_arguments(
&self,
_call: &ToolCall,
_permissions: &PermissionSet,
) -> ArgentorResult<()> {
Ok(())
}
}