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}