Skip to main content

spool/domain/
wakeup.rs

1use crate::domain::{ConfidenceTier, TargetTool};
2use serde::{Deserialize, Serialize};
3use ts_rs::TS;
4
5#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, TS)]
6#[serde(rename_all = "snake_case")]
7#[ts(export, export_to = "../frontend/src/lib/types/generated/")]
8pub enum WakeupProfile {
9    Developer,
10    Project,
11}
12
13#[derive(Debug, Clone, Serialize, TS)]
14#[ts(export, export_to = "../frontend/src/lib/types/generated/")]
15pub struct WakeupQuery {
16    pub task: String,
17    pub cwd: String,
18    pub files: Vec<String>,
19}
20
21#[derive(Debug, Clone, Serialize, Default, TS)]
22#[ts(export, export_to = "../frontend/src/lib/types/generated/")]
23pub struct WakeupIdentity {
24    pub project_id: Option<String>,
25    pub project_name: Option<String>,
26    pub repo_paths: Vec<String>,
27    pub modules: Vec<String>,
28    pub scenes: Vec<String>,
29    pub active_profile: String,
30    pub developer_roots: Vec<String>,
31}
32
33#[derive(Debug, Clone, Serialize, Default, TS)]
34#[ts(export, export_to = "../frontend/src/lib/types/generated/")]
35pub struct WakeupSection {
36    pub items: Vec<WakeupMemoryItem>,
37}
38
39#[derive(Debug, Clone, Serialize, TS)]
40#[ts(export, export_to = "../frontend/src/lib/types/generated/")]
41pub struct WakeupMemoryItem {
42    pub title: String,
43    pub summary: String,
44    pub memory_type: Option<String>,
45    pub source: String,
46    pub sensitivity: Option<String>,
47    pub source_of_truth: bool,
48    pub confidence: ConfidenceTier,
49}
50
51#[derive(Debug, Clone, Serialize, TS)]
52#[ts(export, export_to = "../frontend/src/lib/types/generated/")]
53pub struct WakeupRecommendedNote {
54    pub path: String,
55    pub title: String,
56    pub memory_type: Option<String>,
57    pub why_relevant: String,
58    pub score: i32,
59    pub confidence: ConfidenceTier,
60}
61
62#[derive(Debug, Clone, Serialize, TS)]
63#[ts(export, export_to = "../frontend/src/lib/types/generated/")]
64pub struct WakeupProvenanceSource {
65    pub path: String,
66    pub source_of_truth: bool,
67    pub memory_type: Option<String>,
68}
69
70#[derive(Debug, Clone, Serialize, Default, TS)]
71#[ts(export, export_to = "../frontend/src/lib/types/generated/")]
72pub struct WakeupProvenance {
73    pub derived_from: Vec<WakeupProvenanceSource>,
74    pub selection_basis: Vec<String>,
75}
76
77#[derive(Debug, Clone, Serialize, TS)]
78#[ts(export, export_to = "../frontend/src/lib/types/generated/")]
79pub struct WakeupPolicy {
80    pub max_sensitivity_included: Option<String>,
81    pub redactions_applied: bool,
82    pub suppressed_note_count: usize,
83    pub policy_mode: String,
84}
85
86#[derive(Debug, Clone, Serialize, TS)]
87#[ts(export, export_to = "../frontend/src/lib/types/generated/")]
88pub struct WakeupPacket {
89    pub version: String,
90    pub generated_at: String,
91    pub target: TargetTool,
92    pub profile: WakeupProfile,
93    pub query: WakeupQuery,
94    pub identity: WakeupIdentity,
95    #[serde(default, skip_serializing_if = "Option::is_none")]
96    pub knowledge_index: Option<String>,
97    pub working_style: WakeupSection,
98    pub active_context: WakeupSection,
99    pub priorities: Vec<String>,
100    pub constraints: Vec<WakeupMemoryItem>,
101    pub decisions: Vec<WakeupMemoryItem>,
102    pub incidents: Vec<WakeupMemoryItem>,
103    pub recommended_notes: Vec<WakeupRecommendedNote>,
104    #[serde(default, skip_serializing_if = "Vec::is_empty")]
105    pub maintenance_hints: Vec<String>,
106    pub provenance: WakeupProvenance,
107    pub policy: WakeupPolicy,
108}