Skip to main content

cortex_rs_daemon/
lib.rs

1// relay-daemon: tokio runtime host for background jobs
2// Purpose: schedule nightly decay pass and pattern mining; hosts MCP server in stdio mode
3// Public surface: run_mcp_server, run_background_jobs
4// NOT responsible for: tool implementations, config parsing, CLI surface
5// Test strategy: smoke test that jobs complete without panic on in-memory DB
6
7use anyhow::Result;
8use cortex_rs_core::{Db, CortexConfig};
9use cortex_rs_memory::MemoryStore;
10use cortex_rs_miner::PatternMiner;
11use tracing::info;
12
13/// Run nightly background maintenance: decay pass + pattern mining.
14/// Called once per day by relay-cli's background task or explicitly via `relay daemon jobs`.
15pub fn run_background_jobs(config: &CortexConfig) -> Result<()> {
16    let db_path = config.daemon.db_path();
17
18    let decay_db = Db::open(&db_path)?;
19    let memory = MemoryStore::with_config(
20        decay_db,
21        config.memory.hot_limit,
22        config.memory.cold_threshold_days,
23        config.memory.cold_confidence_max,
24        config.memory.decay_lambda,
25    );
26    let report = memory.decay_pass()?;
27    info!(
28        promoted = report.promoted_to_hot,
29        demoted = report.demoted_to_cold,
30        "decay pass complete"
31    );
32
33    let miner_db = Db::open(&db_path)?;
34    let miner = PatternMiner::new(miner_db);
35    let mine_report = miner.mine_patterns()?;
36    info!(
37        inserted = mine_report.patterns_inserted,
38        updated = mine_report.patterns_updated,
39        "pattern mining complete"
40    );
41
42    Ok(())
43}