* feat(chat): native session scroll-back with import-aware history paging
* fix(chat): page imported session history
* fix(chat): restore terminal import snapshots
* fix(chat): gate cli import resolver on ignore flag to stop history recursion
* fix(chat): correct scroll-back types and drop orphaned recent-messages reader
* fix(ui): explain grayed-out rows in the new-session folder picker
Disabled device rows now carry a reason tooltip (device offline vs. no
folder-browsing support), the admin-gated folder trigger says it needs an
admin connection, and dimmed dot-directories are labeled as hidden folders.
* chore(i18n): sync locale bundles for new-session picker tooltips
The nav column is a stacking context (z-index 10) painted below the sidebar
resizer divider (z-index 20), so fixed-position menus rendered inside the nav
could never escape it. Promote the three inline app-sidebar menus into the
popover top layer through a shared openclaw-menu-surface host, and fold the
existing session-menu and native-link-menu promotion copies into the same
promoteToPopoverTopLayer helper.
While the agent works with nothing streaming, the web chat's reading
indicator now skips the assistant avatar and drops the opacity fade.
The claw shadowboxes - jab, jab, cross - with the jaw snapping shut on
impacts, a pow star on the cross, and a seeded per-run fighting style
(orthodox, mirrored southpaw, fast flurry, rare haymaker). Reduced
motion disables all of it; direct threads and narrow layouts that hide
avatars keep their flat left edge.
* feat(ui): collapse completed turn work behind a worked-for rollup
* test(ui): add a completed work turn to the mock chat history
* fix(ui): keep search matches visible instead of folding them into the work rollup
* fix(ui): keep attachment-only final replies outside the work rollup
* chore(ui): translate workRun locale keys and cover renderWorkGroupSummary mock
* fix(ui): satisfy strict index access in the work rollup pass
* feat(ui): add a Create PR branch row with rate-limit staleness to session PR chips
* fix(ui): gate the Create PR row on a pushed branch
* improve(ui): gate the Create PR row on comparable pushed commits and count untracked work
* fix(ui): satisfy spread lint and align branch-row test fixtures
* chore(ui): translate Create PR branch row copy
* chore(ui): drop zh-CN retranslation churn from the aborted backfill
* fix(ui): guard branch diff stats against checkout diff drivers and fail closed without a default branch
* improve(ui): fold the new-session targets into click menus
The /new target controls become Cursor-style trigger menus instead of an
inline control row: a folder trigger opens the directory browser as a
floating panel (with editable path in its head for manual entry), and a
where trigger opens one menu holding Gateway/node selection plus the
worktree toggle with labeled base-branch/name fields; the agent picker
becomes a menu when several agents exist. Triggers show live labels
(folder basename, node name, a branch badge when a worktree is on), so
the row stays one quiet line even on phones. Menus reuse the shared
session-menu item styles and the chat composer's details/summary
dismissal contract (outside pointerdown, Escape restores trigger focus).
Node-bound drafts no longer show an inert worktree toggle; the item
disappears because managed worktrees are Gateway-only.
* fix(ui): harden the new-session trigger menus
Review fixes: the folder trigger no longer shows the Gateway workspace
basename for node sessions (an empty node folder means that node's
default directory); sibling menus now close on the details toggle so
keyboard-opened menus stay mutually exclusive; and phone menus anchor to
the trigger row full-width so a wide browser panel under a non-leftmost
trigger cannot overflow the viewport.
* fix(ui): keep filesystem roots visible in the folder trigger
folderDisplayName falls back to the raw path so picking '/' (or a drive
root) labels the trigger instead of leaving it blank.
* fix(ui): give the new-session menus the native-select keyboard contract
Opening a menu moves focus to its first item, ArrowUp/Down wrap through
the items (browser rows included), and Home/End jump to the edges,
restoring what the replaced native selects provided. Re-picking the
checked agent no longer resets the draft (the native select never fired
change for the same option).
* fix(ui): keep native key behavior in menu text fields
Menu arrow/Home/End navigation now ignores events from text inputs so
the browser path, base-branch (datalist), and worktree-name fields keep
their native caret and picker behavior.
* fix(ui): let typed paths apply without a directory listing
Admins on hosts without a working fs.listDir keep manual folder entry:
the browser head input tracks a draft path and Use this folder applies a
typed absolute path even when listing fails; shapeless fs.listDir
payloads render as an empty directory instead of crashing the render.
The folder menu also initializes browser state before the focus hook
captures updateComplete, so keyboard-opened menus focus their first row
as advertised.
* fix(ui): apply exactly the shown browser path
Use this folder now applies the head input's absolute path only; the
draft syncs to every listed directory, so browsing is unchanged while an
edited path can never lose to a stale listing.
* fix(ui): let the browser express host-default directories
Review fixes: a cleared path input now applies '' — the host's default
directory (workspace on the Gateway, home on a node) — restoring the
state the replaced clearable folder textbox could express, and directory
results no longer overwrite a path the user typed while the listing was
in flight. E2E covers clearing back to the node default.
* fix(ui): apply the requested directory during browser navigation
loadBrowser assigns the head input the destination it is fetching, so a
mid-flight Use this folder applies where the user is heading instead of
the directory they just left.
* fix(ui): compact large pasted text in composer
* fix(ui): turn large pasted text into compact composer attachments
* fix(ui): turn large pasted text into compact composer attachments
* Fix large paste composer CI
* Use translated restore label
* Fix large paste review findings
* Mark generated paste attachments by identity
---------
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
* feat(ui): auto-load older catalog transcript on scroll with a stable viewport
* fix(ui): surface the load-older fallback when auto-load is blocked on a short thread
* fix(ui): clamp oversized aggregated tool output in catalog transcripts
* fix(ui): stop catalog auto-pagination when an older read makes no progress
* fix(ui): continue catalog paging through advancing empty pages; exhaust only on a stalled cursor
* fix(ui): detect catalog cursor cycles to bound auto-pagination