Commit Graph

2731 Commits

Author SHA1 Message Date
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
Peter Steinberger 5a234d61fa feat(ui): redesign dashboard chrome with tiny top bar and sidebar search (#101497)
* feat(ui): redesign dashboard chrome with tiny top bar and sidebar search

Move the sidebar toggle to the top bar as a macOS-style panel button
(collapse on desktop, drawer on tablet/mobile), move search into a
sidebar field that opens the command palette, and move the color-mode
toggle into the sidebar footer. Shrink the top bar to 44px, make the
terminal toggle a quiet ghost button, and drop the shadow plate behind
the macOS titlebar brand mark so the transparent mascot renders bare.
Adds the missing common.colorModeOption i18n key (theme buttons were
announcing the raw key) and removes the dead theme-orb styles.

* fix(ui): translate common.colorModeOption across locale bundles

The i18n sync initially recorded English fallbacks for the new key,
which the ships-no-recorded-English-fallbacks gate rejects. Regenerated
with a real translation provider; all 20 locales now carry translated
values (fallbacks=0).

* refactor(ui): unify the topbar sidebar toggle into one button

One button drives both modes: rail collapse on desktop and the
slide-over drawer at the ≤1100px breakpoint, decided via matchMedia
(with the legacy addListener fallback used elsewhere in bootstrap).
Replaces the previous pair of CSS-swapped buttons.
2026-07-07 10:57:45 +01:00
brokemac79 037412ec7d ci(mantis): add web UI chat proof lane (#100472)
* ci(mantis): add web ui chat proof lane

* ci(mantis): tighten web ui proof candidate parsing

* ci: tighten Mantis Web UI proof lane

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-07 10:54:35 +01:00
Vincent Koc 7e995cbf2b refactor(ui): remove stale helper exports (#101549) 2026-07-07 02:49:42 -07:00
Jason (Json) d8ffb1f307 fix(ui): keep microphone input settings usable on narrow screens (#101377)
Merged via squash.

Prepared head SHA: 17329d4f30
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-07-07 01:06:40 -06:00
Jason (Json) 521bf99f17 fix(ui): clear stale sidebar run state after chat final (#101293)
Merged via squash.

Prepared head SHA: 32a33eb4cd
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-07-07 01:04:00 -06:00
Jason (Json) e024eacf17 fix(ui): preserve login across same-origin gateways (#101352)
* fix(ui): scope device auth by gateway

* fix(ui): migrate legacy device auth storage

* test(ui): cover gateway device-token isolation
2026-07-07 00:51:19 -06:00
Vincent Koc 835e6a7532 refactor(ui): localize unused module exports (#101339) 2026-07-06 21:20:18 -07:00
Vincent Koc 62e5d4406d refactor(ui): remove unused module exports (#101262) 2026-07-06 20:20:06 -07:00
Peter Steinberger 0e3ce24cc8 fix(ui): resolve sidebar merge markers 2026-07-06 22:44:30 -04:00
Peter Steinberger 6a5726b808 feat(control-ui): drag sessions into split view with animated drop preview (#101191)
* feat(control-ui): drag sessions into split view with animated drop preview

* fix(i18n): translate split drop labels and pending upstream strings
2026-07-07 03:30:46 +01:00
Jvle f309c6054b fix(ui): preserve chat scroll when copying code (#100807)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-07 03:22:14 +01:00