Skip to main content

vfa_tui/models/
skill.rs

1use serde::{Deserialize, Serialize};
2
3use super::harness::{Harness, SourceType};
4use super::provider::Provider;
5
6/// The type discriminator for skill entries.
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
8pub enum SkillType {
9    #[serde(rename = "skill")]
10    Skill,
11}
12
13impl std::fmt::Display for SkillType {
14    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15        match self {
16            SkillType::Skill => write!(f, "skill"),
17        }
18    }
19}
20
21/// A catalog skill entry.
22#[derive(Debug, Clone, Serialize, Deserialize)]
23#[serde(deny_unknown_fields)]
24pub struct Skill {
25    pub id: String,
26    pub name: String,
27    #[serde(rename = "type")]
28    pub entity_type: SkillType,
29    pub provider: Provider,
30    pub harnesses: Vec<Harness>,
31    pub summary: String,
32    pub source_type: SourceType,
33    pub official_docs: Vec<String>,
34    pub security_notes: String,
35    pub last_verified: String,
36    pub path: String,
37    pub author: Option<String>,
38    pub version: Option<String>,
39    #[serde(default)]
40    pub category: Option<String>,
41    #[serde(default)]
42    pub certifications: Option<Vec<String>>,
43    #[serde(default)]
44    pub companion_agents: Option<Vec<String>>,
45    #[serde(default)]
46    pub companion_review_skills: Option<Vec<String>>,
47    #[serde(default)]
48    pub companion_skills: Option<Vec<String>>,
49    #[serde(default)]
50    pub execution_tier: Option<String>,
51    #[serde(default)]
52    pub feeds_skills: Option<Vec<String>>,
53    #[serde(default)]
54    pub lifecycle: Option<String>,
55    #[serde(default)]
56    pub mcp_servers: Option<Vec<String>>,
57    #[serde(default)]
58    pub oauth_scopes: Option<Vec<String>>,
59    #[serde(default)]
60    pub production_allowed: Option<bool>,
61    #[serde(default)]
62    pub run_as_permissions: Option<serde_json::Value>,
63    #[serde(default)]
64    pub sandbox_only: Option<bool>,
65    #[serde(default)]
66    pub source_attribution: Option<String>,
67    #[serde(default)]
68    pub verify_before_merge: Option<String>,
69}