zerolaunch_plugin_protocol/
manifest.rs1use serde::{Deserialize, Serialize};
2use zerolaunch_plugin_api::PluginMode;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct Manifest {
7 #[serde(rename = "plugin")]
9 pub plugin: PluginSection,
10 #[serde(default, rename = "runtime")]
12 pub runtime: RuntimeSection,
13 #[serde(default, rename = "components")]
15 pub components: ComponentsSection,
16 #[serde(default, rename = "ui")]
18 pub ui: Option<UiSection>,
19 #[serde(default, rename = "icon")]
21 pub icon: Option<IconSection>,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct PluginSection {
27 #[serde(rename = "id")]
29 pub id: String,
30 #[serde(rename = "name")]
32 pub name: String,
33 #[serde(rename = "version")]
35 pub version: String,
36 #[serde(rename = "description")]
38 pub description: String,
39 #[serde(rename = "author")]
41 pub author: String,
42 #[serde(rename = "mode")]
44 pub mode: PluginMode,
45 #[serde(default, rename = "hotkey")]
47 pub hotkey: Option<String>,
48 #[serde(rename = "triggerKeywords")]
51 pub trigger_keywords: Vec<String>,
52 #[serde(default, rename = "triggerDescription")]
56 pub trigger_description: Option<String>,
57 #[serde(rename = "supportedOs")]
59 pub supported_os: Vec<String>,
60 #[serde(rename = "priority")]
62 pub priority: u32,
63 #[serde(default, rename = "homepage")]
65 pub homepage: Option<String>,
66 #[serde(default, rename = "license")]
68 pub license: Option<String>,
69}
70
71#[derive(Debug, Clone, Default, Serialize, Deserialize)]
73pub struct RuntimeSection {
74 #[serde(rename = "command")]
76 pub command: String,
77 #[serde(default, rename = "args")]
79 pub args: Vec<String>,
80 #[serde(default = "default_startup_timeout", rename = "startupTimeout")]
82 pub startup_timeout: u64,
83 #[serde(default = "default_true", rename = "autoRestart")]
85 pub auto_restart: bool,
86 #[serde(default = "default_max_restart", rename = "maxRestart")]
88 pub max_restart: u32,
89}
90
91#[derive(Debug, Clone, Default, Serialize, Deserialize)]
94pub struct ComponentsSection {
95 #[serde(default = "default_provides", rename = "provides")]
99 pub provides: Vec<String>,
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct UiSection {
106 #[serde(rename = "panelEntry")]
108 pub panel_entry: Option<String>,
109 #[serde(rename = "settingsEntry")]
111 pub settings_entry: Option<String>,
112 #[serde(rename = "resultItemEntry")]
114 pub result_item_entry: Option<String>,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
119pub struct IconSection {
120 #[serde(rename = "path")]
122 pub path: String,
123}
124
125fn default_startup_timeout() -> u64 {
126 10
127}
128fn default_true() -> bool {
129 true
130}
131fn default_max_restart() -> u32 {
132 3
133}
134fn default_provides() -> Vec<String> {
135 vec![]
136}
137
138pub const REQUIRED_PROVIDES_VALUES: &[&str] = &[
140 "plugin",
141 "data_source",
142 "action_executor",
143 "search_engine",
144 "score_booster",
145 "keyword_optimizer",
146 "keyword_injector",
147];
148
149pub const PLUGIN_ID_RE: &str = r"\A[a-z][a-z0-9]*(\.[a-z][a-z0-9_-]*)+\z";