mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-07-08 16:43:59 +08:00
refactor/code-cli
274 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f7ceb47462 |
fix(ci): only trigger release build on PR merge, not on every push (#13512)
### What this PR does Before this PR: The `release.yml` workflow triggers on `pull_request_target` with `opened` and `synchronize` event types. Every commit pushed to a release PR (e.g. editing release notes in `electron-builder.yml`) re-triggers the full 3-platform release build (macOS + Windows + Linux), wasting significant CI resources. After this PR: The workflow only triggers when the release PR is **merged** into `main`, not on every push. This is achieved by: 1. Changing `pull_request_target` types from `opened`/`synchronize` to `closed` 2. Adding `github.event.pull_request.merged == true` to the job condition Fixes # ### Why we need it and why it was done in this way The following tradeoffs were made: - Release builds no longer run during PR review phase. If a pre-merge test build is needed, `workflow_dispatch` can be used manually. The following alternatives were considered: - **Remove `synchronize` only (keep `opened`)**: Would still trigger on PR creation but not subsequent pushes. However, this loses automation on merge. - **Path filtering**: `pull_request_target` doesn't support `paths` filter, would require a separate job to check changed files — more complex for the same result. - **Label-based triggering**: Adds manual steps, defeats automation purpose. ### Breaking changes None. The `tag push` and `workflow_dispatch` triggers remain unchanged. The only behavioral change is that release builds now happen on merge instead of on PR open/push. ### Special notes for your reviewer - The `workflow_dispatch` trigger still allows manual release builds at any time - The `push: tags: v*.*.*` trigger is unaffected - The removed `head.repo.full_name == github.repository` check is redundant since `merged == true` already implies the PR was accepted ### 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: suyao <sy20010504@gmail.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
fe0678a206 |
chore: migrate .claude/skills to directory symlinks (#13486)
### What this PR does Before this PR: `.claude/skills/<name>/SKILL.md` files were **copied** from `.agents/skills/<name>/SKILL.md` via `pnpm skills:sync`. A dedicated `skills-check-windows` CI job ran on `windows-latest` to verify cross-platform file-copy compatibility. After this PR: `.claude/skills/<name>` entries are **directory symlinks** pointing to `../../.agents/skills/<name>`, following the Single Source of Truth (SSoT) principle. The Windows-specific CI job is removed; Windows developers are expected to enable symlink support. ### Why we need it and why it was done in this way The following tradeoffs were made: - Windows developers must now manually enable symlink support (Developer Mode + `git config --global core.symlinks true`). This is acceptable because: 1. The existing `AGENTS.md` is already a symlink, so Windows compatibility was never fully enforced. 2. Symlinks eliminate the need for file-copy synchronization, reducing maintenance complexity. 3. Contributors are expected to have sufficient technical capability to configure their environments. The following alternatives were considered: - Keeping file-copy sync: rejected because it duplicates content and requires extra CI to verify consistency. ### Breaking changes Windows developers who clone without symlink support enabled will get plain text files instead of symlinks. They must: 1. Enable Developer Mode or grant `SeCreateSymbolicLinkPrivilege` 2. Run `git config --global core.symlinks true` 3. Re-clone or run `pnpm skills:sync` ### Special notes for your reviewer - The `.github/workflows/ci.yml` diff includes minor quote-style changes (`'` → `"`) from the YAML formatter — these are cosmetic only. ### 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 - [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. - [ ] 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 <eurfelux@gmail.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
2a92aebc4f |
docs: add DeJeune as code owner for core data paths (#13414)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
2104e234af | Merge 'main' into v2 | ||
|
|
87a8c6a118 |
docs: add DeJeune as v2 data layer code owner (#13412)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
c663a872bb | docs: update issue templates to use type instead of label (#13407) | ||
|
|
ba2cc43e92 |
ci: pin claude-code-action to v1.0.66 in prepare-release (#13229)
### What this PR does Before this PR: The `prepare-release.yml` workflow uses `anthropics/claude-code-action@v1`, which tracks the latest v1 release and may introduce unexpected breaking changes. After this PR: The action is pinned to `anthropics/claude-code-action@v1.0.66` for deterministic CI behavior. ### Why we need it and why it was done in this way The `prepare-release` workflow failed in [this run](https://github.com/CherryHQ/cherry-studio/actions/runs/22706296259/job/65834731056). Pinning to a known-good version (`v1.0.66`) prevents future breakage from upstream action updates. The following tradeoffs were made: N/A The following alternatives were considered: N/A ### Breaking changes None ### Special notes for your reviewer N/A ### Checklist - [x] PR: The PR description is expressive enough and will help future contributors - [x] Code: Write code that humans can understand and Keep it simple - [x] Refactor: You have left the code cleaner than you found it (Boy Scout Rule) - [ ] Upgrade: Impact of this change on upgrade flows was considered and addressed if required - [ ] Documentation: Not required — CI-only change - [x] Self-review: I have reviewed my own code before requesting review from others ```release-note NONE ``` Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
5d369d08cd |
ci(deps): bump actions/upload-artifact from 6 to 7 (#13119)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/upload-artifact/releases">actions/upload-artifact's releases</a>.</em></p> <blockquote> <h2>v7.0.0</h2> <h2>v7 What's new</h2> <h3>Direct Uploads</h3> <p>Adds support for uploading single files directly (unzipped). Callers can set the new <code>archive</code> parameter to <code>false</code> to skip zipping the file during upload. Right now, we only support single files. The action will fail if the glob passed resolves to multiple files. The <code>name</code> parameter is also ignored with this setting. Instead, the name of the artifact will be the name of the uploaded file.</p> <h3>ESM</h3> <p>To support new versions of the <code>@actions/*</code> packages, we've upgraded the package to ESM.</p> <h2>What's Changed</h2> <ul> <li>Add proxy integration test by <a href="https://github.com/Link"><code>@Link</code></a>- in <a href="https://redirect.github.com/actions/upload-artifact/pull/754">actions/upload-artifact#754</a></li> <li>Upgrade the module to ESM and bump dependencies by <a href="https://github.com/danwkennedy"><code>@danwkennedy</code></a> in <a href="https://redirect.github.com/actions/upload-artifact/pull/762">actions/upload-artifact#762</a></li> <li>Support direct file uploads by <a href="https://github.com/danwkennedy"><code>@danwkennedy</code></a> in <a href="https://redirect.github.com/actions/upload-artifact/pull/764">actions/upload-artifact#764</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/Link"><code>@Link</code></a>- made their first contribution in <a href="https://redirect.github.com/actions/upload-artifact/pull/754">actions/upload-artifact#754</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/upload-artifact/compare/v6...v7.0.0">https://github.com/actions/upload-artifact/compare/v6...v7.0.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
076ddd5a09 |
ci(deps): bump actions/github-script from 7 to 8 (#13120)
Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 8. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/github-script/releases">actions/github-script's releases</a>.</em></p> <blockquote> <h2>v8.0.0</h2> <h2>What's Changed</h2> <ul> <li>Update Node.js version support to 24.x by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/637">actions/github-script#637</a></li> <li>README for updating actions/github-script from v7 to v8 by <a href="https://github.com/sneha-krip"><code>@sneha-krip</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/653">actions/github-script#653</a></li> </ul> <h2>⚠️ Minimum Compatible Runner Version</h2> <p><strong>v2.327.1</strong><br /> <a href="https://github.com/actions/runner/releases/tag/v2.327.1">Release Notes</a></p> <p>Make sure your runner is updated to this version or newer to use this release.</p> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/637">actions/github-script#637</a></li> <li><a href="https://github.com/sneha-krip"><code>@sneha-krip</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/653">actions/github-script#653</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/github-script/compare/v7.1.0...v8.0.0">https://github.com/actions/github-script/compare/v7.1.0...v8.0.0</a></p> <h2>v7.1.0</h2> <h2>What's Changed</h2> <ul> <li>Upgrade husky to v9 by <a href="https://github.com/benelan"><code>@benelan</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/482">actions/github-script#482</a></li> <li>Add workflow file for publishing releases to immutable action package by <a href="https://github.com/Jcambass"><code>@Jcambass</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/485">actions/github-script#485</a></li> <li>Upgrade IA Publish by <a href="https://github.com/Jcambass"><code>@Jcambass</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/486">actions/github-script#486</a></li> <li>Fix workflow status badges by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/497">actions/github-script#497</a></li> <li>Update usage of <code>actions/upload-artifact</code> by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/512">actions/github-script#512</a></li> <li>Clear up package name confusion by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/514">actions/github-script#514</a></li> <li>Update dependencies with <code>npm audit fix</code> by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/515">actions/github-script#515</a></li> <li>Specify that the used script is JavaScript by <a href="https://github.com/timotk"><code>@timotk</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/478">actions/github-script#478</a></li> <li>chore: Add Dependabot for NPM and Actions by <a href="https://github.com/nschonni"><code>@nschonni</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/472">actions/github-script#472</a></li> <li>Define <code>permissions</code> in workflows and update actions by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/531">actions/github-script#531</a></li> <li>chore: Add Dependabot for .github/actions/install-dependencies by <a href="https://github.com/nschonni"><code>@nschonni</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/532">actions/github-script#532</a></li> <li>chore: Remove .vscode settings by <a href="https://github.com/nschonni"><code>@nschonni</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/533">actions/github-script#533</a></li> <li>ci: Use github/setup-licensed by <a href="https://github.com/nschonni"><code>@nschonni</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/473">actions/github-script#473</a></li> <li>make octokit instance available as octokit on top of github, to make it easier to seamlessly copy examples from GitHub rest api or octokit documentations by <a href="https://github.com/iamstarkov"><code>@iamstarkov</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/508">actions/github-script#508</a></li> <li>Remove <code>octokit</code> README updates for v7 by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/557">actions/github-script#557</a></li> <li>docs: add "exec" usage examples by <a href="https://github.com/neilime"><code>@neilime</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/546">actions/github-script#546</a></li> <li>Bump ruby/setup-ruby from 1.213.0 to 1.222.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/actions/github-script/pull/563">actions/github-script#563</a></li> <li>Bump ruby/setup-ruby from 1.222.0 to 1.229.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/actions/github-script/pull/575">actions/github-script#575</a></li> <li>Clearly document passing inputs to the <code>script</code> by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/603">actions/github-script#603</a></li> <li>Update README.md by <a href="https://github.com/nebuk89"><code>@nebuk89</code></a> in <a href="https://redirect.github.com/actions/github-script/pull/610">actions/github-script#610</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/benelan"><code>@benelan</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/482">actions/github-script#482</a></li> <li><a href="https://github.com/Jcambass"><code>@Jcambass</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/485">actions/github-script#485</a></li> <li><a href="https://github.com/timotk"><code>@timotk</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/478">actions/github-script#478</a></li> <li><a href="https://github.com/iamstarkov"><code>@iamstarkov</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/508">actions/github-script#508</a></li> <li><a href="https://github.com/neilime"><code>@neilime</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/546">actions/github-script#546</a></li> <li><a href="https://github.com/nebuk89"><code>@nebuk89</code></a> made their first contribution in <a href="https://redirect.github.com/actions/github-script/pull/610">actions/github-script#610</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/github-script/compare/v7...v7.1.0">https://github.com/actions/github-script/compare/v7...v7.1.0</a></p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
c66ecee286 |
fix(ci): prevent edited events from creating skipped CI runs (#13170)
### What this PR does Before this PR: Editing a PR's title or body triggers the `edited` event in the CI workflow. Although job-level `if` conditions skip execution, GitHub still creates a new workflow run with "skipped" status. Since GitHub UI shows the latest run, this hides the real CI results from the previous `opened`/`synchronize` run. After this PR: - Removed `edited` from CI workflow trigger types, so title/body edits no longer create skipped CI runs - Added a lightweight separate workflow (`ci-rerun-on-base-change.yml`) that listens for `edited` events and re-runs the latest CI run only when the PR's base branch is changed Fixes #13150 (follow-up) ### Why we need it and why it was done in this way The following tradeoffs were made: - Splitting into two workflows is slightly more complex than a single workflow, but it completely eliminates the "skipped run covering real results" problem since the re-run workflow has a different workflow name and does not affect the main CI status display The following alternatives were considered: - Simply removing `edited` without a re-run workflow — would lose CI re-trigger on base branch changes, which was a known issue before #13150 - Keeping `edited` with job-level `if` — the current approach that causes the problem we're fixing ### Breaking changes None ### Special notes for your reviewer - The re-run workflow uses `actions/github-script` to call `reRunWorkflow` API, which re-runs the existing CI run in-place rather than creating a new one - The workflow requires `actions: write` permission to trigger re-runs - The `branches` list in the new workflow mirrors the main CI workflow to stay in sync ### Checklist - [x] PR: The PR description is expressive enough and will help future contributors - [x] Code: Write code that humans can understand and Keep it simple - [x] Refactor: You have left the code cleaner than you found it (Boy Scout Rule) - [ ] Upgrade: Impact of this change on upgrade flows was considered and addressed if required - [ ] Documentation: A user-guide update was considered and is present (link) or not required. - [x] Self-review: I have reviewed my own code before requesting review from others ### Release note ```release-note NONE ``` --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
7f24cd0a01 |
fix: move OpenAPI spec generation to build time (#13207)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
b52825761b |
fix(ci): correct node-version-file path in update-app-upgrade-config workflow (#13190)
### What this PR does Before this PR: The `update-app-upgrade-config` workflow fails with `The specified node version file at: .node-version does not exist` on every release. After this PR: The workflow correctly references `main/.node-version` since the default branch is checked out into the `main/` subdirectory. Fixes the failure in https://github.com/CherryHQ/cherry-studio/actions/runs/22653172953 ### Why we need it and why it was done in this way The workflow uses `actions/checkout` with `path: main`, which places the repo contents in a `main/` subdirectory. However, `setup-node` with `node-version-file: '.node-version'` looks in the workspace root where the file doesn't exist. The following tradeoffs were made: N/A The following alternatives were considered: N/A ### Breaking changes None ### Special notes for your reviewer Single-line path fix. Can be verified by re-running the failed workflow after merge. ### 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 ``` Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
8e37615cc3 |
chore: release v1.7.23 (#13180)
### What this PR does This is a release PR for **Cherry Studio v1.7.23**. **Changes included:** - Bump version from 1.7.22 to 1.7.23 - Update release notes with user-facing bug fixes ### Release Notes <!--LANG:en--> Cherry Studio 1.7.23 - Bug Fixes 🐛 Bug Fixes - [Selection] Fix app crash on Windows when closing action window - [MiniApp] Fix settings state synchronization and region filter consistency - [Plugin Browser] Make detail modal text selectable and improve search experience - [Tools] Fix approval card not showing for builtin and provider tools ### Included Commits - fix(Selection): prevent Windows crash when closing transparent action window (#13177) - fix(renderer): synchronize miniapp settings state and respect region filter (#13166) - fix: improve plugin browser UX with three small fixes (#13153) - fix: show approval card for builtin and provider tools (#13154) - fix: support esc to close modal (#13159) - fix: open external editor in new window instead of reusing existing one (#13160) - fix: render directory Select options with optionRender (#13152) - refactor: replace static pnpm patch with postinstall script for claude-agent-sdk (#13139) - feat: add dev-only message data inspection button (#13142) - docs: add review workflow to CLAUDE.md (#13145) - chore(deps): upgrade @uiw/codemirror packages to 4.25.7 (#13149) - fix(ci): skip CI on PR body/title edits, only re-run on base branch changes (#13150) ### Review Checklist - [ ] Review generated release notes in `electron-builder.yml` - [ ] Verify version bump in `package.json` - [ ] CI passes - [ ] Merge to trigger release build ### Release note ```release-note Cherry Studio 1.7.23 - Bug Fixes 🐛 Bug Fixes - [Selection] Fix app crash on Windows when closing action window - [MiniApp] Fix settings state synchronization and region filter consistency - [Plugin Browser] Make detail modal text selectable and improve search experience - [Tools] Fix approval card not showing for builtin and provider tools ``` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: suyao <sy20010504@gmail.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
7f00841d1e |
chore: Improve Claude translator workflow logic and clarity (#13175)
### What this PR does Before this PR: The Claude translator workflow had ambiguous skip conditions. For example, it didn't explicitly state when to skip already-translated or already-English content, and the catch-all rule was vaguely worded as "doesn't need any processing." After this PR: The translator workflow now has clearer, more explicit logic: - Explicitly skips when translated content already matches the original. - Explicitly skips when the content is already in English. - The catch-all rule now reads "doesn't match any of the above cases, skip the task." - Consistent punctuation (semicolons) across all rule items. ### Why we need it and why it was done in this way We noticed that the translator workflow would sometimes unnecessarily re-translate content that was already in English. The root cause was ambiguous skip conditions in the prompt — the workflow lacked an explicit instruction to skip when the content is already English, causing Claude to "translate" English into English redundantly. This PR makes all skip conditions explicit to prevent such unnecessary translations and reduce wasted API calls. The following tradeoffs were made: N/A The following alternatives were considered: N/A ### Breaking changes None. ### Special notes for your reviewer This is a prompt-level change only — no code logic is affected. The workflow behavior should be functionally equivalent but with clearer instructions for the Claude model. ### 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 ``` |
||
|
|
043886943b |
fix(ci): skip CI on PR body/title edits, only re-run on base branch changes (#13150)
### What this PR does Before this PR: The `edited` type on `pull_request` triggers CI on **any** PR edit, including body and title changes. This was introduced in #12847 to re-trigger CI when the base branch changes. After this PR: CI only re-triggers on `edited` events when the **base branch** actually changes (`github.event.changes.base != null`). Editing the PR body or title no longer triggers unnecessary CI runs. ### Why we need it and why it was done in this way The following tradeoffs were made: Using `github.event.changes.base != null` is a lightweight, well-documented GitHub Actions approach that requires no additional API calls or external actions. The following alternatives were considered: - Removing `edited` entirely: Would revert the base-branch-change fix from #12847. - Using a separate workflow with `pull_request_target`: Overly complex for this use case. ### Breaking changes None. ### Special notes for your reviewer - The condition `github.event.action != 'edited' || github.event.changes.base != null` is added to 3 jobs: `changes`, `basic-checks`, and `skills-check-windows`. - `general-test` and `render-test` are indirectly covered via their `needs: changes` dependency — if `changes` is skipped, these jobs are also skipped. - `notify` depends on all upstream jobs, so it is also covered. ### 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 ``` Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
2da1fe167c |
chore: release v1.7.22 (#13128)
### What this PR does Before this PR: This is a release PR for version 1.7.22. After this PR: - Version bumped from 1.7.21 to 1.7.22 - Release notes updated in `electron-builder.yml` ### Included Changes **🐛 Bug Fixes** - [Models] Fix qwen3.5-flash thinking budget configuration by correcting regex typo - [Ollama] Fix reasoning order in stream responses - [Notes] Fix export failure when restoring from cloud backup without opening Notes page first - [Chat] Abort translation API call when closing message translation - [Chat] Disable translate button when message sending is disabled - [Agent] Clear attached files after sending message in agent session input bar - [Export] Filter hidden elements when exporting messages as images - [Settings] Remove extra divider in settings page **🔒 Security** - [MCP] Upgrade @modelcontextprotocol/sdk to 1.27.1 to fix security vulnerability (GHSA-8r9q-7v3j-jr4g) Fixes # ### Why we need it and why it was done in this way This is an automated release PR that collects user-facing bug fixes and a security update since v1.7.21. The following tradeoffs were made: N/A - Release PR The following alternatives were considered: N/A Links to places where the discussion took place: N/A ### Breaking changes None. ### Special notes for your reviewer Please verify: - [ ] Review generated release notes in `electron-builder.yml` - [ ] Verify version bump in `package.json` - [ ] CI passes - [ ] Merge to trigger release build ### 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 Cherry Studio 1.7.22 - Bug Fixes & Improvements Bug Fixes: - [Models] Fix qwen3.5-flash thinking budget configuration by correcting regex typo - [Ollama] Fix reasoning order in stream responses - [Notes] Fix export failure when restoring from cloud backup without opening Notes page first - [Chat] Abort translation API call when closing message translation - [Chat] Disable translate button when message sending is disabled - [Agent] Clear attached files after sending message in agent session input bar - [Export] Filter hidden elements when exporting messages as images - [Settings] Remove extra divider in settings page Security: - [MCP] Upgrade @modelcontextprotocol/sdk to 1.27.1 to fix security vulnerability (GHSA-8r9q-7v3j-jr4g) ``` --------- Co-authored-by: suyao <sy20010504@gmail.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
afa4f4f709 |
Merge remote-tracking branch 'origin/main' into v2
# Conflicts: # src/renderer/src/pages/settings/MCPSettings/McpSettings.tsx |
||
|
|
191e985aaf |
ci(deps): bump actions/download-artifact from 5 to 8 (#13121)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 8. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/download-artifact/releases">actions/download-artifact's releases</a>.</em></p> <blockquote> <h2>v8.0.0</h2> <h2>v8 - What's new</h2> <h3>Direct downloads</h3> <p>To support direct uploads in <code>actions/upload-artifact</code>, the action will no longer attempt to unzip all downloaded files. Instead, the action checks the <code>Content-Type</code> header ahead of unzipping and skips non-zipped files. Callers wishing to download a zipped file as-is can also set the new <code>skip-decompress</code> parameter to <code>false</code>.</p> <h3>Enforced checks (breaking)</h3> <p>A previous release introduced digest checks on the download. If a download hash didn't match the expected hash from the server, the action would log a warning. Callers can now configure the behavior on mismatch with the <code>digest-mismatch</code> parameter. To be secure by default, we are now defaulting the behavior to <code>error</code> which will fail the workflow run.</p> <h3>ESM</h3> <p>To support new versions of the @actions/* packages, we've upgraded the package to ESM.</p> <h2>What's Changed</h2> <ul> <li>Don't attempt to un-zip non-zipped downloads by <a href="https://github.com/danwkennedy"><code>@danwkennedy</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/460">actions/download-artifact#460</a></li> <li>Add a setting to specify what to do on hash mismatch and default it to <code>error</code> by <a href="https://github.com/danwkennedy"><code>@danwkennedy</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/461">actions/download-artifact#461</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/download-artifact/compare/v7...v8.0.0">https://github.com/actions/download-artifact/compare/v7...v8.0.0</a></p> <h2>v7.0.0</h2> <h2>v7 - What's new</h2> <blockquote> <p>[!IMPORTANT] actions/download-artifact@v7 now runs on Node.js 24 (<code>runs.using: node24</code>) and requires a minimum Actions Runner version of 2.327.1. If you are using self-hosted runners, ensure they are updated before upgrading.</p> </blockquote> <h3>Node.js 24</h3> <p>This release updates the runtime to Node.js 24. v6 had preliminary support for Node 24, however this action was by default still running on Node.js 20. Now this action by default will run on Node.js 24.</p> <h2>What's Changed</h2> <ul> <li>Update GHES guidance to include reference to Node 20 version by <a href="https://github.com/patrikpolyak"><code>@patrikpolyak</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/440">actions/download-artifact#440</a></li> <li>Download Artifact Node24 support by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/415">actions/download-artifact#415</a></li> <li>fix: update <code>@actions/artifact</code> to fix Node.js 24 punycode deprecation by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/451">actions/download-artifact#451</a></li> <li>prepare release v7.0.0 for Node.js 24 support by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/452">actions/download-artifact#452</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/patrikpolyak"><code>@patrikpolyak</code></a> made their first contribution in <a href="https://redirect.github.com/actions/download-artifact/pull/440">actions/download-artifact#440</a></li> <li><a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> made their first contribution in <a href="https://redirect.github.com/actions/download-artifact/pull/415">actions/download-artifact#415</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0">https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0</a></p> <h2>v6.0.0</h2> <h2>What's Changed</h2> <p><strong>BREAKING CHANGE:</strong> this update supports Node <code>v24.x</code>. This is not a breaking change per-se but we're treating it as such.</p> <ul> <li>Update README for download-artifact v5 changes by <a href="https://github.com/yacaovsnc"><code>@yacaovsnc</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/417">actions/download-artifact#417</a></li> <li>Update README with artifact extraction details by <a href="https://github.com/yacaovsnc"><code>@yacaovsnc</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/424">actions/download-artifact#424</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
20648a3047 | ci: skip on forks (#13110) | ||
|
|
f668fce4f2 | merge main into v2 | ||
|
|
ef14219a21 |
chore: use node-version-file for CI workflows (#13076)
<!-- 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: - CI workflows hardcoded `node-version: 22` - `.node-version` and `.nvmrc` files were at version 22 After this PR: - All CI workflows read Node version from `.node-version` file using `node-version-file: '.node-version'` - `.node-version` and `.nvmrc` updated to `24.11.1` to match Electron runtime version <!-- (optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: --> Fixes # ### Why we need it and why it was done in this way The project recently updated Node.js requirement to 24.11.1 in package.json, but the CI workflows were still hardcoded to use Node 22, causing warning. This change makes the CI workflows automatically use the Node version defined in `.node-version` file, ensuring consistency between local development and CI environments. The following tradeoffs were made: - Using `.node-version` instead of reading from `package.json` directly - simpler and more compatible with GitHub Actions The following alternatives were considered: Links to places where the discussion took place: <!-- optional: slack, other GH issue, mailinglist, ... --> ### Breaking changes <!-- optional --> If this PR introduces breaking changes, please describe the changes and the impact on users. ### Special notes for your reviewer <!-- optional --> ### 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 <!-- Write your release note: 1. Enter your extended release note in the below block. If the PR requires additional action from users switching to the new release, include the string "action required". 2. If no release note is required, just write "NONE". 3. Only include user-facing changes (new features, bug fixes visible to users, UI changes, behavior changes). For CI, maintenance, internal refactoring, build tooling, or other non-user-facing work, write "NONE". --> ```release-note NONE ``` Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
d7e5c23d00 |
docs: add self-review checklist item to PR template (#13067)
<!-- 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 --> ### What this PR does Before this PR: The PR checklist had no reminder for authors to self-review their code before requesting review. After this PR: A new "Self-review" checklist item reminds PR authors to review their own code using `/gh-pr-review`, `gh pr diff`, or the GitHub UI before requesting review from others. ### Why we need it and why it was done in this way Self-review catches obvious issues before reviewer time is spent, improving review efficiency. The following tradeoffs were made: N/A The following alternatives were considered: N/A Links to places where the discussion took place: N/A ### Breaking changes None ### Special notes for your reviewer The link to `/gh-pr-review` points to the skill definition at `/.claude/skills/gh-pr-review/SKILL.md`. ### 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) - [ ] 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 ``` Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
fe32407a39 |
docs: add user-facing change guidance for release notes and docs checkbox (#13041)
### What this PR does Before this PR: The `gh-create-pr` skill had no guidance on when to write a release note vs `NONE`, or when to check the Documentation checkbox. The PR template also lacked explicit guidance on release note scope. After this PR: - A lookup table is added to the skill so the model can match change types to the correct release note and documentation checkbox behavior. - The PR template is updated to clarify that only user-facing changes belong in release notes, and the documentation checkbox should only be checked for user-facing features/behavior changes. ### Why we need it and why it was done in this way The following tradeoffs were made: A concise example table was chosen over verbose text rules, following the "concise examples over verbose explanations" principle from the skill-creator guide. This makes it easier for the model to pattern-match rather than reason about abstract rules. The following alternatives were considered: - Separate detailed text descriptions for release note and documentation rules — rejected as harder for the model to follow consistently. - Keeping guidance only in the skill without updating the PR template — rejected to keep both in sync for human contributors as well. ### Breaking changes None. ### Special notes for your reviewer This is a docs/config-only change. No application code is affected. ### Checklist - [x] PR: The PR description is expressive enough and will help future contributors - [ ] 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) - [ ] 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) - [ ] 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. ### Release note ```release-note NONE ``` Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
6fa53a7a56 |
ci: add PR description check workflow (#13035)
<!-- 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 --> ### What this PR does Before this PR: There is no automated check to ensure PR authors fill in the required sections of the PR template. PRs can be submitted with empty or default-only descriptions. After this PR: A GitHub Actions workflow automatically validates that PR descriptions include actual content in the required sections (`What this PR does`, `Why we need it`, `release-note`). It also reminds authors to review their description when new commits are pushed. <!-- (optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: --> Fixes # ### Why we need it and why it was done in this way The PR template exists to maintain quality and consistency in contributions, but without automated enforcement, authors may forget or skip filling it in. This workflow provides immediate feedback via check status and comments. The implementation uses `actions/github-script@v7` with inline JavaScript to keep everything in a single file without external dependencies. HTML comment markers (`<!-- pr-description-check -->`, `<!-- pr-sync-reminder -->`) are used to track and update bot comments, avoiding duplicate noise. The following tradeoffs were made: - Inline script vs. external action: chose inline to minimize maintenance overhead and keep the logic visible in one place. The following alternatives were considered: - A dedicated GitHub App or external action for template checking — rejected as overkill for this scope. ### Breaking changes N/A ### Special notes for your reviewer - The workflow runs on `opened`, `edited`, `synchronize`, and `ready_for_review` events for branches `main`, `develop`, and `v2`, matching the existing `ci.yml` pattern. - Draft PRs are skipped. - The `notify-sync` job only runs on `synchronize` events and shows the latest 3 commit messages. ### 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) - [ ] 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. You want a user-guide update if it's a user facing feature. ### Release note ```release-note NONE ``` --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
847ecfe947 |
ci: skip tests when PR has no code changes (#13034)
### What this PR does Before this PR: All three CI matrix tasks (`basic-checks`, `general-test`, `render-test`) ran on every PR regardless of what files changed. After this PR: - Tests are skipped on PRs that only modify non-code files (e.g., docs, CI configs, markdown). `basic-checks` (lint, format, typecheck, i18n, skills) always runs. - `general-test` and `render-test` are split into independent jobs with granular path filters: - `src/main/**`, `src/preload/**`, `scripts/**` → only triggers `general-test` - `src/renderer/**` → only triggers `render-test` - `packages/**`, `tests/**`, config/dependency files → triggers both ### Why we need it and why it was done in this way Non-code PRs (documentation updates, CI workflow changes, maintenance files) do not need test suites to run, saving CI minutes and reducing feedback latency. Granular filtering further reduces waste — a renderer-only change no longer waits for main process tests and vice versa. The following tradeoffs were made: - Tests always run on `push` to `main` and `workflow_dispatch` for safety, even if the change is non-code. - `packages/**` changes trigger both test jobs since packages may be consumed by either process. The following alternatives were considered: - Using `paths` / `paths-ignore` on the workflow trigger level, but that would skip the entire workflow including `basic-checks`. - Keeping a single `tests` matrix job, but separate jobs allow job-level `if` conditions for independent skipping and clearer GitHub UI feedback. ### Breaking changes None. ### Special notes for your reviewer - Uses `dorny/paths-filter@v3` for change detection with three filter groups: `main`, `renderer`, `shared`. - The `changes` job is lightweight (checkout + filter only, no `pnpm install`). - The `notify` job dependencies updated from `[ci, skills-check-windows]` to `[basic-checks, general-test, render-test, skills-check-windows]`. - `tests/**` is included in the `shared` filter so test-only PRs still trigger test jobs. ### 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. You want a user-guide update if it's a user facing feature. ### Release note ```release-note NONE ``` --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
a030bd9895 |
fix: correct claude_args format for prepare-release workflow (#13012)
### What this PR does Fixes the `claude_args` format in the prepare-release workflow. Before this PR: ```yaml claude_args: '--allowed-tools Bash(git:*),Bash(gh pr create:*),Bash(gh pr view:*),Bash(cat:*),Edit,Read,Write,Glob,Grep' ``` After this PR: ```yaml claude_args: '--allowed-tools "Bash(git:*),Bash(gh pr create:*),Bash(gh pr view:*),Bash(cat:*),Edit,Read,Write,Glob,Grep"' ``` Reference: https://code.claude.com/docs/en/cli-reference#cli-flags ### Why we need it and why it was done in this way The original format without quotes was not being parsed correctly by Claude Code Action. The YAML string was being interpreted incorrectly, causing the subtool patterns to be lost. Adding quotes around the entire tools list ensures proper parsing. The following tradeoffs were made: - Using comma-separated format (both comma and space are supported per docs) The following alternatives were considered: - Using space-separated format (also valid but keeping original comma style) ### Breaking changes None. ### Special notes for your reviewer This fix enables the prepare-release workflow to successfully execute `git push` and `gh pr create` commands. The workflow ran successfully but the git operations were being silently skipped due to permission format issues. ### Checklist - [x] PR: The PR description is expressive enough and will help future contributors - [x] Code: Write code that humans can understand and Keep it simple - [x] Refactor: You have left the code cleaner than you found it - [x] Upgrade: Impact of this change on upgrade flows was considered and addressed if required - [x] Documentation: A user-guide update was considered and is present (link) or not required ### Release note ```release-note NONE ``` --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
b8e12a2455 |
feat: Add agent skills (create-skill, gh-create-issue) and improve existing skill workflow (#13004)
<!-- 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: - No skill existed for creating new agent skills (multi-agent shared skills) - No skill existed for creating GitHub issues with templates - gh-create-pr skill had an incomplete workflow After this PR: - Added `create-skill` skill for scaffolding new skills following `.agents/skills/README.md` workflow - Added `gh-create-issue` skill for creating GitHub issues following repository's issue template format - Updated `prepare-release` workflow to use `gh-create-pr` skill instead of manual PR creation - Updated `gh-create-pr` skill with improved workflow: - Check and push branch to remote before creating PR - Determine base branch (support official repo and fork scenarios) - Create temp file first, then preview - Show temp file path in preview for user reference - Support skipping preview/confirmation when user explicitly indicates (e.g., automation workflows) ### Why we need it and why it was done in this way The following tradeoffs were made: - Created skills follow the existing skill structure and naming conventions - Skills support skipping preview/confirmation for automation workflows - Updated prepare-release workflow to use skills consistently - Temp file workflow allows users to edit content directly before confirmation The following alternatives were considered: - Manual PR/issue creation without skill automation Links to places where the discussion took place: <!-- optional: slack, other GH issue, mailinglist, ... --> N/A ### Breaking changes <!-- optional --> None ### Special notes for your reviewer <!-- optional --> N/A ### 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. You want a user-guide update if it's a user facing feature. ### Release note <!-- Write your release note: 1. Enter your extended release note in the below block. If the PR requires additional action from users switching to the new release, include the string "action required". 2. If no release note is required, just write "NONE". --> ```release-note NONE ``` |
||
|
|
0989f9b820 |
feat(ci): add prepare-release skill for automated release workflow (#12958)
<!-- 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: Releases had to be prepared manually — collecting commits, writing bilingual release notes, updating version files, creating branches and PRs by hand. After this PR: A new `prepare-release` skill automates the entire release workflow: commit collection, bilingual release note generation, version file updates, and release branch/PR creation. It can be invoked interactively via `/prepare-release` or automatically via a `workflow_dispatch` GitHub Actions workflow. <!-- (optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: --> Fixes # N/A ### Why we need it and why it was done in this way The following tradeoffs were made: The skill is duplicated in both `.agents/skills/` and `.claude/skills/` to support both project-level and user-level skill discovery. The GitHub Actions workflow uses `claude-code-action` to run the skill in CI, skipping the interactive confirmation step since the user explicitly triggers it via `workflow_dispatch`. The following alternatives were considered: A shell script was considered but would lack the flexibility of AI-driven commit categorization and bilingual release note generation. Links to places where the discussion took place: N/A ### Breaking changes <!-- optional --> None. ### Special notes for your reviewer <!-- optional --> - The skill delegates PR creation to the `gh-create-pr` skill (or its SKILL.md fallback) per CLAUDE.md requirements. - The `workflow_dispatch` trigger already requires repository write access, so no additional permission restrictions were added. - The two SKILL.md files (`.agents/skills/` and `.claude/skills/`) should be kept in sync. ### 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) - [ ] 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. You want a user-guide update if it's a user facing feature. ### Release note <!-- Write your release note: 1. Enter your extended release note in the below block. If the PR requires additional action from users switching to the new release, include the string "action required". 2. If no release note is required, just write "NONE". --> ```release-note NONE ``` --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
e61e1bb672 |
feat: Optimize PR workflow with on-demand skill loading and project-level skills management (#12943)
### What this PR does Before this PR: - CLAUDE.md contained detailed PR workflow instructions that were loaded in every agent session, consuming unnecessary tokens - No unified project-level skills management mechanism; adding public skills lacked standardization - No automated checks to prevent non-compliant skills from being merged - Team members had no convenient way to share skills with each other After this PR: - Simplified PR instructions in CLAUDE.md, now loaded on-demand via the `gh-create-pr` skill - Introduced project-level skills management (`.agents/skills/` directory + `public-skills.txt` whitelist) - Added `scripts/skills-sync.ts` and `scripts/skills-check.ts` for automated management - Integrated skills validation into CI to prevent non-whitelisted skills from being merged - **Teams can now easily share skills through the project-level mechanism**, with `skills-sync.ts` automatically syncing skills to all team members' local environments, streamlining onboarding and avoiding duplicated configuration efforts - **Optimized PR creation workflow**: `gh-create-pr` skill enforces English PR body writing and displays the draft to users for review before creation, ensuring quality and compliance Fixes # ### Why we need it and why it was done in this way The following tradeoffs were made: - Moved PR workflow from CLAUDE.md to a skill, sacrificing immediate visibility for token efficiency - **Introduced whitelist mechanism (`public-skills.txt`) instead of auto-scanning all files**: Allows developers to freely use private project-level skills in the `.agents/skills/` directory (e.g., team-internal skills, personal customizations). Only skills added to the whitelist are tracked by git and submitted. This ensures standardization for shared skills while preserving development flexibility - Skills exist in both `.agents/skills/` (project-level, shareable) and `.claude/skills/` (local, private) - **Symlink only SKILL.md files instead of entire directories**: On some Windows/restricted filesystems, symlinks may fail or be treated as regular files. If an entire directory is symlinked, failure results in a regular file instead of a directory, causing complete skill failure that's hard to diagnose. Symlinking only SKILL.md allows quick detection when symlinks fail (file content displays directly or errors), reducing troubleshooting costs The following alternatives were considered: - Keeping PR instructions in CLAUDE.md with collapsible blocks, but this still consumes context tokens - Using git hooks for pre-commit checks, but CI checks are more reliable and don't block local development Links to places where the discussion took place: N/A ### Breaking changes None ### Special notes for your reviewer - `gh-create-pr` skill fully implements the project's PR workflow requirements (read template → display body → confirm → create) - `skills-check.ts` validates: 1) tracked skills are in the whitelist; 2) whitelist skills have corresponding files - Process for adding new public skills: 1) create skill files; 2) add to `public-skills.txt`; 3) CI auto-validation - `.claude/skills/` added to `.gitignore` for private skills ### 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 is present (link) or not required. You want a user-guide update if it's a user facing feature. - [ ] Documentation: A user-guide update was considered and is present (link) or not required. You want a user-guide update if it's a user facing feature. ### Release note ```release-note Optimize PR workflow by moving instructions to on-demand skill; introduce project-level skills management with automated validation ``` |
||
|
|
ca7c85139d |
feat: change auto-i18n workflow to run daily instead of weekly (#12899)
### What this PR does Before this PR: - Auto i18n workflow runs weekly on Sundays at 00:00 UTC - Workflow name was "Auto I18N Weekly" After this PR: - Auto i18n workflow runs daily at 00:00 UTC - Workflow name is "Auto I18N Daily" ### Why we need it and why it was done in this way The following tradeoffs were made: - More frequent syncs mean more PR noise, but translations stay more up-to-date The following alternatives were considered: - Keeping weekly schedule: translations may lag behind source changes - Running on weekdays only: skipped in favor of daily for simplicity ### Breaking changes None ### Special notes for your reviewer None ### 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 - [x] Documentation: A [user-guide update](https://docs.cherry-ai.com) was considered and is present (link) or not required. You want a user-guide update if it's a user facing feature. ### Release note ```release-note Change auto-i18n workflow schedule from weekly to daily for more frequent translation synchronization. ``` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
f9fab3df8a |
chore: remove obsolete delete-branch workflow from GitHub Actions
This commit deletes the `delete-branch.yml` workflow file, which was responsible for automatically deleting merged branches. The removal is part of a cleanup effort to streamline CI/CD processes and eliminate unused configurations. |
||
|
|
b2e572aa14 |
ci: split CI into matrix and add notifier job (#12864)
### What this PR does Before this PR: - CI ran as a single build job serially, missing shared project tests and sending notifications from the same job. After this PR: - Split CI into a parallel matrix that runs lint, typecheck, and targeted test tasks (test-main, test-renderer, test-other). - Added a test script for the shared project. - Added a separate notifier job that runs on CI failure (on pushes to main) to send Feishu notifications with a prepared environment. Fixes # ### Why we need it and why it was done in this way - Reduce total CI runtime by running independent checks in parallel via a matrix. - Improve failure visibility and reliability of notifications by isolating notification logic in its own job. - Ensure shared project tests are executed as part of CI. ### Breaking changes - None ### Special notes for your reviewer - The notifier runs only on CI failure for pushes to main. |
||
|
|
6bf5356d1b | Merge main into v2 | ||
|
|
4e64c433cc |
ci: trigger release build on PR from release branches (#12876)
### What this PR does Before this PR: - Release builds are only triggered when pushing tags (v*.*.*) After this PR: - Release builds can also be triggered when creating/updating PRs from `release/v*` branches to `main` - This allows testing release builds before tagging ### Why we need it and why it was done in this way This change enables the team to: 1. Create a `release/vX.X.X` branch and open a PR to `main` 2. Automatically trigger release builds for testing 3. Download and test the build artifacts before officially tagging and releasing The following tradeoffs were made: - Added conditional logic to distinguish between PR builds and tag builds - Version is extracted from branch name for PR builds (e.g., `release/v1.0.0` → `v1.0.0`) ### Breaking changes None. Tag-based releases continue to work as before. ### Checklist - [x] PR: The PR description is expressive enough and will help future contributors - [x] Code: Write code that humans can understand and Keep it simple ### Release note ```release-note NONE ``` |
||
|
|
b4f2e31c98 |
fix(ci): trigger CI when PR base branch is changed (#12847)
* fix(ci): trigger CI when PR base branch is changed Add `edited` event type to the pull_request trigger so that CI runs when a PR's base branch is switched, preventing unverified commits from being merged into main. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: Reorder imports in KnowledgeVideos component --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
072dd67a87 | merge main into v2 | ||
|
|
7b985bf474 |
ci: run CI on main branch push (#12738)
* ci: run CI on main branch push and rename workflow - Rename pr-ci.yml to ci.yml - Rename workflow from "Pull Request CI" to "CI" - Add push trigger for main branch - Rename PRCI env variable to CI - Fix if condition to support push/workflow_dispatch events Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * ci: add Feishu notification on main branch CI failure Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(tests): add ipcRenderer.invoke mock to renderer setup - Updated the renderer setup test file to include a mock for ipcRenderer.invoke, resolving it to undefined for improved test reliability. --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: kangfenmao <kangfenmao@qq.com> |
||
|
|
5fa5861ba0 |
ci(deps): bump actions/cache from 4 to 5 (#12668)
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/cache dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
285455d79d |
ci(deps): bump actions/upload-artifact from 5 to 6 (#12669)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
481bf6daa3 |
Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2
# Conflicts: # package.json # pnpm-lock.yaml # src/main/services/WindowService.ts # src/main/utils/language.ts # src/renderer/src/components/RichEditor/extensions/code-block-shiki/CodeBlockNodeView.tsx # src/renderer/src/components/__tests__/__snapshots__/InputEmbeddingDimension.test.tsx.snap # src/renderer/src/hooks/useMinappPopup.ts # src/renderer/src/hooks/useMinapps.ts # src/renderer/src/pages/home/Messages/Tools/MessageMcpTool.tsx # src/renderer/src/pages/home/Tabs/components/AddButton.tsx # src/renderer/src/pages/home/Tabs/components/AgentItem.tsx # src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx # src/renderer/src/pages/minapps/MiniappSettings/MiniAppSettings.tsx # src/renderer/src/pages/paintings/components/DynamicFormRender.tsx # src/renderer/src/pages/paintings/components/ImageUploader.tsx # src/renderer/src/pages/settings/DocProcessSettings/PreprocessProviderSettings.tsx # src/renderer/src/pages/settings/MCPSettings/McpPrompt.tsx # src/renderer/src/pages/settings/MCPSettings/McpTool.tsx # src/renderer/src/pages/settings/MCPSettings/index.tsx # src/renderer/src/services/messageStreaming/callbacks/toolCallbacks.ts # src/renderer/src/windows/selection/action/components/ActionTranslate.tsx |
||
|
|
dd73d3d309 |
feat(release): add platform input for release workflow and adjust OS matrix based on input
- Introduced a new input parameter 'platform' to specify the build platform (all, windows, mac, linux). - Updated the job strategy matrix to dynamically select OS based on the provided platform input, enhancing flexibility in the release process. |
||
|
|
5c013cdb63 |
feat(i18n): add hardcoded string detection script and CI check (#12547)
* feat(i18n): clean hardcoded ui string add ci * fix(i18n): update snap * fix: test * fix(i18n): update plurals * chore: revert other branch change * refactor: use ast detect hardcoded string * chore: typo error * feat(i18n): add webview app * chore(i18n): update i18n * fix: pr comment * chore: distinguish label and labelKey * refactor: align v2 desgin |
||
|
|
ad37f0991a | merge main into v2 | ||
|
|
864eda68fb |
ci(workflows): fix pnpm installation and improve issue tracker (#12388)
* ci(workflows): add pnpm caching to improve build performance Cache pnpm dependencies to reduce installation time in CI workflows * ci(github-actions): change claude-code-action version to v1 * ci(workflows): improve issue tracker formatting Format issue body as markdown code block for better readability in workflow output * ci(workflows): unify claude-code-action version to v1 for both jobs Changed process-pending-issues job from @main to @v1 to maintain consistency across all jobs and avoid potential version conflicts. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix(workflows): remove --help from allowed-tools to avoid upstream parsing bug The `--help` flags in claude_args were being incorrectly parsed as actual command-line arguments by claude-code-action, causing JSON parsing errors ("Unexpected identifier 'Usage'"). Switched to wildcard pattern `pnpm tsx scripts/feishu-notify.ts*` which: - Allows all feishu-notify.ts commands including --help - Avoids triggering the upstream argument parsing bug - Simplifies the allowed-tools configuration This addresses the root cause identified by Anthropic engineers. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix(workflows): remove --help references from prompts Remove `--help` references from prompts to avoid potential parsing issues. The example commands are already comprehensive enough without needing to mention the help flag. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> |
||
|
|
76cc196667 |
ci(workflows): add Feishu notification for workflow failures (#12375)
* ci(workflows): add feishu notification for failed sync jobs Add Feishu webhook notification when sync-to-gitcode workflow fails or is cancelled. The notification includes tag name, status and run URL for quick debugging. * ci(workflow): add feishu notification for failed or cancelled jobs |
||
|
|
2a1722bb52 | fix(workflows): add pnpm installing and caching (#12374) | ||
|
|
43a48a4a38 |
feat(scripts): migrate feishu-notify to TypeScript CLI tool with subcommands (#12371)
* build: add commander package as dependency * refactor(scripts): migrate feishu-notify to TypeScript with CLI interface - Convert JavaScript implementation to TypeScript with proper type definitions - Add CLI interface using commander for better usability - Improve error handling and input validation - Add version management and subcommand support * ci(workflows): update feishu notification command and add pnpm install step Update the feishu notification command to use CLI tool with proper arguments instead of direct node script execution Add pnpm install step to ensure dependencies are available before running the workflow * docs: add feishu notification script documentation Add Chinese and English documentation for the feishu-notify.ts CLI tool * feat(notify): add generic send command to feishu-notify Add a new 'send' subcommand to send simple notifications to Feishu with customizable title, description and header color. This provides a more flexible way to send notifications without being tied to specific business logic like the existing 'issue' command. The implementation includes: - New send command handler and options interface - Simple card creation function - Zod schema for header color validation - Documentation updates in both Chinese and English |
||
|
|
1d07e89e38 | fix: remove blockmap handling after differentialPackage disabled (#12351) | ||
|
|
cd778f3574 | Merge branch 'main' of github.com:CherryHQ/cherry-studio into v2 | ||
|
|
8d56bf80dd |
chore: update GitHub Actions workflow to enable corepack for pnpm installation
Replaced the pnpm action setup with a corepack enable command to streamline dependency management in the workflow. |