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 directories: buildResources: build protocols: - name: Cherry Studio schemes: - cherrystudio files: - '**/*' - '!**/{.vscode,.yarn,.yarn-lock,.github,.cursorrules,.prettierrc}' - '!electron.vite.config.{js,ts,mjs,cjs}}' - '!**/{.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}' - '!**/{.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}' 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} minimumSystemVersion: '20.1.0' # 最低支持 macOS 11.0 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 publish: provider: generic url: https://releases.cherry-ai.com electronDownload: mirror: https://npmmirror.com/mirrors/electron/ afterPack: scripts/after-pack.js afterSign: scripts/notarize.js artifactBuildCompleted: scripts/artifact-build-completed.js releaseInfo: releaseNotes: | 🎉 新增功能: - 新增 ErrorBoundary 组件包裹 mini 窗口内容,提升错误处理能力 - 新增智谱AI模型支持,扩展AI提供商生态 - 新增系统 OCR 功能,支持 MacOS 和 Windows 原生文字识别 - 新增文件页面批量删除功能,提升文件管理效率 - 新增超链接工具提示功能,增强用户体验 - 新增 iframe 截图功能,支持更多内容捕获场景 - 新增提示变量替换功能,增强编排服务能力 - 新增文本增量累积可配置支持,优化流式响应体验 - 新增 AbortController 管理功能,改进请求取消机制 🔧 优化改进: - 重构翻译服务架构,统一使用新的API接口 - 重构语言检测功能,使用通用聊天接口替代专用接口 - 重构 provider 注册和模型解析逻辑,提升扩展性 - 重构 fetchChatCompletion 参数类型定义,增强类型安全 - 重构 provider 列表和 URL Schema 弹窗界面 - 增强模型推理控制逻辑,支持更多提供商和模型类型 - 优化 MCP 工具可见性控制,根据工具状态动态显示知识图标 - 改进日志记录机制,将 console.log 替换为 logger.debug - 升级核心依赖包(mermaid, shiki, tanstack 等) 🐛 问题修复: - 修复 API 检查时的错误处理和取消逻辑 - 修复翻译过程中中止控制器的错误处理 - 修复 useAssistant hook 导致快捷助手渲染问题 - 修复 MCP 标签溢出显示问题 - 修复缺失的模型图标显示 - 修复 ImageViewer 双重菜单问题,改进图标显示 - 修复 Qwen MT 模型翻译功能 - 修复 Deepin 系统不使用系统默认终端的问题 - 修复备份/恢复进度的国际化显示问题 - 修复相关依赖缺失问题 ⚡ 性能提升: - 优化构建配置,排除不必要的 Tesseract.js 核心文件 - 提升代码类型定义复用性,减少重复代码 - 优化 provider 配置构建逻辑,提升初始化性能