Commit Graph

3062 Commits

Author SHA1 Message Date
Peter Steinberger
c96163b6ca refactor(ui): drop the divider line above the sidebar More section (#102531) 2026-07-09 09:25:08 +01:00
Peter Steinberger
5c3c5c0ee4 feat(ui): redesign sessions page with overview tiles, kind avatars, and context meters (#102523)
The Control UI sessions roster now leads with operator telemetry: overview
tiles (sessions / live / unread / tokens), per-kind row avatars with a live-run
dot, compact token values with context-usage meters (ok/warn/danger at
65%/85%), initial-load skeleton rows, and icon-led empty states. Stale token
snapshots render as ~approximations with a neutral meter and never drive
warning tones, matching the chat composer convention; the overview token sum
counts only known snapshots (~ when partial, n/a when none). Label chips
ellipsize instead of overflowing sticky columns; <=500px drops the avatar to
preserve the key column budget.

Closes #102517
2026-07-09 09:19:03 +01:00
Peter Steinberger
7e0b67d7ea fix(ui): mark the active split pane with a focus ring instead of offset accent lines (#102511) 2026-07-09 09:16:39 +01:00
Peter Steinberger
7698783037 perf(test): reuse session layout browser 2026-07-09 04:06:43 -04:00
Peter Steinberger
18b24edea6 perf(test): run session layout viewports concurrently 2026-07-09 03:50:40 -04:00
Peter Steinberger
be65173baa fix(ui): remove duplicate OpenClaw brand mark from the macOS app titlebar (#102497)
The sidebar brand row (logo + wordmark) returned in 8295a12a83 but the
macOS-only titlebar mark from #100648 stayed, so the Mac app showed the
claw icon twice. Delete the sidebar-native-brand element and its
CSS gate; the sidebar brand row is the single brand surface and the
native titlebar strip holds only the traffic lights.
2026-07-09 08:23:55 +01:00
Peter Steinberger
67630e8973 feat(ui): make the sidebar resizable (#102491)
* feat(ui): make the sidebar resizable

* chore: defer release notes to release automation
2026-07-09 08:18:56 +01:00
Peter Steinberger
ea4e005008 fix(ui): unify split-view controls in one toolbar row (#102492)
* fix(ui): unify split-view toolbar

* chore: remove release-owned changelog entry
2026-07-09 08:17:35 +01:00
Peter Steinberger
5f91f6c958 fix: collapse sidebar after returning from drawer layout (#102463)
* fix(ui): collapse sidebar after drawer resize

* chore: defer sidebar release note
2026-07-09 07:42:17 +01:00
Peter Steinberger
6620aba25a fix(ui): close session sort menu on second click (#102448)
* fix(ui): toggle session sort menu

* chore: defer session menu release note
2026-07-09 07:23:00 +01:00
Peter Steinberger
aabb8e4a3c test(ui): lock theme mode cycling (#102455) 2026-07-09 07:22:51 +01:00
Peter Steinberger
5533d979d4 feat: add follow-up task suggestions (#102422)
* feat(tools): add follow-up task suggestions

* chore: leave changelog to release flow

* fix(tools): add task suggestion display metadata

* fix(tools): update task suggestion display snapshot

* docs: format task suggestion tool table

* test(gateway): expect compaction worktree workspace

* test(gateway): preserve configured compaction workspace

* fix(ui): translate task suggestions
2026-07-09 06:30:01 +01:00
zw-xysk
57db713ff7 fix(ui): keep clampText/truncateText surrogate-safe at emoji boundaries (#102225)
* fix(ui): keep clampText/truncateText surrogate-safe at emoji boundaries

clampText and truncateText in format.ts used String.prototype.slice(0, N)
to truncate user-visible text. When the truncation boundary falls inside
a UTF-16 surrogate pair (emoji, CJK extended, etc.), the resulting
string contains a dangling surrogate that browsers render as U+FFFD (�).

Replace .slice(0, ...) with truncateUtf16Safe(...) which skips past
incomplete surrogate pairs so the truncation point always falls on a
code-point boundary.

Affected UI surfaces: markdown rendering, command descriptions, skill
summaries, exec-approval rules, tool-stream output previews.

Add surrogate-safe truncation test cases for both functions using a
real emoji at the exact truncation boundary.

* test(ui): tighten UTF-16 truncation coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 04:46:36 +01:00
wings1029
1825c9f890 fix: keep emoji intact at remaining text truncation boundaries (#101754)
* fix: keep emoji intact at remaining text truncation boundaries

Replace .slice(0, N) with truncateUtf16Safe() in five remaining
user-visible text truncation sites that were missed by earlier
UTF-16 safety sweeps:

- restart.ts: restart reason text (2 sites)
- chat-composer.ts: reply target text preview
- chat-thread.ts: thread text preview + message text extraction

All sites truncate user-generated content where emoji or other
supplementary-plane characters could produce lone surrogates.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: complete UTF-16-safe restart and chat boundaries

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 04:02:08 +01:00
Shakker
9d7a6b5da6 fix: focus composer when typing (#102210) 2026-07-08 15:50:40 +01:00
Shakker
fc05a8103b fix: restore translated docs tooltip (#101017) 2026-07-08 14:51:26 +01:00
Shakker
d9e44714e6 fix: preserve theme mode cycling 2026-07-08 14:51:26 +01:00
Shakker
43bcd9ab3e fix: normalize terminal availability 2026-07-08 14:51:26 +01:00
Shakker
8190b3bd16 fix: align sidebar branding controls 2026-07-08 14:51:26 +01:00
Shakker
dc6550d6e5 fix: restore Control UI topbar and breadcrumbs 2026-07-08 14:51:26 +01:00
vyctorbrzezowski
8295a12a83 improve(ui): move shell controls into side rails 2026-07-08 14:51:26 +01:00
Momo
fdc98242a1 fix(ui): keep Workboard detail drawer actions in parity (#101658)
* Fix Workboard detail action parity

* test(ui): cover Workboard detail drawer actions

* fix(ui): satisfy Workboard action lint
2026-07-08 10:25:42 +08:00
Vincent Koc
9dbb1ed3d2 refactor(deadcode): localize control ui declarations (#101894) 2026-07-07 15:34:09 -07:00
Vincent Koc
d563101a82 refactor(deadcode): localize test and tooling helpers (#101875) 2026-07-07 13:45:26 -07:00
Vincent Koc
7ff3f2dbf9 refactor(deadcode): localize UI and script symbols (#101858) 2026-07-07 11:55:57 -07:00
Peter Steinberger
6235344006 fix(ui): stop flashing the login gate on dashboard load when credentials are stored (#101849)
First connects backed by stored auth (URL/session token, password, or an
approved device token) now paint a small wiggling OpenClaw mark (delayed
fade-in, reduced-motion aware) until the hello resolves. The login gate
still owns credential-less first opens, rejected credentials, and manual
gate submissions.

Closes #101847
2026-07-07 19:40:30 +01:00
Peter Steinberger
dd228d5f3c improve(ui): restyle connection-lost pill as neutral status surface (#101844) 2026-07-07 19:20:31 +01:00
Peter Steinberger
41cae5c8cf fix(ui): refresh raw-copy baseline 2026-07-07 14:19:07 -04:00
Peter Steinberger
6683a8635e improve(ui): soften idle voice button ring in the chat composer (#101843)
The idle Talk mic button used a full-strength accent ring that visually
competed with the recording (stop) state. Mute the idle ring to 40%
accent and ramp hover to 70% so idle -> hover -> recording escalates.

Formatting proof: oxfmt --check clean on ui/src/styles/chat/layout.css
on Testbox tbx_01kwyvx4pbdmb3yhjff6gvzvny (worktree has no node_modules,
so the format hook cannot run).
2026-07-07 19:15:39 +01:00
Peter Steinberger
525f58e9c3 test(ui): run responsive browser cases concurrently 2026-07-07 14:09:01 -04:00
Peter Steinberger
21f251220f feat(ui): redesign gateway connection-lost banner as floating pill (#101812) 2026-07-07 19:00:29 +01:00
Shakker
4db63820ee refactor: preserve wrapped file preview performance 2026-07-07 18:39:30 +01:00
Shakker
f7e0ebbf34 fix: avoid duplicate file preview autofocus 2026-07-07 18:39:30 +01:00
Shakker
f8ebaf5225 test: cover virtual file preview behavior 2026-07-07 18:39:30 +01:00
Shakker
476017d775 fix: stabilize virtual file preview scrolling 2026-07-07 18:39:30 +01:00
咸士山 0668001391
c20abcbf01 perf(ui): add virtual scrolling to file preview modal code viewer 2026-07-07 18:39:30 +01:00
Shakker
70de9ff20b fix: keep debug and logs on top-level routes (#100928) 2026-07-07 16:53:48 +01:00
Shakker
598a6ff22c test: update settings sidebar route expectation 2026-07-07 16:53:48 +01:00
Shakker
c3f6d8a463 test: cover settings routes through compiled router 2026-07-07 16:53:48 +01:00
Shakker
9d15544038 fix: use configured Control UI base path at startup 2026-07-07 16:53:48 +01:00
vyctorbrzezowski
2508fb4832 improve(ui): propose settings route cleanup 2026-07-07 16:53:48 +01:00
Vincent Koc
3d206140f3 refactor: localize internal implementation constants (#101758) 2026-07-07 08:34:13 -07:00
Peter Steinberger
87fe266c5e fix: preserve emoji at remaining bounded-text edges (#101711)
* fix: keep remaining text bounds UTF-16 safe

Co-authored-by: ben.li <li.yang6@xydigit.com>
Co-authored-by: 0668001336 <wang.lizhang@xydigit.com>
Co-authored-by: Alix-007 <li.long15@xydigit.com>

* docs: credit bounded Unicode fixes

* test: update UTF-16 browser import boundary

* chore: leave Unicode note to release changelog

---------

Co-authored-by: ben.li <li.yang6@xydigit.com>
Co-authored-by: 0668001336 <wang.lizhang@xydigit.com>
Co-authored-by: Alix-007 <li.long15@xydigit.com>
2026-07-07 15:48:21 +01:00
Vincent Koc
c8d95da14c refactor: localize file-private exports (#101701) 2026-07-07 06:57:19 -07:00
Peter Steinberger
a7faec8ca1 fix(gateway): support native Windows exec approvals (#101669)
* fix(gateway): support native Windows exec approvals

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>

* chore: defer changelog entry to release

* test: use tracked approvals temp directories

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-07 14:50:59 +01:00
Peter Steinberger
176fee5d07 fix: prevent garbled emoji at remaining text limits (#101685)
* fix: keep remaining bounded text UTF-16 safe

Co-authored-by: 0668000787 <ma.weibin@xydigit.com>
Co-authored-by: ben.li <li.yang6@xydigit.com>
Co-authored-by: 廖石荣 0668000909 <liao.shirong@xydigit.com>
Co-authored-by: 陈志强0668000989 <chen.zhiqiang1@xydigit.com>

* test: use tracked prompt template fixture

---------

Co-authored-by: 0668000787 <ma.weibin@xydigit.com>
Co-authored-by: ben.li <li.yang6@xydigit.com>
Co-authored-by: 廖石荣 0668000909 <liao.shirong@xydigit.com>
Co-authored-by: 陈志强0668000989 <chen.zhiqiang1@xydigit.com>
2026-07-07 14:49:15 +01:00
Shakker
e94fde2919 refactor: remove obsolete chat display mocks (#101682)
Related: #101647

## What Problem This Solves

Removes stale Control UI test mocks that modeled helper exports no longer exposed by the chat display module.

## Why This Change Was Made

The chat message tests no longer reach the display module, so their mock was removed. The chat view tests retain only the fallback asset mock and exercise the canonical avatar helpers directly.

## User Impact

No user-visible behavior change. Tests now reflect the current module ownership without duplicating avatar logic.

## Evidence

- Focused Testbox run: 2 files, 209 tests passed.
- Testbox: `tbx_01kwyatxdvb64ncvbn9ertg6fa`
- Actions run: https://github.com/openclaw/openclaw/actions/runs/28868305075
- `git diff --check`: passed.
- Codex autoreview: no actionable findings.
2026-07-07 14:12:33 +01:00
Vincent Koc
60f0749b7f refactor(ui): remove duplicate helper paths (#101647) 2026-07-07 05:21:29 -07:00
Vincent Koc
2ba622ca30 refactor(ui): trim unused control UI helpers (#101632) 2026-07-07 04:55:28 -07:00
Peter Steinberger
395fbb8eb6 fix(ui): send approvals past busy chat queue (#101532)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-07 10:59:16 +01:00