machineconfig 6.82__py3-none-any.whl → 8.51__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/remote/run_cluster.py +1 -1
- machineconfig/cluster/remote/run_remote.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +29 -15
- machineconfig/cluster/sessions_managers/wt_local.py +17 -222
- machineconfig/cluster/sessions_managers/wt_local_manager.py +56 -194
- 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.py +1 -1
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +4 -2
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
- machineconfig/jobs/installer/checks/check_installations.py +133 -0
- machineconfig/jobs/installer/checks/install_utils.py +132 -0
- machineconfig/jobs/installer/checks/report_utils.py +39 -0
- machineconfig/jobs/installer/checks/vt_utils.py +89 -0
- machineconfig/jobs/installer/installer_data.json +1500 -310
- machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +62 -91
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -3
- machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
- machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +14 -9
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/python_scripts/hx.py +214 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +32 -26
- machineconfig/jobs/installer/python_scripts/sysabc.py +145 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
- machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
- machineconfig/jobs/installer/python_scripts/yazi.py +139 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
- machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
- machineconfig/jobs/scripts_dynamic/a.py +428 -0
- machineconfig/logger.py +1 -2
- machineconfig/profile/create_helper.py +56 -18
- machineconfig/profile/create_links.py +79 -21
- machineconfig/profile/create_links_export.py +87 -36
- machineconfig/profile/create_shell_profile.py +92 -127
- machineconfig/profile/mapper_data.toml +45 -0
- machineconfig/profile/mapper_dotfiles.toml +249 -0
- 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 +85 -165
- machineconfig/scripts/python/ai/initai.py +4 -2
- machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
- 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/scripts/lint_and_type_check.ps1 +2 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
- machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
- machineconfig/scripts/python/ai/solutions/cline/cline.py +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 +6 -6
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +33 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
- machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
- machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +13 -5
- machineconfig/scripts/python/cloud.py +58 -11
- machineconfig/scripts/python/croshell.py +10 -162
- machineconfig/scripts/python/devops.py +73 -36
- machineconfig/scripts/python/devops_navigator.py +16 -6
- machineconfig/scripts/python/fire_jobs.py +8 -222
- machineconfig/scripts/python/ftpx.py +7 -200
- machineconfig/scripts/python/graph/cli_graph.json +8743 -0
- machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
- machineconfig/scripts/python/helpers/helper_env/env_manager_tui.py +204 -0
- machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_launch.py +38 -16
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_helper_types.py +11 -14
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/templates/template.sh +34 -0
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +32 -25
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +29 -22
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +9 -8
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +3 -3
- machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +12 -12
- machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +67 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_nw.py +201 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_self.py +197 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_share_file.py +151 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_share_server.py +125 -0
- machineconfig/scripts/python/{helpers_devops/cli_terminal.py → helpers/helpers_devops/cli_share_terminal.py} +26 -22
- machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +17 -23
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +78 -71
- machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +4 -4
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers/helpers_fire_command/file_wrangler.py} +57 -20
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
- machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
- machineconfig/scripts/{linux → python/helpers/helpers_msearch/scripts_linux}/fzfg +6 -5
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
- machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
- machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers/helpers_network/address.py +174 -0
- machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
- machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_ssh.py +3 -3
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
- machineconfig/scripts/python/{nw → helpers/helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -1
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +159 -48
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +4 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -12
- machineconfig/scripts/python/helpers/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/{helpers_repos/count_lines.py → helpers/helpers_repos/repo_analyzer_2.py} +156 -191
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
- machineconfig/scripts/python/helpers/helpers_search/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/helpers_search/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/helpers_search/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
- machineconfig/scripts/python/helpers/helpers_search/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
- machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +20 -14
- machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
- machineconfig/scripts/python/helpers/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers/helpers_utils/python.py +210 -0
- machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
- machineconfig/scripts/python/mcfg_entry.py +143 -0
- machineconfig/scripts/python/msearch.py +26 -0
- machineconfig/scripts/python/sessions.py +69 -135
- machineconfig/scripts/python/terminal.py +58 -0
- machineconfig/scripts/python/utils.py +115 -38
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/atuin/config.toml +294 -0
- machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -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/linters/.ruff.toml +2 -1
- machineconfig/settings/marimo/marimo.toml +1 -1
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
- machineconfig/settings/shells/bash/init.sh +47 -12
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +25 -33
- machineconfig/settings/shells/nushell/env.nu +21 -8
- machineconfig/settings/shells/nushell/init.nu +138 -0
- machineconfig/settings/shells/pwsh/init.ps1 +111 -17
- machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +6 -1
- machineconfig/settings/shells/wt/settings.json +27 -18
- machineconfig/settings/shells/zsh/init.sh +42 -23
- 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/tv/config.toml +234 -0
- machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
- machineconfig/settings/wsl/.wslconfig +5 -30
- machineconfig/settings/wt/__init__.py +0 -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 +94 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +40 -9
- machineconfig/settings/zellij/layouts/st2.kdl +1 -1
- machineconfig/setup_linux/__init__.py +2 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +34 -0
- machineconfig/setup_mac/__init__.py +1 -4
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_windows/__init__.py +2 -5
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -12
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +31 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/type_hinting/sql/__init__.py +1 -0
- machineconfig/type_hinting/sql/base.py +216 -0
- machineconfig/type_hinting/sql/core_schema.py +64 -0
- machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
- machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
- machineconfig/type_hinting/typedict/__init__.py +1 -0
- machineconfig/type_hinting/typedict/ast_utils.py +130 -0
- machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
- machineconfig/type_hinting/typedict/generators.py +231 -0
- machineconfig/type_hinting/typedict/polars_schema.py +24 -0
- machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
- machineconfig/utils/accessories.py +31 -4
- machineconfig/utils/code.py +163 -51
- machineconfig/utils/files/ascii_art.py +11 -15
- machineconfig/utils/files/headers.py +6 -7
- machineconfig/utils/files/read.py +8 -1
- machineconfig/utils/installer_utils/github_release_bulk.py +95 -138
- machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +53 -102
- machineconfig/utils/installer_utils/installer_cli.py +161 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +42 -91
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +20 -65
- machineconfig/utils/io.py +94 -9
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +38 -21
- machineconfig/utils/options.py +81 -23
- machineconfig/utils/options_utils/__init__.py +0 -0
- machineconfig/utils/options_utils/options_tv_linux.py +211 -0
- machineconfig/utils/options_utils/options_tv_windows.py +88 -0
- machineconfig/utils/options_utils/tv_options.py +37 -0
- machineconfig/utils/path_extended.py +52 -102
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +1 -1
- machineconfig/utils/scheduler.py +26 -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/source_of_truth.py +6 -1
- machineconfig/utils/ssh.py +216 -419
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +116 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +158 -0
- machineconfig/utils/ssh_utils/wsl.py +147 -0
- machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
- machineconfig/utils/terminal.py +1 -0
- machineconfig/utils/upgrade_packages.py +107 -35
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.51.dist-info/METADATA +140 -0
- machineconfig-8.51.dist-info/RECORD +543 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/entry_points.txt +4 -1
- machineconfig/jobs/installer/check_installations.py +0 -248
- machineconfig/jobs/installer/custom/hx.py +0 -140
- 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/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/profile/backup.toml +0 -49
- machineconfig/profile/mapper.toml +0 -256
- 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/other/switch_ip +0 -20
- 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_devops/cli_config.py +0 -120
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -77
- machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
- machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -73
- machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -181
- machineconfig/scripts/python/helpers_devops/cli_self.py +0 -122
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +0 -104
- machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -221
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
- 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_navigator/__init__.py +0 -20
- machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
- machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -588
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
- machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -76
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/mcfg.py +0 -48
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/devops_add_identity.py +0 -82
- machineconfig/scripts/python/nw/devops_add_ssh_key.py +0 -134
- machineconfig/scripts/python/nw/ssh_debug_linux.py +0 -391
- machineconfig/scripts/python/nw/ssh_debug_windows.py +0 -338
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- 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/scripts/windows/mounts/mount_ssh.ps1 +0 -13
- 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_linux/others/mint_keyboard_shortcuts.sh +0 -30
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_mac/apps.sh +0 -73
- machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig/utils/tst.py +0 -20
- machineconfig-6.82.dist-info/METADATA +0 -82
- machineconfig-6.82.dist-info/RECORD +0 -441
- machineconfig/jobs/installer/{custom_dev → checks}/__init__.py +0 -0
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- machineconfig/{scripts/python/helpers_cloud → jobs/installer/python_scripts}/__init__.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
- machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
- machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
- machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
- machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
- machineconfig/scripts/python/{helpers_croshell → ai/utils}/__init__.py +0 -0
- machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
- machineconfig/scripts/python/{helpers_devops → graph}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_devops/themes → helpers}/__init__.py +0 -0
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents/templates}/template.ps1 +0 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_devops}/__init__.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command/fire_jobs_streamlit_helper.py → helpers/helpers_fire_command/f.py} +0 -0
- /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
- /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers/helpers_network/__init__.py} +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/WHEEL +0 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"""Pure Python implementations for agents commands - no typer dependencies."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional, cast
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def agents_create(
|
|
8
|
+
agent: str,
|
|
9
|
+
host: str,
|
|
10
|
+
model: str,
|
|
11
|
+
provider: str,
|
|
12
|
+
context_path: Optional[str],
|
|
13
|
+
separator: str,
|
|
14
|
+
agent_load: int,
|
|
15
|
+
prompt: Optional[str],
|
|
16
|
+
prompt_path: Optional[str],
|
|
17
|
+
job_name: str,
|
|
18
|
+
separate: bool,
|
|
19
|
+
output_path: Optional[str],
|
|
20
|
+
agents_dir: Optional[str],
|
|
21
|
+
) -> None:
|
|
22
|
+
"""Create agents layout file, ready to run."""
|
|
23
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_help_launch import prep_agent_launch, get_agents_launch_layout
|
|
24
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_load_balancer import chunk_prompts
|
|
25
|
+
from machineconfig.utils.accessories import get_repo_root, randstr
|
|
26
|
+
import json
|
|
27
|
+
|
|
28
|
+
prompt_options = [prompt, prompt_path]
|
|
29
|
+
provided_prompt = [opt for opt in prompt_options if opt is not None]
|
|
30
|
+
if len(provided_prompt) != 1:
|
|
31
|
+
raise ValueError("Exactly one of --prompt or --prompt-path must be provided")
|
|
32
|
+
|
|
33
|
+
repo_root = get_repo_root(Path.cwd())
|
|
34
|
+
if repo_root is None:
|
|
35
|
+
raise RuntimeError("💥 Could not determine the repository root. Please run this script from within a git repository.")
|
|
36
|
+
|
|
37
|
+
print(f"Operating @ {repo_root}")
|
|
38
|
+
|
|
39
|
+
if context_path is None:
|
|
40
|
+
context_path_resolved = Path(repo_root) / ".ai" / "todo"
|
|
41
|
+
else:
|
|
42
|
+
context_path_resolved = Path(context_path).expanduser().resolve()
|
|
43
|
+
|
|
44
|
+
if not context_path_resolved.exists():
|
|
45
|
+
raise ValueError(f"Path does not exist: {context_path_resolved}")
|
|
46
|
+
|
|
47
|
+
if context_path_resolved.is_file():
|
|
48
|
+
prompt_material_re_splitted = chunk_prompts(context_path_resolved, tasks_per_prompt=agent_load, joiner=separator)
|
|
49
|
+
elif context_path_resolved.is_dir():
|
|
50
|
+
files = [f for f in context_path_resolved.rglob("*") if f.is_file()]
|
|
51
|
+
if not files:
|
|
52
|
+
raise ValueError(f"No files found in directory: {context_path_resolved}")
|
|
53
|
+
concatenated = separator.join(f.read_text(encoding="utf-8") for f in files)
|
|
54
|
+
prompt_material_re_splitted = [concatenated]
|
|
55
|
+
else:
|
|
56
|
+
raise ValueError(f"Path is neither file nor directory: {context_path_resolved}")
|
|
57
|
+
|
|
58
|
+
if prompt_path is not None:
|
|
59
|
+
prompt_prefix = Path(prompt_path).read_text(encoding="utf-8")
|
|
60
|
+
else:
|
|
61
|
+
prompt_prefix = cast(str, prompt)
|
|
62
|
+
|
|
63
|
+
agent_selected = agent
|
|
64
|
+
if agents_dir is None:
|
|
65
|
+
agents_dir_obj = Path(repo_root) / ".ai" / f"tmp_prompts/{job_name}_{randstr()}"
|
|
66
|
+
else:
|
|
67
|
+
import shutil
|
|
68
|
+
if Path(agents_dir).exists():
|
|
69
|
+
shutil.rmtree(agents_dir)
|
|
70
|
+
agents_dir_obj = Path(agents_dir)
|
|
71
|
+
|
|
72
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import HOST, AGENTS, PROVIDER
|
|
73
|
+
prep_agent_launch(
|
|
74
|
+
repo_root=repo_root,
|
|
75
|
+
agents_dir=agents_dir_obj,
|
|
76
|
+
prompts_material=prompt_material_re_splitted,
|
|
77
|
+
keep_material_in_separate_file=separate,
|
|
78
|
+
prompt_prefix=prompt_prefix,
|
|
79
|
+
machine=cast(HOST, host),
|
|
80
|
+
agent=cast(AGENTS, agent_selected),
|
|
81
|
+
model=model,
|
|
82
|
+
provider=cast(PROVIDER, provider),
|
|
83
|
+
job_name=job_name,
|
|
84
|
+
)
|
|
85
|
+
layoutfile = get_agents_launch_layout(session_root=agents_dir_obj)
|
|
86
|
+
|
|
87
|
+
layout_output_path = Path(output_path) if output_path is not None else agents_dir_obj / "layout.json"
|
|
88
|
+
layout_output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
89
|
+
layout_output_path.write_text(data=json.dumps(layoutfile, indent=4), encoding="utf-8")
|
|
90
|
+
print(f"Created agents in {agents_dir_obj}")
|
|
91
|
+
print(f"Created layout in {layout_output_path}")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def collect(agent_dir: str, output_path: str, separator: str) -> None:
|
|
95
|
+
"""Collect all material files from an agent directory and concatenate them."""
|
|
96
|
+
if not Path(agent_dir).exists() or not Path(agent_dir).is_dir():
|
|
97
|
+
raise ValueError(f"Agent directory does not exist or is not a directory: {agent_dir}")
|
|
98
|
+
|
|
99
|
+
prompts_dir = Path(agent_dir) / "prompts"
|
|
100
|
+
if not prompts_dir.exists():
|
|
101
|
+
raise ValueError(f"Prompts directory not found: {prompts_dir}")
|
|
102
|
+
|
|
103
|
+
material_files: list[Path] = []
|
|
104
|
+
for agent_subdir in prompts_dir.iterdir():
|
|
105
|
+
if agent_subdir.is_dir() and agent_subdir.name.startswith("agent_"):
|
|
106
|
+
material_file = agent_subdir / f"{agent_subdir.name}_material.txt"
|
|
107
|
+
if material_file.exists():
|
|
108
|
+
material_files.append(material_file)
|
|
109
|
+
|
|
110
|
+
if not material_files:
|
|
111
|
+
print("No material files found in the agent directory.")
|
|
112
|
+
return
|
|
113
|
+
|
|
114
|
+
material_files.sort(key=lambda x: int(x.parent.name.split("_")[-1]))
|
|
115
|
+
|
|
116
|
+
concatenated_content: list[str] = []
|
|
117
|
+
for material_file in material_files:
|
|
118
|
+
content = material_file.read_text(encoding="utf-8")
|
|
119
|
+
concatenated_content.append(content)
|
|
120
|
+
|
|
121
|
+
result = separator.join(concatenated_content)
|
|
122
|
+
|
|
123
|
+
Path(output_path).parent.mkdir(parents=True, exist_ok=True)
|
|
124
|
+
Path(output_path).write_text(result, encoding="utf-8")
|
|
125
|
+
print(f"Concatenated material written to {output_path}")
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def make_agents_command_template() -> None:
|
|
129
|
+
"""Create a template for fire agents."""
|
|
130
|
+
from platform import system
|
|
131
|
+
import machineconfig.scripts.python.helpers.helpers_agents as module
|
|
132
|
+
|
|
133
|
+
if system() == "Linux" or system() == "Darwin":
|
|
134
|
+
template_path = Path(module.__file__).parent / "templates/template.sh"
|
|
135
|
+
elif system() == "Windows":
|
|
136
|
+
template_path = Path(module.__file__).parent / "templates/template.ps1"
|
|
137
|
+
else:
|
|
138
|
+
raise ValueError(f"Unsupported OS: {system()}")
|
|
139
|
+
|
|
140
|
+
from machineconfig.utils.accessories import get_repo_root
|
|
141
|
+
repo_root = get_repo_root(Path.cwd())
|
|
142
|
+
if repo_root is None:
|
|
143
|
+
raise RuntimeError("💥 Could not determine the repository root. Please run this script from within a git repository.")
|
|
144
|
+
|
|
145
|
+
save_path_root = repo_root / ".ai" / "agents"
|
|
146
|
+
|
|
147
|
+
save_path_root.mkdir(parents=True, exist_ok=True)
|
|
148
|
+
save_path_root.joinpath("template_fire_agents.sh").write_text(template_path.read_text(encoding="utf-8"), encoding="utf-8")
|
|
149
|
+
print(f"Template bash script written to {save_path_root}")
|
|
150
|
+
|
|
151
|
+
from machineconfig.scripts.python.ai.utils.generate_files import make_todo_files
|
|
152
|
+
make_todo_files(
|
|
153
|
+
pattern=".py", repo=str(repo_root), strategy="name", output_path=str(save_path_root / "files.md"), split_every=None, split_to=None
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
prompt_path = Path(module.__file__).parent / "templates/prompt.txt"
|
|
157
|
+
save_path_root.joinpath("prompt.txt").write_text(prompt_path.read_text(encoding="utf-8"), encoding="utf-8")
|
|
158
|
+
print(f"Prompt template written to {save_path_root}")
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def init_config(root: Optional[str]) -> None:
|
|
162
|
+
"""Initialize AI configurations in the current repository."""
|
|
163
|
+
from machineconfig.scripts.python.ai.initai import add_ai_configs
|
|
164
|
+
if root is None:
|
|
165
|
+
repo_root = Path.cwd()
|
|
166
|
+
else:
|
|
167
|
+
repo_root = Path(root).expanduser().resolve()
|
|
168
|
+
add_ai_configs(repo_root=repo_root)
|
machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_launch.py
RENAMED
|
@@ -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.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.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.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.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
|
-
# from machineconfig.scripts.python.helpers_fire.fire_q import fire_q
|
|
95
|
+
# from machineconfig.scripts.python.helpers.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}")
|
|
85
|
-
|
|
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']}"
|
|
103
|
+
echo "Running with api key: {ai_spec['api_spec']['api_key']}"
|
|
104
|
+
"""
|
|
86
105
|
cmd_postfix = """
|
|
87
106
|
sleep 0.1
|
|
88
107
|
echo "---------END OF AGENT OUTPUT---------"
|
|
@@ -93,10 +112,13 @@ echo "---------END OF AGENT OUTPUT---------"
|
|
|
93
112
|
|
|
94
113
|
def get_agents_launch_layout(session_root: Path):
|
|
95
114
|
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig, LayoutsFile
|
|
96
|
-
|
|
97
115
|
tab_config: list[TabConfig] = []
|
|
98
116
|
prompt_root = session_root / "prompts"
|
|
99
117
|
all_dirs_under_prompts = [d for d in prompt_root.iterdir() if d.is_dir()]
|
|
118
|
+
|
|
119
|
+
import re
|
|
120
|
+
all_dirs_under_prompts = sorted(all_dirs_under_prompts, key=lambda path: [int(text) if text.isdigit() else text.lower() for text in re.split(r'(\d+)', path.name)])
|
|
121
|
+
print(all_dirs_under_prompts)
|
|
100
122
|
for a_prompt_dir in all_dirs_under_prompts:
|
|
101
123
|
idx = a_prompt_dir.name.split("_")[-1] # e.g., agent_0 -> 0
|
|
102
124
|
agent_cmd_path = a_prompt_dir / AGENT_NAME_FORMATTER.format(idx=idx)
|
machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_helper_types.py
RENAMED
|
@@ -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 @@
|
|
|
1
|
+
optional_usage_analytics: false
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"""
|
|
2
|
+
|
|
3
|
+
create 18 tasks one per cli
|
|
4
|
+
in each one, you do comprehensive search on internet on how to set up the cli/extension or whatever so we get max privacy and security (nothing shared everything is declined and is on the safe side)
|
|
5
|
+
this is a moving space, everyday, there are new versions, new configs, new settings, new policies, new rules, new terms of service, new eula, new privacy policies etc etc
|
|
6
|
+
so please search for latest and don't be complacent with the work done so far.
|
|
7
|
+
|
|
8
|
+
do it one by one, don't research and implement next before finishing the task before it.
|
|
9
|
+
|
|
10
|
+
I provided gemini cli solution as a reference (feel free to make it more flexible if you need mroe room to implement something more complex than what I did, its just a guide)
|
|
11
|
+
remember that other cli's have different names and configs and locations etc, read official docs
|
|
12
|
+
|
|
13
|
+
in the following cli how to set it for maximal prviacy *turn off any telemetry, reject any use of data, etc etc, please think of everything and read all theird docs and fine print
|
|
14
|
+
"aider",
|
|
15
|
+
"aichat", # rust cli
|
|
16
|
+
"copilot", # cli from github copilot extension
|
|
17
|
+
"gemini", # gemini cli
|
|
18
|
+
"crush", # cli from charm team
|
|
19
|
+
"mods", # cli from same people as crush (not agent) @ https://github.com/charmbracelet/mods
|
|
20
|
+
"opencode-ai",
|
|
21
|
+
"chatgpt",
|
|
22
|
+
"q", # from aws
|
|
23
|
+
"qwen-code", # fork of gemini cli
|
|
24
|
+
"cursor-cli",
|
|
25
|
+
"droid",
|
|
26
|
+
"kilocode",
|
|
27
|
+
"cline", # cli from cline ai extension
|
|
28
|
+
"auggie",
|
|
29
|
+
"codex", # from openai
|
|
30
|
+
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
from typing import Optional
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def apply_max_privacy_and_security_rules_and_configs(overwrite: bool, repo_root: Optional[str]) -> None:
|
|
37
|
+
from machineconfig.utils.source_of_truth import LIBRARY_ROOT
|
|
38
|
+
root = LIBRARY_ROOT / "scripts/python/helpers_agents/privacy/configs"
|
|
39
|
+
from pathlib import Path
|
|
40
|
+
|
|
41
|
+
# Gemini privacy settings
|
|
42
|
+
gemini_settings_source = root.joinpath("gemini/settings.json")
|
|
43
|
+
gemini_settings_target_global = Path.home().joinpath(".gemini/settings.json")
|
|
44
|
+
if not gemini_settings_target_global.exists() or overwrite:
|
|
45
|
+
gemini_settings_target_global.parent.mkdir(parents=True, exist_ok=True)
|
|
46
|
+
gemini_settings_target_global.write_text(gemini_settings_source.read_text())
|
|
47
|
+
if repo_root:
|
|
48
|
+
gemini_settings_target_repo = Path(repo_root).joinpath(".gemini/settings.json")
|
|
49
|
+
if not gemini_settings_target_repo.exists() or overwrite:
|
|
50
|
+
gemini_settings_target_repo.parent.mkdir(parents=True, exist_ok=True)
|
|
51
|
+
gemini_settings_target_repo.write_text(gemini_settings_source.read_text())
|
|
52
|
+
|
|
53
|
+
# Aider privacy settings
|
|
54
|
+
aider_settings_source = root.joinpath("aider/.aider.conf.yml")
|
|
55
|
+
aider_settings_target_global = Path.home().joinpath(".aider.conf.yml")
|
|
56
|
+
if not aider_settings_target_global.exists() or overwrite:
|
|
57
|
+
aider_settings_target_global.parent.mkdir(parents=True, exist_ok=True)
|
|
58
|
+
aider_settings_target_global.write_text(aider_settings_source.read_text())
|
|
59
|
+
|
|
60
|
+
if repo_root:
|
|
61
|
+
aider_settings_target_repo = Path(repo_root).joinpath(".aider.conf.yml")
|
|
62
|
+
if not aider_settings_target_repo.exists() or overwrite:
|
|
63
|
+
aider_settings_target_repo.parent.mkdir(parents=True, exist_ok=True)
|
|
64
|
+
aider_settings_target_repo.write_text(aider_settings_source.read_text())
|
|
65
|
+
|
|
66
|
+
# Aichat privacy settings
|
|
67
|
+
aichat_settings_source = root.joinpath("aichat/config.yaml")
|
|
68
|
+
aichat_settings_target_global = Path.home().joinpath(".config/aichat/config.yaml")
|
|
69
|
+
if not aichat_settings_target_global.exists() or overwrite:
|
|
70
|
+
aichat_settings_target_global.parent.mkdir(parents=True, exist_ok=True)
|
|
71
|
+
aichat_settings_target_global.write_text(aichat_settings_source.read_text())
|
|
72
|
+
|
|
73
|
+
if repo_root:
|
|
74
|
+
aichat_settings_target_repo = Path(repo_root).joinpath(".config/aichat/config.yaml")
|
|
75
|
+
if not aichat_settings_target_repo.exists() or overwrite:
|
|
76
|
+
aichat_settings_target_repo.parent.mkdir(parents=True, exist_ok=True)
|
|
77
|
+
aichat_settings_target_repo.write_text(aichat_settings_source.read_text())
|
|
78
|
+
|
|
79
|
+
# Copilot privacy settings
|
|
80
|
+
copilot_settings_source = root.joinpath("copilot/config.yml")
|
|
81
|
+
copilot_settings_target_global = Path.home().joinpath(".config/gh-copilot/config.yml")
|
|
82
|
+
if not copilot_settings_target_global.exists() or overwrite:
|
|
83
|
+
copilot_settings_target_global.parent.mkdir(parents=True, exist_ok=True)
|
|
84
|
+
copilot_settings_target_global.write_text(copilot_settings_source.read_text())
|
|
85
|
+
|
|
86
|
+
if repo_root:
|
|
87
|
+
copilot_settings_target_repo = Path(repo_root).joinpath(".config/gh-copilot/config.yml")
|
|
88
|
+
if not copilot_settings_target_repo.exists() or overwrite:
|
|
89
|
+
copilot_settings_target_repo.parent.mkdir(parents=True, exist_ok=True)
|
|
90
|
+
copilot_settings_target_repo.write_text(copilot_settings_source.read_text())
|
|
91
|
+
|
|
92
|
+
# Crush privacy settings
|
|
93
|
+
crush_settings_source = root.joinpath("crush/crush.json")
|
|
94
|
+
crush_settings_target_global = Path.home().joinpath(".config/crush/crush.json")
|
|
95
|
+
if not crush_settings_target_global.exists() or overwrite:
|
|
96
|
+
crush_settings_target_global.parent.mkdir(parents=True, exist_ok=True)
|
|
97
|
+
crush_settings_target_global.write_text(crush_settings_source.read_text())
|
|
98
|
+
|
|
99
|
+
if repo_root:
|
|
100
|
+
crush_settings_target_repo = Path(repo_root).joinpath(".crush.json")
|
|
101
|
+
if not crush_settings_target_repo.exists() or overwrite:
|
|
102
|
+
crush_settings_target_repo.parent.mkdir(parents=True, exist_ok=True)
|
|
103
|
+
crush_settings_target_repo.write_text(crush_settings_source.read_text())
|
|
104
|
+
|
|
105
|
+
# next, cursh cli
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
if __name__ == "__main__":
|
|
109
|
+
pass
|
|
@@ -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,34 @@
|
|
|
1
|
+
|
|
2
|
+
#!/bin/bash
|
|
3
|
+
# set -e # Exit immediately if a command exits with a non-zero status.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
REPO_ROOT="$HOME/code/machineconfig"
|
|
7
|
+
|
|
8
|
+
JOB_NAME="agentsTrial"
|
|
9
|
+
CONTEXT_PATH="$REPO_ROOT/.ai/agents/files.md"
|
|
10
|
+
PROMPT_PATH="$REPO_ROOT/.ai/agents/prompt.txt"
|
|
11
|
+
AGENTS_DIR="$REPO_ROOT/.ai/agents/$JOB_NAME"
|
|
12
|
+
rm -rfd "$AGENTS_DIR" || true
|
|
13
|
+
|
|
14
|
+
agents create \
|
|
15
|
+
--agents gemini \
|
|
16
|
+
--host docker \
|
|
17
|
+
--model gemini-2.5-pro \
|
|
18
|
+
--provider google \
|
|
19
|
+
--agent-load 5 \
|
|
20
|
+
--context-path $CONTEXT_PATH \
|
|
21
|
+
--prompt-path $PROMPT_PATH \
|
|
22
|
+
--job-name $JOB_NAME \
|
|
23
|
+
--agents-dir $AGENTS_DIR
|
|
24
|
+
|
|
25
|
+
sessions balance-load "$AGENTS_DIR/layout.json" \
|
|
26
|
+
--max-threshold 4 \
|
|
27
|
+
--breaking-method moreLayouts \
|
|
28
|
+
--threshold-type number \
|
|
29
|
+
--output-path "$AGENTS_DIR/layout_balanced.json"
|
|
30
|
+
|
|
31
|
+
sessions run "$AGENTS_DIR/layout_balanced.json" --kill-upon-completion
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# 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)
|
|
@@ -54,7 +52,7 @@ def get_securely_shared_file(url: Optional[str] = None, folder: Optional[str] =
|
|
|
54
52
|
tmp_folder = PathExtended.tmpdir(prefix="tmp_unzip")
|
|
55
53
|
try:
|
|
56
54
|
res = url_obj.decrypt(pwd=pwd, inplace=True).unzip(inplace=True, folder=tmp_folder)
|
|
57
|
-
for x in res.
|
|
55
|
+
for x in res.glob("*"):
|
|
58
56
|
x.move(folder=folder_obj, overwrite=True)
|
|
59
57
|
finally:
|
|
60
58
|
# Clean up temporary 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.helpers_cloud.helpers2 import parse_cloud_source_target
|
|
83
|
+
from machineconfig.scripts.python.helpers.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,
|
|
@@ -100,7 +107,7 @@ def main(
|
|
|
100
107
|
print("🔄 Converting Google Drive link to direct download URL")
|
|
101
108
|
else:
|
|
102
109
|
console.print(Panel("❌ Invalid Google Drive link format", title="[bold red]Error[/bold red]", border_style="red"))
|
|
103
|
-
raise
|
|
110
|
+
raise typer.Exit(code=1)
|
|
104
111
|
return get_securely_shared_file(url=source, folder=target)
|
|
105
112
|
|
|
106
113
|
if args_obj.rel2home is True and args_obj.root is None:
|
|
@@ -115,7 +122,7 @@ def main(
|
|
|
115
122
|
|
|
116
123
|
if args_obj.key is not None:
|
|
117
124
|
console.print(Panel("❌ Key-based encryption is not supported yet", title="[bold red]Error[/bold red]", border_style="red"))
|
|
118
|
-
raise
|
|
125
|
+
raise typer.Exit(code=1)
|
|
119
126
|
|
|
120
127
|
if cloud in source:
|
|
121
128
|
console.print(Panel(f"📥 DOWNLOADING FROM CLOUD\n☁️ Cloud: {cloud}\n📂 Source: {source.replace(cloud + ':', '')}\n🎯 Target: {target}", title="[bold blue]Download[/bold blue]", border_style="blue", width=152))
|
|
@@ -152,7 +159,7 @@ def main(
|
|
|
152
159
|
console.print(Panel(f"🔗 SHARE URL GENERATED\n📝 URL file: {share_url_path}\n🌍 {res.as_url_str()}", title="[bold blue]Share[/bold blue]", border_style="blue", width=152))
|
|
153
160
|
else:
|
|
154
161
|
console.print(Panel(f"❌ ERROR: Cloud '{cloud}' not found in source or target", title="[bold red]Error[/bold red]", border_style="red", width=152))
|
|
155
|
-
raise
|
|
162
|
+
raise typer.Exit(code=1)
|
|
156
163
|
|
|
157
164
|
|
|
158
165
|
def arg_parser() -> None:
|