* fix(macos): center dashboard traffic lights with the hosted titlebar buttons
Give the dashboard window an empty unified toolbar so its titlebar grows
to 52pt, vertically centering the macOS traffic lights against the row of
web-hosted titlebar buttons (sidebar toggle, back/forward) instead of
hugging the top edge. Bump the injected --openclaw-native-titlebar-height
to match, and nudge the hosted controls' left offset from 78px to 92px so
the traffic-light cluster and the first web button read as separate groups.
The toolbar exists only to size the titlebar, so View > Hide Toolbar (and
the corresponding shortcut) are refused; hiding it would collapse the
titlebar while the web inset stays pinned at 52pt, resurrecting the
misalignment. Smoke tests cover toolbar presence/style, hide refusal, and
the exact injected height.
* chore(i18n): resync native inventory line metadata
The previous commit accidentally truncated app-sidebar.ts to an empty
file while fixing the missing IconName import from #105850. This
restores the full component with the corrected icons import.
Three concurrent unbreak commits (#106124, #106126, a4467f1971) each
added src/state/openclaw-state-db-readonly.ts, so the guard now dies on
its own duplicate-path assertion before checking anything. Keep the
dedicated read-only shared-state group entry.
* feat(ui): docs, help, Discord, and changelog links in the agent chip menu
* chore(i18n): normalize locale bundle metadata after rebase
* refactor(ui): move the agent menu links into the nav-menus module for the LOC ratchet
* Revert "refactor(ui): move the agent menu links into the nav-menus module for the LOC ratchet"
This reverts commit 0e4d72f4c6.
* fix(memory): scope qmd search deadline
Preserve the phase-scoped QMD timeout semantics on current main.
Co-authored-by: Peter Steinberger <58493+steipete@users.noreply.github.com>
* docs: refresh generated docs map
* test(memory): reconcile manager mock with current main
* test(memory): isolate deadline mock import
* style(memory): format search test mocks
* test(memory): decouple mock from deadline symbol
* chore(memory): refresh reviewed pull request head
---------
Co-authored-by: Benjamin Badejo <ben@benbadejo.com>
Co-authored-by: Peter Steinberger <58493+steipete@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
* fix(agents): close promised asynchronous work loops
* fix(agents): close promised asynchronous work loops
* refactor(agents): keep promised work policy focused
* refactor(agents): preserve prompt module documentation
* style(agents): keep prompt renderer within LOC ratchet
* fix(agents): close promised asynchronous work loops
* fix(agents): close promised asynchronous work loops
* fix(agents): preserve final replies across compaction failures
* test(agents): normalize nullable pending final
* chore(deadcode): drop used outbound payload export baseline
* refactor(agents): clarify pending final compaction delivery guard
* fix(agents): preserve media in pending final recovery
* fix(agents): require persisted final marker before compaction
* fix: keep pending final marker result internal
* test: update plugin SDK surface budget
---------
Co-authored-by: Benjamin Badejo <ben@benbadejo.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix(ios): focus missing gateway credentials
Co-authored-by: Colin <colin@solvely.net>
* test(macos): let main actor polling suspend
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Remove the hard 500-line TypeScript LOC ratchet from CI and local check planning, along with its package commands, implementation, baseline, and dedicated tests. Keep the remaining pull-request temp-creation report on its own pr-base fetch.\n\nVerification: 99 focused tooling tests; actionlint; zizmor; workflow guards; exact-head autoreview.
Streaming assistant replies in the Control UI now render markdown live: the in-flight tail is repaired with remend (zero-dep, Apache-2.0, extracted from Vercel's Streamdown) before the existing markdown-it + DOMPurify pipeline, and open code fences stream as live-highlighted code blocks. Deletes the plain-text streaming tail path (toStreamingPlainTextHtml) and extracts an uncached render core so tail deltas stop churning the markdown LRU cache. Closes#106053
* refactor: use semver package for version ordering
* refactor: centralize semver validation
* chore: keep release notes in PR body
* refactor: update semver LOC ratchet