hermes-agent/hermes_cli
Teknium 2475244ca0
fix(update/windows): robustly exclude launcher-shim ancestors from concurrent check (#35257)
hermes update on Windows still aborted with 'Another hermes.exe is running',
listing its own launcher shim(s) as concurrent instances (issues #29341,
#34795). The distlib Scripts\hermes.exe launcher spawns python.exe and waits;
detection runs in the python child, so the launcher shim shows up in
process_iter.

The prior fix walked the ancestor chain with per-hop current.parent() inside
'except: break' — the first psutil AccessDenied/NoSuchProcess (common on
Windows across session/elevation boundaries) bailed the walk early, leaving
the launcher in the candidate set and re-triggering the false positive.

- Switch to proc.parents() (whole ancestor list in one call), evaluate each
  ancestor independently so one unreadable hop never strands the launcher.
- Only exclude ancestors whose exe is itself a shim, so a genuine second
  hermes.exe under a non-Hermes parent (Desktop backend child) is still flagged.
- Message now prints a copy-pasteable 'taskkill /PID … /F' for the exact stale
  PIDs so a user who already closed everything can self-remediate.

Conservative shim-only ancestor approach credited to the parallel attempts in
PRs #29358 (xxxigm) and #31808 (jquesnelle).
2026-05-30 02:38:40 -07:00
..
dashboard_auth fix(dashboard-auth): share /api/* public allowlist between legacy and OAuth gates 2026-05-29 12:17:12 +10:00
proxy chore: remove dead code — 28 unused functions/classes across 16 files 2026-05-29 04:22:27 -07:00
__init__.py chore: release v0.15.1 (2026.5.29) (#34222) 2026-05-28 18:11:49 -07:00
_parser.py
_subprocess_compat.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
auth.py refactor(auth): remove vestigial Nous min_key_ttl/inference_auth_mode params 2026-05-29 02:24:48 -07:00
auth_commands.py refactor(auth): remove vestigial Nous min_key_ttl/inference_auth_mode params 2026-05-29 02:24:48 -07:00
azure_detect.py
backup.py fix(cron): restore jobs.json emptied by config migration on update 2026-05-29 13:22:54 -07:00
banner.py feat(cli): warn on unsupported pip installs + fix stale update-check cache (#34491) (#34846) 2026-05-29 13:30:28 -07:00
browser_connect.py
build_info.py fix(docker): bake build-time git SHA into the image 2026-05-28 15:14:05 +10:00
bundles.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
callbacks.py
checkpoints.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
claw.py
cli_output.py
clipboard.py
codex_models.py
codex_runtime_plugin_migration.py
codex_runtime_switch.py
colors.py
commands.py Inspired by Claude Code: /compress here [N] — boundary-aware 'summarize up to here' (#35048) 2026-05-29 17:49:15 -07:00
completion.py
config.py fix(cli): restrict uv-tool-install detection to running interpreter 2026-05-30 02:08:11 -07:00
container_boot.py
copilot_auth.py
cron.py
curator.py
curses_ui.py
debug.py style: restore PEP8 blank-line separation after dead-code removal 2026-05-29 04:22:27 -07:00
default_soul.py
dep_ensure.py
dingtalk_auth.py
doctor.py fix: detect pyproject.toml / __init__.py version drift in hermes doctor (#35142) 2026-05-30 00:32:05 -07:00
dump.py fix(docker): bake build-time git SHA into the image 2026-05-28 15:14:05 +10:00
env_loader.py
fallback_cmd.py
fallback_config.py
gateway.py fix(gateway): anchor service WorkingDirectory at HERMES_HOME, not the source checkout 2026-05-29 12:36:59 -07:00
gateway_windows.py fix(gateway): drain on Windows hermes gateway stop so sessions survive restart (#33798) 2026-05-28 03:25:32 -07:00
goals.py
hooks.py
inventory.py
kanban.py fix(kanban): add --reason flag to unblock for symmetry with block (#30897) 2026-05-28 23:41:44 -07:00
kanban_db.py fix(kanban): align recompute_ready guard with breaker's configured failure_limit 2026-05-30 01:40:57 -07:00
kanban_decompose.py fix(kanban): close kanban.db FD after every connect() in long-lived processes 2026-05-27 22:07:49 -07:00
kanban_diagnostics.py chore: remove dead code — 28 unused functions/classes across 16 files 2026-05-29 04:22:27 -07:00
kanban_specify.py fix(kanban): close kanban.db FD after every connect() in long-lived processes 2026-05-27 22:07:49 -07:00
kanban_swarm.py fix(kanban): CLI dispatch honors max_in_progress/max_spawn from config; swap missing 'avoid-ai-writing' skill for bundled humanizer (#33488, #29415) (#34337) 2026-05-28 21:00:46 -07:00
logs.py
main.py fix(update/windows): robustly exclude launcher-shim ancestors from concurrent check (#35257) 2026-05-30 02:38:40 -07:00
mcp_catalog.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
mcp_config.py fix(mcp): stop reporting false OAuth success when no token was obtained (#34807) 2026-05-29 12:32:19 -07:00
mcp_picker.py
memory_setup.py fix(honcho): harden self-hosted setup paths 2026-05-29 22:29:48 -07:00
migrate.py
model_catalog.py fix(model-catalog): fall through to raw.github when Vercel 403s; swap step-3.5-flash for step-3.7-flash on OpenRouter+Nous 2026-05-29 00:25:36 -07:00
model_normalize.py
model_switch.py fix(model): isolate custom provider picker credentials 2026-05-29 12:32:35 -07:00
models.py feat(model-picker): group multi-endpoint providers under one row (#35227) 2026-05-30 01:41:33 -07:00
nous_account.py feat(auth) normalise the way in which we check whether a user has free/paid access to nous portal so we can expose behaviour and error messages accordingly. 2026-05-28 00:19:31 -07:00
nous_subscription.py fix(setup): write config for image_gen and video_gen in apply_nous_managed_defaults (#35109) 2026-05-30 03:45:12 +00:00
oneshot.py
pairing.py
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
platforms.py
plugins.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
plugins_cmd.py fix: improve plugins list usability 2026-05-29 00:59:42 -07:00
portal_cli.py style: restore PEP8 blank-line separation after dead-code removal 2026-05-29 04:22:27 -07:00
profile_describer.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
profile_distribution.py
profiles.py fix(honcho): harden self-hosted setup paths 2026-05-29 22:29:48 -07:00
providers.py
psutil_android.py fix(android): reject unsafe tar members in psutil compatibility installer 2026-05-28 02:36:09 -07:00
pt_input_extras.py fix(cli): ignore terminal focus reports (salvage of #16780) 2026-05-29 00:31:44 -07:00
pty_bridge.py
relaunch.py
runtime_provider.py refactor(auth): remove vestigial Nous min_key_ttl/inference_auth_mode params 2026-05-29 02:24:48 -07:00
secret_prompt.py
secrets_cli.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
security_advisories.py fix(stt,tts): restore mistralai — 2.4.8 is clean, ban lifted (#34841) 2026-05-29 13:24:12 -07:00
security_audit.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
send_cmd.py
service_manager.py
session_recap.py
setup.py feat(video_gen): wire Nous subscription override into hermes tools UX 2026-05-29 22:26:24 +05:30
skills_config.py
skills_hub.py fix(skills-hub): stop ellipsis-truncating the Identifier column (#33810) 2026-05-28 04:53:13 -07:00
skin_engine.py
slack_cli.py
status.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
stdio.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
timeouts.py
tips.py
tools_config.py fix(stt,tts): restore mistralai — 2.4.8 is clean, ban lifted (#34841) 2026-05-29 13:24:12 -07:00
uninstall.py fix(cli): remove Hermes-managed node/npm/npx symlinks on uninstall 2026-05-29 17:24:38 -07:00
voice.py
web_server.py fix(dashboard): allow chat websockets on insecure public bind 2026-05-30 00:23:44 -07:00
webhook.py
xai_retirement.py