machineconfig 6.23__py3-none-any.whl → 8.12__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/cluster/remote/cloud_manager.py +1 -1
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +16 -221
- machineconfig/cluster/sessions_managers/wt_local_manager.py +55 -193
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +3 -3
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +5 -3
- machineconfig/cluster/sessions_managers/zellij_remote.py +2 -2
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +2 -2
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -7
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper_with_panes.py +1 -1
- machineconfig/jobs/installer/check_installations.py +0 -1
- machineconfig/jobs/installer/installer_data.json +1408 -201
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
- machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
- machineconfig/jobs/installer/package_groups.py +63 -92
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/jobs/installer/python_scripts/boxes.py +61 -0
- 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 +4 -1
- machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
- machineconfig/jobs/installer/{custom → python_scripts}/hx.py +75 -18
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
- machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +27 -22
- machineconfig/jobs/installer/python_scripts/sysabc.py +139 -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 +121 -0
- machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
- 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 +25 -0
- machineconfig/logger.py +0 -1
- machineconfig/profile/create_helper.py +56 -18
- machineconfig/profile/create_links.py +2 -1
- machineconfig/profile/create_links_export.py +64 -18
- machineconfig/profile/create_shell_profile.py +90 -132
- machineconfig/profile/mapper.toml +18 -8
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/wrap_mcfg +46 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +82 -60
- machineconfig/scripts/python/ai/initai.py +1 -19
- 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.sh +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
- machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/generic.py +1 -1
- machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
- machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +7 -2
- machineconfig/scripts/python/cloud.py +14 -9
- machineconfig/scripts/python/croshell.py +135 -117
- machineconfig/scripts/python/devops.py +48 -25
- machineconfig/scripts/python/devops_navigator.py +1 -5
- machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +18 -9
- machineconfig/scripts/python/fire_jobs.py +127 -118
- machineconfig/scripts/python/ftpx.py +44 -17
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/qr_code.py +166 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +37 -15
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +41 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/copilot/config.yml +1 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/crush/crush.json +10 -0
- machineconfig/scripts/python/helpers_agents/privacy/configs/gemini/settings.json +12 -0
- machineconfig/scripts/python/helpers_agents/privacy/privacy.py +109 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +34 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_copy.py +28 -21
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_mount.py +19 -17
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_sync.py +12 -11
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/start_slidev.py +6 -7
- machineconfig/scripts/python/helpers_devops/cli_config.py +105 -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 +221 -0
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/cli_repos.py +60 -36
- machineconfig/scripts/python/helpers_devops/cli_self.py +172 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +142 -0
- machineconfig/scripts/python/{devops_helpers/cli_terminal.py → helpers_devops/cli_share_terminal.py} +15 -17
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_backup_retrieve.py +7 -10
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_status.py +7 -19
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/helpers_devops/run_script.py +168 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{devops_helpers → helpers_devops}/themes/choose_wezterm_theme.py +1 -1
- machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -20
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +2 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +26 -16
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
- machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_builder.py +1 -1
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_detail.py +1 -1
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/command_tree.py +160 -23
- machineconfig/scripts/python/{helper_navigator → helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers_network/address.py +176 -0
- machineconfig/scripts/python/helpers_network/address_switch.py +78 -0
- machineconfig/scripts/python/{nw → helpers_network}/mount_nfs.py +2 -2
- machineconfig/scripts/python/{nw → helpers_network}/mount_ssh.py +1 -1
- machineconfig/scripts/python/{nw/devops_add_identity.py → helpers_network/ssh_add_identity.py} +35 -1
- machineconfig/scripts/python/{nw/devops_add_ssh_key.py → helpers_network/ssh_add_ssh_key.py} +26 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
- machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
- machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +1 -53
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/clone.py +0 -1
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +80 -37
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/entrypoint.py +5 -5
- machineconfig/scripts/python/helpers_repos/grource.py +2 -2
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/record.py +3 -2
- machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/{repos_helpers/count_lines.py → helpers_repos/repo_analyzer_2.py} +113 -192
- machineconfig/scripts/python/{repos_helpers → helpers_repos}/sync.py +5 -5
- machineconfig/scripts/python/{sessions_helpers → helpers_sessions}/sessions_multiprocess.py +19 -13
- machineconfig/scripts/python/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers_utils/pdf.py +96 -0
- machineconfig/scripts/python/helpers_utils/python.py +187 -0
- machineconfig/scripts/python/interactive.py +26 -35
- machineconfig/scripts/python/{entry.py → mcfg_entry.py} +24 -10
- machineconfig/scripts/python/msearch.py +72 -0
- machineconfig/scripts/python/sessions.py +101 -38
- machineconfig/scripts/python/terminal.py +136 -0
- machineconfig/scripts/python/utils.py +62 -0
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
- machineconfig/settings/lf/linux/lfrc +10 -11
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +15 -17
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/shells/bash/init.sh +57 -10
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
- machineconfig/settings/shells/nushell/config.nu +2 -35
- machineconfig/settings/shells/nushell/env.nu +45 -6
- machineconfig/settings/shells/nushell/init.nu +314 -0
- machineconfig/settings/shells/pwsh/init.ps1 +59 -23
- 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/television/cable_unix/alias.toml +8 -0
- machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
- machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
- machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
- machineconfig/settings/television/cable_unix/channels.toml +19 -0
- machineconfig/settings/television/cable_unix/dirs.toml +13 -0
- machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
- machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
- machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_unix/env.toml +17 -0
- machineconfig/settings/television/cable_unix/files.toml +11 -0
- machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
- machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
- machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
- machineconfig/settings/television/cable_unix/git-log.toml +12 -0
- machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
- machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
- machineconfig/settings/television/cable_unix/guix.toml +20 -0
- machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
- machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
- machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
- machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
- machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
- machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
- machineconfig/settings/television/cable_unix/procs.toml +20 -0
- machineconfig/settings/television/cable_unix/text.toml +17 -0
- machineconfig/settings/television/cable_unix/tldr.toml +18 -0
- machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
- machineconfig/settings/television/cable_windows/alias.toml +7 -0
- machineconfig/settings/television/cable_windows/dirs.toml +13 -0
- machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
- machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
- machineconfig/settings/television/cable_windows/env.toml +17 -0
- machineconfig/settings/television/cable_windows/files.toml +14 -0
- machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
- machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
- machineconfig/settings/television/cable_windows/git-log.toml +11 -0
- machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
- machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
- machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
- machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
- machineconfig/settings/television/cable_windows/text.toml +17 -0
- machineconfig/settings/yazi/init.lua +61 -0
- machineconfig/settings/yazi/keymap_linux.toml +94 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/theme.toml +4 -0
- machineconfig/settings/yazi/yazi_linux.toml +84 -0
- machineconfig/settings/yazi/yazi_windows.toml +58 -0
- machineconfig/settings/zellij/layouts/st.kdl +39 -8
- machineconfig/setup_linux/__init__.py +2 -2
- machineconfig/setup_linux/apps_desktop.sh +8 -27
- machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -11
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
- 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 +3 -5
- machineconfig/setup_windows/ssh/openssh-server.ps1 +1 -1
- machineconfig/setup_windows/uv.ps1 +8 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +26 -10
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/code.py +143 -167
- machineconfig/utils/files/art/fat_croco.txt +10 -0
- machineconfig/utils/files/art/halfwit_croco.txt +9 -0
- machineconfig/utils/files/art/happy_croco.txt +22 -0
- machineconfig/utils/files/art/water_croco.txt +11 -0
- machineconfig/utils/files/ascii_art.py +1 -1
- machineconfig/utils/files/headers.py +6 -11
- machineconfig/utils/files/read.py +3 -9
- machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +44 -101
- machineconfig/utils/installer_utils/installer_cli.py +175 -0
- machineconfig/utils/installer_utils/installer_helper.py +129 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +39 -87
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +17 -63
- machineconfig/utils/io.py +77 -4
- machineconfig/utils/links.py +56 -38
- machineconfig/utils/meta.py +235 -145
- machineconfig/utils/options.py +46 -18
- machineconfig/utils/options_tv.py +119 -0
- machineconfig/utils/path_extended.py +46 -97
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +10 -23
- machineconfig/utils/scheduler.py +84 -115
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/ssh.py +214 -476
- machineconfig/utils/ssh_utils/abc.py +5 -0
- machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
- machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
- machineconfig/utils/ssh_utils/utils.py +142 -0
- machineconfig/utils/ssh_utils/wsl.py +210 -0
- machineconfig/utils/terminal.py +3 -113
- machineconfig/utils/upgrade_packages.py +114 -28
- machineconfig/utils/ve.py +12 -4
- machineconfig-8.12.dist-info/METADATA +132 -0
- machineconfig-8.12.dist-info/RECORD +504 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/entry_points.txt +5 -1
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
- machineconfig/jobs/python/python_ve_symlink.py +0 -37
- machineconfig/jobs/python/vscode/api.py +0 -57
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -12
- machineconfig/jobs/windows/archive/openssh-server_add_key.ps1 +0 -7
- machineconfig/jobs/windows/archive/openssh-server_copy-ssh-id.ps1 +0 -14
- 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/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/devops_helpers/cli_config.py +0 -81
- machineconfig/scripts/python/devops_helpers/cli_config_dotfile.py +0 -84
- machineconfig/scripts/python/devops_helpers/cli_data.py +0 -18
- machineconfig/scripts/python/devops_helpers/cli_nw.py +0 -73
- machineconfig/scripts/python/devops_helpers/cli_self.py +0 -117
- machineconfig/scripts/python/devops_helpers/cli_share_server.py +0 -104
- machineconfig/scripts/python/helper_navigator/__init__.py +0 -20
- 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/fire_agents_helper_types.py +0 -30
- machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
- machineconfig/scripts/python/helpers_fire/template.sh +0 -15
- machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
- machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
- machineconfig/scripts/python/repos_helpers/action.py +0 -378
- machineconfig/scripts/python/repos_helpers/count_lines_frontend.py +0 -17
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- 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/shells/pwsh/profile.ps1 +0 -0
- machineconfig/settings/yazi/keymap.toml +0 -0
- machineconfig/settings/yazi/yazi.toml +0 -4
- machineconfig/setup_linux/apps.sh +0 -66
- machineconfig/setup_linux/nix/cli_installation.sh +0 -137
- machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
- machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
- machineconfig/setup_windows/apps.ps1 +0 -62
- machineconfig/setup_windows/others/obs.ps1 +0 -4
- machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
- machineconfig/setup_windows/wt_and_pwsh/__init__.py +0 -0
- machineconfig/utils/installer_utils/installer.py +0 -225
- machineconfig-6.23.dist-info/METADATA +0 -84
- machineconfig-6.23.dist-info/RECORD +0 -428
- machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_helper_restart.py +0 -0
- machineconfig/cluster/sessions_managers/{helpers → zellij_utils}/zellij_local_manager_helper.py +0 -0
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +0 -0
- machineconfig/jobs/installer/{custom_dev → 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/web_shortcuts → jobs/scripts/bash_scripts}/android.sh +0 -0
- machineconfig/jobs/{linux/msc → scripts/bash_scripts}/lid.sh +0 -0
- machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/mint_keyboard_shortcuts.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/{jobs/python → scripts/python/ai/utils}/__init__.py +0 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{croshell_helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
- machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
- machineconfig/scripts/python/{devops_helpers → helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{cloud_helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{devops_helpers/themes → helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/scheduler.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{croshell_helpers → helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{helpers_fire → helpers_devops}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_fire/agentic_frameworks → helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{devops_helpers → helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
- /machineconfig/scripts/python/{helper_navigator → helpers_navigator}/data_models.py +0 -0
- /machineconfig/scripts/python/{helper_navigator → helpers_navigator}/search_bar.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers_network}/__init__.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{repos_helpers → helpers_repos}/update.py +0 -0
- /machineconfig/scripts/python/{nw → helpers_sessions}/__init__.py +0 -0
- /machineconfig/{scripts/python/sessions_helpers → settings/wt}/__init__.py +0 -0
- /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/WHEEL +0 -0
- {machineconfig-6.23.dist-info → machineconfig-8.12.dist-info}/top_level.txt +0 -0
|
@@ -243,7 +243,7 @@
|
|
|
243
243
|
# The reason it is not automated for remotes is because even though the server might have failed, the processes therein might be running, so there is no automated way to tell."""
|
|
244
244
|
# log = self.read_log()
|
|
245
245
|
# jobs_all: list[str] = [p.name for p in self.base_path.expanduser().joinpath("jobs").iterdir()]
|
|
246
|
-
# jobs_selected = choose_from_options(options=jobs_all, msg="Select Jobs to Redo", multi=True,
|
|
246
|
+
# jobs_selected = choose_from_options(options=jobs_all, msg="Select Jobs to Redo", multi=True, tv=True)
|
|
247
247
|
# for a_job in jobs_selected:
|
|
248
248
|
# # find in which log list does this job live:
|
|
249
249
|
# found_log_type = None
|
|
@@ -85,7 +85,6 @@
|
|
|
85
85
|
# self.execution_log_dir.expanduser().joinpath("status.txt").write_text(status)
|
|
86
86
|
# return status
|
|
87
87
|
# pid: int = int(pid_path.read_text(encoding="utf-8").rstrip())
|
|
88
|
-
# import psutil
|
|
89
88
|
# try: proc = psutil.Process(pid=pid)
|
|
90
89
|
# except psutil.NoSuchProcess:
|
|
91
90
|
# print(f"Something wrong happened to job `{self.job_id}`.. Its status log file says `{status}`, but its declared `{pid=}` is dead. Moving to failed.")
|
|
@@ -142,7 +141,6 @@
|
|
|
142
141
|
# break
|
|
143
142
|
|
|
144
143
|
# # --------------- Clearning up queue_file from dead processes -----------------
|
|
145
|
-
# import psutil
|
|
146
144
|
# next_job_in_queue = queue_file[0] # only consider the first job in the queue
|
|
147
145
|
# try: _ = psutil.Process(next_job_in_queue.pid)
|
|
148
146
|
# except psutil.NoSuchProcess:
|
|
@@ -95,17 +95,15 @@ def enhanced_zellij_session_start(session_name: str, layout_path: str) -> Dict[s
|
|
|
95
95
|
# Start new session (use -b for background to avoid hanging)
|
|
96
96
|
start_cmd = f"zellij --layout {layout_path} a -b {session_name}"
|
|
97
97
|
start_result = run_enhanced_command(
|
|
98
|
-
start_cmd,
|
|
99
|
-
|
|
100
|
-
False,
|
|
101
|
-
10, # Add timeout to prevent hanging
|
|
98
|
+
command=start_cmd, description=f"Starting session '{session_name}' with layout", show_progress=False,
|
|
99
|
+
timeout=10, # Add timeout to prevent hanging
|
|
102
100
|
)
|
|
103
|
-
|
|
104
101
|
if start_result["success"]:
|
|
105
102
|
console.print(Panel(f"[bold green]✅ Session '{session_name}' is now running![/bold green]\n[dim]Layout: {layout_path}[/dim]", style="green", title="🎉 Success"))
|
|
106
103
|
else:
|
|
107
104
|
console.print(Panel(f"[bold red]❌ Failed to start session '{session_name}'[/bold red]\n[red]{start_result.get('stderr', 'Unknown error')}[/red]", style="red", title="💥 Error"))
|
|
108
|
-
|
|
105
|
+
# print("Sleeping for 3 seconds to allow zellij to initialize...")
|
|
106
|
+
# time.sleep(3) # Brief pause for readability
|
|
109
107
|
return start_result
|
|
110
108
|
|
|
111
109
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
|
|
3
3
|
# from machineconfig.utils.accessories import split_list
|
|
4
4
|
from typing import Literal, Protocol
|
|
5
|
-
from machineconfig.cluster.sessions_managers.
|
|
5
|
+
from machineconfig.cluster.sessions_managers.helpers.load_balancer_helper import restrict_num_tabs_helper1, restrict_num_tabs_helper2, restrict_num_tabs_helper3, restrict_num_tabs_helper4
|
|
6
6
|
|
|
7
7
|
class COMMAND_SPLITTER(Protocol):
|
|
8
8
|
def __call__(self, command: str, to: int) -> list[str]: ...
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
|
|
2
|
+
from types import FunctionType
|
|
3
|
+
from typing import Optional, Literal
|
|
4
|
+
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
def get_fire_tab_using_uv(func: FunctionType, tab_weight: int, import_module: bool, uv_with: Optional[list[str]], uv_project_dir: Optional[str]) -> tuple[TabConfig, Path]:
|
|
8
|
+
from machineconfig.utils.meta import lambda_to_python_script
|
|
9
|
+
if func.__name__ == "<lambda>":
|
|
10
|
+
py_script = lambda_to_python_script(func,
|
|
11
|
+
in_global=True, import_module=import_module)
|
|
12
|
+
else:
|
|
13
|
+
py_script = lambda_to_python_script(lambda: func(),
|
|
14
|
+
in_global=True, import_module=import_module)
|
|
15
|
+
from machineconfig.utils.code import get_uv_command_executing_python_script
|
|
16
|
+
command_to_run, py_script_path = get_uv_command_executing_python_script(python_script=py_script, uv_with=uv_with, uv_project_dir=uv_project_dir)
|
|
17
|
+
tab_config: TabConfig = {
|
|
18
|
+
"command": command_to_run,
|
|
19
|
+
"startDir": "$HOME",
|
|
20
|
+
"tabName": func.__name__,
|
|
21
|
+
"tabWeight": tab_weight
|
|
22
|
+
}
|
|
23
|
+
return tab_config, py_script_path
|
|
24
|
+
def get_fire_tab_using_fire(func: FunctionType, tab_weight: int) -> TabConfig:
|
|
25
|
+
import inspect
|
|
26
|
+
from machineconfig.utils.source_of_truth import CONFIG_ROOT
|
|
27
|
+
import platform
|
|
28
|
+
if platform.system().lower() == "windows":
|
|
29
|
+
wrap_mcfg = CONFIG_ROOT / "scripts/wrap_mcfg.ps1"
|
|
30
|
+
wrap_mcfg = f'& "{wrap_mcfg}"'
|
|
31
|
+
elif platform.system().lower() == "linux" or platform.system().lower() == "darwin":
|
|
32
|
+
wrap_mcfg = CONFIG_ROOT / "scripts/wrap_mcfg"
|
|
33
|
+
else:
|
|
34
|
+
raise ValueError(f"Unsupported platform: {platform.system()}")
|
|
35
|
+
path = Path(inspect.getfile(func))
|
|
36
|
+
path_relative = path.relative_to(Path.home())
|
|
37
|
+
command_to_run = f"""{wrap_mcfg} fire {path_relative} {func.__name__} """
|
|
38
|
+
tab_config: TabConfig = {
|
|
39
|
+
"command": command_to_run,
|
|
40
|
+
"startDir": "$HOME",
|
|
41
|
+
"tabName": func.__name__,
|
|
42
|
+
"tabWeight": tab_weight
|
|
43
|
+
}
|
|
44
|
+
return tab_config
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def make_layout_from_functions(functions: list[FunctionType], functions_weights: Optional[list[int]], import_module: bool, tab_configs: list[TabConfig],
|
|
49
|
+
layout_name: str, method: Literal["script", "fire"],
|
|
50
|
+
uv_with: Optional[list[str]] = None, uv_project_dir: Optional[str] = None
|
|
51
|
+
) -> LayoutConfig:
|
|
52
|
+
tabs2artifacts: list[tuple[TabConfig, list[Path]]] = []
|
|
53
|
+
for a_func, tab_weight in zip(functions, functions_weights or [1]*len(functions)):
|
|
54
|
+
match method:
|
|
55
|
+
case "script":
|
|
56
|
+
tab_config, artifact_files_1 = get_fire_tab_using_uv(a_func, tab_weight=tab_weight, import_module=import_module,
|
|
57
|
+
uv_with=uv_with, uv_project_dir=uv_project_dir
|
|
58
|
+
)
|
|
59
|
+
artifact_files = [artifact_files_1]
|
|
60
|
+
case "fire":
|
|
61
|
+
tab_config = get_fire_tab_using_fire(a_func, tab_weight=tab_weight)
|
|
62
|
+
artifact_files = []
|
|
63
|
+
tabs2artifacts.append((tab_config, artifact_files))
|
|
64
|
+
list_of_tabs = [tab for tab, _ in tabs2artifacts] + tab_configs
|
|
65
|
+
layout_config: LayoutConfig = {
|
|
66
|
+
"layoutName": layout_name,
|
|
67
|
+
"layoutTabs": list_of_tabs,
|
|
68
|
+
}
|
|
69
|
+
return layout_config
|
|
@@ -7,11 +7,7 @@ https://github.com/ruby9455/app_management/tree/main/app_management
|
|
|
7
7
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
import shlex
|
|
11
10
|
import subprocess
|
|
12
|
-
import random
|
|
13
|
-
import string
|
|
14
|
-
import json
|
|
15
11
|
import platform
|
|
16
12
|
from typing import Optional, Any
|
|
17
13
|
from pathlib import Path
|
|
@@ -22,6 +18,14 @@ from rich.panel import Panel
|
|
|
22
18
|
from rich.table import Table
|
|
23
19
|
|
|
24
20
|
from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
|
|
21
|
+
from machineconfig.cluster.sessions_managers.wt_utils.wt_helpers import (
|
|
22
|
+
generate_random_suffix,
|
|
23
|
+
# escape_for_wt,
|
|
24
|
+
validate_layout_config,
|
|
25
|
+
generate_wt_command_string,
|
|
26
|
+
check_wt_session_status,
|
|
27
|
+
check_command_status,
|
|
28
|
+
)
|
|
25
29
|
|
|
26
30
|
logging.basicConfig(level=logging.INFO)
|
|
27
31
|
logger = logging.getLogger(__name__)
|
|
@@ -37,52 +41,11 @@ class WTLayoutGenerator:
|
|
|
37
41
|
def __init__(self, layout_config: LayoutConfig, session_name: str):
|
|
38
42
|
self.session_name: str = session_name
|
|
39
43
|
self.layout_config: LayoutConfig = layout_config.copy()
|
|
40
|
-
self.script_path: Optional[str] = None
|
|
41
|
-
|
|
42
|
-
@staticmethod
|
|
43
|
-
def _generate_random_suffix(length: int) -> str:
|
|
44
|
-
"""Generate a random string suffix for unique PowerShell script names."""
|
|
45
|
-
return "".join(random.choices(string.ascii_lowercase + string.digits, k=length))
|
|
46
|
-
|
|
47
|
-
@staticmethod
|
|
48
|
-
def _parse_command(command: str) -> tuple[str, list[str]]:
|
|
49
|
-
try:
|
|
50
|
-
parts = shlex.split(command)
|
|
51
|
-
if not parts:
|
|
52
|
-
raise ValueError("Empty command provided")
|
|
53
|
-
return parts[0], parts[1:] if len(parts) > 1 else []
|
|
54
|
-
except ValueError as e:
|
|
55
|
-
logger.error(f"Error parsing command '{command}': {e}")
|
|
56
|
-
parts = command.split()
|
|
57
|
-
return parts[0] if parts else "", parts[1:] if len(parts) > 1 else []
|
|
58
|
-
|
|
59
|
-
@staticmethod
|
|
60
|
-
def _escape_for_wt(text: str) -> str:
|
|
61
|
-
"""Escape text for use in Windows Terminal commands."""
|
|
62
|
-
# Windows Terminal uses PowerShell-style escaping
|
|
63
|
-
text = text.replace('"', '""') # Escape quotes for PowerShell
|
|
64
|
-
if " " in text or ";" in text or "&" in text or "|" in text:
|
|
65
|
-
return f'"{text}"'
|
|
66
|
-
return text
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
@staticmethod
|
|
71
|
-
def _validate_layout_config(layout_config: LayoutConfig) -> None:
|
|
72
|
-
"""Validate layout configuration format and content."""
|
|
73
|
-
if not layout_config["layoutTabs"]:
|
|
74
|
-
raise ValueError("Layout must contain at least one tab")
|
|
75
|
-
for tab in layout_config["layoutTabs"]:
|
|
76
|
-
if not tab["tabName"].strip():
|
|
77
|
-
raise ValueError(f"Invalid tab name: {tab['tabName']}")
|
|
78
|
-
if not tab["command"].strip():
|
|
79
|
-
raise ValueError(f"Invalid command for tab '{tab['tabName']}': {tab['command']}")
|
|
80
|
-
if not tab["startDir"].strip():
|
|
81
|
-
raise ValueError(f"Invalid startDir for tab '{tab['tabName']}': {tab['startDir']}")
|
|
44
|
+
self.script_path: Optional[str] = None
|
|
82
45
|
|
|
83
46
|
def create_layout_file(self) -> bool:
|
|
84
47
|
"""Create Windows Terminal layout file and return success status."""
|
|
85
|
-
|
|
48
|
+
validate_layout_config(self.layout_config)
|
|
86
49
|
tab_count = len(self.layout_config['layoutTabs'])
|
|
87
50
|
layout_name = self.layout_config['layoutName']
|
|
88
51
|
console.print(f"[bold cyan]📋 Creating Windows Terminal layout[/bold cyan] [bright_green]'{layout_name}' with {tab_count} tabs[/bright_green]")
|
|
@@ -90,17 +53,13 @@ class WTLayoutGenerator:
|
|
|
90
53
|
for tab in self.layout_config['layoutTabs']:
|
|
91
54
|
console.print(f" [yellow]→[/yellow] [bold]{tab['tabName']}[/bold] [dim]in[/dim] [blue]{tab['startDir']}[/blue]")
|
|
92
55
|
|
|
93
|
-
|
|
94
|
-
wt_command = self._generate_wt_command_string(self.layout_config, self.session_name)
|
|
56
|
+
wt_command = generate_wt_command_string(self.layout_config, self.session_name)
|
|
95
57
|
|
|
96
|
-
random_suffix =
|
|
97
|
-
# Create PowerShell script content
|
|
58
|
+
random_suffix = generate_random_suffix(8)
|
|
98
59
|
script_content = f"""# Windows Terminal layout for {self.session_name}
|
|
99
60
|
# Generated with random suffix: {random_suffix}
|
|
100
61
|
{wt_command}
|
|
101
62
|
"""
|
|
102
|
-
# Write to file
|
|
103
|
-
random_suffix = WTLayoutGenerator._generate_random_suffix(8)
|
|
104
63
|
tmp_dir = Path(TMP_LAYOUT_DIR)
|
|
105
64
|
tmp_dir.mkdir(parents=True, exist_ok=True)
|
|
106
65
|
script_file = tmp_dir / f"wt_layout_{self.session_name}_{random_suffix}.ps1"
|
|
@@ -110,46 +69,10 @@ class WTLayoutGenerator:
|
|
|
110
69
|
console.print(f"[bold green]✅ Layout created successfully:[/bold green] [cyan]{self.script_path}[/cyan]")
|
|
111
70
|
return True
|
|
112
71
|
|
|
113
|
-
def _generate_wt_command_string(self, layout_config: LayoutConfig, window_name: str) -> str:
|
|
114
|
-
"""Generate complete Windows Terminal command string."""
|
|
115
|
-
# Build the complete Windows Terminal command
|
|
116
|
-
command_parts = []
|
|
117
|
-
|
|
118
|
-
for i, tab in enumerate(layout_config["layoutTabs"]):
|
|
119
|
-
is_first = i == 0
|
|
120
|
-
|
|
121
|
-
if is_first:
|
|
122
|
-
# First tab: start with wt command and window name
|
|
123
|
-
tab_parts = ["wt", "-w", WTLayoutGenerator._escape_for_wt(window_name)]
|
|
124
|
-
else:
|
|
125
|
-
# Subsequent tabs: use new-tab
|
|
126
|
-
tab_parts = ["new-tab"]
|
|
127
|
-
|
|
128
|
-
# Add common tab arguments
|
|
129
|
-
tab_name = tab["tabName"]
|
|
130
|
-
cwd = tab["startDir"]
|
|
131
|
-
command = tab["command"]
|
|
132
|
-
|
|
133
|
-
# Convert paths to Windows format if needed
|
|
134
|
-
if cwd.startswith("~/"):
|
|
135
|
-
cwd = cwd.replace("~/", f"{Path.home()}/")
|
|
136
|
-
elif cwd == "~":
|
|
137
|
-
cwd = str(Path.home())
|
|
138
|
-
|
|
139
|
-
# Add arguments in the correct order
|
|
140
|
-
tab_parts.extend(["-d", WTLayoutGenerator._escape_for_wt(cwd)])
|
|
141
|
-
tab_parts.extend(["--title", WTLayoutGenerator._escape_for_wt(tab_name)])
|
|
142
|
-
tab_parts.append(WTLayoutGenerator._escape_for_wt(command))
|
|
143
|
-
|
|
144
|
-
command_parts.append(" ".join(tab_parts))
|
|
145
|
-
|
|
146
|
-
# Join all tab commands with escaped semicolons for PowerShell
|
|
147
|
-
return " `; ".join(command_parts)
|
|
148
|
-
|
|
149
72
|
def get_wt_layout_preview(self, layout_config: LayoutConfig) -> str:
|
|
150
73
|
"""Generate preview of the Windows Terminal command that would be created."""
|
|
151
|
-
|
|
152
|
-
return
|
|
74
|
+
validate_layout_config(layout_config)
|
|
75
|
+
return generate_wt_command_string(layout_config, "preview")
|
|
153
76
|
|
|
154
77
|
def check_all_commands_status(self) -> dict[str, dict[str, Any]]:
|
|
155
78
|
if not self.layout_config:
|
|
@@ -159,137 +82,13 @@ class WTLayoutGenerator:
|
|
|
159
82
|
status_report = {}
|
|
160
83
|
for tab in self.layout_config["layoutTabs"]:
|
|
161
84
|
tab_name = tab["tabName"]
|
|
162
|
-
status_report[tab_name] =
|
|
85
|
+
status_report[tab_name] = check_command_status(tab_name, self.layout_config)
|
|
163
86
|
|
|
164
87
|
return status_report
|
|
165
88
|
|
|
166
|
-
@staticmethod
|
|
167
|
-
def check_wt_session_status(session_name: str) -> dict[str, Any]:
|
|
168
|
-
try:
|
|
169
|
-
# Simplified Windows Terminal process check
|
|
170
|
-
ps_script = """
|
|
171
|
-
try {
|
|
172
|
-
$wtProcesses = Get-Process -Name 'WindowsTerminal' -ErrorAction SilentlyContinue
|
|
173
|
-
if ($wtProcesses) {
|
|
174
|
-
$processInfo = @()
|
|
175
|
-
$wtProcesses | ForEach-Object {
|
|
176
|
-
$info = @{
|
|
177
|
-
"Id" = $_.Id
|
|
178
|
-
"ProcessName" = $_.ProcessName
|
|
179
|
-
"StartTime" = $_.StartTime.ToString()
|
|
180
|
-
}
|
|
181
|
-
$processInfo += $info
|
|
182
|
-
}
|
|
183
|
-
$processInfo | ConvertTo-Json -Depth 2
|
|
184
|
-
}
|
|
185
|
-
} catch {
|
|
186
|
-
# No Windows Terminal processes found
|
|
187
|
-
}
|
|
188
|
-
"""
|
|
189
|
-
|
|
190
|
-
result = subprocess.run([POWERSHELL_CMD, "-Command", ps_script], capture_output=True, text=True, timeout=5)
|
|
191
|
-
|
|
192
|
-
if result.returncode == 0:
|
|
193
|
-
output = result.stdout.strip()
|
|
194
|
-
if output and output != "":
|
|
195
|
-
try:
|
|
196
|
-
processes = json.loads(output)
|
|
197
|
-
if not isinstance(processes, list):
|
|
198
|
-
processes = [processes]
|
|
199
|
-
|
|
200
|
-
# For simplicity, assume session exists if WT is running
|
|
201
|
-
return {
|
|
202
|
-
"wt_running": True,
|
|
203
|
-
"session_exists": len(processes) > 0,
|
|
204
|
-
"session_name": session_name,
|
|
205
|
-
"all_windows": processes,
|
|
206
|
-
"session_windows": processes # Simplified - assume all windows could be session windows
|
|
207
|
-
}
|
|
208
|
-
except Exception as e:
|
|
209
|
-
return {"wt_running": True, "session_exists": False, "error": f"Failed to parse process info: {e}", "session_name": session_name}
|
|
210
|
-
else:
|
|
211
|
-
return {"wt_running": False, "session_exists": False, "session_name": session_name, "all_windows": []}
|
|
212
|
-
else:
|
|
213
|
-
return {"wt_running": False, "error": result.stderr, "session_name": session_name}
|
|
214
|
-
|
|
215
|
-
except subprocess.TimeoutExpired:
|
|
216
|
-
return {"wt_running": False, "error": "Timeout while checking Windows Terminal processes", "session_name": session_name}
|
|
217
|
-
except FileNotFoundError:
|
|
218
|
-
return {"wt_running": False, "error": f"PowerShell ({POWERSHELL_CMD}) not found in PATH", "session_name": session_name}
|
|
219
|
-
except Exception as e:
|
|
220
|
-
return {"wt_running": False, "error": str(e), "session_name": session_name}
|
|
221
|
-
|
|
222
|
-
@staticmethod
|
|
223
|
-
def check_command_status(tab_name: str, layout_config: LayoutConfig) -> dict[str, Any]:
|
|
224
|
-
"""Check if a command is running by looking for processes."""
|
|
225
|
-
# Find the tab with the given name
|
|
226
|
-
tab_config = None
|
|
227
|
-
for tab in layout_config["layoutTabs"]:
|
|
228
|
-
if tab["tabName"] == tab_name:
|
|
229
|
-
tab_config = tab
|
|
230
|
-
break
|
|
231
|
-
|
|
232
|
-
if tab_config is None:
|
|
233
|
-
return {"status": "unknown", "error": f"Tab '{tab_name}' not found in layout config", "running": False, "pid": None, "command": None}
|
|
234
|
-
|
|
235
|
-
command = tab_config["command"]
|
|
236
|
-
|
|
237
|
-
try:
|
|
238
|
-
# Extract the primary executable name from command
|
|
239
|
-
primary_cmd = command.split()[0] if command.strip() else ""
|
|
240
|
-
if not primary_cmd:
|
|
241
|
-
return {"status": "error", "error": "Empty command", "running": False, "command": command, "tab_name": tab_name}
|
|
242
|
-
|
|
243
|
-
# Use a much simpler PowerShell script that just checks for process names
|
|
244
|
-
ps_script = f"""
|
|
245
|
-
try {{
|
|
246
|
-
$processes = Get-Process -Name '{primary_cmd}' -ErrorAction SilentlyContinue
|
|
247
|
-
if ($processes) {{
|
|
248
|
-
$processes | ForEach-Object {{
|
|
249
|
-
$procInfo = @{{
|
|
250
|
-
"pid" = $_.Id
|
|
251
|
-
"name" = $_.ProcessName
|
|
252
|
-
"start_time" = $_.StartTime.ToString()
|
|
253
|
-
}}
|
|
254
|
-
Write-Output ($procInfo | ConvertTo-Json -Compress)
|
|
255
|
-
}}
|
|
256
|
-
}}
|
|
257
|
-
}} catch {{
|
|
258
|
-
# No processes found or other error
|
|
259
|
-
}}
|
|
260
|
-
"""
|
|
261
|
-
|
|
262
|
-
result = subprocess.run([POWERSHELL_CMD, "-Command", ps_script], capture_output=True, text=True, timeout=5)
|
|
263
|
-
|
|
264
|
-
if result.returncode == 0:
|
|
265
|
-
output_lines = [line.strip() for line in result.stdout.strip().split("\n") if line.strip()]
|
|
266
|
-
matching_processes = []
|
|
267
|
-
|
|
268
|
-
for line in output_lines:
|
|
269
|
-
if line.startswith("{") and line.endswith("}"):
|
|
270
|
-
try:
|
|
271
|
-
proc_info = json.loads(line)
|
|
272
|
-
matching_processes.append(proc_info)
|
|
273
|
-
except json.JSONDecodeError:
|
|
274
|
-
continue
|
|
275
|
-
|
|
276
|
-
if matching_processes:
|
|
277
|
-
return {"status": "running", "running": True, "processes": matching_processes, "command": command, "tab_name": tab_name}
|
|
278
|
-
else:
|
|
279
|
-
return {"status": "not_running", "running": False, "processes": [], "command": command, "tab_name": tab_name}
|
|
280
|
-
else:
|
|
281
|
-
return {"status": "error", "error": f"Command failed: {result.stderr}", "running": False, "command": command, "tab_name": tab_name}
|
|
282
|
-
|
|
283
|
-
except subprocess.TimeoutExpired:
|
|
284
|
-
logger.error(f"Timeout checking command status for tab '{tab_name}'")
|
|
285
|
-
return {"status": "timeout", "error": "Timeout checking process status", "running": False, "command": command, "tab_name": tab_name}
|
|
286
|
-
except Exception as e:
|
|
287
|
-
logger.error(f"Error checking command status for tab '{tab_name}': {e}")
|
|
288
|
-
return {"status": "error", "error": str(e), "running": False, "command": command, "tab_name": tab_name}
|
|
289
|
-
|
|
290
89
|
def get_status_report(self) -> dict[str, Any]:
|
|
291
90
|
"""Get status report for this layout including Windows Terminal and commands."""
|
|
292
|
-
wt_status =
|
|
91
|
+
wt_status = check_wt_session_status(self.session_name or "default")
|
|
293
92
|
commands_status = self.check_all_commands_status()
|
|
294
93
|
|
|
295
94
|
running_count = sum(1 for status in commands_status.values() if status.get("running", False))
|
|
@@ -382,14 +181,11 @@ def run_wt_layout(layout_config: LayoutConfig) -> None:
|
|
|
382
181
|
session_name = layout_config["layoutName"]
|
|
383
182
|
generator = WTLayoutGenerator(layout_config=layout_config, session_name=session_name)
|
|
384
183
|
generator.create_layout_file()
|
|
385
|
-
|
|
386
184
|
if generator.script_path is None:
|
|
387
185
|
raise RuntimeError("Script path was not set after creating layout file")
|
|
388
|
-
|
|
389
186
|
# Execute the script
|
|
390
187
|
cmd = f'powershell -ExecutionPolicy Bypass -File "{generator.script_path}"'
|
|
391
188
|
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
|
|
392
|
-
|
|
393
189
|
if result.returncode == 0:
|
|
394
190
|
print(f"Windows Terminal layout is running @ {layout_config['layoutName']}")
|
|
395
191
|
else:
|
|
@@ -400,7 +196,6 @@ def run_wt_layout(layout_config: LayoutConfig) -> None:
|
|
|
400
196
|
def run_command_in_wt_tab(command: str, tab_name: str, cwd: Optional[str]) -> str:
|
|
401
197
|
"""Create a command to run in a new Windows Terminal tab."""
|
|
402
198
|
cwd_part = f'-d "{cwd}"' if cwd else ""
|
|
403
|
-
|
|
404
199
|
return f"""
|
|
405
200
|
echo "Creating new Windows Terminal tab: {tab_name}"
|
|
406
201
|
wt new-tab --title "{tab_name}" {cwd_part} "{command}"
|