Chat: surface the full / command catalog, grouped by Mac buckets with styled rows - #893
Conversation
Enhance the inline "/" slash command palette (added in openclaw#890) so it matches Mac's grouped, styled command menu: - Group commands under Mac's Session / Model / Tools / Agents display buckets with uppercase category subheadings; the run options (verbose/reasoning/fast/trace/usage/elevated/exec/think/model) surface under "Model" instead of being truncated off a flat alphabetical list. - Mac-style rows: icon, /name (bold, default font), [args] hint (mono, muted), right-aligned description, and an accent-tinted "N options" badge. - The palette filters and ranks live as you type; relevance order is preserved within each group so the top match stays the default Enter target. - Auto-scroll the keyboard-selected row into view during arrow navigation. Bucket mapping mirrors Mac's mapCategory + CATEGORY_OVERRIDES; ordering mirrors CATEGORY_ORDER. No item cap (the popup ScrollViewer bounds height, so no bucket is silently dropped). No custom "Run options" menu (Mac has none) and no sessions.patch UI plumbing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Codex review: needs maintainer review before merge. Reviewed June 30, 2026, 1:49 PM ET / 17:49 UTC. Summary Reproducibility: not applicable. as a PR rather than a standalone bug report. Source inspection confirms current main still has the eight-item command cap, and the latest PR head source-verifiably addresses the earlier no-match key-trapping issue. Review metrics: 3 noteworthy metrics.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land the grouped full-catalog palette after ordinary maintainer UI review if the bounded composer-interaction risk is acceptable. Do we have a high-confidence way to reproduce the issue? Not applicable as a PR rather than a standalone bug report. Source inspection confirms current main still has the eight-item command cap, and the latest PR head source-verifiably addresses the earlier no-match key-trapping issue. Is this the best way to solve the issue? Yes. Extending the shared presentation helper and WinUI composer, with focused tests and no protocol or command execution changes, is a narrow maintainable way to surface the full grouped catalog. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against a13d683de90f. Label changesLabel justifications:
Evidence reviewedWhat I checked:
Likely related people:
What the crustacean ranks mean
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
|
UI polish for the grouped "/" command palette plus the Codex/ClawSweeper review fix: - Highlight the matched query substring in the command name + description with a soft accent tint and white (primary) text. Uses TextHighlighter (rectangular, layout-safe); the alpha is baked into the Color because TextHighlighter ignores SolidColorBrush.Opacity. - Make the slash flyout background opaque, matching the composer textbox (TextControlBackground composited over the base surface) instead of a lighter floating surface that showed chat content through it. - Hide the flyout entirely when nothing matches (drop the "No matching commands" hint). - Preserve the GLOBAL best Search match as the default Enter/Tab target across grouped buckets. Grouping renders by Mac bucket order, but the weak first-bucket row is no longer the default selection; keyboard selection now defaults to the top-ranked match via ChatCommandCatalogView.GroupForPalette / GroupedPalette.DefaultSelectionIndex (addresses ClawSweeper review at OpenClawComposer.cs:474). Adds cross-bucket regression tests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Addressed the P2 selection-order finding in d6a2e1d. Fix: Keyboard selection no longer derives from display-bucket order. The grouped rendering is unchanged, but the default Enter/Tab target now pins the global best Tests (cross-bucket regression): Added to
Validation: @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
Only trap composer keys while the slash command catalog is still loading and the loading popup is visible. Once the catalog is loaded with no matching command, let no-match slash input behave like ordinary text. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Summary
/slash palette (added in Chat: inline /-triggered gateway command catalog menu (Mac parity) #890) showed a flat, alphabetically-ordered list capped at 8 items, so most of the gateway command catalog was hidden — late-alphabet run options (/verbose,/reasoning,/trace,/usage) and many other commands were simply truncated off — and there were no category subheadings, diverging from Mac's grouped menu./. With only 8 of N commands ever visible, most commands (incl. the run options) were effectively unreachable from the palette unless you already knew their exact name./name·[args]· right-aligned description · accent-tintedN optionsbadge). Run options appear under MODEL./now reveals the whole command catalog in a grouped, scrollable, Mac-faithful menu (previously you saw at most 8 rows). Run options live under MODEL; the list narrows/ranks/highlights as you type with the strongest match kept as the default Enter target.commands.listcatalog; the PR only changes how they are surfaced/grouped/selected. No custom "Run options" (•••) menu (Mac has none) and nosessions.patchUI plumbing. The arg-choice picker and loading-state Enter/Tab/Escape behavior from Chat: inline /-triggered gateway command catalog menu (Mac parity) #890 are unchanged; loaded no-match text now falls through as ordinary composer input.Change Type (select all)
Scope (select all touched areas)
winnodeLinked Issue/PR
/-triggered gateway command catalog menu)Validation
After code changes, on Windows ARM64 (
OPENCLAW_REPO_ROOTset to the worktree):./build.ps1— ✅ all 5 projects built (Shared, Cli, WinNodeCli, SetupEngine, WinUI)dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --no-restore— ✅ Passed: 2683, Failed: 0, Skipped: 31dotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj --no-restore— ✅ Passed: 1444, Failed: 0New focused tests in
CommandCatalogPresentationTests.cscover the Mac 4-bucket mapping (Bucket), bucket ordering (GroupBywithDisplayOrder), labels, within-group relevance preservation, and the global-best default selection across buckets (GroupForPalette/GroupedPalette.DefaultSelectionIndex, incl. a cross-bucket regression test).AppRefactorContractTests.ChatSlashPalette_HiddenNoMatchStateDoesNotTrapKeyscovers the follow-up no-match key-trapping regression.Real behavior proof
./run-app-local.ps1 -NoBuild -AllowNonMain), connected to a gateway exposing thecommands.listcatalog.824774ca/— observe the grouped palette./reas— observe live filtering down to/reasoningunder MODEL, with the matchedreashighlighted./zzz) — the flyout hides./verbose,/reasoning,/exec,/think, …) appear under MODEL; each row showsicon · /name · [args] · right-aligned description · "N options"badge; the matched substring is highlighted (soft tint + white text); the list filters and re-ranks as you type; the default Enter target is the global best match across buckets; the flyout background matches the textbox and hides on no match. The follow-up fix limits zero-selectable key trapping to the visible loading state so loaded hidden no-match input falls through as ordinary composer text.YesSecurity Impact (required)
NoNoNoNo(this is presentation/ordering only over the existingcommands.listcatalog; no new command is invoked)NoCompatibility / Migration
YesNoNoReview Conversations