pub struct Storage { /* private fields */ }Expand description
SQLite-backed storage for Codemem memories, embeddings, and graph data.
Wraps rusqlite::Connection in a Mutex to satisfy Send + Sync bounds
required by the StorageBackend trait.
Implementations§
Source§impl Storage
impl Storage
Sourcepub fn store_embedding(
&self,
memory_id: &str,
embedding: &[f32],
) -> Result<(), CodememError>
pub fn store_embedding( &self, memory_id: &str, embedding: &[f32], ) -> Result<(), CodememError>
Store an embedding for a memory.
Sourcepub fn get_embedding(
&self,
memory_id: &str,
) -> Result<Option<Vec<f32>>, CodememError>
pub fn get_embedding( &self, memory_id: &str, ) -> Result<Option<Vec<f32>>, CodememError>
Get an embedding by memory ID.
Sourcepub fn insert_graph_node(&self, node: &GraphNode) -> Result<(), CodememError>
pub fn insert_graph_node(&self, node: &GraphNode) -> Result<(), CodememError>
Insert a graph node.
Sourcepub fn get_graph_node(
&self,
id: &str,
) -> Result<Option<GraphNode>, CodememError>
pub fn get_graph_node( &self, id: &str, ) -> Result<Option<GraphNode>, CodememError>
Get a graph node by ID.
Sourcepub fn delete_graph_node(&self, id: &str) -> Result<bool, CodememError>
pub fn delete_graph_node(&self, id: &str) -> Result<bool, CodememError>
Delete a graph node by ID.
Sourcepub fn all_graph_nodes(&self) -> Result<Vec<GraphNode>, CodememError>
pub fn all_graph_nodes(&self) -> Result<Vec<GraphNode>, CodememError>
Get all graph nodes. Logs warnings for rows with parse errors instead of silently dropping.
Sourcepub fn insert_graph_edge(&self, edge: &Edge) -> Result<(), CodememError>
pub fn insert_graph_edge(&self, edge: &Edge) -> Result<(), CodememError>
Insert a graph edge.
Sourcepub fn get_edges_for_node(
&self,
node_id: &str,
) -> Result<Vec<Edge>, CodememError>
pub fn get_edges_for_node( &self, node_id: &str, ) -> Result<Vec<Edge>, CodememError>
Get all edges from or to a node.
Sourcepub fn all_graph_edges(&self) -> Result<Vec<Edge>, CodememError>
pub fn all_graph_edges(&self) -> Result<Vec<Edge>, CodememError>
Get all graph edges.
Sourcepub fn delete_graph_edges_for_node(
&self,
node_id: &str,
) -> Result<usize, CodememError>
pub fn delete_graph_edges_for_node( &self, node_id: &str, ) -> Result<usize, CodememError>
Delete all graph edges connected to a node (as src or dst).
Sourcepub fn graph_edges_for_namespace(
&self,
namespace: &str,
) -> Result<Vec<Edge>, CodememError>
pub fn graph_edges_for_namespace( &self, namespace: &str, ) -> Result<Vec<Edge>, CodememError>
Get all graph edges where both src and dst nodes belong to the given namespace.
Source§impl Storage
impl Storage
Sourcepub fn insert_memory(&self, memory: &MemoryNode) -> Result<(), CodememError>
pub fn insert_memory(&self, memory: &MemoryNode) -> Result<(), CodememError>
Insert a new memory. Returns Err(Duplicate) if content hash already exists.
Uses BEGIN IMMEDIATE to acquire a write lock before the dedup check, ensuring the SELECT + INSERT are atomic. INSERT OR IGNORE is a safety net against the UNIQUE constraint on content_hash.
When an outer transaction is active (via begin_transaction), the
method skips starting its own transaction and executes directly on the
connection, so that all operations participate in the outer transaction.
Sourcepub fn get_memory(&self, id: &str) -> Result<Option<MemoryNode>, CodememError>
pub fn get_memory(&self, id: &str) -> Result<Option<MemoryNode>, CodememError>
Get a memory by ID. Updates access_count and last_accessed_at.
Sourcepub fn get_memory_no_touch(
&self,
id: &str,
) -> Result<Option<MemoryNode>, CodememError>
pub fn get_memory_no_touch( &self, id: &str, ) -> Result<Option<MemoryNode>, CodememError>
Get a memory by ID without updating access_count or last_accessed_at. Use for internal/system reads (consolidation, stats, batch processing).
Sourcepub fn update_memory(
&self,
id: &str,
content: &str,
importance: Option<f64>,
) -> Result<(), CodememError>
pub fn update_memory( &self, id: &str, content: &str, importance: Option<f64>, ) -> Result<(), CodememError>
Update a memory’s content and re-hash. Returns Err(NotFound) if the ID doesn’t exist.
Sourcepub fn delete_memory(&self, id: &str) -> Result<bool, CodememError>
pub fn delete_memory(&self, id: &str) -> Result<bool, CodememError>
Delete a memory by ID.
Sourcepub fn delete_memory_cascade(&self, id: &str) -> Result<bool, CodememError>
pub fn delete_memory_cascade(&self, id: &str) -> Result<bool, CodememError>
Delete a memory and all related data (embeddings, graph nodes/edges) atomically. Returns true if the memory existed and was deleted.
Sourcepub fn delete_memories_batch_cascade(
&self,
ids: &[&str],
) -> Result<usize, CodememError>
pub fn delete_memories_batch_cascade( &self, ids: &[&str], ) -> Result<usize, CodememError>
Delete multiple memories and all related data (embeddings, graph nodes/edges) atomically. Returns the number of memories that were actually deleted.
Sourcepub fn list_memory_ids(&self) -> Result<Vec<String>, CodememError>
pub fn list_memory_ids(&self) -> Result<Vec<String>, CodememError>
List all memory IDs with an optional limit.
Sourcepub fn list_memory_ids_limited(
&self,
limit: Option<usize>,
) -> Result<Vec<String>, CodememError>
pub fn list_memory_ids_limited( &self, limit: Option<usize>, ) -> Result<Vec<String>, CodememError>
List memory IDs with an optional limit.
Sourcepub fn list_memory_ids_for_namespace(
&self,
namespace: &str,
) -> Result<Vec<String>, CodememError>
pub fn list_memory_ids_for_namespace( &self, namespace: &str, ) -> Result<Vec<String>, CodememError>
List memory IDs scoped to a specific namespace.
Sourcepub fn list_namespaces(&self) -> Result<Vec<String>, CodememError>
pub fn list_namespaces(&self) -> Result<Vec<String>, CodememError>
List all distinct namespaces.
Sourcepub fn memory_count(&self) -> Result<usize, CodememError>
pub fn memory_count(&self) -> Result<usize, CodememError>
Get memory count.
Sourcepub fn list_repos(&self) -> Result<Vec<Repository>, CodememError>
pub fn list_repos(&self) -> Result<Vec<Repository>, CodememError>
List all registered repositories.
Sourcepub fn add_repo(&self, repo: &Repository) -> Result<(), CodememError>
pub fn add_repo(&self, repo: &Repository) -> Result<(), CodememError>
Add a new repository.
Sourcepub fn remove_repo(&self, id: &str) -> Result<bool, CodememError>
pub fn remove_repo(&self, id: &str) -> Result<bool, CodememError>
Remove a repository by ID.
Sourcepub fn get_repo(&self, id: &str) -> Result<Option<Repository>, CodememError>
pub fn get_repo(&self, id: &str) -> Result<Option<Repository>, CodememError>
Get a repository by ID.
Sourcepub fn update_repo_status(
&self,
id: &str,
status: &str,
indexed_at: Option<&str>,
) -> Result<(), CodememError>
pub fn update_repo_status( &self, id: &str, status: &str, indexed_at: Option<&str>, ) -> Result<(), CodememError>
Update a repository’s status and optionally last_indexed_at.
Source§impl Storage
impl Storage
Sourcepub fn integrity_check(&self) -> Result<bool, CodememError>
pub fn integrity_check(&self) -> Result<bool, CodememError>
Run SQLite PRAGMA integrity_check. Returns true if the database is OK.
Sourcepub fn schema_version(&self) -> Result<u32, CodememError>
pub fn schema_version(&self) -> Result<u32, CodememError>
Return the current schema version (max applied migration number).
Sourcepub fn stats(&self) -> Result<StorageStats, CodememError>
pub fn stats(&self) -> Result<StorageStats, CodememError>
Get database statistics in a single query.
Sourcepub fn insert_consolidation_log(
&self,
cycle_type: &str,
affected_count: usize,
) -> Result<(), CodememError>
pub fn insert_consolidation_log( &self, cycle_type: &str, affected_count: usize, ) -> Result<(), CodememError>
Record a consolidation run.
Sourcepub fn last_consolidation_runs(
&self,
) -> Result<Vec<ConsolidationLogEntry>, CodememError>
pub fn last_consolidation_runs( &self, ) -> Result<Vec<ConsolidationLogEntry>, CodememError>
Get the last consolidation run for each cycle type.
Sourcepub fn get_repeated_searches(
&self,
min_count: usize,
namespace: Option<&str>,
) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
pub fn get_repeated_searches( &self, min_count: usize, namespace: Option<&str>, ) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
Find repeated search patterns (Grep/Glob) by extracting the “pattern” field from memory metadata JSON. Returns (pattern, count, memory_ids) tuples where count >= min_count, ordered by count descending.
Sourcepub fn get_file_hotspots(
&self,
min_count: usize,
namespace: Option<&str>,
) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
pub fn get_file_hotspots( &self, min_count: usize, namespace: Option<&str>, ) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
Find file hotspots by extracting the “file_path” field from memory metadata.
Sourcepub fn get_tool_usage_stats(
&self,
namespace: Option<&str>,
) -> Result<Vec<(String, usize)>, CodememError>
pub fn get_tool_usage_stats( &self, namespace: Option<&str>, ) -> Result<Vec<(String, usize)>, CodememError>
Get tool usage statistics from memory metadata. Returns (tool_name, count) pairs sorted by count descending.
Sourcepub fn get_decision_chains(
&self,
min_count: usize,
namespace: Option<&str>,
) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
pub fn get_decision_chains( &self, min_count: usize, namespace: Option<&str>, ) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
Find decision chains: files with multiple Edit/Write memories over time.
Sourcepub fn list_memories_by_tag(
&self,
tag: &str,
namespace: Option<&str>,
limit: usize,
) -> Result<Vec<MemoryNode>, CodememError>
pub fn list_memories_by_tag( &self, tag: &str, namespace: Option<&str>, limit: usize, ) -> Result<Vec<MemoryNode>, CodememError>
List memories that contain a specific tag, optionally scoped to a namespace.
Uses json_each for proper JSON array querying instead of LIKE patterns.
Sourcepub fn start_session(
&self,
id: &str,
namespace: Option<&str>,
) -> Result<(), CodememError>
pub fn start_session( &self, id: &str, namespace: Option<&str>, ) -> Result<(), CodememError>
Start a new session.
Sourcepub fn end_session(
&self,
id: &str,
summary: Option<&str>,
) -> Result<(), CodememError>
pub fn end_session( &self, id: &str, summary: Option<&str>, ) -> Result<(), CodememError>
End a session by setting ended_at and optionally a summary.
Sourcepub fn list_sessions(
&self,
namespace: Option<&str>,
) -> Result<Vec<Session>, CodememError>
pub fn list_sessions( &self, namespace: Option<&str>, ) -> Result<Vec<Session>, CodememError>
List sessions, optionally filtered by namespace.
Sourcepub fn record_session_activity(
&self,
session_id: &str,
tool_name: &str,
file_path: Option<&str>,
directory: Option<&str>,
pattern: Option<&str>,
) -> Result<(), CodememError>
pub fn record_session_activity( &self, session_id: &str, tool_name: &str, file_path: Option<&str>, directory: Option<&str>, pattern: Option<&str>, ) -> Result<(), CodememError>
Record a session activity event.
Sourcepub fn get_session_activity_summary(
&self,
session_id: &str,
) -> Result<SessionActivitySummary, CodememError>
pub fn get_session_activity_summary( &self, session_id: &str, ) -> Result<SessionActivitySummary, CodememError>
Get a summary of session activity counts using a single query with conditional aggregation.
Sourcepub fn get_session_hot_directories(
&self,
session_id: &str,
limit: usize,
) -> Result<Vec<(String, usize)>, CodememError>
pub fn get_session_hot_directories( &self, session_id: &str, limit: usize, ) -> Result<Vec<(String, usize)>, CodememError>
Get the most active directories in a session.
Sourcepub fn has_auto_insight(
&self,
session_id: &str,
dedup_tag: &str,
) -> Result<bool, CodememError>
pub fn has_auto_insight( &self, session_id: &str, dedup_tag: &str, ) -> Result<bool, CodememError>
Check whether an auto-insight dedup tag exists for a session.
Uses json_extract with proper parameter binding instead of LIKE on JSON.
Sourcepub fn count_directory_reads(
&self,
session_id: &str,
directory: &str,
) -> Result<usize, CodememError>
pub fn count_directory_reads( &self, session_id: &str, directory: &str, ) -> Result<usize, CodememError>
Count Read events in a directory during a session.
Sourcepub fn was_file_read_in_session(
&self,
session_id: &str,
file_path: &str,
) -> Result<bool, CodememError>
pub fn was_file_read_in_session( &self, session_id: &str, file_path: &str, ) -> Result<bool, CodememError>
Check if a file was read in the current session.
Sourcepub fn count_search_pattern_in_session(
&self,
session_id: &str,
pattern: &str,
) -> Result<usize, CodememError>
pub fn count_search_pattern_in_session( &self, session_id: &str, pattern: &str, ) -> Result<usize, CodememError>
Count how many times a search pattern was used in a session.
Sourcepub fn find_memory_ids_by_tag(
&self,
tag: &str,
namespace: Option<&str>,
exclude_id: &str,
) -> Result<Vec<String>, CodememError>
pub fn find_memory_ids_by_tag( &self, tag: &str, namespace: Option<&str>, exclude_id: &str, ) -> Result<Vec<String>, CodememError>
Find memory IDs whose tags JSON array contains the given tag value.
Optionally scoped to a namespace. Excludes the given exclude_id.
Returns at most 50 results ordered by creation time (most recent siblings first).
Sourcepub fn delete_graph_nodes_by_prefix(
&self,
prefix: &str,
) -> Result<usize, CodememError>
pub fn delete_graph_nodes_by_prefix( &self, prefix: &str, ) -> Result<usize, CodememError>
Delete all graph nodes, their edges, and their embeddings where the node ID starts with the given prefix. Returns count of nodes deleted. Wrapped in a transaction so all three DELETEs are atomic.
Source§impl Storage
impl Storage
Sourcepub fn open(path: &Path) -> Result<Storage, CodememError>
pub fn open(path: &Path) -> Result<Storage, CodememError>
Open (or create) a Codemem database at the given path.
Sourcepub fn open_with_config(
path: &Path,
cache_size_mb: Option<u32>,
busy_timeout_secs: Option<u64>,
) -> Result<Storage, CodememError>
pub fn open_with_config( path: &Path, cache_size_mb: Option<u32>, busy_timeout_secs: Option<u64>, ) -> Result<Storage, CodememError>
Open a database with explicit storage configuration overrides.
Sourcepub fn open_without_migrations(path: &Path) -> Result<Storage, CodememError>
pub fn open_without_migrations(path: &Path) -> Result<Storage, CodememError>
Open an existing database without running migrations.
Use this in lifecycle hooks (context, prompt, summarize) where the
database has already been migrated by codemem init or codemem serve,
to avoid SQLITE_BUSY race conditions with the concurrent MCP server.
Sourcepub fn open_without_migrations_with_config(
path: &Path,
cache_size_mb: Option<u32>,
busy_timeout_secs: Option<u64>,
) -> Result<Storage, CodememError>
pub fn open_without_migrations_with_config( path: &Path, cache_size_mb: Option<u32>, busy_timeout_secs: Option<u64>, ) -> Result<Storage, CodememError>
Open without migrations, with explicit storage configuration overrides.
Sourcepub fn open_in_memory() -> Result<Storage, CodememError>
pub fn open_in_memory() -> Result<Storage, CodememError>
Open an in-memory database (for testing).
Sourcepub fn content_hash(content: &str) -> String
pub fn content_hash(content: &str) -> String
Compute SHA-256 hash of content for deduplication.
Trait Implementations§
Source§impl StorageBackend for Storage
impl StorageBackend for Storage
Source§fn delete_memory_cascade(&self, id: &str) -> Result<bool, CodememError>
fn delete_memory_cascade(&self, id: &str) -> Result<bool, CodememError>
M1: Override with transactional cascade delete.
Source§fn delete_memories_batch_cascade(
&self,
ids: &[&str],
) -> Result<usize, CodememError>
fn delete_memories_batch_cascade( &self, ids: &[&str], ) -> Result<usize, CodememError>
Override with transactional batch cascade delete.
Source§fn insert_memory(&self, memory: &MemoryNode) -> Result<(), CodememError>
fn insert_memory(&self, memory: &MemoryNode) -> Result<(), CodememError>
Source§fn get_memory(&self, id: &str) -> Result<Option<MemoryNode>, CodememError>
fn get_memory(&self, id: &str) -> Result<Option<MemoryNode>, CodememError>
Source§fn get_memory_no_touch(
&self,
id: &str,
) -> Result<Option<MemoryNode>, CodememError>
fn get_memory_no_touch( &self, id: &str, ) -> Result<Option<MemoryNode>, CodememError>
Source§fn update_memory(
&self,
id: &str,
content: &str,
importance: Option<f64>,
) -> Result<(), CodememError>
fn update_memory( &self, id: &str, content: &str, importance: Option<f64>, ) -> Result<(), CodememError>
Source§fn delete_memory(&self, id: &str) -> Result<bool, CodememError>
fn delete_memory(&self, id: &str) -> Result<bool, CodememError>
Source§fn list_memory_ids(&self) -> Result<Vec<String>, CodememError>
fn list_memory_ids(&self) -> Result<Vec<String>, CodememError>
Source§fn list_memory_ids_for_namespace(
&self,
namespace: &str,
) -> Result<Vec<String>, CodememError>
fn list_memory_ids_for_namespace( &self, namespace: &str, ) -> Result<Vec<String>, CodememError>
Source§fn find_memory_ids_by_tag(
&self,
tag: &str,
namespace: Option<&str>,
exclude_id: &str,
) -> Result<Vec<String>, CodememError>
fn find_memory_ids_by_tag( &self, tag: &str, namespace: Option<&str>, exclude_id: &str, ) -> Result<Vec<String>, CodememError>
exclude_id.Source§fn list_namespaces(&self) -> Result<Vec<String>, CodememError>
fn list_namespaces(&self) -> Result<Vec<String>, CodememError>
Source§fn memory_count(&self) -> Result<usize, CodememError>
fn memory_count(&self) -> Result<usize, CodememError>
Source§fn get_memories_batch(
&self,
ids: &[&str],
) -> Result<Vec<MemoryNode>, CodememError>
fn get_memories_batch( &self, ids: &[&str], ) -> Result<Vec<MemoryNode>, CodememError>
Source§fn store_embedding(
&self,
memory_id: &str,
embedding: &[f32],
) -> Result<(), CodememError>
fn store_embedding( &self, memory_id: &str, embedding: &[f32], ) -> Result<(), CodememError>
Source§fn get_embedding(
&self,
memory_id: &str,
) -> Result<Option<Vec<f32>>, CodememError>
fn get_embedding( &self, memory_id: &str, ) -> Result<Option<Vec<f32>>, CodememError>
Source§fn delete_embedding(&self, memory_id: &str) -> Result<bool, CodememError>
fn delete_embedding(&self, memory_id: &str) -> Result<bool, CodememError>
Source§fn list_all_embeddings(&self) -> Result<Vec<(String, Vec<f32>)>, CodememError>
fn list_all_embeddings(&self) -> Result<Vec<(String, Vec<f32>)>, CodememError>
Source§fn insert_graph_node(&self, node: &GraphNode) -> Result<(), CodememError>
fn insert_graph_node(&self, node: &GraphNode) -> Result<(), CodememError>
Source§fn get_graph_node(&self, id: &str) -> Result<Option<GraphNode>, CodememError>
fn get_graph_node(&self, id: &str) -> Result<Option<GraphNode>, CodememError>
Source§fn delete_graph_node(&self, id: &str) -> Result<bool, CodememError>
fn delete_graph_node(&self, id: &str) -> Result<bool, CodememError>
Source§fn all_graph_nodes(&self) -> Result<Vec<GraphNode>, CodememError>
fn all_graph_nodes(&self) -> Result<Vec<GraphNode>, CodememError>
Source§fn insert_graph_edge(&self, edge: &Edge) -> Result<(), CodememError>
fn insert_graph_edge(&self, edge: &Edge) -> Result<(), CodememError>
Source§fn get_edges_for_node(&self, node_id: &str) -> Result<Vec<Edge>, CodememError>
fn get_edges_for_node(&self, node_id: &str) -> Result<Vec<Edge>, CodememError>
Source§fn all_graph_edges(&self) -> Result<Vec<Edge>, CodememError>
fn all_graph_edges(&self) -> Result<Vec<Edge>, CodememError>
Source§fn delete_graph_edges_for_node(
&self,
node_id: &str,
) -> Result<usize, CodememError>
fn delete_graph_edges_for_node( &self, node_id: &str, ) -> Result<usize, CodememError>
Source§fn delete_graph_nodes_by_prefix(
&self,
prefix: &str,
) -> Result<usize, CodememError>
fn delete_graph_nodes_by_prefix( &self, prefix: &str, ) -> Result<usize, CodememError>
Source§fn start_session(
&self,
id: &str,
namespace: Option<&str>,
) -> Result<(), CodememError>
fn start_session( &self, id: &str, namespace: Option<&str>, ) -> Result<(), CodememError>
Source§fn end_session(
&self,
id: &str,
summary: Option<&str>,
) -> Result<(), CodememError>
fn end_session( &self, id: &str, summary: Option<&str>, ) -> Result<(), CodememError>
Source§fn list_sessions(
&self,
namespace: Option<&str>,
limit: usize,
) -> Result<Vec<Session>, CodememError>
fn list_sessions( &self, namespace: Option<&str>, limit: usize, ) -> Result<Vec<Session>, CodememError>
Source§fn insert_consolidation_log(
&self,
cycle_type: &str,
affected_count: usize,
) -> Result<(), CodememError>
fn insert_consolidation_log( &self, cycle_type: &str, affected_count: usize, ) -> Result<(), CodememError>
Source§fn last_consolidation_runs(
&self,
) -> Result<Vec<ConsolidationLogEntry>, CodememError>
fn last_consolidation_runs( &self, ) -> Result<Vec<ConsolidationLogEntry>, CodememError>
Source§fn get_repeated_searches(
&self,
min_count: usize,
namespace: Option<&str>,
) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
fn get_repeated_searches( &self, min_count: usize, namespace: Option<&str>, ) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
Source§fn get_file_hotspots(
&self,
min_count: usize,
namespace: Option<&str>,
) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
fn get_file_hotspots( &self, min_count: usize, namespace: Option<&str>, ) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
Source§fn get_tool_usage_stats(
&self,
namespace: Option<&str>,
) -> Result<Vec<(String, usize)>, CodememError>
fn get_tool_usage_stats( &self, namespace: Option<&str>, ) -> Result<Vec<(String, usize)>, CodememError>
Source§fn get_decision_chains(
&self,
min_count: usize,
namespace: Option<&str>,
) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
fn get_decision_chains( &self, min_count: usize, namespace: Option<&str>, ) -> Result<Vec<(String, usize, Vec<String>)>, CodememError>
Source§fn decay_stale_memories(
&self,
threshold_ts: i64,
decay_factor: f64,
) -> Result<usize, CodememError>
fn decay_stale_memories( &self, threshold_ts: i64, decay_factor: f64, ) -> Result<usize, CodememError>
Source§fn list_memories_for_creative(
&self,
) -> Result<Vec<(String, String, Vec<String>)>, CodememError>
fn list_memories_for_creative( &self, ) -> Result<Vec<(String, String, Vec<String>)>, CodememError>
Source§fn find_hash_duplicates(
&self,
) -> Result<Vec<(String, String, f64)>, CodememError>
fn find_hash_duplicates( &self, ) -> Result<Vec<(String, String, f64)>, CodememError>
Source§fn find_forgettable(
&self,
importance_threshold: f64,
) -> Result<Vec<String>, CodememError>
fn find_forgettable( &self, importance_threshold: f64, ) -> Result<Vec<String>, CodememError>
Source§fn insert_memories_batch(
&self,
memories: &[MemoryNode],
) -> Result<(), CodememError>
fn insert_memories_batch( &self, memories: &[MemoryNode], ) -> Result<(), CodememError>
Source§fn store_embeddings_batch(
&self,
items: &[(&str, &[f32])],
) -> Result<(), CodememError>
fn store_embeddings_batch( &self, items: &[(&str, &[f32])], ) -> Result<(), CodememError>
Source§fn load_file_hashes(&self) -> Result<HashMap<String, String>, CodememError>
fn load_file_hashes(&self) -> Result<HashMap<String, String>, CodememError>
Source§fn save_file_hashes(
&self,
hashes: &HashMap<String, String>,
) -> Result<(), CodememError>
fn save_file_hashes( &self, hashes: &HashMap<String, String>, ) -> Result<(), CodememError>
Source§fn insert_graph_nodes_batch(
&self,
nodes: &[GraphNode],
) -> Result<(), CodememError>
fn insert_graph_nodes_batch( &self, nodes: &[GraphNode], ) -> Result<(), CodememError>
Source§fn insert_graph_edges_batch(&self, edges: &[Edge]) -> Result<(), CodememError>
fn insert_graph_edges_batch(&self, edges: &[Edge]) -> Result<(), CodememError>
Source§fn get_stale_memories_for_decay(
&self,
threshold_ts: i64,
) -> Result<Vec<(String, f64, u32, i64)>, CodememError>
fn get_stale_memories_for_decay( &self, threshold_ts: i64, ) -> Result<Vec<(String, f64, u32, i64)>, CodememError>
Source§fn batch_update_importance(
&self,
updates: &[(String, f64)],
) -> Result<usize, CodememError>
fn batch_update_importance( &self, updates: &[(String, f64)], ) -> Result<usize, CodememError>
Source§fn session_count(&self, namespace: Option<&str>) -> Result<usize, CodememError>
fn session_count(&self, namespace: Option<&str>) -> Result<usize, CodememError>
Source§fn find_unembedded_memories(
&self,
) -> Result<Vec<(String, String)>, CodememError>
fn find_unembedded_memories( &self, ) -> Result<Vec<(String, String)>, CodememError>
Source§fn search_graph_nodes(
&self,
query: &str,
namespace: Option<&str>,
limit: usize,
) -> Result<Vec<GraphNode>, CodememError>
fn search_graph_nodes( &self, query: &str, namespace: Option<&str>, limit: usize, ) -> Result<Vec<GraphNode>, CodememError>
limit results.Source§fn list_memories_by_tag(
&self,
tag: &str,
namespace: Option<&str>,
limit: usize,
) -> Result<Vec<MemoryNode>, CodememError>
fn list_memories_by_tag( &self, tag: &str, namespace: Option<&str>, limit: usize, ) -> Result<Vec<MemoryNode>, CodememError>
Source§fn list_memories_filtered(
&self,
namespace: Option<&str>,
memory_type: Option<&str>,
) -> Result<Vec<MemoryNode>, CodememError>
fn list_memories_filtered( &self, namespace: Option<&str>, memory_type: Option<&str>, ) -> Result<Vec<MemoryNode>, CodememError>
Source§fn record_session_activity(
&self,
session_id: &str,
tool_name: &str,
file_path: Option<&str>,
directory: Option<&str>,
pattern: Option<&str>,
) -> Result<(), CodememError>
fn record_session_activity( &self, session_id: &str, tool_name: &str, file_path: Option<&str>, directory: Option<&str>, pattern: Option<&str>, ) -> Result<(), CodememError>
Source§fn get_session_activity_summary(
&self,
session_id: &str,
) -> Result<SessionActivitySummary, CodememError>
fn get_session_activity_summary( &self, session_id: &str, ) -> Result<SessionActivitySummary, CodememError>
Source§fn get_session_hot_directories(
&self,
session_id: &str,
limit: usize,
) -> Result<Vec<(String, usize)>, CodememError>
fn get_session_hot_directories( &self, session_id: &str, limit: usize, ) -> Result<Vec<(String, usize)>, CodememError>
Source§fn has_auto_insight(
&self,
session_id: &str,
dedup_tag: &str,
) -> Result<bool, CodememError>
fn has_auto_insight( &self, session_id: &str, dedup_tag: &str, ) -> Result<bool, CodememError>
Source§fn count_directory_reads(
&self,
session_id: &str,
directory: &str,
) -> Result<usize, CodememError>
fn count_directory_reads( &self, session_id: &str, directory: &str, ) -> Result<usize, CodememError>
Source§fn was_file_read_in_session(
&self,
session_id: &str,
file_path: &str,
) -> Result<bool, CodememError>
fn was_file_read_in_session( &self, session_id: &str, file_path: &str, ) -> Result<bool, CodememError>
Source§fn count_search_pattern_in_session(
&self,
session_id: &str,
pattern: &str,
) -> Result<usize, CodememError>
fn count_search_pattern_in_session( &self, session_id: &str, pattern: &str, ) -> Result<usize, CodememError>
Source§fn stats(&self) -> Result<StorageStats, CodememError>
fn stats(&self) -> Result<StorageStats, CodememError>
Source§fn begin_transaction(&self) -> Result<(), CodememError>
fn begin_transaction(&self) -> Result<(), CodememError>
Source§fn commit_transaction(&self) -> Result<(), CodememError>
fn commit_transaction(&self) -> Result<(), CodememError>
begin_transaction. Read moreSource§fn rollback_transaction(&self) -> Result<(), CodememError>
fn rollback_transaction(&self) -> Result<(), CodememError>
begin_transaction. Read moreSource§fn list_repos(&self) -> Result<Vec<Repository>, CodememError>
fn list_repos(&self) -> Result<Vec<Repository>, CodememError>
Source§fn add_repo(&self, repo: &Repository) -> Result<(), CodememError>
fn add_repo(&self, repo: &Repository) -> Result<(), CodememError>
Source§fn get_repo(&self, id: &str) -> Result<Option<Repository>, CodememError>
fn get_repo(&self, id: &str) -> Result<Option<Repository>, CodememError>
Source§fn remove_repo(&self, id: &str) -> Result<bool, CodememError>
fn remove_repo(&self, id: &str) -> Result<bool, CodememError>
Source§fn update_repo_status(
&self,
id: &str,
status: &str,
indexed_at: Option<&str>,
) -> Result<(), CodememError>
fn update_repo_status( &self, id: &str, status: &str, indexed_at: Option<&str>, ) -> Result<(), CodememError>
Auto Trait Implementations§
impl !Freeze for Storage
impl RefUnwindSafe for Storage
impl Send for Storage
impl Sync for Storage
impl Unpin for Storage
impl UnsafeUnpin for Storage
impl UnwindSafe for Storage
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more