# Core This directory contains **application-level infrastructure** that is independent of business logic. Core services are things the app needs to function as an Electron application — regardless of what the app actually does. If you swapped out all the business features tomorrow, these modules would still be necessary. ## What belongs here - Lifecycle management (service registration, bootstrap, shutdown) - Logging infrastructure - Configuration management - IPC communication framework - Plugin/extension system plumbing - Platform abstraction utilities ## What does NOT belong here - Anything tied to what Cherry Studio specifically does (AI, conversations, models, topics, assistants, knowledge bases, MCP, etc.) - Business data schemas, repositories, or services - UI-specific logic - Feature-specific utilities **Rule of thumb:** If removing a module would break the app regardless of its features, it belongs in `core/`. If removing it would only break a specific feature, it belongs elsewhere (e.g., `services/`, `data/`). ## Startup phases The v2 main process has three startup phases. This is the preferred terminology across the codebase. | Phase | Owned by | Description | |-------|----------|-------------| | **preboot** | `core/preboot/` | Synchronous setup that must complete before `application.bootstrap()` is called. BootConfig load, logger init, userData resolution, command-line switches, top-level Electron APIs. No DI, no lifecycle services. | | **bootstrap** | `core/application/` + `core/lifecycle/` | The `application.bootstrap()` orchestration function. Freezes the path registry, builds the IoC container, runs the lifecycle stages (Background / BeforeReady / WhenReady). NestJS/Spring-style terminology — this is the only meaning of "bootstrap" in this codebase. | | **running** | (no explicit owner) | Steady state after `application.bootstrap()` returns. All services ready, main window visible, IPC and user events flowing normally. | The lifecycle stages (Background / BeforeReady / WhenReady) run *inside* the bootstrap phase, not as separate top-level phases. The legacy file `src/main/bootstrap.ts` predates this vocabulary and is no longer imported anywhere. It will be removed in a follow-up cleanup PR. ## Current modules | Module | Description | Reference Docs | |--------|-------------|----------------| | `application/` | Application singleton, service registry, bootstrap orchestration | [Lifecycle Reference](../../../docs/references/lifecycle/README.md) | | `concurrency/` | `createLatestReconciler` — general latest-wins async side-effect reconciler (single-flight, level-triggered) | [concurrency/README.md](./concurrency/README.md) | | `diagnostics.ts` | Opt-in performance instrumentation (CPU profile, event-loop lag, service spans), gated by `CS_DIAGNOSTICS` | [diagnostics.md](../../../docs/guides/diagnostics.md) | | `lifecycle/` | IoC container, service lifecycle management, phased bootstrap | [Lifecycle Reference](../../../docs/references/lifecycle/README.md) | | `logger/` | Winston-based logging service (preboot singleton, consumed via `@logger` alias) | [logging.md](../../../docs/guides/logging.md) | | `paths/` | Path registry: single source of truth for all main-process filesystem paths | [paths/README.md](./paths/README.md) | | `preboot/` | Pre-bootstrap synchronous setup (userData resolution, etc.) | [preboot/README.md](./preboot/README.md) |