machineconfig 6.82__py3-none-any.whl → 7.98__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.
- machineconfig/cluster/remote/cloud_manager.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +25 -13
- machineconfig/cluster/sessions_managers/wt_local.py +16 -221
- machineconfig/cluster/sessions_managers/wt_local_manager.py +55 -193
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
- machineconfig/jobs/installer/custom/boxes.py +2 -2
- machineconfig/jobs/installer/custom/hx.py +75 -18
- machineconfig/jobs/installer/custom/yazi.py +119 -0
- machineconfig/jobs/installer/custom_dev/brave.py +5 -3
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +4 -1
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/custom_dev/nerdfont.py +1 -1
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +27 -22
- machineconfig/jobs/installer/custom_dev/sysabc.py +139 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
- machineconfig/jobs/installer/custom_dev/winget.py +10 -14
- machineconfig/jobs/installer/installer_data.json +1287 -216
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +58 -89
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/logger.py +0 -1
- machineconfig/profile/create_helper.py +43 -16
- machineconfig/profile/create_links.py +2 -1
- machineconfig/profile/create_links_export.py +64 -18
- machineconfig/profile/create_shell_profile.py +78 -127
- machineconfig/profile/mapper.toml +15 -8
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +46 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +52 -37
- machineconfig/scripts/python/ai/initai.py +1 -1
- machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
- machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/generic.py +1 -1
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +7 -2
- machineconfig/scripts/python/croshell.py +77 -78
- machineconfig/scripts/python/devops.py +39 -21
- machineconfig/scripts/python/devops_navigator.py +0 -4
- machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
- machineconfig/scripts/python/fire_jobs.py +84 -115
- machineconfig/scripts/python/ftpx.py +42 -16
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/run_py_script.py +79 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +26 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +32 -13
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_helper_types.py +11 -14
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +32 -0
- machineconfig/scripts/python/helpers_cloud/cloud_copy.py +28 -21
- machineconfig/scripts/python/helpers_cloud/cloud_helpers.py +1 -1
- machineconfig/scripts/python/helpers_cloud/cloud_mount.py +19 -17
- machineconfig/scripts/python/helpers_cloud/cloud_sync.py +8 -7
- machineconfig/scripts/python/helpers_croshell/crosh.py +3 -3
- machineconfig/scripts/python/helpers_croshell/start_slidev.py +6 -7
- machineconfig/scripts/python/helpers_devops/cli_config.py +46 -61
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +67 -55
- machineconfig/scripts/python/helpers_devops/cli_nw.py +157 -16
- machineconfig/scripts/python/helpers_devops/cli_repos.py +55 -21
- machineconfig/scripts/python/helpers_devops/cli_self.py +98 -48
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +80 -42
- machineconfig/scripts/python/helpers_devops/{cli_terminal.py → cli_share_terminal.py} +15 -17
- machineconfig/scripts/python/helpers_devops/cli_utils.py +3 -128
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +4 -4
- machineconfig/scripts/python/helpers_devops/devops_status.py +7 -19
- machineconfig/scripts/python/helpers_devops/themes/choose_wezterm_theme.py +1 -1
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +50 -18
- machineconfig/scripts/python/helpers_network/address.py +132 -0
- machineconfig/scripts/python/{nw → helpers_network}/devops_add_ssh_key.py +24 -5
- machineconfig/scripts/python/{nw → helpers_network}/mount_nfs +0 -1
- machineconfig/scripts/python/{nw → helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers_network}/mount_ssh.py +1 -1
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
- machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/{nw → helpers_network}/wsl_windows_transfer.py +3 -2
- machineconfig/scripts/python/helpers_repos/clone.py +0 -1
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +46 -19
- machineconfig/scripts/python/helpers_repos/entrypoint.py +2 -1
- machineconfig/scripts/python/helpers_repos/grource.py +1 -1
- machineconfig/scripts/python/helpers_repos/record.py +2 -1
- machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/helpers_repos/{count_lines.py → repo_analyzer_2.py} +113 -192
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +20 -13
- machineconfig/scripts/python/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers_utils/path.py +185 -0
- machineconfig/scripts/python/interactive.py +19 -26
- machineconfig/scripts/python/{mcfg.py → mcfg_entry.py} +10 -0
- machineconfig/scripts/python/msearch.py +71 -0
- machineconfig/scripts/python/sessions.py +94 -25
- machineconfig/scripts/python/terminal.py +133 -0
- machineconfig/scripts/python/utils.py +28 -30
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +14 -16
- machineconfig/settings/marimo/marimo.toml +1 -1
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/shells/bash/init.sh +43 -11
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +2 -32
- machineconfig/settings/shells/nushell/env.nu +45 -6
- machineconfig/settings/shells/nushell/init.nu +314 -0
- machineconfig/settings/shells/pwsh/init.ps1 +40 -14
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +14 -5
- machineconfig/settings/shells/zsh/init.sh +17 -19
- machineconfig/settings/television/cable_unix/alias.toml +8 -0
- machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
- machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
- machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
- machineconfig/settings/television/cable_unix/channels.toml +19 -0
- machineconfig/settings/television/cable_unix/dirs.toml +13 -0
- machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
- machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
- machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_unix/env.toml +17 -0
- machineconfig/settings/television/cable_unix/files.toml +11 -0
- machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
- machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
- machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
- machineconfig/settings/television/cable_unix/git-log.toml +12 -0
- machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
- machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
- machineconfig/settings/television/cable_unix/guix.toml +20 -0
- machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
- machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
- machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
- machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
- machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
- machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
- machineconfig/settings/television/cable_unix/procs.toml +20 -0
- machineconfig/settings/television/cable_unix/text.toml +17 -0
- machineconfig/settings/television/cable_unix/tldr.toml +18 -0
- machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
- machineconfig/settings/television/cable_windows/alias.toml +7 -0
- machineconfig/settings/television/cable_windows/dirs.toml +13 -0
- machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
- machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_windows/env.toml +17 -0
- machineconfig/settings/television/cable_windows/files.toml +14 -0
- machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
- machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
- machineconfig/settings/television/cable_windows/git-log.toml +11 -0
- machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
- machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
- machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
- machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
- machineconfig/settings/television/cable_windows/text.toml +17 -0
- machineconfig/settings/yazi/init.lua +61 -0
- machineconfig/settings/yazi/keymap_linux.toml +94 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +84 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/setup_linux/__init__.py +2 -1
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
- machineconfig/setup_mac/__init__.py +2 -3
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_windows/__init__.py +3 -3
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +26 -11
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/utils/accessories.py +7 -4
- machineconfig/utils/code.py +99 -32
- machineconfig/utils/files/ascii_art.py +1 -1
- machineconfig/utils/files/headers.py +3 -2
- machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +42 -99
- machineconfig/utils/installer_utils/installer_cli.py +175 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +36 -85
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +16 -61
- machineconfig/utils/io.py +69 -1
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +33 -18
- machineconfig/utils/options.py +46 -18
- machineconfig/utils/options_tv.py +119 -0
- machineconfig/utils/path_extended.py +44 -95
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +1 -1
- machineconfig/utils/scheduler.py +20 -53
- machineconfig/utils/scheduling.py +0 -2
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/ssh.py +159 -412
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +302 -0
- machineconfig/utils/ssh_utils/utils.py +142 -0
- machineconfig/utils/ssh_utils/wsl.py +210 -0
- machineconfig/utils/terminal.py +1 -0
- machineconfig/utils/upgrade_packages.py +104 -28
- machineconfig/utils/ve.py +12 -4
- machineconfig-7.98.dist-info/METADATA +132 -0
- {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/RECORD +259 -196
- {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/entry_points.txt +4 -1
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzfag +0 -17
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/fzfrga +0 -21
- machineconfig/scripts/linux/mcfgs +0 -38
- machineconfig/scripts/linux/other/share_smb +0 -1
- machineconfig/scripts/linux/skrg +0 -4
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
- machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
- machineconfig/scripts/python/helpers_fire/template.sh +0 -15
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- machineconfig/scripts/windows/mcfgs.ps1 +0 -17
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
- machineconfig/settings/lf/windows/tst.ps1 +0 -1
- machineconfig/settings/yazi/yazi.toml +0 -4
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/others/cli_installation.sh +0 -137
- machineconfig/setup_mac/apps.sh +0 -73
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig-6.82.dist-info/METADATA +0 -82
- /machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- /machineconfig/scripts/python/{helpers_fire → ai/utils}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_fire/agentic_frameworks → helpers_agents}/__init__.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_agents/agentic_frameworks}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
- /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
- /machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
- /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_network/__init__.py} +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/devops_add_identity.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_drive +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_smb +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/{Restore-ThunderbirdProfile.ps1 → windows/mounts/Restore-ThunderbirdProfile.ps1} +0 -0
- /machineconfig/{jobs/installer/powershell_scripts → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/installer/powershell_scripts → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/WHEEL +0 -0
- {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
"""
|
|
3
|
+
#!/usr/bin/env -S uv run
|
|
4
|
+
# /// script
|
|
5
|
+
# requires-python = ">=3.13"
|
|
6
|
+
# dependencies = [
|
|
7
|
+
# "rich",
|
|
8
|
+
# "polars",
|
|
9
|
+
# "typer>=0.12",
|
|
10
|
+
# "loguru",
|
|
11
|
+
# "numpy",
|
|
12
|
+
# ]
|
|
13
|
+
# ///
|
|
14
|
+
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def main():
|
|
19
|
+
"""a,b,c"""
|
|
20
|
+
print("This is a helper function in a.py")
|
|
21
|
+
import numpy as np
|
|
22
|
+
print("Numpy version:", np.__version__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
if __name__ == "__main__":
|
|
26
|
+
main()
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
# import shlex
|
|
4
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def fire_crush(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path) -> str:
|
|
8
|
+
match ai_spec["machine"]:
|
|
9
|
+
case "local":
|
|
10
|
+
cmd = f"""
|
|
11
|
+
crush run {prompt_path}
|
|
12
|
+
"""
|
|
13
|
+
case "docker":
|
|
14
|
+
assert ai_spec["api_spec"]["api_key"] is not None, "API key is required for Crush agent in docker mode."
|
|
15
|
+
json_path = Path(__file__).parent / "fire_crush.json"
|
|
16
|
+
json_template = json_path.read_text(encoding="utf-8")
|
|
17
|
+
api_key = ai_spec["api_spec"]["api_key"]
|
|
18
|
+
json_filled = json_template.replace("{api_key}", api_key)
|
|
19
|
+
json_filled = json_filled.replace("{model}", ai_spec["model"])
|
|
20
|
+
if ai_spec["provider"] == "google":
|
|
21
|
+
provider = "gemini" # weird crush way of naming.
|
|
22
|
+
else:
|
|
23
|
+
provider = ai_spec["provider"]
|
|
24
|
+
json_filled = json_filled.replace("{provider}", provider)
|
|
25
|
+
from machineconfig.utils.accessories import randstr
|
|
26
|
+
temp_config_file_local = Path.home().joinpath("tmp_results/tmp_files/crush_" + randstr(8) + ".json")
|
|
27
|
+
temp_config_file_local.parent.mkdir(parents=True, exist_ok=True)
|
|
28
|
+
Path(temp_config_file_local).write_text(json_filled, encoding="utf-8")
|
|
29
|
+
cmd = f"""
|
|
30
|
+
|
|
31
|
+
docker run -it --rm \
|
|
32
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
33
|
+
-v "{temp_config_file_local}:/root/.local/share/crush/crush.json" \
|
|
34
|
+
-w "/workspace/{repo_root.name}" \
|
|
35
|
+
statistician/machineconfig-ai:latest \
|
|
36
|
+
bash -i -c "source ~/.bashrc && cd /workspace/{repo_root.name} && cat /root/.local/share/crush/crush.json && crush run 'Please act on contents of this prompt ./{prompt_path.relative_to(repo_root)}'"
|
|
37
|
+
|
|
38
|
+
"""
|
|
39
|
+
return cmd
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
# import shlex
|
|
5
|
-
from machineconfig.scripts.python.
|
|
6
|
-
from typing import Optional
|
|
5
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
7
6
|
|
|
8
|
-
def fire_cursor(
|
|
9
|
-
match machine:
|
|
7
|
+
def fire_cursor(ai_spec: AI_SPEC, prompt_path: Path) -> str:
|
|
8
|
+
match ai_spec["machine"]:
|
|
10
9
|
case "local":
|
|
11
10
|
# Export the environment variable so it's available to subshells
|
|
12
11
|
cmd = f"""
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
import shlex
|
|
4
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def fire_gemini(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path) -> str:
|
|
8
|
+
_ = ai_spec["provider"]
|
|
9
|
+
# model = "gemini-2.5-flash-lite"
|
|
10
|
+
# model = None # auto-select
|
|
11
|
+
# if model is None:
|
|
12
|
+
# model_arg = ""
|
|
13
|
+
# else:
|
|
14
|
+
model_arg = f"--model {shlex.quote(ai_spec['model'])}"
|
|
15
|
+
# Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
|
|
16
|
+
safe_path = shlex.quote(str(prompt_path))
|
|
17
|
+
settings_dot_json = {
|
|
18
|
+
"security": {
|
|
19
|
+
"auth": {
|
|
20
|
+
"selectedType": "gemini-api-key"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
# settings_path = Path.home().joinpath(".gemini", "settings.json")
|
|
25
|
+
from machineconfig.utils.accessories import randstr
|
|
26
|
+
settings_tmp_path = Path.home().joinpath("tmp_results", "tmp_files", "agents", f"gemini_settings_{randstr()}.json")
|
|
27
|
+
settings_tmp_path.parent.mkdir(parents=True, exist_ok=True)
|
|
28
|
+
import json
|
|
29
|
+
settings_tmp_path.write_text(json.dumps(settings_dot_json, indent=2), encoding="utf-8")
|
|
30
|
+
match ai_spec["machine"]:
|
|
31
|
+
case "local":
|
|
32
|
+
# Export the environment variable so it's available to subshells
|
|
33
|
+
api_key = ai_spec["api_spec"]["api_key"]
|
|
34
|
+
if api_key is not None:
|
|
35
|
+
define_api_key = f"""export GEMINI_API_KEY="{shlex.quote(api_key)}" """
|
|
36
|
+
else:
|
|
37
|
+
define_api_key = "echo 'Warning: No GEMINI_API_KEY provided, hoping it is set in the environment.'"
|
|
38
|
+
cmd = f"""
|
|
39
|
+
{define_api_key}
|
|
40
|
+
echo "Using Gemini API key $GEMINI_API_KEY"
|
|
41
|
+
gemini {model_arg} --yolo --prompt {safe_path}
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
case "docker":
|
|
45
|
+
api_key = ai_spec["api_spec"]["api_key"]
|
|
46
|
+
assert api_key is not None, "When using docker, api_key must be provided."
|
|
47
|
+
cmd = f"""
|
|
48
|
+
docker run -it --rm \
|
|
49
|
+
-v {settings_tmp_path}:/root/.gemini/settings.json \
|
|
50
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
51
|
+
-w "/workspace/{repo_root.name}" \
|
|
52
|
+
statistician/machineconfig-ai:latest \
|
|
53
|
+
bash -c '. ~/.bashrc; export GEMINI_API_KEY="{api_key}"; gemini --model {shlex.quote(ai_spec['model'])} --yolo {prompt_path.relative_to(repo_root)}'
|
|
54
|
+
"""
|
|
55
|
+
return cmd
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
import shlex
|
|
4
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def fire_qwen(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path, config_dir: str | None) -> str:
|
|
8
|
+
_ = ai_spec["provider"]
|
|
9
|
+
safe_path = shlex.quote(str(prompt_path))
|
|
10
|
+
match ai_spec["machine"]:
|
|
11
|
+
case "local":
|
|
12
|
+
cmd = f"""
|
|
13
|
+
qwen --yolo --prompt {safe_path}
|
|
14
|
+
"""
|
|
15
|
+
case "docker":
|
|
16
|
+
assert config_dir is not None, "When using docker, config_dir must be provided."
|
|
17
|
+
assert Path(config_dir).exists(), f"Provided config_dir {config_dir} does not exist."
|
|
18
|
+
oauth_creds = Path(config_dir).joinpath("oauth_creds.json")
|
|
19
|
+
settings = Path(config_dir).joinpath("settings.json")
|
|
20
|
+
|
|
21
|
+
cmd = f"""
|
|
22
|
+
docker run -it --rm \
|
|
23
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
24
|
+
-v {shlex.quote(str(oauth_creds))}:/root/.qwen/oauth_creds.json \
|
|
25
|
+
-v {shlex.quote(str(settings))}:/root/.qwen/settings.json \
|
|
26
|
+
-w "/workspace/{repo_root.name}" \
|
|
27
|
+
statistician/machineconfig-ai:latest \
|
|
28
|
+
qwen --prompt "$PATH_PROMPT"
|
|
29
|
+
"""
|
|
30
|
+
return cmd
|
|
@@ -2,25 +2,30 @@
|
|
|
2
2
|
import random
|
|
3
3
|
import shlex
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from machineconfig.scripts.python.
|
|
5
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AGENTS, AGENT_NAME_FORMATTER, HOST, PROVIDER, AI_SPEC, API_SPEC
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
def get_api_keys(provider: PROVIDER) -> list[
|
|
8
|
+
def get_api_keys(provider: PROVIDER) -> list[API_SPEC]:
|
|
9
9
|
from machineconfig.utils.io import read_ini
|
|
10
10
|
config = read_ini(Path.home().joinpath(f"dotfiles/creds/llm/{provider}/api_keys.ini"))
|
|
11
|
-
res: list[
|
|
11
|
+
res: list[API_SPEC] = []
|
|
12
12
|
for a_section_name in list(config.sections()):
|
|
13
13
|
a_section = config[a_section_name]
|
|
14
14
|
if "api_key" in a_section:
|
|
15
15
|
api_key = a_section["api_key"].strip()
|
|
16
16
|
if api_key:
|
|
17
|
-
res.append(
|
|
17
|
+
res.append(API_SPEC(
|
|
18
|
+
api_key=api_key,
|
|
19
|
+
api_name=a_section.get("api_name", ""),
|
|
20
|
+
api_label=a_section_name,
|
|
21
|
+
api_account=a_section.get("email", "")
|
|
22
|
+
))
|
|
18
23
|
print(f"Found {len(res)} {provider} API keys configured.")
|
|
19
24
|
return res
|
|
20
25
|
|
|
21
26
|
|
|
22
27
|
def prep_agent_launch(repo_root: Path, agents_dir: Path, prompts_material: list[str], prompt_prefix: str, keep_material_in_separate_file: bool,
|
|
23
|
-
machine: HOST, model:
|
|
28
|
+
machine: HOST, model: str, provider: PROVIDER, agent: AGENTS, *, job_name: str) -> None:
|
|
24
29
|
agents_dir.mkdir(parents=True, exist_ok=True)
|
|
25
30
|
prompt_folder = agents_dir / "prompts"
|
|
26
31
|
prompt_folder.mkdir(parents=True, exist_ok=True)
|
|
@@ -55,6 +60,7 @@ export FIRE_AGENTS_PROMPT_FILE="{prompt_path}"
|
|
|
55
60
|
export FIRE_AGENTS_MATERIAL_FILE="{prompt_material_path}"
|
|
56
61
|
export FIRE_AGENTS_AGENT_LAUNCHER="{agent_cmd_launch_path}"
|
|
57
62
|
|
|
63
|
+
|
|
58
64
|
echo "Sleeping for {random_sleep_time:.2f} seconds to stagger agent startups..."
|
|
59
65
|
sleep {random_sleep_time:.2f}
|
|
60
66
|
echo "--------START OF AGENT OUTPUT--------"
|
|
@@ -65,24 +71,37 @@ sleep 0.1
|
|
|
65
71
|
case "gemini":
|
|
66
72
|
assert provider == "google", "Gemini agent only works with google provider."
|
|
67
73
|
api_keys = get_api_keys(provider="google")
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
74
|
+
api_spec = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
|
|
75
|
+
if api_spec is None:
|
|
76
|
+
raise ValueError("No API keys found for Google Gemini. Please configure them in dotfiles/creds/llm/google/api_keys.ini")
|
|
77
|
+
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model="gemini-2.5-pro", agent=agent, machine=machine, api_spec=api_spec)
|
|
78
|
+
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_gemini import fire_gemini
|
|
79
|
+
cmd = fire_gemini(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
|
|
71
80
|
case "cursor-agent":
|
|
72
|
-
|
|
73
|
-
|
|
81
|
+
api_spec = API_SPEC(api_key=None, api_name="", api_label="", api_account="")
|
|
82
|
+
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_spec=api_spec)
|
|
83
|
+
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_cursor_agents import fire_cursor
|
|
84
|
+
cmd = fire_cursor(ai_spec=ai_spec, prompt_path=prompt_path)
|
|
74
85
|
raise NotImplementedError("Cursor agent is not implemented yet, api key missing")
|
|
75
86
|
case "crush":
|
|
76
|
-
from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_crush import fire_crush
|
|
77
87
|
api_keys = get_api_keys(provider=provider)
|
|
78
|
-
|
|
79
|
-
|
|
88
|
+
api_spec = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
|
|
89
|
+
if api_spec is None:
|
|
90
|
+
raise ValueError("No API keys found for Crush. Please configure them in dotfiles/creds/llm/crush/api_keys.ini")
|
|
91
|
+
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_spec=api_spec)
|
|
92
|
+
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_crush import fire_crush
|
|
93
|
+
cmd = fire_crush(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
|
|
80
94
|
# case "q":
|
|
81
95
|
# from machineconfig.scripts.python.helpers_fire.fire_q import fire_q
|
|
82
96
|
# cmd = fire_q(api_key="", prompt_path=prompt_path, machine=machine)
|
|
83
97
|
case _:
|
|
84
98
|
raise ValueError(f"Unsupported agent type: {agent}")
|
|
99
|
+
cmd_prefix += f"""
|
|
100
|
+
echo "Running with api label: {ai_spec['api_spec']['api_label']}"
|
|
101
|
+
echo "Running with api acount: {ai_spec['api_spec']['api_account']}"
|
|
102
|
+
echo "Running with api name: {ai_spec['api_spec']['api_name']}"
|
|
85
103
|
|
|
104
|
+
"""
|
|
86
105
|
cmd_postfix = """
|
|
87
106
|
sleep 0.1
|
|
88
107
|
echo "---------END OF AGENT OUTPUT---------"
|
|
@@ -19,24 +19,21 @@ from typing import Literal, TypeAlias, TypedDict
|
|
|
19
19
|
AGENTS: TypeAlias = Literal["cursor-agent", "gemini", "qwen-code", "copilot", "crush", "q", "opencode", "kilocode", "cline", "auggie", "warp", "droid"]
|
|
20
20
|
HOST: TypeAlias = Literal["local", "docker"]
|
|
21
21
|
PROVIDER: TypeAlias = Literal["azure", "google", "aws", "openai", "anthropic", "openrouter", "xai"]
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"anthropic": ["anthropic/sonnet-4.5"],
|
|
31
|
-
"openrouter": ["openrouter/supernova"],
|
|
32
|
-
"xai": ["x-ai/grok-4-fast:free"]
|
|
33
|
-
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class API_SPEC(TypedDict):
|
|
25
|
+
api_key: str | None
|
|
26
|
+
api_name: str
|
|
27
|
+
api_label: str
|
|
28
|
+
api_account: str
|
|
29
|
+
|
|
34
30
|
|
|
35
31
|
class AI_SPEC(TypedDict):
|
|
36
32
|
provider: PROVIDER
|
|
37
|
-
model:
|
|
33
|
+
model: str
|
|
38
34
|
agent: AGENTS
|
|
39
|
-
machine: HOST
|
|
35
|
+
machine: HOST
|
|
36
|
+
api_spec: API_SPEC
|
|
40
37
|
|
|
41
38
|
|
|
42
39
|
AGENT_NAME_FORMATTER = "agent_{idx}_cmd.sh" # e.g., agent_0_cmd.sh
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
Please inspect the following python files, and document which methods of PathExtended class have been used (if the class is used at all)
|
|
3
|
+
please create a file next to this file on same dir called result.md and put your results in it.
|
|
4
|
+
Like this:
|
|
5
|
+
* File_NAME
|
|
6
|
+
* method1
|
|
7
|
+
* method2
|
|
8
|
+
|
|
9
|
+
* File_NAME
|
|
10
|
+
* method x
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
|
|
2
|
+
#!/bin/bash
|
|
3
|
+
# set -e # Exit immediately if a command exits with a non-zero status.
|
|
4
|
+
|
|
5
|
+
REPO_ROOT="$HOME/code/machineconfig"
|
|
6
|
+
|
|
7
|
+
JOB_NAME="agentsTrial"
|
|
8
|
+
CONTEXT_PATH="$REPO_ROOT/.ai/agents/files.md"
|
|
9
|
+
PROMPT_PATH="$REPO_ROOT/.ai/agents/prompt.txt"
|
|
10
|
+
AGENTS_DIR="$REPO_ROOT/.ai/agents/$JOB_NAME"
|
|
11
|
+
|
|
12
|
+
agents create \
|
|
13
|
+
--agents crush \
|
|
14
|
+
--host docker \
|
|
15
|
+
--model gemini-2.5-pro \
|
|
16
|
+
--provider google \
|
|
17
|
+
--agent-load 5 \
|
|
18
|
+
--context-path $CONTEXT_PATH \
|
|
19
|
+
--prompt-path $PROMPT_PATH \
|
|
20
|
+
--job-name $JOB_NAME \
|
|
21
|
+
--agents-dir $AGENTS_DIR
|
|
22
|
+
|
|
23
|
+
sessions balance-load "$AGENTS_DIR/layout.json" \
|
|
24
|
+
--max-threshold 4 \
|
|
25
|
+
--breaking-method moreLayouts \
|
|
26
|
+
--threshold-type number \
|
|
27
|
+
--output-path "$AGENTS_DIR/layout_balanced.json"
|
|
28
|
+
|
|
29
|
+
sessions run "$AGENTS_DIR/layout_balanced.json" --kill-upon-completion
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"
|
|
@@ -2,26 +2,24 @@
|
|
|
2
2
|
CC
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
6
|
-
from tenacity import retry, stop_after_attempt, wait_chain, wait_fixed
|
|
7
|
-
import getpass
|
|
8
|
-
import os
|
|
9
5
|
from typing import Optional, Annotated
|
|
10
|
-
|
|
11
6
|
import typer
|
|
12
7
|
|
|
13
|
-
from
|
|
14
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_helpers import ArgsDefaults, Args
|
|
15
|
-
from rich.console import Console
|
|
16
|
-
from rich.panel import Panel
|
|
17
|
-
from rich.progress import Progress
|
|
18
|
-
from machineconfig.utils.accessories import pprint
|
|
8
|
+
from tenacity import retry, stop_after_attempt, wait_chain, wait_fixed
|
|
19
9
|
|
|
20
|
-
console = Console()
|
|
21
10
|
|
|
22
11
|
|
|
23
12
|
@retry(stop=stop_after_attempt(3), wait=wait_chain(wait_fixed(1), wait_fixed(4), wait_fixed(9)))
|
|
24
13
|
def get_securely_shared_file(url: Optional[str] = None, folder: Optional[str] = None) -> None:
|
|
14
|
+
from rich.console import Console
|
|
15
|
+
from rich.panel import Panel
|
|
16
|
+
from rich.progress import Progress
|
|
17
|
+
import getpass
|
|
18
|
+
import os
|
|
19
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
20
|
+
|
|
21
|
+
console = Console()
|
|
22
|
+
|
|
25
23
|
console.print(Panel("🚀 Secure File Downloader", title="[bold blue]Downloader[/bold blue]", border_style="blue"))
|
|
26
24
|
|
|
27
25
|
folder_obj = PathExtended.cwd() if folder is None else PathExtended(folder)
|
|
@@ -62,21 +60,30 @@ def get_securely_shared_file(url: Optional[str] = None, folder: Optional[str] =
|
|
|
62
60
|
tmp_folder.delete()
|
|
63
61
|
|
|
64
62
|
|
|
63
|
+
|
|
65
64
|
def main(
|
|
66
65
|
source: Annotated[str, typer.Argument(help="📂 file/folder path to be taken from here.")],
|
|
67
66
|
target: Annotated[str, typer.Argument(help="🎯 file/folder path to be be sent to here.")],
|
|
68
|
-
overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="✍️ Overwrite existing file.")] =
|
|
69
|
-
share: Annotated[bool, typer.Option("--share", "-s", help="🔗 Share file / directory")] =
|
|
70
|
-
rel2home: Annotated[bool, typer.Option("--relative2home", "-r", help="🏠 Relative to `myhome` folder")] =
|
|
71
|
-
root: Annotated[Optional[str], typer.Option("--root", "-R", help="🌳 Remote root. None is the default, unless rel2home is raied, making the default `myhome`.")] =
|
|
72
|
-
key: Annotated[Optional[str], typer.Option("--key", "-k", help="🔑 Key for encryption")] =
|
|
73
|
-
pwd: Annotated[Optional[str], typer.Option("--password", "-p", help="🔒 Password for encryption")] =
|
|
74
|
-
encrypt: Annotated[bool, typer.Option("--encrypt", "-e", help="🔐 Encrypt before sending.")] =
|
|
75
|
-
zip_: Annotated[bool, typer.Option("--zip", "-z", help="📦 unzip after receiving.")] =
|
|
76
|
-
os_specific: Annotated[bool, typer.Option("--os-specific", "-O", help="💻 choose path specific for this OS.")] =
|
|
67
|
+
overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="✍️ Overwrite existing file.")] = False,
|
|
68
|
+
share: Annotated[bool, typer.Option("--share", "-s", help="🔗 Share file / directory")] = False,
|
|
69
|
+
rel2home: Annotated[bool, typer.Option("--relative2home", "-r", help="🏠 Relative to `myhome` folder")] = False,
|
|
70
|
+
root: Annotated[Optional[str], typer.Option("--root", "-R", help="🌳 Remote root. None is the default, unless rel2home is raied, making the default `myhome`.")] = None,
|
|
71
|
+
key: Annotated[Optional[str], typer.Option("--key", "-k", help="🔑 Key for encryption")] = None,
|
|
72
|
+
pwd: Annotated[Optional[str], typer.Option("--password", "-p", help="🔒 Password for encryption")] = None,
|
|
73
|
+
encrypt: Annotated[bool, typer.Option("--encrypt", "-e", help="🔐 Encrypt before sending.")] = False,
|
|
74
|
+
zip_: Annotated[bool, typer.Option("--zip", "-z", help="📦 unzip after receiving.")] = False,
|
|
75
|
+
os_specific: Annotated[bool, typer.Option("--os-specific", "-O", help="💻 choose path specific for this OS.")] = False,
|
|
77
76
|
config: Annotated[Optional[str], typer.Option("--config", "-c", help="⚙️ path to cloud.json file.")] = None,
|
|
78
77
|
) -> None:
|
|
79
78
|
"""📤 Upload or 📥 Download files/folders to/from cloud storage services like Google Drive, Dropbox, OneDrive, etc."""
|
|
79
|
+
from rich.console import Console
|
|
80
|
+
from rich.panel import Panel
|
|
81
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
82
|
+
from machineconfig.scripts.python.helpers_cloud.helpers2 import parse_cloud_source_target
|
|
83
|
+
from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args
|
|
84
|
+
from machineconfig.utils.accessories import pprint
|
|
85
|
+
|
|
86
|
+
console = Console()
|
|
80
87
|
console.print(Panel("☁️ Cloud Copy Utility", title="[bold blue]Cloud Copy[/bold blue]", border_style="blue", width=152))
|
|
81
88
|
args_obj = Args(
|
|
82
89
|
overwrite=overwrite,
|
|
@@ -12,6 +12,7 @@ from dataclasses import dataclass
|
|
|
12
12
|
console = Console()
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
|
|
15
16
|
class ArgsDefaults:
|
|
16
17
|
# source: str=None
|
|
17
18
|
# target: str=None
|
|
@@ -25,7 +26,6 @@ class ArgsDefaults:
|
|
|
25
26
|
key = None
|
|
26
27
|
pwd = None
|
|
27
28
|
|
|
28
|
-
|
|
29
29
|
@dataclass
|
|
30
30
|
class Args:
|
|
31
31
|
cloud: Optional[str] = None
|
|
@@ -1,32 +1,27 @@
|
|
|
1
1
|
"""Cloud mount script"""
|
|
2
2
|
|
|
3
|
-
from machineconfig.utils.options import choose_from_options
|
|
4
|
-
from machineconfig.utils.io import read_ini
|
|
5
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
6
|
-
|
|
7
|
-
import platform
|
|
8
|
-
from typing import Optional, Annotated
|
|
9
3
|
import typer
|
|
10
|
-
from
|
|
11
|
-
from rich.panel import Panel
|
|
12
|
-
|
|
13
|
-
console = Console()
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
DEFAULT_MOUNT = "~/data/rclone"
|
|
4
|
+
from typing import Optional, Annotated
|
|
17
5
|
|
|
18
6
|
|
|
19
7
|
def get_rclone_config():
|
|
8
|
+
from machineconfig.utils.io import read_ini
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
import platform
|
|
20
11
|
if platform.system() == "Windows":
|
|
21
|
-
config = read_ini(
|
|
12
|
+
config = read_ini(Path.home().joinpath("AppData/Roaming/rclone/rclone.conf"))
|
|
22
13
|
elif platform.system() in ["Linux", "Darwin"]:
|
|
23
|
-
config = read_ini(
|
|
14
|
+
config = read_ini(Path.home().joinpath(".config/rclone/rclone.conf"))
|
|
24
15
|
else:
|
|
25
16
|
raise ValueError("unsupported platform")
|
|
26
17
|
return config
|
|
27
18
|
|
|
28
19
|
|
|
29
20
|
def get_mprocs_mount_txt(cloud: str, rclone_cmd: str, cloud_brand: str): # cloud_brand = config[cloud]["type"]
|
|
21
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
22
|
+
import platform
|
|
23
|
+
DEFAULT_MOUNT = "~/data/rclone"
|
|
24
|
+
|
|
30
25
|
header = f"{' ' + cloud + ' | ' + cloud_brand + ' '}".center(50, "=")
|
|
31
26
|
if platform.system() == "Windows":
|
|
32
27
|
sub_text_path = PathExtended.tmpfile(suffix=".ps1")
|
|
@@ -57,6 +52,13 @@ def mount(
|
|
|
57
52
|
destination: Annotated[Optional[str], typer.Option(help="destination to mount")] = None,
|
|
58
53
|
network: Annotated[Optional[str], typer.Option(help="mount network drive")] = None,
|
|
59
54
|
) -> None:
|
|
55
|
+
from machineconfig.utils.options import choose_from_options
|
|
56
|
+
from pathlib import Path
|
|
57
|
+
import platform
|
|
58
|
+
from rich.console import Console
|
|
59
|
+
from rich.panel import Panel
|
|
60
|
+
console = Console()
|
|
61
|
+
DEFAULT_MOUNT = "~/data/rclone"
|
|
60
62
|
|
|
61
63
|
# draw header box dynamically
|
|
62
64
|
title = "☁️ Cloud Mount Utility"
|
|
@@ -73,9 +75,9 @@ def mount(
|
|
|
73
75
|
|
|
74
76
|
if network is None:
|
|
75
77
|
if destination is None:
|
|
76
|
-
mount_loc =
|
|
78
|
+
mount_loc = Path(DEFAULT_MOUNT).expanduser().joinpath(cloud)
|
|
77
79
|
else:
|
|
78
|
-
mount_loc =
|
|
80
|
+
mount_loc = Path(destination)
|
|
79
81
|
|
|
80
82
|
mount_info = f"📂 Mount location: {mount_loc}"
|
|
81
83
|
console.print(Panel(mount_info, border_style="blue"))
|
|
@@ -2,16 +2,9 @@
|
|
|
2
2
|
TODO: use typer or typed-argument-parser to parse args
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from machineconfig.scripts.python.helpers_cloud.helpers2 import parse_cloud_source_target
|
|
6
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args
|
|
7
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_mount import get_mprocs_mount_txt
|
|
8
5
|
|
|
9
6
|
from typing import Annotated, Optional
|
|
10
7
|
import typer
|
|
11
|
-
from rich.console import Console
|
|
12
|
-
from rich.panel import Panel
|
|
13
|
-
|
|
14
|
-
console = Console()
|
|
15
8
|
|
|
16
9
|
|
|
17
10
|
def main(
|
|
@@ -27,6 +20,14 @@ def main(
|
|
|
27
20
|
delete: Annotated[bool, typer.Option("--delete", "-D", help="Delete files in remote that are not in local.")] = False,
|
|
28
21
|
verbose: Annotated[bool, typer.Option("--verbose", "-v", help="Verbosity of mprocs to show details of syncing.")] = False,
|
|
29
22
|
) -> None:
|
|
23
|
+
|
|
24
|
+
from machineconfig.scripts.python.helpers_cloud.helpers2 import parse_cloud_source_target
|
|
25
|
+
from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args
|
|
26
|
+
from machineconfig.scripts.python.helpers_cloud.cloud_mount import get_mprocs_mount_txt
|
|
27
|
+
from rich.console import Console
|
|
28
|
+
from rich.panel import Panel
|
|
29
|
+
console = Console()
|
|
30
|
+
|
|
30
31
|
title = "☁️ Cloud Sync Utility"
|
|
31
32
|
console.print(Panel(title, title_align="left", border_style="blue"))
|
|
32
33
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
def
|
|
3
|
+
def get_read_python_file_pycode(path: str, title: str):
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
print("Reading code from path:", path)
|
|
6
6
|
pycode = Path(path).read_text(encoding="utf-8")
|
|
@@ -20,9 +20,9 @@ def get_read_data_pycode(path: str):
|
|
|
20
20
|
from rich.panel import Panel
|
|
21
21
|
from rich.text import Text
|
|
22
22
|
from rich.console import Console
|
|
23
|
-
from
|
|
23
|
+
from pathlib import Path
|
|
24
24
|
console = Console()
|
|
25
|
-
p =
|
|
25
|
+
p = Path(path).absolute()
|
|
26
26
|
try:
|
|
27
27
|
from machineconfig.utils.files.read import Read
|
|
28
28
|
from machineconfig.utils.accessories import pprint
|
|
@@ -95,13 +95,12 @@ def main(
|
|
|
95
95
|
if md_file.name != "slides.md":
|
|
96
96
|
SLIDEV_REPO.joinpath(md_file.name).with_name(name="slides.md", inplace=True, overwrite=True)
|
|
97
97
|
|
|
98
|
-
import
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
local_ip_v4 = socket.gethostbyname(socket.gethostname())
|
|
98
|
+
import machineconfig.scripts.python.helpers_network.address as helper
|
|
99
|
+
res = helper.select_lan_ipv4(prefer_vpn=False)
|
|
100
|
+
if res is None:
|
|
101
|
+
print("❌ Error: Could not determine local LAN IPv4 address for presentation.")
|
|
102
|
+
raise typer.Exit(code=1)
|
|
103
|
+
local_ip_v4 = res
|
|
105
104
|
|
|
106
105
|
print("🌐 Presentation will be served at:")
|
|
107
106
|
print(f" - http://{platform.node()}:{port}")
|