Skip to main content

skilllite_core/
planning.rs

1//! Shared planning types used by agent and evolution.
2//!
3//! PlanningRule, SourceEntry, SourceRegistry are used for task planning
4//! and evolution (prompt learning, external knowledge).
5
6use 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/// A planning rule for task generation.
29#[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/// A single external information source entry.
54#[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/// The full source registry.
86#[derive(Debug, Clone, Serialize, Deserialize)]
87pub struct SourceRegistry {
88    pub version: u32,
89    pub sources: Vec<SourceEntry>,
90}