Commit Graph

5518 Commits

Author SHA1 Message Date
vyctorbrzezowski 2dffd4e625 feat(ui): render transcript footnotes as navigable endnotes
Local markdown-it footnote plugin: superscript references jump to an
ordered endnotes section and back to their exact reference. Note ids are
namespaced per transcript message so identical notes stay distinct.
No new dependencies.
2026-08-22 10:54:14 +00:00
Vyctor H. Brzezowski 39cff92880 fix(ui): keep transcript disclosures anchored (#126272)
* fix(ui): keep transcript disclosures anchored

* fix(ui): include file tool disclosure anchors

* fix(ui): anchor raw tool disclosures

* test(ui): cover merged disclosure invariants

* fix(ui): anchor sidebar disclosure commits

* test(ui): assert disclosure state transitions

* fix(ui): cover semantic transcript disclosures

* fix(ui): anchor transcript geometry controls

* test(ui): exercise tab geometry anchoring

* test(ui): keep geometry proof behavior-bound

* refactor(ui): split disclosure anchor coverage

* refactor(ui): extract transcript scroll margin

* refactor(ui): shorten transcript helper names
2026-08-22 07:02:45 -03:00
Peter Steinberger 81002dd250 fix(ui): announce session sharing errors (#127801)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-22 01:08:49 -07:00
Ayaan Zaidi 6e7349be4d chore(ui): restore markdown test lint (#127799)
Restore main CI by moving existing streaming code-fence coverage into a focused test file. No production behavior or assertions change.
2026-08-22 13:11:16 +05:30
Vyctor H. Brzezowski e22dc4b287 perf(ui): skip highlighting unfinished code blocks while streaming (#127754)
* perf(ui): defer open-fence highlighting

* perf(ui): simplify unfinished fence highlighting

Co-authored-by: vyctorbrzezowski <krzyszchweski@gmail.com>

* docs: avoid concurrent changelog insertion conflict

* docs: respect release-owned changelog policy

Release-note context and before-after UI proof remain in the pull request.

Co-authored-by: vyctorbrzezowski <krzyszchweski@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-21 23:41:00 -07:00
Vyctor H. Brzezowski dacfd09786 perf(ui): stop rescanning whole replies on every streamed chunk (#127749)
* perf(ui): scan streaming markdown incrementally

* perf(ui): own streaming markdown cache invalidation

Co-authored-by: vyctorbrzezowski <krzyszchweski@gmail.com>

* docs: respect release-owned changelog policy

Release-note context remains documented in the pull request evidence.

Co-authored-by: vyctorbrzezowski <krzyszchweski@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-21 23:38:32 -07:00
Peter Steinberger c8d6604261 fix(ui): avoid nested activity main landmark (#127789)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 23:08:38 -07:00
Dallin Romney 6851594b71 fix(ui): restore drafts before expiry maintenance (#127766)
* fix(ui): restore drafts before expiry maintenance

* test(ui): satisfy draft-store harness lint

* test(ui): type IndexedDB method receivers
2026-08-21 22:34:13 -07:00
Peter Steinberger de4fbf964f fix(ui): keep selected-text actions off context clicks (#127776)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 21:52:49 -07:00
ClawSweeper 48a2b45fed fix: stop limited access status from shifting page layouts (#127704)
* fix(ui): move limited access status into shell chrome

* fix(ui): cover tablet limited access layout

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-21 21:42:05 -07:00
Peter Steinberger 1bd5f22b13 fix(ui): keep resize drag owned by one pointer (#127760)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 21:36:10 -07:00
openclaw-mantis[bot] fc1a663f9d chore(ui): refresh control ui locales (#127207)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-21 20:00:01 -07:00
ClawSweeper b3d3404ae6 fix(ui): align page titles with page content (#127738)
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 19:06:50 -07:00
Peter Steinberger 557a5c131b fix(ui): validate empty protected secrets locally (#127740)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 18:51:06 -07:00
ClawSweeper 249e1bfb00 fix(ui): align narrow chat composer spacing (#127717)
* fix(ui): align narrow chat composer spacing

* test(ui): cover short-landscape composer spacing

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 18:20:41 -07:00
Shakker b28a687830 fix: scope terminal cleanup by run (#127646) 2026-08-22 02:05:56 +01:00
Shakker 8ce4a8a07d fix: remount post-steer stream rows 2026-08-22 02:05:56 +01:00
Shakker 7f5ae9249f fix: preserve steering stream boundaries 2026-08-22 02:05:56 +01:00
Shakker df8898fe26 fix: settle terminal transcript projections 2026-08-22 02:05:55 +01:00
Peter Steinberger 14b85b2d82 fix(ui): keep usage results aligned with filters (#127720)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 17:59:25 -07:00
Peter Steinberger eaef2c1be7 fix(ui): re-arm Model Setup detection when stale route data settles after mount (#127695)
The Model Setup page could sit at "Checking this Gateway for available AI
access…" forever on fresh clients: the route loader ran before the Gateway
websocket connected and returned a loading state with a null-client
connection, the lazy page module finished importing after hello, and the
page mounted with routeData undefined under an already-connected Gateway.
When the stale loader result settled a microtask later, willUpdate
correctly discarded it, but synchronizeGateway hit the identity-equality
early return and nothing ever armed detectTask again - a silent dead-end
(fresh headless clients hit it ~100%; warm tabs recovered only because
their cached module mounted before hello).

Replace the mount-branch routeData-connection comparison with a single
self-healing invariant, ensureRouteSettledDetection(), also called from
the identity-equality early return: once route data has settled, a page
still holding phase "loading" with an idle detect task and a connected,
capable Gateway starts detection itself. Guards keep the normal path
duplicate-free: undefined routeData means the loader's own detect is
still in flight, and hasUpdated defers to willUpdate's seeding since
subscriptions fire before the first render.

Regression test mounts the page without routeData under a connected
Gateway, then delivers the stale pre-connect loader result and asserts
exactly one openclaw.setup.detect and a rendered result; it fails on the
pre-fix code with zero detect calls. Live-verified with a headless
Playwright client against a dev gateway: pre-fix stalls past 45s, fixed
build reaches ready in ~5s with a single detect request.
2026-08-21 17:26:37 -07:00
ClawSweeper 7c8e94804c fix(ui): align activity sessions across viewports (#127686)
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 16:58:09 -07:00
Peter Steinberger b765944a9f fix(ui): explain blocked Talk microphone (#127673)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 16:51:58 -07:00
ClawSweeper 7dca0a099a fix(ui): preserve owner filters across gateway reconnects (#127676)
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 16:20:06 -07:00
Peter Steinberger fb95562e96 fix(ui): add brand icons for all provider auth choices (#127668)
The provider picker enumerates every plugin's providerAuthChoices (63
provider ids), but the bundled icon set only covered CodexBar's 52 marks,
so Arcee, Baseten, BytePlus, Cerebras, Cohere, DeepInfra, Featherless,
Fireworks, Hugging Face, Meta, NVIDIA, Together, and many more rendered
as lettered fallback badges.

Adds 24 monochrome marks from @lobehub/icons-static-svg v1.94.0 (MIT,
metadata-cleaned; mapping documented in ATTRIBUTION.md) and aliases
variant provider ids (kilocode, kimi-coding, xiaomi, ollama-cloud,
tencent-tokenhub, vercel-ai-gateway, ...) onto existing marks. GMI Cloud,
SGLang, and Vydra keep the lettered fallback: no vector mark exists
upstream.
2026-08-21 16:09:03 -07:00
Alix-007 a7a68cfb47 fix(ui): keep annotated slash commands local (#121191)
* fix(ui): keep browser annotations out of commands

* fix(ui): reuse raw command classification

* fix(ui): fence retained browser annotations by exact identity

Preserve the authoritative annotation object during slash-command recovery and prove terminal command retirement, restored screenshot and document bytes, and same-ID replacement races.

Co-authored-by: Alix-007 <li.long15@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-21 15:56:10 -07:00
Peter Steinberger 11081a95b8 test: remove final moving-tip duplicates (#126990) 2026-08-21 15:54:24 -07:00
Peter Steinberger 1c5c878a96 fix(ui): show filtered agent skills (#127663)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 15:40:07 -07:00
Jesse Merhi a5e9b3189d fix(ui): keep chat pinned as composer grows (#122985)
Co-authored-by: Jesse Merhi <jesse-merhi@users.noreply.github.com>
2026-08-22 08:36:26 +10:00
Peter Steinberger 6d47044e73 fix(ui): release stale model setup wizard sessions (#127657) 2026-08-21 15:33:30 -07:00
Josh Lehman d54a8e80f2 fix(ui): keep Home status clear of Pages editor (#127642) 2026-08-21 15:31:13 -07:00
Jesse Merhi d630897a95 fix(ui): show one session activity indicator (#123288)
* fix(ui): show one session activity indicator

* chore(ui): remove unused session unread renderer

* fix(ui): prioritize active child run indicators

* fix(ui): prioritize Home run activity

* test(ui): measure session endcap layout

* test(ui): align endcap atom count

* fix(ui): preserve hidden unread semantics

* fix(ui): announce active Home runs

* refactor(ui): centralize sidebar state descriptions

* fix(ui): compose Home activity description

---------

Co-authored-by: Jesse Merhi <jesse-merhi@users.noreply.github.com>
2026-08-22 08:27:37 +10:00
Peter Steinberger 9903e404ef feat(ui): add live CPU/memory/delay sparkline graphs to the system busyness overlay (#127650)
* feat(ui): add cpu/memory graphs to system busyness overlay

* refactor(ui): redesign busyness overlay vitals as sparkline stat tiles

Merge the duplicated sparkline row and numeric tile grid into three vital
tiles (CPU, memory, event-loop delay) with gradient area charts, a live
pulse dot, pointer scrubbing with value+age readout, and a danger tint
driven by the gateway's own event-loop degradation reasons. Memory
auto-ranges its baseline so RSS trends stay visible.
2026-08-21 15:06:17 -07:00
Peter Steinberger f95443125b fix(ui): separate settings footer actions from build info (#127597)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 14:48:42 -07:00
Peter Steinberger 69d30923bf perf(test): speed up model provider recovery observations (#127570) 2026-08-21 14:17:24 -07:00
Hannes Rudolph 5b67b61964 feat(dashboard): let widgets run granted actions and open links (#127315) 2026-08-21 14:57:40 -06:00
Peter Steinberger 3bb1433b78 fix(ui): surface config open-file failures (#127498)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 13:37:31 -07:00
Peter Steinberger 3ea90bdcdb feat(ui): add Person grouping mode for sessions sidebar and sessions page (#127346)
* feat(ui): add Person grouping mode for sessions sidebar and sessions page

Sessions can now be grouped by their durable owner identity: the sidebar
Group-by menu gains a capability-gated Person mode (self first, humans by
label, agent identities after; ownerless rows keep their smart zones), and
the sessions page gains the matching person mode. Person section headers
render the owner avatar and profile label; the mock dev server now
advertises the multi-identity policy and carries explicit row owners the
way the gateway projects createdActor fallbacks.

* feat(ui): gate sessions-page Person grouping on the identity capability

Mirrors the sidebar: the Person option hides without
hasMultipleSessionSharingIdentities and a stored Person preference
renders as None until the capability returns.
2026-08-21 13:21:43 -07:00
ClawSweeper 229ce32e32 fix(ui): align run history dropdown text (#127443)
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 13:12:10 -07:00
Peter Steinberger 519877a317 fix(ui): surface session owner assignment failures (#127431)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 13:09:31 -07:00
Peter Steinberger 1353ce0995 feat: run Codex sessions on approved paired devices (#127202)
* feat(codex): execute paired-device sessions over node carrier

* fix(node-host): preserve approved invocation session identity

* fix(codex): observe paired-node execution leases before handshake

* fix: fence paired-device placement and Codex execution owners

* fix: satisfy paired-device placement CI ownership guards

* fix(codex): reject credentialed paired-node URL parameters

* fix(codex): fence nested remote HTTP session credentials

* fix(codex): scrub node process URLs and preserve plaintext HTTP

* test(codex): republish node inventory after capability approval
2026-08-21 12:50:26 -07:00
Peter Steinberger 90d1c43f5a fix(ui): announce custom theme import results (#127380)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 12:17:27 -07:00
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