Commit Graph

5476 Commits

Author SHA1 Message Date
Sasan 6aced3350d fix(ui): Model Providers usage cards stay empty after a failed usage.status (#120301)
* fix(ui): recover provider usage after transient gateway failures

Keep failed provider-usage Results cold across Models and Usage direct and preloaded paths. Preserve canonical Gateway lifecycle ownership, request epochs, and route provenance.

Co-authored-by: Sasan Sotoodehfar <sasan1200@gmail.com>

* test(ui): shrink provider assertion safety baseline

Drop the obsolete grandfathered non-null assertion after moving provider probe-result policy into its owner.

Co-authored-by: Sasan Sotoodehfar <sasan1200@gmail.com>

* test(ui): tolerate browser font geometry rounding

Match existing chat-layout two-pixel renderer tolerance on both completed-work spacing boundaries.

Co-authored-by: Sasan Sotoodehfar <sasan1200@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-21 11:59:55 -07:00
Ayaan Gazali 2213d569ce fix(ui): clear terminal session activity indicators (#120327)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-21 11:52:00 -07:00
SunnyShu 9a0e11df06 fix(ui): reach identity-menu footer controls with keyboard (#122066)
* fix(ui): restore identity menu footer keyboard navigation

Co-authored-by: SunnyShu0925 <shu.zongyu@xydigit.com>

* test(ui): synchronize identity menu hide lifecycle

* test(ui): keep identity keyboard proof in one menu lifecycle

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-21 11:48:36 -07:00
Josh Avant ccbfa6c3a3 feat(ui): explain decision receipts in Activity (#126007)
* fix(audit): project safe decision receipt displays

* docs(agents): preserve audit display privacy

* fix(ci): satisfy audit receipt guardrails
2026-08-21 11:33:32 -07:00
Peter Steinberger 2bd6efb919 fix(ui): restore editable map-valued settings (#127336) 2026-08-21 11:13:21 -07:00
Peter Steinberger 7d70895ba3 perf(ui): skip video pacing during normal browser tests (#127313) 2026-08-21 10:59:07 -07:00
Peter Steinberger f9b5693612 fix(ui): retire stale plugin lifecycle feedback (#127273)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 10:32:36 -07:00
Onur Solmaz 1319e1e606 fix(providers): report request acceptance consistently (#126028)
* fix(providers): restore provider acceptance lifecycle

* fix(providers): cancel streams on acceptance failure

* test(amazon-bedrock): split stream lifecycle coverage

* refactor(providers): keep acceptance lifecycle private

* refactor(providers): make acceptance observation synchronous

* refactor(providers): narrow private observer safely

* fix(google): keep response hook within retry deadline

* test(ui): tolerate subpixel spacing variance

* test(ui): wait for durable draft before reload
2026-08-21 19:32:07 +03:00
ClawSweeper 975027aee9 fix(ui): remove redundant mobile header alerts (#127235)
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-21 09:18:52 -07:00
Peter Steinberger 7085604a26 fix(ui): correct Automations row semantics (#127252)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 09:05:52 -07:00
Shakker 7b5430a2d3 test: cover durable compaction activity 2026-08-21 16:24:53 +01:00
Shakker a5bac03e51 fix: preserve Codex compaction activity 2026-08-21 16:24:53 +01:00
Peter Steinberger 3ae7ba3194 fix(ui): copy Lobsterdex links through clipboard fallback (#127194)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 08:13:49 -07:00
Vyctor H. Brzezowski 03d4b8a9c3 fix(ui): expose active split pane to assistive tech (#127213) 2026-08-21 11:37:36 -03:00
Peter Steinberger 2cbfade48b fix(ui): copy task results through clipboard fallback (#127181)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 07:31:58 -07:00
ClawSweeper f94f945314 improve(ui): declutter Automations across desktop and mobile (#127198)
* improve(ui): declutter automations list

* test: align automation UI and process cleanup

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-21 06:56:43 -07:00
ClawSweeper 7498391c81 improve: show condition activity in automation history (#127200)
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-21 06:55:32 -07:00
ClawSweeper ebdb6115dd feat(ui): compact mobile chat header (#126788)
* feat(ui): compact mobile chat header

* refactor(ui): move mobile status into session menu

* fix(ui): close mobile status menu before details

* test(ui): follow compact header actions

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-21 06:54:41 -07:00
ClawSweeper 9050d9b0a7 fix(ui): align configured automation trigger status (#126784)
Vertically center the configured trigger label with the Advanced heading and cover the rendered geometry in Chromium.

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-21 06:23:18 -07:00
Jesse Merhi efbcb57569 fix(control-ui): autocomplete model thinking levels (#123507)
* fix(control-ui): autocomplete model thinking levels

* fix(control-ui): keep thinking options model-current

* fix(control-ui): execute catalog thinking levels

* fix(control-ui): close stale think picker

---------

Co-authored-by: Jesse Merhi <openclaw@users.noreply.github.com>
2026-08-21 23:02:33 +10:00
Peter Steinberger 1dbcbb2fb0 fix(ui): keep segmented selections visible in forced colors (#127165)
* test(ui): cover segmented controls in forced colors

Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

* fix(ui): preserve segmented selection in forced colors

Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

* fix(ui): separate forced-color selection and focus

Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 04:53:52 -07:00
Peter Steinberger cb563bb16d perf(test): speed up board provider snapshot observations (#127163) 2026-08-21 04:26:39 -07:00
Peter Steinberger 75c44b2b98 fix(ui): recover cloud worker saves after reconnect (#127150)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 03:50:40 -07:00
Peter Steinberger 7ecc9f6049 perf(test): speed up server preference observations (#127144) 2026-08-21 03:40:30 -07:00
Peter Steinberger d2d63a2c3f fix: announce Worktrees operation failures (#127114)
* fix(ui): announce Worktrees operation failures

Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

* test(ui): stabilize attachment URL lifecycle proof

Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 03:16:43 -07:00
Peter Steinberger 5d8cd4c819 perf(test): speed up model setup state observations (#127134) 2026-08-21 02:40:20 -07:00
Peter Steinberger be2f7c6a3d perf(test): speed up Tasks page state observations (#127121) 2026-08-21 01:58:21 -07:00
Peter Steinberger 627f862e8e perf(test): speed up new-session model control observations (#127101) 2026-08-21 01:20:01 -07:00
Peter Steinberger 0a0d343cf2 fix(ui): refresh active agent file content (#127086)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 01:13:55 -07:00
Peter Steinberger 8ac7dd254c perf(test): speed up model provider page observation polling (#127085) 2026-08-21 00:40:36 -07:00
Peter Steinberger 46d09d1a28 perf(test): speed up Agents page observation polling (#127063) 2026-08-20 23:55:44 -07:00
Shakker faa1cfc598 fix(ui): associate steering work by target run (#126997) 2026-08-21 07:45:40 +01:00
Shakker b2d49afd8e fix(ui): collapse completed pre-steer work 2026-08-21 07:45:40 +01:00
Shakker d15f570742 fix: dismiss sidebar session menu tooltip (#127044)
Dismiss the sidebar session tooltip whenever its overflow menu opens, preserving unobstructed menu actions and stable row semantics.

Refs #127039.
2026-08-21 07:14:13 +01:00
Peter Steinberger f14cf6b910 perf(test): speed up pairing access polling (#127047) 2026-08-20 23:02:46 -07:00
Peter Steinberger bed80ee645 fix(cron): reject malformed condition scripts before saving (#127004)
* fix(cron): reject malformed condition triggers

Validate newly authored cron condition scripts before persistence, return actionable Gateway errors, and preserve maintenance of malformed triggers shipped in existing releases.

* fix(cron): reject blank condition triggers
2026-08-20 22:42:06 -07:00
Vyctor H. Brzezowski 6c667989a8 fix(ui): soften active split-pane indication (#126714)
* fix(ui): soften active split-pane indication

* fix(ui): scope split-pane attenuation to split layout

* fix(ui): refine split-pane visual hierarchy

* test(ui): establish active split pane in visual proof

* test(ui): activate split pane through its header

* style(ui): format split-pane selectors

* fix(ui): preserve inactive split-pane controls

* fix(ui): finalize inactive split-pane styling

* fix(ui): preserve inactive split-pane actions

* Revert "fix(ui): preserve inactive split-pane actions"

This reverts commit 2cadd21346.

* fix(ui): keep inactive split-pane status visible

* fix(ui): restore approved split-pane treatment

* fix(ui): keep inactive placement status visible
2026-08-21 02:41:32 -03:00
Peter Steinberger e7cfff2167 feat(control-ui): stream live draft previews in the typing indicator (#126994)
* feat(control-ui): stream live draft previews in the typing indicator

Multi-identity sessions now show what a teammate is typing, not just that
they are typing: the composer's per-keystroke session.typing sends carry a
bounded tail of the draft (optional preview field, 400 code points max),
the gateway throttle re-emits on changed payloads at 250ms (boolean-only
stays at 1s, trailing edge keeps the latest draft), and the transcript
renders a per-actor bubble with the live text plus a blinking caret.
Actors without preview data keep the three-dot bubble.

Previews are ephemeral presence: never persisted, never part of the
session transcript or model context, excluded from aria-live regions, and
gated by the existing >=2-live-viewers, sharing-role, and incognito
checks. No new config surface.

* chore(protocol): regenerate Swift gateway models for typing preview

* fix(gateway): aggregate typing previews across same-actor connections

A boolean-only session.typing update from a second connection of the same
actor (another tab or device) erased their live draft preview, because
typing liveness aggregated per actor while the broadcast preview came only
from the latest request. Preview aggregation now lives with the connection
aggregation owner: updateTypingConnections tracks per-connection previews
and returns the newest non-empty preview among live connections, so the
broadcast keeps the active draft until its connection stops or expires.

Regression fails pre-fix (event lost its preview field).
2026-08-20 22:30:41 -07:00
Peter Steinberger 6f52e9fc2f fix(telegram): preserve direct-message topics in config and cron writeback (#127010)
* fix(telegram): preserve direct message topics in target writeback

* test(ui): consolidate cron scheduler status coverage
2026-08-20 22:27:10 -07:00
Peter Steinberger 3cf33583db perf(test): speed up lazy UI lifecycle polling (#127025) 2026-08-20 22:22:58 -07:00
Peter Steinberger 5de08664ac improve(ui): skip discarded workspace loading during first-run setup (#126967)
* perf(ui): defer workspace loading during first-run setup

Wait for the initial model-setup decision before starting the default Chat router, and load workspace chrome only when a workspace route is visible.

Keep the existing loading mascot visible while the Gateway decides the first-run destination.

Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-76a1-76f1-8758-25d0466913af

* fix(ui): release first-run gate on terminal connect failure

Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-76a1-76f1-8758-25d0466913af

* fix(ui): dedupe sidebar lazy preload

Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-76a1-76f1-8758-25d0466913af

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-20 22:20:12 -07:00
Peter Steinberger da18d2f335 test(ui): split the oversized cron view suite to unbreak main (#127018)
`main` is red: `check-lint-core-5` fails with

    ui/src/pages/cron/view.test.ts
      1124:4  error  File has too many lines (1004).  eslint(max-lines)

The file has been growing for a while (1104 lines at fa75cdd01c, 1116 at
2acfc47b7f) and crossed the 1000 code-line cap at a4b3f63a87 (#126945). Every
PR opened since inherits the failure, so this is not any one PR's fault to fix
in passing -- it blocks the merge gate for everyone.

Repo policy forbids a `max-lines` suppression, so the file is split along the
seam it already had: three top-level describes, one of which was two thirds of
the file. `cron view editor` moves to `view.editor.test.ts`; `cron view list
pane` and `cron view selects` stay in `view.test.ts`. The four DOM helpers the
blocks shared move into the existing `view.test-support.ts` sibling rather than
being duplicated, and each file imports only what it uses.

No test content changed: 42 tests before, 42 after, same 41 `it(` declarations.
Sizes drop to 373 / 721 / 143 lines, all well under the cap.
2026-08-20 22:06:18 -07:00
Peter Steinberger a4b3f63a87 fix(ui): use active scheduler trigger capability (#126945)
Control UI automation trigger authoring now reflects the running scheduler across unsaved and saved-but-unapplied config edits and reconnects.
2026-08-20 21:28:44 -07:00
Peter Steinberger 2acfc47b7f fix(ui): expose all automation schedule filters (#126962)
* fix(ui): expose all automation schedule filters

Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

* refactor(ui): derive cron filters from protocol

Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-20 21:10:49 -07:00
openclaw-mantis[bot] bafa32fd54 chore(ui): refresh control ui locales (#126927)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-20 20:03:25 -07:00
Josh Lehman b6bf9a7154 fix(ui): preserve active commentary on steer (#126886)
Control UI now preserves active-run commentary and tool progress when a follow-up steers the same run, while fresh sends still clear stale projection state.

Fixes #126938.
Reviewed-by: @shakkernerd
2026-08-21 04:01:29 +01:00
Peter Steinberger ee337708de fix(ui): label composer textareas (#126952)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-20 19:54:49 -07:00
Dallin Romney 56e32bb723 fix(ui): surface onboarding memory import load failures (#126738) 2026-08-20 19:10:54 -07:00
Peter Steinberger ab2bbd42df test: trim UI and tooling test seams (#126937) 2026-08-20 19:04:18 -07:00
Sasan 034325d3e2 fix(ui): surface provider-usage failures instead of silent empty panels (#120309)
* fix(ui): surface provider-usage failures instead of empty panels

* fix(ui): complete typed route-data fixtures and stop reporting cancelled usage requests as failed

- Add providerUsageUnavailable to the five UsageRouteData fixtures in
  gateway-source-replacement.test.ts; check-test-types passes again.
- requestProviderUsage reports failed only for non-cancelled rejections; an
  aborted request is the caller superseding its own load, not an outage.
- Cover answered, failed, and cancelled outcomes.

* chore(ui): keep ProviderUsageFetch local to its module

* fix(ui): clear the provider failure flag when an aggregate usage load fails

- A failed aggregate refresh says nothing about provider usage; the stale
  flag no longer keeps claiming the last provider request failed after a
  later usage.cost or sessions.usage rejection.
- Sequential regression: usage.status failure, then an aggregate failure,
  ends with the flag cleared.

* test(ui): type the usage route data on the test element

* test(ui): cover provider usage request outcomes

* fix(ui): model provider usage request outcome

* fix(ui): preserve provider usage outcomes

* fix(ui): resolve provider usage build
2026-08-20 18:15:14 -07:00