Add core.cli with argparse-based install/remove/update commands for Klipper,
Moonraker, Mainsail/Fluidd and client configs.
Wire main.py to dispatch to the CLI and fall back to the TUI when no args
are given. Pass CLI arguments through kiauh.sh and skip the update dialog
for non-interactive runs.
Add interactive parameter to MoonrakerSetupService.install/remove/update and
headless tests for the service.
Add unit tests for moonraker utility functions.
Add interactive parameter to KlipperSetupService.install/remove/update so the
CLI can run without prompts.
Make check_user_groups honor the interactive flag and add headless tests.
Replace monolithic client_setup.py, client_config_setup.py and their
remove counterparts with service classes under components/webui_client/services.
Update menus and core install/update menus to call the new services.
Add unit tests for services, client_utils and menu wiring.
Route fs_utils and sys_utils subprocess/filesystem operations through
core.backends so tests can substitute a fake runner or filesystem from one place.
Make create_python_venv, update_python_pip and update_system_package_lists
raise RuntimeError on failure so callers decide whether to fail fast or recover.
Catch apt update failures in UpdateMenu to keep the menu usable.
Introduce core.backends with CommandRunner and FilesystemBackend protocols plus
default subprocess/local filesystem implementations.
Add fake backends in tests.helpers.fake_backends for isolated unit tests.
Add GitHub Actions workflow for running tests with coverage on Python 3.8 and 3.11.
Configure pytest-cov, coverage thresholds and expand testpaths in pyproject.toml.
Update .gitignore for .ruff_cache, .mypy_cache, *.egg-info and .coverage.
Error when opening KIUAH fix
get_current_branch only catches CalledProcessError, not FileNotFoundError. When crowsnest isn't installed, the missing dir propagates the exception. Fix
* feat(extensions): add Moongate for Klipper
Adds Moongate for Klipper as extension #15 (next free index after KAMP). Moongate pairs a printer with the Moongate Android app for secure remote access and print monitoring over a Cloudflare quick-tunnel fronted by an EdDSA auth proxy.
The extension is KIAUH-native for the parts KIAUH owns (Moonraker instance discovery, the install/remove confirmation dialogs, moonraker.conf backup, and the repo clone wired into the update manager) and delegates the heavy, security-sensitive install steps (cloudflared, the moongate-authproxy and moongate-tunnel systemd services, the Moonraker host rebind) to Moongate's own idempotent, non-interactive install/update/uninstall scripts so that logic stays maintained upstream in one place.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(metadata): update index for Moongate extension
* refactor(moongate_extension): enhance error handling and update docstring for clarity
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: dw-0 <th33xitus@gmail.com>
* Add DroidKlipp extension
* fix(extensions): restart adb_monitor and redeploy monitor on DroidKlipp update
The update flow only ran git_pull_wrapper, which left the running
adb_monitor service executing stale in-memory code. It also never
rebuilt the deployed ~/droidklipp_monitor.py, since that file is
generated by the installer rather than tracked in the repo.
- stop adb_monitor before the pull, start it after (mirrors mobileraker)
- after pulling, re-deploy droidklipp_monitor.py into $HOME so the
service picks up the updated code
- best-effort restart the service if the update fails
* fix(droidklipp): clean up comments and update website link in metadata
---------
Co-authored-by: Cody Dixon <codydixon71@gmail.com>
Co-authored-by: dw-0 <th33xitus@gmail.com>
fix: fix crowsnest install status and update for v5
Crowsnest v5 introduced multiple breaking changes resulting in a
'Incomplete' install status even after successful installation.
This adds support for the new v5 setup with backwards compatibility for
old versions.
Signed-off-by: Patrick Gehrsitz <github@mryel.de>
* feat(instance_manager): add interactive stopping of Klipper instances with user confirmation
* fix(instance_utils): remove unnecessary 'self' parameter from stop_klipper_instances_interactively function
* refactor(tmc_autotune): replace internal stop function with direct call to stop_klipper_instances_interactively
* feat(klipper_adaptive_meshing_purging): add initial implementation of Klipper Adaptive Meshing and Purging extension
* docs(klipper_adaptive_meshing_purging): update warning message with additional documentation note regarding max_extrude_cross_section
* fix(klipper_adaptive_meshing_purging): update warning message formatting for clarity
* fix(klipper_adaptive_meshing_purging): update warning message formatting for clarity
* fix(_install_cfg): update symlink creation to point to Configuration directory
* fix(license): update copyright information to include myself & upstream
* fix(klipper_adaptive_meshing_purging): update moonraker updater name for consistency with upstream
* style: add type annotations
- Correct minor formatting issues in copyright headers.
* fix: update import path for `simple_config_parser`
* refactor: improve logging and configuration handling for KAMP installation and removal
* style: clarify warning message for purge settings in KAMP extension
---------
Co-authored-by: dw-0 <th33xitus@gmail.com>
* feat(instance_manager): add interactive stopping of Klipper instances with user confirmation
* fix(instance_utils): remove unnecessary 'self' parameter from stop_klipper_instances_interactively function
* refactor(tmc_autotune): replace internal stop function with direct call to stop_klipper_instances_interactively
* fix(backup_service): streamline backup methods for proper paths and add docstring
* fix(backup_service): add proper destination_path in verbose output
* fix(backup_service): replaces html headers with { } to avoid rendering
* nitpick(backup_service): correct variable name for backup destination path in logging
- Standardize `str()` wrapping for color-applied strings in various returns.
- Refine type hints for better code clarity and robustness.
- Add null checks for port inputs to prevent potential errors.
- Improve local and remote version comparison by replacing default placeholders with None.
- Update repo and branch logic to handle None values consistently.
- Refactor type hints for better readability and accuracy.