What's Changed
- fix(skills): support valid GitHub SKILL.md links by @AtomsH4 in #18907
- feat(provider-registry): remote catalog hot-update without an app release by @DeJeune in #16857
- refactor(agent-runtime): unify declarative tool approval policy by @DeJeune in #18865
- fix(provider-registry): send enable_thinking for Qwen on openai-compatible providers by @404-Page-Found in #18772
- fix(tabs): prevent pinning transient mini-apps by @userInner in #18904
- perf(chat): lazy-load disabled message outline by @ActiveSky in #18971
- fix(pi-agent): resolve citations for third-party MCP tool outputs by @404-Page-Found in #18829
- fix(api-gateway): skip Anthropic tools without an input_schema by @userInner in #18780
- docs(code-review): require dual sources for network downloads by @kangfenmao in #18953
- feat(privacy): publish August 2026 policy update by @kangfenmao in #19022
- ci(claude-review): keep review failures advisory by @kangfenmao in #19031
- feat(shortcuts): restore Ctrl+L clear messages shortcut by @SiinXu in #19021
- fix(skills): only block skills on provable dependency gaps, and split SkillService by @kennyzheng-builds in #18549
- fix(api-gateway): keep Agent SDK system messages out of the assistant turn by @kennyzheng-builds in #18697
- feat(assistant-settings): add model settings navigation by @AtomsH4 in #19030
- fix(code-viewer): highlight the first frame without the debounce delay by @kovsu in #18950
- fix(ai-messages): drop unanswered approvals from replayed history by @DeJeune in #18066
- fix(message-locate): cancel stale requests on conversation switch by @zhangjiadi225 in #18994
- fix(topic-navigation): recover deleted active topics by @zhangjiadi225 in #18995
- fix(permission-mode): improve option legibility by @AtomsH4 in #19035
- fix(code-mate): ignore stale provider selections by @eeee0717 in #19015
- fix(job-scheduler): persist automatic next runs by @AtomsH4 in #19017
- fix(api-gateway): downgrade inline system messages for Ollama by @userInner in #19042
- refactor(mcp): move builtin server knowledge out of the MCP runtime by @DeJeune in #18630
- fix(pdf-translation): show resource download progress by @eeee0717 in #19051
- fix(migration): preserve agent identity files when v1 source workspace is removed by @404-Page-Found in #19053
- refactor(external-app): unify external open targets by @zhangjiadi225 in #19027
- feat(local-model): enable inference hardware acceleration by default by @eeee0717 in #19055
- test(job-scheduler): fix flaky nextRun assertion on natural interval fire by @DeJeune in #19057
- fix(agent-session): update lastActivityAt when reusing placeholder session by @404-Page-Found in #19036
- feat(sidebar): pin assistants and agents to the sidebar by @bigben446 in #18345
- feat(mini-app): split the mini app view into two panes by @bigben446 in #18425
- fix(topics): prevent old title flash after rename by @ousugo in #18760
- fix(command-execution): restore Bash output on Windows by @DeJeune in #17682
- fix(code-style): isolate theme catalog updates by @DeJeune in #19069
- fix(agent-composer): show full AskUserQuestion titles by @SiinXu in #19016
- fix(notes): preserve navigation after renaming by @SiinXu in #19020
- fix(agents): lazy-load AgentSessionImageCaptureHost in Sessions by @404-Page-Found in #19078
- fix(user-data-relocation): copy symlink targets during migration by @kangfenmao in #19033
- fix(paths): divert dev logs directory away from packaged installs by @kovsu in #18068
- fix(right-pane): animate maximize and restore instead of committing at the boundary by @kovsu in #19083
- fix(topic-list): clear messages for non-active topics by @zhangjiadi225 in #19004
- fix(conversation-routing): prevent stale session actions by @zhangjiadi225 in #18970
- fix(composer): preserve drafts when stream open is blocked by @zhangjiadi225 in #18999
- fix(message-list): isolate message targeting by tab by @zhangjiadi225 in #18997
- fix(chat): restore clear-messages shortcut after event removal by @DeJeune in #19091
- fix(ovms): list all configured OVMS models regardless of loading state by @404-Page-Found in #18826
- fix(citations): clear sources when switching conversations by @zhangjiadi225 in #18996
- fix(topic-rename): wait for persistence before showing success by @zhangjiadi225 in #19005
- fix(chat): prevent arrow-key scroll jitter in message list by @404-Page-Found in #18769
- feat(usage): redesign usage analytics with ECharts by @zhangjiadi225 in #19084
- fix(html-artifact): prevent bare-text height jitter in inline preview by @tommyzhang100504 in #18998
- perf(chat): remove unused flow navigation listener by @ActiveSky in #19085
- fix(keyboard): make message scroll containers focusable for arrow-key navigation (#19070) by @xxiaoxiong in #19099
- test(trace-viewer): drop the virtualizer scroll debounce before jsdom teardown by @kovsu in #19101
- fix(binary-manager): validate installs by the bins a recipe exposes by @DeJeune in #19087
- fix(data-migration): skip Dexie records with unreadable large values by @DeJeune in #19086
- fix(message-locate): bind global-search locate requests to their conversation by @kovsu in #19094
- fix(pi-agent): resolve citations for pi's tool_call wrapper by @DeJeune in #19071
- fix(provider): remove retired GitHub Models integration by @ousugo in #19072
- fix(composer): surface full url on truncated link chips and speed up og hover by @tommyzhang100504 in #19107
- fix(composer): prevent editable toggle from restoring sent draft text by @tommyzhang100504 in #19113
- fix(api-gateway): convert max_tokens to max_completion_tokens for OpenAI reasoning models by @404-Page-Found in #18768
- fix(mini-app): relay guest keydown so renderer shortcuts work in webviews by @LWWZH in #19076
- fix(mcp): collect prompt arguments in a dialog before insert by @mturac in #18946
- fix(quick-assistant): use the configured quick model by @metrovoc in #19080
- docs(claude-md): replace broken pnpm test advice with working targeted commands by @tommyzhang100504 in #19135
- fix(provider): align Responses behavior and provider state ownership by @DeJeune in #18449
- fix(deepseek-harness): write the versioned dsh credentials layout by @DeJeune in #19131
- fix(model-list): read the Ollama context window from /api/show by @DeJeune in #19046
- fix(agent-runtime): default missing model context window to 256K by @DeJeune in #18847
- fix(app-startup): apply launch-on-boot preference to system by @kennyzheng-builds in #18225
- chore(download-binaries): share downloaded tools across git worktrees by @EurFelux in #19126
- feat(mcp): add built-in install_mcp_server tool for one-click MCP registration by @NatsUIJM in #18609
- fix(screenshot-overlay): keep the toolbar on screen for a full-screen selection by @DeJeune in #19150
- fix(anthropic-provider): accept thinking blocks without a signature by @DeJeune in #19146
- fix(api-gateway): fold inline system messages for openai-chat-completions by @DeJeune in #19145
- fix(model-selector): distinguish duplicate model names by @SiinXu in #19018
- fix(screenshot): let Escape dismiss an overlay before any selection by @EurFelux in #18932
- fix(quick-panel): keep skill names readable by @ousugo in #19142
- fix(api-gateway): map chat reasoning_effort to Responses by @HappyAny in #18854
- test(agents-migration): fix flaky high-fan-out copy test on Windows CI by @DeJeune in #19132
- fix(screenshot): show the IME candidate window while annotating text by @EurFelux in #18934
- fix(models): hydrate custom model registry limits by @userInner in #19155
- fix(composer): preview Markdown attachments by @userInner in #19154
- fix(model-drawer): drop native number spinners from model settings inputs by @EurFelux in #19125
- ci(provider-registry): author catalog sync commits through GraphQL by @DeJeune in #19181
- fix(binary-manager): retry pipx installs across PyPI mirrors in China by @eeee0717 in #19102
- fix(binary-manager): make BabelDOC installable from mainland China by @eeee0717 in #19098
- fix(models): hydrate custom model registry metadata by @userInner in #19174
- perf(mini-app): stabilize pool callbacks by @userInner in #19169
- chore(gh-create-issue): add restricted engineering task template by @EurFelux in #19173
- fix(prompt-editor): align prompt action button styles by @zhangjiadi225 in #19190
- feat(prompt-bindings): add contextual prompt visibility by @zhangjiadi225 in #18378
- fix(quick-panel): prevent hidden action hitboxes after tab switches by @zhangjiadi225 in #19187
- feat(launchpad): refresh built-in app icons by @SiinXu in #19059
- fix(artifact-pane): clear the elevated composer in a maximized pane by @kovsu in #19034
- fix(prompt-interpolation): preserve literal replacement text by @kovsu in #17574
- feat(artifact-pane): add copy path context menu to workspace file tree by @kovsu in #18776
- fix(filesystem-mcp): parse ripgrep JSON output by @kovsu in #17598
- feat(export): convert markdown alerts to notion callouts by @GeorgeDong32 in #18611
- fix(deepseek-harness): heal stale managed keys at top-level of versioned credentials by @404-Page-Found in #19162
- perf(screenshot): make the capture overlay appear immediately by @EurFelux in #18933
- fix(markdown): copy tables from local source blocks by @ousugo in #19193
- feat(provider-registry): add DeepSeek V4 Flash Vision Exp with image input by @EurFelux in #19236
- fix(settings): avoid router-hook crash when ModelSettings renders off… by @keygenqt in #19205
- feat(sidebar): support middle-click and context menu to open in new tab by @ousugo in #19202
- docs(references): verify stale paths fixed for #18850 by @404-Page-Found in #19227
- fix(stream-manager): ignore stale terminal callbacks by @kovsu in #17997
- refactor(observability): remove orphaned IPC trace patch by @cyq1017 in #19246
- fix(popups): stop IME candidate Enter from resolving PromptPopup with raw pinyin by @404-Page-Found in #19224
- feat(appearance): surface the chat and work list positions in settings by @kennyzheng-builds in #19200
- docs(development): remove empty Development section heading by @c020627 in #19237
- fix(agent-migration): tolerate unreadable legacy database by @kangfenmao in #18912
- refactor(i18n): flatten locale catalogs to dotted keys by @DeJeune in #19143
- fix(agents): delete an agent's task schedules with the agent by @yzxcj797 in #19215
- fix: remove unsupported 'includeServerSideToolInvocations' field from Gemini tool config by @LWWZH in #15098
- fix(agent): discover workspace .agents skills by @userInner in #19258
- fix(composer): preserve pasted screenshots with text flavors by @userInner in #19260
- fix(quick-panel): preserve labels while aligning descriptions by @ousugo in #19199
- fix(agent-creation): show go-to-chat action after tool creation by @zhangjiadi225 in #19195
- fix(composer): isolate referenced conversation instructions by @userInner in #19257
- fix(agent-search): exclude hidden reasoning from search by @kennyzheng-builds in #17661
- feat(skills): open installed skill folders by @SiinXu in #18929
- feat(skills): restore file browser and translation by @SiinXu in #18993
- perf(home-composer): skip unchanged streaming renders by @DeJeune in #18468
- fix(chat-markdown): animate streamed inline code by @tommyzhang100504 in #19156
- fix(agent): add back navigation to subagent flows by @ousugo in #19266
- feat(settings): clarify Global Memory scope and add memory overview by @404-Page-Found in #19229
- fix(provider-registry): distinguish integer image ranges by @userInner in #19256
- fix(api-gateway): restore Gemini 3 thought signatures on replayed tool calls by @DeJeune in #19047
- fix(provider): add defaultChatEndpoint to lmstudio preset so Pi/DSH endpoint resolution succeeds by @newdeme in #19006
- fix(settings): default settings entries to model services by @ousugo in #19137
- fix(painting-size): keep selected chip outline visible by @SiinXu in #18982
- feat(pi-icon): use official Pi mark by @eeee0717 in #19277
- feat(agent-dialogs): refine create and edit experience by @kangfenmao in #19013
- feat(wechat-channel): support native iLink media by @vaayne in #19278
- fix(code-editor): resolve editor height and language extension lookups by @kovsu in #18951
- fix(chat-shell): keep sidebar resize handle aligned after settings navigation by @ousugo in #19123
- fix(agent-runtime): serialize stop and retry teardown by @AtomsH4 in #19252
- perf(painting): parallelize history file hydration by @userInner in #19283
- fix(composer): show first picker attachment on unused assistant by @SiinXu in #19293
- fix(screenshot): keep overlays on the active macOS Space by @userInner in #19281
- feat(data): support JSON Merge Patch for provider settings by @userInner in #19280
- perf(dsh-runtime): bundle packaged dependencies by @kangfenmao in #19191
- refactor(code): retire CLI config read IO, broadcast managed-tool status by @GeorgeDong32 in #18671
- fix(provider-model): reconcile ambiguous delete failures by @AtomsH4 in #19301
- chore: release v2.0.9 by @kangfenmao in #19308
New Contributors
- @bigben446 made their first contribution in #18345
- @metrovoc made their first contribution in #19080
- @HappyAny made their first contribution in #18854
- @keygenqt made their first contribution in #19205
- @cyq1017 made their first contribution in #19246
- @c020627 made their first contribution in #19237
- @yzxcj797 made their first contribution in #19215
- @newdeme made their first contribution in #19006
Full Changelog: v2.0.8...v2.0.9