Files
coco 723ce1af5c a
2026-07-03 15:12:48 +08:00

104 lines
3.4 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
RikkaHub is a native Android LLM chat client that supports switching between different AI providers for conversations.
Built with Jetpack Compose, Kotlin, and follows Material Design 3 principles.
## Architecture Overview
### Module Structure
- **app**: Main application module with UI, ViewModels, and core logic
- **ai**: AI SDK abstraction layer for different providers (OpenAI, Google, Anthropic)
- **highlight**: Code syntax highlighting implementation
- **search**: Search functionality SDK (Exa, Tavily, Zhipu)
- **rag**: RAG (Retrieval Augmented Generation) implementation
### Key Technologies
- **Jetpack Compose**: Modern UI toolkit
- **Koin**: Dependency injection
- **Room**: Database ORM
- **DataStore**: Preferences storage
- **OkHttp**: HTTP client with SSE support
- **Navigation Compose**: App navigation
- **Kotlinx Serialization**: JSON handling
### Core Packages
- `data/`: Data layer with repositories, database entities, and API clients
- `ui/pages/`: Screen implementations and ViewModels
- `ui/components/`: Reusable UI components
- `di/`: Dependency injection modules
- `utils/`: Utility functions and extensions
## Development Guidelines
### UI Development
- Follow Material Design 3 principles
- Use existing UI components from `ui/components/`
- Reference `SettingProviderPage.kt` for page layout patterns
- Use `FormItem` for consistent form layouts
- Implement proper state management with ViewModels
### Internationalization
- Support for English (default), Chinese(zh), Japanese(ja), and Traditional Chinese(zh-rTW)
- String resources located in `app/src/main/res/values-*/strings.xml`
- Use `stringResource(R.string.key_name)` in Compose
- Page-specific strings should use page prefix (e.g., `setting_page_`)
- If the user does not explicitly request localization, prioritize implementing functionality without considering
localization. (e.g `Text("Hello world")`)
### Database
- Room database with migration support
- Schema files in `app/schemas/`
- Use KSP for Room annotation processing
- Current database version tracked in `AppDatabase.kt`
### AI Provider Integration
- New providers go in `ai/src/main/java/me/rerere/ai/provider/providers/`
- Extend base `Provider` class
- Implement required API methods following existing patterns
- Support for streaming responses via SSE
### Prerequisites
- Android Studio with Kotlin support
- Requires `google-services.json` in `app/` folder for Firebase features
- Signing keys in `local.properties` for release builds
### Key Files to Reference
- `app/src/main/java/me/rerere/rikkahub/ui/pages/setting/SettingProviderPage.kt`: UI patterns
- `app/src/main/java/me/rerere/rikkahub/data/datastore/PreferencesStore.kt`: Data storage
- `ai/src/main/java/me/rerere/ai/provider/providers/OpenAIProvider.kt`: AI provider implementation
- `.cursor/rules/`: Development guidelines and patterns
## Build Configuration
### Gradle Configuration
- Multi-module project with version catalogs
- Supports ABI splits for arm64-v8a and x86_64
- Uses KSP for annotation processing
- Chaquopy for Python integration (PDF/DOCX processing)
### Target SDK
- Compile SDK: 36
- Target SDK: 36
- Min SDK: 26
- JVM Target: 11
### Signing
- Release builds require signing configuration in `local.properties`
- Debug builds use `.debug` application ID suffix