machineconfig 5.72__py3-none-any.whl → 5.75__py3-none-any.whl

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.

Potentially problematic release.


This version of machineconfig might be problematic. Click here for more details.

Files changed (28) hide show
  1. machineconfig/jobs/installer/installer_data.json +6 -6
  2. machineconfig/scripts/python/agents.py +3 -0
  3. machineconfig/scripts/python/ai/initai.py +19 -16
  4. machineconfig/scripts/python/ai/vscode_tasks.py +32 -0
  5. machineconfig/scripts/python/cloud.py +11 -4
  6. machineconfig/scripts/python/cloud_helpers/cloud_mount.py +10 -18
  7. machineconfig/scripts/python/croshell.py +1 -1
  8. machineconfig/scripts/python/devops.py +1 -1
  9. machineconfig/scripts/python/devops_helpers/cli_config.py +2 -2
  10. machineconfig/scripts/python/devops_helpers/cli_repos.py +1 -1
  11. machineconfig/scripts/python/devops_helpers/cli_self.py +8 -8
  12. machineconfig/scripts/python/entry.py +24 -8
  13. machineconfig/scripts/python/helper_navigator/command_tree.py +29 -16
  14. machineconfig/scripts/python/interactive.py +2 -2
  15. machineconfig/scripts/python/nw/mount_nfs +1 -1
  16. machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +1 -1
  17. machineconfig/scripts/python/sessions.py +1 -1
  18. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
  19. machineconfig/setup_linux/web_shortcuts/interactive.sh +7 -7
  20. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +7 -7
  21. machineconfig/utils/installer_utils/installer_class.py +3 -39
  22. machineconfig/utils/path_extended.py +2 -4
  23. machineconfig/utils/ssh.py +1 -1
  24. {machineconfig-5.72.dist-info → machineconfig-5.75.dist-info}/METADATA +1 -1
  25. {machineconfig-5.72.dist-info → machineconfig-5.75.dist-info}/RECORD +28 -27
  26. {machineconfig-5.72.dist-info → machineconfig-5.75.dist-info}/WHEEL +0 -0
  27. {machineconfig-5.72.dist-info → machineconfig-5.75.dist-info}/entry_points.txt +0 -0
  28. {machineconfig-5.72.dist-info → machineconfig-5.75.dist-info}/top_level.txt +0 -0
@@ -1809,14 +1809,14 @@
1809
1809
  "doc": "🐋 A simple terminal UI for both docker and docker-compose",
1810
1810
  "fileNamePattern": {
1811
1811
  "amd64": {
1812
- "linux": null,
1813
- "macos": null,
1814
- "windows": null
1812
+ "linux": "lazydocker_{version}_Linux_x86_64.tar.gz",
1813
+ "macos": "lazydocker_{version}_Darwin_x86_64.tar.gz",
1814
+ "windows": "lazydocker_{version}_Windows_x86_64.zip"
1815
1815
  },
1816
1816
  "arm64": {
1817
- "linux": null,
1818
- "macos": null,
1819
- "windows": null
1817
+ "linux": "lazydocker_{version}_Linux_arm64.tar.gz",
1818
+ "macos": "lazydocker_{version}_Darwin_arm64.tar.gz",
1819
+ "windows": "lazydocker_{version}_Windows_arm64.zip"
1820
1820
  }
1821
1821
  }
1822
1822
  },
@@ -190,7 +190,10 @@ MODEL options: {sep.join(get_args(MODEL))}
190
190
 
191
191
  def main():
192
192
  agents_app = get_app()
193
+ # from trogon.typer import init_tui
194
+ # agents_app_tui = init_tui(agents_app)
193
195
  agents_app()
196
+ # agents_app_tui()
194
197
 
195
198
 
196
199
  if __name__ == "__main__": # pragma: no cover
@@ -7,6 +7,7 @@ from machineconfig.scripts.python.ai.solutions.copilot import github_copilot
7
7
  from machineconfig.scripts.python.ai.solutions.crush import crush
8
8
  from machineconfig.scripts.python.ai.solutions.cursor import cursors
9
9
  from machineconfig.scripts.python.ai.solutions.gemini import gemini
10
+ from machineconfig.scripts.python.ai.vscode_tasks import add_lint_and_type_check_task
10
11
  from machineconfig.utils.accessories import get_repo_root
11
12
 
12
13
 
@@ -15,22 +16,22 @@ def add_ai_configs(repo_root: Path) -> None:
15
16
  if repo_root_resolved is not None:
16
17
  repo_root = repo_root_resolved # this means you can run the command from any subdirectory of the repo.
17
18
 
18
- if repo_root.joinpath("pyproject.toml").exists() is False:
19
- uv_init = input(f"{repo_root} does not seem to be a python project (no pyproject.toml found), would you like to initialize one? (y/n) ")
20
- if uv_init.strip().lower() == "y":
21
- command_to_run = """
22
- uv init --python 3.13
23
- uv venv
24
- uv add --upgrade-package pylint pyright mypy pyrefly ty --dev # linters and type checkers
25
- uv add --upgrade-package pytest --dev
26
- uv add typer --dev
27
-
28
- """
29
- from machineconfig.utils.code import run_shell_script
30
- run_shell_script(command_to_run)
31
- else:
32
- print("Terminating initai ...")
33
- return
19
+ # if repo_root.joinpath("pyproject.toml").exists() is False:
20
+ # uv_init = input(f"{repo_root} does not seem to be a python project (no pyproject.toml found), would you like to initialize one? (y/n) ")
21
+ # if uv_init.strip().lower() == "y":
22
+ # command_to_run = """
23
+ # uv init --python 3.13
24
+ # uv venv
25
+ # uv add --upgrade-package pylint pyright mypy pyrefly ty --dev # linters and type checkers
26
+ # uv add --upgrade-package pytest --dev
27
+ # uv add typer --dev
28
+
29
+ # """
30
+ # from machineconfig.utils.code import run_shell_script
31
+ # run_shell_script(command_to_run)
32
+ # else:
33
+ # print("Terminating initai ...")
34
+ # return
34
35
 
35
36
  dot_ai_dir = repo_root.joinpath(".ai")
36
37
  dot_ai_dir.mkdir(parents=True, exist_ok=True)
@@ -39,6 +40,8 @@ uv add typer --dev
39
40
  generic.create_dot_scripts(repo_root=repo_root)
40
41
  generic.adjust_gitignore(repo_root=repo_root)
41
42
 
43
+ add_lint_and_type_check_task(repo_root=repo_root)
44
+
42
45
  github_copilot.build_configuration(repo_root=repo_root)
43
46
  cursors.build_configuration(repo_root=repo_root)
44
47
  gemini.build_configuration(repo_root=repo_root)
@@ -0,0 +1,32 @@
1
+ import json
2
+ from pathlib import Path
3
+
4
+
5
+ def add_lint_and_type_check_task(repo_root: Path) -> None:
6
+ vscode_dir = repo_root / ".vscode"
7
+ vscode_dir.mkdir(parents=True, exist_ok=True)
8
+ tasks_json_path = vscode_dir / "tasks.json"
9
+
10
+ task_to_add = {
11
+ "label": "lint_and_type_check",
12
+ "type": "shell",
13
+ "linux": {"command": "bash", "args": ["./.ai/scripts/lint_and_type_check.sh"]},
14
+ "osx": {"command": "bash", "args": ["./.ai/scripts/lint_and_type_check.sh"]},
15
+ "windows": {"command": "pwsh", "args": ["-File", "./.ai/scripts/lint_and_type_check.ps1"]},
16
+ "presentation": {"reveal": "always", "panel": "new"},
17
+ "problemMatcher": [],
18
+ }
19
+
20
+ if tasks_json_path.exists():
21
+ with tasks_json_path.open("r") as f:
22
+ tasks_config = json.load(f)
23
+ if "tasks" not in tasks_config:
24
+ tasks_config["tasks"] = []
25
+ existing_labels = {task.get("label") for task in tasks_config.get("tasks", [])}
26
+ if "lintAndTypeCheck" not in existing_labels:
27
+ tasks_config["tasks"].append(task_to_add)
28
+ else:
29
+ tasks_config = {"version": "2.0.0", "tasks": [task_to_add]}
30
+
31
+ with tasks_json_path.open("w") as f:
32
+ json.dump(tasks_config, f, indent="\t")
@@ -2,13 +2,20 @@
2
2
  import typer
3
3
  from machineconfig.scripts.python.cloud_helpers.cloud_sync import main as sync_main
4
4
  from machineconfig.scripts.python.cloud_helpers.cloud_copy import main as copy_main
5
- from machineconfig.scripts.python.cloud_helpers.cloud_mount import main as mount_main
5
+ from machineconfig.scripts.python.cloud_helpers.cloud_mount import mount as mount_main
6
6
 
7
7
  def get_app():
8
8
  app = typer.Typer(add_completion=False, no_args_is_help=True)
9
- app.command(name="sync", no_args_is_help=True, help="""🔄 Synchronize files/folders between local and cloud storage.""")(sync_main)
10
- app.command(name="copy", no_args_is_help=True, short_help="""📤 Upload or 📥 Download files/folders to/from cloud storage services like Google Drive, Dropbox, OneDrive, etc.""")(copy_main)
11
- app.command(name="mount", no_args_is_help=True, short_help="""🔗 Mount cloud storage services like Google Drive, Dropbox, OneDrive, etc. as local drives.""")(mount_main)
9
+
10
+ app.command(name="sync", no_args_is_help=True, help="""🔄 [s] Synchronize files/folders between local and cloud storage.""")(sync_main)
11
+ app.command(name="s", no_args_is_help=True, hidden=True)(sync_main) # short alias
12
+
13
+ app.command(name="copy", no_args_is_help=True, short_help="""📤 [c] Upload or 📥 Download files/folders to/from cloud storage services like Google Drive, Dropbox, OneDrive, etc.""")(copy_main)
14
+ app.command(name="c", no_args_is_help=True, hidden=True)(copy_main) # short alias
15
+
16
+ app.command(name="mount", no_args_is_help=True, short_help="""🔗 [m] Mount cloud storage services like Google Drive, Dropbox, OneDrive, etc. as local drives.""")(mount_main)
17
+ app.command(name="m", no_args_is_help=True, hidden=True)(mount_main) # short alias
18
+
12
19
  return app
13
20
 
14
21
 
@@ -52,7 +52,12 @@ mprocs "echo 'see {DEFAULT_MOUNT}/{cloud} for the mounted cloud'; rclone about {
52
52
  return txt
53
53
 
54
54
 
55
- def mount(cloud: Optional[str], network: Optional[str], destination: Optional[str]) -> None:
55
+ def mount(
56
+ cloud: Annotated[Optional[str], typer.Option(help="cloud to mount")] = None,
57
+ destination: Annotated[Optional[str], typer.Option(help="destination to mount")] = None,
58
+ network: Annotated[Optional[str], typer.Option(help="mount network drive")] = None,
59
+ ) -> None:
60
+
56
61
  # draw header box dynamically
57
62
  title = "☁️ Cloud Mount Utility"
58
63
  console.print(Panel(title, title_align="left", border_style="blue"))
@@ -153,21 +158,8 @@ zellij action move-focus up
153
158
  console.print(Panel(f"{title1}\n{title2}", title="Success", border_style="green"))
154
159
 
155
160
 
156
- def main(
157
- cloud: Annotated[Optional[str], typer.Option(help="cloud to mount")] = None,
158
- destination: Annotated[Optional[str], typer.Option(help="destination to mount")] = None,
159
- network: Annotated[Optional[str], typer.Option(help="mount network drive")] = None,
160
- ) -> None:
161
- # draw main title box dynamically
162
- main_title = "☁️ RCLONE CLOUD MOUNT"
163
- console.print(Panel(main_title, title_align="left", border_style="blue"))
164
-
165
- mount(cloud=cloud, network=network, destination=destination)
166
-
167
-
168
- def arg_parser() -> None:
169
- typer.run(main)
170
-
171
161
 
172
- if __name__ == "__main__":
173
- arg_parser()
162
+ def get_app():
163
+ app = typer.Typer(name="cloud-mount", help="Cloud mount utility")
164
+ app.command(name="mount", no_args_is_help=True)(mount)
165
+ return app
@@ -149,7 +149,7 @@ from pathlib import Path
149
149
  else:
150
150
  console.print(Panel("❌ Could not determine the local machineconfig repo root. Please ensure the `REPO_ROOT` in `source_of_truth.py` is correctly set to the local path of the machineconfig repo, or do not use the `--local` flag.", title="Error", border_style="red"))
151
151
  return
152
- else: ve_line = """--with "machineconfig[plot]>=5.72" """
152
+ else: ve_line = """--with "machineconfig[plot]>=5.74" """
153
153
  fire_line = f"uv run --python 3.14 {ve_line} {interpreter} {interactivity} {profile} {str(pyfile)}"
154
154
 
155
155
  from machineconfig.utils.code import run_shell_script
@@ -20,7 +20,7 @@ def get_app():
20
20
  import machineconfig.utils.installer_utils.installer as installer_entry_point
21
21
  installer_entry_point.main(which=which, group=group, interactive=interactive)
22
22
  _ = install
23
- app.command("install", no_args_is_help=True, help="🛠️ [i] Install essential packages")(install)
23
+ app.command("install", no_args_is_help=True, help="🛠️ [i] Install essential packages")(install)
24
24
  app.command("i", no_args_is_help=True, help="Install essential packages", hidden=True)(install)
25
25
  app.add_typer(cli_repos.get_app(), name="repos")
26
26
  app.add_typer(cli_repos.get_app(), name="r", hidden=True)
@@ -42,7 +42,7 @@ def path():
42
42
  from pathlib import Path
43
43
  path = Path(navigator.__file__).resolve().parent.joinpath("path_manager_tui.py")
44
44
  from machineconfig.utils.code import run_shell_script
45
- run_shell_script(f"""uv run --with "machineconfig>=5.72,textual" {path}""")
45
+ run_shell_script(f"""uv run --with "machineconfig>=5.74,textual" {path}""")
46
46
 
47
47
  def pwsh_theme():
48
48
  """🔗 Select powershell prompt theme."""
@@ -63,7 +63,7 @@ def copy_assets(which: Literal["scripts", "settings", "both"] = typer.Option(...
63
63
 
64
64
 
65
65
  def get_app():
66
- config_apps = typer.Typer(help="⚙️ [c] configuration subcommands", no_args_is_help=True)
66
+ config_apps = typer.Typer(help="⚙️ [c] configuration subcommands", no_args_is_help=True)
67
67
  config_apps.command("private", no_args_is_help=True, help="🔗 [p] Manage private configuration files.")(private)
68
68
  config_apps.command("p", no_args_is_help=True, help="Manage private configuration files.", hidden=True)(private)
69
69
  config_apps.command("public", no_args_is_help=True, help="🔗 [u] Manage public configuration files.")(public)
@@ -162,7 +162,7 @@ def get_app():
162
162
 
163
163
  repos_apps.command(name="push", help="🚀 [p] Push changes across repositories")(push)
164
164
  repos_apps.command(name="p", help="Push changes across repositories", hidden=True)(push)
165
- repos_apps.command(name="pull", help="⬇️ [P] Pull changes across repositories")(pull)
165
+ repos_apps.command(name="pull", help="⬇️ [P] Pull changes across repositories")(pull)
166
166
  repos_apps.command(name="P", help="Pull changes across repositories", hidden=True)(pull)
167
167
  repos_apps.command(name="commit", help="💾 [c] Commit changes across repositories")(commit)
168
168
  repos_apps.command(name="c", help="Commit changes across repositories", hidden=True)(commit)
@@ -25,9 +25,9 @@ def install():
25
25
  # main_public_from_parser()
26
26
  import platform
27
27
  if platform.system() == "Windows":
28
- run_shell_script(r"""$HOME\.local\bin\uv.exe tool install machineconfig>=5.72""")
28
+ run_shell_script(r"""$HOME\.local\bin\uv.exe tool install machineconfig>=5.74""")
29
29
  else:
30
- run_shell_script("""$HOME/.local/bin/uv tool install machineconfig>=5.72""")
30
+ run_shell_script("""$HOME/.local/bin/uv tool install machineconfig>=5.74""")
31
31
 
32
32
  def navigate():
33
33
  """📚 NAVIGATE command structure with TUI"""
@@ -35,7 +35,7 @@ def navigate():
35
35
  from pathlib import Path
36
36
  path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
37
37
  from machineconfig.utils.code import run_shell_script
38
- run_shell_script(f"""uv run --with "machineconfig>=5.72,textual" {path}""")
38
+ run_shell_script(f"""uv run --with "machineconfig>=5.74,textual" {path}""")
39
39
 
40
40
 
41
41
  def run_python(ip: str = typer.Argument(..., help="Python command to run in the machineconfig environment"),
@@ -53,14 +53,14 @@ def get_app():
53
53
  cli_app = typer.Typer(help="🔄 [s] self operations subcommands", no_args_is_help=True)
54
54
  cli_app.command("update", no_args_is_help=False, help="🔄 [u] UPDATE essential repos")(update)
55
55
  cli_app.command("u", no_args_is_help=False, help="UPDATE essential repos", hidden=True)(update)
56
- cli_app.command("interactive", no_args_is_help=False, help="🤖 [ia] INTERACTIVE configuration of machine.")(interactive)
57
- cli_app.command("ia", no_args_is_help=False, help="INTERACTIVE configuration of machine.", hidden=True)(interactive)
56
+ cli_app.command("interactive", no_args_is_help=False, help="🤖 [i] INTERACTIVE configuration of machine.")(interactive)
57
+ cli_app.command("i", no_args_is_help=False, help="INTERACTIVE configuration of machine.", hidden=True)(interactive)
58
58
  cli_app.command("status", no_args_is_help=False, help="📊 [s] STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.")(status)
59
59
  cli_app.command("s", no_args_is_help=False, help="STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.", hidden=True)(status)
60
- cli_app.command("install", no_args_is_help=False, help="📋 [i] CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates.")(install)
61
- cli_app.command("i", no_args_is_help=False, help="CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates.", hidden=True)(install)
60
+ cli_app.command("install", no_args_is_help=False, help="📋 [I] CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates.")(install)
61
+ cli_app.command("I", no_args_is_help=False, help="CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates.", hidden=True)(install)
62
62
  cli_app.command("navigate", no_args_is_help=False, help="📚 [n] NAVIGATE command structure with TUI")(navigate)
63
63
  cli_app.command("n", no_args_is_help=False, help="NAVIGATE command structure with TUI", hidden=True)(navigate)
64
- cli_app.command("python", no_args_is_help=False, help="🐍 [c] python command/file in the machineconfig environment")(run_python)
64
+ cli_app.command("python", no_args_is_help=False, help="🐍 [c] python command/file in the machineconfig environment")(run_python)
65
65
  cli_app.command("c", no_args_is_help=False, help="RUN python command/file in the machineconfig environment", hidden=True)(run_python)
66
66
  return cli_app
@@ -12,14 +12,30 @@ from machineconfig.scripts.python.croshell import croshell as croshell_func
12
12
  def get_app():
13
13
  import typer
14
14
  app = typer.Typer(help="MachineConfig CLI - Manage your machine configurations and workflows", no_args_is_help=True)
15
- app.add_typer(get_devops_app(), name="devops", help="DevOps related commands", no_args_is_help=True)
16
- app.add_typer(get_cloud_app(), name="cloud", help="Cloud management commands", no_args_is_help=True)
17
- app.add_typer(get_sessions_app(), name="sessions", help="Session and layout management", no_args_is_help=True)
18
- app.add_typer(get_fire_jobs_app(), name="fire", help="Fire and manage jobs", no_args_is_help=True)
19
- app.add_typer(get_agents_app(), name="agents", help="🤖 AI Agents management commands", no_args_is_help=True)
20
-
21
- app.command("ftpx", no_args_is_help=True, help="File transfer utility though SSH")(ftpx_func)
22
- app.command("croshell", no_args_is_help=False, help="Cross-shell command execution")(croshell_func)
15
+ devops_app = get_devops_app()
16
+ app.add_typer(devops_app, name="devops", help="[d] DevOps related commands", no_args_is_help=True)
17
+ app.add_typer(devops_app, name="d", hidden=True) # short alias
18
+
19
+ cloud_app = get_cloud_app()
20
+ app.add_typer(cloud_app, name="cloud", help="[c] Cloud management commands", no_args_is_help=True)
21
+ app.add_typer(cloud_app, name="c", hidden=True) # short alias
22
+
23
+ sessions_app = get_sessions_app()
24
+ app.add_typer(sessions_app, name="sessions", help="[s] Session and layout management", no_args_is_help=True)
25
+ app.add_typer(sessions_app, name="s", hidden=True) # short alias
26
+
27
+ fire_jobs_app = get_fire_jobs_app()
28
+ app.add_typer(fire_jobs_app, name="fire", help="[f] Fire and manage jobs", no_args_is_help=True)
29
+ app.add_typer(fire_jobs_app, name="f", hidden=True) # short alias
30
+
31
+ agents_app = get_agents_app()
32
+ app.add_typer(agents_app, name="agents", help="[a] 🤖 AI Agents management commands", no_args_is_help=True)
33
+ app.add_typer(agents_app, name="a", hidden=True) # short alias
34
+
35
+ app.command("ftpx", no_args_is_help=True, help="[f] File transfer utility though SSH")(ftpx_func)
36
+ app.command("f", no_args_is_help=True, hidden=True)(ftpx_func) # short alias
37
+ app.command("croshell", no_args_is_help=False, help="[cs] Cross-shell command execution")(croshell_func)
38
+ app.command("cs", no_args_is_help=False, hidden=True)(croshell_func) # short alias
23
39
 
24
40
  return app
25
41
 
@@ -314,14 +314,21 @@ class CommandTree(Tree[CommandInfo]):
314
314
  help_text="devops self navigate"
315
315
  ))
316
316
 
317
- # fire command
318
- self.root.add("🔥 fire - Fire jobs execution", data=CommandInfo(
317
+ # fire command - now a typer sub-app
318
+ fire_node = self.root.add("🔥 fire - Fire jobs execution", data=CommandInfo(
319
319
  name="fire",
320
- description="Execute Python scripts with Fire",
320
+ description="Fire and manage jobs",
321
321
  command="fire",
322
- is_group=False,
323
- module_path="machineconfig.scripts.python.fire_jobs",
324
- help_text="fire <path> [function] --ve <env> --interactive --jupyter --streamlit --debug --loop --remote --zellij_tab <name>"
322
+ is_group=True,
323
+ module_path="machineconfig.scripts.python.fire_jobs"
324
+ ))
325
+
326
+ fire_node.add("🔥 fire - Execute Python/Shell scripts", data=CommandInfo(
327
+ name="fire",
328
+ description="Execute Python scripts, shell scripts, or PowerShell scripts with Fire",
329
+ command="fire",
330
+ parent="fire",
331
+ help_text="fire <path> [function] --ve <env> --cmd --interactive --debug --choose_function --loop --jupyter --submit_to_cloud --remote --module --streamlit --environment <env> --holdDirectory --PathExport --git_pull --optimized --zellij_tab <name> --watch"
325
332
  ))
326
333
 
327
334
  # agents command
@@ -373,6 +380,14 @@ class CommandTree(Tree[CommandInfo]):
373
380
  help_text="agents make-todo"
374
381
  ))
375
382
 
383
+ agents_node.add("🔗 make-symlinks - Create repo symlinks", data=CommandInfo(
384
+ name="make-symlinks",
385
+ description="Create symlinks to the current repo in ~/code_copies/",
386
+ command="agents make-symlinks",
387
+ parent="agents",
388
+ help_text="agents make-symlinks"
389
+ ))
390
+
376
391
  # sessions command
377
392
  sessions_node = self.root.add("🖥️ sessions - Session layouts management", data=CommandInfo(
378
393
  name="sessions",
@@ -406,6 +421,14 @@ class CommandTree(Tree[CommandInfo]):
406
421
  help_text="sessions balance-load --layout-path <file> --max-thresh <num> --thresh-type <number|weight> --breaking-method <moreLayouts|combineTabs> --output-path <file>"
407
422
  ))
408
423
 
424
+ sessions_node.add("💀 kill-process - Kill processes", data=CommandInfo(
425
+ name="kill-process",
426
+ description="Choose a process to kill interactively",
427
+ command="sessions kill-process",
428
+ parent="sessions",
429
+ help_text="sessions kill-process"
430
+ ))
431
+
409
432
  # cloud command
410
433
  cloud_node = self.root.add("☁️ cloud - Cloud storage operations", data=CommandInfo(
411
434
  name="cloud",
@@ -457,14 +480,4 @@ class CommandTree(Tree[CommandInfo]):
457
480
  is_group=False,
458
481
  module_path="machineconfig.scripts.python.ftpx",
459
482
  help_text="ftpx <source> <target> --recursive --zipFirst --cloud"
460
- ))
461
-
462
- # kill_process command
463
- self.root.add("💀 kill_process - Kill processes", data=CommandInfo(
464
- name="kill_process",
465
- description="Kill running processes",
466
- command="kill_process",
467
- is_group=False,
468
- module_path="machineconfig.utils.procs",
469
- help_text="kill_process"
470
483
  ))
@@ -130,9 +130,9 @@ def execute_installations(selected_options: list[str]) -> None:
130
130
  console.print(Panel("🐍 [bold green]PYTHON ENVIRONMENT[/bold green]\n[italic]Virtual environment setup[/italic]", border_style="green"))
131
131
  import platform
132
132
  if platform.system() == "Windows":
133
- run_shell_script(r"""$HOME\.local\bin\uv.exe tool install machineconfig>=5.72""")
133
+ run_shell_script(r"""$HOME\.local\bin\uv.exe tool install machineconfig>=5.74""")
134
134
  else:
135
- run_shell_script("""$HOME/.local/bin/uv tool install machineconfig>=5.72""")
135
+ run_shell_script("""$HOME/.local/bin/uv tool install machineconfig>=5.74""")
136
136
  if "install_ssh_server" in selected_options:
137
137
  console.print(Panel("🔒 [bold red]SSH SERVER[/bold red]\n[italic]Remote access setup[/italic]", border_style="red"))
138
138
  import platform
@@ -5,7 +5,7 @@
5
5
  # mkdir ~/data/local
6
6
  # sudo mount -o nolock,noatime,nodiratime,proto=tcp,timeo=600,retrans=2,noac alex-p51s-5:/home/alex/data/local ./data/local
7
7
 
8
- uv run --python 3.14 --with "machineconfig>=5.72" python -m machineconfig.scripts.python.mount_nfs
8
+ uv run --python 3.14 --with "machineconfig>=5.74" python -m machineconfig.scripts.python.mount_nfs
9
9
  # Check if remote server is reachable and share folder exists
10
10
  if ! ping -c 1 "$remote_server" &> /dev/null; then
11
11
  echo "💥 Error: Remote server $remote_server is not reachable."
@@ -7,7 +7,7 @@ def analyze_repo_development(repo_path: str = typer.Argument(..., help="Path to
7
7
  from pathlib import Path
8
8
  count_lines_path = Path(count_lines.__file__)
9
9
  # --project $HOME/code/ machineconfig --group plot
10
- cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=5.72" {count_lines_path} analyze-over-time {repo_path}"""
10
+ cmd = f"""uv run --python 3.14 --with "machineconfig[plot]>=5.74" {count_lines_path} analyze-over-time {repo_path}"""
11
11
  from machineconfig.utils.code import run_shell_script
12
12
  run_shell_script(cmd)
13
13
 
@@ -25,7 +25,7 @@ def balance_load(layout_path: Path = typer.Argument(..., help="Path to the layou
25
25
  def select_layout(layouts_json_file: Path, selected_layouts_names: Optional[list[str]], select_interactively: bool) -> list["LayoutConfig"]:
26
26
  import json
27
27
  from machineconfig.utils.options import choose_from_options
28
- from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig, LayoutsFile
28
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile
29
29
  layout_file: LayoutsFile = json.loads(layouts_json_file.read_text(encoding="utf-8"))
30
30
  if len(layout_file["layouts"]) == 0:
31
31
  raise ValueError(f"No layouts found in {layouts_json_file}")
@@ -7,7 +7,7 @@ $user = ''
7
7
  $sharePath = ''
8
8
  $driveLetter = ''
9
9
 
10
- uv run --python 3.14 --with "machineconfig>=5.72" python -m machineconfig.scripts.python.mount_ssh
10
+ uv run --python 3.14 --with "machineconfig>=5.74" python -m machineconfig.scripts.python.mount_ssh
11
11
 
12
12
  net use T: \\sshfs.kr\$user@$host.local
13
13
  # this worked: net use T: \\sshfs\alex@alex-p51s-5.local
@@ -1,25 +1,25 @@
1
1
  #!/bin/bash
2
2
  . <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/uv.sh")
3
3
  devops() {
4
- "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" devops "$@"
4
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.74" devops "$@"
5
5
  }
6
6
  agents() {
7
- "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" agents "$@"
7
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.74" agents "$@"
8
8
  }
9
9
  cloud() {
10
- "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" cloud "$@"
10
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.74" cloud "$@"
11
11
  }
12
12
  croshell() {
13
- "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" croshell "$@"
13
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.74" croshell "$@"
14
14
  }
15
15
  fire() {
16
- "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" fire "$@"
16
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.74" fire "$@"
17
17
  }
18
18
  ftpx() {
19
- "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" ftpx "$@"
19
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.74" ftpx "$@"
20
20
  }
21
21
  sessions() {
22
- "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.72" sessions "$@"
22
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=5.74" sessions "$@"
23
23
  }
24
24
 
25
25
  echo "devops command is now defined in this shell session."
@@ -2,30 +2,30 @@
2
2
 
3
3
  iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
4
4
  function devops {
5
- & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" devops $args
5
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.74" devops $args
6
6
  }
7
7
 
8
8
  function cloud {
9
- & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" cloud $args
9
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.74" cloud $args
10
10
  }
11
11
 
12
12
  function croshell {
13
- & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" croshell $args
13
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.74" croshell $args
14
14
  }
15
15
 
16
16
  function agents {
17
- & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" agents $args
17
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.74" agents $args
18
18
  }
19
19
 
20
20
  function fire {
21
- & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" fire $args
21
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.74" fire $args
22
22
  }
23
23
 
24
24
  function ftpx {
25
- & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" ftpx $args
25
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.74" ftpx $args
26
26
  }
27
27
 
28
28
  function sessions {
29
- & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.72" sessions $args
29
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=5.74" sessions $args
30
30
  }
31
31
 
@@ -41,15 +41,12 @@ class Installer:
41
41
  self.install(version=version)
42
42
  result_new = subprocess.run(f"{exe_name} --version", shell=True, capture_output=True, text=True)
43
43
  new_version_cli = result_new.stdout.strip()
44
- print(f"📊 New version: {new_version_cli}")
45
-
46
44
  if old_version_cli == new_version_cli:
47
- print(f"ℹ️ Same version detected: {old_version_cli}")
45
+ # print(f"ℹ️ Same version detected: {old_version_cli}")
48
46
  return f"""📦️ 😑 {exe_name}, same version: {old_version_cli}"""
49
47
  else:
50
- print(f"🚀 Update successful: {old_version_cli} ➡️ {new_version_cli}")
48
+ # print(f"🚀 Update successful: {old_version_cli} ➡️ {new_version_cli}")
51
49
  return f"""📦️ 🤩 {exe_name} updated from {old_version_cli} ➡️ TO ➡️ {new_version_cli}"""
52
-
53
50
  except Exception as ex:
54
51
  exe_name = self._get_exe_name()
55
52
  app_name = self.installer_data["appName"]
@@ -64,8 +61,6 @@ class Installer:
64
61
  installer_arch_os = self.installer_data["fileNamePattern"][arch][os_name]
65
62
  if installer_arch_os is None:
66
63
  raise ValueError(f"No installation pattern for {exe_name} on {os_name} {arch}")
67
-
68
- print(f"🔧 INSTALLATION PROCESS: {exe_name} 🔧")
69
64
  version_to_be_installed: str = "unknown" # Initialize to ensure it's always bound
70
65
  if repo_url == "CMD":
71
66
  if any(pm in installer_arch_os for pm in ["npm ", "pip ", "winget ", "brew ", "curl "]):
@@ -73,7 +68,6 @@ class Installer:
73
68
  print(f"📦 Using package manager: {package_manager}")
74
69
  desc = package_manager + " installation"
75
70
  version_to_be_installed = package_manager + "Latest"
76
- print(f"🚀 Running: {installer_arch_os}")
77
71
  result = subprocess.run(installer_arch_os, shell=True, capture_output=True, text=False)
78
72
  # from machineconfig.utils.code import run_shell_script
79
73
  # result = run_shell_script(installer_arch_os)
@@ -85,7 +79,6 @@ class Installer:
85
79
  if result.stderr:
86
80
  print(f"STDERR: {result.stderr}")
87
81
  print(f"Return code: {result.returncode}")
88
- print("✅ Package manager installation completed")
89
82
  elif installer_arch_os.endswith((".sh", ".py", ".ps1")):
90
83
  # search for the script, see which path ends with the script name
91
84
  import machineconfig.jobs.installer as module
@@ -101,33 +94,24 @@ class Installer:
101
94
  if installer_arch_os.endswith(".sh"):
102
95
  if platform.system() not in ["Linux", "Darwin"]:
103
96
  raise NotImplementedError(f"Shell script installation not supported on {platform.system()}")
104
- print(f"🚀 Running shell script: {installer_path}")
105
97
  subprocess.run(f"bash {installer_path}", shell=True, check=True)
106
98
  version_to_be_installed = "scripted_installation"
107
- print("✅ Shell script installation completed")
108
99
  elif installer_arch_os.endswith(".ps1"):
109
100
  if platform.system() != "Windows":
110
101
  raise NotImplementedError(f"PowerShell script installation not supported on {platform.system()}")
111
- print(f"🚀 Running PowerShell script: {installer_path}")
112
102
  subprocess.run(f"powershell -ExecutionPolicy Bypass -File {installer_path}", shell=True, check=True)
113
103
  version_to_be_installed = "scripted_installation"
114
- print("✅ PowerShell script installation completed")
115
104
  elif installer_arch_os.endswith(".py"):
116
105
  import runpy
117
106
  runpy.run_path(str(installer_path), run_name=None)["main"](self.installer_data, version=version)
118
107
  version_to_be_installed = str(version)
119
- print("✅ Custom installation completed")
120
108
  elif installer_arch_os.startswith("https://"): # its a url to be downloaded
121
- print(f"📥 Downloading object from URL: {installer_arch_os}")
122
109
  downloaded_object = PathExtended(installer_arch_os).download(folder=INSTALL_TMP_DIR)
123
110
  # object is either a zip containing a binary or a straight out binary.
124
111
  if downloaded_object.suffix in [".zip", ".tar.gz"]:
125
- print(f"📦 Decompressing downloaded archive: {downloaded_object}")
126
112
  downloaded_object = downloaded_object.decompress()
127
- print(f"✅ Decompression completed to: {downloaded_object}")
128
113
  if downloaded_object.suffix in [".exe", ""]: # likely an executable
129
114
  if platform.system() == "Windows":
130
- print("🪟 Installing on Windows...")
131
115
  exe = find_move_delete_windows(downloaded_file_path=downloaded_object, exe_name=exe_name, delete=True, rename_to=exe_name.replace(".exe", "") + ".exe")
132
116
  elif platform.system() in ["Linux", "Darwin"]:
133
117
  system_name = "Linux" if platform.system() == "Linux" else "macOS"
@@ -137,7 +121,6 @@ class Installer:
137
121
  error_msg = f"❌ ERROR: System {platform.system()} not supported"
138
122
  print(error_msg)
139
123
  raise NotImplementedError(error_msg)
140
-
141
124
  _ = exe
142
125
  if exe.name.replace(".exe", "") != exe_name.replace(".exe", ""):
143
126
  from rich import print as pprint
@@ -148,12 +131,10 @@ class Installer:
148
131
  print(f"🔄 Renaming to correct name: {new_exe_name}")
149
132
  exe.with_name(name=new_exe_name, inplace=True, overwrite=True)
150
133
  version_to_be_installed = "downloaded_binary"
151
- print("✅ Downloaded binary installation completed")
152
134
  else:
153
135
  raise NotImplementedError(f"CMD installation method not implemented for: {installer_arch_os}")
154
136
  else:
155
137
  assert repo_url.startswith("https://github.com/"), f"repoURL must be a GitHub URL, got {repo_url}"
156
- print("📥 Downloading from repository...")
157
138
  downloaded, version_to_be_installed = self.download(version=version)
158
139
  if str(downloaded).endswith(".deb"):
159
140
  print(f"📦 Installing .deb package: {downloaded}")
@@ -170,10 +151,8 @@ class Installer:
170
151
  print(f"Return code: {result.returncode}")
171
152
  print("🗑️ Cleaning up .deb package...")
172
153
  downloaded.delete(sure=True)
173
- print("✅ DEB package installation completed")
174
154
  else:
175
155
  if platform.system() == "Windows":
176
- print("🪟 Installing on Windows...")
177
156
  exe = find_move_delete_windows(downloaded_file_path=downloaded, exe_name=exe_name, delete=True, rename_to=exe_name.replace(".exe", "") + ".exe")
178
157
  elif platform.system() in ["Linux", "Darwin"]:
179
158
  system_name = "Linux" if platform.system() == "Linux" else "macOS"
@@ -183,32 +162,23 @@ class Installer:
183
162
  error_msg = f"❌ ERROR: System {platform.system()} not supported"
184
163
  print(error_msg)
185
164
  raise NotImplementedError(error_msg)
186
-
187
165
  _ = exe
188
166
  if exe.name.replace(".exe", "") != exe_name.replace(".exe", ""):
189
167
  from rich import print as pprint
190
168
  from rich.panel import Panel
191
-
192
169
  print("⚠️ Warning: Executable name mismatch")
193
170
  pprint(Panel(f"Expected exe name: [red]{exe_name}[/red] \nAttained name: [red]{exe.name.replace('.exe', '')}[/red]", title="exe name mismatch", subtitle=repo_url))
194
171
  new_exe_name = exe_name + ".exe" if platform.system() == "Windows" else exe_name
195
172
  print(f"🔄 Renaming to correct name: {new_exe_name}")
196
173
  exe.with_name(name=new_exe_name, inplace=True, overwrite=True)
197
-
198
- print(f"💾 Saving version information to: {INSTALL_VERSION_ROOT.joinpath(exe_name)}")
199
174
  INSTALL_VERSION_ROOT.joinpath(exe_name).parent.mkdir(parents=True, exist_ok=True)
200
175
  INSTALL_VERSION_ROOT.joinpath(exe_name).write_text(version_to_be_installed or "unknown", encoding="utf-8")
201
- print("✅ Installation completed successfully!")
202
-
203
176
  def download(self, version: Optional[str]) -> tuple[PathExtended, str]:
204
177
  exe_name = self._get_exe_name()
205
178
  repo_url = self.installer_data["repoURL"]
206
- app_name = self.installer_data["appName"]
207
- print(f"📥 DOWNLOADING: {exe_name} 📥")
208
-
179
+ # app_name = self.installer_data["appName"]
209
180
  download_link: Optional[str] = None
210
181
  version_to_be_installed: Optional[str] = None
211
-
212
182
  if "github" not in repo_url or ".zip" in repo_url or ".tar.gz" in repo_url:
213
183
  # Direct download URL
214
184
  download_link = repo_url
@@ -221,21 +191,15 @@ class Installer:
221
191
  arch = get_normalized_arch()
222
192
  os_name = get_os_name()
223
193
  print(f"🧭 Detected system={os_name} arch={arch}")
224
-
225
194
  # Use existing get_github_release method to get download link and version
226
195
  download_link, version_to_be_installed = self.get_github_release(repo_url, version)
227
-
228
196
  if download_link is None:
229
197
  raise ValueError(f"Could not retrieve download link for {exe_name} version {version or 'latest'}")
230
-
231
198
  print(f"📦 Version to be installed: {version_to_be_installed}")
232
199
  print(f"🔗 Download URL: {download_link}")
233
-
234
200
  assert download_link is not None, "download_link must be set"
235
201
  assert version_to_be_installed is not None, "version_to_be_installed must be set"
236
- print(f"📥 Downloading {app_name} from: {download_link}")
237
202
  downloaded = PathExtended(download_link).download(folder=INSTALL_TMP_DIR).decompress()
238
- print(f"✅ Download and extraction completed to: {downloaded}")
239
203
  return downloaded, version_to_be_installed
240
204
 
241
205
  # --------------------------- Arch / template helpers ---------------------------
@@ -167,7 +167,7 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
167
167
  print(f"🗑️ ❌ DELETED {repr(self)}.")
168
168
  return self
169
169
 
170
- def move(self, folder: OPLike = None, name: Optional[str] = None, path: OPLike = None, rel2it: bool = False, overwrite: bool = False, verbose: bool = True, parents: bool = True, content: bool = False) -> "PathExtended":
170
+ def move(self, folder: OPLike = None, name: Optional[str] = None, path: OPLike = None, rel2it: bool = False, overwrite: bool = False, verbose: bool = True, parents: bool = True, content: bool = False) -> "PathExtended": # type: ignore
171
171
  path = self._resolve_path(folder=folder, name=name, path=path, default_name=self.absolute().name, rel2it=rel2it)
172
172
  if parents:
173
173
  path.parent.mkdir(parents=True, exist_ok=True)
@@ -193,9 +193,7 @@ class PathExtended(type(Path()), Path): # type: ignore # pylint: disable=E0241
193
193
  print(f"🚚 MOVED {repr(self)} ==> {repr(path)}`")
194
194
  return path
195
195
 
196
- def copy(
197
- self, folder: OPLike = None, name: Optional[str] = None, path: OPLike = None, content: bool = False, verbose: bool = True, append: Optional[str] = None, overwrite: bool = False, orig: bool = False
198
- ) -> "PathExtended": # tested %100 # TODO: replace `content` flag with ability to interpret "*" in resolve method.
196
+ def copy(self, folder: OPLike = None, name: Optional[str] = None, path: OPLike = None, content: bool = False, verbose: bool = True, append: Optional[str] = None, overwrite: bool = False, orig: bool = False) -> "PathExtended": # type: ignore
199
197
  dest = self._resolve_path(folder=folder, name=name, path=path, default_name=self.name, rel2it=False)
200
198
  dest = dest.expanduser().resolve()
201
199
  dest.parent.mkdir(parents=True, exist_ok=True)
@@ -6,7 +6,7 @@ from machineconfig.utils.terminal import Response, MACHINE
6
6
  from machineconfig.utils.accessories import pprint
7
7
 
8
8
  UV_RUN_CMD = "$HOME/.local/bin/uv run"
9
- MACHINECONFIG_VERSION = """ "machineconfig>=5.72" """
9
+ MACHINECONFIG_VERSION = """ "machineconfig>=5.74" """
10
10
  DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
11
11
 
12
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 5.72
3
+ Version: 5.75
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -46,7 +46,7 @@ machineconfig/cluster/templates/cli_trogon.py,sha256=PFWGy8SFYIhT9r3ZV4oIEYfImsQ
46
46
  machineconfig/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
47
  machineconfig/jobs/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
48
  machineconfig/jobs/installer/check_installations.py,sha256=uFuxhgI8rIMtClcGmuc9gpG6iJ7X0__peGUQfGkreT8,10778
49
- machineconfig/jobs/installer/installer_data.json,sha256=MuoXT1Ovl4-_pPSS-XxiUJ67ksWZvunUjXscyq4GnvI,74795
49
+ machineconfig/jobs/installer/installer_data.json,sha256=Cf-55djN5SpOpcFEaMDOJRkLD-lkm18smjLIPAU-s3Q,75020
50
50
  machineconfig/jobs/installer/package_groups.py,sha256=i4z83F_rk7BVsrwFhz5Vn4SLF0IHxyQBFSxpAaZBl8M,5270
51
51
  machineconfig/jobs/installer/custom/gh.py,sha256=gn7TUSrsLx7uqFqj1Z-iYglS0EYBSgtJ9jWHxaJIfXM,4119
52
52
  machineconfig/jobs/installer/custom/hx.py,sha256=YQClQXqWtGvon8BLFGf1Fp20JPkHgZeEZ6ebmCJQQfI,5838
@@ -120,19 +120,20 @@ machineconfig/scripts/linux/other/share_smb,sha256=HZX8BKgMlS9JzkGIYnxTsPvoxEBBu
120
120
  machineconfig/scripts/linux/other/start_docker,sha256=_yDN_PPqgzSUnPT7dmniMTpL4IfeeaGy1a2OL3IJlDU,525
121
121
  machineconfig/scripts/linux/other/switch_ip,sha256=NQfeKMBSbFY3eP6M-BadD-TQo5qMP96DTp77KHk2tU8,613
122
122
  machineconfig/scripts/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
- machineconfig/scripts/python/agents.py,sha256=PNjpI8ve_CP8Y091lWy5YbpI89ApOW1g47bnqXAMDFg,10339
124
- machineconfig/scripts/python/cloud.py,sha256=_05zIiBzG4fKhFytg9mjvMBv4qMUtQJL0RtpYUJFZ3Y,920
125
- machineconfig/scripts/python/croshell.py,sha256=DPrnIB_Nqg_rRXdZPXZTrfbHX5WmGrsMZzsxEoX1xYo,7083
126
- machineconfig/scripts/python/devops.py,sha256=f9Tc2EQNO1sImE1J6Vp4HlvPozMlgbtO1t84l8knr40,2050
123
+ machineconfig/scripts/python/agents.py,sha256=DIfM7mqi8BhB7PWk-UiBNOYjUzQHdeA1hoS8v3FHKPQ,10446
124
+ machineconfig/scripts/python/cloud.py,sha256=ubLmf06FSdi1NawpQDgUDAtYb9cZSQqHbSUHzAwRIas,1199
125
+ machineconfig/scripts/python/croshell.py,sha256=zVlHH60HVlqZweYyt2VW_Zt2_a9tR8fK5W-9pZ6egMs,7083
126
+ machineconfig/scripts/python/devops.py,sha256=fxa-C4J4Ds8etPx8sfJOj32llcGJf7W4rfbE2OEgjzE,2049
127
127
  machineconfig/scripts/python/devops_navigator.py,sha256=4O9_-ACeP748NcMjWQXZF7mBQpMPxqCGhLvPG3DMi4Q,236
128
- machineconfig/scripts/python/entry.py,sha256=0D6xAXpB5aNZ_fyKKr3oXVuiRgZqHUUkbTCHJnq0SLM,1481
128
+ machineconfig/scripts/python/entry.py,sha256=Az7dK1eXHGW5l46Yg10Cd88VChCdhvLAzO3e1A3r56A,2176
129
129
  machineconfig/scripts/python/fire_jobs.py,sha256=O5DrckUGLxGblOcLf_iXU31pmCSpTg-c0hQZxQKD1os,13591
130
130
  machineconfig/scripts/python/ftpx.py,sha256=UBDP6IIfWkaML1uZT1FrfGUUy_Of5LI82IdqEzo05_U,9760
131
- machineconfig/scripts/python/interactive.py,sha256=TBUfE-oCyPYq9XVxVEoqqhrFoS2lCfd2nRG5maP4QeI,11790
132
- machineconfig/scripts/python/sessions.py,sha256=91eqV7SMemOZDuIQMqz36-AFbrpvPLbVdR6BZppY1xA,9559
131
+ machineconfig/scripts/python/interactive.py,sha256=6xharJc-IBvZwNQrQMWGuHQENkb8tp6g0Do09ubpLAM,11790
132
+ machineconfig/scripts/python/sessions.py,sha256=Xaol7AzLItb3GIHo_sEVFUpFmTKDeTgqlK3-syqtNxw,9545
133
133
  machineconfig/scripts/python/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
134
  machineconfig/scripts/python/ai/generate_files.py,sha256=VfjKdwgF8O6E4oiRtfWNliibLmmwGe7f9ld6wpOsXTw,14498
135
- machineconfig/scripts/python/ai/initai.py,sha256=53MuUgk92avRPM-U3dy6o_pnEj2thlurC8U6dz41_W0,2089
135
+ machineconfig/scripts/python/ai/initai.py,sha256=9SZtWOcRuwk8ZU3wHOfPzjInERD79ZTYFY8tVACgza4,2260
136
+ machineconfig/scripts/python/ai/vscode_tasks.py,sha256=61wMMIhtNTUO8Zvl8IziEdyadzgi5H0h8ACwq3cw6Ho,1255
136
137
  machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1,sha256=m_z4vzLrvi6bgTZumN8twcbIWb9i8ZHfVJPE8jPdxyc,5074
137
138
  machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh,sha256=Mt9D0LSEwbvVaq_wxTAch4NLyFUuDGHjn6rtEt_9alU,4615
138
139
  machineconfig/scripts/python/ai/solutions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -160,7 +161,7 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-
160
161
  machineconfig/scripts/python/cloud_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
161
162
  machineconfig/scripts/python/cloud_helpers/cloud_copy.py,sha256=7w0bNMPmSlsoYPCaicja7c2uEwxpj3pyA_ZaPqvmsgc,8517
162
163
  machineconfig/scripts/python/cloud_helpers/cloud_helpers.py,sha256=GA-bxXouUmknk9fyQAsPT-Xl3RG9-yBed71a2tu9Pig,4914
163
- machineconfig/scripts/python/cloud_helpers/cloud_mount.py,sha256=GwcXbd5ohoHGESfX5edtCEl2-umDDxH_AZapmFSzc9E,6740
164
+ machineconfig/scripts/python/cloud_helpers/cloud_mount.py,sha256=DEZHwOgFcAVoI-NrBflFLbAjijOYZYq_D5M8xJQdtSQ,6487
164
165
  machineconfig/scripts/python/cloud_helpers/cloud_sync.py,sha256=-xRPOF2S4_Q5QoNOmp_lJ_wWGNyeztEjn0o57V31ZjI,3447
165
166
  machineconfig/scripts/python/cloud_helpers/helpers2.py,sha256=aPGz_3WqZJaqmn_bGMtFFmDlLytnOS5KWacZMgXTDJw,7310
166
167
  machineconfig/scripts/python/cloud_helpers/helpers5.py,sha256=dPBvA9Tcyx9TMgM6On49A1CueGMhBdRzikDnlJGf3J0,1123
@@ -171,12 +172,12 @@ machineconfig/scripts/python/croshell_helpers/start_slidev.py,sha256=HfJReOusTPh
171
172
  machineconfig/scripts/python/croshell_helpers/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
172
173
  machineconfig/scripts/python/croshell_helpers/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
173
174
  machineconfig/scripts/python/devops_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
- machineconfig/scripts/python/devops_helpers/cli_config.py,sha256=Dbg1qQHq1lNoYC9wEKq19k1zaJSUeCxa8ceTEPwkSKY,5333
175
+ machineconfig/scripts/python/devops_helpers/cli_config.py,sha256=wnQyhN-LbuIpVKvZhOxv8_UR7cwFTlKpZMqL3Ydi3Zo,5332
175
176
  machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py,sha256=rjTys4FNf9_feP9flWM7Zvq17dxWmetSiGaHPxp25nk,2737
176
177
  machineconfig/scripts/python/devops_helpers/cli_data.py,sha256=kvJ7g2CccjjXIhCwdu_Vlif8JHC0qUoLjuGcTSqT-IU,514
177
178
  machineconfig/scripts/python/devops_helpers/cli_nw.py,sha256=U-W6ox-7ctGqQcjFWsDwZKmqQdl1etz9CMOes-B0Wgc,2959
178
- machineconfig/scripts/python/devops_helpers/cli_repos.py,sha256=IgyntAJ-qIEnaet3bnhhRg6SI519FgGWDBoQ6mLE7ZQ,12016
179
- machineconfig/scripts/python/devops_helpers/cli_self.py,sha256=2NBu4nDISsd-l34D8kZBUt04n09kdl_w2J57A1Fd-rA,3790
179
+ machineconfig/scripts/python/devops_helpers/cli_repos.py,sha256=HJH5ZBob_Uzhc3fDgG9riOeW6YEJt88xTjQYcEUPmUY,12015
180
+ machineconfig/scripts/python/devops_helpers/cli_self.py,sha256=HsI75dYF66lJ995CYqsBSt5i2hbRt3b3XKjsJJt7kiA,3789
180
181
  machineconfig/scripts/python/devops_helpers/cli_share_server.py,sha256=285OzxttCx7YsrpOkaapMKP1eVGHmG5TkkaSQnY7i3c,3976
181
182
  machineconfig/scripts/python/devops_helpers/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
182
183
  machineconfig/scripts/python/devops_helpers/devops_add_identity.py,sha256=wvjNgqsLmqD2SxbNCW_usqfp0LI-TDvcJJKGOWt2oFw,3775
@@ -193,7 +194,7 @@ machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=YAZb1KOVpkfT
193
194
  machineconfig/scripts/python/helper_navigator/__init__.py,sha256=6YBy1l9ISjHE0LctVwSRMV_OFq29FOInwXFN0Ff7owM,758
194
195
  machineconfig/scripts/python/helper_navigator/command_builder.py,sha256=tMIonhYPWpdPGaiGPRg8JDCvyW0h2uxL15uL_JyWsnk,4617
195
196
  machineconfig/scripts/python/helper_navigator/command_detail.py,sha256=i4MdiCOVaXdRmLqr4K-F1Mk1u93bl5heIN97cRPCnzg,1692
196
- machineconfig/scripts/python/helper_navigator/command_tree.py,sha256=EcyQmQJNW5HA1Zq_wwl6-uWwyrP1vd0hOWyDQny79Tc,19501
197
+ machineconfig/scripts/python/helper_navigator/command_tree.py,sha256=bppJyuVFSD29_xnGLa2jrea3zeLYAtYuSlzGK7Y1ShE,20215
197
198
  machineconfig/scripts/python/helper_navigator/data_models.py,sha256=62CIZ01rfCD2mKX_ihEVuhNzZ8FDnRSEIIQuyKOtmOg,533
198
199
  machineconfig/scripts/python/helper_navigator/main_app.py,sha256=HhBttfk0bdQfWD9lC8yyoYDKBMzxkpw7NKE0IS7JUFE,8844
199
200
  machineconfig/scripts/python/helper_navigator/search_bar.py,sha256=kDi8Jhxap8wdm7YpDBtfhwcPnSqDPFrV2LqbcSBWMT4,414
@@ -223,7 +224,7 @@ machineconfig/scripts/python/helpers_repos/grource.py,sha256=IywQ1NDPcLXM5Tr9xhm
223
224
  machineconfig/scripts/python/helpers_repos/secure_repo.py,sha256=G_quiKOLNkWD5UG8ekexgh9xbpW4Od-J1pLJbLLWnpg,993
224
225
  machineconfig/scripts/python/nw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
225
226
  machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
226
- machineconfig/scripts/python/nw/mount_nfs,sha256=g5vtvHopepusp-4u2x9dSUe5Xo9vPqIqQJtIGNY9jfY,1855
227
+ machineconfig/scripts/python/nw/mount_nfs,sha256=DdJqswbKLu8zqlVR3X6Js30D4myJFPVzHHNkWTJqDUQ,1855
227
228
  machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
228
229
  machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
229
230
  machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
@@ -235,7 +236,7 @@ machineconfig/scripts/python/nw/wsl_windows_transfer.py,sha256=1ab9l-8MtAxofW5nG
235
236
  machineconfig/scripts/python/repos_helpers/action.py,sha256=t6x9K43Uy7r5aRpdODfsN-5UoMrYXEG2cVw-Y8l9prw,14847
236
237
  machineconfig/scripts/python/repos_helpers/clone.py,sha256=9vGb9NCXT0lkerPzOJjmFfhU8LSzE-_1LDvjkhgnal0,5461
237
238
  machineconfig/scripts/python/repos_helpers/count_lines.py,sha256=ZLEajCLmlFFY969BehabqGOB9_kkpATO3Lt09L7KULk,15968
238
- machineconfig/scripts/python/repos_helpers/count_lines_frontend.py,sha256=lN6_P5S0aQTVxddp9EVxDTYbbilo5NJ4cO1nvr8GSP0,568
239
+ machineconfig/scripts/python/repos_helpers/count_lines_frontend.py,sha256=kj-uuq2VHSDTVynWIZ2xfSSIqAlt4i6VkiZ3hPT_tV4,568
239
240
  machineconfig/scripts/python/repos_helpers/entrypoint.py,sha256=C-_D03abE0TkVCJ4jZoliUMAhRRkZ77mcwMoPOuieJQ,2827
240
241
  machineconfig/scripts/python/repos_helpers/record.py,sha256=3T5VmMbvywScZhTW2j4cGLK0T2LSWxKfnXkRTxkuLP4,10994
241
242
  machineconfig/scripts/python/repos_helpers/sync.py,sha256=CLLWy2n2gY9beXPF-mblOQ6R7cKoenkJjMiX7tHQsBk,3091
@@ -248,7 +249,7 @@ machineconfig/scripts/windows/fzfrga.bat,sha256=rU_KBMO6ii2EZ0akMnmDk9vpuhKSUZqk
248
249
  machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
249
250
  machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
250
251
  machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
251
- machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=6lJRZ3GENlAK51S8piQj0kGz1_etSUKskEIT15berao,322
252
+ machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=mM2O7BmGamxm32Z-kAO18gGWup3I_7Ygj5BMlklejIA,322
252
253
  machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
253
254
  machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
254
255
  machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
@@ -363,7 +364,7 @@ machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKG
363
364
  machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
364
365
  machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
365
366
  machineconfig/setup_linux/web_shortcuts/android.sh,sha256=gzep6bBhK7FCBvGcXK0fdJCtkSfBOftt0aFyDZq_eMs,68
366
- machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=yXjczeP-w9vUH2Smb-2hH_QIo8pnd0yrFb1Llbd5YuE,880
367
+ machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=IJKYO2cxpg0UD9lvCHjIAg3u8d9S5zalU3DecSrxhSg,880
367
368
  machineconfig/setup_windows/__init__.py,sha256=NnSVZkIBoxoMgkj-_KAqGonH3YziBIWXOKDEcmNAGTY,386
368
369
  machineconfig/setup_windows/apps.ps1,sha256=G5GqZ9G0aiQr_A-HaahtRdzpaTTdW6n3DRKMZWDTSPc,11214
369
370
  machineconfig/setup_windows/uv.ps1,sha256=mzkFJUQ57dukVQtY7WqAQIVUDMcixnkir8aNM_TYrl4,350
@@ -373,7 +374,7 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
373
374
  machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
374
375
  machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
375
376
  machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
376
- machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=7zZ-_N4t-_XAF5tkZfEd5DzpKYAe3VXyKf-5miPtJgk,919
377
+ machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=9w3R1qzJ1h1x5nWj06sLRGe10e92d9Q6r1uroMJNxq8,919
377
378
  machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
378
379
  machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
379
380
  machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -385,13 +386,13 @@ machineconfig/utils/links.py,sha256=KM6vIn3hag9FYEzLSHP5MAM9tU_RStw2mCq2_OvmmZA,
385
386
  machineconfig/utils/meta.py,sha256=fDn7cpq6iqAPzX2eKLSK9DZb0870rluR7eLDx5NgNaw,5994
386
387
  machineconfig/utils/notifications.py,sha256=tuXIudcip0tEioG-bm8BbLr3FMDve4f6BktlznBhKxM,9013
387
388
  machineconfig/utils/options.py,sha256=vUO4Kej-vDOv64wHr2HNDyu6PATURpjd7xp6N8OOoJg,7083
388
- machineconfig/utils/path_extended.py,sha256=Xjdn2AVnB8p1jfNMNe2kJutVa5zGnFFJVGZbw-Bp_hg,53200
389
+ machineconfig/utils/path_extended.py,sha256=4RhL0twcIG2kJxmC4r_YzaiTxrYkSRbdh9SO5ObMABw,53122
389
390
  machineconfig/utils/path_helper.py,sha256=0e3Xh3BAEv27oqcezNeVLHJllGmLEgLH4T1l90m-650,8014
390
391
  machineconfig/utils/procs.py,sha256=w75oGKfR7FpT1pGTGd2XscnEOO0IHBWxohLbi69hLqg,11418
391
392
  machineconfig/utils/scheduler.py,sha256=jZ_1yghqA3-aINPRmE_76gboqJc0UElroR7urNOfXKs,14940
392
393
  machineconfig/utils/scheduling.py,sha256=RF1iXJpqf4Dg18jdZWtBixz97KAHC6VKYqTFSpdLWuc,11188
393
394
  machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
394
- machineconfig/utils/ssh.py,sha256=HuDfIo6yo6NC5FmsxelSNAVu8LJm9Zl7JQialTpmV94,37564
395
+ machineconfig/utils/ssh.py,sha256=l9ibxTbosLfzBHW0v4dbFN4xCA0jY9QPkB42CTDRCKI,37564
395
396
  machineconfig/utils/terminal.py,sha256=IlmOByfQG-vjhaFFxxzU5rWzP5_qUzmalRfuey3PAmc,11801
396
397
  machineconfig/utils/upgrade_packages.py,sha256=H96zVJEWXJW07nh5vhjuSCrPtXGqoUb7xeJsFYYdmCI,3330
397
398
  machineconfig/utils/ve.py,sha256=L-6PBXnQGXThiwWgheJMQoisAZOZA6SVCbGw2J-GFnI,2414
@@ -409,14 +410,14 @@ machineconfig/utils/installer_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
409
410
  machineconfig/utils/installer_utils/github_release_bulk.py,sha256=WJf_qZlF02SmIc6C7o1h4Gy4gAaJAfeAS8O9s2Itj-k,6535
410
411
  machineconfig/utils/installer_utils/installer.py,sha256=bWFSIW05hDo6p1BsNqK-yCQL5ZNU_eZxCQW1QLLc-SA,9759
411
412
  machineconfig/utils/installer_utils/installer_abc.py,sha256=ZoMtINHD9cHEu4R5SYUWgHLTAqo4F2a33pBrEOGX4zs,11693
412
- machineconfig/utils/installer_utils/installer_class.py,sha256=ito54iZYFx676PkQBC2vlBRzYSgpBnVvi6Gsc7OX-wY,18337
413
+ machineconfig/utils/installer_utils/installer_class.py,sha256=zkbomiesAgc75BjVoe8KbjCMxaykotJ0dv9vKlm2Kv0,16756
413
414
  machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=Xbi59rU35AzR7HZZ8ZQ8aUu_FjSgijNqc8Sme0rCk2Y,2050
414
415
  machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoSpdmTIdgS9LS-RvE-QZ-D260tD3o,1214
415
416
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
416
417
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
417
418
  machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
418
- machineconfig-5.72.dist-info/METADATA,sha256=gIpJdHmf_qd0R896FrLjO7KHLTKjvhAOdb1s0mQmmBk,3103
419
- machineconfig-5.72.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
420
- machineconfig-5.72.dist-info/entry_points.txt,sha256=M0jwN_brZdXWhmNVeXLvdKxfkv8WhhXFZYcuKBA9qnk,418
421
- machineconfig-5.72.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
422
- machineconfig-5.72.dist-info/RECORD,,
419
+ machineconfig-5.75.dist-info/METADATA,sha256=4jhzxZamV3IylY1fK4GeZJCiKlNkFkSXA7rhxZR0Ll4,3103
420
+ machineconfig-5.75.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
421
+ machineconfig-5.75.dist-info/entry_points.txt,sha256=M0jwN_brZdXWhmNVeXLvdKxfkv8WhhXFZYcuKBA9qnk,418
422
+ machineconfig-5.75.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
423
+ machineconfig-5.75.dist-info/RECORD,,