mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
aad59a0916
## Summary Generated memory rows and their stage-one/stage-two job state currently live in `state_5.sqlite` alongside thread metadata. That makes memory cleanup and regeneration share the main state schema even though those rows are memory-pipeline data and can be rebuilt independently from the durable thread records. This PR moves the memory-owned tables into a dedicated `memories_1.sqlite` runtime database while keeping thread metadata in `state_5.sqlite`. ## Changes - Adds a separate memories DB runtime, migrator, path helpers, telemetry kind, and Bazel compile data for `state/memory_migrations`. - Introduces `MemoryStore` behind `StateRuntime::memories()` and moves memory table/job operations onto that store. - Drops the old memory tables from the state DB and recreates their schema in `state/memory_migrations/0001_memories.sql`. - Updates memory startup, citation usage tracking, rollout pollution handling, `debug clear-memories`, and app-server `memory/reset` to operate through the memories DB. - Preserves cross-DB behavior by hydrating thread metadata from the state DB when selecting visible memory outputs and checking stage-one staleness. ## Verification - Added/updated `codex-state` tests for deleted-thread memory visibility and already-polluted phase-two enqueue behavior. - Updated `debug clear-memories`, app-server `memory/reset`, and memories startup tests to seed and assert memory rows through `memories_1.sqlite`.
70 lines
2.2 KiB
Rust
70 lines
2.2 KiB
Rust
use chrono::DateTime;
|
|
use chrono::Utc;
|
|
use codex_protocol::ThreadId;
|
|
use std::path::PathBuf;
|
|
|
|
use super::ThreadMetadata;
|
|
|
|
/// Stored stage-1 memory extraction output for a single thread.
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
pub struct Stage1Output {
|
|
pub thread_id: ThreadId,
|
|
pub rollout_path: PathBuf,
|
|
pub source_updated_at: DateTime<Utc>,
|
|
pub raw_memory: String,
|
|
pub rollout_summary: String,
|
|
pub rollout_slug: Option<String>,
|
|
pub cwd: PathBuf,
|
|
pub git_branch: Option<String>,
|
|
pub generated_at: DateTime<Utc>,
|
|
}
|
|
|
|
/// Result of trying to claim a stage-1 memory extraction job.
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
pub enum Stage1JobClaimOutcome {
|
|
/// The caller owns the job and should continue with extraction.
|
|
Claimed { ownership_token: String },
|
|
/// Existing output is already newer than or equal to the source rollout.
|
|
SkippedUpToDate,
|
|
/// Another worker currently owns a fresh lease for this job.
|
|
SkippedRunning,
|
|
/// The job is in backoff and should not be retried yet.
|
|
SkippedRetryBackoff,
|
|
/// The job has exhausted retries and should not be retried automatically.
|
|
SkippedRetryExhausted,
|
|
}
|
|
|
|
/// Claimed stage-1 job with thread metadata.
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
pub struct Stage1JobClaim {
|
|
pub thread: ThreadMetadata,
|
|
pub ownership_token: String,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub struct Stage1StartupClaimParams<'a> {
|
|
pub scan_limit: usize,
|
|
pub max_claimed: usize,
|
|
pub max_age_days: i64,
|
|
pub min_rollout_idle_hours: i64,
|
|
pub allowed_sources: &'a [String],
|
|
pub lease_seconds: i64,
|
|
}
|
|
|
|
/// Result of trying to claim a phase-2 consolidation job.
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
pub enum Phase2JobClaimOutcome {
|
|
/// The caller owns the global lock and may inspect the memory workspace.
|
|
Claimed {
|
|
ownership_token: String,
|
|
/// Snapshot of `input_watermark` at claim time.
|
|
input_watermark: i64,
|
|
},
|
|
/// The global job is in retry backoff.
|
|
SkippedRetryUnavailable,
|
|
/// The global job completed recently enough that consolidation is cooling down.
|
|
SkippedCooldown,
|
|
/// Another worker currently owns a fresh global consolidation lease.
|
|
SkippedRunning,
|
|
}
|