feat(tui): universal command palette action system (#194)#461
Merged
Conversation
Owner
Author
Hardening round (commit 44d9ed1)Ran a second adversarial review over the gap-closure; it surfaced issues that I've now fixed:
Verification:
|
… enters compare mode first (#194 review r1)
…dempotent enterCompareMode (#194 review r2)
…y alias); plugins get panel-aware selectedCid (#194 review r3)
…lectedCid (Frontier|Detail else undefined) (#194 review r4)
…o blank adoptSummary) (#194 review r5)
…le routes to Decisions panel (#194 review r6)
…/deny (TOCTOU guard) (#194 review r7)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #194. Turns the TUI command palette into a universal, searchable, context-sensitive action system unified on a single action model.
Actionmodel ({id,label,detail,group,keywords?,available?,enabled?,run}) replaces the old discriminated-unionPaletteItem+ the separate plugin switch. Built-in actions are built from live state; plugins are wrapped by an adapter into the same model.ActionContextfor built-ins; the narrowTuiPluginContextis preserved for plugins (blast radius unchanged).available(ctx)hides irrelevant actions;enabled(ctx)greys unexecutable ones.Actions reachable from the palette
Verification
tsc --noEmit→ 0 errors; biome clean; pre-pushtypecheck+buildpass.grove tui→ inspect overlay →Space c p): palette opens and renders all grouped sections live; fuzzy filter collapses to a flat ranked result; executing Broadcast entersMessage @allmode (keyboard→run + close-before-run verified); executing Search transcripts reveals the[10:Search]panel with a visible input (third fix verified live).🤖 Generated with Claude Code