mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-19 14:41:24 +08:00
Add guidance to use ast-grep for code pattern searches when available, improving development workflow documentation.
4.5 KiB
4.5 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Tools
- Use
ast-grepto search code patterns if available.
Development Commands
Environment Setup
- Prerequisites: Node.js v22.x.x or higher, Yarn 4.9.1
- Setup Yarn:
corepack enable && corepack prepare yarn@4.9.1 --activate - Install Dependencies:
yarn install
Development
- Start Development:
yarn dev- Runs Electron app in development mode - Debug Mode:
yarn debug- Starts with debugging enabled, use chrome://inspect
Testing & Quality
- Run Tests:
yarn test- Runs all tests (Vitest) - Run E2E Tests:
yarn test:e2e- Playwright end-to-end tests - Type Check:
yarn typecheck- Checks TypeScript for both node and web - Lint:
yarn lint- ESLint with auto-fix - Format:
yarn format- Prettier formatting
Build & Release
- Build:
yarn build- Builds for production (includes typecheck) - Platform-specific builds:
- Windows:
yarn build:win - macOS:
yarn build:mac - Linux:
yarn build:linux
- Windows:
Architecture Overview
Electron Multi-Process Architecture
- Main Process (
src/main/): Node.js backend handling system integration, file operations, and services - Renderer Process (
src/renderer/): React-based UI running in Chromium - Preload Scripts (
src/preload/): Secure bridge between main and renderer processes
Key Architectural Components
Main Process Services (src/main/services/)
- MCPService: Model Context Protocol server management
- KnowledgeService: Document processing and knowledge base management
- FileStorage/S3Storage/WebDav: Multiple storage backends
- WindowService: Multi-window management (main, mini, selection windows)
- ProxyManager: Network proxy handling
- SearchService: Full-text search capabilities
AI Core (src/renderer/src/aiCore/)
- Middleware System: Composable pipeline for AI request processing
- Client Factory: Supports multiple AI providers (OpenAI, Anthropic, Gemini, etc.)
- Stream Processing: Real-time response handling
State Management (src/renderer/src/store/)
- Redux Toolkit: Centralized state management
- Persistent Storage: Redux-persist for data persistence
- Thunks: Async actions for complex operations
Knowledge Management
- Embeddings: Vector search with multiple providers (OpenAI, Voyage, etc.)
- OCR: Document text extraction (system OCR, Doc2x, Mineru)
- Preprocessing: Document preparation pipeline
- Loaders: Support for various file formats (PDF, DOCX, EPUB, etc.)
Build System
- Electron-Vite: Development and build tooling (v4.0.0)
- Rolldown-Vite: Using experimental rolldown-vite instead of standard vite
- Workspaces: Monorepo structure with
packages/directory - Multiple Entry Points: Main app, mini window, selection toolbar
- Styled Components: CSS-in-JS styling with SWC optimization
Testing Strategy
- Vitest: Unit and integration testing
- Playwright: End-to-end testing
- Component Testing: React Testing Library
- Coverage: Available via
yarn test:coverage
Key Patterns
- IPC Communication: Secure main-renderer communication via preload scripts
- Service Layer: Clear separation between UI and business logic
- Plugin Architecture: Extensible via MCP servers and middleware
- Multi-language Support: i18n with dynamic loading
- Theme System: Light/dark themes with custom CSS variables
UI Design
The project is in the process of migrating from antd & styled-components to HeroUI. Please use HeroUI to build UI components. The use of antd and styled-components is prohibited.
HeroUI Docs: https://www.heroui.com/docs/guide/introduction
Logging Standards
Usage
// Main process
import { loggerService } from '@logger'
const logger = loggerService.withContext('moduleName')
// Renderer process (set window source first)
loggerService.initWindowSource('windowName')
const logger = loggerService.withContext('moduleName')
// Logging
logger.info('message', CONTEXT)
logger.error('message', new Error('error'), CONTEXT)
Log Levels (highest to lowest)
error- Critical errors causing crash/unusable functionalitywarn- Potential issues that don't affect core functionalityinfo- Application lifecycle and key user actionsverbose- Detailed flow information for feature tracingdebug- Development diagnostic info (not for production)silly- Extreme debugging, low-level information