# Cerebro — Crate Structure (C4 Level 3) # High-level: 4 crates, their responsibilities, and cross-crate dependencies # For module-level detail, see layers below vars: { d2-config: @nord-config } # Title title: { shape: text label: "Component Diagram — cerebro Workspace" style.font-size: 20 style.bold: true } direction: right # ─── cerebro crate ─── cerebro: { label: "crates/cerebro\n[Container: Rust CLI binary]\nEntry point: parses args, coordinates\ncollectors and generators, manages cache" style.stroke: "#5E81AC" style.stroke-width: 2 key_modules: "Key modules:\nmain, cli, config, cache,\ncollectors/, generators/" { style.fill: "#3B4252" } } # ─── cerebro-core crate ─── cerebro_core: { label: "crates/cerebro-core\n[Container: Rust library]\nShared types, traits, and collector\nimplementations used by all binaries" style.stroke: "#5E81AC" style.stroke-width: 2 key_modules: "Key modules:\nlib (types), storage (traits),\ncollectors/ (git, opencode, todos)" { style.fill: "#3B4252" } } # ─── cerebro-mcp crate ─── cerebro_mcp: { label: "crates/cerebro-mcp\n[Container: Rust MCP server]\nJSON-RPC server providing tools\nfor OpenCode AI assistant" style.stroke: "#5E81AC" style.stroke-width: 2 key_modules: "Key modules:\nserver, protocol,\nhandlers/, tools/" { style.fill: "#3B4252" } } # ─── cerebro-tui crate ─── cerebro_tui: { label: "crates/cerebro-tui\n[Container: Rust TUI binary]\nRatatui terminal UI for browsing\nprojects without a browser" style.stroke: "#5E81AC" style.stroke-width: 2 key_modules: "Key modules:\napp, tui, action,\ncomponents/ (home, dashboard,\nprojects, journal, todos, config)" { style.fill: "#3B4252" } } # ─── Cross-Crate Dependencies ─── cerebro -> cerebro_core: "uses ProjectContext types and collectors" cerebro_mcp -> cerebro_core: "reads ProjectContext types" cerebro_tui -> cerebro_core: "reads ProjectContext types" # ─── Shared Workspace Dependencies ─── shared_deps: { label: "Workspace Dependencies\nserde, tokio, git2, sqlx, tracing" style.fill: "#3B4252" style.stroke-dash: 3 } cerebro -> shared_deps: "depends on" cerebro_core -> shared_deps: "depends on" cerebro_mcp -> shared_deps: "depends on" cerebro_tui -> shared_deps: "depends on" # ─── Legend ─── legend: { style.stroke-dash: 3 style.fill: "#3B4252" cli_ex: "[CLI binary]" { style.fill: "#4C566A" } lib_ex: "[Library]" { style.fill: "#4C566A" } mcp_ex: "[MCP server]" { style.fill: "#4C566A" } tui_ex: "[TUI binary]" { style.fill: "#4C566A" } deps_ex: "[Dependencies]" { style.stroke-dash: 3 style.fill: "#3B4252" } rel_ex: "dependency" { style.stroke-width: 2 } } # ─── Layer: cerebro modules ─── layers: { cerebro_modules: { title: { shape: text label: "crates/cerebro — Module Detail" style.font-size: 16 style.bold: true } direction: down main: "main.rs\n[Entry point]" cli_mod: "cli.rs\n[Clap args]" config_mod: "config.rs\n[TOML loading]" cache_mod: "cache.rs\n[Cache management]" collectors_mod: "collectors/" { mod_file: "mod.rs" } generators_mod: "generators/" { mod_file: "mod.rs" dashboard: "dashboard.rs" journal: "journal.rs" periodic: "periodic.rs" project: "project.rs" } main -> cli_mod main -> config_mod main -> cache_mod main -> collectors_mod main -> generators_mod } } # ─── Layer: cerebro-core modules ─── layers: { core_modules: { title: { shape: text label: "crates/cerebro-core — Module Detail" style.font-size: 16 style.bold: true } direction: down lib: "lib.rs\n[ProjectConfig, ProjectContext,\nConfig, Cache, ManualNotes]" storage: "storage.rs\n[Storage, Git, Database traits]" collectors_mod: "collectors/" { mod_file: "mod.rs" git: "git.rs" opencode: "opencode.rs" todos: "todos.rs" } lib -> storage lib -> collectors_mod } } # ─── Layer: cerebro-mcp modules ─── layers: { mcp_modules: { title: { shape: text label: "crates/cerebro-mcp — Module Detail" style.font-size: 16 style.bold: true } direction: down main: "main.rs" server: "server.rs" protocol: "protocol.rs" handlers_mod: "handlers/" { mod_file: "mod.rs" initialize: "initialize.rs" tools_handler: "tools.rs" } tools_mod: "tools/" { mod_file: "mod.rs" intent: "intent.rs" journal: "journal.rs" projects: "projects.rs" search: "search.rs" } main -> server server -> protocol server -> handlers_mod handlers_mod.tools_handler -> tools_mod } } # ─── Layer: cerebro-tui modules ─── layers: { tui_modules: { title: { shape: text label: "crates/cerebro-tui — Module Detail" style.font-size: 16 style.bold: true } direction: down lib: "lib.rs" app: "app.rs" tui_mod: "tui.rs" action: "action.rs" cli_mod: "cli.rs" errors: "errors.rs" components_mod: "components/" { mod_file: "mod.rs" home: "home.rs" dashboard: "dashboard.rs" projects: "projects.rs" journal: "journal.rs" todos: "todos.rs" config: "config.rs" sidebar: "sidebar.rs" help: "help.rs" widgets: "widgets/" } lib -> app app -> tui_mod app -> action app -> components_mod } }