cli-tools-kit 1.2.0__tar.gz → 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/PKG-INFO +1 -1
  2. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/__init__.py +1 -1
  3. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/gui_installer.py +9 -40
  4. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/settings.py +1 -15
  5. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/PKG-INFO +1 -1
  6. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/LICENSE +0 -0
  7. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/README.md +0 -0
  8. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/__main__.py +0 -0
  9. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/advertise.py +0 -0
  10. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/autostart.py +0 -0
  11. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/autostart_gate.py +0 -0
  12. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/cli.py +0 -0
  13. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/cron_installer.py +0 -0
  14. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/discovery.py +0 -0
  15. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/host.py +0 -0
  16. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/icons.py +0 -0
  17. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/identity.py +0 -0
  18. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/install.py +0 -0
  19. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/onboarding.py +0 -0
  20. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/skills.py +0 -0
  21. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/sources.py +0 -0
  22. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/state.py +0 -0
  23. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/sweep.py +0 -0
  24. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/__init__.py +0 -0
  25. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/build.py +0 -0
  26. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/capability.py +0 -0
  27. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/cluster.py +0 -0
  28. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/corpus.py +0 -0
  29. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/embedder.py +0 -0
  30. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/groups.py +0 -0
  31. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/llm_groups.py +0 -0
  32. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/testing.py +0 -0
  33. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/tool_installer.py +0 -0
  34. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/tui_installer.py +0 -0
  35. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/upgrade.py +0 -0
  36. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/SOURCES.txt +0 -0
  37. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/dependency_links.txt +0 -0
  38. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/entry_points.txt +0 -0
  39. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/requires.txt +0 -0
  40. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/top_level.txt +0 -0
  41. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/pyproject.toml +0 -0
  42. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/setup.cfg +0 -0
  43. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_autostart_gate.py +0 -0
  44. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_capability_groups.py +0 -0
  45. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_cron_installer.py +0 -0
  46. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_e2e.py +0 -0
  47. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_engine.py +0 -0
  48. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_gui_smoke.py +0 -0
  49. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_hooks.py +0 -0
  50. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_host.py +0 -0
  51. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_identity.py +0 -0
  52. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_llm_groups.py +0 -0
  53. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_public_api.py +0 -0
  54. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_skills.py +0 -0
  55. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_sources.py +0 -0
  56. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_taxonomy_cluster.py +0 -0
  57. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_testing.py +0 -0
  58. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_tool_installer.py +0 -0
  59. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_tui_installer.py +0 -0
  60. {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_upgrade.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cli-tools-kit
3
- Version: 1.2.0
3
+ Version: 1.3.0
4
4
  Summary: Installer protocol + helpers for self-installing Python CLI/GUI tools (desktop shortcuts, bash aliases, cron entries), plus reusable tkinter and curses installer screens
5
5
  Author: Steffen Probst
6
6
  License: MIT License
@@ -56,4 +56,4 @@ __all__ = [
56
56
  "read_installed_skill",
57
57
  ]
58
58
 
59
- __version__ = "1.2.0"
59
+ __version__ = "1.3.0"
@@ -299,9 +299,9 @@ class InstallerApp:
299
299
  if self.orphan_desktops or self.orphan_aliases:
300
300
  self.root.after(100, self._show_orphan_warning)
301
301
 
302
- # Opt-in: silently apply pending local updates on this launch, visibly
303
- # logged (see _maybe_auto_update_on_startup). Runs after the orphan
304
- # warning so the two don't fight over the log/dialog at the same tick.
302
+ # Apply pending local updates on this launch, visibly logged (see
303
+ # _maybe_auto_update_on_startup). Runs after the orphan warning so the
304
+ # two don't fight over the log/dialog at the same tick.
305
305
  self.root.after(200, self._maybe_auto_update_on_startup)
306
306
 
307
307
  # Newer installer, tool repos or kit: asks git and pip off the main
@@ -991,31 +991,12 @@ class InstallerApp:
991
991
  self._apply_btn.pack(side="right", padx=5)
992
992
  self._apply_highlighted = False
993
993
  self._op_in_progress = False # guards against overlapping bulk operations
994
- ttk.Button(footer, text="Refresh Status", command=self._update_status_labels).pack(side="right", padx=5)
995
994
 
996
995
  ttk.Button(footer, text="Select All", command=self._select_all).pack(side="left", padx=5)
997
996
  ttk.Button(footer, text="Select None", command=self._select_none).pack(side="left", padx=5)
998
997
 
999
998
  ttk.Separator(footer, orient="vertical").pack(side="left", fill="y", padx=15)
1000
999
 
1001
- # Auto-update-on-startup toggle: persists to config.json so that the
1002
- # NEXT launch of this GUI silently applies any pending local updates —
1003
- # the same network-free reconciliation as clicking the badge to its
1004
- # right — logging what it did to the Operation Log so it stays visible
1005
- # even though it ran automatically. Sits immediately left of the badge.
1006
- self._auto_update_startup_var = tk.BooleanVar(value=settings.get_auto_update_on_startup())
1007
- auto_update_cb = ttk.Checkbutton(
1008
- footer, variable=self._auto_update_startup_var,
1009
- command=self._toggle_auto_update_startup)
1010
- auto_update_cb.pack(side="left", padx=(5, 2))
1011
- self._attach_tooltip(
1012
- auto_update_cb,
1013
- "Auto-update on startup\n\n"
1014
- "When checked, the next time this installer GUI starts it "
1015
- "automatically applies any pending local updates (the same "
1016
- "network-free shortcut/alias refresh as clicking the badge to "
1017
- "the right) and logs what it did to the Operation Log below.")
1018
-
1019
1000
  # Stale-shortcut indicator (the "Update all" replacement): a count badge —
1020
1001
  # an "N updates pending" pill that falls back to a muted "Up to date", with a
1021
1002
  # hover tooltip detailing which tools drifted and when. Local-only (orphan
@@ -1036,8 +1017,6 @@ class InstallerApp:
1036
1017
  "Unlike the update badge (local shortcut refresh, no network), this "
1037
1018
  "reaches the internet and confirms before running.")
1038
1019
 
1039
- ttk.Separator(footer, orient="vertical").pack(side="left", fill="y", padx=15)
1040
-
1041
1020
  # Collapsible Log Area
1042
1021
  self.log_expanded = tk.BooleanVar(value=False)
1043
1022
 
@@ -3912,25 +3891,15 @@ class InstallerApp:
3912
3891
  """
3913
3892
  self._bulk_reinstall(skip_deps=True, only_stale=True)
3914
3893
 
3915
- def _toggle_auto_update_startup(self):
3916
- """Persist the 'Auto-update on startup' checkbox to config.json."""
3917
- settings.set_auto_update_on_startup(self._auto_update_startup_var.get())
3918
-
3919
3894
  def _maybe_auto_update_on_startup(self):
3920
- """Run once per GUI launch, after the initial status scan. If the user
3921
- has opted in via the startup checkbox, silently apply the same
3922
- network-free reconciliation the Up-to-date badge offers — but log every
3923
- step to the Operation Log (auto-expanding it) so the automatic run
3924
- stays visible rather than happening silently in the background."""
3925
- if not self._auto_update_startup_var.get():
3895
+ """Run once per GUI launch, after the initial status scan: apply the
3896
+ network-free reconciliation the Up-to-date badge offers. The log opens
3897
+ only when there is something to apply."""
3898
+ if not self._stale_cache:
3926
3899
  return
3927
3900
  self._toggle_log(force_expand=True)
3928
- self._log("Auto-update on startup is enabled — checking for pending updates...", "header")
3929
- if self._stale_cache:
3930
- self._log(f"Found {len(self._stale_cache)} pending update(s) — applying automatically...", "info")
3931
- self._update_all()
3932
- else:
3933
- self._log("Already up to date — nothing to do.", "success")
3901
+ self._log(f"Applying {len(self._stale_cache)} pending local update(s) on startup...", "header")
3902
+ self._update_all()
3934
3903
 
3935
3904
  # --- upgrades -----------------------------------------------------------------
3936
3905
 
@@ -1,4 +1,4 @@
1
- """The installer's own settings file: auto-update, custom icons, icon generation."""
1
+ """The installer's own settings file: theme, custom icons, icon generation."""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -25,20 +25,6 @@ def save_config(config: dict):
25
25
  json.dump(config, f)
26
26
 
27
27
 
28
- def get_auto_update_on_startup() -> bool:
29
- """Whether this GUI should silently apply pending local updates the next
30
- time it launches (the "Auto-update on startup" checkbox next to the
31
- Up-to-date badge)."""
32
- return bool(load_config().get("auto_update_on_startup", False))
33
-
34
-
35
- def set_auto_update_on_startup(enabled: bool):
36
- """Persist the 'Auto-update on startup' checkbox state."""
37
- config = load_config()
38
- config["auto_update_on_startup"] = enabled
39
- save_config(config)
40
-
41
-
42
28
  def get_custom_icon_path(tool_key: str) -> Optional[str]:
43
29
  """Get custom icon path for a tool if one exists.
44
30
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cli-tools-kit
3
- Version: 1.2.0
3
+ Version: 1.3.0
4
4
  Summary: Installer protocol + helpers for self-installing Python CLI/GUI tools (desktop shortcuts, bash aliases, cron entries), plus reusable tkinter and curses installer screens
5
5
  Author: Steffen Probst
6
6
  License: MIT License
File without changes
File without changes
File without changes