mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-19 06:30:10 +08:00
* ♻️ 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>
176 lines
6.7 KiB
YAML
176 lines
6.7 KiB
YAML
appId: com.kangfenmao.CherryStudio
|
|
productName: Cherry Studio
|
|
electronLanguages:
|
|
- zh-CN
|
|
- zh-TW
|
|
- en-US
|
|
- ja # macOS/linux/win
|
|
- ru # macOS/linux/win
|
|
- zh_CN # for macOS
|
|
- zh_TW # for macOS
|
|
- en # for macOS
|
|
- de
|
|
directories:
|
|
buildResources: build
|
|
|
|
protocols:
|
|
- name: Cherry Studio
|
|
schemes:
|
|
- cherrystudio
|
|
files:
|
|
- "**/*"
|
|
- "!**/{.vscode,.yarn,.yarn-lock,.github,.cursorrules,.prettierrc}"
|
|
- "!electron.vite.config.{js,ts,mjs,cjs}}"
|
|
- "!.*"
|
|
- "!components.json"
|
|
- "!**/{.eslintignore,.eslintrc.js,.eslintrc.json,.eslintcache,root.eslint.config.js,eslint.config.js,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,eslint.config.mjs,dev-app-update.yml,CHANGELOG.md,README.md,biome.jsonc}"
|
|
- "!**/{.env,.env.*,.npmrc,pnpm-lock.yaml}"
|
|
- "!**/{tsconfig.json,tsconfig.tsbuildinfo,tsconfig.node.json,tsconfig.web.json}"
|
|
- "!**/{.editorconfig,.jekyll-metadata}"
|
|
- "!src"
|
|
- "!scripts"
|
|
- "!local"
|
|
- "!docs"
|
|
- "!packages"
|
|
- "!.swc"
|
|
- "!.bin"
|
|
- "!._*"
|
|
- "!*.log"
|
|
- "!stats.html"
|
|
- "!*.md"
|
|
- "!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}"
|
|
- "!**/*.{map,ts,tsx,jsx,less,scss,sass,css.d.ts,d.cts,d.mts,md,markdown,yaml,yml}"
|
|
- "!**/{test,tests,__tests__,powered-test,coverage}/**"
|
|
- "!**/{example,examples}/**"
|
|
- "!**/*.{spec,test}.{js,jsx,ts,tsx}"
|
|
- "!**/*.min.*.map"
|
|
- "!**/*.d.ts"
|
|
- "!**/dist/es6/**"
|
|
- "!**/dist/demo/**"
|
|
- "!**/amd/**"
|
|
- "!**/{.DS_Store,Thumbs.db,thumbs.db,__pycache__}"
|
|
- "!**/{LICENSE,license,LICENSE.*,*.LICENSE.txt,NOTICE.txt,README.md,readme.md,CHANGELOG.md}"
|
|
- "!node_modules/rollup-plugin-visualizer"
|
|
- "!node_modules/js-tiktoken"
|
|
- "!node_modules/@tavily/core/node_modules/js-tiktoken"
|
|
- "!node_modules/pdf-parse/lib/pdf.js/{v1.9.426,v1.10.88,v2.0.550}"
|
|
- "!node_modules/mammoth/{mammoth.browser.js,mammoth.browser.min.js}"
|
|
- "!node_modules/selection-hook/prebuilds/**/*" # we rebuild .node, don't use prebuilds
|
|
- "!node_modules/selection-hook/node_modules" # we don't need what in the node_modules dir
|
|
- "!node_modules/selection-hook/src" # we don't need source files
|
|
- "!node_modules/tesseract.js-core/{tesseract-core.js,tesseract-core.wasm,tesseract-core.wasm.js}" # we don't need source files
|
|
- "!node_modules/tesseract.js-core/{tesseract-core-lstm.js,tesseract-core-lstm.wasm,tesseract-core-lstm.wasm.js}" # we don't need source files
|
|
- "!node_modules/tesseract.js-core/{tesseract-core-simd-lstm.js,tesseract-core-simd-lstm.wasm,tesseract-core-simd-lstm.wasm.js}" # we don't need source files
|
|
- "!**/*.{h,iobj,ipdb,tlog,recipe,vcxproj,vcxproj.filters,Makefile,*.Makefile}" # filter .node build files
|
|
asarUnpack:
|
|
- resources/**
|
|
- "**/*.{metal,exp,lib}"
|
|
- "node_modules/@img/sharp-libvips-*/**"
|
|
|
|
# copy from node_modules/claude-code-plugins/plugins to resources/data/claude-code-pluginso
|
|
extraResources:
|
|
- from: "./node_modules/claude-code-plugins/plugins/"
|
|
to: "claude-code-plugins"
|
|
|
|
win:
|
|
executableName: Cherry Studio
|
|
artifactName: ${productName}-${version}-${arch}-setup.${ext}
|
|
target:
|
|
- target: nsis
|
|
- target: portable
|
|
signtoolOptions:
|
|
sign: scripts/win-sign.js
|
|
verifyUpdateCodeSignature: false
|
|
nsis:
|
|
artifactName: ${productName}-${version}-${arch}-setup.${ext}
|
|
shortcutName: ${productName}
|
|
uninstallDisplayName: ${productName}
|
|
createDesktopShortcut: always
|
|
allowToChangeInstallationDirectory: true
|
|
oneClick: false
|
|
include: build/nsis-installer.nsh
|
|
buildUniversalInstaller: false
|
|
portable:
|
|
artifactName: ${productName}-${version}-${arch}-portable.${ext}
|
|
buildUniversalInstaller: false
|
|
mac:
|
|
entitlementsInherit: build/entitlements.mac.plist
|
|
notarize: false
|
|
artifactName: ${productName}-${version}-${arch}.${ext}
|
|
extendInfo:
|
|
- NSCameraUsageDescription: Application requests access to the device's camera.
|
|
- NSMicrophoneUsageDescription: Application requests access to the device's microphone.
|
|
- NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder.
|
|
- NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder.
|
|
target:
|
|
- target: dmg
|
|
- target: zip
|
|
linux:
|
|
artifactName: ${productName}-${version}-${arch}.${ext}
|
|
target:
|
|
- target: AppImage
|
|
- target: deb
|
|
- target: rpm
|
|
maintainer: electronjs.org
|
|
category: Utility
|
|
desktop:
|
|
entry:
|
|
StartupWMClass: CherryStudio
|
|
mimeTypes:
|
|
- x-scheme-handler/cherrystudio
|
|
rpm:
|
|
# Workaround for electron build issue on rpm package:
|
|
# https://github.com/electron/forge/issues/3594
|
|
fpm: ["--rpm-rpmbuild-define=_build_id_links none"]
|
|
publish:
|
|
provider: generic
|
|
url: https://releases.cherry-ai.com
|
|
electronDownload:
|
|
mirror: https://npmmirror.com/mirrors/electron/
|
|
beforePack: scripts/before-pack.js
|
|
afterPack: scripts/after-pack.js
|
|
afterSign: scripts/notarize.js
|
|
artifactBuildCompleted: scripts/artifact-build-completed.js
|
|
releaseInfo:
|
|
releaseNotes: |
|
|
<!--LANG:en-->
|
|
What's New in v1.7.0-beta.6
|
|
|
|
New Features:
|
|
- Enhanced Input Bar: Completely redesigned input bar with improved responsiveness and functionality
|
|
- Better File Handling: Improved drag-and-drop and paste support for images and documents
|
|
- Smart Tool Suggestions: Enhanced quick panel with better item selection and keyboard shortcuts
|
|
|
|
Improvements:
|
|
- Smoother Input Experience: Better auto-resizing and text handling in chat input
|
|
- Enhanced AI Performance: Improved connection stability and response speed
|
|
- More Reliable File Uploads: Better support for various file types and upload scenarios
|
|
- Cleaner Interface: Optimized UI elements for better visual consistency
|
|
|
|
Bug Fixes:
|
|
- Fixed image selection issue when adding custom AI providers
|
|
- Fixed file upload problems with certain API configurations
|
|
- Fixed input bar responsiveness issues
|
|
- Fixed quick panel not working properly in some situations
|
|
|
|
<!--LANG:zh-CN-->
|
|
v1.7.0-beta.6 新特性
|
|
|
|
新功能:
|
|
- 增强输入栏:完全重新设计的输入栏,响应更灵敏,功能更强大
|
|
- 更好的文件处理:改进的拖拽和粘贴功能,支持图片和文档
|
|
- 智能工具建议:增强的快速面板,更好的项目选择和键盘快捷键
|
|
|
|
改进:
|
|
- 更流畅的输入体验:聊天输入框的自动调整和文本处理更佳
|
|
- 增强 AI 性能:改进连接稳定性和响应速度
|
|
- 更可靠的文件上传:更好地支持各种文件类型和上传场景
|
|
- 更简洁的界面:优化 UI 元素,视觉一致性更好
|
|
|
|
问题修复:
|
|
- 修复添加自定义 AI 提供商时的图片选择问题
|
|
- 修复某些 API 配置下的文件上传问题
|
|
- 修复输入栏响应性问题
|
|
- 修复快速面板在某些情况下无法正常工作的问题
|
|
<!--LANG:END-->
|