sqlite-graphrag 1.0.79

Persistent GraphRAG memory for Claude Code, Codex, Cursor, and 24+ AI agents in a single 6 MB Rust binary. LLM-only and one-shot in v1.0.78: every `remember` / `ingest` spawns a headless claude code or codex subprocess (OAuth, no MCP, no hooks). No daemon. No ONNX runtime. No model download. Graph-native retrieval with FTS5 + cosine + multi-hop traversal. OAuth-only enforcement: API keys ABORT the spawn.
Documentation
//! No-op extraction backend (v1.0.75 — G21 auxiliary)
//!
//! Returns empty output for pipelines that want to skip extraction entirely.

use super::{BackendHealth, BackendKind, ExtractionBackend, ExtractionHints, ExtractionOutput};
use crate::errors::AppError;
use async_trait::async_trait;

pub struct NoneBackend;

impl NoneBackend {
    pub fn new() -> Self {
        Self
    }
}

impl Default for NoneBackend {
    fn default() -> Self {
        Self::new()
    }
}

#[async_trait]
impl ExtractionBackend for NoneBackend {
    fn kind(&self) -> BackendKind {
        BackendKind::None
    }

    fn model_name(&self) -> String {
        "none".to_string()
    }

    async fn extract(
        &self,
        _content: &str,
        _hints: &ExtractionHints,
    ) -> Result<ExtractionOutput, AppError> {
        Ok(ExtractionOutput {
            backend: self.kind().as_str().to_string(),
            elapsed_ms: 0,
            ..Default::default()
        })
    }

    async fn health(&self) -> Result<BackendHealth, AppError> {
        Ok(BackendHealth {
            kind: self.kind(),
            healthy: true,
            model_name: "none".to_string(),
            message: "no-op backend always healthy".to_string(),
        })
    }
}