machineconfig 3.99__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 +1 -2
- machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
- machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +128 -330
- machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
- 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 -172
- 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 -16
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/gh.py +69 -53
- machineconfig/jobs/installer/custom/hx.py +77 -20
- machineconfig/jobs/installer/custom_dev/alacritty.py +45 -30
- machineconfig/jobs/installer/custom_dev/brave.py +43 -35
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py +31 -20
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +33 -21
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/espanso.py +64 -41
- machineconfig/jobs/installer/custom_dev/goes.py +41 -36
- machineconfig/jobs/installer/custom_dev/lvim.py +49 -33
- machineconfig/jobs/installer/custom_dev/nerdfont.py +71 -47
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +32 -26
- machineconfig/jobs/installer/custom_dev/redis.py +51 -33
- machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +55 -39
- machineconfig/jobs/installer/custom_dev/winget.py +1 -0
- machineconfig/jobs/installer/installer_data.json +3406 -0
- 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/ngrok.sh +6 -0
- machineconfig/jobs/installer/linux_scripts/q.sh +9 -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 +255 -0
- 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 +198 -0
- 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 +117 -181
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +44 -124
- 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 +106 -244
- machineconfig/scripts/python/ftpx.py +125 -68
- 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/helpers_agents/fire_agents_help_launch.py +110 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -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} +11 -19
- machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +17 -7
- 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/helpers_devops/cli_terminal.py +156 -0
- 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/helpers_devops/devops_update_repos.py +269 -0
- 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} +57 -87
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
- 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} +6 -7
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
- 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 +79 -160
- 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} +1 -3
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
- 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} +6 -5
- machineconfig/scripts/python/sessions.py +167 -0
- 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 -9
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +140 -93
- 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 +118 -0
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +68 -0
- machineconfig/utils/files/ouch/__init__.py +0 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +95 -0
- machineconfig/utils/installer_utils/github_release_bulk.py +2 -12
- machineconfig/utils/installer_utils/installer_class.py +68 -126
- machineconfig/utils/installer_utils/installer_cli.py +181 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +38 -85
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +69 -69
- machineconfig/utils/io.py +77 -23
- machineconfig/utils/links.py +309 -100
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +10 -25
- machineconfig/utils/path_extended.py +94 -104
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -74
- machineconfig/utils/scheduler.py +94 -97
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
- machineconfig/utils/schemas/installer/installer_types.py +0 -1
- machineconfig/utils/schemas/layouts/layout_types.py +2 -1
- machineconfig/utils/source_of_truth.py +3 -6
- machineconfig/utils/ssh.py +742 -254
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +3 -140
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +13 -5
- 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/templates/utils.py +0 -51
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
- machineconfig/jobs/installer/packages_custom_dev.json +0 -226
- machineconfig/jobs/installer/packages_custom_essential.json +0 -39
- machineconfig/jobs/installer/packages_github_dev.json +0 -1110
- machineconfig/jobs/installer/packages_github_essential.json +0 -804
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -37
- machineconfig/jobs/python/create_bootable_media.py +0 -16
- machineconfig/jobs/python/python_cargo_build_share.py +0 -59
- machineconfig/jobs/python/python_ve_symlink.py +0 -29
- machineconfig/jobs/python/tasks.py +0 -3
- machineconfig/jobs/python/vscode/api.py +0 -49
- machineconfig/jobs/python/vscode/sync_code.py +0 -58
- 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 -170
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- 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/fire_agents +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/programs +0 -21
- machineconfig/scripts/linux/repos +0 -2
- machineconfig/scripts/linux/scheduler +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 -186
- machineconfig/scripts/python/devops_devapps_install.py +0 -159
- machineconfig/scripts/python/devops_update_repos.py +0 -180
- machineconfig/scripts/python/dotfile.py +0 -52
- machineconfig/scripts/python/fire_agents.py +0 -175
- machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
- machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
- machineconfig/scripts/python/fire_jobs_args_helper.py +0 -75
- machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -74
- 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 -114
- machineconfig/scripts/python/repos.py +0 -80
- machineconfig/scripts/python/repos_helper_action.py +0 -335
- machineconfig/scripts/python/share_terminal.py +0 -104
- 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/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/repos.ps1 +0 -1
- machineconfig/scripts/windows/scheduler.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/ascii_art.sh +0 -93
- 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-3.99.dist-info/METADATA +0 -167
- machineconfig-3.99.dist-info/RECORD +0 -409
- machineconfig-3.99.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
- machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
- machineconfig/cluster/{templates → remote}/run_remote.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/{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-3.99.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
- {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
|
@@ -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,25 +6,41 @@ 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 machineconfig.utils.ssh import SSH
|
|
12
|
-
from machineconfig.utils.path_extended import PathExtended as PathExtended
|
|
13
|
-
from machineconfig.scripts.python.helpers.helpers2 import ES
|
|
14
|
-
from machineconfig.utils.accessories import pprint
|
|
9
|
+
from typing import Annotated
|
|
15
10
|
|
|
16
11
|
|
|
17
|
-
def
|
|
12
|
+
def ftpx(
|
|
18
13
|
source: Annotated[str, typer.Argument(help="Source path (machine:path)")],
|
|
19
14
|
target: Annotated[str, typer.Argument(help="Target path (machine:path)")],
|
|
20
15
|
recursive: Annotated[bool, typer.Option("--recursive", "-r", help="Send recursively.")] = False,
|
|
21
16
|
zipFirst: Annotated[bool, typer.Option("--zipFirst", "-z", help="Zip before sending.")] = False,
|
|
22
17
|
cloud: Annotated[bool, typer.Option("--cloud", "-c", help="Transfer through the cloud.")] = False,
|
|
23
18
|
) -> None:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
+
|
|
31
|
+
console.print(
|
|
32
|
+
Panel(
|
|
33
|
+
"\n".join(
|
|
34
|
+
[
|
|
35
|
+
"🚀 FTP File Transfer",
|
|
36
|
+
"📋 Starting transfer process...",
|
|
37
|
+
]
|
|
38
|
+
),
|
|
39
|
+
title="Transfer Initialisation",
|
|
40
|
+
border_style="blue",
|
|
41
|
+
padding=(1, 2),
|
|
42
|
+
)
|
|
43
|
+
)
|
|
29
44
|
|
|
30
45
|
# Initialize variables
|
|
31
46
|
resolved_source: str | None = None
|
|
@@ -92,77 +107,119 @@ def main(
|
|
|
92
107
|
from paramiko.ssh_exception import AuthenticationException # type: ignore
|
|
93
108
|
|
|
94
109
|
try:
|
|
95
|
-
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)
|
|
96
111
|
except AuthenticationException:
|
|
97
|
-
print(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
112
|
+
console.print(
|
|
113
|
+
Panel(
|
|
114
|
+
"\n".join(
|
|
115
|
+
[
|
|
116
|
+
"🔑 Authentication failed. Trying manual authentication...",
|
|
117
|
+
"⚠️ Ensure that the username is provided correctly; only password prompts are handled here.",
|
|
118
|
+
]
|
|
119
|
+
),
|
|
120
|
+
title="Authentication Required",
|
|
121
|
+
border_style="yellow",
|
|
122
|
+
padding=(1, 2),
|
|
123
|
+
)
|
|
124
|
+
)
|
|
105
125
|
import getpass
|
|
106
126
|
|
|
107
127
|
pwd = getpass.getpass()
|
|
108
|
-
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)
|
|
109
129
|
|
|
110
130
|
if cloud:
|
|
111
|
-
print(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
131
|
+
console.print(
|
|
132
|
+
Panel.fit(
|
|
133
|
+
"☁️ Cloud transfer mode — uploading from remote to cloud...",
|
|
134
|
+
title="Cloud Upload",
|
|
135
|
+
border_style="cyan",
|
|
136
|
+
)
|
|
137
|
+
)
|
|
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)
|
|
139
|
+
console.print(
|
|
140
|
+
Panel.fit(
|
|
141
|
+
"⬇️ Cloud transfer mode — downloading from cloud to local...",
|
|
142
|
+
title="Cloud Download",
|
|
143
|
+
border_style="cyan",
|
|
144
|
+
)
|
|
145
|
+
)
|
|
146
|
+
ssh.run_locally(command=f"cloud_copy :^ {resolved_target}")
|
|
123
147
|
received_file = PathExtended(resolved_target) # type: ignore
|
|
124
148
|
else:
|
|
125
149
|
if source_is_remote:
|
|
126
|
-
|
|
127
|
-
❌ Path Error: Source must be a remote path (machine:path)"""
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
|
154
|
+
target_display = resolved_target or "<auto>"
|
|
155
|
+
console.print(
|
|
156
|
+
Panel(
|
|
157
|
+
"\n".join(
|
|
158
|
+
[
|
|
159
|
+
"📥 Transfer Mode: Remote → Local",
|
|
160
|
+
f"Source: [cyan]{resolved_source}[/cyan]",
|
|
161
|
+
f"Target: [cyan]{target_display}[/cyan]",
|
|
162
|
+
f"Options: {'ZIP compression' if zipFirst else 'No compression'}, {'Recursive' if recursive else 'Non-recursive'}",
|
|
163
|
+
]
|
|
164
|
+
),
|
|
165
|
+
title="Transfer Details",
|
|
166
|
+
border_style="cyan",
|
|
167
|
+
padding=(1, 2),
|
|
168
|
+
)
|
|
169
|
+
)
|
|
170
|
+
received_file = ssh.copy_to_here(source=resolved_source, target=resolved_target, compress_with_zip=zipFirst, recursive=recursive)
|
|
136
171
|
else:
|
|
137
172
|
assert resolved_source is not None, """
|
|
138
173
|
❌ Path Error: Target must be a remote path (machine:path)"""
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
174
|
+
target_display = resolved_target or "<auto>"
|
|
175
|
+
console.print(
|
|
176
|
+
Panel(
|
|
177
|
+
"\n".join(
|
|
178
|
+
[
|
|
179
|
+
"📤 Transfer Mode: Local → Remote",
|
|
180
|
+
f"Source: [cyan]{resolved_source}[/cyan]",
|
|
181
|
+
f"Target: [cyan]{target_display}[/cyan]",
|
|
182
|
+
f"Options: {'ZIP compression' if zipFirst else 'No compression'}, {'Recursive' if recursive else 'Non-recursive'}",
|
|
183
|
+
]
|
|
184
|
+
),
|
|
185
|
+
title="Transfer Details",
|
|
186
|
+
border_style="cyan",
|
|
187
|
+
padding=(1, 2),
|
|
188
|
+
)
|
|
189
|
+
)
|
|
190
|
+
received_file = ssh.copy_from_here(source_path=resolved_source, target_rel2home=resolved_target, compress_with_zip=zipFirst, recursive=recursive, overwrite_existing=False)
|
|
147
191
|
|
|
148
192
|
if source_is_remote and isinstance(received_file, PathExtended):
|
|
149
|
-
print(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
193
|
+
console.print(
|
|
194
|
+
Panel(
|
|
195
|
+
"\n".join(
|
|
196
|
+
[
|
|
197
|
+
"📁 File Received",
|
|
198
|
+
f"Parent: [cyan]{repr(received_file.parent)}[/cyan]",
|
|
199
|
+
f"File: [cyan]{repr(received_file)}[/cyan]",
|
|
200
|
+
]
|
|
201
|
+
),
|
|
202
|
+
title="Transfer Result",
|
|
203
|
+
border_style="green",
|
|
204
|
+
padding=(1, 2),
|
|
205
|
+
)
|
|
206
|
+
)
|
|
207
|
+
console.print(
|
|
208
|
+
Panel(
|
|
209
|
+
"File transfer process finished successfully",
|
|
210
|
+
title="✅ Transfer Complete",
|
|
211
|
+
border_style="green",
|
|
212
|
+
padding=(1, 2),
|
|
213
|
+
)
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def main() -> None:
|
|
163
218
|
"""Entry point function that uses typer to parse arguments and call main."""
|
|
164
|
-
typer.
|
|
219
|
+
app = typer.Typer()
|
|
220
|
+
app.command(no_args_is_help=True, help="File transfer utility though SSH.")(ftpx)
|
|
221
|
+
app()
|
|
165
222
|
|
|
166
223
|
|
|
167
224
|
if __name__ == "__main__":
|
|
168
|
-
|
|
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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
import shlex
|
|
4
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def fire_qwen(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path, config_dir: str | None) -> str:
|
|
8
|
+
_ = ai_spec["provider"]
|
|
9
|
+
safe_path = shlex.quote(str(prompt_path))
|
|
10
|
+
match ai_spec["machine"]:
|
|
11
|
+
case "local":
|
|
12
|
+
cmd = f"""
|
|
13
|
+
qwen --yolo --prompt {safe_path}
|
|
14
|
+
"""
|
|
15
|
+
case "docker":
|
|
16
|
+
assert config_dir is not None, "When using docker, config_dir must be provided."
|
|
17
|
+
assert Path(config_dir).exists(), f"Provided config_dir {config_dir} does not exist."
|
|
18
|
+
oauth_creds = Path(config_dir).joinpath("oauth_creds.json")
|
|
19
|
+
settings = Path(config_dir).joinpath("settings.json")
|
|
20
|
+
|
|
21
|
+
cmd = f"""
|
|
22
|
+
docker run -it --rm \
|
|
23
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
24
|
+
-v {shlex.quote(str(oauth_creds))}:/root/.qwen/oauth_creds.json \
|
|
25
|
+
-v {shlex.quote(str(settings))}:/root/.qwen/settings.json \
|
|
26
|
+
-w "/workspace/{repo_root.name}" \
|
|
27
|
+
statistician/machineconfig-ai:latest \
|
|
28
|
+
qwen --prompt "$PATH_PROMPT"
|
|
29
|
+
"""
|
|
30
|
+
return cmd
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
|
|
2
|
+
import random
|
|
3
|
+
import shlex
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AGENTS, AGENT_NAME_FORMATTER, HOST, PROVIDER, AI_SPEC
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def get_api_keys(provider: PROVIDER) -> list[str]:
|
|
9
|
+
from machineconfig.utils.io import read_ini
|
|
10
|
+
config = read_ini(Path.home().joinpath(f"dotfiles/creds/llm/{provider}/api_keys.ini"))
|
|
11
|
+
res: list[str] = []
|
|
12
|
+
for a_section_name in list(config.sections()):
|
|
13
|
+
a_section = config[a_section_name]
|
|
14
|
+
if "api_key" in a_section:
|
|
15
|
+
api_key = a_section["api_key"].strip()
|
|
16
|
+
if api_key:
|
|
17
|
+
res.append(api_key)
|
|
18
|
+
print(f"Found {len(res)} {provider} API keys configured.")
|
|
19
|
+
return res
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
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: str, provider: PROVIDER, agent: AGENTS, *, job_name: str) -> None:
|
|
24
|
+
agents_dir.mkdir(parents=True, exist_ok=True)
|
|
25
|
+
prompt_folder = agents_dir / "prompts"
|
|
26
|
+
prompt_folder.mkdir(parents=True, exist_ok=True)
|
|
27
|
+
|
|
28
|
+
for idx, a_prompt_material in enumerate(prompts_material):
|
|
29
|
+
prompt_root = prompt_folder / f"agent_{idx}"
|
|
30
|
+
prompt_root.mkdir(parents=True, exist_ok=True)
|
|
31
|
+
prompt_path = prompt_root / f"agent_{idx}_prompt.txt"
|
|
32
|
+
if keep_material_in_separate_file:
|
|
33
|
+
prompt_material_path = prompt_root / f"agent_{idx}_material.txt"
|
|
34
|
+
prompt_material_path.write_text(a_prompt_material, encoding="utf-8")
|
|
35
|
+
prompt_path.write_text(prompt_prefix + f"""\nPlease only look @ {prompt_material_path.relative_to(repo_root)}. You don't need to do any other work beside the content of this material file.""", encoding="utf-8")
|
|
36
|
+
else:
|
|
37
|
+
prompt_material_path = prompt_path
|
|
38
|
+
prompt_path.write_text(prompt_prefix + """\nPlease only look @ the following:\n""" + a_prompt_material, encoding="utf-8")
|
|
39
|
+
|
|
40
|
+
agent_cmd_launch_path = prompt_root / AGENT_NAME_FORMATTER.format(idx=idx) # e.g., agent_0_cmd.sh
|
|
41
|
+
random_sleep_time = random.uniform(0, 5)
|
|
42
|
+
cmd_prefix = f"""#!/usr/bin/env bash
|
|
43
|
+
|
|
44
|
+
echo "Using machine: {machine}, model: {model}, provider: {provider}, and agent: {agent}"
|
|
45
|
+
echo "{job_name}-{idx} CMD {agent_cmd_launch_path}"
|
|
46
|
+
echo "{job_name}-{idx} PROMPT {prompt_path}"
|
|
47
|
+
echo "{job_name}-{idx} CONTEXT {prompt_material_path}"
|
|
48
|
+
echo "Starting agent {agent} in 5 seconds... Press Ctrl+C to cancel."
|
|
49
|
+
# sleep 5
|
|
50
|
+
# timeout 3 copilot --banner
|
|
51
|
+
|
|
52
|
+
export FIRE_AGENTS_AGENT_NAME="{agent}"
|
|
53
|
+
export FIRE_AGENTS_JOB_NAME="{job_name}"
|
|
54
|
+
export FIRE_AGENTS_PROMPT_FILE="{prompt_path}"
|
|
55
|
+
export FIRE_AGENTS_MATERIAL_FILE="{prompt_material_path}"
|
|
56
|
+
export FIRE_AGENTS_AGENT_LAUNCHER="{agent_cmd_launch_path}"
|
|
57
|
+
|
|
58
|
+
echo "Sleeping for {random_sleep_time:.2f} seconds to stagger agent startups..."
|
|
59
|
+
sleep {random_sleep_time:.2f}
|
|
60
|
+
echo "--------START OF AGENT OUTPUT--------"
|
|
61
|
+
sleep 0.1
|
|
62
|
+
|
|
63
|
+
"""
|
|
64
|
+
match agent:
|
|
65
|
+
case "gemini":
|
|
66
|
+
assert provider == "google", "Gemini agent only works with google provider."
|
|
67
|
+
api_keys = get_api_keys(provider="google")
|
|
68
|
+
api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
|
|
69
|
+
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model="gemini-2.5-pro", agent=agent, machine=machine, api_key=api_key, api_name="gemini")
|
|
70
|
+
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_gemini import fire_gemini
|
|
71
|
+
cmd = fire_gemini(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
|
|
72
|
+
case "cursor-agent":
|
|
73
|
+
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_key=None, api_name="cursor")
|
|
74
|
+
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_cursor_agents import fire_cursor
|
|
75
|
+
cmd = fire_cursor(ai_spec=ai_spec, prompt_path=prompt_path)
|
|
76
|
+
raise NotImplementedError("Cursor agent is not implemented yet, api key missing")
|
|
77
|
+
case "crush":
|
|
78
|
+
api_keys = get_api_keys(provider=provider)
|
|
79
|
+
api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
|
|
80
|
+
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_key=api_key, api_name="crush")
|
|
81
|
+
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_crush import fire_crush
|
|
82
|
+
cmd = fire_crush(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
|
|
83
|
+
# case "q":
|
|
84
|
+
# from machineconfig.scripts.python.helpers_fire.fire_q import fire_q
|
|
85
|
+
# cmd = fire_q(api_key="", prompt_path=prompt_path, machine=machine)
|
|
86
|
+
case _:
|
|
87
|
+
raise ValueError(f"Unsupported agent type: {agent}")
|
|
88
|
+
|
|
89
|
+
cmd_postfix = """
|
|
90
|
+
sleep 0.1
|
|
91
|
+
echo "---------END OF AGENT OUTPUT---------"
|
|
92
|
+
"""
|
|
93
|
+
agent_cmd_launch_path.write_text(cmd_prefix + cmd + cmd_postfix, encoding="utf-8")
|
|
94
|
+
return None
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def get_agents_launch_layout(session_root: Path):
|
|
98
|
+
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig, LayoutsFile
|
|
99
|
+
|
|
100
|
+
tab_config: list[TabConfig] = []
|
|
101
|
+
prompt_root = session_root / "prompts"
|
|
102
|
+
all_dirs_under_prompts = [d for d in prompt_root.iterdir() if d.is_dir()]
|
|
103
|
+
for a_prompt_dir in all_dirs_under_prompts:
|
|
104
|
+
idx = a_prompt_dir.name.split("_")[-1] # e.g., agent_0 -> 0
|
|
105
|
+
agent_cmd_path = a_prompt_dir / AGENT_NAME_FORMATTER.format(idx=idx)
|
|
106
|
+
fire_cmd = f"bash {shlex.quote(str(agent_cmd_path))}"
|
|
107
|
+
tab_config.append(TabConfig(tabName=f"Agent{idx}", startDir=str(session_root.parent.parent.parent), command=fire_cmd))
|
|
108
|
+
layout = LayoutConfig(layoutName="Agents", layoutTabs=tab_config)
|
|
109
|
+
layouts_file: LayoutsFile = LayoutsFile(version="1.0", layouts=[layout])
|
|
110
|
+
return layouts_file
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
from typing import Literal, TypeAlias, TypedDict
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# Vscode extensions for AI-assisted coding.
|
|
6
|
+
# Github copilot
|
|
7
|
+
# Roo
|
|
8
|
+
# Cline
|
|
9
|
+
# Kilocode
|
|
10
|
+
# Continue
|
|
11
|
+
# CodeGPT
|
|
12
|
+
# qodo (and cli)
|
|
13
|
+
|
|
14
|
+
# Editors based on AI
|
|
15
|
+
# Kiro
|
|
16
|
+
# Cursor
|
|
17
|
+
# Warp
|
|
18
|
+
|
|
19
|
+
AGENTS: TypeAlias = Literal["cursor-agent", "gemini", "qwen-code", "copilot", "crush", "q", "opencode", "kilocode", "cline", "auggie", "warp", "droid"]
|
|
20
|
+
HOST: TypeAlias = Literal["local", "docker"]
|
|
21
|
+
PROVIDER: TypeAlias = Literal["azure", "google", "aws", "openai", "anthropic", "openrouter", "xai"]
|
|
22
|
+
|
|
23
|
+
class AI_SPEC(TypedDict):
|
|
24
|
+
provider: PROVIDER
|
|
25
|
+
model: str
|
|
26
|
+
agent: AGENTS
|
|
27
|
+
machine: HOST
|
|
28
|
+
api_key: str | None
|
|
29
|
+
api_name: str
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
AGENT_NAME_FORMATTER = "agent_{idx}_cmd.sh" # e.g., agent_0_cmd.sh
|
|
33
|
+
SEARCH_STRATEGIES: TypeAlias = Literal["file_path", "keyword_search", "filename_pattern"]
|
|
34
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# from math import ceil
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def chunk_prompts(prompt_material_path: Path, joiner: str, *, tasks_per_prompt: int) -> list[str]:
|
|
6
|
+
"""Chunk prompts based on splitting strategy.
|
|
7
|
+
|
|
8
|
+
Args:
|
|
9
|
+
prompts: List of prompts to chunk
|
|
10
|
+
strategy: Either 'agent_cap' or 'task_rows'
|
|
11
|
+
agent_cap: Maximum number of agents (used with 'agent_cap' strategy)
|
|
12
|
+
task_rows: Number of rows/tasks per agent (used with 'task_rows' strategy)
|
|
13
|
+
"""
|
|
14
|
+
prompts = [p for p in prompt_material_path.read_text(encoding="utf-8", errors="ignore").split(joiner) if p.strip() != ""] # drop blank entries
|
|
15
|
+
if tasks_per_prompt >= len(prompts):
|
|
16
|
+
print("No need to chunk prompts, as tasks_per_prompt >= total prompts.", f"({tasks_per_prompt} >= {len(prompts)})")
|
|
17
|
+
return prompts
|
|
18
|
+
print(f"Chunking {len(prompts)} prompts into groups of {tasks_per_prompt} rows/tasks each.")
|
|
19
|
+
grouped: list[str] = []
|
|
20
|
+
for i in range(0, len(prompts), tasks_per_prompt):
|
|
21
|
+
grouped.append(joiner.join(prompts[i : i + tasks_per_prompt]))
|
|
22
|
+
return grouped
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Set error action preference to stop on error, like set -e
|
|
2
|
+
$ErrorActionPreference = "Stop"
|
|
3
|
+
|
|
4
|
+
$JOB_NAME = "outpatient_mapping"
|
|
5
|
+
$REPO_ROOT = "$HOME/code/work/winter_planning/"
|
|
6
|
+
$CONTEXT_PATH = "$REPO_ROOT/data/outpatient_mapping/op_services.csv"
|
|
7
|
+
$PROMPT_PATH = "$REPO_ROOT/data/outpatient_mapping/prompt"
|
|
8
|
+
$AGENTS_DIR = "$REPO_ROOT/.ai/agents/$JOB_NAME"
|
|
9
|
+
|
|
10
|
+
agents create --agents crush --host docker --model x-ai/grok-4-fast:free --provider openrouter --context-path $CONTEXT_PATH --prompt-path $PROMPT_PATH --job-name $JOB_NAME --agents-dir $AGENTS_DIR
|
|
11
|
+
sessions balance-load "$AGENTS_DIR/layout.json" --max-thresh 6 --breaking-method moreLayouts --thresh-type number --output-path "$AGENTS_DIR/layout_balanced.json"
|
|
12
|
+
sessions run "$AGENTS_DIR/layout_balanced.json" --kill-upon-completion
|
|
13
|
+
|
|
14
|
+
# agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
#!/bin/bash
|
|
3
|
+
# set -e # Exit immediately if a command exits with a non-zero status.
|
|
4
|
+
|
|
5
|
+
JOB_NAME="outpatient_mapping"
|
|
6
|
+
REPO_ROOT="$HOME/code/machineconfig"
|
|
7
|
+
CONTEXT_PATH="$REPO_ROOT/.ai/todo/files.md"
|
|
8
|
+
# agents make-todo --strategy keywords from machineconfig.utils.path_extended import PathExtended
|
|
9
|
+
PROMPT_PATH="$REPO_ROOT/src/machineconfig/scripts/python/helpers_agents/templates/prompt.txt"
|
|
10
|
+
AGENTS_DIR="$REPO_ROOT/.ai/agents/$JOB_NAME"
|
|
11
|
+
|
|
12
|
+
agents create --agents crush \
|
|
13
|
+
--host docker \
|
|
14
|
+
--model x-ai/grok-4-fast:free \
|
|
15
|
+
--provider openrouter \
|
|
16
|
+
--context-path $CONTEXT_PATH \
|
|
17
|
+
--prompt-path $PROMPT_PATH \
|
|
18
|
+
--job-name $JOB_NAME \
|
|
19
|
+
--agents-dir $AGENTS_DIR
|
|
20
|
+
sessions balance-load "$AGENTS_DIR/layout.json" --max-thresh 6 --breaking-method moreLayouts --thresh-type number --output-path "$AGENTS_DIR/layout_balanced.json"
|
|
21
|
+
sessions run "$AGENTS_DIR/layout_balanced.json" --kill-upon-completion
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"
|