fix(update): add heartbeat during dependency install#21433
fix(update): add heartbeat during dependency install#21433adybag14-cyber wants to merge 7 commits into
Conversation
|
Thanks for this — the Termux install UX work was valuable. We salvaged four of the seven commits onto current main via PR #21489, with your authorship preserved per-commit:
The other three commits weren't merged here because they change behavior for every user, not just Termux. If you'd like to resubmit any of them as separate scoped PRs, that'd be welcome:
Future tip: please split unrelated fixes into separate PRs. The PR title here described only the heartbeat change, but the diff included 7 commits across TUI/browser/CLI/doctor/install — makes review and bisect harder. Appreciate the work, thanks! |
What does this PR do?
Fixes a remaining Hermes update UX hang case where dependency installation can still appear stalled on Termux/Android and other slow hardware, even after #20679 removed
pip --quiet.This PR adds a periodic heartbeat during dependency installation so users can see that updates are still progressing when
uv/pip(or underlying build backends) are temporarily silent while compiling Rust/C extensions.This is the right approach because:
pip/uvoutput.Related Issue
Fixes #
Type of Change
Changes Made
hermes_cli/main.pyAdded
_run_install_with_heartbeat(...)to wrap dependency install subprocess calls.Emits a periodic status line every 30s:
Updated
_install_python_dependencies_with_optional_fallback(...)to use the heartbeat wrapper for:install -e .[all]install -e .install -e .[extra])Updated docstring to clarify why heartbeat is needed even with non-quiet pip output.
tests/hermes_cli/test_update_autostash.py--ff-onlypath used by current updater logic.test_install_heartbeat_prints_when_dependency_install_is_silentHow to Test
Run:
Run:
Manual verification:
hermes updatewhere dependency builds take time.Checklist
Code
fix(scope):,feat(scope):, etc.)pytest tests/ -qand all tests passDocumentation & Housekeeping
README,docs/, docstrings) — or N/Acli-config.yaml.exampleif I added/changed config keys — or N/ACONTRIBUTING.mdorAGENTS.mdif I changed architecture or workflows — or N/AFor New Skills
SKILL.mdfollows the standard format (frontmatter, trigger conditions, steps, pitfalls)hermes --toolsets skills -q "Use the X skill to do Y"Screenshots / Logs
Example heartbeat output during a long silent install phase: