Commit Graph

2607 Commits

Author SHA1 Message Date
github-actions[bot] cff46028f4 chore(ui): refresh control ui locales 2026-07-05 21:06:02 +00:00
Peter Steinberger 51771c3a14 feat(ui): declutter the Control UI sidebar with customizable pinned nav and a More section (#100296)
* feat(ui): declutter sidebar with pinned nav, More section, and customize menu

* test(ui): normalize sidebar e2e labels

* docs: refresh generated docs map

* fix(ui): keep tablet navigation drawer expandable

* chore(ui): refresh i18n raw-copy baseline
2026-07-05 21:56:51 +01:00
Peter Steinberger 5e0504aa43 feat(ui): simplify Talk settings (#100453)
Co-authored-by: Peter Steinberger <steipete@openai.com>
2026-07-05 21:31:52 +01:00
lzyyzznl 8e7cd40719 fix(ui): render direct tool-result image blocks inline in chat (#50779) (#100295)
* fix(ui): render direct tool-result images inline

Co-authored-by: 黄剑雄0668001315 <huang.jianxiong@xydigit.com>

* test(ui): stabilize delayed-send scroll precondition

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: 黄剑雄0668001315 <huang.jianxiong@xydigit.com>
2026-07-05 12:48:29 -07:00
Peter Steinberger c730d8f1f1 feat(logbook): automatic work journal plugin with Control UI timeline tab (#99930)
* feat(logbook): automatic work journal plugin with a plugin-contributed Control UI tab

Squash of PR #99930 work for rebase onto the Control UI route refactor:
- extensions/logbook: Dayflow-style capture -> observations -> timeline cards
  pipeline with SQLite store, node capture commands, standup/ask, retention
- plugin SDK/gateway seam: surface "tab" Control UI descriptors projected
  into hello-ok controlUiTabs (scope-filtered, deterministic order)
- Control UI: dynamic plugin tabs with bundled Logbook view
- docs, tests, labeler wiring

* feat(ui): port plugin tabs and Logbook to the route-owned Control UI architecture

- shared /plugin route carries the tab id in the query (?id=<tab>), matching
  the router's exact-path contract
- openclaw-plugin-page renders bundled views (Logbook), sandboxed plugin
  frames (descriptor path), or the unavailable card
- sidebar renders hello controlUiTabs after each group's static routes
- Logbook view/controller live under ui/src/pages/plugin/

* fix(ui): namespace plugin tabs by pluginId to prevent cross-plugin tab id collisions

* fix(logbook): prefer app capture nodes and rotate off failing nodes

* fix(plugins): reject protocol-relative Control UI tab paths

* fix(logbook): harden automatic journal

* docs(changelog): remove maintainer self-credit

* chore(ui): refresh locale metadata after rebase

* fix(logbook): preserve analysis window boundaries

* fix(logbook): align status privacy and timezone

* fix(ui): stop hidden plugin tab polling
2026-07-05 11:50:44 -07:00
Peter Steinberger 8a187447f9 feat(ui): show provider costs in context popover (#100379)
* feat(ui): show estimated run cost

* feat(ui): show provider cost breakdown
2026-07-05 10:49:06 -07:00
Peter Steinberger d84314d6b7 fix(ui): reveal message context on timestamp hover (#100391)
* fix(ui): reveal message context from timestamp

* fix(ui): paint message context preview

* docs(changelog): note timestamp context reveal
2026-07-05 10:48:22 -07:00
Peter Steinberger 89ef6632de feat(ui): scroll truncated sidebar session names on hover (#100276)
* feat(ui): scroll truncated sidebar session names on hover

Sidebar recent-session labels clip long titles with an ellipsis and there
was no way to read the tail without opening the session. Hovering a row
now animates the label's text-indent to slide the clipped tail into view
(speed-proportional duration, 300ms minimum) and snaps back quickly on
mouse leave. Resting ellipsis rendering is preserved by animating
text-indent instead of transforming an inner wrapper, since text-overflow
draws no ellipsis for atomic inline children. Respects
prefers-reduced-motion.

* fix(ui): harden sidebar session marquee
2026-07-05 10:29:46 -07:00
github-actions[bot] 06bf43083d chore(ui): refresh control ui locales 2026-07-05 16:22:32 +00:00
Peter Steinberger f607ba0691 feat(control-ui): session grouping with drag & drop and channel categorization (#100262)
* feat(control-ui): session grouping with drag & drop and channel categorization

* fix(control-ui): restrict session drag&drop to private session-key payloads

* chore(i18n): translate session grouping strings across control ui locales

* chore(protocol): regenerate swift gateway models for session category

* chore(protocol): regenerate swift gateway models for session category
2026-07-05 09:13:17 -07:00
Shakker 4074c8e743 fix: remove sidebar usage quota 2026-07-05 15:57:27 +01:00
Peter Steinberger 00da1243a8 fix(ui): clear session labels across subscribed clients (#100266)
* fix(ui): reconcile cleared session labels

* chore: remove release-owned changelog entry

* chore: remove release-owned changelog entry

* chore: remove release-owned changelog entry

* chore: remove release-owned changelog entry

* chore: remove release-owned changelog entry
2026-07-05 07:54:05 -07:00
Peter Steinberger 862de9f1a1 fix(pairing): advertise reachable Tailnet routes (#100317)
* fix(pairing): advertise reachable tailnet routes

* fix(pairing): satisfy native and SDK checks

* fix(ios): cancel stale pairing route probes

* test(pairing): document LAN-only Serve fallback

* fix(ios): preserve pairing result initializer
2026-07-05 07:43:43 -07:00
Peter Steinberger a5fdc07121 fix(ui): simplify grouped tool activity (#100318) 2026-07-05 06:56:58 -07:00
github-actions[bot] 80801be738 chore(ui): refresh control ui locales 2026-07-05 13:33:08 +00:00
Peter Steinberger db96218c05 feat(ui): show context usage details (#100264)
* feat(ui): show context usage details

* fix(ui): translate context usage labels

* fix(ui): translate context usage labels

* test: route e2e tempfile helper dependencies

* chore: drop superseded test routing change

* chore: drop superseded test routing change

* chore: drop superseded test routing change
2026-07-05 06:24:05 -07:00
Peter Steinberger f9e194e4a1 fix(ui): keep login recovery accessible 2026-07-05 06:13:00 -07:00
Peter Steinberger f886ce7339 fix(ui): keep the connection-error disclosure collapsed by default
Restore the maintainer-requested collapsed <details> failure callout that
a parallel session reverted, adapt the e2e expectations, and drop the
PR-side CHANGELOG edit (changelog is release-generation-owned).
2026-07-05 06:09:31 -07:00
Peter Steinberger 99845cfddf fix(ui): mobile-optimize gateway dashboard login gate (#100208) 2026-07-05 06:07:52 -07:00
Peter Steinberger 1f484a8dbd test: speed up and stabilize full suite 2026-07-05 08:00:23 -04:00
Peter Steinberger 78685aec46 fix(ui): center terminal new-session button (#100256) 2026-07-05 02:36:12 -07:00
Peter Steinberger e7808dbe60 fix(ui): hide idle composer scrollbar (#100252) 2026-07-05 02:25:34 -07:00
Peter Steinberger 86bf85fb35 fix(ui): publish mobile setup independently (#100179)
* fix(ui): publish mobile setup independently

* fix(ui): publish mobile setup independently
2026-07-05 01:54:58 -07:00
Peter Steinberger 091d9564b6 fix(ui): hide duplicate terminal caret (#100240) 2026-07-05 01:48:43 -07:00
Peter Steinberger 8b229a938c fix(ui): simplify OpenAI speed choices (#100190) 2026-07-05 01:46:13 -07:00
Peter Steinberger e72a2c825d fix(ui): simplify selectable tool error rows (#100199)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 00:08:21 -07:00
Peter Steinberger 9b60e1429d fix(control-ui): declutter Settings and make Simple/Advanced switch persistent (#100147)
Quick Settings read as competing panels and the Appearance card wrapped/clipped its segmented controls in a narrow side column. Switching to Advanced also had no visible way back — the only return was a "Quick Settings" link buried in the accordion nav.

- Replace the one-way "Advanced" button and buried accordion back link with a persistent Simple/Advanced switch in the page header, mirrored into an in-body row at the mobile breakpoint where the header is hidden.
- Give Appearance a full-width auto-fit grid so Theme/Mode/Roundness/Text size never wrap or clip.
- Drop the duplicate Context Profile side panel for a compact summary line, and only show "Pending" when a change is actually staged (pass savedConfigObject).
- Remove the redundant in-page "Quick Settings" heading and unused preset copy.

Presentation-only within ui/src/pages/config; net -354 non-test LOC. Closes #100145.
2026-07-05 02:20:02 -04:00
Peter Steinberger 1d9fb2773f feat(ui): surface mobile pairing shortcuts (#100157) 2026-07-05 00:47:27 -04:00
Peter Steinberger 8251c4094a fix(ui): align activity error badges (#100163)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 20:18:20 -07:00
Peter Steinberger 9c7848928f feat(control-ui): full-screen terminal-only view mode for mobile WebViews 2026-07-04 20:07:18 -07:00
Peter Steinberger 194d85e891 fix(ui): chat workspace panel leaves an empty gap when collapsed (#100088)
* fix(ui): remove reserved gap when chat workspace rail is collapsed

* fix(ui): remove reserved gap when chat workspace rail is collapsed
2026-07-04 22:53:27 -04:00
Peter Steinberger adf25f853c fix(ui): add chat transcript top spacing (#100144)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 19:24:25 -07:00
Peter Steinberger 1437f79d0c feat(ui): adopt shared libterminal browser runtime (#100128) 2026-07-04 21:03:10 -04:00
Peter Steinberger 7608d38597 improve(ui): flatten chat tool-call rows into scannable list (#99763)
Tool calls in Control UI chat rendered as triple-nested cards: activity
group card + tool-shell bubble chrome + gradient summary pill with a
0 8px 22px drop shadow. Collapsed rows now render as flat single-line
rows with ellipsis, the activity group uses a flat header plus a left
rule, and expanded detail keeps soft tinted blocks without card chrome.
Also deletes the dead legacy .chat-tool-card__details/__output CSS and
the unused renderToolCardSidebar path with its never-taken
renderToolDataBlock branches.

Closes #99760
2026-07-04 19:42:59 -04:00
Vincent Koc 3d64efbd3d test(ui): stabilize Control UI suite routing
Keep moved Control UI browser layout tests routed in both UI Vitest configs and stabilize chat suite-order assertions. Verified with Testbox UI proof and changed gate; final PR CI remains the merge gate.
2026-07-04 16:38:36 -07:00
github-actions[bot] 1c9e998d98 chore(ui): refresh control ui locales 2026-07-04 23:07:17 +00:00
Peter Steinberger dd6bc2ec32 fix(ui): repair router refactor regressions (#100106) 2026-07-04 19:00:54 -04:00
Peter Steinberger f5d446e483 chore(ui): translate terminal.detached across locales 2026-07-04 15:58:18 -07:00
Peter Steinberger 619fee1b4f fix(control-ui): never close live sessions from bulk teardown; reattach owns recovery 2026-07-04 15:58:18 -07:00
Peter Steinberger 2b89a9b14d docs(control-ui): document why teardown close RPCs cannot kill reattachable sessions 2026-07-04 15:58:18 -07:00
Peter Steinberger ad6d55159a fix(control-ui): keep the terminal open preference across disconnects 2026-07-04 15:58:18 -07:00
Peter Steinberger b33f09b40d feat(control-ui): reattach terminal sessions after reload/reconnect with replay 2026-07-04 15:58:18 -07:00
Shakker 65e12328aa feat: refactor the Control UI architecture
Refactor the Control UI around route-owned page lifecycle and state while preserving existing behavior and design.

Prepared head SHA: bd51b6fa76
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-07-04 23:19:38 +01:00
Peter Steinberger 7e8ea61b08 fix(gateway): harden embedded terminal policy (#100081)
* fix(gateway): harden operator terminal policy

* test(gateway): complete terminal context coverage

* test(gateway): narrow terminal policy mock

* test(gateway): satisfy CSP header lint

* docs: refresh terminal docs map

* test: route terminal temp helper importer
2026-07-04 16:34:07 -04:00
Peter Steinberger fb8f62d8e4 fix(ui): localize mobile pairing in Hindi and Russian (#100040)
* fix(ui): localize mobile pairing fallbacks

* test(ui): typecheck pairing localization guard

* test(ui): typecheck pairing localization guard

* test(ui): typecheck pairing localization guard

* test(ui): typecheck pairing localization guard

* test(ui): typecheck pairing localization guard
2026-07-04 15:30:48 -04:00
github-actions[bot] 5304d006e5 chore(ui): refresh control ui locales 2026-07-04 18:38:46 +00:00
Peter Steinberger 6df0fb818d feat: add session thread management (#98510)
* feat: add session thread management

Squash of codex/thread-management (025aefc3ad1) onto origin/main:
pin/archive/rename sessions via sessions.patch, archived-aware
sessions.list, lifecycle fencing, read-only archived chat, SDK +
Swift protocol support, Control UI session management.

* refactor(ui): minimal session rows with hover-revealed management

Chat picker and sidebar recents share session-row primitives: single-line
rows, relative timestamps, rename/archive/pin revealed on hover or focus,
accent pin badge for pinned rows, and an active-run spinner in the trail
slot. Sidebar floats pinned sessions above recency via the shared
comparator and gains archive/pin actions through the unified sessions-view
patch fallback. Archive eligibility is one shared policy
(canArchiveSessionRow); the sidebar/picker active-run tooltip now uses the
real sessionsView.activeRun locale key.

* fix: align session admission with mailbox-era main

Integration fixes after rebasing onto current main: sessions_list mailbox
test expectations learn the archived/pinned row fields and archived:false
list param; gateway agent admission treats a session as deleted only when
both the requested and canonical alias sets miss it (legacy bare-main
stores and exec-approval followups read under different spellings); cron
persist tests keep a consistent store across claim-guarded persist calls;
the ACP abort hook test asserts abort propagation instead of signal
identity; drop dead lifecycle writes flagged by no-useless-assignment and
fix the promise-executor return in the codex compact test.

* fix(qa): align UI e2e and shard fixtures with redesigned session rows

Sidebar session rows are wrapper divs with an inner link now: update the
navigation browser tests and chat-flow Playwright selectors. Seed a real
per-test session store for the auto-fallback admission guard instead of
depending on leftover host files at /tmp/sessions.json. Teach the
test-projects routing fixture about the suites that newly import the
shared temp-dir helper. Document the Codex thread-format contract for
archivedAt/pinnedAt (flag derived from server-stamped timestamp, epoch ms
here vs Codex epoch seconds) at the type and in the session docs.

* test: route auto-fallback suite through temp-dir helper plans

The auto-fallback suite now imports the shared temp-dir helper for its
seeded session store, so the top-level helper routing fixture must list
it in the auto-reply plan.
2026-07-04 14:30:47 -04:00
github-actions[bot] 61da4f0917 chore(ui): refresh control ui locales 2026-07-04 18:26:54 +00:00
Peter Steinberger 6da5db21a6 chore(i18n): regenerate control-ui locale metadata after rebase 2026-07-04 11:18:43 -07:00
Peter Steinberger d41cb3aab8 fix(control-ui): drop unused vitest import and bind captured request in terminal-connection test 2026-07-04 11:18:43 -07:00