use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ComposesWithReflectionEntry {
pub namespace: String,
pub min_depth: u32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct SkillManifest {
pub namespace: String,
pub name: String,
pub description: String,
pub license: Option<String>,
pub compatibility: Option<String>,
pub allowed_tools: Vec<String>,
pub composes_with_reflections: Vec<ComposesWithReflectionEntry>,
pub metadata: serde_json::Value,
pub body: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SkillRow {
pub id: String,
pub namespace: String,
pub name: String,
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub license: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub compatibility: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allowed_tools: Option<String>,
pub metadata: String,
pub digest_hex: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub signing_agent: Option<String>,
pub created_at: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub superseded_by: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SkillResourceRow {
pub skill_id: String,
pub resource_path: String,
pub resource_kind: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub digest_hex: Option<String>,
}