What's Changed
- fix(chat-markdown): repair literal autolinks that swallow emphasis markers by @tommyzhang100504 in #19136
- fix: resolve spell check real-time highlighting and multi-language issues by @LWWZH in #14634
- fix(agent): polish subagent flow and running status by @ousugo in #19309
- perf(cli): parallelize independent config pipelines by @userInner in #19284
- fix(app): register the portable Windows launcher at login by @userInner in #19285
- fix(skills): refine skill icon styling by @SiinXu in #18421
- docs(cherry-electron-dev): expand performance diagnostics by @DeJeune in #18458
- fix(web-search): anchor relative dates to runtime by @userInner in #19304
- docs(cherry-electron-dev): fix broken diagnostics link by @DeJeune in #19354
- fix(sortable): prevent nested inputs from starting keyboard drag by @AtomsH4 in #19344
- fix(chat): preserve rapid message navigation targets by @ousugo in #19189
- perf(backup): parallelize device metadata reads by @userInner in #19282
- perf(agent): stabilize system prompt prefix by @userInner in #19297
- feat(scheduled-tasks): show run status on task cards by @AtomsH4 in #18522
- fix(mini-app): clean up orphaned tab pool state by @kovsu in #16788
- fix(api): expose cached tokens in chat completions by @userInner in #19353
- fix(analytics): track app launch once per startup by @kovsu in #16670
- perf(translate,shiki): pace markdown renders and move one-shot highlights to the worker by @GeorgeDong32 in #18926
- fix(provider-registry): route MiniMax M3 agents through Anthropic Messages by @AtomsH4 in #19361
- fix(claude-code): block image reads for text-only models by @iris-Neko in #19366
- fix(ai-provider): tolerate missing annotations in OpenAI Responses replies by @DeJeune in #19365
- fix(artifact-pane): pad composer inset inside code surfaces by @kovsu in #19372
- fix(selection-assistant): keep custom action footer visible by @userInner in #19373
- fix(composer): decouple link chip color from user theme by @tommyzhang100504 in #19378
- fix(analytics): update SDK and filter token usage reports by @kangfenmao in #19352
- fix(mini-app): realign tab pool current state from consistent snapshots by @kovsu in #19375
- fix(google-provider): send includeServerSideToolInvocations conditionally for Gemini 3 tool combination by @tommyzhang100504 in #19364
- feat(model-drawer): add token limit presets by @ousugo in #19384
- fix(binary-manager): repair incomplete DSH installs by @Totoro-qaq in #19374
- fix(assistant-settings): name custom parameter value inputs by @userInner in #19168
- fix(quick-panel): filter submenu panels from the composer input by @DeJeune in #18065
- docs(gh-pr-review): architecture-first review with size-adaptive no-prompt flow by @DeJeune in #17348
- fix: keep dragged tabs within safe bounds by @kovsu in #15529
- perf(chat): lazy-load agent tool renderer (#19331) by @yunyv in #19342
- fix(chat-messages): always show token usage in the message footer by @DeJeune in #19416
- fix(moonshot): omit fixed top_p for Kimi models by @userInner in #19431
- feat(code-mate): add Hermes dashboard by @vaayne in #19049
- fix(nutstore): clean up abandoned SSO listeners by @userInner in #19433
- fix(binary-manager): support npm lifecycle allowlists by @MyPrototypeWhat in #19462
- fix(code-mate): normalize sidebar icon sizing by @kangfenmao in #19458
- perf(data-settings): lazy-load inactive panels (#19333) by @yunyv in #19343
- fix(error-classifier): narrow bare proxy keyword by @SiinXu in #18922
- fix: map system prompt to instructions field for OpenAI Responses API by @Raymond8196 in #16056
- fix(copilot): preserve required request headers by @kennyzheng-builds in #19473
- build(release): standardize platform asset filenames by @userInner in #19429
- fix(pi-runtime): upgrade pi-ai to 0.80.6 for compaction output budget by @userInner in #19457
- fix(tab-router): cover outgoing page during external retargets by @kovsu in #19470
- fix(pi-runtime): route provider requests through Cherry fetch by @userInner in #18781
- fix(chat): stabilize keyboard scrolling in message list by @ousugo in #19417
- fix(chat): keep token details closed after locating message by @ousugo in #19483
- feat(export): carry multimodal images in markdown export by @GeorgeDong32 in #18632
- fix(chat): stabilize streaming UI and message interactions by @kangfenmao in #19443
- fix(artifact-pane): wrap long lines in preview edit mode by @SiinXu in #19542
- fix(web-search): accept SearXNG engines tagged general only by @SiinXu in #19497
- fix(notes): preserve math formulas in plain-text copy by @kennyzheng-builds in #19468
- fix(native-rebuild): invalidate stale Electron metadata by @zhibisora in #19482
- perf(composer-tools): preserve dependency-scoped registrations by @DeJeune in #19413
- feat(ui): render ECharts diagrams in markdown code blocks by @kkjzio in #18881
- fix(appearance): name the list position controls for assistive technology by @kennyzheng-builds in #19540
- fix(chat): localize meta-tool card section titles and empty states by @SiinXu in #19524
- fix(app-updater): hide raw 503 bodies in check-for-update errors by @SiinXu in #19545
- feat(artifact-pane): add context menu to opened file header by @LWWZH in #19151
- fix(model-selector): handle structured queries and missing limits by @eeee0717 in #19553
- fix(messages): restore legacy tool step ordering by @userInner in #19523
- feat(chat): improve token usage visibility by @kangfenmao in #19543
- perf(files): hydrate only the visible view by @userInner in #19528
- fix(aicore): forward proxy fetch for azure-anthropic variant by @404-Page-Found in #19538
- fix(usage-settings): cap dashboard content width on ultrawide windows by @SiinXu in #19558
- fix(agent): expose managed toolchain to Pi Bash by @userInner in #19428
- fix(model-selector): show provider names consistently by @ousugo in #19522
- fix(chat): honor current model on regenerate by @userInner in #19532
- fix(agent): deliver DSH tool rejection feedback by @userInner in #19505
- refactor(http): merge request headers case-insensitively by @DeJeune in #19480
- fix(pi): surface max-token length truncation as error instead of success by @404-Page-Found in #19571
- fix(about-settings): name GitHub and logo controls for assistive tech by @SiinXu in #19466
- fix(claude-code): handle HuggingFace models and sanitize tool descriptions by @404-Page-Found in #19539
- fix(provider-registry): support GLM-5.3-Flash reasoning by @DeJeune in #19554
- feat(web-search): add Parallel search provider by @ousugo in #19469
- fix(moonshot): omit fixed temperature and top_p for all Kimi models by @kovsu in #19563
- fix(provider-registry): publish complete remote catalogs by @DeJeune in #19586
- fix(agent-notify): scope delivery to trusted targets by @vaayne in #19289
- feat(code-mate): sync CLI skills with installed tools by @eeee0717 in #19587
- fix(renderer): refresh time bucket reference for session/topic lists by @404-Page-Found in #19565
- fix(logger): keep source metadata on file log lines with data arguments by @eeee0717 in #19367
- feat(diagnostics): add mechanical error scanning over error logs by @eeee0717 in #19368
- ci(release): build releases from release branches with hotfix backport by @DeJeune in #18903
- fix(portable): preserve provider resources across relaunches by @DeJeune in #19562
- fix(ai-sdk): handle Gemini MCP array tool schemas by @ActiveSky in #18902
- fix(composer): show the active permission mode by @userInner in #19529
- fix(agent-runtime): coerce provider extra headers for pi and dsh by @DeJeune in #19592
- fix(agent): show provider name in model label by @ousugo in #19595
- perf(notes): lazy-load optional menu workflows by @userInner in #19517
- feat(files): support shift-click range selection by @ousugo in #19599
- fix(ai-diagnosis): use selected language for diagnosis output by @SiinXu in #19590
- fix(security): consent-gate HTML preview iframes, fail closed sandbox defaults by @GeorgeDong32 in #18764
- feat(sidebar): default Agent first for new users by @SiinXu in #19388
- fix(release-workflow): simplify release validation by @DeJeune in #19594
- fix(composer): show skill suffix only in root search by @ousugo in #19615
- fix(custom-fetch): preserve auth on safe redirects by @Protocol-zero-0 in #19614
- feat(notes): add create action to empty notes page by @SiinXu in #19467
- fix(tokens): count literal special-token text safely by @userInner in #19520
- fix(channels-settings): localize log and edit dialog close labels by @SiinXu in #19519
- perf(home,agents): isolate tab-state side effects from page roots by @404-Page-Found in #19161
- fix(command-resolver): accept existing absolute MCP stdio commands by @SiinXu in #19559
- fix(knowledge): reject empty document extraction by @userInner in #19177
- feat(diagnostics): submit signed diagnostic reports to Cherry by @AtomsH4 in #19513
- fix(lmstudio): preserve multi-image inputs by @ActiveSky in #19600
- fix(code-cli): write Hermes config to the home Hermes actually reads by @kovsu in #19585
- feat(app): fixed launch on boot functionality and add tests by @xianhongtao in #19311
- fix(agent-tasks): deliver scheduled channel results once by @SiinXu in #19567
- docs(contributing): fix recommended label links by @lihuiyang1024 in #19648
- feat(diagnostics): export chat records in diagnostic bundles by @AtomsH4 in #19371
- fix(release-workflow): simplify release validation by @DeJeune in #19620
- perf(files): filter types before cursor pagination by @lihuiyang1024 in #19647
- feat(knowledge): support dropped file uploads by @SiinXu in #19653
- feat(provider-settings): guide initial API setup by @kangfenmao in #19082
- fix(agent): inherit macOS login shell PATH by @userInner in #19259
- fix(model-parameters): omit fixed Kimi sampling settings by @ump45nose in #19603
- fix(agent): honor DSH developer role capability by @userInner in #19446
- fix(dsh-runtime): allow models without text modality by @kangfenmao in #19662
- perf(files): stabilize virtualized view callbacks by @userInner in #19159
- refactor(chat-translate): remove orphaned translation overlay path by @404-Page-Found in #19575
- feat(code-mate): add Antigravity CLI and retire Gemini CLI by @eeee0717 in #19474
- feat(diagnostics): add report entry points for Support and chat errors by @AtomsH4 in #19514
- feat(tool-approval): add rejection reasons by @userInner in #19023
- fix(provider-registry): correct DeepSeek V4 metadata by @userInner in #19296
- feat(mini-app): add real local mini apps in a sandbox by @0xfullex in #19475
- fix(mini-app): let the activity log wrap, and end where the dialog does by @0xfullex in #19668
New Contributors
- @iris-Neko made their first contribution in #19366
- @Totoro-qaq made their first contribution in #19374
- @yunyv made their first contribution in #19342
- @kkjzio made their first contribution in #18881
- @Protocol-zero-0 made their first contribution in #19614
- @xianhongtao made their first contribution in #19311
- @lihuiyang1024 made their first contribution in #19648
- @ump45nose made their first contribution in #19603
Full Changelog: v2.0.9...v2.0.10