Commit Graph
893 Commits
Author SHA1 Message Date
dw-0 4208d5a984 feat(spinner): add pause and resume functionality to spinner; update loading behavior in menus 2026-07-11 23:29:16 +02:00
dw-0 a78a6c76f5 test(extensions): add unit tests for base extension 2026-07-11 17:49:51 +02:00
dw-0 b6a08ce4e5 test(instance_manager): add unit tests for instance manager 2026-07-11 17:49:51 +02:00
dw-0 a3f9ee1faf test(settings): add unit tests for KiauhSettings 2026-07-11 17:49:51 +02:00
dw-0 477d737489 test(services): add unit tests for backup and message services 2026-07-11 17:49:51 +02:00
dw-0 9b93450d98 feat(cli): add headless command-line interface
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.
2026-07-11 17:49:51 +02:00
dw-0 adf3e292fb feat(moonraker): support headless install/remove/update
Add interactive parameter to MoonrakerSetupService.install/remove/update and

headless tests for the service.

Add unit tests for moonraker utility functions.
2026-07-11 17:49:45 +02:00
dw-0 58e3eb9f06 feat(klipper): support headless install/remove/update
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.
2026-07-11 17:49:45 +02:00
dw-0 09dd8298f7 refactor(webui_client): extract install/remove/update logic into services
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.
2026-07-11 17:49:39 +02:00
dw-0 93e7bb7212 style: remove blank lines from simple_config_parser test imports 2026-07-11 00:27:42 +02:00
dw-0 e4eb36d72f refactor(utils): delegate subprocess and filesystem calls to shared backends
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.
2026-07-11 00:27:35 +02:00
dw-0 8b9d172805 test: suppress logger output globally during tests
Add an autouse fixture in kiauh/conftest.py that patches Logger methods

so tests produce clean, assertion-focused output.
2026-07-11 00:27:03 +02:00
dw-0 6aa170fd68 feat(tests): add pluggable subprocess and filesystem backends
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.
2026-07-11 00:26:59 +02:00
dw-0 861cb2bff4 chore: add pytest-cov and CI workflow
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.
2026-07-11 00:26:49 +02:00
dw-0 7b5522ac94 feat(tests): add unit tests for shared utilities 2026-07-04 12:58:20 +02:00
Cody D DixonandGitHub a42b730688 fix: catch FileNotFoundError in get_current_branch when component dir is missing (#813)
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
v6.3.1
2026-06-29 22:43:10 +02:00
dw-0 77d6c87aa0 refactor(readme): update section titles and improve table formatting 2026-06-29 22:20:55 +02:00
dw-0 b893ff14f7 chore(readme): remove jetbrains as sponsor 2026-06-29 21:36:58 +02:00
dw-0 43b0994ac5 fix(README_zh): correct Fluidd logo image path in documentation 2026-06-29 21:31:55 +02:00
dw-0 040edc1d4f chore: remove AGENTS.md v6.3.0 2026-06-28 12:50:59 +02:00
750dba1dbe feat(extensions): add Moongate for Klipper (#809)
* 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>
2026-06-28 12:49:30 +02:00
6f4b471008 feat(extension): Add DroidKlipp extension (#804)
* 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>
2026-06-28 12:07:19 +02:00
5077765fd6 fix: fluidd logo (#811)
* fix: fluid logo

* fix: use correct logo.svg instead of avatar

---------

Co-authored-by: dw-0 <th33xitus@gmail.com>
2026-06-27 12:53:20 +02:00
Patrick GehrsitzandGitHub 9f97ae6c2a refactor(crowsnest): fix crowsnest install status and update for v5 (#799)
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>
2026-05-30 15:36:32 +02:00
_Redstone_c_andGitHub b90a8f13b1 fix(switch_repo): honor use_python_binary when recreating venv (#793)
* fix(switch_repo): honor use_python_binary when recreating venv

* fix(switch_repo): validate name at function entry
v6.2.1
2026-04-24 13:34:45 +02:00
ea1b794afd feat(extensions): Klipper-Adaptive-Meshing-Purging (#785)
* 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>
v6.2.0
2026-04-21 18:00:40 +02:00
dw-0 647a7d9400 feat: add initial AGENTS.md 2026-04-20 21:49:46 +02:00
aa0609d143 fix: auto restart of KIAUH after update (#781)
* fixed auto update

* fixed the restarting logic

* testing

* removed test

* fix: colored output and remove subshell usage in kiauh_update_dialog

---------

Co-authored-by: dw-0 <th33xitus@gmail.com>
v6.1.3
2026-04-19 20:10:36 +02:00
dw-0 2175bd55f9 refactor: integrate simple_config_parser as internal module 2026-04-19 15:48:06 +02:00
Patrick GehrsitzandGitHub a935e67431 refactor: use correct crowsnest branch for v5 and future releases (#792)
fix: fix crowsnest for v5 and future releases

Signed-off-by: Patrick Gehrsitz <github@mryel.de>
v6.1.2
2026-04-19 14:52:16 +02:00
dw-0andGitHub 2f41e52189 fix(core): refresh system package list in update menu after update (#791) v6.1.1 2026-04-19 12:21:17 +02:00
Théo GaillardandGitHub 757344128a fix(extensions_menu): prevent extension index collisions during loading (#783)
* fix(extensions_menu): prevent extension index collisions during loading

* feat(extensions_menu): add GITHUB_ISSUES_URL for reporting extension loading issues
2026-03-22 13:43:20 +01:00
Théo GaillardandGitHub 7ca08f9b30 feat(instance_manager): add interactive stopping of Klipper instances (#784)
* 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
2026-03-22 12:01:15 +01:00
David RiosandGitHub 308079a821 fix: incorrect Logger.warn (#778)
Fix method name
2026-02-27 22:45:58 +01:00
Théo GaillardandGitHub 09a5d96b63 feat(tmc_autotune): add initial implementation of TMC Autotune extens… (#771)
* feat(tmc_autotune): add initial implementation of TMC Autotune extension with installation and update functionalities

* fix: remove useless comments

* fix: added support for Kalico style plugins directory

* refactor: extract method for moonraker update manager section removal, automatically reloading moonraker upon call
v6.1.0
2026-02-03 20:46:24 +01:00
dw-0andGitHub 1f9d4c823a fix(settings_menu): fix regression by checking for the correct condition (#773) v6.0.12 2026-01-31 11:13:37 +01:00
dw-0 c8df9427b3 fix(backup): improve reusability of backup service and enhance file handling
- Refactor `BackupService` instance management for better reuse across methods.
- Avoid redundant file backups by checking for existing files.
- Enhance directory backup logic to handle nested files and directories more efficiently.
- Standardize timestamp initialization for consistent time-based backup operations.
2026-01-31 10:59:53 +01:00
Théo GaillardandGitHub 5414aba299 fix(backup_service): backup methods use proper paths (#769) (#770)
* 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
2026-01-29 18:52:48 +01:00
Théo GaillardandGitHub 80948edbb4 fix(gcode_shell_cmd): update comment to clarify config directory usage (#767) v6.0.11 2026-01-19 17:04:28 +01:00
Théo GaillardandGitHub a455edba93 docs(fs_utils): add the documentation for create_symlink (#768) 2026-01-19 17:03:04 +01:00
Théo GaillardandGitHub 810ab3a2fa fix(fs-utils): enhance check_file_exist to support symlink resolution (#766) 2026-01-19 17:02:18 +01:00
dw-0 6c9a78496a fix(client_utils): ensure proper type conversion and hints for improved safety
- 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.
2026-01-18 15:58:25 +01:00
dw-0 123ccde378 fix(core): standardize handling of None values for repo and version fields
- 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.
2026-01-18 15:49:48 +01:00
dw-0andGitHub 45fde808d2 fix(update_menu): refresh component status after updates (#764)
fix(update_menu): refresh component status after updates to ensure consistency
v6.0.10
2026-01-18 14:53:04 +01:00
dw-0andGitHub 8ba134f574 fix(ui): handle missing or empty local version values and standardize defaults (#763) 2026-01-18 14:18:27 +01:00
Théo GaillardandGitHub f951936b20 fix: navigation fallthrough in 'Get MCU ID' (Advanced Menu) (#762)
* fix: corrected back navigation in advanced menu in reference to #761

* ci: add delay after warning when no MCUs are found
2026-01-18 12:16:45 +01:00
dw-0 657d919378 chore: extend copyright year to 2026 in all headers v6.0.9 2026-01-11 09:37:17 +01:00
StaubgeborenerandGitHub 24c9b9daa9 chore(Klipper-Backup): Update Copyright year to 2026 (#758)
* Update copyright year to 2026

* Update copyright year in klipper_backup_extension.py
2026-01-11 09:29:33 +01:00
Thijs TriemstraandGitHub 4c511017f1 README: Update KlipperScreen link and contributor name (#753)
Update KlipperScreen link and contributor name

update maintainer for klipperscreen
2025-11-30 17:42:36 +01:00
CliffordandGitHub 372bab8847 feat(gcode_shell_command): allowing for expanding env vars (#747)
allowing for expanding env vars
v6.0.8
2025-11-23 12:53:52 +01:00