Commit Graph

3828 Commits

Author SHA1 Message Date
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
Peter Steinberger bab4b2973a refactor(ui): split config view panels (#113715) 2026-07-25 08:28:40 -07:00
Peter Steinberger f808147f62 refactor(ui): split chat thread projection (#113714)
* refactor(ui): split chat thread projection

* refactor(ui): tighten chat thread module boundaries

* refactor(ui): type chat stream grouping locally
2026-07-25 08:28:02 -07:00
Peter Steinberger 4032ae5247 fix: preserve repeated messages while chat history reloads (#113690)
* fix: preserve repeated messages while chat history reloads

* fix: reconcile repeated chat turns by authoritative identity

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 08:18:11 -07:00
Peter Steinberger a95486cefc feat: session rail with read-only session companion in Control UI chat (#113698)
* feat(protocol): add session companion schemas

* feat(gateway): add session companion service

* feat(gateway): expose session companion rpc

* fix(gateway): harden companion runtime limits

* test(gateway): fix companion type assertions

* test(gateway): align companion test target

* feat(ui): replace observer HUD and side chat with session rail

* docs: session rail companion for control ui

* test(ui): align session rail client mock

* fix(ui): drop stale chat search import

* fix: satisfy session companion lint contracts

* refactor(gateway): isolate companion state contract

* fix(ui): keep session rail reachable while idle

* fix(agents): clamp derived openai prompt cache keys at boundary

* fix(ai): clamp chatgpt responses session_id affinity header

* fix(ci): align session companion branch gates

* fix(ui): require run id for sessionless terminal chat events

* fix(agents): scope internal run events to transcript

* chore: revert changelog edit (release generation owns changelog)
2026-07-25 08:14:32 -07:00
Peter Steinberger 4acf03fce6 fix(ui): restore Control UI theme colors (#113726)
* fix(ui): use canonical theme tokens

* chore(ui): leave release notes to release prep
2026-07-25 08:09:34 -07:00
Peter Steinberger c1987081c7 fix(ui): drop the sidebar agent menu below its card (#113719) 2026-07-25 07:51:09 -07:00
Peter Steinberger 35ce322a6c fix: reconnect after browser gateway handshake errors (#113689)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 06:59:44 -07:00
Peter Steinberger fdc8d472c7 fix(ui): align shadow-DOM token fallbacks with real token values (#113684)
Shadow-DOM components carried fallback colors that never matched the
actual tokens: panel-tab-strip fell back to teal #4ec9a8 for the coral
--accent, resizable-divider to Bootstrap blue #007bff, and --border to a
generic #333. Align all fallbacks with the claw-family values in
styles/base.css so token-less rendering matches the product palette.

Also document the intentionally dark image-lightbox chrome and the
terminal theme's hand-mirrored token values, and regenerate the drifted
values in ui/docs/design-system/color-tokens.md (--muted, --muted-strong,
--primary, --danger, --info, light status colors) from base.css truth.
2026-07-25 06:48:49 -07:00
Peter Steinberger d170459c70 refactor(ui): reactive controller consolidations (#113647)
* refactor(ui): consolidate dock panel layout

* refactor(ui): centralize realtime camera lifecycle

* refactor(ui): centralize async gateway scopes

* refactor(ui): centralize stream auto-follow

* refactor(ui): centralize dropdown menu lifecycle

* Revert "refactor(ui): centralize async gateway scopes"

This reverts commit 04f120b0e2.

* fix(ui): align controller refactor checks
2026-07-25 06:39:50 -07:00
Peter Steinberger 14eaedc40e fix(ui): give run state its own color instead of brand red (#113688) 2026-07-25 06:30:22 -07:00
Peter Steinberger a2acc8a755 fix(ui): keep subagent details in task panel (#113671) 2026-07-25 06:13:06 -07:00
Peter Steinberger d56a270ffc fix(ui): keep the sidebar run indicator on the left (#113645) 2026-07-25 06:04:05 -07:00