Changelog
- b15b902 MUL-5842: fix(ui): drop the write-only sidebar_state cookie and align the settings nav trigger (#6621)
- cd9f414 MUL-5853 feat(agent): support Kimi thinking levels (#6429)
- ad7e621 MUL-5860: unify internal link click semantics across all surfaces (#6667)
- 9f2b1c5 MUL-5862: project pill quick-clear × + stop remembering the last project (#6574)
- 2a19f9b MUL-5873 fix(channels): improve /new and /issue feedback (#6578)
- cd3c0bb MUL-5888: fix(wecom): answer a duplicate /issue honestly, and don't push a web-UI reply into the room (#6591)
- 43f568d MUL-5890: fix(wecom): ask the engine whether it is an /issue command instead of mirroring it (#6593)
- cdf93e4 MUL-5892 fix(chat): cancel queued tasks when a session is archived, and stop telling non-Slack sessions they have no channel (#6595)
- 7509d80 MUL-5904: fix(wecom): no slash command works in a group at all (#6603)
- 93fa120 MUL-5925 fix(execenv): expand Windows
~\in the openclaw active config path (#6630) (#6643) - 7c7ed8b MUL-5937 fix(daemon): persist direct chat Codex sessions (#6644)
- 984a2c2 MUL-5954: feat: saved issue views V1 (MUL-4796) (#6516)
- 0035345 MUL-5973: fix(tabs): restore inbox scroll position and stop the highlight re-jump on tab return (#6690)
- 8bd49bb docs(changelog): add v0.4.22 release entry (2026-08-10) (MUL-5978) (#6698)
- f77d03e docs(wecom): follow the same page_description shape as Slack, Lark and DingTalk (MUL-5883) (#6587)
- 3dd1285 feat(agent): add oh-my-pi (omp) as a supported agent runtime (#6514)
- 90b3c2c feat(cli): allow task-scoped daemon status and disk-usage (MUL-5742) (#6684)
- 47f6e97 feat(onboarding): write Mika's opening on the server instead of running an agent (MUL-5827) (#6520)
- a4d4444 feat(wecom): add the MULTICA_WECOM_TRACE operator switch (and stop it printing binding tokens) (#6602)
- b09abf1 feat(wecom): classify a refused handshake the way the credential probe does (MUL-5895) (#6598)
- 0ab2712 feat(wecom): read the server's verdict on an outbound send (MUL-5887) (#6590)
- 611a806 feat(wecom): read voice notes, which WeCom already transcribes for us (#6599)
- c66bffd feat(wecom): show WeCom's own mark instead of a generic speech bubble (#6585)
- 1fe956e feat(wecom): tell a refused handshake apart from an unreachable one, on a dashboard (#6626)
- f97db4f fix(agent): support Pi thinking levels through RPC model discovery (MUL-5924) (#6629)
- f3a7fce fix(chat): a predecessor's reply must not seal the next message out of its own batch (#6611)
- 586a624 fix(cli): isolate task profile state (#6407)
- 07ada72 fix(issue-views): show the view bar's more-trigger only while tabs overflow (#6682)
- c4cd1eb fix(lark): three defensive fixes to stored media filenames (#6596)
- 080f088 fix(migrations): renumber channel pending_fresh to 271 (#6683)
- 985a1fe fix(views): add saved-view sort direction (#6689)
- 2b35f80 fix(web): validate the browser API base URL (MUL-5922) (#6627)
- eb59e24 fix(wecom): cap the request bodies both WeCom JSON endpoints read (#6586)
- dce176c fix(wecom): don't let a closing connection evict its own successor (#6588)
- 8d7e1c8 fix(wecom): escape member-authored text in the inbox card, and keep the card inside the cap (MUL-5889) (#6592)
- 02d0622 fix(wecom): prove control of the bot before the install reclaim destroys somebody’s row (MUL-5891) (#6594)
- 0db0055 fix(wecom): stop blaming an admin's credentials when the fault is ours (#6589)
- 72304b3 fix(wecom): throttle binding-token minting to one link per user per minute (MUL-5880) (#6584)
- 5e66a73 test(core): cover cloud billing schema fallbacks (#6642)
- 42a55d8 test(handler): avoid schema pollution in workspace cleanup (#6685)