installer-setup WS-H: apps skip/defer parity (openwebui install verb + gateway in deferred hermes)#1125
Merged
Merged
Conversation
…+ gateway in deferred hermes) Makes "skip now, install later" lossless for both apps (issue #1102 / decision Q9): - New `hal0 app install openwebui` verb and `HAL0_SKIP_OPENWEBUI=1` install-time skip, sharing one wiring function (install_openwebui) with the apply_setup path so now-vs-later is behaviourally identical. - `hal0 agent install hermes` now installs + enables the Telegram/Discord gateway by default (`--gateway`/`--no-gateway`), porting installer/ install.sh's inline gateway block into the deferred CLI path — previously only reachable when install.sh itself provisioned Hermes. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #1102. Makes "skip now, install later" genuinely lossless for both
optional apps (Wave 3 / WS-H, decision Q9):
hal0 app install openwebui— new CLI verb +HAL0_SKIP_OPENWEBUI=1install-time escape hatch (mirrors the existing
HAL0_SKIP_HERMESpattern). Both the install-time path (
apply_setup→install_extension)and the deferred CLI verb now call the SAME
install_openwebui()functionin
src/hal0/install/extensions.py, which reproduces installer/install.sh'spodman-runtime guard (enable+wait_active when podman is usable; quiesce
the unit with
disable/reset-failedotherwise) so now-vs-later behaveidentically.
hal0 agent install hermesnow installs +enables the Telegram/Discord gateway by default (new
--gateway/--no-gatewayflag, default on). This portsinstaller/install.sh's inline post-provision gateway block (
hermes gateway install --system --run-as-user hal0→systemctl enable --now hermes-gateway) intosrc/hal0/cli/agent_commands.py, which previouslyonly ran when install.sh itself provisioned Hermes in the same run — a
box that deferred Hermes via
HAL0_SKIP_HERMES=1and installed it laternever got the gateway wired.
Both failure paths are best-effort (warn + continue), matching install.sh's
posture: a broken gateway or a missing container runtime must not be
reported as a failed install.
Scope note
Per the isolation guardrails for this workstream,
answers.py/setup_command.py/orchestrate.pywere left untouched — theapps.*.when/apps.hermes.gatewayanswer-file keys (mentioned in theissue's "Answer-file coverage" addendum) still warn-and-ignore pending
whoever owns that loader; wiring them cleanly would need a
Selectionsfield this issue didn't add, to avoid conflicting with the parallel
answer-file PRs in flight.
Changes
src/hal0/install/extensions.py—install_openwebui()(shared wiring,runtime-guard ported from install.sh),
install_extension("openwebui")delegates to it.
src/hal0/cli/app_commands.py(new) —hal0 app install <name>Typersub-app.
src/hal0/cli/main.py— mounts the newappsub-app.src/hal0/cli/agent_commands.py—--gateway/--no-gatewayflag onagent install;_install_hermes_gateway()/_wait_active_unit()ported from install.sh.
installer/install.sh—HAL0_SKIP_OPENWEBUI=1escape hatch around theexisting OpenWebUI enable block.
docs/reference/cli.mdx— documentshal0 app installand the newhermes gateway flag.
tests/install/test_extensions.py,tests/cli/test_app_install_openwebui.py,tests/cli/test_agent_install_hermes.py(gateway section; twopre-existing tests updated to pass
gateway=Falseso they keep testingonly the toolchain→bootstrap→register sequence).
Test plan
uv run ruff format --check src testsuv run ruff check src testsuv run pytest tests/install/test_extensions.py tests/cli/ -q— 3pre-existing failures only (
test_install_hermes_runs_prereqs_then_bootstrap_then_register,test_agent_shim.py::TestHermesEnvx2), confirmed viagit stashtofail identically on
main— caused by a live/var/lib/hal0/venvs/hermeson this box + running as root, unrelatedto this change.
uv run pytest tests/ -q --ignore=tests/e2e— 4630 passed, 14 failed,1 error, 8 skipped — matches the documented ~14 known pre-existing
failures on this box (hardware/pve, comfyui_phase4, config_urls,
models_preview, settings_models_store, hermes wrapper/state-render,
container_spec_dispatch, openwebui prewire — none touch files this PR
changes).
HAL0_SKIP_OPENWEBUI=1 HAL0_SKIP_HERMES=1,then
hal0 app install openwebui+hal0 agent install hermeson areal box (not run here — no live installer target in this sandbox).
🤖 Generated with Claude Code