Refactor: Dismantle MemoryState into semantic domain sub-structs
This commit is contained in:
1 parent
0e866f2465
commit
a34554b7ff
13 files changed
+186
-158
No files matched your search
+74
-46
@@ -13,32 +13,50 @@ pub struct GenericEvent {
|
||||
pub payload: serde_json::Value,
|
||||
}
|
||||
|
||||
pub struct ProjectStores {
|
||||
pub tasks: Store<Vec<Task>>,
|
||||
pub milestones: Store<Vec<Milestone>>,
|
||||
pub pr_checklists: Store<Vec<PrChecklistItem>>,
|
||||
pub context_workspaces: Store<Vec<ContextWorkspace>>,
|
||||
pub pinned_files: Store<Vec<PinnedFile>>,
|
||||
}
|
||||
|
||||
pub struct CodeStores {
|
||||
pub ledger: Store<Vec<CodeChange>>,
|
||||
pub snippets: Store<Vec<Snippet>>,
|
||||
pub adrs: Store<Vec<Adr>>,
|
||||
pub error_fixes: Store<Vec<ErrorFix>>,
|
||||
pub tech_debts: Store<Vec<TechDebt>>,
|
||||
pub sticky: Store<Vec<StickyNote>>,
|
||||
}
|
||||
|
||||
pub struct EnvironmentStores {
|
||||
pub env_fingerprints: Store<HashMap<String, EnvFingerprint>>,
|
||||
pub env_requirements: Store<Vec<EnvRequirement>>,
|
||||
pub environments: Store<Vec<EnvironmentDetail>>,
|
||||
pub gates: Store<Vec<GateRecord>>,
|
||||
pub prefs: Store<HashMap<String, Preference>>,
|
||||
}
|
||||
|
||||
pub struct TelemetryStores {
|
||||
pub session_summaries: Store<Vec<SessionSummary>>,
|
||||
pub handoff_memos: Store<Vec<HandoffMemo>>,
|
||||
pub recent_activities: Store<std::collections::VecDeque<serde_json::Value>>,
|
||||
pub terminal_history: Store<std::collections::VecDeque<TerminalHistory>>,
|
||||
}
|
||||
|
||||
pub struct MemoryState {
|
||||
pub base_dir: PathBuf,
|
||||
pub clipboard_watch_mode: tokio::sync::RwLock<bool>,
|
||||
pub graph: Store<KnowledgeGraph>,
|
||||
pub search_index: RwLock<MemoryIndex>,
|
||||
pub vector_db: tokio::sync::RwLock<Option<VectorDB>>,
|
||||
pub ledger: Store<Vec<CodeChange>>,
|
||||
pub sticky: Store<Vec<StickyNote>>,
|
||||
pub tasks: Store<Vec<Task>>,
|
||||
pub snippets: Store<Vec<Snippet>>,
|
||||
pub adrs: Store<Vec<Adr>>,
|
||||
pub prefs: Store<HashMap<String, Preference>>,
|
||||
pub error_fixes: Store<Vec<ErrorFix>>,
|
||||
pub pinned_files: Store<Vec<PinnedFile>>,
|
||||
pub session_summaries: Store<Vec<SessionSummary>>,
|
||||
pub handoff_memos: Store<Vec<HandoffMemo>>,
|
||||
pub env_fingerprints: Store<HashMap<String, EnvFingerprint>>,
|
||||
pub env_requirements: Store<Vec<EnvRequirement>>,
|
||||
pub milestones: Store<Vec<Milestone>>,
|
||||
pub environments: Store<Vec<EnvironmentDetail>>,
|
||||
pub pr_checklists: Store<Vec<PrChecklistItem>>,
|
||||
pub tech_debts: Store<Vec<TechDebt>>,
|
||||
pub gates: Store<Vec<GateRecord>>,
|
||||
pub context_workspaces: Store<Vec<ContextWorkspace>>,
|
||||
pub recent_activities: Store<std::collections::VecDeque<serde_json::Value>>,
|
||||
pub terminal_history: Store<std::collections::VecDeque<TerminalHistory>>,
|
||||
|
||||
pub project: ProjectStores,
|
||||
pub code: CodeStores,
|
||||
pub env: EnvironmentStores,
|
||||
pub telemetry: TelemetryStores,
|
||||
|
||||
pub activity_tx: tokio::sync::broadcast::Sender<String>,
|
||||
pub event_bus_tx: tokio::sync::broadcast::Sender<GenericEvent>,
|
||||
}
|
||||
@@ -66,26 +84,36 @@ impl MemoryState {
|
||||
}
|
||||
}),
|
||||
vector_db: tokio::sync::RwLock::new(None),
|
||||
ledger: Store::new("audit_ledger", db.clone()),
|
||||
sticky: Store::new("sticky_notes", db.clone()),
|
||||
tasks: Store::new("tasks", db.clone()),
|
||||
snippets: Store::new("snippets", db.clone()),
|
||||
adrs: Store::new("adrs", db.clone()),
|
||||
prefs: Store::new("preferences", db.clone()),
|
||||
error_fixes: Store::new("error_fixes", db.clone()),
|
||||
pinned_files: Store::new("pinned_files", db.clone()),
|
||||
session_summaries: Store::new("session_summaries", db.clone()),
|
||||
handoff_memos: Store::new("handoff_memos", db.clone()),
|
||||
env_fingerprints: Store::new("env_fingerprints", db.clone()),
|
||||
env_requirements: Store::new("env_requirements", db.clone()),
|
||||
milestones: Store::new("milestones", db.clone()),
|
||||
environments: Store::new("environments", db.clone()),
|
||||
pr_checklists: Store::new("pr_checklists", db.clone()),
|
||||
tech_debts: Store::new("tech_debts", db.clone()),
|
||||
gates: Store::new("gates", db.clone()),
|
||||
context_workspaces: Store::new("context_workspaces", db.clone()),
|
||||
recent_activities: Store::new("recent_activities", db.clone()),
|
||||
terminal_history: Store::new("terminal_history", db.clone()),
|
||||
|
||||
project: ProjectStores {
|
||||
tasks: Store::new("tasks", db.clone()),
|
||||
milestones: Store::new("milestones", db.clone()),
|
||||
pr_checklists: Store::new("pr_checklists", db.clone()),
|
||||
context_workspaces: Store::new("context_workspaces", db.clone()),
|
||||
pinned_files: Store::new("pinned_files", db.clone()),
|
||||
},
|
||||
code: CodeStores {
|
||||
ledger: Store::new("audit_ledger", db.clone()),
|
||||
snippets: Store::new("snippets", db.clone()),
|
||||
adrs: Store::new("adrs", db.clone()),
|
||||
error_fixes: Store::new("error_fixes", db.clone()),
|
||||
tech_debts: Store::new("tech_debts", db.clone()),
|
||||
sticky: Store::new("sticky_notes", db.clone()),
|
||||
},
|
||||
env: EnvironmentStores {
|
||||
env_fingerprints: Store::new("env_fingerprints", db.clone()),
|
||||
env_requirements: Store::new("env_requirements", db.clone()),
|
||||
environments: Store::new("environments", db.clone()),
|
||||
gates: Store::new("gates", db.clone()),
|
||||
prefs: Store::new("preferences", db.clone()),
|
||||
},
|
||||
telemetry: TelemetryStores {
|
||||
session_summaries: Store::new("session_summaries", db.clone()),
|
||||
handoff_memos: Store::new("handoff_memos", db.clone()),
|
||||
recent_activities: Store::new("recent_activities", db.clone()),
|
||||
terminal_history: Store::new("terminal_history", db.clone()),
|
||||
},
|
||||
|
||||
activity_tx: tokio::sync::broadcast::channel(100).0,
|
||||
event_bus_tx: tokio::sync::broadcast::channel(1000).0,
|
||||
}
|
||||
@@ -102,7 +130,7 @@ impl MemoryState {
|
||||
"message": message
|
||||
});
|
||||
|
||||
self.recent_activities.modify(|activities| {
|
||||
self.telemetry.recent_activities.modify(|activities| {
|
||||
activities.push_back(item.clone());
|
||||
if activities.len() > 100 {
|
||||
activities.pop_front();
|
||||
@@ -143,9 +171,9 @@ impl MemoryState {
|
||||
let entities: Vec<_> = self
|
||||
.graph
|
||||
.read_with(|g| g.entities.values().cloned().collect());
|
||||
let tasks = self.tasks.read_with(|t| t.clone());
|
||||
let snippets = self.snippets.read_with(|s| s.clone());
|
||||
let adrs = self.adrs.read_with(|a| a.clone());
|
||||
let tasks = self.project.tasks.read_with(|t| t.clone());
|
||||
let snippets = self.code.snippets.read_with(|s| s.clone());
|
||||
let adrs = self.code.adrs.read_with(|a| a.clone());
|
||||
|
||||
tracing::info!(
|
||||
"rebuild_index: found {} entities, {} tasks",
|
||||
@@ -195,7 +223,7 @@ mod tests {
|
||||
assert_eq!(state.base_dir, dir.path());
|
||||
|
||||
// Write a test value
|
||||
state.tasks.modify(|tasks| {
|
||||
state.project.tasks.modify(|tasks| {
|
||||
tasks.push(Task {
|
||||
id: "123".to_string(),
|
||||
title: "Test Task".to_string(),
|
||||
@@ -212,7 +240,7 @@ mod tests {
|
||||
});
|
||||
|
||||
// Ensure it is saved
|
||||
state.tasks.read_with(|tasks| {
|
||||
state.project.tasks.read_with(|tasks| {
|
||||
assert_eq!(tasks.len(), 1);
|
||||
assert_eq!(tasks[0].id, "123");
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user