hermes-agent/hermes_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
..
dashboard_auth
…
observability fix(observability): gate export on subscriber flush 2026-07-28 12:08:10 -07:00
proxy
…
subcommands feat(cron): user-owned model pins + cron.model fleet default 2026-07-28 11:52:47 -07:00
__init__.py
…
_early_recovery.py
…
_parser.py
…
_scan_venv_blockers.py fix(desktop): surface external venv update blockers 2026-07-28 14:47:36 -07:00
_subprocess_compat.py fix(git): never block internal git calls on credential prompts 2026-07-28 17:34:21 -07:00
active_sessions.py fix(sessions): claim the cap slot on first turn, not on open 2026-07-28 12:11:52 -05:00
agent_import.py refactor: extract atomic_write_text to utils.py; fix write-failure error handling 2026-07-29 16:49:07 +05:30
approval_mode.py
…
approvals_suggest.py
…
auth.py fix(auth): use refresh-free Nous status snapshot on read-only display paths 2026-07-28 22:42:19 -07:00
auth_commands.py
…
azure_detect.py
…
backup.py
…
banner.py
…
blueprint_cmd.py
…
browser_connect.py
…
build_info.py
…
bundles.py
…
callbacks.py
…
checkpoints.py
…
claw.py
…
cli_agent_setup_mixin.py fix(tui,cli): render a resumed interrupted turn as an event 2026-07-28 03:54:25 -05:00
cli_billing_mixin.py
…
cli_commands_mixin.py fix(cli): stop hard-wrapping streamed paragraphs; prefer OSC 52 over SSH 2026-07-29 08:42:16 -07:00
cli_output.py
…
clipboard.py fix(cli): stop hard-wrapping streamed paragraphs; prefer OSC 52 over SSH 2026-07-29 08:42:16 -07:00
codex_models.py
…
codex_runtime_plugin_migration.py
…
codex_runtime_switch.py
…
colors.py
…
commands.py feat(voice): add "Hey Hermes" wake word to start a hands-free session 2026-07-28 07:56:45 -07:00
completion.py
…
config.py fix(voice): spoken barge-in works on every TTS playback path (CLI + gateway/desktop backends) 2026-07-29 08:24:00 -07:00
console_engine.py
…
container_boot.py fix(gateway): detect and report unclean shutdowns via lifecycle ledger (NS-608) 2026-07-28 22:41:09 -07:00
context_switch_guard.py
…
copilot_auth.py
…
credential_lifecycle.py
…
cron.py feat(cron): user-owned model pins + cron.model fleet default 2026-07-28 11:52:47 -07:00
curator.py
…
curses_ui.py
…
dashboard_register.py
…
debug.py
…
default_soul.py
…
dep_ensure.py
…
diagnostics_upload.py
…
dingtalk_auth.py
…
doctor.py fix(doctor): resolve managed/legacy agent-browser dirs PATHEXT-aware 2026-07-29 00:16:21 -07:00
dump.py revert: PR #72817 — session activity watchdog, stall notify, compress timeout 2026-07-28 00:15:00 +05:00
env_loader.py
…
fallback_cmd.py refactor(fallback): single owner for backend identity and failure-scoped skips 2026-07-26 23:41:54 -07:00
fallback_config.py
…
focus_view.py
…
gateway.py
…
gateway_enroll.py
…
gateway_windows.py
…
goals.py
…
gui_uninstall.py
…
hooks.py Reapply "feat(observability): integrate NeMo Relay runtime and shared metrics" 2026-07-27 21:10:51 -07:00
init_command.py
…
input_sanitize.py
…
inventory.py feat(picker): derive a newest-per-lab featured shortlist from models.dev 2026-07-28 03:52:33 -05:00
journey.py
…
kanban.py
…
kanban_db.py Reapply "feat(observability): integrate NeMo Relay runtime and shared metrics" 2026-07-27 21:10:51 -07:00
kanban_decompose.py
…
kanban_diagnostics.py
…
kanban_specify.py
…
kanban_swarm.py
…
lifecycle.py Reapply "feat(observability): integrate NeMo Relay runtime and shared metrics" 2026-07-27 21:10:51 -07:00
logs.py
…
main.py fix(cli): honor pooled credentials in model wizard 2026-07-29 10:56:19 +05:30
managed_scope.py
…
managed_uv.py
…
mcp_catalog.py fix(git): never block internal git calls on credential prompts 2026-07-28 17:34:21 -07:00
mcp_config.py fix(mcp): make Figma remote OAuth work via DCR allowlist defaults 2026-07-28 00:53:16 -05:00
mcp_picker.py
…
mcp_security.py
…
mcp_startup.py
…
memory_oauth.py
…
memory_setup.py fix: route memory-provider dep installs through lazy_deps durable target 2026-07-28 22:40:33 -07:00
middleware.py Reapply "feat(observability): integrate NeMo Relay runtime and shared metrics" 2026-07-27 21:10:51 -07:00
migrate.py
…
moa_cmd.py
…
moa_config.py
…
model_catalog.py
…
model_cost_guard.py
…
model_normalize.py fix(model): don't strip alias-derived prefixes for the custom provider bucket 2026-07-27 19:32:12 +05:30
model_search.py
…
model_setup_flows.py fix: extend pool-credential resolution to Bedrock API-key flow 2026-07-29 10:56:19 +05:30
model_switch.py nous portal anthropic wire 2026-07-27 11:53:48 -04:00
models.py fix(lmstudio): respect applied runtime context 2026-07-29 02:19:13 +05:30
nous_account.py
…
nous_auth_keepalive.py
…
nous_billing.py
…
nous_subscription.py fix(desktop): honest browser-backend readiness + explicit backend activation + full OpenAI TTS voice/model options 2026-07-28 23:52:49 -07:00
onepassword_secrets_cli.py
…
oneshot.py
…
pairing.py
…
partial_compress.py
…
pets.py
…
platforms.py
…
plugins.py Reapply "feat(observability): integrate NeMo Relay runtime and shared metrics" 2026-07-27 21:10:51 -07:00
plugins_cmd.py fix(git): never block internal git calls on credential prompts 2026-07-28 17:34:21 -07:00
portal_cli.py fix(auth): use refresh-free Nous status snapshot on read-only display paths 2026-07-28 22:42:19 -07:00
profile_describer.py
…
profile_distribution.py fix(git): never block internal git calls on credential prompts 2026-07-28 17:34:21 -07:00
profiles.py
…
projects_cmd.py
…
projects_db.py
…
prompt_size.py
…
provider_catalog.py
…
providers.py fix: restore zero-arg fetch_models_dev call on default paths 2026-07-29 17:13:48 +05:30
proxy_cli.py
…
psutil_android.py
…
pt_input_extras.py
…
pty_bridge.py
…
pty_session.py
…
relaunch.py
…
route_identity.py refactor: fold simplify-code review findings 2026-07-29 17:13:48 +05:30
runtime_provider.py nous portal anthropic wire 2026-07-27 11:53:48 -04:00
secret_prompt.py
…
secrets_cli.py
…
security_advisories.py
…
security_audit.py
…
security_audit_startup.py
…
send_cmd.py
…
service_manager.py fix(hermes_cli): drop privileges before clearing s6-log lock 2026-07-27 19:19:01 +05:30
session_export.py
…
session_export_html.py
…
session_export_md.py
…
session_filters.py
…
session_listing.py
…
session_recap.py
…
session_recovery.py fix(sessions): verify fully reconstructed recovery 2026-07-26 23:34:29 -07:00
setup.py fix(setup): tolerate feature dicts without an stt entry in the STT status line 2026-07-29 00:20:50 -07:00
setup_hidden_env.py
…
setup_whatsapp_cloud.py
…
skills_config.py
…
skills_hub.py refactor: remove the claude-marketplace skill source (redundant Marketplace hub tab) 2026-07-28 23:16:27 -07:00
skin_cmd.py
…
skin_engine.py
…
slack_cli.py
…
sqlite_runtime.py
…
sqlite_safe_read.py
…
sqlite_util.py
…
status.py fix(auth): use refresh-free Nous status snapshot on read-only display paths 2026-07-28 22:42:19 -07:00
stdio.py
…
suggestions_cmd.py
…
telegram_managed_bot.py
…
timeouts.py
…
tips.py
…
tools_config.py feat(tools): full Speech-to-Text configurability in hermes tools + GUI 2026-07-29 00:20:50 -07:00
toolset_validation.py
…
uninstall.py fix(install): install a hermes-acp launcher onto PATH 2026-07-28 11:53:12 -07:00
urllib_security.py
…
voice.py fix(voice): spoken barge-in works on every TTS playback path (CLI + gateway/desktop backends) 2026-07-29 08:24:00 -07:00
web_git.py fix(git): never block internal git calls on credential prompts 2026-07-28 17:34:21 -07:00
web_server.py fix(web-server): absorb _warm_gateway_module import before lifespan yield (#73083) 2026-07-29 13:59:11 +05:30
webhook.py
…
win_pty_bridge.py
…
windows_ssh_runtime.py
…
write_approval_commands.py
…
xai_retirement.py
…