cherry-studio/docs
beyondkmp 038d30831c
♻️ refactor: implement config-based update system with version compatibility control (#11147)
* ♻️ refactor: implement config-based update system with version compatibility control

Replace GitHub API-based update discovery with JSON config file system. Support
version gating (users below v1.7 must upgrade to v1.7.0 before v2.0). Auto-select
GitHub/GitCode config source based on IP location. Simplify fallback logic.

Changes:
- Add update-config.json with version compatibility rules
- Implement _fetchUpdateConfig() and _findCompatibleChannel()
- Remove legacy _getReleaseVersionFromGithub() and GitHub API dependency
- Refactor _setFeedUrl() with simplified fallback to default feed URLs
- Add design documentation in docs/UPDATE_CONFIG_DESIGN.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(i18n): Auto update translations for PR #11147

* format code

* 🔧 chore: update config for v1.7.5 → v2.0.0 → v2.1.6 upgrade path

Update version configuration to support multi-step upgrade path:
- v1.6.x users → v1.7.5 (last v1.x release)
- v1.7.x users → v2.0.0 (v2.x intermediate version)
- v2.0.0+ users → v2.1.6 (current latest)

Changes:
- Update 1.7.0 → 1.7.5 with fixed feedUrl
- Set 2.0.0 as intermediate version with fixed feedUrl
- Add 2.1.6 as current latest pointing to releases/latest

This ensures users upgrade through required intermediate versions
before jumping to major releases.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* 🔧 chore: refactor update config with constants and adjust versions

Refactor update configuration system and adjust to actual versions:

- Add UpdateConfigUrl enum in constant.ts for centralized config URLs
- Point to test server (birdcat.top) for development testing
- Update AppUpdater.ts to use UpdateConfigUrl constants
- Adjust update-config.json to actual v1.6.7 with rc/beta channels
- Remove v2.1.6 entry (not yet released)
- Set package version to 1.6.5 for testing upgrade path
- Add update-config.example.json for reference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* update version

*  test: add comprehensive unit tests for AppUpdater config system

Add extensive test coverage for new config-based update system including:
- Config fetching with IP-based source selection (GitHub/GitCode)
- Channel compatibility matching with version constraints
- Smart fallback from rc/beta to latest when appropriate
- Multi-step upgrade path validation (1.6.3 → 1.6.7 → 2.0.0)
- Error handling for network and HTTP failures

Test Coverage:
- _fetchUpdateConfig: 4 tests (GitHub/GitCode selection, error handling)
- _findCompatibleChannel: 9 tests (channel matching, version comparison)
- Upgrade Path: 3 tests (version gating scenarios)
- Total: 30 tests, 100% passing

Also optimize _findCompatibleChannel logic with better variable naming
and log messages.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

*  test: add complete multi-step upgrade path tests (1.6.3 → 1.7.5 → 2.0.0 → 2.1.6)

Add comprehensive test suite for complete upgrade journey including:
- Individual step validation (1.6.3→1.7.5, 1.7.5→2.0.0, 2.0.0→2.1.6)
- Full multi-step upgrade simulation with version progression
- Version gating enforcement (block skipping intermediate versions)
- Verification that 1.6.3 cannot directly upgrade to 2.0.0 or 2.1.6
- Verification that 1.7.5 cannot skip 2.0.0 to reach 2.1.6

Test Coverage:
- 6 new tests for complete upgrade path scenarios
- Total: 36 tests, 100% passing

This ensures the version compatibility system correctly enforces
intermediate version upgrades for major releases.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* 📝 docs: reorganize update config documentation with English translation

Move update configuration design document to docs/technical/ directory
and add English translation for international contributors.

Changes:
- Move docs/UPDATE_CONFIG_DESIGN.md → docs/technical/app-update-config-zh.md
- Add docs/technical/app-update-config-en.md (English translation)
- Organize technical documentation in dedicated directory

Documentation covers:
- Config-based update system design and rationale
- JSON schema with version compatibility control
- Multi-step upgrade path examples (1.6.3 → 1.7.5 → 2.0.0 → 2.1.6)
- TypeScript type definitions and matching algorithms
- GitHub/GitCode source selection for different regions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* format code

*  test: add tests for latest channel self-comparison prevention

Add tests to verify the optimization that prevents comparing latest
channel with itself when latest is requested, and ensures rc/beta
channels are returned when they are newer than latest.

New tests:
- should not compare latest with itself when requesting latest channel
- should return rc when rc version > latest version
- should return beta when beta version > latest version

These tests ensure the requestedChannel !== UpgradeChannel.LATEST
check works correctly and users get the right channel based on
version comparisons.

Test Coverage: 39 tests, 100% passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* update github/gitcode

* format code

* update rc version

* ♻️ refactor: merge update configs into single multi-mirror file

- Merge app-upgrade-config-github.json and app-upgrade-config-gitcode.json into single app-upgrade-config.json
- Add UpdateMirror enum for type-safe mirror selection
- Optimize _fetchUpdateConfig to receive mirror parameter, eliminating duplicate IP country checks
- Update ChannelConfig interface to use Record<UpdateMirror, string> for feedUrls
- Rename documentation files from app-update-config-* to app-upgrade-config-*
- Update docs with new multi-mirror configuration structure

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

*  test: update AppUpdater tests for multi-mirror configuration

- Add UpdateMirror enum import
- Update _fetchUpdateConfig tests to accept mirror parameter
- Convert all feedUrl to feedUrls structure in test mocks
- Update test expectations to match new ChannelConfig interface
- All 39 tests passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* format code

* delete files

* 📝 docs: add UpdateMirror enum to type definitions

- Add UpdateMirror enum definition in both EN and ZH docs
- Update ChannelConfig to use Record<UpdateMirror, string>
- Add comments showing equivalent structure for clarity

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* 🐛 fix: return actual channel from _findCompatibleChannel

Fix channel mismatch issue where requesting rc/beta but getting latest:
- Change _findCompatibleChannel return type to include actual channel
- Return { config, channel } instead of just config
- Update _setFeedUrl to use actualChannel instead of requestedChannel
- Update all test expectations to match new return structure
- Add channel assertions to key tests

This ensures autoUpdater.channel matches the actual feed URL being used.

Fixes issue where:
- User requests 'rc' channel
- latest >= rc, so latest config is returned
- But channel was set to 'rc' with latest URL 
- Now channel is correctly set to 'latest' 

All 39 tests passing 

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* update version

* udpate version

* update config

* add no cache header

* update files

* 🤖 chore: automate app upgrade config updates

* format code

* update workflow

* update get method

* docs: document upgrade workflow automation

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: GitHub Action <action@github.com>
2025-11-14 17:49:40 +08:00
..
features [1.5.0-rc] Feat/memory (#7689) 2025-07-15 10:24:41 +08:00
technical ♻️ refactor: implement config-based update system with version compatibility control (#11147) 2025-11-14 17:49:40 +08:00
branching-strategy-en.md docs: add testplan md (#7854) 2025-07-05 17:19:25 +08:00
branching-strategy-zh.md docs: add testplan md (#7854) 2025-07-05 17:19:25 +08:00
CONTRIBUTING.zh.md docs: fix invalid link in the contributing guide (#11038) 2025-10-29 22:28:38 +08:00
dev.md chore: update Node.js version to 22 and Yarn version to 4.9.1 across workflows and documentation 2025-11-05 12:54:30 +08:00
README.zh.md docs: fix spelling errors in README files (#10015) 2025-09-07 20:34:14 +08:00
sponsor.md docs: add dev docs 2024-09-27 00:13:24 +08:00
testplan-en.md docs: update test plan documentation to clarify upgrade behavior for RC and Beta channels 2025-11-07 12:02:28 +08:00
testplan-zh.md docs: update test plan documentation to clarify upgrade behavior for RC and Beta channels 2025-11-07 12:02:28 +08:00

banner

English | 中文 | 官方网站 | 文档 | 开发 | 反馈

Featured|HelloGitHub kangfenmao%2Fcherry-studio | Trendshift Cherry Studio - AI Chatbots, AI Desktop Client | Product Hunt

🍒 Cherry Studio

Cherry Studio 是一款支持多个大语言模型LLM服务商的桌面客户端兼容 Windows、Mac 和 Linux 系统。

👏 欢迎加入 Telegram 群组Discord | QQ群(575014769)

❤️ 喜欢 Cherry Studio? 点亮小星星 🌟赞助开发者! ❤️

📖 使用教程

https://docs.cherry-ai.com

🌠 界面

🌟 主要特性

  1. 多样化 LLM 服务支持
  • ☁️ 支持主流 LLM 云服务OpenAI、Gemini、Anthropic、硅基流动等
  • 🔗 集成流行 AI Web 服务Claude、Perplexity、Poe、腾讯元宝、知乎直答等
  • 💻 支持 Ollama、LM Studio 本地模型部署
  1. 智能助手与对话
  • 📚 内置 300+ 预配置 AI 助手
  • 🤖 支持自定义创建专属助手
  • 💬 多模型同时对话,获得多样化观点
  1. 文档与数据处理
  • 📄 支持文本、图片、Office、PDF 等多种格式
  • ☁️ WebDAV 文件管理与数据备份
  • 📊 Mermaid 图表可视化
  • 💻 代码高亮显示
  1. 实用工具集成
  • 🔍 全局搜索功能
  • 📝 话题管理系统
  • 🔤 AI 驱动的翻译功能
  • 🎯 拖拽排序
  • 🔌 小程序支持
  • ⚙️ MCP(模型上下文协议) 服务
  1. 优质使用体验
  • 🖥️ Windows、Mac、Linux 跨平台支持
  • 📦 开箱即用,无需配置环境
  • 🎨 支持明暗主题与透明窗口
  • 📝 完整的 Markdown 渲染
  • 🤲 便捷的内容分享功能

📝 开发计划

我们正在积极开发以下功能和改进:

  1. 🎯 核心功能
  • 选择助手 - 智能内容选择增强
  • 深度研究 - 高级研究能力
  • 全局记忆 - 全局上下文感知
  • 文档预处理 - 改进文档处理能力
  • MCP 市场 - 模型上下文协议生态系统
  1. 🗂 知识管理
  • 笔记与收藏功能
  • 动态画布可视化
  • OCR 光学字符识别
  • TTS 文本转语音支持
  1. 📱 平台支持
  • 鸿蒙版本 (PC)
  • Android 应用(第一期)
  • iOS 应用(第一期)
  • 多窗口支持
  • 窗口置顶功能
  1. 🔌 高级特性
  • 插件系统
  • ASR 语音识别
  • 助手与话题交互重构

在我们的项目面板上跟踪进展并参与贡献。

想要影响开发计划?欢迎加入我们的 GitHub 讨论区 分享您的想法和反馈!

🌈 主题

欢迎 PR 更多主题

🤝 贡献

我们欢迎对 Cherry Studio 的贡献!您可以通过以下方式贡献:

  1. 贡献代码:开发新功能或优化现有代码
  2. 修复错误:提交您发现的错误修复
  3. 维护问题:帮助管理 GitHub 问题
  4. 产品设计:参与设计讨论
  5. 撰写文档:改进用户手册和指南
  6. 社区参与:加入讨论并帮助用户
  7. 推广使用:宣传 Cherry Studio

参考分支策略了解贡献指南

入门

  1. Fork 仓库Fork 并克隆到您的本地机器
  2. 创建分支:为您的更改创建分支
  3. 提交更改:提交并推送您的更改
  4. 打开 Pull Request:描述您的更改和原因

有关更详细的指南,请参阅我们的 贡献指南

感谢您的支持和贡献!

🔧 开发者共创计划

我们正在启动 Cherry Studio 开发者共创计划,旨在为开源生态系统构建一个健康、正向反馈的循环。我们相信,优秀的软件是通过协作构建的,每一个合并的拉取请求都为项目注入新的生命力。

我们诚挚地邀请您加入我们的贡献者队伍,与我们一起塑造 Cherry Studio 的未来。

贡献者奖励计划

为了回馈我们的核心贡献者并创造良性循环,我们建立了以下长期激励计划。

该计划的首个跟踪周期将是 2025 年第三季度7月、8月、9月。此周期的奖励将在 10月1日 发放。

在任何跟踪周期内(例如,首个周期的 7月1日 至 9月30日任何为 Cherry Studio 在 GitHub 上的开源项目贡献超过 30 个有意义提交 的开发者都有资格获得以下福利:

  • Cursor 订阅赞助:获得 70 美元Cursor 订阅积分或报销,让 AI 成为您最高效的编码伙伴。
  • 无限模型访问:获得 DeepSeekQwen 模型的 无限次 API 调用。
  • 前沿技术访问:享受偶尔的特殊福利,包括 ClaudeGeminiOpenAI 等模型的 API 访问权限,让您始终站在技术前沿。

共同成长与未来规划

活跃的社区是任何可持续开源项目背后的推动力。随着 Cherry Studio 的发展,我们的奖励计划也将随之发展。我们致力于持续将我们的福利与行业内最优秀的工具和资源保持一致。这确保我们的核心贡献者获得有意义的支持,创造一个开发者、社区和项目共同成长的正向循环。

展望未来,该项目还将采取越来越开放的态度来回馈整个开源社区。

如何开始?

我们期待您的第一个拉取请求!

您可以从探索我们的仓库开始,选择一个 good first issue,或者提出您自己的改进建议。每一个提交都是开源精神的体现。

感谢您的关注和贡献。

让我们一起建设。

🏢 企业版

在社区版的基础上,我们自豪地推出 Cherry Studio 企业版——一个为现代团队和企业设计的私有部署 AI 生产力与管理平台。

企业版通过集中管理 AI 资源、知识和数据,解决了团队协作中的核心挑战。它赋能组织提升效率、促进创新并确保合规,同时在安全环境中保持对数据的 100% 控制。

核心优势

  • 统一模型管理:集中整合和管理各种基于云的大语言模型(如 OpenAI、Anthropic、Google Gemini和本地部署的私有模型。员工可以开箱即用无需单独配置。
  • 企业级知识库:构建、管理和分享全团队的知识库。确保知识得到保留且一致,使团队成员能够基于统一准确的信息与 AI 交互。
  • 细粒度访问控制:通过统一的管理后台轻松管理员工账户,并为不同模型、知识库和功能分配基于角色的权限。
  • 完全私有部署:在您的本地服务器或私有云上部署整个后端服务,确保您的数据 100% 私有且在您的控制之下,满足最严格的安全和合规标准。
  • 可靠的后端服务:提供稳定的 API 服务、企业级数据备份和恢复机制,确保业务连续性。

在线演示

🚧 公开测试版通知

企业版目前处于早期公开测试阶段,我们正在积极迭代和优化其功能。我们知道它可能还不够完全稳定。如果您在试用过程中遇到任何问题或有宝贵建议,我们非常感谢您能通过邮件联系我们提供反馈。

🔗 Cherry Studio 企业版

版本对比

功能 社区版 企业版
开源 部分开源,对客户开放
成本 个人使用免费 / 商业授权 买断 / 订阅费用
管理后台 ● 集中化模型访问
员工管理
● 共享知识库
访问控制
数据备份
服务器 专用私有部署

获取企业版

我们相信企业版将成为您团队的 AI 生产力引擎。如果您对 Cherry Studio 企业版感兴趣,希望了解更多信息、请求报价或安排演示,请联系我们。

🔗 相关项目

  • one-apiLLM API 管理及分发系统,支持 OpenAI、Azure、Anthropic 等主流模型,统一 API 接口,可用于密钥管理与二次分发。

  • ublacklist:屏蔽特定网站在 Google 搜索结果中显示

🚀 贡献者



📊 GitHub 统计

Stats

Star 记录

Star History Chart