Skip to content

Apply design-system composer to app chat UI#984

Merged
shanselman merged 1 commit into
openclaw:mainfrom
karkarl:karkarl-winui-composer-design
Jul 15, 2026
Merged

Apply design-system composer to app chat UI#984
shanselman merged 1 commit into
openclaw:mainfrom
karkarl:karkarl-winui-composer-design

Conversation

@karkarl

@karkarl karkarl commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Summary

Applies the native WinUI chat-composer redesign and Chat settings directly to current main. The branch is independent of PR #962 and has been squash-rebased after PRs #990, #988, #986, and #991 landed.

Composer redesign

  • Rebuilds the composer as one rounded Fluent surface containing an auto-growing input above a space-between toolbar.
  • Left cluster: Add, session, model, and reasoning pickers. Right cluster: Dictate, speaker mute, and one primary slot that switches between accent Send and neutral Stop.
  • Session picker uses a two-line ContentFlyout with model subtext and localized current-session accessibility state.
  • Model and reasoning pickers use checked ToggleMenuFlyoutItem rows.
  • FunctionalUI caches both content and menu flyouts by render path so open pickers survive unrelated rerenders; cached flyouts are pruned with their render subtrees.
  • Preserves queued-send behavior, composerInput identity, current-main speaker/read-aloud behavior, and the single Send/Stop action slot.

Chat settings

  • Adds persisted SettingsData.ShowChatToolCalls and OpenClawChatRoot.SetToolCallsVisible application.
  • Adds Read responses aloud and Show tool calls and usage settings.
  • Suppresses settings side effects while values are loading.
  • Localizes every new visible and accessibility value across en-US, fr-FR, nl-NL, zh-CN, and zh-TW.

Rebase integration

  • Keeps PR fix(chat): replace NativeElement escape hatch with FunctionalUI ComboBox primitive (supersedes #973) #991's reusable FunctionalUI ItemComboBox primitive while the redesigned composer uses declarative flyouts.
  • Retains ChannelGroup in its new focused owner file and widens its session projection with model/provider metadata.
  • Replaces the obsolete ComboBox source guard with assertions for the declarative flyout contract and continued rejection of NativeElement escape hatches.
  • Resolves the prior localization review finding.

Validation

Current head: 6220c85133723b5b4bebb2dfbab44b7ae4c90648

  • .\build.ps1 — passed; all five source projects built.
  • dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restore — 2,787 passed, 31 skipped, 0 failed.
  • dotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restore — 1,717 passed, 0 failed.
  • dotnet test .\tests\OpenClawTray.FunctionalUI.Tests\OpenClawTray.FunctionalUI.Tests.csproj --no-restore — 15 passed, 0 failed.
  • dotnet test .\tests\OpenClaw.Tray.UITests\OpenClaw.Tray.UITests.csproj -r win-arm64 --no-restore --filter "FullyQualifiedName~SessionTitleBehaviorProofTests" — 1 passed, 0 failed.
  • git diff --cached --check — passed before commit.
  • Final Claude Opus 4.8 + GPT-5.3-Codex adversarial rerun — both clean, no actionable findings; Codex confidence 93%.

Real behavior proof

  • Environment: native Windows ARM64 accessibility test host.
  • Current-head UI automation launched the real WinUI app, navigated duplicate session rows into chat, found ChatComposerInput, and verified the redesigned Session button announced and selected the original route keys for both sessions.
  • Observed result: SessionTitleBehaviorProofTests passed on the rebased head.
  • Not verified / blocked: a new current-head manual screenshot capture was not available in this closeout pass. The images below are visual references from the pre-rebase implementation; the current-head executable behavior is covered by the UI Automation proof above.
  • Screenshot links verified: Yes.

Visual references

Composer visual reference Picker visual reference Chat settings visual reference

@karkarl karkarl marked this pull request as ready for review July 13, 2026 21:42
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal priority bug or improvement with limited blast radius. labels Jul 13, 2026
@clawsweeper

clawsweeper Bot commented Jul 13, 2026

Copy link
Copy Markdown

Codex review: found issues before merge. Reviewed July 13, 2026, 7:47 PM ET / 23:47 UTC.

Summary
The PR redesigns the native WinUI chat composer with flyout pickers, extends shared FunctionalUI flyout primitives, and adds persisted Chat settings for speech and tool-call visibility.

Reproducibility: not applicable. This PR proposes a user-facing redesign and a new persisted setting rather than repairing a reproducible current-main failure.

Review metrics: 3 noteworthy metrics.

  • Patch scope: 16 files, +643/-240. The branch spans composer rendering, shared UI primitives, persisted settings, localization, and automated coverage.
  • Localization gap: 4 English strings in each of 4 non-English locales. The new setting names and descriptions remain untranslated outside en-US.
  • Visible proof: 3 current-head screenshots. The supplied media directly demonstrates the principal native WinUI surfaces changed by the branch.

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:

  • Translate the four new setting values in every non-English locale.
  • Obtain maintainer confirmation that the composer redesign and Settings relocation should land together.

Risk before merge

  • [P1] Moving previously inline chat controls into Settings changes discoverability and the established user workflow; tests cannot determine whether that permanent UX direction is intended.

Maintainer options:

  1. Decide the mitigation before merge
    Land the design-system composer with explicitly approved control placement, genuine translations for every supported locale, and the existing accessibility and persisted-state behavior preserved.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • A maintainer should decide the combined versus split UX boundary; the contributor can then resolve the repeated locale blocker through normal PR follow-up.

Maintainer decision needed

  • Question: Should the composer redesign and relocation of read-aloud and tool-call controls into Settings land together in this PR?
  • Rationale: The branch changes both the composer's presentation and where users control chat behavior, so implementation correctness alone cannot establish the intended permanent UX boundary.
  • Likely owner: shanselman — As a project creator and adjacent Windows UX owner, he is the best available routing candidate for the cross-surface product decision.
  • Options:
    • Approve the combined UX (recommended): Keep both parts together after replacing the English fallback values in all four non-English locales.
    • Split control relocation: Land a composer-focused change separately and preserve the current inline controls until the Settings placement receives explicit approval.

Security
Cleared: The diff changes local WinUI rendering and persisted preferences without adding dependencies, downloaded code, secret access, or broader permissions.

Review findings

  • [P2] Translate the new Chat settings strings — src/OpenClaw.Tray.WinUI/Strings/fr-fr/Resources.resw:4786-4798
Review details

Best possible solution:

Land the design-system composer with explicitly approved control placement, genuine translations for every supported locale, and the existing accessibility and persisted-state behavior preserved.

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

Not applicable: this PR proposes a user-facing redesign and a new persisted setting rather than repairing a reproducible current-main failure.

Is this the best way to solve the issue?

Unclear: the composer implementation is coherent, but maintainers must confirm that moving both controls into Settings is the desired narrow and maintainable UX boundary.

Full review comments:

  • [P2] Translate the new Chat settings strings — src/OpenClaw.Tray.WinUI/Strings/fr-fr/Resources.resw:4786-4798
    The four non-English resource files still use English for both new setting names and descriptions, so French, Dutch, Simplified Chinese, and Traditional Chinese users receive mixed-language Settings UI. Replace these added values with actual locale translations before merge.
    Confidence: 1

Overall correctness: patch is incorrect
Overall confidence: 0.98

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a normal-priority WinUI improvement with a concrete localization blocker and a bounded product-direction question.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (screenshot): Three current-head screenshots directly show the redesigned composer, flyout presentation, and Chat settings surface; any follow-up media should continue to redact private endpoints, account details, and credentials.
  • proof: sufficient: Contributor real behavior proof is sufficient. Three current-head screenshots directly show the redesigned composer, flyout presentation, and Chat settings surface; any follow-up media should continue to redact private endpoints, account details, and credentials.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Three current-head screenshots directly show the redesigned composer, flyout presentation, and Chat settings surface; any follow-up media should continue to redact private endpoints, account details, and credentials.
Evidence reviewed

What I checked:

  • Prior localization blocker remains: Each non-English resource file translates the Chat section heading but leaves the other four newly added setting values in English, producing mixed-language Settings UI. (src/OpenClaw.Tray.WinUI/Strings/fr-fr/Resources.resw:4786, 8434453e792e)
  • Re-review continuity: The current head exactly matches the latest completed ClawSweeper review SHA, so the prior localization finding remains unresolved and is not a late finding. (8434453e792e)
  • Current-head implementation proof: The PR body provides three screenshots showing the redesigned composer, picker flyouts, and new Chat settings surface, alongside successful required build and test results. (src/OpenClaw.Tray.WinUI/Chat/OpenClawComposer.cs:16, 8434453e792e)
  • New persisted UX surface: The branch adds ShowChatToolCalls as a persisted setting and moves tool-call visibility control from the composer into Settings, making permanent control placement a product decision rather than a purely visual refactor. (src/OpenClaw.Shared/SettingsData.cs:86, 8434453e792e)

Likely related people:

  • kenehong: The current-main OpenClawComposer documentation explicitly attributes its existing ChatShell design to Kenny Hong's native-chat-v2 work, making this the strongest named design-history connection available for the affected surface. (role: current composer design antecedent; confidence: medium; files: src/OpenClaw.Tray.WinUI/Chat/OpenClawComposer.cs)
  • shanselman: The repository identifies Scott Hanselman as a project creator, making him a reasonable escalation point for the unresolved cross-surface composer and Settings UX direction. (role: adjacent product and Windows UX owner; confidence: low; files: src/OpenClaw.Tray.WinUI/Chat/OpenClawComposer.cs, src/OpenClaw.Tray.WinUI/Pages/SettingsPage.xaml)
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 (4 earlier review cycles)
  • reviewed 2026-07-13T21:57:16.454Z sha c2db183 :: needs real behavior proof before merge. :: [P2] Translate the new Chat settings strings
  • reviewed 2026-07-13T22:23:02.675Z sha ffd0a89 :: needs real behavior proof before merge. :: [P2] Translate the new Chat settings strings
  • reviewed 2026-07-13T22:56:47.088Z sha 8434453 :: needs real behavior proof before merge. :: [P2] Translate the new Chat settings strings
  • reviewed 2026-07-13T23:28:18.999Z sha 8434453 :: found issues before merge. :: [P2] Translate the new Chat settings strings

@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. 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. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 13, 2026
Rebase the final composer redesign onto current main, preserve the
FunctionalUI picker fix, stabilize menu flyouts across rerenders, localize
Chat settings, and retain current speaker and Send/Stop behavior.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: fef25ef9-fa78-442c-beb0-d0a6f9a8fb92
@shanselman shanselman force-pushed the karkarl-winui-composer-design branch from 8434453 to 6220c85 Compare July 15, 2026 00:34
@shanselman shanselman merged commit 47e4e64 into openclaw:main Jul 15, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient Contributor real behavior proof is sufficient. 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants