Add Tab-toggled fullscreen help overlay, trim startup tips - #852
Merged
Conversation
AndrewTilson
marked this pull request as draft
August 22, 2026 23:55
added 3 commits
August 22, 2026 19:14
Replaces the verbose startup tip spam with a single bold 'Press Tab for help' hint. Pressing Tab on an empty input buffer now opens a fullscreen vi/vim-style help overlay covering commands, keybindings, modes, and MCP/plugins; Tab on a non-empty buffer keeps its existing completion behavior. - help_catalog.py: assembles overlay content from the existing command registry and plugin callback sources (no new registration framework) plus curated static sections for keybindings/modes. - help_overlay.py: fullscreen renderer/launcher with vi-style navigation (j/k, gg/G), paging, and defensive error handling so a broken plugin callback can never crash the Tab key. - Reconciled with the double-Ctrl+C-to-quit feature that landed upstream in the same files during rebase (non-overlapping insertion point, no functional conflict). Ref: https://jira.walmart.com/browse/PUP-352
The SYSTEM message renderer escapes Rich markup in plain strings before printing, so inline bold markup in the i18n string would show up as literal brackets. Wrap it in a rich.text.Text with style=bold instead, matching the private fork's implementation.
AndrewTilson
force-pushed
the
awtilso/PUP-352
branch
from
August 23, 2026 00:19
676a51c to
ac9e4b5
Compare
AndrewTilson
marked this pull request as ready for review
August 23, 2026 00:20
Comments were written defensively and had drifted into narrating history rather than explaining code: references to internal planning docs and review sessions a reader has no access to, plus rationale repeated in three places. Kept the non-obvious ones (the launch-race lock, the AsyncMock requirement, why Ctrl+K is conditional) and cut the rest. Tests: 10 of them mocked get_available_agents, which this module never calls. Collapsed 8 single-shape parser tests and 2 column-width tests into parametrized cases, and dropped an exception test wholly subsumed by the lock-release test. Fixed a shadowed duplicate test name that was silently preventing one lock test from running at all.
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.
What
Replaces the verbose startup tip spam with a single bold "Press Tab for help" hint. Pressing Tab on an empty input buffer now opens a fullscreen vi/vim-style help overlay; Tab on a non-empty buffer keeps its existing completion behavior unchanged.
Overlay contents
/helpautomatically.j/k,gg/G), scrollable paging,Tab/Esc/q/Ctrl+Cto close.Verified
/helpis already present in the new overlay (both read from the same live registry + plugin-callback sources, so they can't structurally diverge.Follow-up (separate PR)
Intent is for
/helpto eventually point at this same overlay/catalog instead of maintaining a second, separately-formatted flat-text renderer (command_handler.py'sget_commands_help()). Content-wise this is already a non-issue — confirmed every command in/helptoday already appears in the new overlay, since both read from the same live command-registry + plugin-callback sources.Known considerations for that follow-up (not addressed here, out of scope for this PR):
-pmode:execute_single_prompt()dispatches slash commands with no live REPL terminal running./helpwill need a tty/interactive-mode check with a flat-text fallback socode-puppy -p "/help"in scripts/CI doesn't hang or crash trying to launch a fullscreenApplicationwith no terminal to host it./helpoutput goes throughemit_info()and is captured in the conversation transcript/autosave. The fullscreen overlay is ephemeral chrome with no persistent trace — a deliberate product trade-off to make explicitly, not an incidental side effect./helpfully switches over,get_commands_help()incommand_handler.py(and its ~20 associated tests) becomes dead and should be removed rather than left dangling.