machineconfig 5.15__py3-none-any.whl → 7.66__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/__init__.py +0 -28
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/remote/script_execution.py +0 -1
- machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +114 -289
- machineconfig/cluster/sessions_managers/wt_local_manager.py +50 -193
- machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
- 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_reporter.py +4 -2
- 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 +81 -375
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -169
- machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
- machineconfig/jobs/{python → installer}/check_installations.py +2 -3
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/hx.py +76 -19
- machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
- machineconfig/jobs/installer/custom_dev/brave.py +1 -7
- 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 +30 -0
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +9 -18
- machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
- machineconfig/jobs/installer/installer_data.json +1101 -115
- machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
- machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
- machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
- machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/q.sh +1 -0
- machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
- machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
- machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
- machineconfig/jobs/installer/package_groups.py +108 -180
- machineconfig/logger.py +0 -1
- machineconfig/profile/backup.toml +49 -0
- machineconfig/profile/bash_shell_profiles.md +11 -0
- machineconfig/profile/create_helper.py +74 -0
- machineconfig/profile/create_links.py +288 -0
- machineconfig/profile/create_links_export.py +100 -0
- machineconfig/profile/create_shell_profile.py +136 -0
- machineconfig/profile/mapper.toml +258 -0
- machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
- machineconfig/scripts/linux/wrap_mcfg +47 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +92 -103
- machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
- machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
- machineconfig/scripts/python/ai/generate_files.py +307 -42
- machineconfig/scripts/python/ai/initai.py +3 -28
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- machineconfig/scripts/python/ai/solutions/generic.py +27 -4
- machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
- machineconfig/scripts/python/cloud.py +29 -0
- machineconfig/scripts/python/croshell.py +111 -114
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +44 -103
- machineconfig/scripts/python/devops_navigator.py +10 -0
- machineconfig/scripts/python/env_manager/__init__.py +1 -0
- machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
- machineconfig/scripts/python/explore.py +49 -0
- machineconfig/scripts/python/fire_jobs.py +115 -152
- machineconfig/scripts/python/ftpx.py +29 -24
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/{fire_agents_help_launch.py → helpers_agents/fire_agents_help_launch.py} +34 -44
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
- machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
- machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +10 -18
- machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +2 -2
- machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
- machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
- machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
- machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
- machineconfig/scripts/python/{share_terminal.py → helpers_devops/cli_terminal.py} +35 -23
- machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
- machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
- machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
- machineconfig/scripts/python/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
- machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
- machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
- machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
- machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
- machineconfig/scripts/python/{fire_jobs_route_helper.py → helpers_fire_command/fire_jobs_route_helper.py} +47 -2
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
- machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
- machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
- machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
- machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/{count_lines.py → helpers_repos/count_lines.py} +10 -10
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
- machineconfig/scripts/python/helpers_repos/sync.py +66 -0
- machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
- machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
- machineconfig/scripts/python/helpers_utils/download.py +152 -0
- machineconfig/scripts/python/helpers_utils/path.py +108 -0
- machineconfig/scripts/python/interactive.py +64 -84
- machineconfig/scripts/python/machineconfig.py +63 -0
- machineconfig/scripts/python/msearch.py +21 -0
- machineconfig/scripts/python/nw/__init__.py +0 -0
- machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +0 -2
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +73 -43
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +3 -3
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +3 -3
- machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
- machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
- machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
- machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
- machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +5 -4
- machineconfig/scripts/python/sessions.py +64 -44
- machineconfig/scripts/python/terminal.py +127 -0
- machineconfig/scripts/python/utils.py +66 -0
- machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
- machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
- machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
- machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
- machineconfig/settings/broot/br.sh +0 -4
- 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 +9 -3
- machineconfig/settings/lf/linux/lfrc +10 -12
- machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
- machineconfig/settings/lf/windows/lfrc +18 -38
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/pistol/pistol.conf +1 -1
- machineconfig/settings/shells/bash/init.sh +55 -31
- machineconfig/settings/shells/nushell/config.nu +1 -34
- machineconfig/settings/shells/nushell/init.nu +127 -0
- machineconfig/settings/shells/pwsh/init.ps1 +60 -43
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +32 -17
- machineconfig/settings/shells/zsh/init.sh +89 -0
- machineconfig/settings/svim/linux/init.toml +0 -4
- machineconfig/settings/svim/windows/init.toml +0 -3
- machineconfig/settings/yazi/init.lua +57 -0
- machineconfig/settings/yazi/keymap_linux.toml +79 -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/yazi.toml +13 -0
- machineconfig/setup_linux/__init__.py +10 -0
- machineconfig/setup_linux/apps_desktop.sh +89 -0
- machineconfig/setup_linux/apps_gui.sh +64 -0
- machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
- machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
- machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
- machineconfig/setup_linux/uv.sh +15 -0
- machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
- machineconfig/setup_mac/__init__.py +16 -0
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
- machineconfig/setup_mac/uv.sh +36 -0
- machineconfig/setup_windows/__init__.py +8 -0
- machineconfig/setup_windows/others/power_options.ps1 +7 -0
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
- machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
- machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
- machineconfig/setup_windows/uv.ps1 +10 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -10
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +133 -106
- machineconfig/utils/files/art/fat_croco.txt +10 -0
- machineconfig/utils/files/art/halfwit_croco.txt +9 -0
- machineconfig/utils/files/art/happy_croco.txt +22 -0
- machineconfig/utils/files/art/water_croco.txt +11 -0
- machineconfig/utils/files/ascii_art.py +1 -1
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +11 -14
- machineconfig/utils/files/ouch/__init__.py +0 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +10 -18
- machineconfig/utils/installer_utils/installer_class.py +68 -126
- machineconfig/utils/installer_utils/{installer.py → installer_cli.py} +109 -117
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +31 -81
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +44 -74
- machineconfig/utils/io.py +77 -23
- machineconfig/utils/links.py +254 -162
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +13 -3
- machineconfig/utils/path_extended.py +46 -100
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -70
- machineconfig/utils/scheduler.py +94 -97
- machineconfig/utils/scheduling.py +0 -3
- 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 +3 -6
- machineconfig/utils/ssh.py +742 -264
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +2 -113
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +11 -4
- machineconfig-7.66.dist-info/METADATA +124 -0
- machineconfig-7.66.dist-info/RECORD +451 -0
- machineconfig-7.66.dist-info/entry_points.txt +15 -0
- machineconfig/cluster/sessions_managers/ffile.py +0 -4
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
- machineconfig/jobs/python/python_ve_symlink.py +0 -37
- machineconfig/jobs/python/vscode/api.py +0 -57
- machineconfig/jobs/python/vscode/sync_code.py +0 -73
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
- machineconfig/jobs/windows/start_terminal.ps1 +0 -6
- machineconfig/jobs/windows/startup_file.cmd +0 -2
- machineconfig/profile/create.py +0 -303
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- machineconfig/scripts/linux/agents +0 -2
- machineconfig/scripts/linux/choose_wezterm_theme +0 -3
- machineconfig/scripts/linux/cloud_copy +0 -2
- machineconfig/scripts/linux/cloud_mount +0 -2
- machineconfig/scripts/linux/cloud_repo_sync +0 -2
- machineconfig/scripts/linux/cloud_sync +0 -2
- machineconfig/scripts/linux/croshell +0 -3
- machineconfig/scripts/linux/devops +0 -2
- machineconfig/scripts/linux/fire +0 -2
- machineconfig/scripts/linux/ftpx +0 -2
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/gh_models +0 -2
- machineconfig/scripts/linux/initai +0 -2
- machineconfig/scripts/linux/kill_process +0 -2
- machineconfig/scripts/linux/scheduler +0 -2
- machineconfig/scripts/linux/sessions +0 -2
- machineconfig/scripts/linux/share_smb +0 -1
- machineconfig/scripts/linux/start_slidev +0 -2
- machineconfig/scripts/linux/start_terminals +0 -3
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/wifi_conn +0 -2
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
- machineconfig/scripts/python/cloud_repo_sync.py +0 -190
- machineconfig/scripts/python/count_lines_frontend.py +0 -16
- machineconfig/scripts/python/dotfile.py +0 -78
- machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
- machineconfig/scripts/python/get_zellij_cmd.py +0 -15
- machineconfig/scripts/python/gh_models.py +0 -104
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -116
- machineconfig/scripts/python/repos.py +0 -132
- machineconfig/scripts/python/repos_helper_action.py +0 -378
- machineconfig/scripts/python/snapshot.py +0 -25
- machineconfig/scripts/python/start_terminals.py +0 -121
- machineconfig/scripts/python/t4.py +0 -17
- machineconfig/scripts/windows/agents.ps1 +0 -1
- machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
- machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
- machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
- machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
- machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
- machineconfig/scripts/windows/croshell.ps1 +0 -1
- machineconfig/scripts/windows/devops.ps1 +0 -1
- machineconfig/scripts/windows/dotfile.ps1 +0 -1
- machineconfig/scripts/windows/fire.ps1 +0 -1
- machineconfig/scripts/windows/ftpx.ps1 +0 -1
- machineconfig/scripts/windows/gpt.ps1 +0 -1
- machineconfig/scripts/windows/grep.ps1 +0 -2
- machineconfig/scripts/windows/initai.ps1 +0 -1
- machineconfig/scripts/windows/kill_process.ps1 +0 -1
- machineconfig/scripts/windows/nano.ps1 +0 -3
- machineconfig/scripts/windows/pomodoro.ps1 +0 -1
- machineconfig/scripts/windows/reload_path.ps1 +0 -3
- machineconfig/scripts/windows/scheduler.ps1 +0 -1
- machineconfig/scripts/windows/sessions.ps1 +0 -1
- machineconfig/scripts/windows/snapshot.ps1 +0 -1
- machineconfig/scripts/windows/start_slidev.ps1 +0 -1
- machineconfig/scripts/windows/start_terminals.ps1 +0 -1
- machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
- machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
- machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
- machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
- machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
- machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
- machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
- machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
- machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
- machineconfig/utils/ai/generate_file_checklist.py +0 -68
- machineconfig-5.15.dist-info/METADATA +0 -188
- machineconfig-5.15.dist-info/RECORD +0 -415
- machineconfig-5.15.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
- machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
- machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
- machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
- machineconfig/{jobs/python → scripts/python/helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
- machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
- machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
- /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
- /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
- /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
- /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
- /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
- /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
- /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
- /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
- /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
- /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
|
@@ -7,138 +7,104 @@ fire
|
|
|
7
7
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
from machineconfig.scripts.python.fire_jobs_route_helper import get_command_streamlit
|
|
11
|
-
from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_interest
|
|
12
|
-
from machineconfig.scripts.python.helpers.helpers4 import parse_pyfile
|
|
13
|
-
from machineconfig.scripts.python.helpers.helpers4 import get_import_module_code
|
|
14
|
-
from machineconfig.utils.ve import get_ve_activate_line, get_ve_path_and_ipython_profile
|
|
15
|
-
from machineconfig.utils.options import choose_from_options
|
|
16
|
-
from machineconfig.utils.path_helper import match_file_name, sanitize_path
|
|
17
|
-
|
|
18
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
19
|
-
from machineconfig.utils.accessories import get_repo_root, randstr
|
|
20
|
-
from machineconfig.scripts.python.fire_jobs_args_helper import FireJobArgs, extract_kwargs, parse_fire_args_from_context
|
|
21
|
-
import platform
|
|
22
10
|
from typing import Optional, Annotated
|
|
23
|
-
from pathlib import Path
|
|
24
11
|
import typer
|
|
25
12
|
|
|
26
13
|
|
|
27
|
-
def route(args: FireJobArgs, fire_args: str = "") -> None:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
|
|
34
|
-
files = search_for_files_of_interest(path_obj)
|
|
35
|
-
print(f"🔍 Got #{len(files)} results.")
|
|
36
|
-
choice_file = choose_from_options(multi=False, options=files, fzf=True, msg="Choose one option")
|
|
37
|
-
choice_file = PathExtended(choice_file)
|
|
38
|
-
else:
|
|
39
|
-
choice_file = path_obj
|
|
40
|
-
repo_root = get_repo_root(Path(choice_file))
|
|
14
|
+
def route(args: "FireJobArgs", fire_args: str = "") -> None:
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from machineconfig.utils.path_helper import get_choice_file
|
|
17
|
+
from machineconfig.utils.accessories import get_repo_root, randstr
|
|
18
|
+
choice_file = get_choice_file(args.path, suffixes=None)
|
|
19
|
+
repo_root = get_repo_root(choice_file)
|
|
41
20
|
print(f"💾 Selected file: {choice_file}.\nRepo root: {repo_root}")
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
21
|
+
if args.marimo:
|
|
22
|
+
print(f"🧽 Preparing to launch Marimo notebook for `{choice_file}`...")
|
|
23
|
+
tmp_dir = Path.home().joinpath(f"tmp_results/tmp_scripts/marimo/{choice_file.stem}_{randstr()}")
|
|
24
|
+
tmp_dir.mkdir(parents=True, exist_ok=True)
|
|
25
|
+
script = f"""
|
|
26
|
+
cd {tmp_dir}
|
|
27
|
+
uv run --python 3.14 --with marimo marimo convert {choice_file} -o marimo_nb.py
|
|
28
|
+
uv run --project {repo_root} --with marimo marimo edit --host 0.0.0.0 marimo_nb.py
|
|
29
|
+
"""
|
|
30
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
31
|
+
print(f"🚀 Launching Marimo notebook for `{choice_file}`...")
|
|
32
|
+
exit_then_run_shell_script(script)
|
|
33
|
+
return
|
|
45
34
|
|
|
35
|
+
# ========================= preparing kwargs_dict
|
|
46
36
|
if choice_file.suffix == ".py":
|
|
37
|
+
from machineconfig.scripts.python.helpers_fire_command.fire_jobs_args_helper import extract_kwargs
|
|
47
38
|
kwargs_dict = extract_kwargs(args) # This now returns empty dict, but kept for compatibility
|
|
48
|
-
activate_ve_line = get_ve_activate_line(ve_root=args.ve or ve_root_from_file or "$HOME/code/machineconfig/.venv")
|
|
49
39
|
else:
|
|
50
|
-
activate_ve_line = ""
|
|
51
40
|
kwargs_dict = {}
|
|
52
41
|
|
|
53
42
|
# ========================= choosing function to run
|
|
54
43
|
choice_function: Optional[str] = None # Initialize to avoid unbound variable
|
|
55
|
-
if args.choose_function
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
assert isinstance(choice_function_tmp, str), f"choice_function must be a string. Got {type(choice_function_tmp)}"
|
|
60
|
-
choice_index = options.index(choice_function_tmp)
|
|
61
|
-
choice_function = choice_function_tmp.split(" -- ")[0]
|
|
62
|
-
choice_function_args = func_args[choice_index]
|
|
63
|
-
|
|
64
|
-
if choice_function == "RUN AS MAIN":
|
|
65
|
-
choice_function = None
|
|
66
|
-
if len(choice_function_args) > 0 and len(kwargs_dict) == 0:
|
|
67
|
-
for item in choice_function_args:
|
|
68
|
-
kwargs_dict[item.name] = input(f"Please enter a value for argument `{item.name}` (type = {item.type}) (default = {item.default}) : ") or item.default
|
|
69
|
-
elif choice_file.suffix == ".sh": # in this case, we choos lines.
|
|
70
|
-
options = []
|
|
71
|
-
for line in choice_file.read_text(encoding="utf-8").splitlines():
|
|
72
|
-
if line.startswith("#"):
|
|
73
|
-
continue
|
|
74
|
-
if line == "":
|
|
75
|
-
continue
|
|
76
|
-
if line.startswith("echo"):
|
|
77
|
-
continue
|
|
78
|
-
options.append(line)
|
|
79
|
-
chosen_lines = choose_from_options(msg="Choose a line to run", options=options, fzf=True, multi=True)
|
|
80
|
-
choice_file = PathExtended.tmpfile(suffix=".sh")
|
|
81
|
-
choice_file.parent.mkdir(parents=True, exist_ok=True)
|
|
82
|
-
choice_file.write_text("\n".join(chosen_lines), encoding="utf-8")
|
|
83
|
-
choice_function = None
|
|
44
|
+
if args.choose_function:
|
|
45
|
+
from machineconfig.scripts.python.helpers_fire_command.fire_jobs_route_helper import choose_function_or_lines
|
|
46
|
+
|
|
47
|
+
choice_function, choice_file, kwargs_dict = choose_function_or_lines(choice_file, kwargs_dict)
|
|
84
48
|
else:
|
|
85
49
|
choice_function = args.function
|
|
86
50
|
|
|
87
51
|
if choice_file.suffix == ".py":
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if args.module or (args.debug and args.choose_function): # because debugging tools do not support choosing functions and don't interplay with fire module. So the only way to have debugging and choose function options is to import the file as a module into a new script and run the function of interest there and debug the new script.
|
|
97
|
-
assert choice_file.suffix == ".py", f"File must be a python file to be imported as a module. Got {choice_file}"
|
|
98
|
-
import_line = get_import_module_code(str(choice_file))
|
|
99
|
-
if repo_root is not None:
|
|
100
|
-
repo_root_add = f"""sys.path.append(r'{repo_root}')"""
|
|
52
|
+
from machineconfig.scripts.python.helpers_fire_command.fire_jobs_route_helper import get_command_streamlit
|
|
53
|
+
|
|
54
|
+
with_project = f"--project {repo_root} " if repo_root is not None else ""
|
|
55
|
+
if args.streamlit:
|
|
56
|
+
exe = get_command_streamlit(choice_file=choice_file, environment=args.environment, repo_root=repo_root)
|
|
57
|
+
exe = f"uv run {with_project} {exe} "
|
|
58
|
+
elif args.jupyter:
|
|
59
|
+
exe = f"uv run {with_project} jupyter-lab"
|
|
101
60
|
else:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
txt = (
|
|
117
|
-
txt
|
|
118
|
-
+ f"""
|
|
119
|
-
res = {choice_function}({("**" + str(kwargs_dict)) if kwargs_dict else ""})
|
|
120
|
-
"""
|
|
121
|
-
)
|
|
61
|
+
if args.interactive:
|
|
62
|
+
from machineconfig.utils.ve import get_ve_path_and_ipython_profile
|
|
63
|
+
_ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
|
|
64
|
+
if ipy_profile is None:
|
|
65
|
+
ipy_profile = "default"
|
|
66
|
+
exe = f"uv run {with_project} ipython -i --no-banner --profile {ipy_profile} "
|
|
67
|
+
else:
|
|
68
|
+
exe = f"uv run {with_project} python "
|
|
69
|
+
elif choice_file.suffix == ".ps1" or choice_file.suffix == ".sh":
|
|
70
|
+
exe = "."
|
|
71
|
+
elif choice_file.suffix == "":
|
|
72
|
+
exe = ""
|
|
73
|
+
else:
|
|
74
|
+
raise NotImplementedError(f"File type {choice_file.suffix} not supported, in the sense that I don't know how to fire it.")
|
|
122
75
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
76
|
+
if args.module or (args.debug and args.choose_function):
|
|
77
|
+
# because debugging tools do not support choosing functions and don't interplay with fire module. So the only way to have debugging and choose function options is to import the file as a module into a new script and run the function of interest there and debug the new script.
|
|
78
|
+
assert choice_file.suffix == ".py", f"File must be a python file to be imported as a module. Got {choice_file}"
|
|
79
|
+
from machineconfig.scripts.python.helpers_fire_command.file_wrangler import get_import_module_code, wrap_import_in_try_except
|
|
80
|
+
from machineconfig.utils.meta import lambda_to_python_script
|
|
81
|
+
from machineconfig.utils.code import print_code
|
|
82
|
+
|
|
83
|
+
import_code = get_import_module_code(str(choice_file))
|
|
84
|
+
import_code_robust = lambda_to_python_script(
|
|
85
|
+
lambda: wrap_import_in_try_except(
|
|
86
|
+
import_line=import_code, pyfile=str(choice_file), repo_root=str(repo_root) if repo_root is not None else None
|
|
87
|
+
),
|
|
88
|
+
in_global=True,
|
|
89
|
+
import_module=False,
|
|
90
|
+
)
|
|
91
|
+
# print(f"🧩 Preparing import code for module import:\n{import_code}")
|
|
92
|
+
code_printing = lambda_to_python_script(
|
|
93
|
+
lambda: print_code(code=import_code_robust, lexer="python", desc="import as module code"),
|
|
94
|
+
in_global=True, import_module=False
|
|
135
95
|
)
|
|
136
|
-
|
|
96
|
+
print(f"🧩 Preparing import code for module import:\n{import_code}")
|
|
97
|
+
if choice_function is not None:
|
|
98
|
+
calling = f"""res = {choice_function}({("**" + str(kwargs_dict)) if kwargs_dict else ""})"""
|
|
99
|
+
else:
|
|
100
|
+
calling = """# No function selected to call. You can add your code here."""
|
|
101
|
+
choice_file = Path.home().joinpath(f"tmp_results/tmp_scripts/python/{Path(choice_file).parent.name}_{Path(choice_file).stem}_{randstr()}.py")
|
|
137
102
|
choice_file.parent.mkdir(parents=True, exist_ok=True)
|
|
138
|
-
choice_file.write_text(
|
|
103
|
+
choice_file.write_text(import_code_robust + "\n" + code_printing + "\n" + calling, encoding="utf-8")
|
|
139
104
|
|
|
140
105
|
# ========================= determining basic command structure: putting together exe & choice_file & choice_function & pdb
|
|
141
106
|
if args.debug:
|
|
107
|
+
import platform
|
|
142
108
|
if platform.system() == "Windows":
|
|
143
109
|
command = f"{exe} -m ipdb {choice_file} " # pudb is not available on windows machines, use poor man's debugger instead.
|
|
144
110
|
elif platform.system() in ["Linux", "Darwin"]:
|
|
@@ -148,84 +114,78 @@ except ImportError as _ex:
|
|
|
148
114
|
elif args.module:
|
|
149
115
|
# both selected function and kwargs are mentioned in the made up script, therefore no need for fire module.
|
|
150
116
|
command = f"{exe} {choice_file} "
|
|
151
|
-
elif choice_function is not None:
|
|
117
|
+
elif choice_function is not None and choice_file.suffix == ".py":
|
|
152
118
|
command = f"{exe} -m fire {choice_file} {choice_function} {fire_args}"
|
|
153
119
|
elif args.streamlit:
|
|
154
120
|
# for .streamlit config to work, it needs to be in the current directory.
|
|
155
121
|
if args.holdDirectory:
|
|
156
122
|
command = f"{exe} {choice_file}"
|
|
157
123
|
else:
|
|
158
|
-
command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {
|
|
159
|
-
|
|
124
|
+
command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {Path.cwd()}"
|
|
160
125
|
elif args.cmd:
|
|
161
126
|
command = rf""" cd /d {choice_file.parent} & {exe} {choice_file.name} """
|
|
162
127
|
else:
|
|
163
128
|
if choice_file.suffix == "":
|
|
164
129
|
command = f"{exe} {choice_file} {fire_args}"
|
|
165
130
|
else:
|
|
166
|
-
# command = f"cd {choice_file.parent}\n{exe} {choice_file.name}\ncd {PathExtended.cwd()}"
|
|
167
131
|
command = f"{exe} {choice_file} "
|
|
168
|
-
|
|
132
|
+
|
|
133
|
+
if not args.cmd:
|
|
134
|
+
pass
|
|
169
135
|
else:
|
|
170
136
|
new_line = "\n"
|
|
171
|
-
command = rf"""start cmd -Argument "/k {
|
|
137
|
+
command = rf"""start cmd -Argument "/k {command.replace(new_line, " & ")} " """ # this works from powershell
|
|
172
138
|
if args.submit_to_cloud:
|
|
173
|
-
command = f"""
|
|
174
|
-
{activate_ve_line}
|
|
175
|
-
python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
|
|
139
|
+
command = f"""uv run python -m machineconfig.cluster.templates.cli_click --file {choice_file} """
|
|
176
140
|
if choice_function is not None:
|
|
177
141
|
command += f"--function {choice_function} "
|
|
178
142
|
|
|
179
|
-
if args.Nprocess > 1:
|
|
180
|
-
from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
|
|
181
|
-
from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
|
|
182
|
-
layout: LayoutConfig = {"layoutName": "fireNprocess", "layoutTabs": []}
|
|
183
|
-
for an_arg in range(args.Nprocess):
|
|
184
|
-
layout["layoutTabs"].append({"tabName": f"tab{an_arg}", "startDir": str(PathExtended.cwd()), "command": f"uv run -m fire {choice_file} {choice_function} --idx={an_arg} --idx_max={args.Nprocess}"})
|
|
185
|
-
run_zellij_layout(layout_config=layout)
|
|
186
|
-
return None
|
|
187
143
|
if args.optimized:
|
|
188
144
|
command = command.replace("python ", "python -OO ")
|
|
145
|
+
|
|
189
146
|
from rich.panel import Panel
|
|
190
147
|
from rich.console import Console
|
|
191
148
|
from rich.syntax import Syntax
|
|
149
|
+
|
|
192
150
|
console = Console()
|
|
193
151
|
if args.zellij_tab is not None:
|
|
194
|
-
comman_path__ =
|
|
152
|
+
comman_path__ = Path.home().joinpath(f"tmp_results/tmp_scripts/zellij_commands/{choice_file.stem}_{randstr()}.sh")
|
|
195
153
|
comman_path__.parent.mkdir(parents=True, exist_ok=True)
|
|
196
154
|
comman_path__.write_text(command, encoding="utf-8")
|
|
197
155
|
console.print(Panel(Syntax(command, lexer="shell"), title=f"🔥 fire command @ {comman_path__}: "), style="bold red")
|
|
198
156
|
import subprocess
|
|
157
|
+
|
|
199
158
|
existing_tab_names = subprocess.run(["zellij", "action", "query-tab-names"], capture_output=True, text=True, check=True).stdout.splitlines()
|
|
200
159
|
if args.zellij_tab in existing_tab_names:
|
|
201
160
|
print(f"⚠️ Tab name `{args.zellij_tab}` already exists. Please choose a different name.")
|
|
202
161
|
args.zellij_tab += f"_{randstr(3)}"
|
|
203
162
|
from machineconfig.cluster.sessions_managers.zellij_local import run_command_in_zellij_tab
|
|
163
|
+
|
|
204
164
|
command = run_command_in_zellij_tab(command=str(comman_path__), tab_name=args.zellij_tab, cwd=None)
|
|
205
165
|
if args.watch:
|
|
206
166
|
command = "watchexec --restart --exts py,sh,ps1 " + command
|
|
207
167
|
if args.git_pull:
|
|
208
168
|
command = f"\ngit -C {choice_file.parent} pull\n" + command
|
|
209
169
|
if args.PathExport:
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
export_line = f"""$env:PYTHONPATH="{repo_root}""" + """:$env:PYTHONPATH" """
|
|
214
|
-
else:
|
|
215
|
-
raise NotImplementedError(f"Platform {platform.system()} not supported.")
|
|
170
|
+
from machineconfig.scripts.python.helpers_fire_command.file_wrangler import add_to_path
|
|
171
|
+
|
|
172
|
+
export_line = add_to_path(path_variable="PYTHONPATH", directory=str(repo_root))
|
|
216
173
|
command = export_line + "\n" + command
|
|
217
174
|
if args.loop:
|
|
175
|
+
import platform
|
|
218
176
|
if platform.system() in ["Linux", "Darwin"]:
|
|
219
177
|
command = command + "\nsleep 0.5"
|
|
220
178
|
elif platform.system() == "Windows":
|
|
221
179
|
command = "$ErrorActionPreference = 'SilentlyContinue';\n" + command + "\nStart-Sleep -Seconds 0.5"
|
|
222
180
|
else:
|
|
223
181
|
raise NotImplementedError(f"Platform {platform.system()} not supported.")
|
|
224
|
-
|
|
225
|
-
|
|
182
|
+
|
|
183
|
+
from machineconfig.utils.code import exit_then_run_shell_script
|
|
184
|
+
|
|
185
|
+
exit_then_run_shell_script(script=command, strict=False)
|
|
226
186
|
|
|
227
187
|
|
|
228
|
-
def
|
|
188
|
+
def fire(
|
|
229
189
|
ctx: typer.Context,
|
|
230
190
|
path: Annotated[str, typer.Argument(help="Path to the Python file to run")] = ".",
|
|
231
191
|
function: Annotated[Optional[str], typer.Argument(help="Function to run")] = None,
|
|
@@ -233,25 +193,28 @@ def main(
|
|
|
233
193
|
cmd: Annotated[bool, typer.Option("--cmd", "-B", help="Create a cmd fire command to launch the job asynchronously")] = False,
|
|
234
194
|
interactive: Annotated[bool, typer.Option("--interactive", "-i", help="Whether to run the job interactively using IPython")] = False,
|
|
235
195
|
debug: Annotated[bool, typer.Option("--debug", "-d", help="Enable debug mode")] = False,
|
|
236
|
-
choose_function: Annotated[bool, typer.Option("--
|
|
196
|
+
choose_function: Annotated[bool, typer.Option("--choose-function", "-c", help="Choose function interactively")] = False,
|
|
237
197
|
loop: Annotated[bool, typer.Option("--loop", "-l", help="Infinite recursion (runs again after completion/interruption)")] = False,
|
|
238
198
|
jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="Open in a jupyter notebook")] = False,
|
|
239
|
-
|
|
240
|
-
remote: Annotated[bool, typer.Option("--remote", "-r", help="Launch on a remote machine")] = False,
|
|
199
|
+
marimo: Annotated[bool, typer.Option("--marimo", "-M", help="Open in a marimo notebook")] = False,
|
|
241
200
|
module: Annotated[bool, typer.Option("--module", "-m", help="Launch the main file")] = False,
|
|
201
|
+
optimized: Annotated[bool, typer.Option("--optimized", "-O", help="Run the optimized version of the function")] = False,
|
|
202
|
+
zellij_tab: Annotated[Optional[str], typer.Option("--zellij-tab", "-z", help="Open in a new zellij tab")] = None,
|
|
203
|
+
submit_to_cloud: Annotated[bool, typer.Option("--submit-to-cloud", "-C", help="Submit to cloud compute")] = False,
|
|
204
|
+
remote: Annotated[bool, typer.Option("--remote", "-r", help="Launch on a remote machine")] = False,
|
|
242
205
|
streamlit: Annotated[bool, typer.Option("--streamlit", "-S", help="Run as streamlit app")] = False,
|
|
243
206
|
environment: Annotated[str, typer.Option("--environment", "-E", help="Choose ip, localhost, hostname or arbitrary url")] = "",
|
|
244
|
-
holdDirectory: Annotated[
|
|
207
|
+
holdDirectory: Annotated[
|
|
208
|
+
bool, typer.Option("--holdDirectory", "-D", help="Hold current directory and avoid cd'ing to the script directory")
|
|
209
|
+
] = False,
|
|
245
210
|
PathExport: Annotated[bool, typer.Option("--PathExport", "-P", help="Augment the PYTHONPATH with repo root")] = False,
|
|
246
|
-
git_pull: Annotated[bool, typer.Option("--
|
|
247
|
-
optimized: Annotated[bool, typer.Option("--optimized", "-O", help="Run the optimized version of the function")] = False,
|
|
248
|
-
Nprocess: Annotated[int, typer.Option("--Nprocess", "-p", help="Number of processes to use")] = 1,
|
|
249
|
-
zellij_tab: Annotated[Optional[str], typer.Option("--zellij_tab", "-z", help="Open in a new zellij tab")] = None,
|
|
211
|
+
git_pull: Annotated[bool, typer.Option("--git-pull", "-g", help="Start by pulling the git repo")] = False,
|
|
250
212
|
watch: Annotated[bool, typer.Option("--watch", "-w", help="Watch the file for changes")] = False,
|
|
251
213
|
) -> None:
|
|
252
214
|
"""Main function to process fire jobs arguments."""
|
|
253
215
|
|
|
254
216
|
# Get Fire arguments from context
|
|
217
|
+
from machineconfig.scripts.python.helpers_fire_command.fire_jobs_args_helper import FireJobArgs, parse_fire_args_from_context
|
|
255
218
|
fire_args = parse_fire_args_from_context(ctx)
|
|
256
219
|
|
|
257
220
|
args = FireJobArgs(
|
|
@@ -264,6 +227,7 @@ def main(
|
|
|
264
227
|
choose_function=choose_function,
|
|
265
228
|
loop=loop,
|
|
266
229
|
jupyter=jupyter,
|
|
230
|
+
marimo=marimo,
|
|
267
231
|
submit_to_cloud=submit_to_cloud,
|
|
268
232
|
remote=remote,
|
|
269
233
|
module=module,
|
|
@@ -273,7 +237,6 @@ def main(
|
|
|
273
237
|
PathExport=PathExport,
|
|
274
238
|
git_pull=git_pull,
|
|
275
239
|
optimized=optimized,
|
|
276
|
-
Nprocess=Nprocess,
|
|
277
240
|
zellij_tab=zellij_tab,
|
|
278
241
|
watch=watch,
|
|
279
242
|
)
|
|
@@ -290,18 +253,18 @@ def main(
|
|
|
290
253
|
sys.exit(1)
|
|
291
254
|
|
|
292
255
|
|
|
293
|
-
def
|
|
294
|
-
# from trogon.typer import init_tui
|
|
295
|
-
# from trogon.typer import init_tui
|
|
256
|
+
def get_app():
|
|
296
257
|
from typer import Typer
|
|
297
258
|
|
|
298
259
|
app = Typer(add_completion=False)
|
|
299
|
-
app.command(context_settings={"allow_extra_args": True, "allow_interspersed_args": False})(
|
|
300
|
-
|
|
301
|
-
|
|
260
|
+
app.command(context_settings={"allow_extra_args": True, "allow_interspersed_args": False})(fire)
|
|
261
|
+
return app
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def main():
|
|
265
|
+
app = get_app()
|
|
302
266
|
app()
|
|
303
267
|
|
|
304
268
|
|
|
305
269
|
if __name__ == "__main__":
|
|
306
|
-
|
|
307
|
-
main_from_parser()
|
|
270
|
+
from machineconfig.scripts.python.helpers_fire_command.fire_jobs_args_helper import FireJobArgs
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env -S uv run --no-dev --project /home/alex/code/machineconfig --script
|
|
2
1
|
"""Sx & Rx
|
|
3
2
|
|
|
4
3
|
TODO: add support for cases in which source or target has non 22 default port number and is defineda as user@host:port:path which makes 2 colons in the string.
|
|
@@ -7,26 +6,28 @@ Currently, the only way to work around this is to predifine the host in ~/.ssh/c
|
|
|
7
6
|
"""
|
|
8
7
|
|
|
9
8
|
import typer
|
|
10
|
-
from
|
|
11
|
-
from rich.console import Console
|
|
12
|
-
from rich.panel import Panel
|
|
9
|
+
from typing import Annotated
|
|
13
10
|
|
|
14
|
-
from machineconfig.utils.ssh import SSH
|
|
15
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
16
|
-
from machineconfig.scripts.python.helpers.helpers2 import ES
|
|
17
|
-
from machineconfig.utils.accessories import pprint
|
|
18
11
|
|
|
19
|
-
|
|
20
|
-
console = Console()
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
def main(
|
|
12
|
+
def ftpx(
|
|
24
13
|
source: Annotated[str, typer.Argument(help="Source path (machine:path)")],
|
|
25
14
|
target: Annotated[str, typer.Argument(help="Target path (machine:path)")],
|
|
26
15
|
recursive: Annotated[bool, typer.Option("--recursive", "-r", help="Send recursively.")] = False,
|
|
27
16
|
zipFirst: Annotated[bool, typer.Option("--zipFirst", "-z", help="Zip before sending.")] = False,
|
|
28
17
|
cloud: Annotated[bool, typer.Option("--cloud", "-c", help="Transfer through the cloud.")] = False,
|
|
29
18
|
) -> None:
|
|
19
|
+
|
|
20
|
+
from rich.console import Console
|
|
21
|
+
from rich.panel import Panel
|
|
22
|
+
|
|
23
|
+
from machineconfig.utils.ssh import SSH
|
|
24
|
+
from machineconfig.utils.path_extended import PathExtended
|
|
25
|
+
from machineconfig.scripts.python.helpers_cloud.helpers2 import ES
|
|
26
|
+
from machineconfig.utils.accessories import pprint
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
console = Console()
|
|
30
|
+
|
|
30
31
|
console.print(
|
|
31
32
|
Panel(
|
|
32
33
|
"\n".join(
|
|
@@ -106,7 +107,7 @@ def main(
|
|
|
106
107
|
from paramiko.ssh_exception import AuthenticationException # type: ignore
|
|
107
108
|
|
|
108
109
|
try:
|
|
109
|
-
ssh = SSH(rf"{machine}")
|
|
110
|
+
ssh = SSH(host=rf"{machine}", username=None, hostname=None, ssh_key_path=None, password=None, port=22, enable_compression=True)
|
|
110
111
|
except AuthenticationException:
|
|
111
112
|
console.print(
|
|
112
113
|
Panel(
|
|
@@ -124,7 +125,7 @@ def main(
|
|
|
124
125
|
import getpass
|
|
125
126
|
|
|
126
127
|
pwd = getpass.getpass()
|
|
127
|
-
ssh = SSH(rf"{machine}", pwd=
|
|
128
|
+
ssh = SSH(host=rf"{machine}", username=None, hostname=None, ssh_key_path=None, password=pwd, port=22, enable_compression=True)
|
|
128
129
|
|
|
129
130
|
if cloud:
|
|
130
131
|
console.print(
|
|
@@ -134,7 +135,7 @@ def main(
|
|
|
134
135
|
border_style="cyan",
|
|
135
136
|
)
|
|
136
137
|
)
|
|
137
|
-
ssh.
|
|
138
|
+
ssh.run_shell(command=f"cloud_copy {resolved_source} :^", verbose_output=True, description="Uploading from remote to the cloud.", strict_stderr=False, strict_return_code=False)
|
|
138
139
|
console.print(
|
|
139
140
|
Panel.fit(
|
|
140
141
|
"⬇️ Cloud transfer mode — downloading from cloud to local...",
|
|
@@ -142,12 +143,14 @@ def main(
|
|
|
142
143
|
border_style="cyan",
|
|
143
144
|
)
|
|
144
145
|
)
|
|
145
|
-
ssh.run_locally(f"cloud_copy :^ {resolved_target}")
|
|
146
|
+
ssh.run_locally(command=f"cloud_copy :^ {resolved_target}")
|
|
146
147
|
received_file = PathExtended(resolved_target) # type: ignore
|
|
147
148
|
else:
|
|
148
149
|
if source_is_remote:
|
|
149
|
-
|
|
150
|
-
❌ Path Error: Source must be a remote path (machine:path)"""
|
|
150
|
+
if resolved_source is None:
|
|
151
|
+
typer.echo("""❌ Path Error: Source must be a remote path (machine:path)""")
|
|
152
|
+
typer.Exit(code=1)
|
|
153
|
+
return
|
|
151
154
|
target_display = resolved_target or "<auto>"
|
|
152
155
|
console.print(
|
|
153
156
|
Panel(
|
|
@@ -164,7 +167,7 @@ def main(
|
|
|
164
167
|
padding=(1, 2),
|
|
165
168
|
)
|
|
166
169
|
)
|
|
167
|
-
received_file = ssh.copy_to_here(source=resolved_source, target=resolved_target,
|
|
170
|
+
received_file = ssh.copy_to_here(source=resolved_source, target=resolved_target, compress_with_zip=zipFirst, recursive=recursive)
|
|
168
171
|
else:
|
|
169
172
|
assert resolved_source is not None, """
|
|
170
173
|
❌ Path Error: Target must be a remote path (machine:path)"""
|
|
@@ -184,7 +187,7 @@ def main(
|
|
|
184
187
|
padding=(1, 2),
|
|
185
188
|
)
|
|
186
189
|
)
|
|
187
|
-
received_file = ssh.copy_from_here(
|
|
190
|
+
received_file = ssh.copy_from_here(source_path=resolved_source, target_rel2home=resolved_target, compress_with_zip=zipFirst, recursive=recursive, overwrite_existing=False)
|
|
188
191
|
|
|
189
192
|
if source_is_remote and isinstance(received_file, PathExtended):
|
|
190
193
|
console.print(
|
|
@@ -211,10 +214,12 @@ def main(
|
|
|
211
214
|
)
|
|
212
215
|
|
|
213
216
|
|
|
214
|
-
def
|
|
217
|
+
def main() -> None:
|
|
215
218
|
"""Entry point function that uses typer to parse arguments and call main."""
|
|
216
|
-
typer.
|
|
219
|
+
app = typer.Typer()
|
|
220
|
+
app.command(no_args_is_help=True, help="File transfer utility though SSH.")(ftpx)
|
|
221
|
+
app()
|
|
217
222
|
|
|
218
223
|
|
|
219
224
|
if __name__ == "__main__":
|
|
220
|
-
|
|
225
|
+
main()
|
|
@@ -0,0 +1,37 @@
|
|
|
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_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
|
+
json_filled = json_template.replace("{api_key}", ai_spec["api_key"]).replace("{model}", ai_spec["model"]).replace("{provider}", ai_spec["provider"])
|
|
18
|
+
from machineconfig.utils.accessories import randstr
|
|
19
|
+
temp_config_file_local = Path.home().joinpath("tmp_results/tmp_files/crush_" + randstr(8) + ".json")
|
|
20
|
+
temp_config_file_local.parent.mkdir(parents=True, exist_ok=True)
|
|
21
|
+
Path(temp_config_file_local).write_text(json_filled, encoding="utf-8")
|
|
22
|
+
cmd = f"""
|
|
23
|
+
|
|
24
|
+
# -e "PATH_PROMPT=$PATH_PROMPT"
|
|
25
|
+
# opencode --model "{ai_spec["provider"]}/{ai_spec["model"]}" run {prompt_path}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
echo "Running prompt @ {prompt_path.relative_to(repo_root)} using Docker with Crush..."
|
|
29
|
+
docker run -it --rm \
|
|
30
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
31
|
+
-v "{temp_config_file_local}:/root/.local/share/crush/crush.json" \
|
|
32
|
+
-w "/workspace/{repo_root.name}" \
|
|
33
|
+
statistician/machineconfig-ai:latest \
|
|
34
|
+
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)}'"
|
|
35
|
+
|
|
36
|
+
"""
|
|
37
|
+
return cmd
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
# import shlex
|
|
5
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
6
|
+
|
|
7
|
+
def fire_cursor(ai_spec: AI_SPEC, prompt_path: Path) -> str:
|
|
8
|
+
match ai_spec["machine"]:
|
|
9
|
+
case "local":
|
|
10
|
+
# Export the environment variable so it's available to subshells
|
|
11
|
+
cmd = f"""
|
|
12
|
+
|
|
13
|
+
cursor-agent --print --output-format text {prompt_path}
|
|
14
|
+
|
|
15
|
+
"""
|
|
16
|
+
case "docker":
|
|
17
|
+
cmd = f"""
|
|
18
|
+
|
|
19
|
+
cursor-agent --print --output-format text {prompt_path}
|
|
20
|
+
|
|
21
|
+
"""
|
|
22
|
+
return cmd
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
|
|
18
|
+
match ai_spec["machine"]:
|
|
19
|
+
case "local":
|
|
20
|
+
# Export the environment variable so it's available to subshells
|
|
21
|
+
if ai_spec["api_key"] is not None:
|
|
22
|
+
define_api_key = f"""export GEMINI_API_KEY="{shlex.quote(ai_spec['api_key'])}" """
|
|
23
|
+
else:
|
|
24
|
+
define_api_key = "echo 'Warning: No GEMINI_API_KEY provided, hoping it is set in the environment.'"
|
|
25
|
+
cmd = f"""
|
|
26
|
+
{define_api_key}
|
|
27
|
+
echo "Using Gemini API key $GEMINI_API_KEY"
|
|
28
|
+
gemini {model_arg} --yolo --prompt {safe_path}
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
case "docker":
|
|
33
|
+
assert ai_spec["api_key"] is not None, "When using docker, api_key must be provided."
|
|
34
|
+
cmd = f"""
|
|
35
|
+
docker run -it --rm \
|
|
36
|
+
-e GEMINI_API_KEY="{ai_spec['api_key']}" \
|
|
37
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
38
|
+
-w "/workspace/{repo_root.name}" \
|
|
39
|
+
statistician/machineconfig-ai:latest \
|
|
40
|
+
gemini --prompt "$PATH_PROMPT"
|
|
41
|
+
"""
|
|
42
|
+
return cmd
|