Commit Graph

3765 Commits

Author SHA1 Message Date
Peter Steinberger cd5a5ecb4c fix(ui,gateway): make catalog sidebar sections drag-reorderable (#114074)
* fix(ui,gateway): make catalog sidebar sections drag-reorderable

* test(ui): split sidebar section-reordering cases under max-lines

* perf(ui): keep catalog section rendering out of startup bundle
2026-07-26 05:31:33 -04:00
Peter Steinberger 27293aa273 feat(ui): gateway subtitle in the sidebar footer identity card (#114059)
* feat(ui): show gateway subtitle in sidebar footer

* chore: keep CHANGELOG release-only

* test(ui): fix indexed-access type in sidebar gateway case

* perf(ui): trim footer subtitle startup bytes

* perf(ui): trim gateway footer strings

* perf(ui): re-record startup baseline for gateway footer

* perf(ui): re-record startup baseline from Linux build
2026-07-26 05:23:42 -04:00
ClawSweeper bfd6f2efdc feat: make working claw tricks rare surprises (#114025)
One deterministic special move on ~3% of runs, played once after a delay,
then back to the default loop; approval waits and reduced motion stay on
the default claw. Includes render-path test coverage for the wiring.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-26 04:43:57 -04:00
ClawSweeper 203ef71ca3 fix(ui): center running-task preview over link (#114069)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-26 01:39:30 -07:00
ClawSweeper af26c7ed72 fix(ui): keep chat run status in one assistant turn (#114039)
* fix(ui): unify active chat status

* fix(ui): preserve chat recap ordering

* fix(ui): re-render turn rows when embedded run status changes owner

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-26 04:09:08 -04:00
Peter Steinberger 8eafae4af7 fix(ui): recover from unknown selected agents and surface session-catalog failures (#114048)
* fix(ui): recover from unknown selected agents and surface session-catalog failures

* test(ui): split catalog request-error cases under max-lines
2026-07-26 02:42:59 -04:00
Peter Steinberger 1677058cf5 fix(ui): keep first prompt across gateway reconnects (#114042) 2026-07-26 01:46:56 -04:00
Peter Steinberger 2de58d408a Control UI: gateway-owned sidebar section order (#113930)
* feat(ui): gateway-owned sidebar section order with hover-only drag grips

* fix(ui): repair sidebar section order CI gates

* fix(protocol): keep sectionOrder optional for older gateways

Native Swift clients ship separately from gateways, so new clients must decode older gateway responses that omit sectionOrder.

* fix(ui): reconcile gateway section ordering with main

* fix(state): allow lazy tables in v5 maintenance

* refactor(ui): retire prefs session section order in favor of gateway-owned order

Supersedes #113948 by deleting the unreleased ui.prefs.sessionSectionOrder key and its browser plumbing. Gateway SQLite sidebar_sections remains the single canonical store.
2026-07-26 01:15:19 -04:00
Peter Steinberger 36404eaa3b fix(ui): dashboard widgets leave a gap below content and hover chrome blocks widget buttons (#114012)
* fix(ui): hug auto widget cards to content and compact board chrome into a top-left pill

* test(gateway): retry temp-dir cleanup in chat abort persistence suite to absorb ENOTEMPTY race

* fix(ui): strip board pill to move and menu on narrow widgets so the action corner stays widget-owned
2026-07-26 01:14:40 -04:00
Jesse Merhi c0d4cafbcc refactor(ui): extract wizard step controls into a shared component (#113733) 2026-07-26 14:20:35 +10:00
Peter Steinberger 5aef17205a fix(ui): add empty sidebar drop targets (#114005) 2026-07-25 21:02:58 -07:00
Peter Steinberger adfb59c19b feat(mac): dashboard gateway picker with in-place switching (#113965)
* feat(mac): add dashboard gateway switching

* feat(ui): add dashboard gateway picker

* docs(mac): document dashboard gateway picker

* fix(mac): harden gateway switching after review

* fix(ui): refresh gateway picker snapshots

* fix(mac): carry TLS pins through promotion and serialize gateway switches

* style(ui): satisfy lint rules in gateway picker files

* fix(ui): tolerate absent context in gateway picker pane props

* chore(ci): refresh generated inventories

* style(mac): satisfy Swift CI checks

* refactor(mac): drop dead GatewayEndpointStore.requireConfig

* perf(ui): own gateway capability in the chat chunk

* chore(ui): keep gateway capability factory module-private
2026-07-25 20:57:28 -07:00
Peter Steinberger 852a686a1b feat(chat): restore prompt image attachments on rewind/fork (#113945)
* feat(chat): restore prompt image attachments on rewind/fork

* chore(i18n): refresh native source inventory anchors

* fix(gateway): restore media-store images on rewind/fork

* fix(gateway): bound and dedupe rewind media reads

* fix(sessions): bound inline editor attachments in message cut

* fix(ui): align restored attachment cap with gateway 5 MiB limit

* fix(gateway): dedupe rewind media refs by resolved id

* fix(sessions): lint-safe __openclaw access in message cut
2026-07-25 20:32:16 -07:00
Peter Steinberger 8f3f746b2f test(ui): stabilize drag-managed group e2e (#113989) 2026-07-25 20:08:48 -07:00
Peter Steinberger 71cb266c1f fix(ui): keep Coding sessions visible after reconnect (#113981)
* fix(ui): preserve scoped session hydration

* chore: leave changelog to release automation

* build(ui): refresh startup budget baseline
2026-07-25 19:56:50 -07:00
Peter Steinberger 77b44473c7 fix(ui): match plugins by package name (#113933) 2026-07-25 19:48:24 -07:00
Peter Steinberger 3807591ff4 build(lint): adopt stylelint for Control UI css templates and stylesheets (#113971) 2026-07-25 19:13:46 -07:00
Peter Steinberger f90cef67c8 feat(ui): drag custom sidebar groups between built-in session zones (#113948)
* feat(ui): drag custom sidebar groups between built-in session zones

* test(ui): remove stale split ratio fixture

* perf(ui): raise startup budget baseline for session-section ordering pref
2026-07-25 19:11:25 -07:00
Peter Steinberger 98542bc55b refactor(ui): inline stroke attributes via shared strokeIcon shell (#113952) 2026-07-25 19:08:17 -07:00
Peter Steinberger a328e900fd fix(ui): keep sidebar selection on archived sessions and replace the composer with an archived notice (#113882)
* fix(ui): keep sidebar selection on archived sessions and replace composer with archived notice

* fix(ui): narrow lineage-row lookup and restructure fallback projection scan

* fix(ui): publish routed lineage row so cold-loaded archived sessions replace the composer

* chore(ui): drop unused mergeChildSessionRows export
2026-07-25 19:07:25 -07:00
Peter Steinberger c7fcfd3482 fix(ui): gate chat sidebar mutations (#113947) 2026-07-25 19:01:32 -07:00
Peter Steinberger 25495ad0be fix(ui): focus scoped windows for notification clicks (#113951) 2026-07-25 19:00:50 -07:00
Peter Steinberger d1aec7d65f fix(control-ui): drop stale Create PR row after merge and surface PR chips mid-turn (#113944)
* fix(control-ui): drop stale Create PR row after merge and surface PR chips mid-turn

* test(gateway): split session-PR branch tests to satisfy max-lines

* test(gateway): drop unused GitContext export from test support
2026-07-25 18:51:07 -07:00
Peter Steinberger 4f17139bfb test(ui): align sidebar end-to-end coverage with current navigation (#113942)
* test(ui): align sidebar e2e with current navigation

* test(ui): wait for hydrated sidebar agent switcher
2026-07-25 18:40:36 -07:00
Peter Steinberger 9349a0e880 fix(ui): give running tasks priority in the background-tasks rail (#113928) 2026-07-25 18:30:03 -07:00
Peter Steinberger 467d1d1f11 fix(ui): stop claiming a gateway restart when toggling dreaming (#113960)
The dreaming toggle writes `plugins.entries.<memoryPluginId>.config.dreaming.enabled`,
which matches the `{ prefix: "plugins", kind: "hot" }` reload rule in
src/gateway/config-reload-plan.ts, so `restartGateway` stays false and no restart
ever happens. The confirmation modal nonetheless showed a red danger callout
promising a Gateway restart that "may temporarily interrupt chats, automations,
and connected channels".

Replace it with an accurate confirmation that states the real consequence:
dreaming is global, so the single managed cron sweep it schedules covers every
configured agent workspace (resolveMemoryDreamingWorkspaces iterates all agent
entries), not just the agent whose page the panel is on. Copy is now
direction-aware, since turning it off is the consequential direction.

Renames the i18n block from `dreaming.restartConfirmation` to
`dreaming.toggleConfirmation` and the component from `restart-confirmation.ts`
to `toggle-confirmation.ts`; memory-panel was its only caller. No runtime or
server behavior changes.
2026-07-25 18:29:10 -07:00
Peter Steinberger 360fe2317c feat(ui): person grouping and people filter in the sidebar catalog view menu (#113943) 2026-07-25 18:17:12 -07:00
Peter Steinberger 33876991e7 fix(ui): stop false critical alerts for the selected session (#113932) 2026-07-25 18:12:05 -07:00
Peter Steinberger fb26903d6c feat: add flexible multi-sidebar chat layout (#113712)
* feat(ui): add persisted sidebar layout model

* feat(ui): render flexible chat sidebar columns

* test(ui): align board sidebar fixture type

* fix(ui): preserve sidebar panels across responsive layout

* fix(ui): satisfy sidebar CI ownership and performance

* test(ui): derive discussion helpers from panel config

* test(ui): mount session rail through its registry

* fix(ui): preserve sidebar state across projections

* style(ui): format sidebar state fixes

* fix(ui): satisfy sidebar lint constraints

* refactor(ui): break sidebar layout import cycle

* fix(ui): stabilize sidebar panel rendering

* fix(ui): keep the narrow sidebar grid off for an empty layout

The two-row narrow grid reserved a panel row even with no sidebar panel open, halving the primary surface height on every default mobile chat pane.

* fix(ui): lazy-load chat sidebar region

* style(ui): format rebased chat state page

* chore(ui): raise sidebar startup baseline

* fix(ui): preserve sidebar move and resize state

* chore(ui): align sidebar startup baseline

* chore(ui): refresh sidebar startup baseline

* test(ui): register discussion element in isolated test

* fix(ui): persist the dragged panel as the collapsed active panel

Drag moves activated the panel in its destination column but left the separate persisted collapsed-mode selection stale, so the narrow layout foregrounded the wrong panel after a move and the stale choice survived reload.

* fix(ui): preserve resolved canvas URL in detail panel
2026-07-25 17:45:29 -07:00
Colin Johnson de9ed64c29 feat(talk): enable GPT Live with Codex OAuth (#113354) 2026-07-25 20:41:27 -04:00
Peter Steinberger 34ee065bf3 fix(ui): render close icon in image lightbox header (#113913) 2026-07-25 17:16:29 -07:00
Peter Steinberger 52c11daed6 fix(control-ui): renew canvas capability so agent widgets keep rendering (#113702)
* fix(control-ui): renew canvas plugin surface capability so widgets keep loading

* fix(control-ui): scope canvas capability renewal to connections

* test(control-ui): cover rotated capability on a newly mounted widget

* fix(control-ui): bind canvas URLs to mounted frames

* fix(control-ui): keep reported widget heights across capability rotation

* fix(control-ui): keep canvas lease type private

* test(gateway): prove Canvas capability rotation over HTTP

* perf(control-ui): lazy-load canvas surface renewal

* chore(control-ui): raise startup budget baseline for canvas renewal lease

* fix(control-ui): satisfy promise-executor lint in gateway store test
2026-07-25 16:14:20 -07:00
Peter Steinberger 4d8e89fd5c fix(ui): keep grouped thread controls accessible (#113867)
* fix(ui): preserve sidebar actions for grouped threads

* test(ui): fix direct chat route CSS regression proof
2026-07-25 15:21:18 -07:00
Peter Steinberger a9f1ed885b fix(ui): align pin-editor menu checkmarks into a leading check column (#113848) 2026-07-25 15:13:30 -07:00
Peter Steinberger 81d9d1a1f4 feat: announce critical session health beyond the rail and teach companion delegation (#113819)
* feat(agents): teach Control UI companion usage

* feat(gateway): announce critical observer health

* test(ui): cover critical observer notice flow

* fix(ui): wire critical notice strings to real i18n keys

* fix(ui): complete session row literal in notice test

* perf(ui): lazy-load critical observer notice off the startup chunk

* test(ui): capture post-navigation e2e artifact
2026-07-25 14:46:12 -07:00
Peter Steinberger ce5ab8adb8 refactor(gateway): remove dead sessions.observer.ask rpc (#113791)
* refactor(gateway): remove dead sessions.observer.ask rpc

* docs: record btw and companion contract split

* fix(gateway): unexport observer model sanitizer after ask removal
2026-07-25 14:44:02 -07:00
ClawSweeper 7550f2edc9 fix(ui): keep chat table labels readable and summaries separated (#113865)
* fix(ui): improve chat markdown table layout

* test(package): restore Control UI fixture dependencies

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 14:35:15 -07:00
ClawSweeper cf1bafae00 fix(ui): space coding session groups (#113840)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 14:16:00 -07:00
Peter Steinberger 0b2b2c3209 fix(ui): quiet sidebar catalog headers — hover-reveal actions, collapsed-only counts, grouping view menu (#113798)
* fix(ui): quiet sidebar catalog headers — hover-reveal actions, collapsed-only counts, grouping view menu

* test(ui): hover catalog header before opening its view menu in e2e
2026-07-25 13:36:39 -07:00
Peter Steinberger a7d194ac74 feat(ui): unify new-thread draft and incognito into one visibility control (#113799) 2026-07-25 13:06:37 -07:00
Peter Steinberger eb555bd033 fix(ui): respect agent-owned model fallbacks (#113812)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 12:45:30 -07:00
Peter Steinberger b9ec38a720 fix(ui): resolve undefined --panel-2 token and harden the theme-token guard (#113776)
The skills page ClawHub verdict callout referenced var(--panel-2), which
is defined nowhere, silently dropping its background; use the canonical
--panel-strong tier. Extend base-theme-tokens.node.test.ts to every
alias name this bug class has produced (--success/--warning/--panel-2
included) and scan all of ui/src including TS inline styles and Lit css
templates, not just the styles directory. Codify the real spacing-scale
policy in base.css: settings surfaces use --space-*, elsewhere raw px is
grandfathered and migrates opportunistically.
2026-07-25 11:36:30 -07:00
Peter Steinberger 8b5337caf8 refactor(ui): split chat state container (#113780)
* refactor(ui): split chat state container

* refactor(ui): keep lightbox helper private
2026-07-25 11:23:44 -07:00
Peter Steinberger 6277c35d9a fix(ui): restore one-of skill binary setup and installation (#113767)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 11:01:25 -07:00
openclaw-mantis[bot] 81ea782ca5 chore(ui): refresh control ui locales (#113184)
* chore(ui): refresh control ui locales

* fix(ui): translate external session label

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 10:37:42 -07:00
Peter Steinberger 916625eef2 fix(ui): show configured primary model in general settings (#113769)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 10:37:08 -07:00
Peter Steinberger 1a2252e1a7 fix(ui): keep cron history matched to the latest request (#113765)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 10:30:32 -07:00
Peter Steinberger f6e8446e55 fix(ui): generalize external session label (#113759) 2026-07-25 10:08:44 -07:00
Peter Steinberger e279076010 fix(ui): carapace follow-ups — embed font stacks, data-theme-resolved, undefined status tokens (#113724)
* feat(ui): publish carapace embed font stacks to MCP apps

Adopt the carapace embed contract's sandbox-safe font stacks: publish
--font-sans for the first time and switch --font-mono from the host's
JetBrains-led token to the embed mono stack. Both are static, system-
resolvable values byte-identical to carapace candidate/embed.css, since
the sandbox font-src policy silently drops brand faces.

* feat(ui): emit data-theme-resolved alongside theme attributes

Carapace CSS selects on [data-theme-resolved]; keep it in lockstep with
data-theme-mode at boot (index.html IIFE) and on every runtime theme
change (bootstrap publish path). Rename applyStartupPresentation to
applyThemePresentation: it runs on every theme change, not just startup.

* fix(ui): resolve undefined --success/--warning tokens and drop dead hex fallbacks

--success and --warning were never defined (real tokens: --ok/--warn),
so sites with literal fallbacks rendered off-palette one-off colors and
sites without them silently dropped declarations (invalid color-mix in
the chat sidebar warn banner). Map all uses to the semantic tokens
across board, chat sidebar/layout, layout, and components styles, and
strip the stale dead var() hex fallbacks in these global stylesheets.
Code-syntax palette hexes in the file view are documented as deliberate.
2026-07-25 09:32:56 -07:00
Peter Steinberger 1a11f5394e refactor(ui): split workboard view (#113730) 2026-07-25 08:29:39 -07:00