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.
* fix: improve repository parsing logic to handle empty lines and comments more effectively
* fix: update scp submodule so duplicate sections are preserved while editing configs (#735)
* Squashed 'kiauh/core/submodules/simple_config_parser/' changes from f5eee99..5bc9e0a
5bc9e0a docs: update README
394dd7b refactor!: improve parsing and writing for config (#5)
git-subtree-dir: kiauh/core/submodules/simple_config_parser
git-subtree-split: 5bc9e0a50947f1be2f4877a10ab3a632774f82ea
* fix(logging): change warning to error message for config creation failure
* fix(config): improve readability by using descriptive variable names for options
(cherry picked from commit ae0a6b697e)
* Squashed 'kiauh/core/submodules/simple_config_parser/' changes from 5bc9e0a..eef8861
eef8861 refactor: update type hint for fallback parameter to Any
5d04325 Revert "chore: use Optional instead of | and None instead of _UNSET"
git-subtree-dir: kiauh/core/submodules/simple_config_parser
git-subtree-split: eef8861f126ddf84012ac8bed77b467926016d3e
* Squashed 'kiauh/core/submodules/simple_config_parser/' changes from eef8861..9c89612
9c89612 fix: correct assignment of raw value in option handling
git-subtree-dir: kiauh/core/submodules/simple_config_parser
git-subtree-split: 9c896124cf624e25410714649d306001250482f1
* fix: remove unnecessary whitespace in trusted_clients formatting