Move _MOCK_TEXTUAL_KEYS, _build_mock_textual, _install_mock_textual,
_restore_modules, _make_persona_state, _cleanup_tmpdir, and
_FakeCommandRouter out of tui_app_coverage_steps.py into a shared
_tui_mock_helpers.py module so both step files can import them without
duplication and the coverage steps file stays within the 500-line budget.
ISSUES CLOSED: #6361
- Remove `_shell_warning_active` and `_last_shell_warning` from
CleverAgentsTuiApp.__init__, _show_shell_warning, and
_clear_shell_warning — both fields were set but never consumed
- Extract shared `_submit_text` and `_submit_text_with_mocked_shell`
into features/steps/_tui_helpers.py; update tui_app_coverage_steps
and tui_shell_safety_steps to import from shared module, eliminating
the duplicate definitions flagged across multiple review cycles
- route shell submissions through ShellSafetyService and surface warnings in the UI
- add shell warning banner, prompt styling, and configurable shell.warn_dangerous flag
- extend TUI coverage scenarios for shell safety and document the fix
ISSUES CLOSED: #6361
- step_ref_picker_reset: fix assertion to check _text == "" (set_suggestions
with empty query calls hide(), not show "(no matches)")
- step_slash_overlay_all_commands: fix assertion to check overlay is hidden
(_visible=False, _text="") after reset — set_commands with empty query
calls hide(), it does not display all commands
- Add @when("I trigger on_input_changed with empty text") step so that the
empty-string scenario is matched — parse's {text} placeholder requires
one or more chars and would not match "" causing an "errored" scenario
- Feature: update scenario 4 (empty at-sign) to use step_ref_picker_reset
since "send @" yields empty query which hides the picker
- Feature: update scenario 5 to use the new empty-text step
ISSUES CLOSED: #4738
Add the missing on_input_changed event handler to the TUI app so that
both the slash command overlay and the reference picker overlay update
in real time as the user types, rather than only on submit.
- When the user types / the slash overlay filters commands by the query
after the slash character
- When the user types @ the reference picker updates with matching
suggestions based on the token after the last @ sign
- Otherwise both overlays are reset to their default (unfiltered) state
Also adds BDD scenarios and step definitions covering all branches of
the new handler.
ISSUES CLOSED: #4738
Rebases the TUI prompt symbol fix onto the latest master, resolving
conflicts with the TextArea→Input refactor and the dollar-prefix shell
mode addition. Adds the missing CHANGELOG.md entry for #6431 and
removes the now-obsolete tui_prompt_textarea feature/steps that tested
the old TextArea-based implementation.
ISSUES CLOSED: #6431
The _TextualCleverAgentsTuiApp class was missing the THEME class
variable, causing Textual to use its default textual-dark theme
instead of the Dracula theme required by the spec (docs/specification.md
§TUI Theme). Added THEME: ClassVar[str] = "dracula" to the class and
a corresponding BDD scenario tagged @tdd_issue @tdd_issue_4742 to
verify the fix.
ISSUES CLOSED: #4742
Replaced the PromptInput base widget from textual.widgets.Input to textual.widgets.TextArea and updated related code to use the multi-line TextArea API. This includes switching from .value to .text, adjusting consume_text(), and updating all callers and tests accordingly. Also added UI test coverage for multi-line input, including new feature and steps files.
ISSUES CLOSED: #10410
Add a dedicated TUI help overlay toggled by F1 and resolve its content from the current prompt mode for main-screen, slash-command, reference, and shell contexts.
Extend Behave and Robot coverage for the new help-panel widget, app wiring, context switching, and toggle behavior.
ISSUES CLOSED: #1013