Commit Graph

2682 Commits

Author SHA1 Message Date
Peter Steinberger
60cf7eaa00 feat(ui): make the sidebar session-first and minimal (#100386)
* feat(ui): bolder sidebar minimalism — pinned/chats session groups, compact icon footer, no brand header

* test(ui): align fixtures with single default pinned route; document pinned-cap invariant

* fix(ui): preserve sidebar session groups

* fix(ui): polish minimal sidebar behavior

* fix(ui): avoid duplicate pinned chat fallback

* docs(changelog): note sidebar layout refresh

* chore(i18n): preserve sidebar locale metadata

* fix(ui): reuse localized sessions label

* test(ui): follow localized sessions label

* chore(ui): trim sidebar landing churn

* docs(ui): update minimal sidebar guidance
2026-07-06 02:08:02 +01:00
github-actions[bot]
366ed56a95 chore(ui): refresh control ui locales 2026-07-05 23:07:28 +00:00
Peter Steinberger
ff32076f78 feat(ui): add comparative cost analysis (#100432)
* feat(ui): add comparative cost analysis

* fix(usage): align cost buckets with request timezone

* test(ui): avoid shadowing cost fixture

* fix(usage): align session daily timezone buckets

* test(usage): include day offset in cache keys

* fix(ui): ship translated cost analysis strings

* fix(ui): scope cost window analysis

* chore(ui): refresh locale metadata

* chore(ui): refresh locale metadata
2026-07-05 23:58:40 +01:00
Peter Steinberger
927bbeb58c feat(chat-ui): redesign composer bottom bar with split Talk control and reasoning-effort chip (#100445)
* feat(chat-ui): redesign composer bottom bar with split Talk control and reasoning-effort chip

Removes the toolbar divider so the composer frame is the only chrome, merges
the Talk toggle and Talk settings gear into a mic+caret split control, shows
the effective reasoning level as a subtle pill next to the model name
(accent-washed only on session override), right-aligns the model/settings
cluster next to Send, and softens active/selected highlight states across the
bar. The combined model menu and reasoning fly-out now anchor right so they
stay on screen.

* fix(chat-ui): keep mobile composer controls usable

* fix(chat-ui): keep reasoning controls in mobile viewport

* fix(chat-ui): simplify composer placeholder

* chore(i18n): refresh composer locale metadata
2026-07-05 23:27:14 +01:00
haruai
ff440393da fix: ignore stale approval resolve errors (#98394)
* fix(ui): scope approval decision results

Co-authored-by: haruaiclone-droid <281899875+haruaiclone-droid@users.noreply.github.com>

* docs(changelog): credit approval race fix

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: haruaiclone-droid <281899875+haruaiclone-droid@users.noreply.github.com>
2026-07-05 23:06:18 +01:00
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
062f88e3e3 refactor: extract reusable AI runtime package (#99059)
* refactor: extract reusable AI runtime package

* refactor: complete AI provider relocation

* refactor: keep llm core internal

* refactor(ai): make @openclaw/ai self-contained with host policy ports

Move pure transport helpers (tool projections, strict-schema normalization,
prompt-cache boundary, stream guards, anthropic/openai compat, request
activity) from src into packages/ai; move utf16-slice into
normalization-core. Inject host policy (guarded fetch, redaction,
strict-tool defaults, diagnostics logging) through AiTransportHost with
inert library defaults installed by src/llm/stream.ts. Narrow the public
barrel to instance-scoped createApiRegistry/createLlmRuntime; the
process-default runtime moves behind internal/ and
registerBuiltInApiProviders takes an explicit registry. Delete the
src/llm/api-registry re-export facade.

* fix(ai): teach node, jiti, and vite resolvers the @openclaw/ai and utf16-slice subpaths

The workspace alias tables in root-alias.cjs, plugin-sdk-native-resolver,
sdk-alias, the shared vitest config, and the Control UI vite config only
knew @openclaw/llm-core; Node-side plugin loading resolved @openclaw/ai
through the pnpm symlink to the unbuilt dist (checks-node-compact CI
failures), and the Control UI build broke on the new
normalization-core/utf16-slice subpath.

* chore(ui): drop leftover service-worker debug logging

* build(release): ship @openclaw/ai with its own shrinkwrap and honest dependency set

packages/ai declares only its six real runtime deps (kysely, chalk, json5,
tslog, zod, fs-safe, and proxyline were never imported); orphaned root deps
removed. generate-npm-shrinkwrap now treats publishable packages/* like
publishable plugins so the AI tarball pins its transitive tree even though
workspace deps are omitted from the root shrinkwrap. knip learns the
package entry points; the tsdown dts neverBundle option moves to its
documented deps.dts home; the README documents the no-semver internal/*
contract and host ports.

* docs(ai): add minimal external-consumer example app

examples/ai-chat consumes only the public @openclaw/ai surface (built dist
via the workspace link): isolated runtime, built-in provider registration,
one streamed completion. Supports Anthropic/OpenAI via env keys and a
keyless local Ollama target; live-verified against Ollama.

* docs(ai): document the @openclaw/ai package and workspace shrinkwrap boundary

* chore(check): include examples/ in duplicate-scan targets

* fix: emit normalization package subpaths

* fix: complete AI package boundary artifacts

* fix: align AI package boundary contracts

* fix(ci): stabilize package release contracts

* test: align documentation contract checks

* test: keep cron docs guard aligned

* test: align restored docs contract guards

* test: follow upstream docs contracts

* docs: drop superseded talk wording
2026-07-05 01:56:40 -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
851156af3b feat: animate the OpenClaw mascot across web, iOS, and Android
Ports the openclaw.ai hero mascot animation (body float 4s, eye blink 3s,
antenna wiggle 2s, staggered claw snaps 4s) to every product surface that
shows the logo:

- web: ui/public/favicon.svg now carries SMIL animations, so every <img>
  usage (login gate, sidebar brand, agent avatar fallback) animates with
  no markup changes; CSS animations do not run in <img>-loaded SVGs.
- iOS: new OpenClawMascotView renders the canonical 120x120 vector via
  Canvas + TimelineView (30fps, honors Reduce Motion); OpenClawProMark
  uses it in onboarding, sidebar, and command center. Static PNG imageset
  deleted (watch app keeps its own copy).
- Android: new OpenClawMascot composable (PathParser + infinite
  transitions, honors the OS animator scale) replaces the static vector
  drawable in onboarding and the chat/shell/voice headers, with tint
  support for the monochrome header silhouettes. Drawable deleted.
2026-07-04 20:14:34 -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