machineconfig 6.82__py3-none-any.whl → 8.51__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- machineconfig/cluster/remote/cloud_manager.py +1 -1
- machineconfig/cluster/remote/run_cluster.py +1 -1
- machineconfig/cluster/remote/run_remote.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +29 -15
- machineconfig/cluster/sessions_managers/wt_local.py +17 -222
- machineconfig/cluster/sessions_managers/wt_local_manager.py +56 -194
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +4 -2
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
- machineconfig/jobs/installer/checks/check_installations.py +133 -0
- machineconfig/jobs/installer/checks/install_utils.py +132 -0
- machineconfig/jobs/installer/checks/report_utils.py +39 -0
- machineconfig/jobs/installer/checks/vt_utils.py +89 -0
- machineconfig/jobs/installer/installer_data.json +1500 -310
- machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +62 -91
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -3
- machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
- machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +14 -9
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/python_scripts/hx.py +214 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +32 -26
- machineconfig/jobs/installer/python_scripts/sysabc.py +145 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
- machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
- machineconfig/jobs/installer/python_scripts/yazi.py +139 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
- machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
- machineconfig/jobs/scripts_dynamic/a.py +428 -0
- machineconfig/logger.py +1 -2
- machineconfig/profile/create_helper.py +56 -18
- machineconfig/profile/create_links.py +79 -21
- machineconfig/profile/create_links_export.py +87 -36
- machineconfig/profile/create_shell_profile.py +92 -127
- machineconfig/profile/mapper_data.toml +45 -0
- machineconfig/profile/mapper_dotfiles.toml +249 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +46 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +85 -165
- machineconfig/scripts/python/ai/initai.py +4 -2
- machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
- machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
- machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
- machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
- machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +6 -6
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +33 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
- machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
- machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +13 -5
- machineconfig/scripts/python/cloud.py +58 -11
- machineconfig/scripts/python/croshell.py +10 -162
- machineconfig/scripts/python/devops.py +73 -36
- machineconfig/scripts/python/devops_navigator.py +16 -6
- machineconfig/scripts/python/fire_jobs.py +8 -222
- machineconfig/scripts/python/ftpx.py +7 -200
- machineconfig/scripts/python/graph/cli_graph.json +8743 -0
- machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
- machineconfig/scripts/python/helpers/helper_env/env_manager_tui.py +204 -0
- machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_launch.py +38 -16
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_helper_types.py +11 -14
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers/helpers_agents/templates/template.sh +34 -0
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +32 -25
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +29 -22
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +9 -8
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +3 -3
- machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +12 -12
- machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +67 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_nw.py +201 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_self.py +197 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_share_file.py +151 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_share_server.py +125 -0
- machineconfig/scripts/python/{helpers_devops/cli_terminal.py → helpers/helpers_devops/cli_share_terminal.py} +26 -22
- machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +17 -23
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +78 -71
- machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +4 -4
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers/helpers_fire_command/file_wrangler.py} +57 -20
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
- machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
- machineconfig/scripts/{linux → python/helpers/helpers_msearch/scripts_linux}/fzfg +6 -5
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
- machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
- machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers/helpers_network/address.py +174 -0
- machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
- machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_ssh.py +3 -3
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
- machineconfig/scripts/python/{nw → helpers/helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -1
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +159 -48
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +4 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -12
- machineconfig/scripts/python/helpers/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/{helpers_repos/count_lines.py → helpers/helpers_repos/repo_analyzer_2.py} +156 -191
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
- machineconfig/scripts/python/helpers/helpers_search/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/helpers_search/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/helpers_search/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
- machineconfig/scripts/python/helpers/helpers_search/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
- machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +20 -14
- machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
- machineconfig/scripts/python/helpers/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers/helpers_utils/python.py +210 -0
- machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
- machineconfig/scripts/python/mcfg_entry.py +143 -0
- machineconfig/scripts/python/msearch.py +26 -0
- machineconfig/scripts/python/sessions.py +69 -135
- machineconfig/scripts/python/terminal.py +58 -0
- machineconfig/scripts/python/utils.py +115 -38
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/atuin/config.toml +294 -0
- machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +14 -16
- machineconfig/settings/linters/.ruff.toml +2 -1
- machineconfig/settings/marimo/marimo.toml +1 -1
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
- machineconfig/settings/shells/bash/init.sh +47 -12
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +25 -33
- machineconfig/settings/shells/nushell/env.nu +21 -8
- machineconfig/settings/shells/nushell/init.nu +138 -0
- machineconfig/settings/shells/pwsh/init.ps1 +111 -17
- machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +6 -1
- machineconfig/settings/shells/wt/settings.json +27 -18
- machineconfig/settings/shells/zsh/init.sh +42 -23
- machineconfig/settings/television/cable_unix/alias.toml +8 -0
- machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
- machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
- machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
- machineconfig/settings/television/cable_unix/channels.toml +19 -0
- machineconfig/settings/television/cable_unix/dirs.toml +13 -0
- machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
- machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
- machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_unix/env.toml +17 -0
- machineconfig/settings/television/cable_unix/files.toml +11 -0
- machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
- machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
- machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
- machineconfig/settings/television/cable_unix/git-log.toml +12 -0
- machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
- machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
- machineconfig/settings/television/cable_unix/guix.toml +20 -0
- machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
- machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
- machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
- machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
- machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
- machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
- machineconfig/settings/television/cable_unix/procs.toml +20 -0
- machineconfig/settings/television/cable_unix/text.toml +17 -0
- machineconfig/settings/television/cable_unix/tldr.toml +18 -0
- machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
- machineconfig/settings/television/cable_windows/alias.toml +7 -0
- machineconfig/settings/television/cable_windows/dirs.toml +13 -0
- machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
- machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_windows/env.toml +17 -0
- machineconfig/settings/television/cable_windows/files.toml +14 -0
- machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
- machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
- machineconfig/settings/television/cable_windows/git-log.toml +11 -0
- machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
- machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
- machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
- machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
- machineconfig/settings/television/cable_windows/text.toml +17 -0
- machineconfig/settings/tv/config.toml +234 -0
- machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
- machineconfig/settings/wsl/.wslconfig +5 -30
- machineconfig/settings/wt/__init__.py +0 -0
- machineconfig/settings/yazi/init.lua +61 -0
- machineconfig/settings/yazi/keymap_linux.toml +94 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +94 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +40 -9
- machineconfig/settings/zellij/layouts/st2.kdl +1 -1
- machineconfig/setup_linux/__init__.py +2 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +34 -0
- machineconfig/setup_mac/__init__.py +1 -4
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_windows/__init__.py +2 -5
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -12
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +31 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/type_hinting/sql/__init__.py +1 -0
- machineconfig/type_hinting/sql/base.py +216 -0
- machineconfig/type_hinting/sql/core_schema.py +64 -0
- machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
- machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
- machineconfig/type_hinting/typedict/__init__.py +1 -0
- machineconfig/type_hinting/typedict/ast_utils.py +130 -0
- machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
- machineconfig/type_hinting/typedict/generators.py +231 -0
- machineconfig/type_hinting/typedict/polars_schema.py +24 -0
- machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
- machineconfig/utils/accessories.py +31 -4
- machineconfig/utils/code.py +163 -51
- machineconfig/utils/files/ascii_art.py +11 -15
- machineconfig/utils/files/headers.py +6 -7
- machineconfig/utils/files/read.py +8 -1
- machineconfig/utils/installer_utils/github_release_bulk.py +95 -138
- machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +53 -102
- machineconfig/utils/installer_utils/installer_cli.py +161 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +42 -91
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +20 -65
- machineconfig/utils/io.py +94 -9
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +38 -21
- machineconfig/utils/options.py +81 -23
- machineconfig/utils/options_utils/__init__.py +0 -0
- machineconfig/utils/options_utils/options_tv_linux.py +211 -0
- machineconfig/utils/options_utils/options_tv_windows.py +88 -0
- machineconfig/utils/options_utils/tv_options.py +37 -0
- machineconfig/utils/path_extended.py +52 -102
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +1 -1
- machineconfig/utils/scheduler.py +26 -53
- machineconfig/utils/scheduling.py +0 -2
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/source_of_truth.py +6 -1
- machineconfig/utils/ssh.py +216 -419
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +116 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +158 -0
- machineconfig/utils/ssh_utils/wsl.py +147 -0
- machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
- machineconfig/utils/terminal.py +1 -0
- machineconfig/utils/upgrade_packages.py +107 -35
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.51.dist-info/METADATA +140 -0
- machineconfig-8.51.dist-info/RECORD +543 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/entry_points.txt +4 -1
- machineconfig/jobs/installer/check_installations.py +0 -248
- machineconfig/jobs/installer/custom/hx.py +0 -140
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
- machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
- machineconfig/profile/backup.toml +0 -49
- machineconfig/profile/mapper.toml +0 -256
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzfag +0 -17
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/fzfrga +0 -21
- machineconfig/scripts/linux/mcfgs +0 -38
- machineconfig/scripts/linux/other/share_smb +0 -1
- machineconfig/scripts/linux/other/switch_ip +0 -20
- machineconfig/scripts/linux/skrg +0 -4
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
- machineconfig/scripts/python/helpers_devops/cli_config.py +0 -120
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -77
- machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
- machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -73
- machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -181
- machineconfig/scripts/python/helpers_devops/cli_self.py +0 -122
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +0 -104
- machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -221
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
- machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
- machineconfig/scripts/python/helpers_fire/template.sh +0 -15
- machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
- machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
- machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -588
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
- machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -76
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/mcfg.py +0 -48
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/devops_add_identity.py +0 -82
- machineconfig/scripts/python/nw/devops_add_ssh_key.py +0 -134
- machineconfig/scripts/python/nw/ssh_debug_linux.py +0 -391
- machineconfig/scripts/python/nw/ssh_debug_windows.py +0 -338
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- machineconfig/scripts/windows/mcfgs.ps1 +0 -17
- machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
- machineconfig/settings/lf/windows/tst.ps1 +0 -1
- machineconfig/settings/yazi/yazi.toml +0 -4
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/others/cli_installation.sh +0 -137
- machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_mac/apps.sh +0 -73
- machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig/utils/tst.py +0 -20
- machineconfig-6.82.dist-info/METADATA +0 -82
- machineconfig-6.82.dist-info/RECORD +0 -441
- machineconfig/jobs/installer/{custom_dev → checks}/__init__.py +0 -0
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- machineconfig/{scripts/python/helpers_cloud → jobs/installer/python_scripts}/__init__.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
- machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
- machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
- machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
- machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
- machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
- machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
- machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
- machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
- machineconfig/scripts/python/{helpers_croshell → ai/utils}/__init__.py +0 -0
- machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
- machineconfig/scripts/python/{helpers_devops → graph}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_devops/themes → helpers}/__init__.py +0 -0
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents/templates}/template.ps1 +0 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_devops}/__init__.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command/fire_jobs_streamlit_helper.py → helpers/helpers_fire_command/f.py} +0 -0
- /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
- /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers/helpers_network/__init__.py} +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers/helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/WHEEL +0 -0
- {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/top_level.txt +0 -0
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
from typing import Optional, Annotated
|
|
3
|
-
import typer
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def display_share_url(local_ip_v4: str, port: int, protocol: str = "http") -> None:
|
|
7
|
-
"""Display a flashy, unmissable share URL announcement."""
|
|
8
|
-
from rich.console import Console
|
|
9
|
-
from rich.panel import Panel
|
|
10
|
-
from rich.text import Text
|
|
11
|
-
from rich.align import Align
|
|
12
|
-
console = Console()
|
|
13
|
-
# Create the main message with styling
|
|
14
|
-
url_text = Text(f"{protocol}://{local_ip_v4}:{port}", style="bold bright_cyan underline")
|
|
15
|
-
message = Text.assemble(
|
|
16
|
-
("🚀 ", "bright_red"),
|
|
17
|
-
("Share server is now accessible at: ", "bright_white bold"),
|
|
18
|
-
url_text,
|
|
19
|
-
(" 🚀", "bright_red")
|
|
20
|
-
)
|
|
21
|
-
# Create a fancy panel with borders and styling
|
|
22
|
-
panel = Panel(
|
|
23
|
-
Align.center(message),
|
|
24
|
-
title="[bold bright_green]🌐 SHARE SERVER READY 🌐[/bold bright_green]",
|
|
25
|
-
subtitle="[italic bright_yellow]⚡ Click the link above to access your shared files! ⚡[/italic bright_yellow]",
|
|
26
|
-
border_style="bright_magenta",
|
|
27
|
-
padding=(1, 2),
|
|
28
|
-
expand=False
|
|
29
|
-
)
|
|
30
|
-
# Print with extra spacing and attention-grabbing elements
|
|
31
|
-
console.print(panel)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def main(
|
|
35
|
-
path: Annotated[str, typer.Argument(help="Path to the file or directory to share")],
|
|
36
|
-
port: Annotated[Optional[int], typer.Option("--port", "-p", help="Port to run the share server on (default: 8080)")] = None,
|
|
37
|
-
username: Annotated[Optional[str], typer.Option("--username", "-u", help="Username for share access (default: current user)")] = None,
|
|
38
|
-
password: Annotated[Optional[str], typer.Option("--password", "-w", help="Password for share access (default: from ~/dotfiles/creds/passwords/quick_password)")] = None,
|
|
39
|
-
over_internet: Annotated[bool, typer.Option("--over-internet", "-i", help="Expose the share server over the internet using ngrok")] = False
|
|
40
|
-
) -> None:
|
|
41
|
-
from machineconfig.utils.installer_utils.installer import install_if_missing
|
|
42
|
-
install_if_missing(which="easy-sharing")
|
|
43
|
-
if over_internet: install_if_missing(which="ngrok", )
|
|
44
|
-
if username is None:
|
|
45
|
-
import getpass
|
|
46
|
-
username = getpass.getuser()
|
|
47
|
-
if password is None:
|
|
48
|
-
pwd_path = Path.home().joinpath("dotfiles/creds/passwords/quick_password")
|
|
49
|
-
if pwd_path.exists():
|
|
50
|
-
password = pwd_path.read_text(encoding="utf-8").strip()
|
|
51
|
-
else:
|
|
52
|
-
# raise ValueError("Password not provided and default password file does not exist.")
|
|
53
|
-
typer.echo(f"⚠️ WARNING: Password not provided and default password file does not exist.\nPath: {pwd_path}\nUsing default password: 'quick_password' (insecure!)", err=True)
|
|
54
|
-
typer.Exit(code=1)
|
|
55
|
-
|
|
56
|
-
if port is None:
|
|
57
|
-
port = 8080 # Default port for ezshare
|
|
58
|
-
|
|
59
|
-
import socket
|
|
60
|
-
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
61
|
-
s.connect(('8.8.8.8',80))
|
|
62
|
-
local_ip_v4 = s.getsockname()[0]
|
|
63
|
-
s.close()
|
|
64
|
-
|
|
65
|
-
# Display the flashy share announcement
|
|
66
|
-
protocol = "http"
|
|
67
|
-
display_share_url(local_ip_v4, port, protocol)
|
|
68
|
-
import subprocess
|
|
69
|
-
import time
|
|
70
|
-
# Build ezshare command
|
|
71
|
-
ezshare_cmd = f"""easy-sharing --port {port} --username {username} --password "{password}" {path}"""
|
|
72
|
-
ezshare_process = subprocess.Popen(ezshare_cmd, shell=True)
|
|
73
|
-
processes = [ezshare_process]
|
|
74
|
-
|
|
75
|
-
if over_internet:
|
|
76
|
-
ngrok_process = subprocess.Popen(f"ngrok http {port}", shell=True)
|
|
77
|
-
processes.append(ngrok_process)
|
|
78
|
-
time.sleep(3)
|
|
79
|
-
try:
|
|
80
|
-
import requests
|
|
81
|
-
response = requests.get("http://localhost:4040/api/tunnels")
|
|
82
|
-
data = response.json()
|
|
83
|
-
public_url = data['tunnels'][0]['public_url']
|
|
84
|
-
print(f"🌐 Ngrok tunnel ready: {public_url}")
|
|
85
|
-
except Exception as e:
|
|
86
|
-
print(f"Could not retrieve ngrok URL: {e}")
|
|
87
|
-
|
|
88
|
-
try:
|
|
89
|
-
while True:
|
|
90
|
-
print("Share server is running. Press Ctrl+C to stop.")
|
|
91
|
-
time.sleep(2)
|
|
92
|
-
except KeyboardInterrupt:
|
|
93
|
-
print("\nTerminating processes...")
|
|
94
|
-
for p in processes:
|
|
95
|
-
p.terminate()
|
|
96
|
-
p.wait()
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
def main_with_parser():
|
|
100
|
-
typer.run(main)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if __name__ == "__main__":
|
|
104
|
-
pass
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import typer
|
|
4
|
-
from typing import Annotated, Literal, Optional, TypedDict
|
|
5
|
-
from pathlib import Path
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def download(
|
|
9
|
-
url: Annotated[Optional[str], typer.Argument(..., help="The URL to download the file from.")] = None,
|
|
10
|
-
decompress: Annotated[bool, typer.Option("--decompress", "-d", help="Decompress the file if it's an archive.")] = False,
|
|
11
|
-
output: Annotated[Optional[str], typer.Option("--output", "-o", help="The output file path.")] = None,
|
|
12
|
-
) -> None:
|
|
13
|
-
if url is None:
|
|
14
|
-
typer.echo("❌ Error: URL is required.", err=True)
|
|
15
|
-
raise typer.Exit(code=1)
|
|
16
|
-
typer.echo(f"📥 Downloading from: {url}")
|
|
17
|
-
download_path = Path(output) if output else Path(url.split("/")[-1])
|
|
18
|
-
import requests
|
|
19
|
-
import subprocess
|
|
20
|
-
try:
|
|
21
|
-
response = requests.get(url, allow_redirects=True, stream=True, timeout=60)
|
|
22
|
-
response.raise_for_status()
|
|
23
|
-
|
|
24
|
-
total_size = int(response.headers.get('content-length', 0))
|
|
25
|
-
|
|
26
|
-
with open(download_path, 'wb') as f:
|
|
27
|
-
if total_size == 0:
|
|
28
|
-
f.write(response.content)
|
|
29
|
-
else:
|
|
30
|
-
downloaded = 0
|
|
31
|
-
chunk_size = 8192
|
|
32
|
-
for chunk in response.iter_content(chunk_size=chunk_size):
|
|
33
|
-
if chunk:
|
|
34
|
-
f.write(chunk)
|
|
35
|
-
downloaded += len(chunk)
|
|
36
|
-
progress = (downloaded / total_size) * 100
|
|
37
|
-
typer.echo(f"\r⏬ Progress: {progress:.1f}% ({downloaded}/{total_size} bytes)", nl=False)
|
|
38
|
-
typer.echo()
|
|
39
|
-
|
|
40
|
-
typer.echo(f"✅ Downloaded to: {download_path}")
|
|
41
|
-
except requests.exceptions.RequestException as e:
|
|
42
|
-
typer.echo(f"❌ Download failed: {e}", err=True)
|
|
43
|
-
raise typer.Exit(code=1)
|
|
44
|
-
except OSError as e:
|
|
45
|
-
typer.echo(f"❌ File write error: {e}", err=True)
|
|
46
|
-
raise typer.Exit(code=1)
|
|
47
|
-
|
|
48
|
-
if decompress:
|
|
49
|
-
typer.echo(f"📦 Decompressing: {download_path}")
|
|
50
|
-
|
|
51
|
-
base_name = download_path.name
|
|
52
|
-
parts = base_name.split('.')
|
|
53
|
-
base_name = parts[0] if parts else download_path.stem
|
|
54
|
-
|
|
55
|
-
extract_dir = download_path.parent / base_name
|
|
56
|
-
extract_dir.mkdir(parents=True, exist_ok=True)
|
|
57
|
-
|
|
58
|
-
try:
|
|
59
|
-
subprocess.run(
|
|
60
|
-
["ouch", "decompress", str(download_path), "--dir", str(extract_dir)],
|
|
61
|
-
check=True,
|
|
62
|
-
capture_output=True,
|
|
63
|
-
text=True
|
|
64
|
-
)
|
|
65
|
-
typer.echo(f"✅ Decompressed to: {extract_dir}")
|
|
66
|
-
|
|
67
|
-
if download_path.exists():
|
|
68
|
-
download_path.unlink()
|
|
69
|
-
typer.echo(f"🗑️ Removed archive: {download_path}")
|
|
70
|
-
|
|
71
|
-
except subprocess.CalledProcessError as e:
|
|
72
|
-
typer.echo(f"❌ Decompression failed: {e.stderr}", err=True)
|
|
73
|
-
raise typer.Exit(code=1)
|
|
74
|
-
except FileNotFoundError:
|
|
75
|
-
typer.echo("❌ Error: ouch command not found. Please install ouch.", err=True)
|
|
76
|
-
typer.echo("💡 Install with: cargo install ouch", err=True)
|
|
77
|
-
raise typer.Exit(code=1)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def merge_pdfs(
|
|
81
|
-
pdfs: Annotated[list[str], typer.Argument(..., help="Paths to the PDF files to merge.")],
|
|
82
|
-
output: Annotated[Optional[str], typer.Option("--output", "-o", help="Output merged PDF file path.")] = None,
|
|
83
|
-
compress: Annotated[bool, typer.Option("--compress", "-c", help="Compress the output PDF.")] = False,
|
|
84
|
-
) -> None:
|
|
85
|
-
def merge_pdfs_internal(pdfs: list[str], output: str | None, compress: bool) -> None:
|
|
86
|
-
from pypdf import PdfReader, PdfWriter
|
|
87
|
-
writer = PdfWriter()
|
|
88
|
-
for pdf_path in pdfs:
|
|
89
|
-
reader = PdfReader(pdf_path)
|
|
90
|
-
for page in reader.pages:
|
|
91
|
-
writer.add_page(page)
|
|
92
|
-
output_path = output if output else "merged.pdf"
|
|
93
|
-
if compress:
|
|
94
|
-
try:
|
|
95
|
-
for p in writer.pages:
|
|
96
|
-
try:
|
|
97
|
-
# PageObject.compress_content_streams exists in pypdf
|
|
98
|
-
p.compress_content_streams()
|
|
99
|
-
except Exception:
|
|
100
|
-
# best-effort: ignore per-page compression failures
|
|
101
|
-
continue
|
|
102
|
-
except Exception:
|
|
103
|
-
pass
|
|
104
|
-
try:
|
|
105
|
-
writer.compress_identical_objects()
|
|
106
|
-
except Exception:
|
|
107
|
-
# non-fatal if this fails
|
|
108
|
-
pass
|
|
109
|
-
writer.write(output_path)
|
|
110
|
-
print(f"✅ Merged PDF saved to: {output_path}")
|
|
111
|
-
from machineconfig.utils.meta import lambda_to_python_script
|
|
112
|
-
code = lambda_to_python_script(lambda : merge_pdfs_internal(pdfs=pdfs, output=output, compress=compress), in_global=True, import_module=False)
|
|
113
|
-
from machineconfig.utils.code import run_shell_script, get_uv_command_executing_python_script
|
|
114
|
-
uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=["pypdf"], uv_project_dir=None)
|
|
115
|
-
run_shell_script(uv_command)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
def compress_pdf(
|
|
119
|
-
pdf_input: Annotated[str, typer.Argument(..., help="Path to the input PDF file to compress.")],
|
|
120
|
-
output: Annotated[Optional[str], typer.Option("--output", "-o", help="Output compressed PDF file path.")] = None,
|
|
121
|
-
quality: Annotated[int, typer.Option("--quality", "-q", help="JPEG quality for image compression (0-100, 0=no change, 100=best).")] = 85,
|
|
122
|
-
image_dpi: Annotated[int, typer.Option("--image-dpi", "-d", help="Target DPI for image resampling. If set, images above this DPI will be downsampled.")] = 0,
|
|
123
|
-
# remove_images: Annotated[bool, typer.Option("--remove-images", "-r", help="Remove all images from the PDF.")] = False,
|
|
124
|
-
compress_streams: Annotated[bool, typer.Option("--compress-streams", "-c", help="Compress uncompressed streams.")] = True,
|
|
125
|
-
use_objstms: Annotated[bool, typer.Option("--object-streams", "-s", help="Use object streams for additional compression.")] = True,
|
|
126
|
-
) -> None:
|
|
127
|
-
def compress_pdf_internal(pdf_input: str, output: str | None, quality: int, image_dpi: int, compress_streams: bool, use_objstms: bool) -> None:
|
|
128
|
-
import pymupdf
|
|
129
|
-
from pathlib import Path
|
|
130
|
-
output_path = output if output else pdf_input.replace(".pdf", "_compressed.pdf")
|
|
131
|
-
doc = pymupdf.open(pdf_input)
|
|
132
|
-
try:
|
|
133
|
-
# if remove_images:
|
|
134
|
-
# for page in doc:
|
|
135
|
-
# page.remove_images()
|
|
136
|
-
if quality > 0 or image_dpi > 0:
|
|
137
|
-
doc.rewrite_images(
|
|
138
|
-
dpi_threshold=image_dpi if image_dpi > 0 else None,
|
|
139
|
-
dpi_target=max(72, image_dpi - 10) if image_dpi > 72 else 72,
|
|
140
|
-
quality=quality,
|
|
141
|
-
lossy=True,
|
|
142
|
-
lossless=True,
|
|
143
|
-
)
|
|
144
|
-
doc.save(
|
|
145
|
-
output_path,
|
|
146
|
-
deflate=compress_streams,
|
|
147
|
-
garbage=3,
|
|
148
|
-
use_objstms=1 if use_objstms else 0,
|
|
149
|
-
)
|
|
150
|
-
input_size = Path(pdf_input).stat().st_size
|
|
151
|
-
output_size = Path(output_path).stat().st_size
|
|
152
|
-
ratio = (1 - output_size / input_size) * 100
|
|
153
|
-
print(f"✅ Compressed PDF saved to: {output_path}")
|
|
154
|
-
print(f" Original: {input_size / 1024 / 1024:.2f} MB")
|
|
155
|
-
print(f" Compressed: {output_size / 1024 / 1024:.2f} MB")
|
|
156
|
-
print(f" Reduction: {ratio:.1f}%")
|
|
157
|
-
finally:
|
|
158
|
-
doc.close()
|
|
159
|
-
from machineconfig.utils.meta import lambda_to_python_script
|
|
160
|
-
code = lambda_to_python_script(
|
|
161
|
-
lambda: compress_pdf_internal(pdf_input=pdf_input, output=output, quality=quality, image_dpi=image_dpi, compress_streams=compress_streams, use_objstms=use_objstms),
|
|
162
|
-
in_global=True,
|
|
163
|
-
import_module=False,
|
|
164
|
-
)
|
|
165
|
-
from machineconfig.utils.code import run_shell_script, get_uv_command_executing_python_script
|
|
166
|
-
uv_command, _py_file = get_uv_command_executing_python_script(python_script=code, uv_with=["pymupdf"], uv_project_dir=None)
|
|
167
|
-
run_shell_script(uv_command)
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
class MachineSpecs(TypedDict):
|
|
171
|
-
system: str
|
|
172
|
-
distro: str
|
|
173
|
-
home_dir: str
|
|
174
|
-
def get_machine_specs() -> MachineSpecs:
|
|
175
|
-
"""Write print and return the local machine specs."""
|
|
176
|
-
import platform
|
|
177
|
-
UV_RUN_CMD = "$HOME/.local/bin/uv run" if platform.system() != "Windows" else """& "$env:USERPROFILE/.local/bin/uv" run"""
|
|
178
|
-
command = f"""{UV_RUN_CMD} --with distro python -c "import distro; print(distro.name(pretty=True))" """
|
|
179
|
-
import subprocess
|
|
180
|
-
distro = subprocess.run(command, shell=True, capture_output=True, text=True).stdout.strip()
|
|
181
|
-
specs: MachineSpecs = {
|
|
182
|
-
"system": platform.system(),
|
|
183
|
-
"distro": distro,
|
|
184
|
-
"home_dir": str(Path.home()),
|
|
185
|
-
}
|
|
186
|
-
print(specs)
|
|
187
|
-
from machineconfig.utils.source_of_truth import CONFIG_ROOT
|
|
188
|
-
path = CONFIG_ROOT.joinpath("machine_specs.json")
|
|
189
|
-
CONFIG_ROOT.mkdir(parents=True, exist_ok=True)
|
|
190
|
-
import json
|
|
191
|
-
path.write_text(json.dumps(specs, indent=4), encoding="utf-8")
|
|
192
|
-
return specs
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
def init_project(python: Annotated[Literal["3.13", "3.14"], typer.Option("--python", "-p", help="Python version for the uv virtual environment.")]= "3.13") -> None:
|
|
196
|
-
_ = python
|
|
197
|
-
repo_root = Path.cwd()
|
|
198
|
-
if not (repo_root / "pyproject.toml").exists():
|
|
199
|
-
typer.echo("❌ Error: pyproject.toml not found.", err=True)
|
|
200
|
-
raise typer.Exit(code=1)
|
|
201
|
-
print(f"Adding group `plot` with common data science and plotting packages...")
|
|
202
|
-
script = """
|
|
203
|
-
uv add --group plot \
|
|
204
|
-
# Data & computation
|
|
205
|
-
numpy pandas polars duckdb-engine python-magic \
|
|
206
|
-
# Plotting / visualization
|
|
207
|
-
matplotlib plotly kaleido \
|
|
208
|
-
# Notebooks / interactive
|
|
209
|
-
ipython ipykernel jupyterlab nbformat marimo \
|
|
210
|
-
# Code analysis / type checking / linting
|
|
211
|
-
mypy pyright ruff pylint pyrefly \
|
|
212
|
-
# Packaging / build / dev
|
|
213
|
-
cleanpy \
|
|
214
|
-
# CLI / debugging / utilities
|
|
215
|
-
ipdb pudb \
|
|
216
|
-
# Type hints for packages
|
|
217
|
-
types-python-dateutil types-pyyaml types-requests types-tqdm \
|
|
218
|
-
types-mysqlclient types-paramiko types-pytz types-sqlalchemy types-toml types-urllib3 \
|
|
219
|
-
"""
|
|
220
|
-
from machineconfig.utils.code import run_shell_script
|
|
221
|
-
run_shell_script(script)
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
"""BR: Backup and Retrieve"""
|
|
2
|
-
|
|
3
|
-
# import subprocess
|
|
4
|
-
from machineconfig.utils.io import read_ini
|
|
5
|
-
from machineconfig.utils.path_extended import PathExtended
|
|
6
|
-
from machineconfig.utils.source_of_truth import LIBRARY_ROOT, DEFAULTS_PATH
|
|
7
|
-
from machineconfig.utils.code import print_code
|
|
8
|
-
from machineconfig.utils.options import choose_cloud_interactively, choose_from_options
|
|
9
|
-
from machineconfig.scripts.python.helpers_cloud.helpers2 import ES
|
|
10
|
-
from platform import system
|
|
11
|
-
from typing import Any, Literal, Optional
|
|
12
|
-
from rich.console import Console
|
|
13
|
-
from rich.panel import Panel
|
|
14
|
-
import tomllib
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
OPTIONS = Literal["BACKUP", "RETRIEVE"]
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def main_backup_retrieve(direction: OPTIONS, which: Optional[str], cloud: Optional[str]) -> None:
|
|
21
|
-
console = Console()
|
|
22
|
-
try:
|
|
23
|
-
cloud = read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"]
|
|
24
|
-
console.print(Panel(f"⚠️ DEFAULT CLOUD CONFIGURATION\n🌥️ Using default cloud: {cloud}", title="[bold blue]Cloud Configuration[/bold blue]", border_style="blue"))
|
|
25
|
-
except (FileNotFoundError, KeyError, IndexError):
|
|
26
|
-
console.print(Panel("🔍 DEFAULT CLOUD NOT FOUND\n🔄 Please select a cloud configuration from the options below", title="[bold red]Error: Cloud Not Found[/bold red]", border_style="red"))
|
|
27
|
-
cloud = choose_cloud_interactively()
|
|
28
|
-
bu_file: dict[str, Any] = tomllib.loads(LIBRARY_ROOT.joinpath("profile/backup.toml").read_text(encoding="utf-8"))
|
|
29
|
-
console.print(Panel(f"🧰 LOADING BACKUP CONFIGURATION\n📄 File: {LIBRARY_ROOT.joinpath('profile/backup.toml')}", title="[bold blue]Backup Configuration[/bold blue]", border_style="blue"))
|
|
30
|
-
|
|
31
|
-
if system() == "Linux":
|
|
32
|
-
bu_file = {key: val for key, val in bu_file.items() if "windows" not in key}
|
|
33
|
-
console.print(Panel(f"🐧 LINUX ENVIRONMENT DETECTED\n🔍 Filtering out Windows-specific entries\n✅ Found {len(bu_file)} applicable backup configuration entries", title="[bold blue]Linux Environment[/bold blue]", border_style="blue"))
|
|
34
|
-
elif system() == "Windows":
|
|
35
|
-
bu_file = {key: val for key, val in bu_file.items() if "linux" not in key}
|
|
36
|
-
console.print(Panel(f"🪟 WINDOWS ENVIRONMENT DETECTED\n🔍 Filtering out Linux-specific entries\n✅ Found {len(bu_file)} applicable backup configuration entries", title="[bold blue]Windows Environment[/bold blue]", border_style="blue"))
|
|
37
|
-
|
|
38
|
-
if which is None:
|
|
39
|
-
console.print(Panel(f"🔍 SELECT {direction} ITEMS\n📋 Choose which configuration entries to process", title="[bold blue]Select Items[/bold blue]", border_style="blue"))
|
|
40
|
-
choices = choose_from_options(multi=True, msg=f"WHICH FILE of the following do you want to {direction}?", options=["all"] + list(bu_file.keys()))
|
|
41
|
-
else:
|
|
42
|
-
choices = which.split(",") if which else []
|
|
43
|
-
console.print(Panel(f"🔖 PRE-SELECTED ITEMS\n📝 Using: {', '.join(choices)}", title="[bold blue]Pre-selected Items[/bold blue]", border_style="blue"))
|
|
44
|
-
|
|
45
|
-
if "all" in choices:
|
|
46
|
-
items = bu_file
|
|
47
|
-
console.print(Panel(f"📋 PROCESSING ALL ENTRIES\n🔢 Total entries to process: {len(bu_file)}", title="[bold blue]Process All Entries[/bold blue]", border_style="blue"))
|
|
48
|
-
else:
|
|
49
|
-
items = {key: val for key, val in bu_file.items() if key in choices}
|
|
50
|
-
console.print(Panel(f"📋 PROCESSING SELECTED ENTRIES\n🔢 Total entries to process: {len(items)}", title="[bold blue]Process Selected Entries[/bold blue]", border_style="blue"))
|
|
51
|
-
program = f"""$cloud = "{cloud}:{ES}" \n """ if system() == "Windows" else f"""cloud="{cloud}:{ES}" \n """
|
|
52
|
-
console.print(Panel(f"🚀 GENERATING {direction} SCRIPT\n🌥️ Cloud: {cloud}\n🗂️ Items: {len(items)}", title="[bold blue]Script Generation[/bold blue]", border_style="blue"))
|
|
53
|
-
for item_name, item in items.items():
|
|
54
|
-
flags = ""
|
|
55
|
-
flags += "z" if item["zip"] == "True" else ""
|
|
56
|
-
flags += "e" if item["encrypt"] == "True" else ""
|
|
57
|
-
flags += "r" if item["rel2home"] == "True" else ""
|
|
58
|
-
flags += "o" if system().lower() in item_name else ""
|
|
59
|
-
console.print(Panel(f"📦 PROCESSING: {item_name}\n📂 Path: {PathExtended(item['path']).as_posix()}\n🏳️ Flags: {flags or 'None'}", title=f"[bold blue]Processing Item: {item_name}[/bold blue]", border_style="blue"))
|
|
60
|
-
if flags:
|
|
61
|
-
flags = "-" + flags
|
|
62
|
-
if direction == "BACKUP":
|
|
63
|
-
program += f"""\ncloud_copy "{PathExtended(item["path"]).as_posix()}" $cloud {flags}\n"""
|
|
64
|
-
elif direction == "RETRIEVE":
|
|
65
|
-
program += f"""\ncloud_copy $cloud "{PathExtended(item["path"]).as_posix()}" {flags}\n"""
|
|
66
|
-
else:
|
|
67
|
-
console.print(Panel('❌ ERROR: INVALID DIRECTION\n⚠️ Direction must be either "BACKUP" or "RETRIEVE"', title="[bold red]Error: Invalid Direction[/bold red]", border_style="red"))
|
|
68
|
-
raise RuntimeError(f"Unknown direction: {direction}")
|
|
69
|
-
if item_name == "dotfiles" and system() == "Linux":
|
|
70
|
-
program += """\nchmod 700 ~/.ssh/*\n"""
|
|
71
|
-
console.print(Panel("🔒 SPECIAL HANDLING: SSH PERMISSIONS\n🛠️ Setting secure permissions for SSH files\n📝 Command: chmod 700 ~/.ssh/*", title="[bold blue]Special Handling: SSH Permissions[/bold blue]", border_style="blue"))
|
|
72
|
-
print_code(program, lexer="shell", desc=f"{direction} script")
|
|
73
|
-
console.print(Panel(f"✅ {direction} SCRIPT GENERATION COMPLETE\n🚀 Ready to execute the operations", title="[bold green]Script Generation Complete[/bold green]", border_style="green"))
|
|
74
|
-
import subprocess
|
|
75
|
-
|
|
76
|
-
subprocess.run(program, shell=True, check=True)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if __name__ == "__main__":
|
|
80
|
-
pass
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
# import shlex
|
|
4
|
-
from typing import Optional
|
|
5
|
-
from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import HOST, PROVIDER, MODEL
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def fire_crush(api_key: Optional[str], model: MODEL, provider: PROVIDER, machine: HOST, prompt_path: Path, repo_root: Path) -> str:
|
|
9
|
-
match machine:
|
|
10
|
-
case "local":
|
|
11
|
-
cmd = f"""
|
|
12
|
-
crush run {prompt_path}
|
|
13
|
-
"""
|
|
14
|
-
case "docker":
|
|
15
|
-
assert api_key is not None, "API key is required for Crush agent in docker mode."
|
|
16
|
-
json_path = Path(__file__).parent / "fire_crush.json"
|
|
17
|
-
json_template = json_path.read_text(encoding="utf-8")
|
|
18
|
-
json_filled = json_template.replace("{api_key}", api_key).replace("{model}", model).replace("{provider}", provider)
|
|
19
|
-
import tempfile
|
|
20
|
-
temp_config_file_local = tempfile.mkstemp(suffix=".json")[1]
|
|
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 "{provider}/{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: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
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
import shlex
|
|
4
|
-
from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import HOST
|
|
5
|
-
from typing import Optional, Literal
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def fire_gemini(api_key: Optional[str], model: Literal["gemini-2.5-pro"], provider: Literal["google"], machine: HOST, prompt_path: Path, repo_root: Path) -> str:
|
|
9
|
-
_ = provider
|
|
10
|
-
# model = "gemini-2.5-flash-lite"
|
|
11
|
-
# model = None # auto-select
|
|
12
|
-
# if model is None:
|
|
13
|
-
# model_arg = ""
|
|
14
|
-
# else:
|
|
15
|
-
model_arg = f"--model {shlex.quote(model)}"
|
|
16
|
-
# Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
|
|
17
|
-
safe_path = shlex.quote(str(prompt_path))
|
|
18
|
-
|
|
19
|
-
match machine:
|
|
20
|
-
case "local":
|
|
21
|
-
# Export the environment variable so it's available to subshells
|
|
22
|
-
if api_key is not None:
|
|
23
|
-
define_api_key = f"""export GEMINI_API_KEY="{shlex.quote(api_key)}" """
|
|
24
|
-
else:
|
|
25
|
-
define_api_key = "echo 'Warning: No GEMINI_API_KEY provided, hoping it is set in the environment.'"
|
|
26
|
-
cmd = f"""
|
|
27
|
-
{define_api_key}
|
|
28
|
-
echo "Using Gemini API key $GEMINI_API_KEY"
|
|
29
|
-
gemini {model_arg} --yolo --prompt {safe_path}
|
|
30
|
-
"""
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
case "docker":
|
|
34
|
-
assert api_key is not None, "When using docker, api_key must be provided."
|
|
35
|
-
cmd = f"""
|
|
36
|
-
docker run -it --rm \
|
|
37
|
-
-e GEMINI_API_KEY="{api_key}" \
|
|
38
|
-
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
39
|
-
-w "/workspace/{repo_root.name}" \
|
|
40
|
-
statistician/machineconfig:latest \
|
|
41
|
-
gemini --prompt "$PATH_PROMPT"
|
|
42
|
-
"""
|
|
43
|
-
return cmd
|
|
44
|
-
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
import shlex
|
|
4
|
-
from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import HOST
|
|
5
|
-
from typing import Optional, Literal
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def fire_qwen(config_dir: Optional[str], model: Literal["qwen"], provider: Literal["qwen"], machine: HOST, prompt_path: Path, repo_root: Path) -> str:
|
|
9
|
-
# assert model == "qwen", "Only qwen is supported currently."
|
|
10
|
-
# assert provider == "qwen", "Only qwen is supported currently."
|
|
11
|
-
# model = "qwen"
|
|
12
|
-
# model = "gemini-2.5-flash-lite"
|
|
13
|
-
# model = None # auto-select
|
|
14
|
-
# if model is None:
|
|
15
|
-
# model_arg = ""
|
|
16
|
-
# else:
|
|
17
|
-
_ = provider
|
|
18
|
-
# model_arg = f"--model {shlex.quote(model)}"
|
|
19
|
-
# Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
|
|
20
|
-
safe_path = shlex.quote(str(prompt_path))
|
|
21
|
-
|
|
22
|
-
match machine:
|
|
23
|
-
case "local":
|
|
24
|
-
# Export the environment variable so it's available to subshells
|
|
25
|
-
cmd = f"""
|
|
26
|
-
qwen --yolo --prompt {safe_path}
|
|
27
|
-
"""
|
|
28
|
-
case "docker":
|
|
29
|
-
assert config_dir is not None, "When using docker, config_dir must be provided."
|
|
30
|
-
assert Path(config_dir).exists(), f"Provided config_dir {config_dir} does not exist."
|
|
31
|
-
oauth_creds = Path(config_dir).joinpath("oauth_creds.json")
|
|
32
|
-
settings = Path(config_dir).joinpath("settings.json")
|
|
33
|
-
|
|
34
|
-
cmd = f"""
|
|
35
|
-
docker run -it --rm \
|
|
36
|
-
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
37
|
-
-v {shlex.quote(str(oauth_creds))}:/root/.qwen/oauth_creds.json \
|
|
38
|
-
-v {shlex.quote(str(settings))}:/root/.qwen/settings.json \
|
|
39
|
-
-w "/workspace/{repo_root.name}" \
|
|
40
|
-
statistician/machineconfig:latest \
|
|
41
|
-
qwen --prompt "$PATH_PROMPT"
|
|
42
|
-
"""
|
|
43
|
-
return cmd
|
|
@@ -1,15 +0,0 @@
|
|
|
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/work/winter_planning/"
|
|
7
|
-
CONTEXT_PATH="$REPO_ROOT/data/outpatient_mapping/op_services.csv"
|
|
8
|
-
PROMPT_PATH="$REPO_ROOT/data/outpatient_mapping/prompt"
|
|
9
|
-
AGENTS_DIR="$REPO_ROOT/.ai/agents/$JOB_NAME"
|
|
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
|
-
|
|
15
|
-
# agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Helper modules for the devops navigator TUI application.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from machineconfig.scripts.python.helpers_navigator.data_models import CommandInfo, ArgumentInfo
|
|
6
|
-
from machineconfig.scripts.python.helpers_navigator.command_builder import CommandBuilderScreen
|
|
7
|
-
from machineconfig.scripts.python.helpers_navigator.command_tree import CommandTree
|
|
8
|
-
from machineconfig.scripts.python.helpers_navigator.command_detail import CommandDetail
|
|
9
|
-
from machineconfig.scripts.python.helpers_navigator.search_bar import SearchBar
|
|
10
|
-
from machineconfig.scripts.python.helpers_navigator.main_app import CommandNavigatorApp
|
|
11
|
-
|
|
12
|
-
__all__ = [
|
|
13
|
-
"CommandInfo",
|
|
14
|
-
"ArgumentInfo",
|
|
15
|
-
"CommandBuilderScreen",
|
|
16
|
-
"CommandTree",
|
|
17
|
-
"CommandDetail",
|
|
18
|
-
"SearchBar",
|
|
19
|
-
"CommandNavigatorApp",
|
|
20
|
-
]
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Command detail widget for displaying command information.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from typing import Optional
|
|
6
|
-
from textual.widgets import Static
|
|
7
|
-
from rich.panel import Panel
|
|
8
|
-
from rich.text import Text
|
|
9
|
-
from machineconfig.scripts.python.helpers_navigator.data_models import CommandInfo
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class CommandDetail(Static):
|
|
13
|
-
"""Widget for displaying command details."""
|
|
14
|
-
|
|
15
|
-
def __init__(self, *, id: str) -> None: # type: ignore
|
|
16
|
-
super().__init__(id=id)
|
|
17
|
-
self.command_info: Optional[CommandInfo] = None
|
|
18
|
-
|
|
19
|
-
def update_command(self, command_info: Optional[CommandInfo]) -> None:
|
|
20
|
-
"""Update displayed command information."""
|
|
21
|
-
self.command_info = command_info
|
|
22
|
-
if command_info is None:
|
|
23
|
-
self.update("Select a command to view details")
|
|
24
|
-
return
|
|
25
|
-
|
|
26
|
-
content = Text()
|
|
27
|
-
content.append(f"{'🗂️ Group' if command_info.is_group else '⚡ Command'}: ", style="bold cyan")
|
|
28
|
-
content.append(f"{command_info.name}\n\n", style="bold yellow")
|
|
29
|
-
|
|
30
|
-
content.append("Description: ", style="bold green")
|
|
31
|
-
content.append(f"{command_info.description}\n\n", style="white")
|
|
32
|
-
|
|
33
|
-
content.append("Command: ", style="bold blue")
|
|
34
|
-
content.append(f"{command_info.command}\n\n", style="bold white")
|
|
35
|
-
|
|
36
|
-
if command_info.help_text:
|
|
37
|
-
content.append("Usage: ", style="bold magenta")
|
|
38
|
-
content.append(f"{command_info.help_text}\n\n", style="white")
|
|
39
|
-
|
|
40
|
-
if command_info.module_path:
|
|
41
|
-
content.append("Module: ", style="bold red")
|
|
42
|
-
content.append(f"{command_info.module_path}\n", style="white")
|
|
43
|
-
|
|
44
|
-
self.update(Panel(content, title=f"[bold]{command_info.name}[/bold]", border_style="blue"))
|