Skip to main content

brainwires_memory/dream/
task.rs

1//! Scheduled dream task — wraps [`DreamConsolidator`](crate::dream::consolidator::DreamConsolidator) for periodic execution.
2
3use std::sync::Arc;
4
5use anyhow::Result;
6use tokio::sync::Mutex;
7
8use super::consolidator::{DreamConsolidator, DreamSessionStore};
9use super::metrics::DreamReport;
10
11/// A scheduled task that runs the dream consolidation cycle.
12///
13/// Designed to be driven by the autonomy scheduler's cron system or called
14/// manually for on-demand consolidation.
15pub struct DreamTask {
16    consolidator: Arc<Mutex<DreamConsolidator>>,
17    session_store: Arc<dyn DreamSessionStore>,
18    /// Cron expression controlling how often the dream cycle runs
19    /// (e.g. `"0 3 * * *"` for 3 AM daily).
20    cron_expr: String,
21}
22
23impl DreamTask {
24    /// Create a new dream task.
25    pub fn new(
26        consolidator: Arc<Mutex<DreamConsolidator>>,
27        session_store: Arc<dyn DreamSessionStore>,
28        cron_expr: impl Into<String>,
29    ) -> Self {
30        Self {
31            consolidator,
32            session_store,
33            cron_expr: cron_expr.into(),
34        }
35    }
36
37    /// Run one consolidation cycle immediately.
38    pub async fn run_once(&self) -> Result<DreamReport> {
39        let mut consolidator = self.consolidator.lock().await;
40        consolidator.run_cycle(&*self.session_store).await
41    }
42
43    /// Return the cron expression for this task.
44    pub fn cron_expr(&self) -> &str {
45        &self.cron_expr
46    }
47}