mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-07-03 12:27:41 +08:00
Renderer windows set their logger source inline via initWindowSource() in
entryPoint.tsx, which had to execute before any import-time log or the source
fell back to 'UNKNOWN'. ESM hoists imports above statements, so this ordering
was fragile and applied inconsistently across windows.
LoggerService now derives the source at construction from a
<meta name="logger-window-source"> tag in each window's index.html. The meta
is parsed before any module script runs, so the source is set before any
import-time log -- no ordering rules in entryPoint.tsx. initWindowSource() is
kept as an explicit override for documentless contexts (workers, tests) and
takes precedence over the derived value.
- Add resolveWindowSourceFromMeta() and derivedWindow with
explicit > derived > UNKNOWN precedence; export the LoggerService class
- Declare the meta in all 7 window index.html files (source strings unchanged)
- Drop the 7 inline initWindowSource() calls and the subWindow initLogger.ts
module; keep the worker's explicit initWindowSource('Worker')
- Update windows/README.md and docs/guides/logging.md
- Add LoggerService unit tests
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 Reference | Main-process AI pipeline: stream manager, agent loop, providers, tools |
| Core Architecture | End-to-end call flow from user input to LLM response |
| Stream Manager | Active-stream registry, broker, reconnect, persistence |
| Adapter Family | How endpoint → @ai-sdk/* package routing is decided |
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 |
| Message Tree | Chat message-tree model: adjacency list, per-topic virtual root, sibling groups, invariants, delete semantics, getTree / flow-canvas contract |
| Chat UI Design & Conventions | How the chat UI is divided by responsibility (presentation / view-state / contracts / orchestration) and the conventions modules follow (context, refs, render stability) |
| Chat Adapters | The chat contract layer: projecting topics / sessions / messages into stable UI shapes, the pane / action registries, and render-stability rules |
Knowledge
| Document | Description |
|---|---|
| Knowledge Product Spec | Condensed product semantics for Agent-managed knowledge bases (full version lives in Feishu) |
| Knowledge Technical Design | Condensed per-base index.sqlite schema, index store contracts, and retrieval decisions (full version lives in Feishu) |
| KnowledgeService | Concurrency control and workload management |
| Knowledge Operation Guards | Guard, enqueue failure, and recovery semantics for add/delete/reindex |
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 |