Commit Graph

4087 Commits

Author SHA1 Message Date
Vincent Koc 9eee6181d7 fix(ui): serialize Control UI config writers (#116029) 2026-07-30 05:09:23 +08:00
Vincent Koc b7193cd3fc fix(ui): recover curated settings state (#116032) 2026-07-30 04:29:44 +08:00
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
Shakker 4849ec4982 fix: clear partial Talk startup state (#116067) 2026-07-29 21:08:21 +01:00
Shakker cae9a61f6d refactor: keep Talk reset internal 2026-07-29 21:08:21 +01:00
Shakker c1438475eb test: cover realtime Talk teardown 2026-07-29 21:08:21 +01:00
Shakker 8671148999 fix: isolate realtime Talk sessions 2026-07-29 21:08:21 +01: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
Peter Steinberger e0ab154e5e fix(ui): explain unavailable MCP tool catalogs (#115994)
* fix(ui): explain undiscovered MCP tools

* fix(ui): scope MCP discovery notices to the viewed connector
2026-07-29 15:12:08 -04: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
Peter Steinberger b240703cfc fix(ui): compact the macOS gateway picker menu (#115977)
* fix(ui): compact native gateway menu

* chore: leave changelog to release automation

* test: stabilize UI and CLI process checks
2026-07-29 14:42:18 -04:00
Vincent Koc e677b8cbc8 fix(ui): type terminal shadow focus checks 2026-07-30 02:19:21 +08:00
Peter Steinberger 777cfed85a feat(mac): hand off gateway-owned settings panes to the dashboard (#115999)
* feat(mac): hand off gateway-owned settings panes to the dashboard

Gateway-config Settings tabs (Channels, Skills, Cron Jobs, Threads,
Instances) now default to a native handoff page with an Open in Dashboard
deep link; a Debug toggle re-enables the legacy native panes. Adds an
openclaw:native-navigate host->shell event with generation-guarded URL
fallback, and lifts the dashboard route map + same-app path validation
into OpenClawKit for future iOS reuse. Exec Approvals stays native: the
Dashboard's host-native policy editor is read-only by contract.

* fix(mac): satisfy native-i18n inventory and type budget

* fix(mac): refresh native i18n source locations
2026-07-29 14:12:42 -04: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
Peter Steinberger b930ee055c fix(ui): preserve initials for missing user avatars (#115976)
* fix(ui): preserve initials for missing user avatars

* test(ui): prove missing avatar fallback in browser

* chore: defer avatar note to release workflow

* test(ui): stabilize avatar fallback browser proof
2026-07-29 13:34:36 -04:00
Vincent Koc 14ffd4393e feat(ui): add provider icons to coding catalogs (#115956) 2026-07-30 01:33:15 +08:00
Peter Steinberger b44890bf2d fix(sessions): recover deleted chats without endless retries (#115974)
* fix(sessions): recover deleted chats without lifecycle races

* fix(sessions): narrow deleted route commit keys

* test(sessions): isolate deleted-chat recovery regressions

* fix(sessions): recover chats after agent removal

* fix(sessions): fence recreated session deletion races

* fix(sessions): preserve filtered active conversations

* test(sessions): preserve canonical main during chat recovery

* test(ui): follow canonical agent channels route
2026-07-29 13:22:29 -04:00
Peter Steinberger d7d3fc5dad feat(ui): enable tool-loop detection from Labs (#115983)
* feat(ui): add tool loop detection lab

* docs(tools): mention loop detection lab
2026-07-29 13:21:52 -04:00
Vincent Koc a47d81e7b3 fix(ui): derive cron timezone suggestions (#115973) 2026-07-30 01:12:45 +08:00
Peter Steinberger c87e545c88 fix(ui): rename the Memory Palace browser to Memory Wiki and document it (#115954)
* fix(ui): rename the Memory Palace browser to Memory Wiki and document it

* refactor(memory-wiki): drop the old memory-palace module files

* docs: refresh generated docs map

* test(ui): align dream-diary hub-tab assertion with the wiki sub-tab id

* docs: describe memory wiki clustering behavior accurately

* docs(memory-wiki): record the wiki.overview rename decision at the registration site

* test(ui): query the Agents channels hub tab by tab role after the hub-tabs refactor
2026-07-29 12:51:37 -04:00
Peter Steinberger 5bfc65d7f4 refactor: remove 3,543 lines of redundant runtime and tests (#115961)
* refactor: remove 3,543 lines of redundant runtime and tests

* refactor: ratchet production environment variable budget
2026-07-29 11:43:41 -04:00
Peter Steinberger af717db39c feat(ui): add per-connector tool access to composer (#115907)
* feat(ui): per-connector tool access in composer menu

* fix(ui): harden tool access loading and dynamic keys

* fix(ui): harden tool access reads and catalog freshness

* fix(ui): invalidate tool catalog on connector edits

* test(ui): fix composer capability checks
2026-07-29 11:39:53 -04:00
Peter Steinberger 68a3ca740d fix(ui): harden chat and session interactions (#115967) 2026-07-29 11:39:10 -04: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
Vincent Koc 0570d53691 fix(ui): keep hide confirmation in viewport (#115928) 2026-07-29 22:51:08 +08:00
Peter Steinberger 53815217e9 fix(memory): session backfill drains and rolls back reversibly (#115926)
* fix(memory): complete reversible session backfill

* refactor(memory): split backfill lifecycle helpers

* fix(memory): break backfill lifecycle import cycle

* fix(memory): keep lifecycle contract exports minimal
2026-07-29 10:48:16 -04:00
Miorbnli 7e3e4f6cd9 fix(ui): do not report stopped channels as connected (#112518)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 10:47:10 -04:00
finallylly 25f1e70480 feat: add Asia/Shanghai to cron timezone suggestions (#65936)
* feat: add Asia/Shanghai to cron timezone suggestions

Adds Asia/Shanghai to the CRON_TIMEZONE_SUGGESTIONS list for users
in the Asia region who want to use their local timezone in cron schedules.

* fix(ui): preserve original cron contribution during main refresh

* fix(ui): suggest Asia/Shanghai for cron schedules

Preserve @finallylly original PR #65936; move its one-line IANA timezone suggestion to the current cron UI owner and cover the actual rendered Chromium datalist.

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 10:27:32 -04: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
loong954 f5959499a5 fix(ui): preserve Unicode in session key truncation (#109860)
* fix(ui): preserve Unicode in session key truncation

Replace raw .slice(0, 8) with truncateUtf16Safe for session key
truncation in usage overview fallback display.

* test(ui): add Unicode-safe session key truncation tests

Five cases verify truncateUtf16Safe replaces .slice(0,8) for session
key display in usage overview:
- short keys unmodified, ASCII truncation, surrogate pair straddling
  boundary, emoji within limit, exact-8-char keys

* test(ui): verify Unicode usage sessions in Chromium

Co-authored-by: 袁龙辉0668001277 <yuan.longhui@xydigit.com>

---------

Co-authored-by: 袁龙辉0668001277 <yuan.longhui@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 10:04:50 -04:00
Colin Johnson 306c02af57 feat(ui): preview session workspace images (#95956)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 09:22:46 -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
synth c0070d70ab fix(ui): muted theme text below WCAG AA contrast in webchat (#114586)
* fix(ui): raise muted theme text tokens to WCAG AA contrast

Secondary text using --muted/--muted-foreground measured 3.1-3.5:1 on
several bundled themes (issue #107299), below the 4.5:1 AA floor for
normal text. Nudges the offending hex tokens and adds a vitest guardrail
that parses base.css and asserts every text-on-surface token pairing in
every theme block stays >= 4.5:1 so future palette edits can't regress
this silently.

Closes #107299

* fix(ui): satisfy oxlint and noUncheckedIndexedAccess in contrast test

- Number.parseInt over global parseInt, ** over Math.pow, toSorted over sort
- Guard regex capture groups and indexed access under noUncheckedIndexedAccess

* test(ui): cover rendered theme contrast in Chromium

* test(ui): prove Skill Workshop mobile width in Chromium

* test(ui): stabilize deferred history prepend anchors

* test(ui): serialize rendered theme color diagnostics

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 08:26:10 -04:00
Peter Steinberger a49b553f08 feat(ui): add docs links to settings pages (#115874) 2026-07-29 08:11:41 -04:00
batmanscode f3b70d5902 fix(ui): include proxy credentials in manifest requests (#111053)
* fix(ui): include credentials in manifest requests

* test(ui): verify authenticated PWA manifest browser requests

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 08:10:36 -04:00
Vincent Koc 38abf500ba fix(update): stabilize cross-version dev upgrades (#115651)
* fix(e2e): stabilize cross-version Parallels upgrades

* fix(e2e): avoid inline macOS guest probes

* fix(e2e): detach Windows dev updates

* fix(e2e): detach macOS guest updates with Node

* fix(e2e): initialize skipped upgrade config

* fix(update): use partial clone for dev checkout

* fix(update): keep Windows dev checkouts clean

* fix(e2e): pin Parallels dev update targets

* fix(e2e): own Parallels gateway restarts

* fix(e2e): verify pinned Parallels checkouts

* fix(e2e): forward Parallels update budgets

* fix(e2e): use canonical provider auth choices

* chore: leave changelog to release automation

* test(ui): stabilize route waits on loaded runners
2026-07-29 19:52:34 +08:00
openclaw-mantis[bot] 6e782e021b chore(ui): refresh control ui locales (#115843)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-29 19:39:29 +08:00
xydigit-sj 7b34145e44 fix(ui): fall back to updateAvailable.latestVersion for handoff version verification (#112987)
* fix(ui): derive pending update expected version from updateAvailable fallback

* test(ui): verify managed update handoff after reconnect

* style(ui): format managed handoff browser regression

* test(ui): align managed update verification with gateway phases

* fix(ui): keep skill workshop within the mobile viewport

* test(ui): await sidebar route readiness after reload

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 07:28:14 -04:00
Peter Steinberger f27899181e feat(ui): add composer capability menu (#115800)
* feat(ui): composer capability menu with per-session overrides

* refactor(ui): keep chat render within lint ceiling

* fix(ui): preserve loaded capability overrides

* fix(ui): remove stale capability menu field

* fix(ui): gate capability menu on runtime-config readiness
2026-07-29 06:48:08 -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
Vincent Koc b6f70ea440 fix(setup): make Gemini recovery actionable (#115835) 2026-07-29 18:29:32 +08:00