Modules
Spector is organized as a multi-module Maven project. Each module has a focused responsibility, clear API boundaries, and minimal cross-module coupling.
Architecture
graph LR
subgraph "๐ฌ Foundation"
core["spector-core<br/><i>SIMD kernels</i>"]
commons["spector-commons<br/><i>Chunkers, tokenizer</i>"]
config["spector-config<br/><i>SpectorConfig + YAML</i>"]
storage["spector-storage<br/><i>Panama MemorySegment</i>"]
end
subgraph "๐ง Intelligence"
embedApi["spector-embed-api<br/><i>Embedding SPI</i>"]
embedOllama["spector-embed-ollama<br/><i>Ollama provider</i>"]
index["spector-index<br/><i>HNSW + IVF-PQ + BM25</i>"]
query["spector-query<br/><i>Hybrid + RRF + rerank</i>"]
gpu["spector-gpu<br/><i>CUDA via Panama FFM</i>"]
end
subgraph "โก Engine"
rag["spector-rag<br/><i>RAG pipeline</i>"]
engine["spector-engine<br/><i>Search facade</i>"]
ingestion["spector-ingestion<br/><i>File ingest pipeline</i>"]
memory["spector-memory<br/><i>Cognitive memory ๐ง </i>"]
end
subgraph "๐ Runtime & Interfaces"
runtime["spector-runtime<br/><i>Composition root</i>"]
node["spector-node<br/><i>Armeria: REST + gRPC + SSE</i>"]
mcp["spector-mcp<br/><i>MCP Server (stdio)</i>"]
cli["spector-cli<br/><i>spectorctl</i>"]
client["spector-client<br/><i>Java SDK</i>"]
spring["spector-spring<br/><i>Spring AI</i>"]
end
subgraph "๐ฆ Distribution"
metrics["spector-metrics<br/><i>Prometheus + JVM</i>"]
bench["spector-bench<br/><i>JMH benchmarks</i>"]
dist["spector-dist<br/><i>Fat JAR</i>"]
end
Module Dependency Graph
graph TD
node["๐ node"] --> runtime["โก runtime"]
node --> mcp["๐ค mcp"]
node --> metrics["๐ metrics"]
mcp --> runtime
mcp --> ingestion["๐ฅ ingestion"]
cli["๐ฅ๏ธ cli"] --> runtime
cli --> client["๐ฆ client"]
runtime --> engine["โก engine"]
runtime --> memory["๐ง memory"]
runtime --> ingestion
engine --> query["๐ query"]
engine --> rag["๐ค rag"]
engine --> ingestion
engine --> index["๐ index"]
engine --> storage["๐พ storage"]
engine --> embedapi["๐งฌ embed-api"]
engine -.-> gpu["๐ฎ gpu"]
memory --> index
memory --> storage
memory --> ingestion
memory --> embedapi
memory --> core["๐ฌ core"]
metrics --> engine
metrics --> memory
ingestion --> config["โ๏ธ config"]
ingestion --> embedapi
rag --> query
rag --> index
rag --> storage
rag --> embedapi
query --> index
index --> storage
index --> config
storage --> config
storage --> core
config --> core
embedapi --> commons["๐ commons"]
gpu --> core
gpu --> storage
dist["๐ฆ dist"] --> mcp
dist --> cli
dist --> runtime
spring["๐ฑ spring"] --> engine
spring --> memory
spring --> metrics
bench["๐งช bench"] --> engine
bench --> memory
Legend: Solid arrows = compile dependency. Dotted arrow (gpu) = optional dependency.
Architecture
spector-ingestion defines the IngestionPipeline and IngestionTarget interface. Both spector-engine and spector-memory depend on it to implement their IngestionTarget. spector-memory is fully independent of spector-engine โ they are peers, wired together only at the SpectorRuntime composition root.
Architecture: Entry Points โ Runtime โ Subsystems
All entry points (MCP, CLI, Server) route through SpectorRuntime:
graph TD
cli["๐ฅ๏ธ spector-cli<br/><i>SpectorCtl</i>"]
mcp["๐ค spector-mcp<br/><i>SpectorMcpMain</i>"]
node["๐ spector-node<br/><i>SpectorNode (Armeria)</i>"]
cli --> runtime
mcp --> runtime
node --> runtime
runtime["โก SpectorRuntime<br/><i>Composition Root</i>"]
runtime --> sh["SearchHandler<br/><i>mode-aware search</i>"]
runtime --> ih["IngestionHandler<br/><i>delegates to IngestionPipeline</i>"]
sh --> engine["SpectorEngine"]
sh --> memory["SpectorMemory"]
ih --> pipeline["IngestionPipeline<br/><i>chunk โ embed โ store</i>"]
pipeline --> engineTarget["EngineIngestionTarget<br/><i>SEARCH mode</i>"]
pipeline --> memTarget["CognitiveIngestionTarget<br/><i>MEMORY mode</i>"]
SpectorRuntime is a thin composition root โ it creates and wires subsystems but contains no business logic. Each handler owns its domain:
| Handler |
Responsibility |
Routes to |
SearchHandler |
Mode-aware search |
Engine (SEARCH mode) or Memory (MEMORY mode) |
IngestionHandler |
Delegates to unified IngestionPipeline |
Pipeline โ EngineIngestionTarget or CognitiveIngestionTarget |
Module Overview
Foundation Layer
| Module |
Description |
| spector-commons |
Shared utilities โ concurrent primitives, I/O helpers |
| spector-core |
Core abstractions โ quantization, SIMD, similarity functions |
| spector-config |
Configuration โ SpectorProperties, SpectorConfigFactory, YAML loading |
| spector-storage |
Persistent storage โ memory-mapped files, arena management |
Embedding Layer
Search Layer
| Module |
Description |
| spector-index |
Vector indexing โ HNSW, IVF, brute-force |
| spector-query |
Query processing โ parsing, planning, execution |
| spector-gpu |
GPU acceleration โ Panama FFM bindings |
Intelligence Layer
| Module |
Description |
| spector-rag |
RAG pipeline โ retrieval-augmented generation |
| spector-engine |
Search engine โ orchestrates index + RAG + storage |
| spector-ingestion |
Unified ingestion pipeline โ IngestionPipeline (builder), IngestionTarget interface, FileDiscoveryService |
| spector-memory |
Cognitive memory โ biologically-inspired agent memory |
Runtime Layer
| Module |
Description |
| spector-runtime |
Composition root โ wires engine + memory + ingestion pipeline, exposes SearchHandler and IngestionHandler |
| spector-mcp |
MCP server โ Model Context Protocol integration via stdio |
| spector-node |
Unified node โ Armeria HTTP REST + gRPC + SSE events + cluster coordination |
Client Layer
| Module |
Description |
| spector-cli |
CLI tool โ spectorctl with remote (HTTP) and local batch (runtime) modes |
| spector-client |
Java client โ programmatic HTTP API access |
| spector-spring |
Spring AI integration โ auto-configuration |
Infrastructure