Skip to main content

vtcode_desktop_protocol/
composer.rs

1//! Native composer resource-discovery DTOs.
2
3use serde::{Deserialize, Serialize};
4
5/// A discoverable source for the native composer's Add menu.
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub enum ComposerResourceKind {
9    /// A CLI skill with an explicit dollar-name mention.
10    Skill,
11    /// An installed Agent Plugin.
12    Plugin,
13}
14
15/// Bounded, non-secret discovery metadata; never executable content.
16#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
17#[serde(rename_all = "camelCase")]
18pub struct ComposerResource {
19    /// Validated resource name.
20    pub name: String,
21    /// Short plain-text description.
22    pub description: String,
23    /// Which shared CLI discovery source owns this entry.
24    pub kind: ComposerResourceKind,
25}
26
27impl ComposerResource {
28    /// Resource names are safe single tokens for explicit CLI skill mentions.
29    pub fn is_valid_name(name: &str) -> bool {
30        !name.is_empty()
31            && name.len() <= 128
32            && name.bytes().all(|byte| byte.is_ascii_alphanumeric() || b"-_.".contains(&byte))
33    }
34}