Skip to content

Unify semantic modal menu targets#55

Open
JaimeCernuda wants to merge 116 commits into
visual_loopfrom
codex/semantic-menu-interactions
Open

Unify semantic modal menu targets#55
JaimeCernuda wants to merge 116 commits into
visual_loopfrom
codex/semantic-menu-interactions

Conversation

@JaimeCernuda
Copy link
Copy Markdown
Collaborator

Summary

  • Add a render-time semantic hit registry foundation for modal tabs, buttons, and selectable rows.
  • Move settings, doctor, quit confirmation, help tabs, catalog rows, and file-picker rows onto semantic hit targets instead of one-off coordinate thresholds.
  • Factor shared modal chrome so migrated overlays use the same border/padding/content-origin geometry.
  • Add a VHS smoke tape and screenshots for help/settings/catalog visual verification.

Verification

  • go test -p 1 ./tui/internal/ui -run 'TestHitRegistry|TestDoctorTabs|TestSettings|TestHelpTabs|TestCatalogRows|TestFilePickerRows|TestQuitConfirmButtons|TestMouseClickCatalogBrowserUsesRenderedDescRowGeometry|TestMouseClickFilePickerInsertsClickedRow' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/live_clio_catalogs.tape
  • vhs visual_loop/tapes/semantic_menu_smoke.tape

Notes

This is a foundation checkpoint toward the larger semantic menu architecture. Remaining work includes migrating provider setup internals, memory/context/detail views, transcript message targets, and a fuller unified content layout for dense menu bodies like Settings > TUI.

Copy link
Copy Markdown
Collaborator Author

Provider setup slice added in 3498aeb.

What changed:

  • Added semantic hit targets for the LM provider setup grid: provider rows, model rows, advanced config rows, OAuth auth action, and save button.
  • Covered the new render-frame hit path with provider/model/save click regression tests.
  • Added visual_loop/tapes/semantic_provider_setup.tape plus screenshots for initial provider setup and changed provider selection.

Verification run:

  • go test -p 1 ./tui/internal/ui -run 'TestLMConfigProviderRowsUseSemanticHitTargets|TestLMConfigModelRowsUseSemanticHitTargets|TestLMConfigSaveButtonUsesSemanticHitTarget|TestLMConfigLayoutRespondsToTerminalHeight|TestLMConfigModalHeightDoesNotExceedTerminal' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_provider_setup.tape

I inspected semantic_provider_setup.png and semantic_provider_setup_provider_changed.png; the grid stays stable and the provider selection redraws cleanly.

Copy link
Copy Markdown
Collaborator Author

Conversation interaction slice added in b12eb64.

What changed:

  • Added render-derived semantic hit targets for visible conversation part blocks.
  • Clicking a rendered part now moves focus to the conversation pane and places the body cursor on that specific message/part.
  • Clicking the already selected part again opens the same detail path as Enter / Ctrl+E, so mouse-only users can drill into a specific visible message part without a parallel fake detail path.
  • Added regression tests for click-to-select and second-click-to-detail through the semantic hit registry.

Verification run:

  • go test -p 1 ./tui/internal/ui -run 'TestConversationPartsUseSemanticHitTargets|TestConversationSelectedPartSecondClickOpensDetail|TestHitRegistry' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/live_clio_provenance_detail.tape

I inspected live_clio_provenance_selection.png and live_clio_provenance_detail.png; the selected trace-metadata block and detail modal still render correctly after the conversation hit-target migration.

Copy link
Copy Markdown
Collaborator Author

Added the context-row/detail slice on codex/semantic-menu-interactions (9afd623).

What changed:

  • Context files now participate in the semantic interaction model: render-time hit targets for the CONTEXT header and file rows, plus keyboard parity for selecting rows and opening detail.
  • Context rows now open a shared detail modal with path, mode, timestamps, owning session, agent, and actions instead of being a dead sidebar label.
  • Sidebar rendering now reserves visible space for CONTEXT even when the sessions list overflows, which the visual loop caught on the first pass.
  • Detail view shell now uses the shared modal surface.

Verification:

  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_context_detail.tape

New visual artifacts:

  • visual_loop/screenshots/semantic_context_row_selected.png
  • visual_loop/screenshots/semantic_context_detail.png

Copy link
Copy Markdown
Collaborator Author

Added another semantic-menu architecture slice on codex/semantic-menu-interactions (d5c5370).

What changed:

  • Added a reusable registerModalButtons primitive next to the existing semantic modal tab helper.
  • Migrated quit confirmation button hits onto that primitive.
  • Removed the old coordinate-third fallback that guessed close/no/detach from click position.
  • Inside-modal non-button clicks are now inert; outside clicks still dismiss as the existing “no/cancel” path.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestQuitConfirm|TestHitRegistry|Test.*Semantic' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_quit_confirm.tape

New visual artifact:

  • visual_loop/screenshots/semantic_quit_confirm.png

Copy link
Copy Markdown
Collaborator Author

Added the MCP management modal slice on codex/semantic-menu-interactions (14ca221).

What changed:

  • Moved MCP install/remove overlays onto the shared modal surface instead of plain text blocks.
  • Added shared semantic button usage for install/remove/cancel actions.
  • Registered MCP remove rows as render-time semantic hit targets.
  • Removed the old MCP remove coordinate row-click fallback so blank modal space no longer triggers a remove.
  • Tightened MCP install examples after the screenshot showed awkward wrapping.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestMcp|TestQuitConfirm|TestHitRegistry' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_mcp_install.tape

New visual artifact:

  • visual_loop/screenshots/semantic_mcp_install.png

Copy link
Copy Markdown
Collaborator Author

Added the workspace switcher slice on codex/semantic-menu-interactions (c051da5).

What changed:

  • Moved the workspace switcher onto the shared modal surface.
  • Registered each workspace row as a render-time semantic hit target.
  • Removed the workspace switcher coordinate row-click fallback, so blank modal space no longer selects/switches workspaces.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestWorkspaceSwitcher|TestHitRegistry' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_workspace_switch.tape

New visual artifact:

  • visual_loop/screenshots/semantic_workspace_switch.png

Copy link
Copy Markdown
Collaborator Author

Added the file-picker semantic row-hit slice on codex/semantic-menu-interactions (9d5a707).

What changed:

  • Gave each file-picker result row a stable semantic hit ID.
  • Updated row-click tests to use the hit registry instead of reconstructed coordinates.
  • Removed the file-picker fallback that inserted files by recomputing row offsets from mouse coordinates.
  • Added a blank-space regression so clicks inside the picker but outside rows cannot insert a file.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestFilePicker|TestMouseClickFilePicker|TestHitRegistry' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_file_picker.tape

New visual artifact:

  • visual_loop/screenshots/semantic_file_picker.png

Copy link
Copy Markdown
Collaborator Author

Palette menu slice pushed in ac9bb0d.

What changed:

  • Command palette rows and search result rows now register semantic render-time hit targets (palette:command:*, palette:search:*).
  • Removed the old palette coordinate row-decoding fallback, so blank-space clicks inside the modal no longer accidentally choose a command based on guessed row math.
  • Palette command/search modes now use the shared modal surface, keeping shell sizing and chrome consistent with the migrated menu family.
  • Added regressions for command row clicks, search result row clicks, and non-row clicks.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestPalette|TestSearchPalette|TestHitRegistry' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • VHS tape: visual_loop/tapes/semantic_palette.tape
  • Screenshots inspected: visual_loop/screenshots/semantic_palette_commands.png, visual_loop/screenshots/semantic_palette_search.png

Copy link
Copy Markdown
Collaborator Author

Core menu semantic-hit cleanup pushed in 36484e8.

What changed:

  • Settings now registers semantic hit targets for the remaining Model and Agent rows, not just tabs/theme/TUI/language rows.
  • Help, Doctor, Settings, and Catalog overlay click handlers no longer decode row/column coordinates for in-modal actions. They only handle outside-click close; rendered hit targets are the source of truth.
  • Removed old coordinate helpers for settings tab/row selection and catalog row lookup.
  • Updated tests to click semantic ids directly and added regressions for Settings model/agent row targets plus Catalog non-row clicks.

Verification:

  • Focused semantic/menu test run passed.
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • VHS: vhs visual_loop/tapes/semantic_menu_smoke.tape
  • Screenshots inspected: semantic_menu_help_commands.png, semantic_menu_settings_tui.png, semantic_menu_tools_catalog.png, semantic_menu_doctor_capabilities.png.

Visual note: this confirms the shared modal shell and tab/list interaction path are stable. Catalog density/truncation and Settings TUI long wrapped hint lines are still product UX follow-up work for the next layout-unification slice.

Copy link
Copy Markdown
Collaborator Author

Shared modal list slice pushed in d8f8366.

What changed:

  • Added a reusable renderModalList primitive for modal list rows: selected-row highlight, disabled/status badges, bounded wrapped descriptions, and one semantic hit target spanning each rendered title/description block.
  • Migrated Catalog browser rows to this primitive, removing Catalog-local row-hit bookkeeping.
  • Catalog descriptions now use available modal width and can wrap to a second line instead of collapsing into one long truncated text row.
  • Added a primitive-level regression proving wrapped description rows produce one hit covering the full rendered item.

Verification:

  • Focused Catalog/modal-list tests passed.
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_menu_smoke.tape
  • Refreshed/inspected visual_loop/screenshots/semantic_menu_tools_catalog.png plus the Help/Settings/Doctor smoke images.

Visual note: the Catalog view is substantially more readable now because descriptions use the wide modal and row hits span wrapped blocks. Very long tool descriptions still need a future content-design pass, but the reusable layout path is now in place.

Copy link
Copy Markdown
Collaborator Author

File Picker modal-list migration pushed in fb820cd.

What changed:

  • File Picker rows now use the shared renderModalList primitive instead of local row rendering/hit bookkeeping.
  • Existing semantic hit ids (file-picker:item:*) are preserved, and the click action still inserts the selected file reference through the same key path.
  • Fixed modal height behavior is preserved while moving row selection styling and hit registration onto the shared layout path.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestFilePicker|TestMouseClickFilePicker|TestModalList' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_file_picker.tape
  • Screenshot inspected: visual_loop/screenshots/semantic_file_picker.png.

Copy link
Copy Markdown
Collaborator Author

Settings choice-list migration pushed in 9557f67.

What changed:

  • Settings Theme and Language tabs now render their selectable rows through the shared renderModalList primitive.
  • Row hit registration now supports multi-line item hits in Settings, so title/detail rows share one semantic target.
  • Existing preview semantics are preserved: theme/language clicks still preview without closing Settings, and Enter remains the apply path.
  • Added visual-loop evidence for Theme and Language settings states.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestSettings.*(Theme|Language|Semantic|Tabs)|TestModalList' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_settings_lists.tape
  • Screenshots inspected: visual_loop/screenshots/semantic_settings_theme.png, visual_loop/screenshots/semantic_settings_language.png.

Copy link
Copy Markdown
Collaborator Author

Provider setup/list-hit consolidation pushed in 519861b.

What changed:

  • Added shared registerModalListHits for registering list-derived modal hit targets.
  • Catalog and File Picker now use the shared registration helper instead of hand-looping list hits.
  • LM provider setup provider/model row hit registration now builds modalListHit entries and registers them through the shared helper.
  • LM provider setup tests now click semantic ids (lm-config:provider:*, lm-config:model:*, lm-config:save) instead of calculated coordinates.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'Test(LMConfig(ProviderRowsUseSemanticHitTargets|ModelRowsUseSemanticHitTargets|SaveButtonUsesSemanticHitTarget)|CatalogRowsUseSemanticHitTargets|FilePickerRowsUseSemanticHitTargets|ModalList)' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_provider_setup.tape
  • Screenshots inspected: visual_loop/screenshots/semantic_provider_setup.png, visual_loop/screenshots/semantic_provider_setup_provider_changed.png.

Visual note: this is a semantic architecture slice, not a provider-layout redesign. The provider setup modal remained visually stable; provider/model row rendering can still be migrated to the shared visual list renderer in a later pass.

Copy link
Copy Markdown
Collaborator Author

Pushed 4cd07d1 (Share layered modal surface rendering).

What changed:

  • Added renderModalFrameWithSurfaceLayer, a shared modal primitive for overlays that need an opaque/click-absorbing surface while keeping header tabs/buttons clickable above it.
  • Migrated both command palette and message-search palette to that primitive, removing their local suppressButtonHits + manual close-button re-registration pattern.
  • Added TestModalFrameWithSurfaceLayerKeepsHeaderControlsReachable to prove surface absorption plus live header controls, and kept existing palette row/wheel/close tests passing.
  • Updated visual_loop/MOUSE_INTERACTION_AUDIT.md with the new migration record.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestModalFrameWithSurfaceLayer|TestPalette(Command|Search|Mouse|NonRow|Close)|TestModalList|TestHeader' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_palette.tape

Visual artifacts refreshed/inspected:

  • visual_loop/screenshots/semantic_palette_commands.png
  • visual_loop/screenshots/semantic_palette_search.png

Copy link
Copy Markdown
Collaborator Author

Pushed b0ebc7a (Use shared list region for settings hits).

What changed:

  • Settings now registers body wheel handling and selectable rows through registerModalListRegion using the actual rendered body rows.
  • Removed the settings-specific split between direct body wheel registration and separate list-hit registration.
  • Left inline TUI left/right controls on the shared modalCellHit primitive so arrow controls still sit above row/body targets.
  • Updated visual_loop/MOUSE_INTERACTION_AUDIT.md with the settings migration record.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestSettings.*(Mouse|Rows|Language|TUI|Theme|Agent|Wheel)|TestModalListRegion' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_settings_lists.tape

Visual artifacts refreshed/inspected:

  • visual_loop/screenshots/semantic_settings_theme.png
  • visual_loop/screenshots/semantic_settings_language.png

Copy link
Copy Markdown
Collaborator Author

Pushed 454e70f (Share modal wheel region registration).

What changed:

  • Added registerModalWheelRegion, a shared render-relative helper for modal scroll regions that are not simple selectable lists.
  • Migrated LM/provider setup provider/model/advanced wheel boxes to the shared helper.
  • Added TestModalWheelRegionRegistersRelativeToContent to lock down the primitive geometry.
  • Updated visual_loop/MOUSE_INTERACTION_AUDIT.md with the provider wheel migration record.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestModalWheelRegion|TestLMConfig.*(Wheel|Mouse|Provider|Model|Advanced|Save|Auth)' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_provider_setup.tape

Visual artifacts refreshed/inspected:

  • visual_loop/screenshots/semantic_provider_setup.png
  • visual_loop/screenshots/semantic_provider_setup_provider_changed.png

Copy link
Copy Markdown
Collaborator Author

Pushed f239044 (Register sidebar sessions as semantic hits).

What changed:

  • Sidebar session rows now register render-time semantic hit targets (sidebar:session:<id>) during renderSidebar.
  • Expanded child/nanoagent rows get one-line targets from the rendered row geometry instead of relying only on reverse coordinate math.
  • Added shared activateSidebarSession behavior so semantic targets and the old coordinate fallback use the same select/toggle state transitions.
  • Added regression tests for selecting normal sessions, selecting expanded child sessions, and toggling children from the selected parent via semantic targets.
  • Updated visual_loop/MOUSE_INTERACTION_AUDIT.md.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestSidebar.*Semantic|TestMouseClick(ChangesFocus|SelectedParent|ExpandedChild|TogglesSidebar)|TestContext.*Hit|TestContextRows' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/live_alcf_20260525_sidebar_sections.tape

Visual artifacts refreshed/inspected:

  • visual_loop/screenshots/live_alcf_20260525_sidebar_sessions_header_focused.png
  • visual_loop/screenshots/live_alcf_20260525_sidebar_sessions_collapsed.png
  • visual_loop/screenshots/live_alcf_20260525_sidebar_sections_expanded.png

Copy link
Copy Markdown
Collaborator Author

Pushed ccf9d10 (Register input command chip hit).

What changed:

  • The mouse-mode input / chip now registers a render-time semantic hit target (input:command) when the input pane renders.
  • Added shared openCommandPalette, used by keyboard /, footer command click, input chip semantic click, and the compatibility coordinate fallback.
  • Added TestInputCommandChipUsesSemanticHitTarget.
  • Updated visual_loop/MOUSE_INTERACTION_AUDIT.md.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestInputCommandChip|TestMouseCommandButton|TestFooter.*Hit|TestHeader.*Hit|TestViewEnablesMouse|TestMouseClickChangesFocus|TestPalette|TestSearchPalette' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_palette.tape

Visual artifacts refreshed/inspected:

  • visual_loop/screenshots/semantic_palette_commands.png
  • visual_loop/screenshots/semantic_palette_search.png

Copy link
Copy Markdown
Collaborator Author

Pushed 6c0ce29 (Share sidebar section header actions).

What changed:

  • Added shared activateSidebarSection for sessions/context header toggles.
  • Registered a render-time sidebar:sessions:header target from the rendered sidebar title row.
  • Routed the existing context header target, keyboard section toggle, and coordinate fallback through the same action.
  • Added TestSidebarSessionsHeaderUsesSemanticHitTarget.
  • Updated visual_loop/MOUSE_INTERACTION_AUDIT.md.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestSidebar.*Semantic|TestSidebar.*Header|TestContextHeader|TestMouseClickTogglesSidebarSections|TestContextRows|TestContextSection' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/live_alcf_20260525_sidebar_sections.tape

Visual artifacts inspected:

  • visual_loop/screenshots/live_alcf_20260525_sidebar_sessions_header_focused.png
  • visual_loop/screenshots/live_alcf_20260525_sidebar_sessions_collapsed.png

Copy link
Copy Markdown
Collaborator Author

Pushed cee15ec (Fix standalone memory detail view).

What changed:

  • Fixed /memory so its async detail result can open as a standalone detail modal instead of being discarded by the catalog-only detail guard.
  • Added transcript evidence to the memory inspector: loaded messages, addressable detail parts, tool calls/results/errors, and compaction markers.
  • Tightened shared modal-list wrapping by removing double indentation on description continuation rows.
  • Recorded the latest user-observed follow-up queue in visual_loop/MOUSE_INTERACTION_AUDIT.md (close/back consistency, wrapping, tool catalog metadata density, settings/TUI mouse parity, top-right affordance VHS checks, scoped copy/paste tasks).

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestStandaloneMemoryDetail|TestPaletteMemory|TestModalListDescriptionContinuation|TestFormatMemoryInspector' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • VHS: semantic_header_actions.tape, semantic_settings_lists.tape, semantic_menu_smoke.tape, live_alcf_20260525_memory.tape, live_clio_memory.tape

Visual artifacts inspected:

  • visual_loop/screenshots/semantic_header_actions_base.png
  • visual_loop/screenshots/semantic_settings_theme.png
  • visual_loop/screenshots/semantic_settings_language.png
  • visual_loop/screenshots/semantic_menu_tools_catalog.png
  • visual_loop/screenshots/semantic_menu_settings_tui.png
  • visual_loop/screenshots/live_alcf_20260525_memory_inspector.png
  • visual_loop/screenshots/live_alcf_20260525_memory_inspector_pagedown.png
  • visual_loop/screenshots/live_clio_memory_inspector.png

Notes from inspection:

  • Top-right help/settings are visible in the refreshed header capture.
  • Tool catalog no longer repeats the command name as a description, but it is now sparse; the next pass should fill that row space with useful metadata rather than filler.
  • Memory inspector now opens correctly and shows transcript evidence in live CLIO/ALCF captures.

Copy link
Copy Markdown
Collaborator Author

Pushed ccda57c (Enrich tool catalog row metadata).

What changed:

  • Top-level /tools catalog rows now keep the unified built-in + MCP list but add compact operational metadata from the existing tool contract: owner, permission default, input schema field names, and tags.
  • Repeated command-name descriptions and long Agent story prose stay out of the list view; full descriptions, visibility, schema, agents, and annotations remain in the Enter/detail view.
  • Tool rows use a one-line metadata summary in the list so the catalog stays scan-friendly and avoids the raw prose wall seen in the first visual pass.
  • Added regression coverage for unified tool rows and the new metadata-summary helper.
  • Updated the mouse/interaction audit implementation record.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestCatalogUnifiedTools|TestToolCatalogDescription|TestCatalogBrowser' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • VHS: vhs visual_loop/tapes/semantic_menu_smoke.tape

Visual artifact inspected:

  • visual_loop/screenshots/semantic_menu_tools_catalog.png

Local binary check:

  • ~/.local/bin/gact -> /home/jcernuda/gact-tui/tui/gact
  • gact --version reports revision ccda57c66ea0.

Copy link
Copy Markdown
Collaborator Author

Pushed 04f0160 (Share wide modal sizing policy).

What changed:

  • Added a shared modal width policy with standard and wide variants.
  • Provider setup now uses the shared wide-modal width instead of its own viewport formula.
  • Expanded compose now uses the same shared wide-modal width, keeping the large editor consistent with provider setup while preserving shared frame/header buttons.
  • Added unit coverage proving wide width behavior and that LM config + compose consume the shared wide policy.
  • Updated the interaction audit implementation record.

Verification:

  • go test -p 1 ./tui/internal/ui -run 'TestWideModalWidth|TestLMConfigAndCompose|TestCompose|TestLMConfig' -count=1
  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • VHS: vhs visual_loop/tapes/semantic_compose_modal.tape && vhs visual_loop/tapes/semantic_provider_setup.tape

Visual artifacts inspected:

  • visual_loop/screenshots/semantic_compose_modal.png
  • visual_loop/screenshots/semantic_provider_setup.png
  • visual_loop/screenshots/semantic_provider_setup_provider_changed.png

Local binary check:

  • ~/.local/bin/gact -> /home/jcernuda/gact-tui/tui/gact
  • gact --version reports revision 04f016035293.

Copy link
Copy Markdown
Collaborator Author

Update on the semantic menu/mouse loop:

  • Shared overlay outside-click policy now handles common close-on-outside behavior from the mouseOverlay table, with explicit exceptions for quit confirmation and invalid nil-state overlays.
  • Settings > TUI now has semantic hit targets for every editable row, including full row/hint selection plus value/left/right controls. This fixes the collapse-threshold-only mouse behavior.
  • Provider setup now has mouse targets for provider/model filter headers, API key, API base, refresh, auth, provider/model rows, advanced controls, save, and close. The refresh button uses the same path as Ctrl+R.
  • Help/Doctor/Metrics scrollable frames, Settings, and palette now use stable padded modal body heights so short tabs/filter results do not resize the whole window.
  • Palette command rows now avoid repeating the command name as the description; they prefer useful descriptions, then non-duplicate titles, then source fallback.

Verification:

  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • VHS screenshots regenerated and inspected:
    • visual_loop/screenshots/semantic_settings_theme.png
    • visual_loop/screenshots/semantic_settings_language.png
    • visual_loop/screenshots/semantic_provider_setup.png
    • visual_loop/screenshots/semantic_provider_setup_provider_changed.png
    • visual_loop/screenshots/semantic_palette_commands.png
    • visual_loop/screenshots/semantic_palette_search.png

Commit: e79c688

Copy link
Copy Markdown
Collaborator Author

Pushed 8bad08d Add shared modal scroll indicators.

What changed:

  • Replaced numeric scroll ranges in shared scrollable modals with a right-edge scroll rail/thumb, so Doctor, Metrics, Help, and detail views inherit the same semantics.
  • Removed detail title suffixes like (line 4-6 of 6); scroll state is now shown visually in the body.
  • Padded message-search palette bodies to the same stable modal height as the command palette.
  • Removed the ellipsis from the English Settings > Model Change provider entry.
  • Updated modal/detail/doctor/metrics regression tests and refreshed VHS PNG artifacts under visual_loop/screenshots/.

Verified:

  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_menu_smoke.tape
  • vhs visual_loop/tapes/semantic_palette.tape
  • Inspected generated screenshots for Doctor Capabilities, Metrics, Tool Detail, Search Palette, Settings TUI, and Help Commands.

Copy link
Copy Markdown
Collaborator Author

Pushed 0ceb59c Share catalog scroll affordance.

What changed:

  • Catalog browser bodies now reuse the shared side scroll rail/thumb affordance instead of inserting textual above / more rows.
  • Catalog list rows reserve room for the rail so row content and the scroll indicator do not collide.
  • Added a catalog regression proving long catalogs render the shared rail and do not render textual scroll-count rows.
  • Updated the mouse interaction audit and refreshed catalog/menu VHS screenshots.

Verified:

  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_menu_smoke.tape
  • vhs visual_loop/tapes/live_clio_catalogs.tape
  • Inspected refreshed Tools Catalog, Tool Detail, and Agents Catalog screenshots.

Copy link
Copy Markdown
Collaborator Author

Pushed 49a693f Share text entry modal rendering.

What changed:

  • Added a shared single-line text-entry modal primitive for editor prompt rendering, cursor styling, status rows, footer text, and header-button geometry.
  • Migrated Rename, Add file to context, and Install MCP server onto that shared primitive.
  • Added a regression test proving the three text-entry modals share editor prompt/header-button geometry.
  • Updated the mouse interaction audit and refreshed VHS screenshots for rename/context-add/MCP-install.

Verified:

  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_text_entry_modals.tape
  • vhs visual_loop/tapes/semantic_mcp_install.tape
  • Inspected refreshed Rename, Add file to context, and MCP install screenshots.

Copy link
Copy Markdown
Collaborator Author

Pushed e037f8d (Share workspace list modal rendering).

What changed:

  • Added a shared selectable-list modal primitive for body rendering, optional side-scroll rail, list hit registration, wheel regions, and modal surface wheel blocking.
  • Migrated the workspace switcher onto that primitive.
  • Removed workspace switcher textual ↑/↓ count rows in favor of the shared side rail.
  • Updated workspace switcher regression coverage and refreshed the VHS screenshot.

Verified:

  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_workspace_switch.tape
  • Inspected refreshed workspace switcher screenshot.

Copy link
Copy Markdown
Collaborator Author

Pushed de91318 (Tighten modal button and provider labels).

What changed:

  • Restored modal header/action buttons as visible clickable chips through the shared modal button renderer.
  • Moved quit confirmation to the shared modal width so the prose wraps cleanly and no longer uses a one-off narrow shape.
  • Expanded Settings > TUI first-line click targets across the full row and slightly widened arrow hit areas.
  • Renamed the LM provider setup right-side panel from Selected to Configuration across locales and updated the Spanish localization test.
  • Refreshed affected view goldens and VHS screenshots.

Verified:

  • go test -p 1 ./tui/internal/ui ./tui/internal/client ./emulator/pkg/gact -count=1
  • go build -p 1 -o tui/gact ./tui
  • vhs visual_loop/tapes/semantic_menu_smoke.tape
  • vhs visual_loop/tapes/semantic_provider_setup.tape
  • vhs visual_loop/tapes/semantic_quit_confirm.tape
  • Inspected refreshed Settings TUI, provider setup, quit confirmation, and help commands screenshots.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant