Files
CherryHQ-cherry-studio/docs
fullex fd81de8a32 feat(db-service): add withWriteTx for serialized writes (libsql #288)
libsql client-ts upstream issue #288 makes PRAGMA busy_timeout ineffective
for async transactions, so concurrent db.transaction() calls reliably surface
SQLITE_BUSY. Introduce DbService.withWriteTx as a serialized write helper:

- Process-wide FIFO mutex (async-mutex) serializes write transactions.
- libsql client's default BEGIN IMMEDIATE protects against read-then-write
  tx upgrade failures (no override needed at the drizzle layer).
- Single 50ms BUSY retry guards against transient external locks.

Reads do NOT need this — WAL gives readers snapshot isolation that is never
blocked by writers.

Includes unit tests (FIFO ordering, finally release on throw, single BUSY
retry, persistent BUSY rethrow, non-BUSY passthrough) plus a real-libsql
integration test. Updates the DbService test mock with a passthrough
withWriteTx so dependent services do not throw "is not a function" in
tests. Documents the API in database-patterns.md and points
CLAUDE.md / data-api-overview.md at the new pattern.
2026-05-21 04:54:43 -07:00
..

Cherry Studio Documentation

Guides

Document Description
Development Setup Development environment setup
Contributing How to contribute code
Branching Strategy Git branching workflow
Test Plan Test plan and release channels
i18n Guide Internationalization guide
Logging Guide How to use the logger service
Middleware How to write AI Provider middleware

References

Architecture

Document Description
Architecture Overview System-wide architecture, process model, data flow

AI Core

Document Description
AI Core Architecture Complete data flow and architecture from user input to LLM response

Data System

Document Description
Data System Overview System selection, architecture, and patterns
Boot Config Overview Early boot configuration system
Boot Config Schema Guide Adding new boot config keys
Cache Overview Three-tier caching architecture and design invariants
Cache Usage useCache hooks, direct API, Main-process subscriptions
Cache Schema Guide Adding new cache keys (fixed and template)
Preference Overview User settings management
Preference Usage usePreference hook examples
Preference Schema Guide Adding new preference keys
DataApi Overview Business data API architecture
DataApi in Renderer useQuery/useMutation patterns
DataApi in Main Handlers, Services, Repositories
API Design Guidelines RESTful design rules
API Types API type system, schemas, error handling
Database Patterns DB naming, schema patterns
Layered Preset Pattern Presets with user overrides
V2 Migration Guide Migration system

Lifecycle System

Document Description
Lifecycle Overview Architecture, decision guides, usage
Application Overview Application bootstrap and shutdown
Lifecycle Internals Phases, hooks, states
Lifecycle Usage Full usage guide with examples
Lifecycle Decision Guide Lifecycle vs singleton decision
Lifecycle Migration Guide Migrating old services

Messaging

Document Description
Message System Message lifecycle, state management, operations

Knowledge

Document Description
KnowledgeService Concurrency control and workload management

CherryClaw (Autonomous Agent)

Document Description
CherryClaw Overview Architecture, memory system, API
Channel System IM integration (Telegram, etc.)
Claw MCP Server Built-in MCP tools (cron, notify, skills, memory)
Scheduler Task-based polling scheduler

Components

Document Description
CodeBlockView Code block view component
Image Preview Image preview components
Code Execution Python code execution via Pyodide

Other

Document Description
App Upgrade Config Application upgrade configuration
Feishu Notify Feishu notification integration
Fuzzy Search Fuzzy search implementation
LAN Transfer Protocol LAN file transfer protocol spec