Skip to content

v2.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 10 Nov 11:56
7292b81

Downloads (v2.2.0)

Platform Architecture Download
Windows x64 Installer · Portable
Windows arm64 Installer · Portable
macOS Apple silicon (arm64) DMG · ZIP
macOS Intel (x64) DMG · ZIP
Linux x64 AppImage · DEB · RPM
Linux arm64 AppImage · DEB · RPM
Release Notes

Cherry Studio 2.2.0 - Skill Marketplace, Notifications, and Agent Runtime

✨ New Features

  • [Marketplace] Browse skill catalogs, external skill sources, Agent templates, and MCP resources in one Marketplace, with guided installation and focused MCP and skill management.
  • [Notifications] A new notification drawer beside the sidebar gathers task results and official announcements, with unread indicators, reply previews, and announcements shown in your language.
  • [Scheduled Tasks] Scheduled tasks now have a dedicated sidebar page with task conversations, paginated run history, and management for completed or missed tasks. The duplicate Settings page was removed.
  • [Cherry Cloud] Subscription usage and monthly quotas appear in Settings and the account panel, with plan badges, subscribe entry points, a quota notice above the input, and a notice when a subscription becomes active.
  • [Selection Assistant] Ask Agent and agent-bound actions open a dedicated agent window for the selected text. Windows can collapse into capsules, follow auto-close rules, and continue the session in the main window.
  • [Agent] New agents default to the Pi Durable runtime, which persists sessions natively and streams background subagents independently. Sessions can fork at completed checkpoints while keeping independent state.
  • [Agent] View and edit agent memory from Agent configuration.
  • [Agent] Session details show grouped subagents, task progress, and context usage in a compact card.
  • [Agent] Edit and resend now replaces the message and removes everything after it without creating another history version. Files are not restored; fork first to keep the original conversation.
  • [Chat] Click the branch counter on a message to jump between alternate replies, with previews in the switcher.
  • [Chat] Generated images offer Use as Reference for models that accept image input.
  • [Paintings] GPT Image 2.6 Flare and Sunburst support scene complexity and animated GIF output, and ComfyUI workflows can use attached input images.
  • [Models] Added LongCat 2.5 and Hunyuan 4 with image input, plus reasoning-effort controls for Qwen 3.8 Flash Next.
  • [Files] Copy a file or folder itself to the system clipboard from the Agent file pane.
  • [Notes] Save selected conversation text to Notes, and reference Notes from the chat input with @.
  • [Translate] Copy a completed translation as a full-length PNG image.
  • [Export] Export MCP server configurations as JSON and export multiple assistants as one file.
  • [Skills] Choose which managed skills are exported to ~/.agents/skills for external agents.
  • [Shortcuts] Number shortcuts switch conversations and tabs, and new shortcuts switch assistants and topics; all can be customized in Settings.
  • [Conversations] Permanently delete conversations from list, More, and History menus, and delete owners from list and group menus, after a confirmation that names the item.
  • [Markdown] Bare image URLs in responses now render as inline images.
  • [Mini Apps] The catalog has new creative and productivity sites, and the More menu can restart a MiniApp.
  • [HTML Artifact] Copy an HTML artifact's source from its inline source toolbar.

💄 Improvements

  • [Chat] Regenerate is available below user messages and uses the currently selected model.
  • [Chat] Conversation anchors appear from the first turn; the separate side navigation toolbar was retired in favor of the bottom arrow.
  • [Agent] Context usage reports runtime capacity, estimated categories, and resources consistently across runtimes, including subagents.
  • [Agent] Switching permission mode while a task runs applies to its next tool call instead of waiting for the next message.
  • [Agent] Plan and Goal modes are available as explicit Quick Panel actions, and unsupported history actions are disabled.
  • [UI] Context-menu shortcuts render as compact keycaps, resize handles use neutral colors, and clipped letter descenders are fixed.
  • [File Preview] Word previews fit the pane, and more file types show proper icons and labels.
  • [Models] Qwen AI Platform and Qwen Cloud branding, links, and default API endpoints are updated. Qwen Token Plan keys now work with image generation.
  • [Claude] The runtime download banner displays correctly and the runtime is named Claude.
  • [Settings] Resetting a customized provider API host asks for confirmation.
  • [About] Simplified product information with a Star button, email contact, and bottom-docked DevTools.
  • [Web Search] A warning now names the provider that actually ran a search when it falls back.

🐛 Bug Fixes

  • [Chat] Edited messages update immediately in the open conversation.
  • [Chat] Sending a message no longer recreates existing history, and code blocks show readable source before highlighting.
  • [Chat] Images below a provider's minimum edge are padded instead of aborting the request.
  • [Chat] Returning to the bottom animates smoothly, and bottom-follow resumes after resend.
  • [Chat] The manual composer height survives typing and pasting.
  • [Chat] A knowledge-base instruction prompt no longer leaks into the input after returning from Settings.
  • [Agent] Sessions no longer stay busy after a pending connection fails during close, and interrupted subagents show as stopped.
  • [Agent] Background continuations stay in the existing reply, and reasoning tokens are reported correctly in usage.
  • [Agent] Stopping a task on Windows now ends its child processes.
  • [Agent] move_to_trash and save_attachment work inside managed workspaces and report the real failure reason.
  • [Agent] The built-in delete guard no longer blocks harmless text that mentions deletion.
  • [Agent] Tool approval cards are retired when their runtime disappears instead of leaving the conversation stuck.
  • [Models] Prompt caching works for Claude models on AWS Bedrock.
  • [Models] OpenAI and Azure OpenAI Responses tools no longer treat optional arguments as required.
  • [Models] Ollama Agent requests work again after tool calls.
  • [MCP] Parameterless MCP tools work with strict providers, and installing an existing MCP server reuses its definition.
  • [Providers] Errors caused by unsupported parameters no longer claim the model was retired; invalid inline images are reported as rejected requests.
  • [Providers] OpenRouter reranking models are discovered correctly, and Mistral tool-call streams no longer fail when an ID is missing.
  • [Notes] Full-text search lists matching lines and jumps to them again, and toolbar formatting applies before the editor takes focus.
  • [Editor] Inline math no longer replaces adjacent text, and multi-line LaTeX environments stay intact.
  • [Settings] Fallback model pickers warn when configured models are unavailable.
  • [Knowledge] Invalid knowledge-base URLs are rejected before saving.
  • [Local Models] Model cards explain when the shared runtime is missing, and the FunASR INT8 decoder was replaced.
  • [Dictation] The speech-recognition model requirement is now surfaced.
  • [Tabs] Pinned-tab state persists, and archived items no longer stay disabled after a tab switch.
  • [Right Panel] Topic drag-and-drop sorting works again.
  • [Browser] Bare IPv6 loopback addresses are accepted.
  • [File Editor] A UTF-8 BOM no longer drops following content.
  • [Security] Provider API keys are no longer written to logs or diagnostic bundles.
  • [Windows] Close-to-tray now actually hides the main window.
  • [Selection Assistant] The Windows Snipping Tool is excluded from selection retrieval.
  • [Computer Use] Unconfirmed runtime cleanup can be recovered without restarting Cherry Studio.
  • [Claude] Claude Code installs on Windows ARM64, and Linux shows guidance instead of launching without a session bus.
  • [Tesseract] OCR loads its engine in packaged builds.
  • [Agent] Remember the session details card's last open or closed state across all sessions and app restarts.
  • [Agent] Fixed Claude Code (login) agents on macOS failing with "Not logged in · Please run /login" even after logging in with claude /login.
  • [Subscription] The China edition now picks up subscription changes once the server's notification service comes online, without restarting the app.
  • [Subscription] The China edition shows subscription changes (activation, renewal, expiry and more) in the notification center.
  • [Workspace] Consistent icon colors and sizing, clearer Chinese agent labels and settings, restored tooltip contrast, and smoother tabs, pane resizing, conversation shortcuts, and notifications
  • [API Gateway] Preserve agent instructions, tool schemas, and cache hints when forwarding requests, and prevent unintended tool execution or retries inside the gateway.
  • [UI] Restore popup close animations, correct prompt and memory editor sizing and styling, and prevent stale actions or drafts when reopening dialogs.
  • [Agents] Enable PowerShell commands for Pi and Pi Durable on Windows without requiring Git Bash.
  • [Settings] Group built-in tools in a secondary settings menu and move interface language selection to a dedicated Language section in General.
  • [Agents] Pi and Pi Durable subagents now default to bypass permissions, avoiding ordinary tool approval prompts. No action required.
  • [Navigation] Restore sidebar settings on Windows and other non-macOS platforms, and in macOS fullscreen; show the session-details tooltip below its button after a hover delay.

⚡ Performance

  • [Chat] Preparing large text attachments no longer blocks the interface.
  • [Agent] Large session lists update more smoothly.

What's Changed

  • docs(resource-list): propose event-time reads for conversation lists by @kovsu in #23206
  • refactor(pi-runtime): bind native Pi providers to the internal gateway by @MyPrototypeWhat in #21436
  • chore(release): sync v2.1.10 metadata by @kangfenmao in #23252
  • fix(local-model): use compatible FunASR INT8 decoder by @DeJeune in #23243
  • feat(analytics): report desktop package edition by @kangfenmao in #23234
  • fix(chat-message-outline): keep the outline rail above the composer band by @cherry-coding[bot] in #23195
  • Drop empty-name dynamic tools from message replay by @404-Page-Found with @Copilot in #23233
  • feat(about-settings): streamline About, feedback and DevTools by @kangfenmao in #23208
  • fix(pi-runtime): omit store for Google OpenAI-compatible endpoints by @cherry-coding[bot] in #23274
  • ci(deps): bump actions/setup-node from 6 to 7 by @dependabot[bot] in #23285
  • ci(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #23286
  • ci(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #23287
  • fix(provider): accept Bedrock tool-use starts without input (patch 4.0.96) by @cherry-coding[bot] in #23350
  • refactor(resource-list): keep list helpers in one module by @kovsu in #23357
  • refactor(renderer-helpers): remove duplicated notes and health-check helpers by @kovsu in #23356
  • refactor(assistant-mutations): keep one mutation hook for assistants by @kovsu in #23355
  • refactor(renderer): remove residual v1 types chain by @kovsu in #23353
  • perf(resource-list): keep list actions stable across host handlers by @kovsu in #23352
  • docs(artifact-pane): propose removing the test-only wrapper by @kovsu in #23358
  • fix(web-search): tell the user when a search falls back to another provider by @cherry-coding[bot] in #23342
  • feat(agent-runtime): add native session observation and context extensions by @MyPrototypeWhat in #21437
  • feat(agent-runtime): add todo and user-question extensions on native sessions by @MyPrototypeWhat in #21438
  • docs(website-docs): propose bidirectional content synchronization by @kangfenmao in #23201
  • feat(website-docs): add bidirectional synchronization and local preview by @kangfenmao in #23204
  • feat(agent-runtime): run foreground subagents with native session forks by @MyPrototypeWhat in #21578
  • feat(agent-runtime): persist goals and verify native session context by @MyPrototypeWhat in #21607
  • fix(api-gateway): omit the strict tool field for non-Responses targets by @cherry-coding[bot] in #23382
  • chore: version packages by @github-actions[bot] in #23388
  • fix(provider): derive the DashScope image host from the configured chat base URL by @cherry-coding[bot] in #23381
  • fix(rich-editor): keep inline math input from replacing adjacent text by @cherry-coding[bot] in #23372
  • feat(agent-runtime): continue background subagents from native storage by @MyPrototypeWhat in #21693
  • fix(pi-runtime): omit store for custom chat-completions routes by @cherry-coding[bot] in #23337
  • docs(agent-behavior): propose the harness-neutral agent behavior package by @MyPrototypeWhat in #21995
  • feat(agent-behavior): add the harness-neutral agent behavior package (rule core, ports, orchestration, fake harness) by @MyPrototypeWhat in #21996
  • feat(agent-runtime-pi): implement the agent-behavior harness ports on coding-agent by @MyPrototypeWhat in #22014
  • fix(file-editor): keep the caret inside the active line highlight by @kovsu in #23391
  • feat(composer): reference Notes from @ mentions by @louisfy in #20196
  • refactor(artifact-pane): remove the test-only wrapper by @kovsu in #23390
  • perf(agent-sessions): re-render only the changed session row by @kovsu in #23389
  • feat(agent-runtime): correlate owned child inputs and terminal responses by @DeJeune in #22010
  • fix(windows-tests): make the full test suite portable by @DeJeune in #20309
  • fix(e2e-regression): isolate the launched app's HOME so CLI tests stop rewriting real credentials by @cherry-qa[bot] in #23118
  • Restore automatic retries for failed channel startups by @404-Page-Found with @Copilot in #23385
  • docs(resource-list): drop owned group menus from the conversation list Spec by @kovsu in #23404
  • fix(virtual-list): keep group headers pinned during scrolling by @ousugo in #23327
  • fix(anthropic-cache): keep cache_control breakpoints within Anthropic's limit by @cherry-coding[bot] in #23407
  • feat(models): support LongCat 2.5 by @ousugo in #23425
  • fix(anthropic-cache): count only serialized breakpoints and keep TTL order by @cherry-coding[bot] in #23418
  • fix(tool-schema): opt Responses tools out of default strict mode by @pczhao1210 in #23415
  • feat(skills): allow per-skill exports to ~/.agents/skills by @radianceded in #20356
  • Fix Ollama Agent tool-call history serialization by @404-Page-Found with @Copilot in #23394
  • Expose Qwen 3.8 Flash Next effort controls for compatible providers by @404-Page-Found with @Copilot in #23393
  • chore: version packages by @github-actions[bot] in #23437
  • fix(browser): enable CDP Runtime on demand so pages cannot detect the console by @cherry-coding[bot] in #23436
  • chore(patches): remove orphaned yarn-era patch files by @kovsu in #23433
  • test(rich-editor): avoid background highlighting in line lookup fixture by @DeJeune in #23445
  • fix(binary-manager): keep uv's build cache off spaced macOS paths by @cherry-coding[bot] in #23448
  • feat(agent-runtime): persist native contexts and submission facts by @DeJeune in #22071
  • test(e2e): regression harness with the 56 cases passing on macOS and Windows by @cherry-qa[bot] in #23427
  • feat(agent-session): retain edited message branches by @DeJeune in #22077
  • fix(chat): return the viewport to bottom-follow after an accepted resend by @cherry-coding[bot] in #23456
  • perf(channel-stream): coalesce live channel updates before sanitizing by @kovsu in #23460
  • feat(export): restore MCP JSON export and add batch assistant export by @cherry-coding[bot] in #23465
  • docs(main-dependencies): propose bundling main-process JavaScript dependencies Spec by @kovsu in #23464
  • feat(file-pane): copy the file itself to the OS clipboard by @cherry-coding[bot] in #23477
  • fix(messages): drop router dependencies from message navigation by @EurFelux in #22981
  • feat(selection-assistant): add agent bindings and explicit runners to selection actions by @EurFelux in #22990
  • feat(selection-assistant): open agent actions in a selection agent window by @EurFelux in #23065
  • feat(selection-assistant): apply state rules and draft hand-off to the selection agent window by @EurFelux in #23089
  • feat(selection-assistant): collapse started agent windows into capsules by @EurFelux in #23097
  • feat(selection-assistant): collapse agent windows from the macOS yellow light by @EurFelux in #23158
  • feat(pi-runtime): integrate shared behavior with desktop sessions by @DeJeune in #22107
  • fix(move-to-trash): let managed agent workspaces reach the trash by @cherry-coding[bot] in #23492
  • fix(tab-bar): keep title descenders visible by @DeJeune in #23526
  • perf(main-dependencies): bundle document-parsing packages into the main build by @kovsu in #23527
  • fix(data-api): redact credentials in request-logger debug output by @404-Page-Found with @Copilot in #23512
  • feat(agent): add an in-app memory viewer and editor by @linktao159357 in #23008
  • feat(mini-app): add restart action to More menu by @HappyAny in #19649
  • feat(agent-session): persist and stream independent Pi child conversations by @DeJeune in #22689
  • fix(openrouter): discover reranking models and rerank through its provider by @cherry-coding[bot] in #23471
  • fix(i18n): say unlink instead of delete in the Russian prompt-binding tooltip by @cherry-coding[bot] in #23296
  • feat(reasoning): replay edited signed thinking as text by @JuLuogo in #23472
  • fix(error-category): stop reading deprecated parameters as retired models by @cherry-coding[bot] in #23314
  • fix(api-gateway): continue internal Agent requests after settled tool tails by @cherry-coding[bot] in #23470
  • fix(rich-editor): deliver user format commands before focus arrives by @cherry-coding[bot] in #23462
  • feat(composer): localize builtin slash command descriptions by @cherry-coding[bot] in #23410
  • fix(openclaw): treat schema stderr warnings as diagnostics, not incompatibility by @cherry-coding[bot] in #23489
  • fix(chat): keep conversation anchors visible in narrow message columns by @cherry-coding[bot] in #23412
  • refactor(agent-sessions): move Sessions into a feature folder by @kovsu in #23413
  • fix(selection-assistant): exclude Windows system screenshot hosts by @cherry-coding[bot] in #23335
  • refactor(ai-stream): share desktop message projections by @DeJeune in #22698
  • fix(code-cli): keep provider row actions usable without hover input by @cherry-coding[bot] in #23511
  • refactor(native-integrations): relocate selection panel and system speech by @DeJeune in #23537
  • docs(website-docs): align content before enabling synchronization by @cherry-docs-sync[bot] in #23544
  • fix(scroll-area): unify application scrolling and stabilize sidebar spacing by @DeJeune in #23515
  • chore: version packages by @github-actions[bot] in #23546
  • feat(pi-durable): integrate shared behavior with desktop sessions by @DeJeune in #22755
  • perf(main-dependencies): bundle channel and remote-access packages into the main build by @kovsu in #23530
  • perf(main-dependencies): bundle media and system packages into the main build by @kovsu in #23533
  • feat(mini-apps): refresh catalog entries using shared SVG icons by @WhiteZeek in #21553
  • perf(main-dependencies): bundle the agent SDKs, drop stale packaging rules, fix the Tesseract core by @kovsu in #23536
  • fix(main-window): hide the window on Windows close-to-tray (#23487) by @cherry-coding[bot] in #23539
  • chore(claude-code): upgrade SDK to 0.3.311 and define runtime migration by @DeJeune in #22766
  • fix(ai-params): strip top-k from fixed-sampling Claude requests by @MasterZRC in #23547
  • feat(agent-runtime-claude-code): add native thread access and observation by @DeJeune in #22809
  • fix(agent-edit-dialog): hide Skills tab for sealed built-in agents by @404-Page-Found with @Copilot in #23542
  • chore(electron): upgrade to 45.2.2 and better-sqlite3 13.0.3 by @DeJeune in #23548
  • test(e2e-regression): expand desktop coverage and harden cross-platform runs by @cherry-qa[bot] in #22618
  • fix(voice): surface the speech-recognition model requirement for dictation by @cherry-coding[bot] in #23567
  • fix(right-panel): open shortcut tooltips below the top toolbar by @cherry-coding[bot] in #23573
  • fix(page-header): keep title descenders visible by @DeJeune in #23607
  • fix(general-settings): surface unavailable fallback models in settings by @404-Page-Found in #20925
  • refactor(topics): move Topics into a feature folder by @kovsu in #23589
  • docs(export): clarify citation-exclusion setting also applies to Word export by @404-Page-Found with @Copilot in #23581
  • fix(feishu-channel): stay silent when the mention policy rejects a message by @cherry-coding[bot] in #23590
  • fix(mcp): reuse an existing MCP server definition on install by @cherry-coding[bot] in #23614
  • docs(notification-center): propose drawer and task result redesign by @WhiteZeek in #23054
  • fix(cache): avoid Electron downloads in service tests by @DeJeune in #23632
  • fix(agent-memory): move editor into agent configuration by @DeJeune in #23633
  • fix(agent-messages): resume bottom follow after sending by @MasterZRC in #23559
  • fix(agent-memory): remove unused description translations by @DeJeune in #23637
  • fix(file-preview): complete desktop file icon and label mappings by @LWWZH in #23624
  • refactor(agent-session-context): remove test-only context helpers by @kovsu in #23641
  • feat(provider-registry): add GPT Image 2.6 Flare and Sunburst by @ousugo in #23648
  • chore: version packages by @github-actions[bot] in #23650
  • refactor(agent-session-context): drop discarded ancestry read in reserveBranchTx by @kovsu in #23658
  • refactor(agent-session-message): read the native path in one query by @kovsu in #23656
  • fix(chat-navigation): show anchors immediately and retire side buttons by @DeJeune in #23655
  • fix(preference-tests): separate cold import from per-test setup by @DeJeune in #23659
  • fix(shortcut): resolve character shortcuts from the produced character by @cherry-coding[bot] in #22648
  • perf(agent-session-message): project only token columns from context rows by @kovsu in #23642
  • fix(registry-sync): keep GPT Image 2.6 models in legacy catalogs by @ousugo in #23687
  • feat(message-anchor): add keyboard and screen-reader navigation to the turn rail by @404-Page-Found with @Copilot in #23692
  • feat(shortcuts): add hotkeys to switch assistants and topics by @404-Page-Found with @Copilot in #23682
  • feat(markdown): render bare network image URLs as inline images by @404-Page-Found with @Copilot in #23681
  • fix(claude-code): kill the whole process tree when stopping an Agent task on Windows by @404-Page-Found with @Copilot in #23103
  • feat(sidebar): add Ctrl/Cmd+1–9 shortcuts to open sidebar items by @404-Page-Found with @Copilot in #23689
  • feat(notification-center): add unified left drawer and announcement refresh by @WhiteZeek in #23060
  • feat(task-notifications): show compact outcomes and reply previews by @WhiteZeek in #23061
  • feat(notification-center): add localized announcements and account menu access by @kangfenmao in #23668
  • fix(e2e-regression): stabilize phase cleanup and remaining regressions by @cherry-qa[bot] in #23428
  • fix(notes): restore jump-to-line from full-text search matches by @kovsu in #23732
  • fix(anthropic-cache): send Bedrock cache points for Claude models by @Haarris in #23726
  • chore(deps): upgrade eslint-plugin-react-hooks to 7.1.1 by @kovsu in #23735
  • perf(renderer-hooks): keep Effect Events out of effect dependencies by @kovsu in #23736
  • perf(remote-access): stop idle timers while remote access is unused by @kovsu in #23733
  • fix(lifecycle): stop tracking cleanup functions disposed before stop by @kovsu in #23734
  • refactor(home-page): remove unused SHOW_ASSISTANTS manual-open event by @kovsu in #23738
  • fix(main-dependencies): ship ai and zod once and drop packaging leftovers by @kovsu in #23743
  • fix(thinking): stop replaying blank Anthropic thinking blocks by @cherry-coding[bot] in #23744
  • fix(shortcut): make ESC exit-fullscreen respect IME composition and fullscreen state by @cherry-coding[bot] in #23664
  • fix(chat): pad image attachments below the provider minimum edge by @cherry-coding[bot] in #23757
  • fix(e2e): restore the app.shell UI contract anchor on the main-window roots by @cherry-coding[bot] in #23759
  • docs(skills): propose skill labels and grouped bulk assignment in the agent skill selector by @cherry-coding[bot] in #22958
  • refactor(agent-runtime): unify desktop execution and message projections by @DeJeune in #22856
  • docs(agent-context): define harness-owned context usage by @DeJeune in #23146
  • feat(agent-runtime): unify passive thread context usage by @DeJeune in #23164
  • perf(agent-session-message): read the edit path once per snapshot by @kovsu in #23653
  • perf(child-thread-projection): index alias reverse lookup once per history load by @kovsu in #23652
  • perf(child-thread-projection): avoid full-row read and quadratic scans in archive reorder by @kovsu in #23651
  • fix(pi-durable): report interrupted subagents as stopped by @kovsu in #23631
  • perf(ai-stream): project topic messages per flushed batch by @kovsu in #23630
  • fix(registry-sync): hide GPT Image 2.6 GIF in legacy catalogs by @ousugo in #23765
  • fix(agent-runtime): isolate observation deliveries by @DeJeune in #23767
  • feat(provider-registry): add Hy4 to Tencent and TokenHub by @Contentment003111 in #23535
  • feat(qwen-provider): update branding, links and default endpoints by @shigzz in #23704
  • chore: version packages by @github-actions[bot] in #23769
  • docs(agent-notes): propose a conversation target for IM channels by @cherry-coding[bot] in #23768
  • refactor(agent-runtime-pi-durable): resolve child relations from native records by @DeJeune in #23772
  • fix(registry-sync): filter unsupported GPT Image 2.6 legacy controls by @ousugo in #23771
  • fix(error-category): classify invalid inline image payloads as bad_request, not rate_limit by @404-Page-Found with @Copilot in #23719
  • fix(agent-runtime): reuse native SDK types and helpers by @DeJeune in #23780
  • fix(shortcuts): unify numbered conversation and tab navigation by @DeJeune in #23778
  • fix(ai-stream): name the failed stage and log the cause when a response stream dies by @cherry-coding[bot] in #23752
  • refactor(agent-session): unify thread projection message storage by @DeJeune in #23783
  • fix(provider-error): name the cause of unprocessable successful responses by @cherry-coding[bot] in #23762
  • fix(file-processing): downscale oversized images before Windows system OCR by @404-Page-Found with @Copilot in #23711
  • feat(translate): copy translated output as an image by @louisfy in #23698
  • fix(assistant-files): make move_to_trash and save_attachment usable by @NatsUIJM in #23598
  • fix(api-gateway): require content on Anthropic message entries by @cherry-coding[bot] in #23643
  • docs(chat-markdown): specify consecutive code block tabs by @DeJeune in #23181
  • docs(spec): propose illustrations within assistant replies by @leezehuan in #23551
  • docs(remote-access): propose client-owned P2P transport by @DeJeune in #23636
  • docs(mcp-skills): propose client protocol integration by @DeJeune in #22350
  • docs(agent-notes): propose Spec for clear conversation context on explicit request by @William20100221 in #23329
  • fix(file-edit): preserve content following a UTF-8 BOM by @yunyv in #22699
  • fix(webview-address): normalize bare IPv6 loopback hosts by @yunyv in #23309
  • fix(citations): preserve Unicode at X preview truncation boundary by @yunyv in #23106
  • fix(html-artifact): preserve multiline preview titles by @yunyv in #22697
  • fix(render): keep loading state when a metadata request is superseded by @HHHSL in #21539
  • fix(serializable): preserve shared non-circular references by @yunyv in #22923
  • fix(resource-catalog): keep the create wizard draft across tab switches by @cherry-coding[bot] in #23302
  • fix(api-gateway): surface classified 504 on upstream idle timeout instead of an opaque 500 by @xxiaoxiong in #22080
  • fix(error-diagnosis): classify provider content-filter rejections as content by @cherry-coding[bot] in #22351
  • fix(mcp-npx-search): inspect all README server entries for npx samples by @yunyv in #23219
  • fix(paintings): restore terminal state for cached image generations by @felixren7 in #22707
  • feat(html-artifact): add copy-source action to the inline source toolbar by @cherry-coding[bot] in #23180
  • fix(composer): restore live tokens when rebuilding content with an empty draft seed by @Leeeeizz in #23457
  • fix(quick-panel): avoid backtracking when filtering prompts by @yunyv in #23080
  • feat(provider-settings): confirm before resetting the provider API host by @cherry-coding[bot] in #23071
  • fix(archive): name the job record blocking permanent deletion by @cherry-coding[bot] in #23070
  • feat(selection): save selected conversation text to Notes by @louisfy in #23453
  • fix(tabs): keep pinned-tab persistence at a fixed point by @cherry-coding[bot] in #22774
  • fix(archive): release batch busy state across tab switches by @ousugo in #23224
  • feat(messages): make the branch counter a direct branch switcher by @404-Page-Found with @Copilot in #23720
  • feat(agent-composer): typing-triggered Plan Mode hint by @404-Page-Found with @Copilot in #23774
  • Fix drag-and-drop sorting for topics in right panel by @404-Page-Found in #23779
  • docs(provider-registry): propose Fortytwo built-in provider by @obantysh in #23635
  • fix(discord-channel): request online presence on the gateway IDENTIFY by @cherry-coding[bot] in #23812
  • fix(tooltip): swap light and dark mode neutral colors by @DeJeune in #23828
  • i18n(skill-import): clarify folder drag and drop support in drop hint by @LWWZH in #23839
  • docs(agents): propose agent-scoped IM channel binding entry points by @404-Page-Found in #23859
  • docs(agent-notes): propose agent work directory recovery spec by @404-Page-Found in #23860
  • fix(remote-access): keep identity key-store access off the gateway activation path by @cherry-coding[bot] in #23827
  • refactor(renderer): unify app-route url parsing behind parseAppRouteUrl by @404-Page-Found with @Copilot in #23691
  • fix(scroll-area): restore thumb width and rounded ends by @kangfenmao in #23876
  • fix(translate): repair image capture theme fixture in CI by @DeJeune in #23883
  • fix(selection-toolbar): size the toolbar window with its own zoom by @cherry-coding[bot] in #23502
  • Fix non-streaming paths to align with streaming model resolution by @404-Page-Found in #23793
  • chore: version packages by @github-actions[bot] in #23885
  • Dispose of issue #23059 by updating BinaryManager by @404-Page-Found in #23781
  • fix(mistral): tolerate chat-completions tool-call deltas without an id by @cherry-coding[bot] in #23747
  • fix(agent-runtime): preserve request controls through the gateway by @DeJeune in #23878
  • fix(markdown): keep \begin{env} LaTeX blocks intact when a line is only = or --- by @404-Page-Found with @Copilot in #23541
  • fix(file-preview): fit Word previews to the pane and drop the grey mat by @angri450 in #23122
  • Support input images in ComfyUI workflows by @404-Page-Found with @Copilot in #23270
  • fix(preference): isolate subscription tests from real Electron by @DeJeune in #23887
  • fix(validation): include UI theme contracts for renderer changes by @EurFelux in #23879
  • docs(scheduled-tasks): specify dedicated task page and interactions by @WhiteZeek in #23207
  • feat(scheduled-tasks): filter task pages and paginate run history by @WhiteZeek in #23220
  • feat(scheduled-tasks): resolve and retain task conversations by @WhiteZeek in #23221
  • feat(scheduled-tasks): add dedicated task conversation page by @WhiteZeek in #23222
  • refactor(scheduled-tasks): retire duplicate settings page by @WhiteZeek in #23725
  • feat(scheduled-tasks): migrate completed and missed task management by @kangfenmao in #23877
  • chore: version packages by @github-actions[bot] in #23894
  • chore(deps): drop unused workspace package dependencies by @kovsu in #23893
  • feat(scheduler): frame scheduled task triggers as agent executions by @404-Page-Found in #23851
  • feat(cherry-cloud): enable subscription surfaces in the China edition by @SiinXu in #22937
  • fix(packaging): trim Claude binaries, use ULFO and polish download status by @kangfenmao in #23895
  • feat(cherry-cloud): add subscribe touchpoints to the selector and sidebar by @SiinXu in #22938
  • chore: version packages by @github-actions[bot] in #23896
  • feat(cherry-cloud): announce a newly active subscription by @SiinXu in #22939
  • feat(composer): show a quota notice above the input by @SiinXu in #22940
  • feat(cherry-cloud): show monthly usage in settings and the account panel by @SiinXu in #22941
  • feat(cherry-cloud): follow China-edition subscription notifications by @SiinXu in #23316
  • feat(cherry-cloud): add subscription usage insights by @SiinXu in #23405
  • Fix stale external-store values in hidden tabs by @404-Page-Found with @Copilot in #23854
  • fix(chat): decouple fold-view reply browsing from context selection by @Doekin in #23889
  • Restore regenerate action below user messages by @404-Page-Found with @Copilot in #23862
  • fix(messages): Honor auto-collapse in Agent reasoning history by @404-Page-Found with @Copilot in #23863
  • Show missing shared runtime status on local model cards by @404-Page-Found with @Copilot in #23837
  • feat(file-processing): upgrade doc2x processor to v3-2026 with structured layout support by @XueHua-s in #23831
  • fix(mcp): normalize input schema for parameterless MCP tools by @404-Page-Found in #23821
  • chore(openai): upgrade image adapter within AI SDK 6 by @ousugo in #23678
  • docs(paintings): specify GPT Image 2.6 complexity and animation by @ousugo in #23702
  • feat(paintings): add GPT Image 2.6 complexity and animation by @ousugo in #23684
  • chore: version packages by @github-actions[bot] in #23908
  • refactor(cherry-cloud): converge subscription ownership and refresh contracts by @DeJeune in #23906
  • feat(agent-details): add compact session details card by @DeJeune in #23899
  • fix(message-branches): show previews in branch switcher by @DeJeune in #23910
  • fix(message-branches): restore main CI with supported focus event by @DeJeune in #23911
  • fix(resize-handle): use neutral interaction colors by @DeJeune in #23912
  • fix(computer-use): let the user recover from unconfirmed runtime cleanup by @DeJeune in #23913
  • Initialize OpenAI Responses reasoning parts before deltas by @404-Page-Found with @Copilot in #23816
  • chore(pi-runtime): upgrade Pi dependencies to 1.5.0 by @DeJeune in #23915
  • fix(computer-use): upgrade runtime and expose input channel by @DeJeune in #23918
  • fix(agent-runtime): preserve failures and unblock Durable shutdown by @DeJeune in #23919
  • feat: add “Use as Reference” to generated chat images by @404-Page-Found with @Copilot in #23847
  • fix(agent-subagent): temporarily disable chat continuation by @DeJeune in #23921
  • fix(agent-history): align native history actions and explicit mode controls by @DeJeune in #23904
  • fix(agent-session): show workspace open shortcut in target menu by @DeJeune in #23922
  • test(agent-right-pane): restore main CI command mock by @DeJeune in #23923
  • fix(agent-sessions): show pin and archive actions on hover by @DeJeune in #23926
  • fix(chat-attachments): keep text preparation off the main thread by @DeJeune in #23927
  • fix(agent-runtime): preserve response identity and context freshness by @DeJeune in #23925
  • refactor(scheduled-tasks): unify session ownership in migration 0035 by @DeJeune in #23924
  • test(ci-validation): restore main CI worker isolation and session checks by @DeJeune in #23928
  • test(claude-runtime): enable native idle events in desktop fixture by @DeJeune in #23929
  • fix(tool-approval): retire approval cards whose runtime is gone by @NatsUIJM in #23754
  • fix(builtin-agent): match the delete guard on executable commands by @NatsUIJM in #23597
  • feat(resource-list): restore direct permanent deletion by @SiinXu in #21837
  • feat(command-focus): scope keyboard routing and menu origins by @DeJeune in #23917
  • fix(context-menu): render shortcuts as keycaps by @DeJeune in #23940
  • docs(skill-marketplace): define discovery and installation contract by @WhiteZeek in #23800
  • feat(skill-marketplace): add skill catalogs, agent templates and MCP discovery by @WhiteZeek in #20978
  • fix(agent-creation): default to Pi Durable and hide runtime configuration by @DeJeune in #23937
  • fix(agent-sessions): hide status icons while shortcut hints show by @DeJeune in #23941
  • docs(command): specify renderer command target routing by @DeJeune in #23934
  • docs(agent-runtime-acp): specify stable v1 adapter by @DeJeune in #23916
  • fix(agent-session): keep background continuations in existing replies by @DeJeune in #23943
  • Fix regenerate to use the selected model by @404-Page-Found with @Copilot in #23865
  • fix(chat-messages): preserve history and paint code before highlighting by @DeJeune in #23947
  • fix(desktop-runtime): address product regressions exposed by e2e by @kangfenmao in #23870
  • test(agent-session): align approval projection response assertion by @DeJeune in #23955
  • fix(command-focus): prevent update loops and improve error fallback by @kangfenmao in #23960
  • Align generate_image reference limits with Paintings by @404-Page-Found with @Copilot in #23374
  • Reject invalid knowledge-base URLs before saving by @404-Page-Found with @Copilot in #23366
  • Close the main window with Cmd+W on the last tab by @404-Page-Found with @Copilot in #23282
  • fix(message-list): animate shared return to bottom by @DeJeune in #23965
  • fix(command-focus): keep scope attachments stable across rerenders by @DeJeune in #23957
  • test(knowledge): assert legacy URLs through the restore schema by @404-Page-Found in #23969
  • fix(agent-session): release session when a pending connect fails during close by @kovsu in #23974
  • feat(pi-durable): support shared-backend desktop forks by @DeJeune in #23956
  • fix(tool-approval): notify onAborted when an approval's signal aborts by @kovsu in #23976
  • fix(ci): skip prek binary downloads in CI by @kangfenmao in #23982
  • feat(pi-durable): support edit and resend by @DeJeune in #23983
  • fix(website-links): update official website and documentation domains by @kangfenmao in #23973
  • fix(composer): keep the manual input height through paste and typing by @cherry-coding[bot] in #23970
  • refactor(tool-approval): unify pending approval cancellation by @DeJeune in #23984
  • feat(agent-runtime): apply permission-mode switches to the running turn by @1lck in #23971
  • fix(agent-session): replace edited tails without history versions by @DeJeune in #23989
  • fix(pi-durable): keep reasoning tokens in turn usage metadata by @kovsu in #23985
  • refactor(pi-runtime): share child task publishing between Pi and Durable by @kovsu in #23986
  • fix(marketplace): unify scrolling and MCP management by @kangfenmao in #23975
  • fix(chat): refresh rendered message list after editing a message by @404-Page-Found with @Copilot in #23518
  • fix(ci): restore marketplace main checks by @DeJeune in #23994
  • Fail fast when Claude Code lacks a Linux session bus by @404-Page-Found with @Copilot in #23380
  • fix(agent-details): backport shared card visibility to v2.2.0 by @DeJeune in #24027
  • fix(release): backport #24030 to v2.2.0 by @kangfenmao in #24032
  • fix(release): backport #24035 to v2.2.0 by @kangfenmao in #24039
  • fix(release): backport #24036 to v2.2.0 by @kangfenmao in #24040
  • fix(release): backport #24041 to v2.2.0 by @kangfenmao in #24050
  • fix(release): backport #24037 to v2.2.0 by @kangfenmao in #24052
  • fix(release): backport #24081 to v2.2.0 by @kangfenmao in #24095
  • fix(release): backport #24113 to v2.2.0 by @kangfenmao in #24121
  • fix(settings): backport tools and language layout to v2.2.0 by @kangfenmao in #24120
  • fix(release): backport #24124 to v2.2.0 by @kangfenmao in #24128
  • fix(release): backport #24123 to v2.2.0 by @kangfenmao in #24131

New Contributors

Full Changelog: v2.1.10...v2.2.0