What's Changed
- feat(daemon): Trace cold first-session startup by @doudouOUC in #6907
- fix(serve): Harden multi-workspace ownership guards by @doudouOUC in #7005
- docs(serve): Close multi-workspace hardening gaps by @doudouOUC in #7019
- feat(web-shell): add archived session export by @doudouOUC in #6910
- fix: bound usage-only streams and abort on quit by @yiliang114 in #7038
- fix(acp): disambiguate model routes by @yiliang114 in #7028
- refactor(web-shell): drop redundant primary-workspace label by @wenshao in #7035
- test(web-shell): make visual-preview captures deterministic + add workspace-sidebar scenario by @wenshao in #7041
- fix(web-shell): batch transcript dispatch to avoid tab-return freeze by @wenshao in #7012
- fix(core): Require explicit approval to exit Plan mode by @doudouOUC in #6967
- ci(autofix): recover from generated-artifact CI gates and stop silent stalls by @wenshao in #6998
- fix(web-shell): use formatSettingCategory for fallback UI category by @wenshao in #7055
- feat(serve): add workspace session-info aggregate endpoint by @samuelhsin in #7077
- feat(web-shell): add skill management pages by @ytahdn in #7018
- ci(autofix): run the schema gate from a trusted staged copy, not the branch tree by @wenshao in #7076
- fix(integration): add missing session_info to E2E capabilities baseline by @qwen-code-dev-bot in #7091
- feat(cli): mouse text selection and copy in VP mode by @chiga0 in #6937
- test(web-shell): align workspace sidebar visual smoke by @yiliang114 in #7107
- fix(tui): pin MaxSizedBox rows and gate the pending backstop for show-more diff (#6809) by @azurecgx in #6957
- fix(integration): harden flaky interactive read-then-write test by @wenshao in #7105
- test(cli): isolate sandbox-relaunch tests from ambient QWEN_SANDBOX_IMAGE by @wenshao in #7093
- ci(autofix): treat Suggestion-level review findings as actionable per AGENTS.md by @wenshao in #7094
- feat(channels): stamp daemon sourceId with channel instance name on created sessions by @xurik in #7078
- feat(channels): confirm natural memory mutations by @qqqys in #7066
- feat(channels): save explicit multi-fact memory safely by @qqqys in #7092
- feat(serve): Complete legacy session workspace telemetry by @doudouOUC in #7003
- fix(core): retry empty tool-result continuations by @yiliang114 in #7039
- fix(core): align planning and response guidance by @DragonnZhang in #7085
- feat(core): Enable artifact defaults and write reminders by @chiga0 in #7068
- feat(web-shell): suggest sending new-topic drafts in a new session by @carffuca in #7098
- fix(web-shell): render built-in tag icons by @callmeYe in #7024
- fix(core): force tool_choice in generateJson to prevent auto-mode classifier deadlock by @qwen-code-dev-bot in #6929
- fix(ci): notify silent triage re-runs by @yiliang114 in #7079
- fix(cli): pop the kitty keyboard protocol after leaving the alternate screen by @zjunothing in #7115
- fix(web-shell): optionally restart SSE after prompt admission by @ytahdn in #7080
- test(serve): cover session-info regressions by @samuelhsin in #7083
- fix(core): accept subagents created after startup instead of rejecting on stale cache by @zjunothing in #7112
- fix(cli): keep streaming code blocks intact when split across commits by @MikeWang0316tw in #7020
- fix(i18n): correct "extenison" typo in extension enable/disable scope help by @chinesepowered in #7057
- feat(tools): add formatDisplayPath() and wire grep/glob/ripGrep descriptions by @zjunothing in #7050
- fix(core): make the per-turn tool-call cap adaptive by @wenshao in #7052
- feat(daemon): propagate prompt IDs to turn events by @makwingchi in #7082
- fix(vscode): preserve Electron Node mode for ACP launch by @yiliang114 in #7106
- docs(cua-driver): fix broken relative-coordinate design link by @chinesepowered in #7130
- fix(core): preserve complete skill descriptions by @callmeYe in #7032
- feat(web-shell): paginate restored session history by @ytahdn in #7064
- fix(core): persist resolved subagent model in metadata by @ARE404 in #7104
- feat(web-shell): toggle the session sidebar with Cmd+B / Ctrl+B by @zjunothing in #7135
- fix(web-shell): stop stacking duplicate copies when restoring prompt text by @zjunothing in #7134
- feat(web-shell): add directory autocomplete to the Add Workspace dialog by @zjunothing in #7125
- feat(cli): support same-turn message steering by @LaZzyMan in #7090
- fix(core): retry malformed repeated thinking tags by @yiliang114 in #7100
- fix(cli): correct misspelled handleUpdateRecieved -> handleUpdateReceived by @chinesepowered in #7132
- fix(cli): hide sticky task panel when agent is idle by @qwen-code-dev-bot in #7062
- feat: support full-turn multimodal routing for image prompts by @yiliang114 in #7045
- fix(cli): keep the model override when a background notification drains by @zjunothing in #7119
- fix(core): align prompt tool examples with schemas by @DragonnZhang in #7088
- fix(cli): require a second Ctrl+C within 1s before a real SIGINT exits the TUI by @zjunothing in #7129
- fix: keep quit and stream logging reliable by @yiliang114 in #7124
- fix(ui): keep SkillReviewDialog right border inside the dialog container by @zjunothing in #7047
- fix(core): preserve existing work in system prompt by @DragonnZhang in #7087
- docs(autofix): make bot PR comments bilingual with collapsed Chinese by @wenshao in #7137
- fix(mcp): terminate descendants after discovery timeout by @morluto in #6926
- feat(agents): support per-model sub-agent concurrency limits by @qwen-code-dev-bot in #6984
- fix(review): report what the transcripts prove; build the roster in one call by @wenshao in #7033
- fix(cli): establish extension store generation baseline on first read by @qwen-code-dev-bot in #7072
- fix(core): remove ask_user_question from the Explore agent's toolset by @zjunothing in #7133
- fix(web-shell): scope advanced table overlays by @ytahdn in #7097
- feat(cli): add daemon Todo stop guard by @doudouOUC in #6945
- feat(cli): show active path in compact tool summaries by @zjunothing in #7043
- fix(core): correct "supercedes" typo in plan-mode system prompt by @chinesepowered in #7058
- fix(ask-user-question): accept long headers and size chips to the container width by @tanzhenxin in #7063
- fix(core): canonicalize restrictive permission paths by @morluto in #6923
- fix(core): align system prompt with interaction mode by @DragonnZhang in #7089
- fix(memory): resolve root symlinks in isAllowedMemoryPath before creation by @wenshao in #6842
- fix(core): add kimi-k3 token limits (1M context, 128K output) by @tanzhenxin in #7144
- fix(integration): use lenient assertion and harden poll in interactive file-system test by @qwen-code-dev-bot in #7113
- feat(daemon): Profile ACP channel initialization by @doudouOUC in #7145
- fix(core): resolve a parameter expansion in command position to its command root by @wenshao in #7143
- fix(cli): make auto output language follow user input by @han-dreamer in #6953
- fix(core): respect enableManagedAutoMemory in memory availability by @han-dreamer in #6941
- fix(cli): tighten VP-mode controls footprint and fix shell tool indicator overlap by @chiga0 in #6931
- fix(acp): resolve textual @ image paths by @yiliang114 in #7123
- feat(vscode): route logs to the Qwen Code Companion output channel by @yiliang114 in #7121
- feat(core): overhaul web_fetch — content fidelity, binary handling, security, and resilience by @tanzhenxin in #7146
- feat(channels): expose workspace-scoped observed contacts by @BenGuanRan in #7109
- test(cli): actually exercise the paste-workaround path in useKeypress by @chinesepowered in #7141
- fix: correct typos in comments, a tool description, and docs by @chinesepowered in #7131
- feat(web-shell): persist the split view across refresh, per tab by @wenshao in #7136
- fix: harden desktop MCP permission-request lifecycle so pending prompts never hang or leak by @mvanhorn in #7013
- fix(cli): correct misspelled migratedInMemorScopes -> migratedInMemoryScopes by @chinesepowered in #7140
- feat(web-shell): add a workspace Goals page, and stop losing /goal on daemon resume by @wenshao in #6561
- feat(core): improve subagent delegation defaults and guardrails by @DragonnZhang in #7048
- feat(review): build every Step 5 auditor of a round in one call, identity first by @wenshao in #7150
- feat(channels): observe group names from inbound messages by @BenGuanRan in #7155
- fix(web-shell): recover new-session decisions wrapped in prose or fences by @wenshao in #7122
- feat(web-shell): git status chip, visual working-tree diff, and sidebar git status by @wenshao in #7054
- feat(channels): recall relevant memory per message by @qwen-code-dev-bot in #7157
- ci(autofix): fan out review targets and stop route-scan starvation by @wenshao in #7127
- fix(web-shell): make approval and question overlays keyboard accessible by @wenshao in #7074
New Contributors
- @azurecgx made their first contribution in #6957
- @makwingchi made their first contribution in #7082
- @ARE404 made their first contribution in #7104
Full Changelog: v0.19.11...v0.19.12-preview.0