ACI builds a repository graph through five layers.
aci-indexerdiscovers files with gitignore-aware walking, filters binary, generated, and vendor paths, fingerprints content with BLAKE3, and schedules per-file indexing jobs.aci-adaptersowns language detection and extraction. Each adapter emits the neutral graph model fromaci-core; parser-specific facts stay behind the adapter boundary.aci-coredefines deterministic IDs, source spans, graph nodes and edges, diagnostics, and graph partitions.aci-storepersists per-file partitions, append-only deltas, compacted snapshots, manifests, and adjacency indexes.aci-queryandaci-exportconsume stored graph data for lookup, traversal, impact analysis, and interchange formats.
The graph is partitioned by file. When a file changes, the indexer replaces that file's partition and keeps the rest of the graph intact. Higher-confidence semantic sources such as SCIP or LSP can enrich the same model later by adding facts with provenance and confidence.
Adapters follow this shape:
languages/<language>/
mod.rs
detect.rs
extract.rs
resolve.rs
queries/
symbols.scm
imports.scm
calls.scm
The current adapters prefer Tree-sitter extraction for supported languages and retain deterministic scanners as bounded fallback paths. The module layout keeps parser details behind the adapter boundary so future semantic sources can enrich the same graph model.