skilllite_core/
planning.rs1use serde::{Deserialize, Serialize};
7
8fn default_priority() -> u32 {
9 50
10}
11
12fn default_origin() -> String {
13 "seed".to_string()
14}
15
16fn default_source_quality() -> f32 {
17 0.70
18}
19
20fn default_source_accessibility() -> f32 {
21 0.80
22}
23
24fn default_enabled() -> bool {
25 true
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct PlanningRule {
31 pub id: String,
32 #[serde(default = "default_priority")]
33 pub priority: u32,
34 #[serde(default)]
35 pub keywords: Vec<String>,
36 #[serde(default)]
37 pub context_keywords: Vec<String>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub tool_hint: Option<String>,
40 pub instruction: String,
41 #[serde(default)]
42 pub mutable: bool,
43 #[serde(default = "default_origin")]
44 pub origin: String,
45 #[serde(default)]
46 pub reusable: bool,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub effectiveness: Option<f32>,
49 #[serde(default, skip_serializing_if = "Option::is_none")]
50 pub trigger_count: Option<u32>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct SourceEntry {
56 pub id: String,
57 pub name: String,
58 pub url: String,
59 pub source_type: String,
60 pub parser: String,
61 pub region: String,
62 pub language: String,
63 #[serde(default)]
64 pub domains: Vec<String>,
65 #[serde(default = "default_source_quality")]
66 pub quality_score: f32,
67 #[serde(default = "default_source_accessibility")]
68 pub accessibility_score: f32,
69 #[serde(default)]
70 pub rules_contributed: u32,
71 #[serde(default)]
72 pub fetch_success_count: u32,
73 #[serde(default)]
74 pub fetch_fail_count: u32,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub last_fetched: Option<String>,
77 #[serde(default)]
78 pub mutable: bool,
79 #[serde(default = "default_origin")]
80 pub origin: String,
81 #[serde(default = "default_enabled")]
82 pub enabled: bool,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
87pub struct SourceRegistry {
88 pub version: u32,
89 pub sources: Vec<SourceEntry>,
90}