sqlite-graphrag 1.2.7

Persistent GraphRAG memory for Claude Code, Codex, Cursor, and 27 AI agents — one self-contained ~19 MiB Rust binary, zero daemon. Never re-explain your codebase again. Hybrid retrieval (FTS5 BM25 + cosine similarity + multi-hop graph traversal) surfaces the right memory in milliseconds. Embedding and entity enrichment run as parallel REST calls against your cloud LLM — no fragile headless subprocesses, no ONNX runtime, no model downloads. Soft-delete with full version history, transactional atomic writes, BLAKE3-tracked mutations. OAuth-only: raw API keys ABORT the spawn.
Documentation
//! `enrich-summary` family: the single closing record of a drain run.

use serde::Serialize;

#[derive(Debug, Serialize)]
pub(crate) struct EnrichSummary {
    pub(crate) summary: bool,
    pub(crate) operation: String,
    pub(crate) items_total: usize,
    pub(crate) completed: usize,
    pub(crate) failed: usize,
    pub(crate) skipped: usize,
    pub(crate) cost_usd: f64,
    pub(crate) elapsed_ms: u64,
    /// v1.0.84 (ADR-0042): discriminator of the embedding backend that actually ran.
    #[serde(skip_serializing_if = "Option::is_none")]
    pub(crate) backend_invoked: Option<&'static str>,
    /// GAP-SG-15: items still parked on backoff when the run ended.
    pub(crate) waiting: i64,
    /// GAP-SG-15: dead-letter items at the end of the run.
    pub(crate) dead: i64,
    /// GAP-CLI-EC-08: true when soft/max runtime budget ended the run early.
    #[serde(skip_serializing_if = "Option::is_none")]
    pub(crate) budget_exhausted: Option<bool>,
    /// GAP-CLI-EC-08: estimated pairs still unscanned (status proxy).
    #[serde(skip_serializing_if = "Option::is_none")]
    pub(crate) pairs_remaining_estimate: Option<i64>,
    /// GAP-CLI-PRIO-05: cooperative yields performed this run.
    #[serde(skip_serializing_if = "Option::is_none")]
    pub(crate) yields: Option<u64>,
    /// Wave 3 / EC-09: true when entity-connect yielded to hot entity-descriptions.
    #[serde(skip_serializing_if = "Option::is_none")]
    pub(crate) preempted_for_gate: Option<bool>,
}