Vincent Koc
dcae280db6
Merge remote-tracking branch 'origin/audit/macos-accessibility-followup' into audit/macos-accessibility-land-116026
...
* origin/audit/macos-accessibility-followup:
fix(ui): dismiss picker after focus leaves widget
fix(ui): keep picker trigger inside focus boundary
test(ui): split terminal accessibility coverage
test(ui): cover terminal picker pointer paths
chore: leave accessibility notes to release prep
fix(ui): type terminal shadow focus checks
fix(ui): make terminal session picker keyboard accessible
2026-07-30 04:16:32 +08:00
Vincent Koc
702892e1c3
fix(ui): dismiss picker after focus leaves widget
2026-07-30 03:58:24 +08:00
Vincent Koc
2ad7427e16
fix(ui): keep picker trigger inside focus boundary
2026-07-30 03:27:24 +08:00
Vincent Koc
14e65ab6b3
test(ui): split terminal accessibility coverage
2026-07-30 02:54:10 +08:00
Vincent Koc
8d6dae1e81
test(ui): cover terminal picker pointer paths
2026-07-30 02:46:37 +08:00
Vincent Koc
e677b8cbc8
fix(ui): type terminal shadow focus checks
2026-07-30 02:19:21 +08:00
Vincent Koc
1294df882a
fix(ui): make terminal session picker keyboard accessible
2026-07-30 02:06:44 +08:00
Peter Steinberger
ff72f287c3
fix(gateway): declare viewer presence explicitly instead of deriving it from subscriptions ( #116001 )
...
* fix(gateway): declare viewer presence explicitly instead of deriving it from subscriptions
* refactor(ui): isolate viewer presence lifecycle ownership
* chore(protocol): register viewer presence schema owner
* fix(ui): keep viewer presence cleared after detach
* chore: drop changelog edits from this PR
CHANGELOG.md is release-owned; release generation derives entries from merged
PRs. Release-note context stays in the PR body.
2026-07-29 13:56:54 -04:00
Vincent Koc
14ffd4393e
feat(ui): add provider icons to coding catalogs ( #115956 )
2026-07-30 01:33:15 +08:00
Vincent Koc
f083518506
Merge pull request #115942 from openclaw/fix/macos-keyboard-accessibility
...
fix(accessibility): restore web view navigation and layout-aware shortcuts
* commit 'fd28cd3becfded364107f236f526b08422f8ebab':
fix(ui): support shortcuts on non-Latin keyboards
fix(macos): enable keyboard navigation in web views
2026-07-29 23:29:56 +08:00
Peter Steinberger
df3674f577
refactor(ui): unify tab navigation on the shared hub tabs ( #115934 )
...
* refactor(ui): unify tab navigation on shared hub tabs
* refactor(ui): move cron navigation to hub tabs
* test(ui): update agent overview tab locator
2026-07-29 11:24:44 -04:00
Vincent Koc
fd28cd3bec
fix(ui): support shortcuts on non-Latin keyboards
2026-07-29 23:09:22 +08:00
Peter Steinberger
68a3d28906
fix: keep content after HTML-backed disclosures visible ( #115877 )
...
* fix(chat): close disclosures in coalesced HTML
Keep model-authored details closers visible to the shared disclosure contract when CommonMark absorbs them into type-6 HTML blocks across the Control UI and native apps.
* refactor(apps): isolate disclosure unfolding
Keep the native disclosure segmenter below its lint complexity and type-size limits, and refresh the source-owned native i18n inventory after the move.
* fix(apps): align disclosure helper visibility
Keep the extracted same-file helper compatible with Swift access control while leaving its implementation types hidden outside the source file.
* fix(apps): align source replacement visibility
Keep the source replacement helper at the same file-private boundary as the extracted disclosure unfolding types.
2026-07-29 10:24:46 -04:00
Peter Steinberger
88c41f44de
feat(ui): add MCP servers from composer connectors ( #115921 )
2026-07-29 10:23:52 -04:00
Vincent Koc
099b806a9b
fix(ui): reduce embedded terminal font size
2026-07-29 22:22:17 +08:00
Peter Steinberger
fde4658bf6
fix(ui): recover sessions and dashboards after prolonged outages ( #115654 )
...
* fix(ui): recover long-running sessions and dashboards
* fix(ui): expose browser-safe gateway timers
* refactor(ui): keep browser timer surface minimal
* refactor(gateway): extract pending request state
* fix(ci): refresh browser runtime and format baseline
* fix(ci): exclude generated plugin outputs from targeted lint
* fix(ui): bound long-running connection and pane lifecycles
* refactor(ui): split long-running lifecycle regression coverage
* fix(ui): bound long-running media and lint ownership
* fix(security): preserve explicit workspace disable denylist
* fix(ci): preserve plugin manifest fallback lint
2026-07-29 10:09:51 -04:00
Peter Steinberger
4624f681ad
refactor(ui): give Memory the shared hub header with hoisted agent scope ( #115884 )
2026-07-29 08:48:05 -04:00
Peter Steinberger
a49b553f08
feat(ui): add docs links to settings pages ( #115874 )
2026-07-29 08:11:41 -04:00
Peter Steinberger
af70829cdf
refactor(ui): move Agent Defaults entry from the sidebar into the Agents page ( #115836 )
...
* refactor(ui): move Agent Defaults entry from the sidebar into the Agents page
* fix(ui): keep Agent Defaults searchable
2026-07-29 06:30:40 -04:00
Peter Steinberger
662abec754
feat(gateway): push session PR indicators to subscribed clients ( #115643 )
...
* feat(gateway): push session PR indicators to subscribed clients
* test(gateway): fix PR indicator drift
* chore(protocol): allowlist PR-indicator event for native apps (Control UI surface)
* test: align PR indicator lifecycle coverage
* fix(ui): scope session PR store listeners to active watchers
2026-07-29 06:30:01 -04:00
Peter Steinberger
f318df7a55
refactor(ui): dissolve the General settings page into Appearance ( #115798 )
...
* refactor(ui): dissolve the General settings page into Appearance
* test(ui): drop dissolved config route expectation
* test(ui): cover legacy General model redirect
* style(ui): format legacy redirect test
2026-07-29 05:49:20 -04:00
Vincent Koc
cc6b766079
fix(ui): guide users through missing or broken AI setup ( #115716 )
...
* fix(ui): block chat until inference is configured
* fix(ui): gate new sessions on configured inference
* fix(ui): gate custodian before inference starts
* fix(ui): clarify custodian setup navigation
* fix(ui): explain missing AI provider setup
* fix(ui): distinguish unavailable configured AI
* fix(ui): align inference setup fixtures
* test(ui): default mock gateway to working inference
* test(ui): align startup send gate coverage
* test(ui): inherit inference in gateway fixtures
* test(ui): normalize deferred gateway agents
* test(ui): update model setup sidebar fixture
2026-07-29 16:48:48 +08:00
Vincent Koc
755eea5e97
fix(ui): localize remaining control surfaces ( #115730 )
...
* feat(ui): add localization keys for control surfaces
* fix(ui): localize relative time and durations
* fix(ui): localize update and recovery notices
* fix(ui): localize chat controls and command results
* fix(ui): localize memory management views
* fix(ui): localize shared tool surfaces
* fix(ui): localize settings and action notices
* chore(ui): tighten localization raw-copy baseline
* fix(ui): preserve localized status copy
* fix(ui): preserve compact sidebar time label
* fix(ui): preserve near-future sidebar direction
* test(ui): align screenshot localization assertion
2026-07-29 16:34:35 +08:00
Peter Steinberger
a2c88e2a18
feat(ui): path-based agent and panel URLs on Settings > Agents ( #115673 )
...
* feat(ui): add agent panel path URLs
* test(ui): clarify unknown agent route fallback
* fix(ui): reject agent URL dot segments
* test(ui): clarify agent panel switch proof
* chore(ui): localize panel id table and refresh docs map
* test(ui): keep agent panel cases test-local
* chore(ui): keep agent route path type local
2026-07-29 04:12:46 -04:00
Peter Steinberger
d885f9175d
feat(ui): move settings save feedback into the sidebar footer ( #115679 )
...
* feat(ui): move settings save feedback to sidebar
* test(ui): support stateful config writes in mock gateway
* test(ui): add save indicator to memory sidebar test
2026-07-29 04:10:56 -04:00
Peter Steinberger
7018a36d04
feat(ui): memory settings polish — inline add-on toggles, phase explanations, embedding test ( #115557 )
...
* feat(ui): toggle memory add-ons inline on the Settings tab
* feat(ui): improve memory overview and settings controls
* fix(ui): restore rejected settings toggles
* fix(ui): surface memory add-on restart requirements
* fix(ui): reconcile restart notices by gateway process
* fix(ui): preserve pending restart notices
* fix(ui): order memory add-on catalog reloads
* fix(ui): reload add-ons through current gateway
* fix(ui): respect plugin mutation availability
* test(ui): type the plugins.list mock fallback for mutationAllowed
2026-07-29 03:40:52 -04:00
Peter Steinberger
33ca26807a
feat(ui): add plugin Discover path URL ( #115587 )
2026-07-29 01:28:13 -04:00
Peter Steinberger
04eb57d299
feat(ui): add contextual Settings documentation links ( #115560 )
...
* feat(config): add contextual settings docs URLs
* feat(ui): add contextual settings guide links
* docs: add settings guide pages
* docs: refresh generated docs map
* docs: polish settings guide pages prose
2026-07-29 01:00:15 -04:00
Peter Steinberger
8ff566a24c
fix(ui): clearly label beta releases in the update banner ( #115518 )
...
* fix(ui): identify beta channel in update banner
* fix(ui): preserve update-banner translation baseline
2026-07-29 00:19:31 -04:00
Peter Steinberger
ac7154eeb4
fix(ui): give Memory settings path-based tab URLs ( #115515 )
...
* fix(ui): add path-based memory tab URLs
* chore: remove release-owned changelog entry
2026-07-29 00:12:09 -04:00
Patrick Erichsen
89bdb2d1c0
fix(ui): explain empty agent session groups ( #115407 )
...
* fix(ui): explain empty agent session groups
* fix(ui): align empty session group hint
2026-07-28 18:06:04 -05:00
Peter Steinberger
7a1aa4eb4f
feat(ui): Talk settings page with catalog-driven realtime pickers ( #115409 )
...
* feat(talk): emit realtime models and voices in talk.catalog and mirror create-time readiness
* feat(ui): add curated Talk settings page with catalog-driven pickers
* docs(talk): correct stale claims and add one-page GPT-Live setup path
* fix(ui): refresh Talk catalog on config-hash advance and neutralize GPT-Live badge
* fix(ui): provider-aware Talk selection, atomic provider switch, focus refresh
* fix(ui): resolve Talk provider fallbacks via catalog and make Default a true reset
* fix(ui): provider-compatible transports and race-free Talk catalog loads
* fix(ui): never resolve an unknown explicit Talk provider to the active one
* docs(talk): note Android relay readiness caveat for browser-only models
* fix(ui): keep the relay transport when switching Talk provider to Auto
* fix(ui): align section-ownership test and drop unused export after rebase
2026-07-28 17:38:15 -04:00
Peter Steinberger
d239a59d82
fix(ui): make Control UI ownership and permissions reliable ( #115364 )
...
* fix(ui): unify connection-owned gateway event dispatch
* fix(qa): keep hosted UI smoke evidence truthful
* fix(ui): make mobile navigation drawer an accessible modal
* refactor(ui): centralize settings search destinations
* fix(ui): own chat media resource lifecycles
* fix(ui): unify sidebar session scope ownership
* refactor(ui): remove obsolete navigation backdrop styles
* refactor(ui): isolate dashboard provider lease capabilities
* fix(ui): centralize gateway operator permissions
* style(ui): format gateway event regressions
* fix(ui): render live dashboard permissions immediately
* fix(ui): enforce approval grant authority
* fix(gateway): fence retired sockets after event gaps
* fix(ui): isolate sidebar gateway fixtures across shared workers
* test(ui): isolate singleton-sensitive browser suites
* fix(ui): retire stale catalog pagination on gateway reconnect
* fix(ui): restore drawer focus after native dialog dismissal
* fix(ui): seed drawer threads and preserve modal focus ownership
* fix(ui): isolate nested native drawer overlay lifecycle
* test(ui): prove isolated dashboard lease authorization
* fix(ui): bound settled managed image resources
* fix(ui): type native modal focus and shared test helper
* fix(ui): correct approval mock types and trim dead export
* fix(ui): keep settings section metadata private
* fix(qa): keep hosted coverage regression within lint limit
* refactor(ui): keep catalog presence in its session data owner
* fix(browser): regenerate bundled copilot runtime
* test(ui): split board lease authorization regressions
* fix(ui): snapshot gateway listener fanout without redundant spread
* fix(ui): bind chat media subscriptions to image lifetime
* fix(ui): extract overlay access lifecycle
* fix(ui): restore guarded media after Lit reconnection
* test(ui): localize board lease fixture title
* fix(ui): reuse system approval fixture labels
* test(ui): narrow managed media lifecycle source
* fix(ui): prevent retired board gateway clients from rolling back leases
* fix(ui): expose pairing to pairing-scoped operators
* fix(ui): preserve legacy device pairing access
* fix(ui): preserve responsive sidebar ownership
* fix(ui): preserve responsive navigation and prove media ownership
* fix(ui): retire revoked catalog and refresh pairing grants
* test(ui): align typed catalog fixtures with main
2026-07-28 16:42:05 -04:00
Peter Steinberger
5ae6e5fc58
fix(ui): order model picker by provider strength ( #115380 )
...
* fix(ui): improve model picker ordering
* fix(ui): preserve model picker provider width
* chore: leave model picker note to release flow
* fix(models): preserve unranked catalog order
2026-07-28 15:59:57 -04:00
Peter Steinberger
8574853375
feat(ui): make Memory settings a destination page with live overview and dreams ( #115383 )
...
* feat(ui): make Memory settings a destination page
* chore: drop changelog entry (release generation owns CHANGELOG.md)
* fix(ui): keep memory tab normalization private
2026-07-28 15:56:52 -04:00
Peter Steinberger
642befa179
feat(ui): swap three plain Lobsterdex palettes for balloon, ascii, and portal ( #115308 )
2026-07-28 14:28:02 -04:00
Peter Steinberger
c41ca078a6
refactor(ui): adopt @lit/task across remaining page surfaces ( #115274 )
...
* refactor(ui): adopt @lit/task across remaining page surfaces
* refactor(ui): keep approval history pagination explicit
* fix(ui): preserve task refresh ordering
2026-07-28 12:44:34 -04:00
Peter Steinberger
b2859cec4b
feat(ui): finish the Lobsterdex at 42 with wild variants, squish fix, and blink variance ( #115264 )
2026-07-28 12:03:16 -04:00
Peter Steinberger
58a3679c49
fix(ui): keep reconnects, browser tabs, and localized search consistent ( #115221 )
...
* fix(ui): fence stale gateway and browser lifecycles
* test(ui): restore history after agent tool navigation
2026-07-28 11:24:02 -04:00
Peter Steinberger
b3fc995e73
fix(ui): stop modal autofocus steal after the open animation ( #115168 )
...
* fix(ui): stop modal autofocus steal after the open animation
* test(ui-e2e): give expect.poll a CI-realistic deadline
2026-07-28 10:39:34 -04:00
Peter Steinberger
455e728533
refactor(ui): consolidate model configuration onto the Models page ( #115108 )
...
* refactor(ui): consolidate model defaults onto the Models page
* docs(ui): note busy-gate equivalence on the Models page controls
* fix(ui): render model behavior controls while providers load
* fix(ui): redirect the legacy General model scroll target to Models
* fix(ui): surface config autosave and apply workflow on the Models page
2026-07-28 09:31:09 -04:00
Peter Steinberger
2cdd1246ed
feat(ui): grow the Lobsterdex to 37 palettes with a golden mythic, deep links, and shiny dates ( #115179 )
...
* feat(ui): grow the Lobsterdex to 37 palettes with a golden mythic, deep links, and shiny dates
* fix(ui): keep wave-2 lobster overlays module-local
2026-07-28 08:59:51 -04:00
Peter Steinberger
0cb56ace62
fix(ui): harden browser, session, permissions, and media lifecycles ( #115110 )
...
* fix(ui): harden browser, session, and gateway lifecycles
* fix(ui): satisfy browser lifecycle and control UI CI gates
* fix(ui): satisfy type-aware browser and cron lint
* fix(ci): isolate model and UI test workloads
* fix(ui): reject superseded browser and session page races
* fix(ui): settle superseded background-tab refreshes
* fix(ui): reconcile committed navigation and terminal pages
* fix(ui): preserve canonical cron permission contracts
2026-07-28 05:48:35 -07:00
Peter Steinberger
053384fa01
refactor(ui): adopt @lit/task for async data lifecycle ( #115131 )
...
* refactor(ui): adopt @lit/task for async data lifecycle
- migrate chat diff/discussion, new-session discovery, and MCP app setup reads
- migrate usage, plugins, transcript/checkpoint, worktree, memory-import, and model-setup reads
- delete read-lane request counters, abort-controller epochs, and current-request predicates while retaining mutation epochs and keyed caches
* chore(ui): drop dead plugin search helper (knip)
* chore(deps): allowlist @lit/task as root UI-workspace dependency in knip
* fix(ui): preserve usage refresh lifecycle
* test(ui): source workboard fixture copy from en locale (raw-copy gate)
* test(ui): read workboard fixture copy via t() (typed locale access)
* style: format test-support imports
2026-07-28 08:37:47 -04:00
Peter Steinberger
699315e7d7
feat(ui): redesign Ask OpenClaw — mascot, shared surface, dockable panel ( #115123 )
...
* refactor(ui): share custodian chat surface
* feat(ui): add dockable custodian panel
* refactor(ui): drop write-only panel-close latch from custodian store
* feat(ui): demo custodian in mock gateway
* chore(ui): update raw-copy baseline for custodian strings
* fix(ui): clean custodian surface/page/mock lint debris
2026-07-28 08:05:38 -04:00
Peter Steinberger
7f37900bca
perf(ui): flip sessions instantly and drop redundant switch RPCs ( #115129 )
...
* perf(ui): flip sessions instantly and drop redundant switch RPCs
* chore: revert changelog edit (release generation owns CHANGELOG.md)
* test(ui): adapt ported switch e2e tests to split-suite helpers
* chore(ui): un-export internal CachedShortSession type (knip)
2026-07-28 06:25:25 -04:00
Peter Steinberger
3f209cf1b7
perf(ui): keep chat render state alive across session switches ( #115059 )
...
* perf(ui): keep chat render state alive across session switches
Retain bounded per-session chat items and virtualizer measurements, avoid redundant tool-card walks, and reduce markdown cache churn during rapid switching.
User-visible behavior: switching back to a session now restores its prior reading position while end-anchored sessions continue following the latest message.
* chore(ui): drop dead resetChatThreadPresentationState barrel re-export
2026-07-28 04:27:07 -04:00
Peter Steinberger
b6f8641c28
refactor(ui): consolidate gateway host/status onto the Gateway settings page ( #114971 )
...
* refactor(ui): move gateway host panel and connection status to the Gateway page
* test(ui): update e2e expectations for the Gateway settings page move
2026-07-28 04:24:29 -04:00
Peter Steinberger
54309a832a
feat(ui): expand the Lobsterdex with 14 palettes, lore tooltips, and a collection page ( #114959 )
...
* feat(ui): expand the Lobsterdex with 14 palettes, lore tooltips, and a collection page
* fix(ui): keep Lobsterdex view types internal
2026-07-28 02:22:00 -04:00
Peter Steinberger
add9205d1a
fix(ui): explain every channel setting and link its docs ( #114844 )
...
* feat(config): give shared channel settings help text
* fix(ui): space the settings tiers and stop repeating help on list items
* feat(ui): link each channel detail to its docs page
* test(ui): mirror production channel hints in the mock dev server
* docs: note the shared channel help inheritance for plugin authors
* fix(config): let a channel suppress shared help with an empty string
* chore(config): regenerate bundled channel metadata for the new WhatsApp hints
* fix(ci): check bundled channel metadata locally
* chore(release): keep changelog release-owned
* chore(release): keep changelog release-owned
* fix(ui): keep shared channel help contract-neutral
2026-07-28 05:25:58 +00:00