Skip to content

feat(chat-ui): redesign composer bottom bar with split Talk control and reasoning-effort chip#100445

Merged
steipete merged 5 commits into
mainfrom
claude/laughing-cannon-21d4f2
Jul 5, 2026
Merged

feat(chat-ui): redesign composer bottom bar with split Talk control and reasoning-effort chip#100445
steipete merged 5 commits into
mainfrom
claude/laughing-cannon-21d4f2

Conversation

@steipete

@steipete steipete commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

The chat composer's bottom bar in the Control UI reads as busy chrome: a divider line splits the input frame in half, the model picker floats near the middle of the bar instead of anchoring with the other controls, Talk has two loose buttons (toggle + gear), the active thinking level is invisible unless you override it, and active states use loud accent/danger fills that compete with the send button.

Why This Change Was Made

Restyles the toolbar into a quiet status row inspired by contemporary composer designs, keeping OpenClaw's own look: the divider is removed so the input frame is the only chrome; Talk becomes a split mic-plus-caret control (mic toggles Talk, the caret opens Talk settings); the model trigger shows the model name with a small pill for the effective reasoning level (accent-washed only when the session overrides the default); and the model/effort/settings cluster right-aligns next to Send. The combined model menu and its reasoning fly-out now anchor to the right so they stay on screen next to the right-aligned trigger. Highlight states were softened across the bar (neutral 7% wash for selected/open controls, quieter run-status borders, softer Talk-active tint).

User Impact

The composer looks calmer and communicates more: users always see the effective reasoning level next to the model, Talk settings are one caret away instead of a second gear, and active/selected controls highlight subtly instead of shouting. No behavior changes — all controls, popovers, and a11y labels work as before (the Talk toggle keeps its localized labels; the effort pill is decorative with the full state in the trigger's aria-label).

Evidence

Requested by the maintainer (composer bottom-bar redesign with subtler highlighting). Verified interactively on the mock Control UI dev server (pnpm dev:ui:mock) in light/dark and mobile (375px) viewports: split Talk control toggles and opens Talk options, model menu plus reasoning slider fly-out stay within the viewport, mobile grid keeps the model+effort chip grouped.

  • pnpm test ui/src/pages/chat ui/src/lib/chat — 126 files, 1999 tests passed
  • pnpm test ui/src/pages/chat/chat-responsive.browser.test.ts — 32 tests passed (real-CSS layout assertions)
  • pnpm check:changed — green, delegated to Blacksmith Testbox (actions run)
  • Codex autoreview (gpt-5.5) — clean, no actionable findings

Before / After (light)

Before After
Before, light theme After, light theme

Before / After (dark)

Before After
Before, dark theme After, dark theme

Model + reasoning popover (after)

Model picker with reasoning slider fly-out, after

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation app: web-ui App: web-ui size: M maintainer Maintainer-authored PR labels Jul 5, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bf3eabab89

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread ui/src/styles/chat/layout.css
Comment thread ui/src/styles/chat/layout.css
@steipete steipete self-assigned this Jul 5, 2026
@clawsweeper

clawsweeper Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 5, 2026, 6:15 PM ET / 22:15 UTC.

Summary
The PR restyles the Control UI chat composer bottom bar with split Talk controls, a reasoning-effort chip, quieter active states, responsive layout coverage, and matching Talk-control docs wording.

Reproducibility: not applicable. for bug reproduction; this is a user-facing Control UI redesign with screenshot proof and responsive test coverage.

Review metrics: 3 noteworthy metrics.

  • Current-main delta: 5 files, +192/-72. This separates the reviewable content delta from the stale PR-base file list before maintainers judge scope.
  • Merge state: CONFLICTING/DIRTY; 6 ahead, 61 behind. The PR cannot land until the exact merge result is refreshed and reviewed.
  • Overlapping composer PRs: 1 open related PR. PR feat(ui): redesign chat composer controls #100461 changes the same composer product surface and needs a maintainer direction choice.

Stored data model
Persistent data-model change detected: persistent cache schema: apps/android/app/src/main/java/ai/openclaw/app/chat/ChatTranscriptCache.kt, unknown-truncated-pull-files. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🦐 gold shrimp
Result: needs maintainer review before merge.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

Risk before merge

  • [P1] GitHub still reports this exact PR head as CONFLICTING/DIRTY, so maintainers need a conflict-free refresh before landing even though the direct current-main content delta is focused.
  • [P1] The open related composer redesign at feat(ui): redesign chat composer controls #100461 overlaps this product surface, so landing both without a maintainer choice could create competing composer UX directions.

Maintainer options:

  1. Decide the mitigation before merge
    Choose the preferred composer direction, then land only a conflict-free exact head with responsive Control UI proof.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • [P2] No narrow ClawSweeper repair remains; the next action is maintainer product direction and conflict-free merge review.

Maintainer decision needed

  • Question: Should maintainers continue with this focused bottom-bar redesign, switch to the broader composer redesign in feat(ui): redesign chat composer controls #100461, or ask for a narrow rebased replacement?
  • Rationale: Both PRs change the same user-facing composer direction, and this head also needs human conflict resolution before the merge result can be trusted.
  • Likely owner: steipete — The account is both the current PR assignee and the strongest recent Control UI Talk/composer history signal.
  • Options:
    • Rebase And Continue This PR (recommended): Resolve the DIRTY/CONFLICTING state on current main and keep this focused bottom-bar redesign if it is the desired UX.
    • Prefer The Broader Redesign: Pause or close this PR if maintainers want PR feat(ui): redesign chat composer controls #100461 to own the composer redesign direction.
    • Request A Narrow Replacement: Ask for a fresh composer-only branch if maintainers want this visual idea without the stale PR-base history.

Security
Cleared: The direct current-main delta is docs, Control UI component code, CSS, and a browser layout test; no concrete security or supply-chain regression was found.

Review details

Best possible solution:

Choose the preferred composer direction, then land only a conflict-free exact head with responsive Control UI proof.

Do we have a high-confidence way to reproduce the issue?

Not applicable for bug reproduction; this is a user-facing Control UI redesign with screenshot proof and responsive test coverage.

Is this the best way to solve the issue?

Unclear as the final product direction: the focused implementation is plausible and the prior blocker is fixed, but maintainers must choose between this PR and the broader overlapping redesign.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against ff440393da6a.

Label changes

Label changes:

  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): The PR body provides before/after composer screenshots plus popover proof for this visual Control UI change, and exact-head proof automation is present.
  • remove rating: 🧂 unranked krab: Current PR rating is rating: 🦐 gold shrimp, so this older rating label is no longer current.
  • remove merge-risk: 🚨 message-delivery: Current PR review selected no merge-risk labels.
  • remove status: ⏳ waiting on author: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P2: This is a normal-priority Control UI feature/polish PR with proof and no evidence of an active shipped-user outage.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): The PR body provides before/after composer screenshots plus popover proof for this visual Control UI change, and exact-head proof automation is present.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body provides before/after composer screenshots plus popover proof for this visual Control UI change, and exact-head proof automation is present.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The PR body provides before/after composer screenshots plus popover proof for this visual Control UI change, and exact-head proof automation is present.
Evidence reviewed

Acceptance criteria:

  • [P1] git diff --check ff44039 -- docs/web/control-ui.md ui/src/pages/chat/chat-responsive.browser.test.ts ui/src/pages/chat/components/chat-composer.ts ui/src/pages/chat/components/chat-model-controls.ts ui/src/styles/chat/layout.css.
  • [P1] Run the focused Control UI responsive browser test on the final exact head.

What I checked:

  • Repository review policy applied: Root, UI, extensions, Android, and iOS AGENTS guidance were read; the relevant rules require current-main review, scoped UI policy, extension boundary awareness, and maintainer review for product direction. (AGENTS.md:29, ff440393da6a)
  • Live PR state: GitHub reports this PR open at head 6b07bd8 with mergeable=CONFLICTING, mergeStateStatus=DIRTY, maintainer/proof labels, 358 changed files in the PR-base diff, and 6 commits ahead / 61 behind current main. (6b07bd8d499a)
  • Focused current-main delta: Direct current-main comparison shows only docs/web/control-ui.md plus four chat UI files differ, totaling +192/-72, so the broad PR file list is stale-base noise rather than the current content delta. (6b07bd8d499a)
  • Composer UI implementation: The PR head renders Talk as a grouped mic toggle plus caret settings button and keeps the model/settings controls in the composer toolbar. (ui/src/pages/chat/components/chat-composer.ts:2003, 6b07bd8d499a)
  • Reasoning chip implementation: The model trigger now separates the model label from an aria-hidden effort chip while preserving the full model/thinking state in the summary aria-label. (ui/src/pages/chat/components/chat-model-controls.ts:207, 6b07bd8d499a)
  • Prior IRC blocker resolved: Current main and the PR head both contain the byte-aware IRC PRIVMSG chunking path from 89881b6, and direct current-main diff shows no IRC file delta. (extensions/irc/src/client.ts:15, 89881b6611a1)

Likely related people:

  • steipete: Current main has recent Talk/composer-adjacent work by Peter Steinberger, and this PR is assigned to the same account with the maintainer label. (role: recent Control UI contributor and likely decision owner; confidence: high; commits: 5e0504aa437e, 6b07bd8d499a; files: ui/src/pages/chat/components/chat-composer.ts, ui/src/pages/chat/components/chat-model-controls.ts, ui/src/styles/chat/layout.css)
  • Yuval Dinodia: Commit 89881b6 added the byte-aware IRC PRIVMSG cap that earlier review cycles required this PR to preserve. (role: recent IRC delivery fix author; confidence: high; commits: 89881b6611a1; files: extensions/irc/src/client.ts)
  • fuller-stack-dev: This account owns the open related PR feat(ui): redesign chat composer controls #100461, which covers the same Control UI composer product direction with broader UI changes and stronger video proof. (role: overlapping composer PR author; confidence: medium; commits: 86f6a29d22a1; files: ui/src/pages/chat/components/chat-composer.ts, ui/src/pages/chat/chat-state.ts, ui/src/styles/chat/layout.css)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (5 earlier review cycles)
  • reviewed 2026-07-05T19:46:15.506Z sha bf3eaba :: found issues before merge. :: [P2] Reset model menu anchoring on mobile | [P2] Keep the Talk settings target touch-sized
  • reviewed 2026-07-05T20:37:55.772Z sha 3c849bd :: found issues before merge. :: [P1] Preserve the current Talk settings contract
  • reviewed 2026-07-05T20:58:04.869Z sha a7a3ee2 :: found issues before merge. :: [P1] Preserve provider onboarding settings on rebase
  • reviewed 2026-07-05T21:16:35.324Z sha 7224c83 :: found issues before merge. :: [P1] Preserve IRC byte-limit chunking on rebase
  • reviewed 2026-07-05T21:25:35.094Z sha 7224c83 :: found issues before merge. :: [P1] Preserve IRC byte-limit chunking on rebase

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. P2 Normal backlog priority with limited blast radius. labels Jul 5, 2026
@openclaw-barnacle openclaw-barnacle Bot added channel: matrix Channel integration: matrix channel: voice-call Channel integration: voice-call channel: whatsapp-web Channel integration: whatsapp-web app: android App: android app: ios App: ios app: macos App: macos gateway Gateway runtime cli CLI command changes scripts Repository scripts agents Agent runtime and tooling channel: irc extensions: openai plugin: logbook Logbook automatic work journal plugin size: XL and removed size: M labels Jul 5, 2026
@steipete

steipete commented Jul 5, 2026

Copy link
Copy Markdown
Contributor Author

Land-ready review proof

Reviewed exact head: 7224c83233b85efec4ba1c954ed5c03a8984f625

Review fixups applied:

  • Restored the split Talk caret to a 44x44 mobile touch target.
  • Kept the combined model menu and reasoning panel inside the viewport through the composer mobile breakpoint, including landscape widths.
  • Added real-CSS regression coverage at 320x568, 375x812, 667x375, and 768x500.

Validation:

  • corepack pnpm test ui/src/pages/chat/chat-view.test.ts ui/src/pages/chat/chat-responsive.browser.test.ts on Blacksmith Testbox tbx_01kwt0e8p14rjsmwj7gf7k96v7: 130/130 passed after the final mainline conflict resolution.
  • corepack pnpm ui:i18n:check on the same final-head Testbox lease: passed.
  • Existing-profile Chrome proof at 375x812: Talk toggle/caret both 44x44; model menu contained within the viewport; no horizontal overflow or console errors.
  • Fresh full-branch autoreview: clean after the accepted responsive-breakpoint finding was fixed and re-reviewed.
  • Exact-head hosted CI/Testbox: run 28755057807 passed on attempt 2 after an unrelated Android test flake passed its failed-job-only rerun; QA Smoke CI and build artifacts passed.
  • OPENCLAW_TESTBOX=1 scripts/pr prepare-run 100445: passed for the exact head above.

Known proof gaps: none for this presentation-only Control UI change. No protocol, auth, persistence, or dependency behavior changed.

@openclaw-barnacle openclaw-barnacle Bot added the docker Docker and sandbox tooling label Jul 5, 2026
@clawsweeper clawsweeper Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jul 5, 2026
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. labels Jul 5, 2026
steipete added 5 commits July 5, 2026 18:25
…nd 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.
@openclaw-barnacle openclaw-barnacle Bot added the channel: slack Channel integration: slack label Jul 5, 2026
@steipete
steipete force-pushed the claude/laughing-cannon-21d4f2 branch from 6109812 to f4904a8 Compare July 5, 2026 22:27
@openclaw-barnacle openclaw-barnacle Bot removed channel: discord Channel integration: discord channel: imessage Channel integration: imessage channel: matrix Channel integration: matrix channel: slack Channel integration: slack channel: voice-call Channel integration: voice-call channel: whatsapp-web Channel integration: whatsapp-web app: android App: android app: ios App: ios app: macos App: macos gateway Gateway runtime cli CLI command changes scripts Repository scripts commands Command implementations docker Docker and sandbox tooling agents Agent runtime and tooling labels Jul 5, 2026
@steipete

steipete commented Jul 5, 2026

Copy link
Copy Markdown
Contributor Author

Merged via squash.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f4904a80d1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +2882 to +2886
.chat-controls__reasoning-panel {
top: auto;
bottom: calc(100% + 8px);
left: 0;
right: auto;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Apply the mobile reasoning-panel reset in landscape

This override only runs at max-width: 768px, but the composer switches into the same mobile grid at max-width: 932px/max-height: 500px landscape. On common phone-landscape widths above 768px, the combined model menu sits in the left grid column while the reasoning panel keeps the desktop right: calc(100% + 8px) placement, so the thinking slider flies off the left edge and becomes unreachable. Please apply this reset to the landscape mobile breakpoint too.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui docs Improvements or additions to documentation maintainer Maintainer-authored PR P2 Normal backlog priority with limited blast radius. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. size: M status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant