machineconfig 5.68__py3-none-any.whl → 5.69__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.
- machineconfig/scripts/python/agents.py +25 -19
- machineconfig/scripts/python/devops.py +13 -7
- machineconfig/scripts/python/devops_helpers/cli_config.py +25 -13
- machineconfig/scripts/python/devops_helpers/cli_data.py +1 -1
- machineconfig/scripts/python/devops_helpers/cli_nw.py +14 -7
- machineconfig/scripts/python/devops_helpers/cli_repos.py +36 -18
- machineconfig/scripts/python/devops_helpers/cli_self.py +16 -8
- machineconfig/scripts/python/ftpx.py +1 -1
- machineconfig/scripts/python/interactive.py +1 -1
- machineconfig/scripts/python/nw/mount_nfs.py +3 -3
- machineconfig/scripts/python/nw/mount_ssh.py +3 -3
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +2 -2
- machineconfig/scripts/python/sessions.py +9 -4
- machineconfig/utils/installer_utils/installer.py +9 -8
- {machineconfig-5.68.dist-info → machineconfig-5.69.dist-info}/METADATA +1 -1
- {machineconfig-5.68.dist-info → machineconfig-5.69.dist-info}/RECORD +19 -19
- {machineconfig-5.68.dist-info → machineconfig-5.69.dist-info}/WHEEL +0 -0
- {machineconfig-5.68.dist-info → machineconfig-5.69.dist-info}/entry_points.txt +0 -0
- {machineconfig-5.68.dist-info → machineconfig-5.69.dist-info}/top_level.txt +0 -0
|
@@ -9,19 +9,19 @@ from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import A
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def create(
|
|
12
|
-
agent: AGENTS = typer.Option(
|
|
13
|
-
machine: MATCHINE = typer.Option(
|
|
14
|
-
model: MODEL = typer.Option(
|
|
15
|
-
provider: PROVIDER = typer.Option(
|
|
16
|
-
context_path: Optional[Path] = typer.Option(None, help="Path to the context file/folder, defaults to .ai/todo/"),
|
|
17
|
-
separator: str = typer.Option("\n", help="Separator for context"),
|
|
18
|
-
agent_load: int = typer.Option(13, help="Number of tasks per prompt"),
|
|
19
|
-
prompt: Optional[str] = typer.Option(None, help="Prompt prefix as string"),
|
|
20
|
-
prompt_path: Optional[Path] = typer.Option(None, help="Path to prompt file"),
|
|
21
|
-
job_name: str = typer.Option("AI_Agents", help="Job name"),
|
|
22
|
-
separate: bool = typer.Option(True, help="Keep prompt material in separate file to the context."),
|
|
23
|
-
output_path: Optional[Path] = typer.Option(None, help="Path to write the layout.json file"),
|
|
24
|
-
agents_dir: Optional[Path] = typer.Option(None, help="Directory to store agent files. If not provided, will be constructed automatically."),
|
|
12
|
+
agent: AGENTS = typer.Option(..., "--agents", "-a", help=f"Agent type. One of {', '.join(get_args(AGENTS)[:3])}"),
|
|
13
|
+
machine: MATCHINE = typer.Option(..., "--machine", "-m", help=f"Machine to run agents on. One of {', '.join(get_args(MATCHINE))}"),
|
|
14
|
+
model: MODEL = typer.Option(..., "--model", "-M", help=f"Model to use (for crush agent). One of {', '.join(get_args(MODEL)[:3])}"),
|
|
15
|
+
provider: PROVIDER = typer.Option(..., "--provider", "-p", help=f"Provider to use (for crush agent). One of {', '.join(get_args(PROVIDER)[:3])}"),
|
|
16
|
+
context_path: Optional[Path] = typer.Option(None, "--context-path", "-c", help="Path to the context file/folder, defaults to .ai/todo/"),
|
|
17
|
+
separator: str = typer.Option("\n", "--separator", "-s", help="Separator for context"),
|
|
18
|
+
agent_load: int = typer.Option(13, "--agent-load", "-al", help="Number of tasks per prompt"),
|
|
19
|
+
prompt: Optional[str] = typer.Option(None, "--prompt", "-p", help="Prompt prefix as string"),
|
|
20
|
+
prompt_path: Optional[Path] = typer.Option(None, "--prompt-path", "-pp", help="Path to prompt file"),
|
|
21
|
+
job_name: str = typer.Option("AI_Agents", "--job-name", "-j", help="Job name"),
|
|
22
|
+
separate: bool = typer.Option(True, "--separate", "-sep", help="Keep prompt material in separate file to the context."),
|
|
23
|
+
output_path: Optional[Path] = typer.Option(None, "--output-path", "-o", help="Path to write the layout.json file"),
|
|
24
|
+
agents_dir: Optional[Path] = typer.Option(None, "--agents-dir", "-ad", help="Directory to store agent files. If not provided, will be constructed automatically."),
|
|
25
25
|
):
|
|
26
26
|
|
|
27
27
|
from machineconfig.scripts.python.helpers_fire.fire_agents_help_launch import prep_agent_launch, get_agents_launch_layout
|
|
@@ -163,7 +163,7 @@ def get_app():
|
|
|
163
163
|
agents_app = typer.Typer(help="🤖 AI Agents management subcommands", no_args_is_help=True)
|
|
164
164
|
sep = "\n"
|
|
165
165
|
agents_full_help = f"""
|
|
166
|
-
Create agents layout file, ready to run.
|
|
166
|
+
[cr] Create agents layout file, ready to run.
|
|
167
167
|
{sep}
|
|
168
168
|
PROVIDER options: {', '.join(get_args(PROVIDER))}
|
|
169
169
|
{sep}
|
|
@@ -172,13 +172,19 @@ AGENT options: {', '.join(get_args(AGENTS))}
|
|
|
172
172
|
MODEL options: {sep.join(get_args(MODEL))}
|
|
173
173
|
"""
|
|
174
174
|
agents_app.command("create", no_args_is_help=True, help=agents_full_help)(create)
|
|
175
|
-
agents_app.command("
|
|
176
|
-
agents_app.command("
|
|
177
|
-
agents_app.command("
|
|
175
|
+
agents_app.command("cr", no_args_is_help=True, help="Create agents layout file, ready to run.", hidden=True)(create)
|
|
176
|
+
agents_app.command("collect", no_args_is_help=True, help="[cl] Collect all agent materials into a single file.")(collect)
|
|
177
|
+
agents_app.command("c", no_args_is_help=True, help="Collect all agent materials into a single file.", hidden=True)(collect)
|
|
178
|
+
agents_app.command("make-template", no_args_is_help=False, help="[mt] Create a template for fire agents")(template)
|
|
179
|
+
agents_app.command("mt", no_args_is_help=False, help="Create a template for fire agents", hidden=True)(template)
|
|
180
|
+
agents_app.command("make-config", no_args_is_help=False, help="[mc] Initialize AI configurations in the current repository")(init_config)
|
|
181
|
+
agents_app.command("mc", no_args_is_help=False, help="Initialize AI configurations in the current repository", hidden=True)(init_config)
|
|
178
182
|
from machineconfig.scripts.python.ai.generate_files import main
|
|
179
|
-
agents_app.command("make-todo", no_args_is_help=True, help="Generate a markdown file listing all Python files in the repo")(main)
|
|
183
|
+
agents_app.command("make-todo", no_args_is_help=True, help="[mt] Generate a markdown file listing all Python files in the repo")(main)
|
|
184
|
+
agents_app.command("mt", no_args_is_help=True, help="Generate a markdown file listing all Python files in the repo", hidden=True)(main)
|
|
180
185
|
from machineconfig.scripts.python.ai.generate_files import create_symlink_command
|
|
181
|
-
agents_app.command(name="make-symlinks", no_args_is_help=True, help="Create symlinks to the current repo in ~/code_copies/")(create_symlink_command)
|
|
186
|
+
agents_app.command(name="make-symlinks", no_args_is_help=True, help="[ms] Create symlinks to the current repo in ~/code_copies/")(create_symlink_command)
|
|
187
|
+
agents_app.command(name="ms", no_args_is_help=True, help="Create symlinks to the current repo in ~/code_copies/", hidden=True)(create_symlink_command)
|
|
182
188
|
return agents_app
|
|
183
189
|
|
|
184
190
|
|
|
@@ -12,20 +12,26 @@ import machineconfig.scripts.python.devops_helpers.cli_nw as cli_network
|
|
|
12
12
|
|
|
13
13
|
def get_app():
|
|
14
14
|
app = typer.Typer(help="🛠️ DevOps operations", no_args_is_help=True, add_completion=True)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
group: Optional[str] = typer.Option(None, "--group", "-g", help="Groups names. A group is bundle of apps. See available groups when running interactively."),
|
|
15
|
+
def install(which: Optional[str] = typer.Argument(None, help="Comma-separated list of program names to install, or group name if --group flag is set."),
|
|
16
|
+
group: bool = typer.Option(False, "--group", "-g", help="Treat 'which' as a group name. A group is bundle of apps."),
|
|
18
17
|
interactive: bool = typer.Option(False, "--interactive", "-ia", help="Interactive selection of programs to install."),
|
|
19
18
|
) -> None:
|
|
20
19
|
"""📦 Install essential packages"""
|
|
21
20
|
import machineconfig.utils.installer_utils.installer as installer_entry_point
|
|
22
21
|
installer_entry_point.main(which=which, group=group, interactive=interactive)
|
|
23
22
|
_ = install
|
|
24
|
-
app.
|
|
25
|
-
app.
|
|
23
|
+
app.command("install", no_args_is_help=True, help="🛠️ [i] Install essential packages")(install)
|
|
24
|
+
app.command("i", no_args_is_help=True, help="Install essential packages", hidden=True)(install)
|
|
25
|
+
app.add_typer(cli_repos.get_app(), name="repos")
|
|
26
|
+
app.add_typer(cli_repos.get_app(), name="r", hidden=True)
|
|
27
|
+
app.add_typer(cli_config.get_app(), name="config")
|
|
28
|
+
app.add_typer(cli_config.get_app(), name="c", hidden=True)
|
|
26
29
|
app.add_typer(cli_data.app_data, name="data")
|
|
27
|
-
app.add_typer(
|
|
28
|
-
app.add_typer(
|
|
30
|
+
app.add_typer(cli_data.app_data, name="d", hidden=True)
|
|
31
|
+
app.add_typer(cli_self.get_app(), name="self")
|
|
32
|
+
app.add_typer(cli_self.get_app(), name="s", hidden=True)
|
|
33
|
+
app.add_typer(cli_network.get_app(), name="network")
|
|
34
|
+
app.add_typer(cli_network.get_app(), name="n", hidden=True)
|
|
29
35
|
return app
|
|
30
36
|
|
|
31
37
|
def main():
|
|
@@ -4,10 +4,8 @@ from typing import Literal, Annotated, Optional
|
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
import typer
|
|
6
6
|
|
|
7
|
-
config_apps = typer.Typer(help="⚙️ Configuration subcommands", no_args_is_help=True)
|
|
8
7
|
|
|
9
8
|
|
|
10
|
-
@config_apps.command(no_args_is_help=True)
|
|
11
9
|
def private(method: Literal["symlink", "copy"] = typer.Option(..., "--method", "-m", help="Method to use for linking files"),
|
|
12
10
|
on_conflict: Literal["throwError", "overwriteSelfManaged", "backupSelfManaged", "overwriteDefaultPath", "backupDefaultPath"] = typer.Option("throwError", "--on-conflict", "-o", help="Action to take on conflict"),
|
|
13
11
|
which: Optional[str] = typer.Option(None, "--which", "-w", help="Specific items to process"),
|
|
@@ -16,7 +14,6 @@ def private(method: Literal["symlink", "copy"] = typer.Option(..., "--method", "
|
|
|
16
14
|
import machineconfig.profile.create_links_export as create_links_export
|
|
17
15
|
create_links_export.main_private_from_parser(method=method, on_conflict=on_conflict, which=which, interactive=interactive)
|
|
18
16
|
|
|
19
|
-
@config_apps.command(no_args_is_help=True)
|
|
20
17
|
def public(method: Literal["symlink", "copy"] = typer.Option(..., "--method", "-m", help="Method to use for setting up the config file."),
|
|
21
18
|
on_conflict: Literal["throwError", "overwriteDefaultPath", "backupDefaultPath"] = typer.Option("throwError", "--on-conflict", "-o", help="Action to take on conflict"),
|
|
22
19
|
which: Optional[str] = typer.Option(None, "--which", "-w", help="Specific items to process"),
|
|
@@ -25,7 +22,6 @@ def public(method: Literal["symlink", "copy"] = typer.Option(..., "--method", "-
|
|
|
25
22
|
import machineconfig.profile.create_links_export as create_links_export
|
|
26
23
|
create_links_export.main_public_from_parser(method=method, on_conflict=on_conflict, which=which, interactive=interactive)
|
|
27
24
|
|
|
28
|
-
@config_apps.command(no_args_is_help=True)
|
|
29
25
|
def dotfile(file: Annotated[str, typer.Argument(help="file/folder path.")],
|
|
30
26
|
overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="Overwrite.")] = False,
|
|
31
27
|
dest: Annotated[str, typer.Option("--dest", "-d", help="destination folder")] = "",
|
|
@@ -35,13 +31,11 @@ def dotfile(file: Annotated[str, typer.Argument(help="file/folder path.")],
|
|
|
35
31
|
dotfile_module.main(file=file, overwrite=overwrite, dest=dest)
|
|
36
32
|
|
|
37
33
|
|
|
38
|
-
@config_apps.command(no_args_is_help=False)
|
|
39
34
|
def shell():
|
|
40
35
|
"""🔗 Configure your shell profile."""
|
|
41
36
|
from machineconfig.profile.create_shell_profile import create_default_shell_profile
|
|
42
37
|
create_default_shell_profile()
|
|
43
38
|
|
|
44
|
-
@config_apps.command(no_args_is_help=False)
|
|
45
39
|
def path():
|
|
46
40
|
"""📚 NAVIGATE PATH variable with TUI"""
|
|
47
41
|
from machineconfig.scripts.python import env_manager as navigator
|
|
@@ -50,7 +44,6 @@ def path():
|
|
|
50
44
|
from machineconfig.utils.code import run_shell_script
|
|
51
45
|
run_shell_script(f"uv run --with machineconfig>=5.67,textual {path}")
|
|
52
46
|
|
|
53
|
-
@config_apps.command(no_args_is_help=False)
|
|
54
47
|
def pwsh_theme():
|
|
55
48
|
"""🔗 Select powershell prompt theme."""
|
|
56
49
|
import machineconfig.scripts.python.devops_helpers.themes as themes
|
|
@@ -58,12 +51,31 @@ def pwsh_theme():
|
|
|
58
51
|
import subprocess
|
|
59
52
|
subprocess.run(["pwsh", "-File", str(file)])
|
|
60
53
|
|
|
61
|
-
@config_apps.command(no_args_is_help=False)
|
|
62
54
|
def copy_assets(which: Literal["scripts", "settings", "both"] = typer.Option(..., "--which", "-w", help="Which assets to copy")):
|
|
63
55
|
"""🔗 Copy asset files from library to machine."""
|
|
64
56
|
import machineconfig.profile.create_helper as create_helper
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
57
|
+
match which:
|
|
58
|
+
case "both":
|
|
59
|
+
create_helper.copy_assets_to_machine(which="scripts")
|
|
60
|
+
create_helper.copy_assets_to_machine(which="settings")
|
|
61
|
+
case _:
|
|
62
|
+
create_helper.copy_assets_to_machine(which=which)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def get_app():
|
|
66
|
+
config_apps = typer.Typer(help="⚙️ [c] configuration subcommands", no_args_is_help=True)
|
|
67
|
+
config_apps.command("private", no_args_is_help=True, help="🔗 [p] Manage private configuration files.")(private)
|
|
68
|
+
config_apps.command("p", no_args_is_help=True, help="Manage private configuration files.", hidden=True)(private)
|
|
69
|
+
config_apps.command("public", no_args_is_help=True, help="🔗 [u] Manage public configuration files.")(public)
|
|
70
|
+
config_apps.command("u", no_args_is_help=True, help="Manage public configuration files.", hidden=True)(public)
|
|
71
|
+
config_apps.command("dotfile", no_args_is_help=True, help="🔗 [d] Manage dotfiles.")(dotfile)
|
|
72
|
+
config_apps.command("d", no_args_is_help=True, help="Manage dotfiles.", hidden=True)(dotfile)
|
|
73
|
+
config_apps.command("shell", no_args_is_help=True, help="🔗 [s] Configure your shell profile.")(shell)
|
|
74
|
+
config_apps.command("s", no_args_is_help=True, help="Configure your shell profile.", hidden=True)(shell)
|
|
75
|
+
config_apps.command("path", no_args_is_help=True, help="📚 [a] NAVIGATE PATH variable with TUI")(path)
|
|
76
|
+
config_apps.command("a", no_args_is_help=True, help="NAVIGATE PATH variable with TUI", hidden=True)(path)
|
|
77
|
+
config_apps.command("pwsh-theme", no_args_is_help=True, help="🔗 [t] Select powershell prompt theme.")(pwsh_theme)
|
|
78
|
+
config_apps.command("t", no_args_is_help=True, help="Select powershell prompt theme.", hidden=True)(pwsh_theme)
|
|
79
|
+
config_apps.command("copy-assets", no_args_is_help=True, help="🔗 [c] Copy asset files from library to machine.")
|
|
80
|
+
config_apps.command("c", no_args_is_help=True, help="Copy asset files from library to machine.", hidden=True)(copy_assets)
|
|
81
|
+
return config_apps
|
|
@@ -4,13 +4,8 @@ import machineconfig.scripts.python.devops_helpers.cli_share_server as cli_share
|
|
|
4
4
|
import typer
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
|
-
nw_apps = typer.Typer(help="🔐 Network subcommands", no_args_is_help=True)
|
|
8
7
|
|
|
9
8
|
|
|
10
|
-
nw_apps.command(name="share-terminal", help="📡 Share terminal via web browser")(cli_terminal.main)
|
|
11
|
-
nw_apps.command(name="share-server", help="🌐 Start local/global server to share files/folders via web browser", no_args_is_help=True)(cli_share_server.main)
|
|
12
|
-
|
|
13
|
-
@nw_apps.command()
|
|
14
9
|
def install_ssh_server():
|
|
15
10
|
"""📡 SSH install server"""
|
|
16
11
|
import platform
|
|
@@ -23,7 +18,6 @@ def install_ssh_server():
|
|
|
23
18
|
from machineconfig.utils.code import run_shell_script
|
|
24
19
|
run_shell_script(script=SSH_SERVER.read_text(encoding="utf-8"))
|
|
25
20
|
|
|
26
|
-
@nw_apps.command(no_args_is_help=True)
|
|
27
21
|
def add_ssh_key(path: Optional[str] = typer.Option(None, help="Path to the public key file"),
|
|
28
22
|
choose: bool = typer.Option(False, "--choose", "-c", help="Choose from available public keys in ~/.ssh/*.pub"),
|
|
29
23
|
value: bool = typer.Option(False, "--value", "-v", help="Paste the public key content manually"),
|
|
@@ -32,8 +26,21 @@ def add_ssh_key(path: Optional[str] = typer.Option(None, help="Path to the publi
|
|
|
32
26
|
"""🔑 SSH add pub key to this machine so its accessible by owner of corresponding private key."""
|
|
33
27
|
import machineconfig.scripts.python.devops_helpers.devops_add_ssh_key as helper
|
|
34
28
|
helper.main(pub_path=path, pub_choose=choose, pub_val=value, from_github=github)
|
|
35
|
-
@nw_apps.command()
|
|
36
29
|
def add_ssh_identity():
|
|
37
30
|
"""🗝️ SSH add identity (private key) to this machine"""
|
|
38
31
|
import machineconfig.scripts.python.devops_helpers.devops_add_identity as helper
|
|
39
32
|
helper.main()
|
|
33
|
+
|
|
34
|
+
def get_app():
|
|
35
|
+
nw_apps = typer.Typer(help="🔐 [n] Network subcommands", no_args_is_help=True)
|
|
36
|
+
nw_apps.command(name="share-terminal", help="📡 [t] Share terminal via web browser")(cli_terminal.main)
|
|
37
|
+
nw_apps.command(name="t", help="Share terminal via web browser", hidden=True)(cli_terminal.main)
|
|
38
|
+
nw_apps.command(name="share-server", help="🌐 [s] Start local/global server to share files/folders via web browser", no_args_is_help=True)(cli_share_server.main)
|
|
39
|
+
nw_apps.command(name="s", help="Start local/global server to share files/folders via web browser", hidden=True, no_args_is_help=True)(cli_share_server.main)
|
|
40
|
+
nw_apps.command(name="install-ssh-server", help="📡 [i] Install SSH server")(install_ssh_server)
|
|
41
|
+
nw_apps.command(name="i", help="Install SSH server", hidden=True)(install_ssh_server)
|
|
42
|
+
nw_apps.command(name="add-ssh-key", help="🔑 [k] Add SSH public key to this machine")(add_ssh_key)
|
|
43
|
+
nw_apps.command(name="k", help="Add SSH public key to this machine", hidden=True)(add_ssh_key)
|
|
44
|
+
nw_apps.command(name="add-ssh-identity", help="🗝️ [a] Add SSH identity (private key) to this machine")(add_ssh_identity)
|
|
45
|
+
nw_apps.command(name="a", help="Add SSH identity (private key) to this machine", hidden=True)(add_ssh_identity)
|
|
46
|
+
return nw_apps
|
|
@@ -11,24 +11,18 @@ import typer
|
|
|
11
11
|
from machineconfig.scripts.python.helpers_repos.secure_repo import main as secure_repo_main
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
app = typer.Typer(help="📁 Manage development repositories", no_args_is_help=True)
|
|
15
|
-
sync_app = typer.Typer(help="🔄 Manage repository specifications and syncing", no_args_is_help=True)
|
|
16
|
-
app.add_typer(sync_app, name="mirror", help="🔄 mirror repositories using saved specs")
|
|
17
|
-
|
|
18
14
|
DirectoryArgument = Annotated[Optional[str], typer.Argument(help="📁 Directory containing repo(s).")]
|
|
19
15
|
RecursiveOption = Annotated[bool, typer.Option("--recursive", "-r", help="🔍 Recurse into nested repositories.")]
|
|
20
16
|
NoSyncOption = Annotated[bool, typer.Option("--no-sync", help="🚫 Disable automatic uv sync after pulls.")]
|
|
21
17
|
CloudOption = Annotated[Optional[str], typer.Option("--cloud", "-c", help="☁️ Upload to or download from this cloud remote.")]
|
|
22
18
|
|
|
23
19
|
|
|
24
|
-
@app.command(no_args_is_help=True)
|
|
25
20
|
def push(directory: DirectoryArgument = None, recursive: RecursiveOption = False, no_sync: NoSyncOption = False) -> None:
|
|
26
21
|
"""🚀 Push changes across repositories."""
|
|
27
22
|
from machineconfig.scripts.python.repos_helpers.entrypoint import git_operations
|
|
28
23
|
git_operations(directory, pull=False, commit=False, push=True, recursive=recursive, no_sync=no_sync)
|
|
29
24
|
|
|
30
25
|
|
|
31
|
-
@app.command(no_args_is_help=True)
|
|
32
26
|
def pull(directory: DirectoryArgument = None, recursive: RecursiveOption = False, no_sync: NoSyncOption = False) -> None:
|
|
33
27
|
"""⬇️ Pull changes across repositories."""
|
|
34
28
|
from machineconfig.scripts.python.repos_helpers.entrypoint import git_operations
|
|
@@ -36,7 +30,6 @@ def pull(directory: DirectoryArgument = None, recursive: RecursiveOption = False
|
|
|
36
30
|
git_operations(directory, pull=True, commit=False, push=False, recursive=recursive, no_sync=no_sync)
|
|
37
31
|
|
|
38
32
|
|
|
39
|
-
@app.command(no_args_is_help=True)
|
|
40
33
|
def commit(directory: DirectoryArgument = None, recursive: RecursiveOption = False, no_sync: NoSyncOption = False) -> None:
|
|
41
34
|
"""💾 Commit changes across repositories."""
|
|
42
35
|
from machineconfig.scripts.python.repos_helpers.entrypoint import git_operations
|
|
@@ -44,14 +37,12 @@ def commit(directory: DirectoryArgument = None, recursive: RecursiveOption = Fal
|
|
|
44
37
|
git_operations(directory, pull=False, commit=True, push=False, recursive=recursive, no_sync=no_sync)
|
|
45
38
|
|
|
46
39
|
|
|
47
|
-
@app.command(no_args_is_help=True)
|
|
48
40
|
def sync(directory: DirectoryArgument = None, recursive: RecursiveOption = False, no_sync: NoSyncOption = False) -> None:
|
|
49
41
|
"""🔄 Pull, commit, and push changes across repositories."""
|
|
50
42
|
from machineconfig.scripts.python.repos_helpers.entrypoint import git_operations
|
|
51
43
|
git_operations(directory, pull=True, commit=True, push=True, recursive=recursive, no_sync=no_sync)
|
|
52
44
|
|
|
53
45
|
|
|
54
|
-
@sync_app.command(no_args_is_help=True)
|
|
55
46
|
def capture(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
|
|
56
47
|
"""📝 Record repositories into a repos.json specification."""
|
|
57
48
|
from machineconfig.scripts.python.repos_helpers.entrypoint import resolve_directory
|
|
@@ -65,7 +56,6 @@ def capture(directory: DirectoryArgument = None, cloud: CloudOption = None) -> N
|
|
|
65
56
|
PathExtended(save_path).to_cloud(rel2home=True, cloud=cloud)
|
|
66
57
|
|
|
67
58
|
|
|
68
|
-
@sync_app.command(no_args_is_help=True)
|
|
69
59
|
def clone(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
|
|
70
60
|
"""📥 Clone repositories described by a repos.json specification."""
|
|
71
61
|
from machineconfig.scripts.python.repos_helpers.entrypoint import clone_from_specs
|
|
@@ -74,7 +64,6 @@ def clone(directory: DirectoryArgument = None, cloud: CloudOption = None) -> Non
|
|
|
74
64
|
clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=False)
|
|
75
65
|
|
|
76
66
|
|
|
77
|
-
@sync_app.command(name="checkout-to-commit", no_args_is_help=True)
|
|
78
67
|
def checkout_command(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
|
|
79
68
|
"""🔀 Check out specific commits listed in the specification."""
|
|
80
69
|
from machineconfig.scripts.python.repos_helpers.entrypoint import clone_from_specs
|
|
@@ -83,14 +72,12 @@ def checkout_command(directory: DirectoryArgument = None, cloud: CloudOption = N
|
|
|
83
72
|
clone_from_specs(directory, cloud, checkout_branch_flag=False, checkout_commit_flag=True)
|
|
84
73
|
|
|
85
74
|
|
|
86
|
-
@sync_app.command(name="checkout-to-branch", no_args_is_help=True)
|
|
87
75
|
def checkout_to_branch_command(directory: DirectoryArgument = None, cloud: CloudOption = None) -> None:
|
|
88
76
|
"""🔀 Check out to the main branch defined in the specification."""
|
|
89
77
|
from machineconfig.scripts.python.repos_helpers.entrypoint import clone_from_specs
|
|
90
78
|
clone_from_specs(directory, cloud, checkout_branch_flag=True, checkout_commit_flag=False)
|
|
91
79
|
|
|
92
80
|
|
|
93
|
-
@app.command(no_args_is_help=True)
|
|
94
81
|
def analyze(directory: DirectoryArgument = None) -> None:
|
|
95
82
|
"""📊 Analyze repository development over time."""
|
|
96
83
|
repo_path = directory if directory is not None else "."
|
|
@@ -99,10 +86,6 @@ def analyze(directory: DirectoryArgument = None) -> None:
|
|
|
99
86
|
analyze_repo_development(repo_path=repo_path)
|
|
100
87
|
|
|
101
88
|
|
|
102
|
-
app.command(name="secure", no_args_is_help=True, help="🔐 Securely sync git repository to/from cloud with encryption")(secure_repo_main)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
@app.command(no_args_is_help=True)
|
|
106
89
|
def viz(
|
|
107
90
|
repo: str = typer.Option(Path.cwd().__str__(), "--repo", "-r", help="Path to git repository to visualize"),
|
|
108
91
|
output_file: Optional[Path] = typer.Option(None, "--output", "-o", help="Output video file (e.g., output.mp4). If specified, gource will render to video."),
|
|
@@ -134,7 +117,7 @@ def viz(
|
|
|
134
117
|
file_idle_time=file_idle_time, framerate=framerate, background_color=background_color,
|
|
135
118
|
font_size=font_size, camera_mode=camera_mode)
|
|
136
119
|
|
|
137
|
-
|
|
120
|
+
|
|
138
121
|
def cleanup(repo: DirectoryArgument = None, recursive: RecursiveOption = False) -> None:
|
|
139
122
|
"""🧹 Clean repository directories from cache files."""
|
|
140
123
|
if repo is None:
|
|
@@ -169,3 +152,38 @@ uv run --with cleanpy cleanpy .
|
|
|
169
152
|
"""
|
|
170
153
|
from machineconfig.utils.code import run_shell_script
|
|
171
154
|
run_shell_script(script)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def get_app():
|
|
158
|
+
repos_apps = typer.Typer(help="📁 [r] Manage development repositories", no_args_is_help=True)
|
|
159
|
+
mirror_app = typer.Typer(help="🔄 [m] Manage repository specifications and syncing", no_args_is_help=True)
|
|
160
|
+
repos_apps.add_typer(mirror_app, name="mirror", help="🔄 [m] mirror repositories using saved specs")
|
|
161
|
+
repos_apps.add_typer(mirror_app, name="m", help="mirror repositories using saved specs", hidden=True)
|
|
162
|
+
|
|
163
|
+
repos_apps.command(name="push", help="🚀 [p] Push changes across repositories")(push)
|
|
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)
|
|
166
|
+
repos_apps.command(name="P", help="Pull changes across repositories", hidden=True)(pull)
|
|
167
|
+
repos_apps.command(name="commit", help="💾 [c] Commit changes across repositories")(commit)
|
|
168
|
+
repos_apps.command(name="c", help="Commit changes across repositories", hidden=True)(commit)
|
|
169
|
+
repos_apps.command(name="sync", help="🔄 [s] Pull, commit, and push changes across repositories")(sync)
|
|
170
|
+
repos_apps.command(name="s", help="Pull, commit, and push changes across repositories", hidden=True)(sync)
|
|
171
|
+
repos_apps.command(name="analyze", help="📊 [a] Analyze repository development over time")(analyze)
|
|
172
|
+
repos_apps.command(name="a", help="Analyze repository development over time", hidden=True)(analyze)
|
|
173
|
+
repos_apps.command(name="secure", help="🔐 [s] Securely sync git repository to/from cloud with encryption")(secure_repo_main)
|
|
174
|
+
repos_apps.command(name="s", help="Securely sync git repository to/from cloud with encryption", hidden=True)(secure_repo_main)
|
|
175
|
+
repos_apps.command(name="viz", help="🎬 [v] Visualize repository activity using Gource")(viz)
|
|
176
|
+
repos_apps.command(name="v", help="Visualize repository activity using Gource", hidden=True)(viz)
|
|
177
|
+
repos_apps.command(name="cleanup", help="🧹 [n] Clean repository directories from cache files")(cleanup)
|
|
178
|
+
repos_apps.command(name="n", help="Clean repository directories from cache files", hidden=True)(cleanup)
|
|
179
|
+
|
|
180
|
+
mirror_app.command(name="capture", help="📝 [cap] Record repositories into a repos.json specification")(capture)
|
|
181
|
+
mirror_app.command(name="cap", help="Record repositories into a repos.json specification", hidden=True)(capture)
|
|
182
|
+
mirror_app.command(name="clone", help="📥 [clo] Clone repositories described by a repos.json specification")(clone)
|
|
183
|
+
mirror_app.command(name="clo", help="Clone repositories described by a repos.json specification", hidden=True)(clone)
|
|
184
|
+
mirror_app.command(name="checkout-to-commit", help="🔀 [ctc] Check out specific commits listed in the specification")(checkout_command)
|
|
185
|
+
mirror_app.command(name="ctc", help="Check out specific commits listed in the specification", hidden=True)(checkout_command)
|
|
186
|
+
mirror_app.command(name="checkout-to-branch", help="🔀 [ctb] Check out to the main branch defined in the specification")(checkout_to_branch_command)
|
|
187
|
+
mirror_app.command(name="ctb", help="Check out to the main branch defined in the specification", hidden=True)(checkout_to_branch_command)
|
|
188
|
+
|
|
189
|
+
return repos_apps
|
|
@@ -2,26 +2,20 @@
|
|
|
2
2
|
import typer
|
|
3
3
|
from typing import Optional
|
|
4
4
|
|
|
5
|
-
cli_app = typer.Typer(help="🔄 SELF operations subcommands", no_args_is_help=True)
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
@cli_app.command()
|
|
9
6
|
def update():
|
|
10
7
|
"""🔄 UPDATE essential repos"""
|
|
11
8
|
import machineconfig.scripts.python.devops_helpers.devops_update_repos as helper
|
|
12
9
|
helper.main()
|
|
13
|
-
@cli_app.command()
|
|
14
10
|
def interactive():
|
|
15
11
|
"""🤖 INTERACTIVE configuration of machine."""
|
|
16
12
|
from machineconfig.scripts.python.interactive import main
|
|
17
13
|
main()
|
|
18
14
|
|
|
19
|
-
@cli_app.command()
|
|
20
15
|
def status():
|
|
21
16
|
"""📊 STATUS of machine, shell profile, apps, symlinks, dotfiles, etc."""
|
|
22
17
|
import machineconfig.scripts.python.devops_helpers.devops_status as helper
|
|
23
18
|
helper.main()
|
|
24
|
-
@cli_app.command()
|
|
25
19
|
def install():
|
|
26
20
|
"""📋 CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates."""
|
|
27
21
|
from machineconfig.utils.code import run_shell_script
|
|
@@ -35,7 +29,6 @@ def install():
|
|
|
35
29
|
else:
|
|
36
30
|
run_shell_script("""$HOME/.local/bin/uv tool install machineconfig>=5.67""")
|
|
37
31
|
|
|
38
|
-
@cli_app.command(no_args_is_help=False)
|
|
39
32
|
def navigate():
|
|
40
33
|
"""📚 NAVIGATE command structure with TUI"""
|
|
41
34
|
import machineconfig.scripts.python as navigator
|
|
@@ -45,7 +38,6 @@ def navigate():
|
|
|
45
38
|
run_shell_script(f"uv run --with machineconfig>=5.67,textual {path}")
|
|
46
39
|
|
|
47
40
|
|
|
48
|
-
@cli_app.command(no_args_is_help=True)
|
|
49
41
|
def run_python(ip: str = typer.Argument(..., help="Python command to run in the machineconfig environment"),
|
|
50
42
|
command: Optional[bool] = typer.Option(False, "--command", "-c", help="Run as command")):
|
|
51
43
|
"""🐍 RUN python command/file in the machineconfig environment"""
|
|
@@ -56,3 +48,19 @@ def run_python(ip: str = typer.Argument(..., help="Python command to run in the
|
|
|
56
48
|
import subprocess
|
|
57
49
|
import sys
|
|
58
50
|
subprocess.run([sys.executable, ip], cwd=machineconfig.__path__[0])
|
|
51
|
+
|
|
52
|
+
def get_app():
|
|
53
|
+
cli_app = typer.Typer(help="🔄 [s] self operations subcommands", no_args_is_help=True)
|
|
54
|
+
cli_app.command("update", no_args_is_help=True, help="🔄 [u] UPDATE essential repos")(update)
|
|
55
|
+
cli_app.command("u", no_args_is_help=True, help="UPDATE essential repos", hidden=True)(update)
|
|
56
|
+
cli_app.command("interactive", no_args_is_help=True, help="🤖 [ia] INTERACTIVE configuration of machine.")(interactive)
|
|
57
|
+
cli_app.command("ia", no_args_is_help=True, help="INTERACTIVE configuration of machine.", hidden=True)(interactive)
|
|
58
|
+
cli_app.command("status", no_args_is_help=True, help="📊 [s] STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.")(status)
|
|
59
|
+
cli_app.command("s", no_args_is_help=True, help="STATUS of machine, shell profile, apps, symlinks, dotfiles, etc.", hidden=True)(status)
|
|
60
|
+
cli_app.command("install", no_args_is_help=True, 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=True, help="CLONE machienconfig locally and incorporate to shell profile for faster execution and nightly updates.", hidden=True)(install)
|
|
62
|
+
cli_app.command("navigate", no_args_is_help=True, help="📚 [n] NAVIGATE command structure with TUI")(navigate)
|
|
63
|
+
cli_app.command("n", no_args_is_help=True, 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)
|
|
65
|
+
cli_app.command("c", no_args_is_help=False, help="RUN python command/file in the machineconfig environment", hidden=True)(run_python)
|
|
66
|
+
return cli_app
|
|
@@ -163,7 +163,7 @@ def ftpx(
|
|
|
163
163
|
padding=(1, 2),
|
|
164
164
|
)
|
|
165
165
|
)
|
|
166
|
-
received_file = ssh.copy_to_here(source=resolved_source, target=resolved_target,
|
|
166
|
+
received_file = ssh.copy_to_here(source=resolved_source, target=resolved_target, compress_with_zip=zipFirst, recursive=recursive)
|
|
167
167
|
else:
|
|
168
168
|
assert resolved_source is not None, """
|
|
169
169
|
❌ Path Error: Target must be a remote path (machine:path)"""
|
|
@@ -120,7 +120,7 @@ def execute_installations(selected_options: list[str]) -> None:
|
|
|
120
120
|
console.print("🔧 Installing CLI applications", style="bold cyan")
|
|
121
121
|
try:
|
|
122
122
|
from machineconfig.utils.installer_utils.installer import main as devops_devapps_install_main
|
|
123
|
-
devops_devapps_install_main(group=
|
|
123
|
+
devops_devapps_install_main(group=True, which=maybe_a_group, interactive=False)
|
|
124
124
|
console.print("✅ CLI applications installed successfully", style="bold green")
|
|
125
125
|
except Exception as e:
|
|
126
126
|
console.print(f"❌ Error installing CLI applications: {e}", style="bold red")
|
|
@@ -19,9 +19,9 @@ def main():
|
|
|
19
19
|
print("\n🔍 Interactive mode selected for choosing share path.")
|
|
20
20
|
tmp = choose_ssh_host(multi=False)
|
|
21
21
|
assert isinstance(tmp, str)
|
|
22
|
-
ssh = SSH(tmp)
|
|
23
|
-
default = f"{ssh.hostname}:{ssh.run_shell('echo $HOME').op}/data/share_nfs"
|
|
24
|
-
share_info = choose_from_options(msg="📂 Choose a share path:", options=[f"{ssh.hostname}:{item.split(' ')[0]}" for item in ssh.run_shell("cat /etc/exports").op.split("\n") if not item.startswith("#")] + [default], default=default, multi=False)
|
|
22
|
+
ssh = SSH(host=tmp, username=None, hostname=None, ssh_key_path=None, password=None, port=22, enable_compression=False)
|
|
23
|
+
default = f"{ssh.hostname}:{ssh.run_shell(command='echo $HOME', verbose_output=False, description='Get home directory', strict_stderr=False, strict_return_code=True).op}/data/share_nfs"
|
|
24
|
+
share_info = choose_from_options(msg="📂 Choose a share path:", options=[f"{ssh.hostname}:{item.split(' ')[0]}" for item in ssh.run_shell(command="cat /etc/exports", verbose_output=False, description='Get NFS exports', strict_stderr=False, strict_return_code=False).op.split("\n") if not item.startswith("#")] + [default], default=default, multi=False)
|
|
25
25
|
assert isinstance(share_info, str), f"❌ share_info must be a string. Got {type(share_info)}"
|
|
26
26
|
|
|
27
27
|
remote_server = share_info.split(":")[0]
|
|
@@ -18,10 +18,10 @@ def main():
|
|
|
18
18
|
print("\n🔍 Interactive mode selected for choosing share path.")
|
|
19
19
|
tmp = choose_ssh_host(multi=False)
|
|
20
20
|
assert isinstance(tmp, str)
|
|
21
|
-
ssh = SSH(host=tmp)
|
|
22
|
-
share_info = f"{ssh.username}@{ssh.hostname}:{ssh.run_shell('echo $HOME').op}/data/share_ssh"
|
|
21
|
+
ssh = SSH(host=tmp, username=None, hostname=None, ssh_key_path=None, password=None, port=22, enable_compression=False)
|
|
22
|
+
share_info = f"{ssh.username}@{ssh.hostname}:{ssh.run_shell(command='echo $HOME', verbose_output=False, description='Get home directory', strict_stderr=False, strict_return_code=True).op}/data/share_ssh"
|
|
23
23
|
else:
|
|
24
|
-
ssh = SSH(share_info.split(":")[0])
|
|
24
|
+
ssh = SSH(host=share_info.split(":")[0], username=None, hostname=None, ssh_key_path=None, password=None, port=22, enable_compression=False)
|
|
25
25
|
|
|
26
26
|
print(f"\n🌐 Share Info: {share_info}")
|
|
27
27
|
|
|
@@ -52,9 +52,9 @@ def main(
|
|
|
52
52
|
port_int = int(port) if port else (2222 if system == "Windows" else 22)
|
|
53
53
|
username = UserName
|
|
54
54
|
hostname = platform.node()
|
|
55
|
-
ssh = SSH(
|
|
55
|
+
ssh = SSH(host=None, username=username, hostname=hostname, ssh_key_path=sshkey, password=pwd, port=port_int, enable_compression=False)
|
|
56
56
|
print("🌐 Initiating SSH transfer...")
|
|
57
|
-
ssh.copy_from_here(
|
|
57
|
+
ssh.copy_from_here(source_path=path_obj, target_path=Path(destination) if destination else None, compress_with_zip=zip_first, recursive=False, overwrite_existing=False)
|
|
58
58
|
print("✅ SSH transfer completed successfully!\n")
|
|
59
59
|
|
|
60
60
|
|
|
@@ -138,10 +138,15 @@ def kill_process():
|
|
|
138
138
|
def get_app():
|
|
139
139
|
layouts_app = typer.Typer(help="Layouts management subcommands", no_args_is_help=True)
|
|
140
140
|
from machineconfig.scripts.python.sessions_helpers.sessions_multiprocess import create_from_function
|
|
141
|
-
layouts_app.command("create-from-function", no_args_is_help=True, help="Create a layout from a function")(create_from_function)
|
|
142
|
-
layouts_app.command("
|
|
143
|
-
layouts_app.command("
|
|
144
|
-
layouts_app.command("
|
|
141
|
+
layouts_app.command("create-from-function", no_args_is_help=True, help="[c] Create a layout from a function")(create_from_function)
|
|
142
|
+
layouts_app.command("c", no_args_is_help=True, help="Create a layout from a function", hidden=True)(create_from_function)
|
|
143
|
+
layouts_app.command("run", no_args_is_help=True, help="[r] Run the selected layout(s)")(run)
|
|
144
|
+
layouts_app.command("r", no_args_is_help=True, help="Run the selected layout(s)", hidden=True)(run)
|
|
145
|
+
layouts_app.command("balance-load", no_args_is_help=True, help="[b] Balance the load across sessions")(balance_load)
|
|
146
|
+
layouts_app.command("b", no_args_is_help=True, help="Balance the load across sessions", hidden=True)(balance_load)
|
|
147
|
+
layouts_app.command("kill-process", no_args_is_help=False, help="[k] Choose a process to kill")(kill_process)
|
|
148
|
+
layouts_app.command("k", no_args_is_help=False, help="Choose a process to kill", hidden=True)(kill_process)
|
|
149
|
+
|
|
145
150
|
return layouts_app
|
|
146
151
|
|
|
147
152
|
|
|
@@ -56,18 +56,19 @@ def main_with_parser():
|
|
|
56
56
|
|
|
57
57
|
|
|
58
58
|
def main(
|
|
59
|
-
which: Optional[str] = typer.
|
|
60
|
-
group:
|
|
59
|
+
which: Optional[str] = typer.Argument(None, help="Comma-separated list of program/groups names to install (if --group flag is set)."),
|
|
60
|
+
group: bool = typer.Option(False, "--group", "-g", help="Treat 'which' as a group name. A group is bundle of apps."),
|
|
61
61
|
interactive: bool = typer.Option(False, "--interactive", "-ia", help="Interactive selection of programs to install."),
|
|
62
62
|
) -> None:
|
|
63
|
-
if which is not None:
|
|
64
|
-
return install_clis(clis_names=[x.strip() for x in which.split(",") if x.strip() != ""])
|
|
65
|
-
if group is not None:
|
|
66
|
-
# for a_group in group
|
|
67
|
-
return install_group(package_group=group)
|
|
68
63
|
if interactive:
|
|
69
64
|
return install_interactively()
|
|
70
|
-
|
|
65
|
+
if which is not None:
|
|
66
|
+
if group:
|
|
67
|
+
for a_group in [x.strip() for x in which.split(",") if x.strip() != ""]:
|
|
68
|
+
return install_group(package_group=a_group)
|
|
69
|
+
else:
|
|
70
|
+
return install_clis(clis_names=[x.strip() for x in which.split(",") if x.strip() != ""])
|
|
71
|
+
typer.echo("❌ You must provide either a program name/group name, or use --interactive/-ia option.")
|
|
71
72
|
import click
|
|
72
73
|
ctx = click.get_current_context()
|
|
73
74
|
typer.echo(ctx.get_help())
|
|
@@ -120,16 +120,16 @@ 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=
|
|
123
|
+
machineconfig/scripts/python/agents.py,sha256=7freF44gD_IgQby3JuDJ1eZdtztgo727pYzcN6cL8v8,10350
|
|
124
124
|
machineconfig/scripts/python/cloud.py,sha256=_05zIiBzG4fKhFytg9mjvMBv4qMUtQJL0RtpYUJFZ3Y,920
|
|
125
125
|
machineconfig/scripts/python/croshell.py,sha256=UUL13_FZuu3nN804oPPpsqArulENdN974_wUmOyCADc,7186
|
|
126
|
-
machineconfig/scripts/python/devops.py,sha256=
|
|
126
|
+
machineconfig/scripts/python/devops.py,sha256=f9Tc2EQNO1sImE1J6Vp4HlvPozMlgbtO1t84l8knr40,2050
|
|
127
127
|
machineconfig/scripts/python/devops_navigator.py,sha256=4O9_-ACeP748NcMjWQXZF7mBQpMPxqCGhLvPG3DMi4Q,236
|
|
128
128
|
machineconfig/scripts/python/entry.py,sha256=hBqrwVDgUH-tISrscELh_FwVN576W1sb-RBO4ZVWRqU,1371
|
|
129
129
|
machineconfig/scripts/python/fire_jobs.py,sha256=O5DrckUGLxGblOcLf_iXU31pmCSpTg-c0hQZxQKD1os,13591
|
|
130
|
-
machineconfig/scripts/python/ftpx.py,sha256=
|
|
131
|
-
machineconfig/scripts/python/interactive.py,sha256=
|
|
132
|
-
machineconfig/scripts/python/sessions.py,sha256=
|
|
130
|
+
machineconfig/scripts/python/ftpx.py,sha256=UBDP6IIfWkaML1uZT1FrfGUUy_Of5LI82IdqEzo05_U,9760
|
|
131
|
+
machineconfig/scripts/python/interactive.py,sha256=n7FoIicEB3O9GNK1VOPvVILWPoWnXdbQsMQ1rBIKuGE,11790
|
|
132
|
+
machineconfig/scripts/python/sessions.py,sha256=91eqV7SMemOZDuIQMqz36-AFbrpvPLbVdR6BZppY1xA,9559
|
|
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
135
|
machineconfig/scripts/python/ai/initai.py,sha256=53MuUgk92avRPM-U3dy6o_pnEj2thlurC8U6dz41_W0,2089
|
|
@@ -171,12 +171,12 @@ machineconfig/scripts/python/croshell_helpers/start_slidev.py,sha256=HfJReOusTPh
|
|
|
171
171
|
machineconfig/scripts/python/croshell_helpers/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
|
|
172
172
|
machineconfig/scripts/python/croshell_helpers/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
|
|
173
173
|
machineconfig/scripts/python/devops_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
174
|
-
machineconfig/scripts/python/devops_helpers/cli_config.py,sha256=
|
|
174
|
+
machineconfig/scripts/python/devops_helpers/cli_config.py,sha256=dDHb4W4PqKvzq0D4-wGnljkBarkcmWZ-lCY6-BSpyCQ,5322
|
|
175
175
|
machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py,sha256=rjTys4FNf9_feP9flWM7Zvq17dxWmetSiGaHPxp25nk,2737
|
|
176
|
-
machineconfig/scripts/python/devops_helpers/cli_data.py,sha256=
|
|
177
|
-
machineconfig/scripts/python/devops_helpers/cli_nw.py,sha256=
|
|
178
|
-
machineconfig/scripts/python/devops_helpers/cli_repos.py,sha256=
|
|
179
|
-
machineconfig/scripts/python/devops_helpers/cli_self.py,sha256=
|
|
176
|
+
machineconfig/scripts/python/devops_helpers/cli_data.py,sha256=kvJ7g2CccjjXIhCwdu_Vlif8JHC0qUoLjuGcTSqT-IU,514
|
|
177
|
+
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=u8PNHLMOZjN9WNb061DTjMI9vQoFVq4djNVFNW--_Fc,3774
|
|
180
180
|
machineconfig/scripts/python/devops_helpers/cli_share_server.py,sha256=285OzxttCx7YsrpOkaapMKP1eVGHmG5TkkaSQnY7i3c,3976
|
|
181
181
|
machineconfig/scripts/python/devops_helpers/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
|
|
182
182
|
machineconfig/scripts/python/devops_helpers/devops_add_identity.py,sha256=wvjNgqsLmqD2SxbNCW_usqfp0LI-TDvcJJKGOWt2oFw,3775
|
|
@@ -224,14 +224,14 @@ machineconfig/scripts/python/helpers_repos/secure_repo.py,sha256=G_quiKOLNkWD5UG
|
|
|
224
224
|
machineconfig/scripts/python/nw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
225
225
|
machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
|
|
226
226
|
machineconfig/scripts/python/nw/mount_nfs,sha256=qZY1MPfcyeXPFmwC0nkw8ZuJuInrEKz-cZ9eek_TaUE,1852
|
|
227
|
-
machineconfig/scripts/python/nw/mount_nfs.py,sha256=
|
|
227
|
+
machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
|
|
228
228
|
machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
|
|
229
229
|
machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
|
|
230
230
|
machineconfig/scripts/python/nw/mount_smb,sha256=7UN5EP1kuxYL_-CnyaH4f9Wuu2CgALDZpJ0mPcdvCiY,94
|
|
231
|
-
machineconfig/scripts/python/nw/mount_ssh.py,sha256=
|
|
231
|
+
machineconfig/scripts/python/nw/mount_ssh.py,sha256=qt0P4T4pheszexBxaDeLVrGdLIVRoOc-UdfYv5r0OLY,2587
|
|
232
232
|
machineconfig/scripts/python/nw/onetimeshare.py,sha256=xRd8by6qUm-od2Umty2MYsXyJwzXw-CBTd7VellNaKY,2498
|
|
233
233
|
machineconfig/scripts/python/nw/wifi_conn.py,sha256=4GdLhgma9GRmZ6OFg3oxOX-qY3sr45njPckozlpM_A0,15566
|
|
234
|
-
machineconfig/scripts/python/nw/wsl_windows_transfer.py,sha256=
|
|
234
|
+
machineconfig/scripts/python/nw/wsl_windows_transfer.py,sha256=1ab9l-8MtAxofW5nGH9G2-BjlszaiLETu6WBECcNNhA,3546
|
|
235
235
|
machineconfig/scripts/python/repos_helpers/action.py,sha256=t6x9K43Uy7r5aRpdODfsN-5UoMrYXEG2cVw-Y8l9prw,14847
|
|
236
236
|
machineconfig/scripts/python/repos_helpers/clone.py,sha256=9vGb9NCXT0lkerPzOJjmFfhU8LSzE-_1LDvjkhgnal0,5461
|
|
237
237
|
machineconfig/scripts/python/repos_helpers/count_lines.py,sha256=ZLEajCLmlFFY969BehabqGOB9_kkpATO3Lt09L7KULk,15968
|
|
@@ -407,7 +407,7 @@ machineconfig/utils/files/ouch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
|
|
|
407
407
|
machineconfig/utils/files/ouch/decompress.py,sha256=7qPaEkMerBBXzeZyFn8hLODHZJv1aty-yGgwBxLgVys,1413
|
|
408
408
|
machineconfig/utils/installer_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
409
409
|
machineconfig/utils/installer_utils/github_release_bulk.py,sha256=WJf_qZlF02SmIc6C7o1h4Gy4gAaJAfeAS8O9s2Itj-k,6535
|
|
410
|
-
machineconfig/utils/installer_utils/installer.py,sha256=
|
|
410
|
+
machineconfig/utils/installer_utils/installer.py,sha256=bWFSIW05hDo6p1BsNqK-yCQL5ZNU_eZxCQW1QLLc-SA,9759
|
|
411
411
|
machineconfig/utils/installer_utils/installer_abc.py,sha256=ZoMtINHD9cHEu4R5SYUWgHLTAqo4F2a33pBrEOGX4zs,11693
|
|
412
412
|
machineconfig/utils/installer_utils/installer_class.py,sha256=UU0ccaNWY16a-ErySkXnxzWnmhPesHNRhfPIVVPtzKA,18363
|
|
413
413
|
machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=Xbi59rU35AzR7HZZ8ZQ8aUu_FjSgijNqc8Sme0rCk2Y,2050
|
|
@@ -415,8 +415,8 @@ machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoS
|
|
|
415
415
|
machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
|
|
416
416
|
machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
|
|
417
417
|
machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
418
|
-
machineconfig-5.
|
|
419
|
-
machineconfig-5.
|
|
420
|
-
machineconfig-5.
|
|
421
|
-
machineconfig-5.
|
|
422
|
-
machineconfig-5.
|
|
418
|
+
machineconfig-5.69.dist-info/METADATA,sha256=kfDwJ01syfIn1NzuuejVXft0I94FB06FG-VCWUxQWxs,3103
|
|
419
|
+
machineconfig-5.69.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
420
|
+
machineconfig-5.69.dist-info/entry_points.txt,sha256=M0jwN_brZdXWhmNVeXLvdKxfkv8WhhXFZYcuKBA9qnk,418
|
|
421
|
+
machineconfig-5.69.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
|
|
422
|
+
machineconfig-5.69.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|