Skip to main content

rustbrain_core/
lib.rs

1//! # rustbrain-core
2//!
3//! Project-scoped **knowledge graph engine** for software repositories: Markdown notes,
4//! optional Rust AST symbols, ranked full-text search, and graph-aware AI agent context.
5//!
6//! ## Quick start
7//!
8//! ```no_run
9//! use rustbrain_core::{Brain, ContextOptions, QueryOptions, Result};
10//!
11//! fn main() -> Result<()> {
12//!     let mut brain = Brain::open_or_create(".")?;
13//!     brain.sync()?;
14//!     let hits = brain.query_ranked("raft", &QueryOptions::human())?;
15//!     let ctx = brain.context_for_prompt("explain raft", 1024)?;
16//!     println!("{}", ctx.to_markdown());
17//!     let _ = hits;
18//!     Ok(())
19//! }
20//! ```
21//!
22//! ## Published crates
23//!
24//! | Package | Role |
25//! |---------|------|
26//! | **`rustbrain-core`** | This library |
27//! | **`rustbrain`** | CLI (`bootstrap`, `doctor`, `note`, `sync`, …) |
28//!
29//! ## Feature flags
30//!
31//! | Feature | Default | Purpose |
32//! |---------|---------|---------|
33//! | `ast` | yes | Tree-sitter Rust symbol extraction |
34//! | `obsidian` | yes | WikiLinks, frontmatter, Canvas |
35//! | `mmap` | yes | CSR `graph.mmap` |
36//! | `watch` | no | Debounced filesystem watcher |
37//! | `jshift` | no | In-place JSON helpers |
38//! | `full` | no | All optional features |
39
40#![warn(missing_docs)]
41
42#[cfg(feature = "ast")]
43pub mod ast;
44pub mod bootstrap;
45pub mod brain;
46pub mod context;
47pub mod doctor;
48pub mod error;
49pub mod exporter;
50pub mod fts;
51pub mod id;
52pub mod ignore;
53pub mod indexer;
54pub mod mmap;
55pub mod mutator;
56pub mod note;
57#[cfg(feature = "obsidian")]
58pub mod obsidian;
59pub mod query;
60pub mod registry;
61pub mod storage;
62pub mod symbols;
63pub mod types;
64pub mod watch;
65
66pub use bootstrap::{
67    bootstrap_noninteractive, bootstrap_workspace, BootstrapAction, BootstrapMode,
68    BootstrapOptions, BootstrapReport,
69};
70pub use brain::{find_brain_dir, Brain};
71pub use context::ContextOptions;
72pub use fts::{prepare_search_query, tokenize_query, PreparedQuery};
73pub use doctor::{run_doctor, DoctorFinding, DoctorReport, DoctorSeverity};
74pub use error::{BrainError, Result};
75pub use exporter::{BrainExporter, BrainImporter, PortableBrainBundle, BUNDLE_VERSION};
76pub use ignore::{recommended_ignore_extras, write_rustbrainignore, IgnoreSet};
77pub use indexer::WorkspaceIndexer;
78pub use mmap::{CsrCompiler, CsrMmapGraph, MMAP_VERSION};
79pub use note::{create_note, default_dir_for_type, slugify_title, NoteCreated, NoteNewOptions};
80pub use query::{PendingLink, QueryOptions, RankedHit};
81pub use registry::{GlobalRankedHit, GlobalRegistry};
82pub use storage::{Database, SCHEMA_VERSION};
83pub use symbols::{extract_symbol_refs, symbol_node_id, SymbolRef};
84pub use types::{
85    xml_escape, ContextBundle, ContextNode, ContextRole, Edge, Node, NodeType, SyncStats,
86};
87pub use watch::WatchConfig;
88
89#[cfg(feature = "ast")]
90pub use ast::{compute_symbol_hash, AstError, CodeAstParser, SymbolAnchor};
91
92#[cfg(feature = "obsidian")]
93pub use obsidian::{
94    extract_wikilinks, parse_frontmatter, CanvasEdge, CanvasNode, Frontmatter, ObsidianCanvas,
95    WikiLink,
96};
97
98#[cfg(feature = "jshift")]
99pub use mutator::{extract_json_field_slice, update_json_field_inplace};
100
101#[cfg(feature = "watch")]
102pub use watch::watch_workspace;