hermes-agent/tests/cli
Teknium 64beb25a35 fix(cli): stop hard-wrapping streamed paragraphs; prefer OSC 52 over SSH
Streamed responses no longer insert real newlines at terminal width —
logical lines are emitted whole and the terminal soft-wraps them, so
highlight-copy rejoins the full line (emulators only keep linebreaks
the app actually printed). This is the CLI equivalent of the TUI's
selection copy, which reads logical source lines from its screen
buffer. TTFT perception is preserved by mirroring the unfinished
line's tail into the spinner status text instead of chunk-printing.

/copy now prefers OSC 52 when running over SSH (SSH_CONNECTION /
SSH_TTY / SSH_CLIENT) — native tools there write the REMOTE clipboard,
which is never what the user wants. The CLI's OSC 52 writer also gains
tmux/screen DCS passthrough wrapping, mirroring the TUI's
wrapForMultiplexer. Fixes #31528 for the CLI surface.

Sabotage-verified: restoring the old chunk emitter fails 3 of the new
tests (hard-wrap detection, spinner mirror, unbreakable-run split).
2026-07-29 08:42:16 -07:00
..
__init__.py
test_bracketed_paste_timeout.py fix(cli): bracketed-paste timeout prevents permanent input freeze (#16263) 2026-05-25 05:07:11 -07:00
test_branch_command.py test: update mock assertions for conversation_history kwarg 2026-07-22 10:00:39 +05:30
test_busy_input_mode_command.py
test_chat_q_exit_clear.py fix(cli): preserve chat -q answer by gating exit-summary screen clear (#53009) 2026-07-08 07:59:24 -07:00
test_cli_active_agent_ref_wiring.py fix(cli): publish agent ref to cli module so memory on_session_end fires on exit 2026-06-19 16:59:43 -07:00
test_cli_approval_ui.py fix(approval): scope smart deny owner overrides to one operation 2026-07-13 04:31:55 -07:00
test_cli_async_delegation_delivery.py fix(cli): scope async delegation delivery to session 2026-07-14 22:14:10 -07:00
test_cli_background_status_indicator.py feat(cli): track background subagents in the status bar (#51441) 2026-06-23 11:09:08 -07:00
test_cli_background_tui_refresh.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_cli_bracketed_paste_sanitizer.py
test_cli_browser_connect.py test: stub discover_local_cdp_url in CLI connect context-note test 2026-07-18 02:49:28 -07:00
test_cli_codex_context_reference.py fix(context): scope Codex catalogue cache by credential 2026-07-21 04:29:34 -07:00
test_cli_context_warning.py fix(context): align guidance with 64k minimum 2026-05-24 23:23:12 -07:00
test_cli_copy_command.py fix(cli): stop hard-wrapping streamed paragraphs; prefer OSC 52 over SSH 2026-07-29 08:42:16 -07:00
test_cli_delegate_background_notice.py feat(cli): note background delegate_task dispatch in _on_tool_complete 2026-06-25 19:57:58 -05:00
test_cli_extension_hooks.py
test_cli_external_editor.py fix(cli,tui): recall real paste content on up-arrow 2026-07-20 23:23:40 -05:00
test_cli_file_drop.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_cli_force_redraw.py fix(cli): clear viewport on width-change resize so the status bar can't duplicate (#49120) 2026-06-19 08:43:42 -07:00
test_cli_goal_interrupt.py fix: migrate CLI kanban gate + remaining mocks to 5-value judge contract 2026-07-20 05:38:25 -07:00
test_cli_image_command.py
test_cli_init.py feat: raise default tool-calling iteration limit from 90 to 500 2026-07-26 12:54:45 -07:00
test_cli_insights_command.py
test_cli_interrupt_ack_race.py test(cli): cover noted multimodal persistence handoff 2026-07-14 03:32:46 +05:30
test_cli_interrupt_drain_regression.py fix(cli): re-land interrupt_queue drain so finished turns flush stray input 2026-07-01 00:12:32 -07:00
test_cli_interrupt_subagent.py fix(ci): make tests, workflows, and attribution reliable under load (#66373) 2026-07-17 20:55:24 +00:00
test_cli_light_mode.py fix(cli): stop OSC 11 bg probe from trapping users in a stray editor (#35441) 2026-05-30 11:55:12 -05:00
test_cli_loading_indicator.py
test_cli_markdown_rendering.py fix(cli): preserve cron asterisks in strip mode 2026-05-18 20:08:36 -07:00
test_cli_mcp_config_watch.py fix(mcp): move auto-reload opt-out to top-level mcp: section + regression tests 2026-07-20 00:41:05 -07:00
test_cli_new_session.py refactor: address Phase-2 review findings on /new boundary handoff 2026-07-09 03:21:54 +05:30
test_cli_pet_pane.py feat(pets): CLI pet pane + /pet command 2026-06-20 14:18:33 -05:00
test_cli_prefix_matching.py
test_cli_preloaded_skills.py
test_cli_provider_resolution.py test: cover custom endpoint key storage and model-list persistence 2026-07-24 21:12:59 -05:00
test_cli_reload_skills.py
test_cli_resume_command.py fix(timeline): persist typed display events (#69771) 2026-07-23 14:46:24 -04:00
test_cli_retry.py
test_cli_save_config_value.py fix(config): persist runtime settings to HERMES_HOME/config.yaml, not the repo template 2026-07-28 10:40:28 -07:00
test_cli_secret_capture.py fix(cli): show masked feedback for secret prompts 2026-05-25 01:20:33 -07:00
test_cli_shift_enter_newline.py
test_cli_shutdown_memory_messages.py fix(session): preserve clean shortened close snapshots 2026-07-14 03:32:46 +05:30
test_cli_skin_integration.py
test_cli_status_bar.py fix(test): pin monotonic clock in spinner-elapsed test to fix CI flake (#54203) 2026-06-28 04:16:25 -07:00
test_cli_status_bar_goal.py feat(cli): show active /goal segment in the TUI status bar 2026-07-26 17:47:38 -07:00
test_cli_status_command.py Reapply "Merge pull request #30179 from NousResearch/feat/iron-proxy" 2026-07-24 09:49:00 -07:00
test_cli_steer_busy_path.py
test_cli_terminal_response_sanitizer.py
test_cli_terminal_shortcuts.py fix(cli): ignore terminal focus reports (salvage of #16780) 2026-05-29 00:31:44 -07:00
test_cli_tools_command.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_cli_user_message_preview.py
test_cli_yolo_toggle.py fix(cli): /yolo in chat must enable session bypass, not just set env var 2026-05-28 12:10:21 -07:00
test_compress_flags.py feat(commands): /compact alias + --preview/--dry-run flags for /compress (#3243 salvage) 2026-07-02 05:10:31 -07:00
test_compress_focus.py
test_compress_here.py fix: prevent stale lock-skip signal leaking between compress_context calls 2026-07-23 08:19:14 -07:00
test_compress_type_ahead.py test(cli): prove /compress type-ahead queue-drain; map contributor email 2026-07-23 07:24:46 -07:00
test_cpr_local_leak.py refactor: drop platform kwarg, fix PTY test cleanup 2026-07-21 11:18:28 +05:30
test_cprint_bg_thread.py
test_ctrl_enter_newline.py fix: preserve Ctrl+J newlines in Ghostty 2026-05-28 23:30:39 -07:00
test_cwd_env_respect.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_destructive_slash_confirm.py fix(cli): add inline --yes/now skip for destructive slash commands (#30768) 2026-05-24 16:13:03 -07:00
test_destructive_slash_inline_skip_e2e.py fix(cli): add inline --yes/now skip for destructive slash commands (#30768) 2026-05-24 16:13:03 -07:00
test_exit_delete_session.py
test_exit_summary_resume_hint.py test(cli): cover exit resume hint -p flag across profiles 2026-05-25 01:41:54 -07:00
test_exit_watchdog_signal_arm.py fix(cli): arm exit watchdog on shutdown signal, not at chat startup (#66278) 2026-07-17 06:49:04 -07:00
test_fast_command.py fix: session-scoped /fast + full /new reset to config defaults (#67979) 2026-07-20 03:27:22 -07:00
test_focus_view.py feat(cli): /focus — reduced-output view with hidden-line recovery and status indicator 2026-07-26 18:10:34 -07:00
test_manual_compress.py fix(compress): classify unconfirmed lock-acquire failures and cover all manual-compress surfaces 2026-07-23 08:19:14 -07:00
test_moa_command.py feat(moa): add reference model toggles 2026-07-23 18:11:57 -07:00
test_partial_compress.py Inspired by Claude Code: /compress here [N] — boundary-aware 'summarize up to here' (#35048) 2026-05-29 17:49:15 -07:00
test_personality_none.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_prefill_config.py fix(config): align prefill messages key handling 2026-06-03 23:51:44 -06:00
test_prepend_note_to_message.py refactor(cli): normalize note and avoid blank lines in prepend helper 2026-06-01 20:30:08 -07:00
test_prompt_text_input_thread_safety.py feat(billing): /billing terminal billing — interactive TUI + CLI client (#45449) 2026-06-19 01:53:32 +05:30
test_quick_commands.py fix(ci): rip out some xdist legacy stuff... how did these ever work?? 2026-06-26 19:15:18 -07:00
test_reasoning_command.py fix: session-scoped /fast + full /new reset to config defaults (#67979) 2026-07-20 03:27:22 -07:00
test_resume_display.py fix(timeline): persist typed display events (#69771) 2026-07-23 14:46:24 -04:00
test_resume_quiet_stderr.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_save_conversation_location.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_session_boundary_hooks.py Reapply "feat(observability): integrate NeMo Relay runtime and shared metrics" 2026-07-27 21:10:51 -07:00
test_single_query_session_finalize.py test(cli): update FakeCLI._print_exit_summary for new clear_screen kwarg 2026-07-08 07:59:24 -07:00
test_slash_command_interrupt.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_slash_confirm_windows.py test(cli): exercise real _prompt_text_input for native-Windows confirm deadlock 2026-06-08 15:53:28 -07:00
test_steer_inline_repaint_34569.py fix(cli): repaint input area after inline /steer and /model submit (#34839) 2026-05-29 19:04:40 -07:00
test_stream_delta_think_tag.py fix: make streaming reasoning-tag filter case-insensitive 2026-07-01 03:25:02 -07:00
test_stream_flush_left.py fix(cli): flush-left responses + native clipboard /copy for clean copy/paste 2026-07-28 23:53:16 -07:00
test_stream_partial_line_flush.py fix(cli): stop hard-wrapping streamed paragraphs; prefer OSC 52 over SSH 2026-07-29 08:42:16 -07:00
test_surrogate_sanitization.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_terminal_interrupt_recovery.py refactor(cli): extract interrupt recovery to a testable helper 2026-06-28 01:08:09 -07:00
test_tool_progress_scrollback.py feat(moa): show each reference model's output as a labelled block before the aggregator (#53793) 2026-06-27 12:45:23 -07:00
test_tui_terminal_reset_on_exit.py fix(cli): reset terminal input modes on TUI exit to stop focus/mouse leaks 2026-06-01 23:27:44 +08:00
test_update_command.py rip out brew + pip/PyPI wheel support (#68217) 2026-07-22 16:51:01 -04:00
test_version_command.py Add /version slash command across CLI, gateway, TUI, and desktop. 2026-06-05 18:05:05 -07:00
test_worktree.py perf(cli): cut hermes -w startup from ~14s to ~1.8s by parallelizing + caching the worktree prune 2026-07-25 16:41:52 -07:00
test_worktree_security.py fix(cli): read .worktreeinclude and .gitignore as UTF-8 in worktree setup 2026-07-24 17:10:39 -07:00
test_worktree_sync_base.py fix(cli): branch new worktrees from the fresh remote tip, not stale local HEAD (#50355) 2026-06-21 12:42:11 -07:00