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.
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/PKG-INFO +1 -1
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/__init__.py +1 -1
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/gui_installer.py +9 -40
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/settings.py +1 -15
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/PKG-INFO +1 -1
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/LICENSE +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/README.md +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/__main__.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/advertise.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/autostart.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/autostart_gate.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/cli.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/cron_installer.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/discovery.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/host.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/icons.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/identity.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/install.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/onboarding.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/skills.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/sources.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/state.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/sweep.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/__init__.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/build.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/capability.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/cluster.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/corpus.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/embedder.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/groups.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/taxonomy/llm_groups.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/testing.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/tool_installer.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/tui_installer.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit/upgrade.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/SOURCES.txt +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/dependency_links.txt +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/entry_points.txt +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/requires.txt +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/cli_tools_kit.egg-info/top_level.txt +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/pyproject.toml +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/setup.cfg +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_autostart_gate.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_capability_groups.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_cron_installer.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_e2e.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_engine.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_gui_smoke.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_hooks.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_host.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_identity.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_llm_groups.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_public_api.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_skills.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_sources.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_taxonomy_cluster.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_testing.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_tool_installer.py +0 -0
- {cli_tools_kit-1.2.0 → cli_tools_kit-1.3.0}/tests/test_tui_installer.py +0 -0
- {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.
|
|
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
|
|
@@ -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
|
-
#
|
|
303
|
-
#
|
|
304
|
-
#
|
|
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
|
|
3921
|
-
|
|
3922
|
-
|
|
3923
|
-
|
|
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("
|
|
3929
|
-
|
|
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:
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|