-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Comparing changes
Open a pull request
base repository: CherryHQ/cherry-studio
base: v1.8.3
head repository: CherryHQ/cherry-studio
compare: v1.8.4
- 10 commits
- 30 files changed
- 9 contributors
Commits on Mar 26, 2026
-
fix(aiCore): add missing @openrouter/ai-sdk-provider dependency (#13787)
### What this PR does Before this PR: The `@cherrystudio/ai-core` package imports `@openrouter/ai-sdk-provider` in its source code (`schemas.ts` and `types.ts`), but this dependency was not declared in `packages/aiCore/package.json`. This caused `tsdown` to inline-bundle it and exit with an error, failing the **Release Packages** CI workflow. After this PR: `@openrouter/ai-sdk-provider` is properly declared as a dependency in `packages/aiCore/package.json`, so `tsdown` treats it as an external dependency and the build succeeds. Fixes # N/A ### Why we need it and why it was done in this way The following tradeoffs were made: None — this is a straightforward missing dependency declaration. The following alternatives were considered: None. Links to places where the discussion took place: N/A ### Breaking changes None. ### Special notes for your reviewer The root `package.json` already has `@openrouter/ai-sdk-provider@^2.2.3` with a patch applied. The aiCore package now correctly declares the same version range so it resolves through the workspace. ### Checklist - [x] PR: The PR description is expressive enough and will help future contributors - [x] Code: [Write code that humans can understand](https://en.wikiquote.org/wiki/Martin_Fowler#code-for-humans) and [Keep it simple](https://en.wikipedia.org/wiki/KISS_principle) - [x] Refactor: You have [left the code cleaner than you found it (Boy Scout Rule)](https://learning.oreilly.com/library/view/97-things-every/9780596809515/ch08.html) - [x] Upgrade: Impact of this change on upgrade flows was considered and addressed if required - [ ] Documentation: A [user-guide update](https://docs.cherry-ai.com) was considered and is present (link) or not required. Check this only when the PR introduces or changes a user-facing feature or behavior. - [x] Self-review: I have reviewed my own code (e.g., via [`/gh-pr-review`](/.claude/skills/gh-pr-review/SKILL.md), `gh pr diff`, or GitHub UI) before requesting review from others ### Release note ```release-note NONE ``` --------- Signed-off-by: icarus <[email protected]> Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 6b4c928 - Browse repository at this point
Copy the full SHA 6b4c928View commit details -
ci: restrict package release workflow to cherry-studio's main branch (#…
…13797) This CI had run in my fork, but it should only run in cherry studio's main branch. <img width="1194" height="102" alt="CleanShot 2026-03-26 at 09 11 59@2x" src="https://github.com/user-attachments/assets/93cc496e-601e-40a4-a5d9-75cd056f7a66" />
Configuration menu - View commit details
-
Copy full SHA for 2919d09 - Browse repository at this point
Copy the full SHA 2919d09View commit details -
Configuration menu - View commit details
-
Copy full SHA for 5625ae9 - Browse repository at this point
Copy the full SHA 5625ae9View commit details -
feat(api): add knowledge base REST API endpoints (#13762)
Co-authored-by: Claude Sonnet 4.6 <[email protected]> Co-authored-by: icarus <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 8e72f2f - Browse repository at this point
Copy the full SHA 8e72f2fView commit details -
fix(aiCore): remove openai-compatible providers from PDF native suppo…
…rt list (#13809) ### What this PR does Before this PR: - `PDF_NATIVE_PROVIDER_TYPES` included `'openai'`, `'new-api'`, and `'gateway'` types, assuming all OpenAI-compatible providers support native PDF file input via the `file` part type. - Sending a PDF to providers like Moonshot/Kimi (which have `type: 'openai'`) resulted in a 400 error: `"invalid part type: file"`. - A special-case `isCherryAI` check was needed because CherryAI also has `type: 'openai'` but doesn't support native PDF. After this PR: - Only first-party provider protocols (`openai-response`, `anthropic`, `gemini`, `azure-openai`, `vertexai`, `aws-bedrock`, `vertex-anthropic`) are in `PDF_NATIVE_PROVIDER_TYPES`. - All `type: 'openai'` providers (Moonshot, DeepSeek, Groq, CherryAI, cherryin, etc.) correctly have PDFs converted to text before sending. - The CherryAI special-case check is removed as it's no longer needed. ### Why we need it and why it was done in this way The following tradeoffs were made: - Removed `'openai'` entirely from the native set rather than adding per-provider ID exceptions, because the actual OpenAI provider uses `type: 'openai-response'` (not `'openai'`), and the vast majority of `type: 'openai'` providers are third-party APIs that don't support `file` parts. - Also removed `'new-api'` and `'gateway'` aggregator types, since these route to various backends — it's safer to convert PDFs to text and let specific backends handle text rather than risk `file` part errors. The following alternatives were considered: - Adding individual provider IDs (like `moonshot`) to a blocklist — rejected as it's whack-a-mole; new OpenAI-compatible providers would keep hitting the same bug. - Keeping `'openai'` in the set and adding more ID-based exceptions — rejected for the same reason. Links to places where the discussion took place: - PR #13641 introduced the `pdfCompatibilityPlugin` with the overly broad provider type set - PR #13777 added the CherryAI special case as a point fix ### Breaking changes None. Providers that previously had PDFs silently fail with 400 errors will now correctly receive extracted text content instead. ### Special notes for your reviewer - The actual OpenAI provider uses `type: 'openai-response'`, which remains in the native set — real OpenAI API users are unaffected. - All existing tests updated to match new behavior. Test suite passes fully (3811 tests). - The `isCherryAI` special case from PR #13777 is removed since CherryAI (`type: 'openai'`) is now naturally handled by the conversion path. ### Checklist - [x] PR: The PR description is expressive enough and will help future contributors - [x] Code: [Write code that humans can understand](https://en.wikiquote.org/wiki/Martin_Fowler#code-for-humans) and [Keep it simple](https://en.wikipedia.org/wiki/KISS_principle) - [x] Refactor: You have [left the code cleaner than you found it (Boy Scout Rule)](https://learning.oreilly.com/library/view/97-things-every/9780596809515/ch08.html) - [x] Upgrade: Impact of this change on upgrade flows was considered and addressed if required - [ ] Documentation: A [user-guide update](https://docs.cherry-ai.com) was considered and is present (link) or not required. Check this only when the PR introduces or changes a user-facing feature or behavior. - [x] Self-review: I have reviewed my own code (e.g., via [`/gh-pr-review`](/.claude/skills/gh-pr-review/SKILL.md), `gh pr diff`, or GitHub UI) before requesting review from others ### Release note ```release-note Fixed PDF file upload failing with "invalid part type: file" error for OpenAI-compatible providers (Moonshot, DeepSeek, Groq, etc.). PDFs are now correctly converted to text for these providers. ``` --------- Signed-off-by: suyao <[email protected]> Co-authored-by: Claude Opus 4.6 <[email protected]> Co-authored-by: Phantom <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 1d5bdfb - Browse repository at this point
Copy the full SHA 1d5bdfbView commit details -
chore: release v1.8.4 (#13824)
<!-- Template from https://github.com/kubevirt/kubevirt/blob/main/.github/PULL_REQUEST_TEMPLATE.md?--> <!-- Thanks for sending a pull request! Here are some tips for you: 1. Consider creating this PR as draft: https://github.com/CherryHQ/cherry-studio/blob/main/CONTRIBUTING.md --> <!--
⚠️ Important: Redux/IndexedDB Data-Changing Feature PRs Temporarily On Hold⚠️ Please note: For our current development cycle, we are not accepting feature Pull Requests that introduce changes to Redux data models or IndexedDB schemas. While we value your contributions, PRs of this nature will be blocked without merge. We welcome all other contributions (bug fixes, perf enhancements, docs, etc.). Thank you! Once version 2.0.0 is released, we will resume reviewing feature PRs. --> ### What this PR does Before this PR: - Version was at 1.8.3 After this PR: - Bumps version to 1.8.4 - Updates release notes with bilingual (English/Chinese) content ### Release Notes Cherry Studio 1.8.4 - Bug Fixes and New Features **English:** - [API] Add knowledge base REST API endpoints - [SelectionAssistant] Add Linux support for text selection toolbar - [Files] Fix PDF upload failing with "invalid part type: file" error for OpenAI-compatible providers (Moonshot, DeepSeek, Groq, etc.) **Chinese:** - [API] 添加知识库 REST API 端点 - [选择助手] 为文本选择工具栏添加 Linux 支持 - [文件] 修复 OpenAI 兼容提供商(Moonshot、DeepSeek、Groq 等)的 PDF 上传失败问题("invalid part type: file" 错误) ### Included Commits 1. fix(aiCore): remove openai-compatible providers from PDF native support list (#13809) 2. feat(api): add knowledge base REST API endpoints (#13762) 3. feat(SelectionAssistant): Linux support (#13720) 4. fix(aiCore): add missing @openrouter/ai-sdk-provider dependency (#13787) (Skipped internal CI/CD changes) ### Review Checklist - [ ] Review generated release notes in `electron-builder.yml` - [ ] Verify version bump in `package.json` - [ ] CI passes - [ ] Merge to trigger release build ### Checklist This checklist is not enforcing, but it's a reminder of items that could be relevant to every PR. Approvers are expected to review this list. - [x] PR: The PR description is expressive enough and will help future contributors - [x] Code: [Write code that humans can understand](https://en.wikiquote.org/wiki/Martin_Fowler#code-for-humans) and [Keep it simple](https://en.wikipedia.org/wiki/KISS_principle) - [x] Refactor: You have [left the code cleaner than you found it (Boy Scout Rule)](https://learning.oreilly.com/library/view/97-things-every/9780596809515/ch08.html) - [x] Upgrade: Impact of this change on upgrade flows was considered and addressed if required - [x] Documentation: A [user-guide update](https://docs.cherry-ai.com) was considered and is present (link) or not required. Check this only when the PR introduces or changes a user-facing feature or behavior. - [x] Self-review: I have reviewed my own code (e.g., via [`/gh-pr-review`](/.claude/skills/gh-pr-review/SKILL.md), `gh pr diff`, or GitHub UI) before requesting review from others ### Release note ```release-note Cherry Studio 1.8.4 - Bug Fixes and New Features ✨ New Features - [API] Add knowledge base REST API endpoints - [SelectionAssistant] Add Linux support for text selection toolbar 🐛 Bug Fixes - [Files] Fix PDF upload failing with "invalid part type: file" error for OpenAI-compatible providers (Moonshot, DeepSeek, Groq, etc.) ``` Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>Configuration menu - View commit details
-
Copy full SHA for 965ba03 - Browse repository at this point
Copy the full SHA 965ba03View commit details
Commits on Mar 27, 2026
-
fix(extension-table-plus): remove reference to non-existent tsconfig.…
…build.json (#13817) Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 7c2610b - Browse repository at this point
Copy the full SHA 7c2610bView commit details -
fix(aiCore): normalize model ID before looking up thinking token limi…
…ts (#13843) ### What this PR does Before this PR: `findTokenLimit()` in `getReasoningEffort()` was called with the raw `model.id`, which may contain provider prefixes or mixed casing (e.g., `openai/qwen3.5-397b-a17b`). This caused token limit lookups to fail, so `effort` was never correctly converted to `thinking_budget` for generic (OpenAI-compatible) providers. After this PR: The model ID is normalized via `getLowerBaseModelName()` before being passed to `findTokenLimit()`, ensuring correct token limit resolution and proper `effort → thinking_budget` conversion. Fixes #13831 ### Why we need it and why it was done in this way The following tradeoffs were made: The normalization is applied early in `getReasoningEffort()` and reuses the existing `getLowerBaseModelName()` utility, which is already used elsewhere in the same file. This is the minimal, consistent fix. The following alternatives were considered: - Modifying `findTokenLimit()` itself to normalize internally — rejected because it would change the contract for all callers, some of which may already pass normalized IDs. ### Breaking changes None. ### Special notes for your reviewer While this fix correctly resolves the token limit lookup, there is a known follow-up concern: for some models (e.g., Qwen3.5), even a correctly computed low `thinking_budget` can paradoxically cause **more** thinking than not passing the parameter at all. See the linked issue discussion for details. See #13844 for tracking improvements to the effort mapping strategy. ### Checklist - [x] PR: The PR description is expressive enough and will help future contributors - [x] Code: [Write code that humans can understand](https://en.wikiquote.org/wiki/Martin_Fowler#code-for-humans) and [Keep it simple](https://en.wikipedia.org/wiki/KISS_principle) - [x] Refactor: You have [left the code cleaner than you found it (Boy Scout Rule)](https://learning.oreilly.com/library/view/97-things-every/9780596809515/ch08.html) - [x] Upgrade: Impact of this change on upgrade flows was considered and addressed if required - [ ] Documentation: A [user-guide update](https://docs.cherry-ai.com) was considered and is present (link) or not required. Check this only when the PR introduces or changes a user-facing feature or behavior. - [ ] Self-review: I have reviewed my own code (e.g., via [`/gh-pr-review`](/.claude/skills/gh-pr-review/SKILL.md), `gh pr diff`, or GitHub UI) before requesting review from others ### Release note ```release-note NONE ``` Signed-off-by: icarus <[email protected]> Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for a9d3a3f - Browse repository at this point
Copy the full SHA a9d3a3fView commit details -
fix: update broken Awesome MCP Servers link (#13847)
## Description Fixes #13827 The "Awesome MCP Servers" link in Settings > MCP Servers > Marketplaces was returning a 404 error. The original repository (punkpeye/awesome-mcp-servers) appears to have been removed or made private. ## Changes Updated the URL to point to wong2/awesome-mcp-servers, which is an active and maintained fork of the original awesome-mcp-servers list. ## Verification - [x] Verified the new URL returns 200 OK - [x] Confirmed the repository contains a curated list of MCP servers - [x] This is a minimal fix that doesn't affect Redux data models or IndexedDB schemas ## Related - Issue: #13827 - Original broken URL: https://github.com/punkpeye/awesome-mcp-servers (404) - New working URL: https://github.com/wong2/awesome-mcp-servers (200) Signed-off-by: Rayan Salhab <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for e1c503e - Browse repository at this point
Copy the full SHA e1c503eView commit details -
fix(ci): add Linux system deps for selection-hook native rebuild (#13855
) ## Summary - Install `libevdev-dev`, `libxtst-dev`, `libx11-dev`, `libxfixes-dev`, and `libwayland-dev` in the Linux release build step so the `selection-hook` native module compiles successfully. ## Test plan - [ ] Trigger a Linux-only release build via `workflow_dispatch` and verify it completes without native module compilation errors. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Signed-off-by: suyao <[email protected]> Co-authored-by: Claude Opus 4.6 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for d31652e - Browse repository at this point
Copy the full SHA d31652eView commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff v1.8.3...v1.8.4