* refactor(ui): direct enable/disable and remove actions on plugin cards
Replace the state chip + kebab menu on plugin cards, installed rows,
ClawHub results, and MCP server rows with a direct Enable/Disable
button and a trash icon for removable entries. Drop the redundant
'View details' menu item (the whole card opens details) and delete the
now-unused menu machinery, document listeners, and CSS.
* style: oxfmt plugins-page test helper
* chore(i18n): prune removed pluginsPage menu keys from locale bundles
Reorder Settings -> Gateway by intent: pairing (Add Gateway with Scan QR,
setup code, discovered gateways) right below status, nav-bar QR scanner
button on the gateway route, and a Scan QR to Pair status-card hero while
nothing is paired (honoring the shared connect lock). Manual Gateway and
credentials move to the bottom. Fix setup-code Connect busy spinner to
track the whole attempt. New strings ran the full native i18n pipeline.
Closes#106013
* feat(ios): guide first launch through pairing explainer and permissions
* fix(ios): keep first-run flow resumable and surface limited grants in onboarding
* chore(ios): regenerate native i18n after rebase
* chore(android): project refreshed native translations into strings.xml
* fix(ios): move i18n wrapper contract to shared permission row and sync catalog
* refactor(extensions): remove dead QA and utility exports
* refactor(extensions): trim Matrix QA internal exports
* chore(deadcode): refresh extension export baseline
* chore(ci): reconcile deadcode and LOC baselines
* chore(deadcode): refresh baseline after main advance
* chore(deadcode): refresh baseline after main advance
* refactor(plugins): keep channel snapshot type private
* fix(ci): align Linux deadcode baseline
Sessions is session management, not a day-to-day workspace destination.
It now lives in Settings under Agents & Tools at /settings/sessions,
with the old /sessions path kept as a route alias; stale pinned-route
prefs drop automatically via normalizeSidebarPinnedRoutes. Also repairs
the sidebar-customization e2e that #105777 broke on main by opening
Settings through the agent-chip menu.
* 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