What's Changed
- test: record what the Windows inode gates are hiding, and un-skip one by @yiliang114 in #11853
- fix(cua): preserve Linux observations and REPL diagnostics by @DragonnZhang in #11829
- feat(core): cap web_search calls per session by @qqqys in #11852
- fix(core)!: let bash expand project directory variables in command hooks by @qqqys in #11864
- fix(cua): make Linux input delivery adaptive by @LaZzyMan in #11876
- fix(core): keep escaped whitespace at pipe-list entry edges by @qqqys in #11860
- docs(hooks): complete the event catalog and correct stale claims by @qqqys in #11863
- chore(pnpm): correct the range-key rationale and cover the version union by @yiliang114 in #11845
- fix(serve): resolve skill identity from the catalog for toggle guards by @harjothkhara in #11831
- feat: track background result execution across daemon and web shell by @ytahdn in #11636
- fix(standalone): bundle @lydell/node-pty prebuilds so the web terminal works by @yiliang114 in #11881
- test(cli): mock realpathSync in the review cleanup suite so the cwd witness holds on Windows by @yiliang114 in #11893
- feat(cli): full /hooks dialog in OpenTUI by @qqqys in #11903
- feat(core): emit hook progress events by @qqqys in #11906
- feat(extensions): ship dynamic workflows from extensions by @qqqys in #11805
- fix(cua): bound Linux observations and prepare SDK 0.20.9 by @LaZzyMan in #11910
- fix(cli): scope the ACP permission queue to the session by @chiga0 in #11802
- feat(channels): add shared output modes with DingTalk support by @qqqys in #11822
- feat(web-shell): slide the active pill between tabs by @callmeYe in #11844
- refactor(goal): delete the first-generation Stop-hook Goal implementation by @qqqys in #11900
- fix(ci): separate autofix runner labels from queued reviews by @yiliang114 in #11912
- feat(daemon): enumerate installed extension skills locally by @callmeYe in #11281
- feat(web-shell): follow the reading position in the global turn navigation by @callmeYe in #11801
- feat(workflows): share a per-turn token budget from a +Nk directive by @qqqys in #11917
- feat(serve): add budget-based ACP child admission by @doudouOUC in #11911
- feat(cli): add bwrap kernel sandbox backend for Linux by @doudouOUC in #11614
- fix(cli): restore shared Skill status and runner CI checks by @qqqys in #11933
- fix(vscode): retire legacy ACP input bridges by @yiliang114 in #11928
- feat(core): support external reasoning profiles and defaults by @callmeYe in #11856
- feat(settings): turn cross-session messaging on by default by @qqqys in #11840
- fix(web-shell): show Qwen Live tasks in session sidebar by @qqqys in #11830
- fix(ci): isolate runner schedule fixture module scope by @doudouOUC in #11938
- feat(core): run saved workflows by name and pin workflow grants to script content by @qqqys in #11943
- feat(workflow): preserve source references across runs and resumes by @qqqys in #11931
- refactor(vscode): remove unused token limit mirror by @yiliang114 in #11946
- fix(core): carry the PTY load reason on the call, not in module state by @yiliang114 in #11923
- feat(workflow): correlate agent dispatches and nested workflow calls by @qqqys in #11932
- docs(goal): retire the Stop-hook era prose after the implementation was removed by @qqqys in #11922
- fix(core): keep escaped trailing whitespace when trimming hook matchers by @yiliang114 in #11871
- feat(workflows): size guideline, structure preview and large-run warning by @qqqys in #11939
- fix(core): expand ${session_id} and stamp User-Agent on the Responses wire by @yiliang114 in #11947
- feat(workflows): let the model invoke extension workflows that declare whenToUse by @qqqys in #11957
- feat(daemon): support summary projection for prompt and replay APIs by @ytahdn in #11920
- ci(desktop): publish the desktop app when the CLI releases by @yiliang114 in #11575
- test(cli): unbreak the bwrap sandbox suites on the Windows lane (#11968) by @qwen-code-dev-bot in #11970
- fix(core): keep tool parameters on the MiniMax chat-completions wire by @yiliang114 in #11842
- fix(web-shell): stop the approval sheet resizing while reading by @ytahdn in #11930
- fix(release): gate pool-routed validation jobs on a disk floor by @qwen-code-dev-bot in #11972
- feat(web-shell): add footnote previews and per-turn sources by @callmeYe in #11480
- fix(web-shell): preserve separators in tool description paths by @ytahdn in #11977
- feat(telemetry): emit a Goal lifecycle event and metrics by @qqqys in #11927
- feat(cli): reload hook registry when /hooks opens by @qqqys in #11904
- fix(core): persist Goal turn endings outside model history by @qqqys in #11924
- feat(serve): reclaim idle ACP children when admission is full by @doudouOUC in #11940
- feat(web-shell): connect to a selected remote daemon by @yiliang114 in #11548
- fix(web-shell): keep the recap below a turn's outputs and dedupe it by @ytahdn in #11986
- feat(web-shell): preview files from expanded tool details by @ytahdn in #11982
- fix(ci): heal the docker lock cache ownership in e2e-test-linux (#11990) by @qwen-code-dev-bot in #11992
- feat(serve): start workflow runs with args, sourceRef and a caller-supplied script by @qqqys in #11979
- refactor(serve): separate ACP control plane and channel harness by @wenshao in #11916
- fix(cli): register model-invocable commands before headless turns by @qqqys in #11994
- fix(vscode): reach the workspace daemon from a remote window's webview by @yiliang114 in #11983
- feat(web-shell): customize context details and collapse snapshots by @ytahdn in #11996
Full Changelog: v0.23.4...v0.23.5-preview.0