machineconfig 5.15__py3-none-any.whl → 7.98__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/__init__.py +0 -28
- 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/remote/script_execution.py +0 -1
- machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +114 -289
- machineconfig/cluster/sessions_managers/wt_local_manager.py +70 -210
- machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +52 -198
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +25 -170
- machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +16 -12
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
- machineconfig/jobs/{python → installer}/check_installations.py +2 -3
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/hx.py +76 -19
- machineconfig/jobs/installer/custom/yazi.py +119 -0
- machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
- machineconfig/jobs/installer/custom_dev/brave.py +5 -9
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +4 -1
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/nerdfont.py +1 -1
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +33 -28
- machineconfig/jobs/installer/custom_dev/sysabc.py +139 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
- machineconfig/jobs/installer/custom_dev/winget.py +10 -14
- machineconfig/jobs/installer/installer_data.json +1487 -229
- machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
- machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
- machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
- machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
- machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/q.sh +10 -6
- machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
- machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
- machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
- machineconfig/jobs/installer/package_groups.py +106 -177
- machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
- machineconfig/logger.py +0 -1
- machineconfig/profile/backup.toml +49 -0
- machineconfig/profile/bash_shell_profiles.md +11 -0
- machineconfig/profile/create_helper.py +62 -0
- machineconfig/profile/create_links.py +288 -0
- machineconfig/profile/create_links_export.py +100 -0
- machineconfig/profile/create_shell_profile.py +147 -0
- machineconfig/profile/mapper.toml +263 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
- machineconfig/scripts/linux/wrap_mcfg +46 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +123 -117
- machineconfig/scripts/python/ai/initai.py +3 -28
- machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
- machineconfig/scripts/python/ai/scripts/command_runner.sh +9 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/{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 +5 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- machineconfig/scripts/python/ai/solutions/generic.py +28 -5
- machineconfig/scripts/python/ai/utils/generate_files.py +348 -0
- machineconfig/scripts/python/ai/utils/vscode_tasks.py +37 -0
- machineconfig/scripts/python/cloud.py +29 -0
- machineconfig/scripts/python/croshell.py +137 -113
- machineconfig/scripts/python/devops.py +61 -101
- machineconfig/scripts/python/devops_navigator.py +6 -0
- machineconfig/scripts/python/env_manager/__init__.py +1 -0
- machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
- machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
- machineconfig/scripts/python/fire_jobs.py +110 -150
- machineconfig/scripts/python/ftpx.py +51 -24
- 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/run_py_script.py +79 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +26 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
- 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_agents/fire_agents_help_launch.py +126 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +41 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
- machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +32 -0
- machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +29 -35
- machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +8 -9
- 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 +214 -0
- machineconfig/scripts/python/helpers_devops/cli_repos.py +215 -0
- 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/{share_terminal.py → helpers_devops/cli_share_terminal.py} +45 -35
- machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
- machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
- machineconfig/scripts/python/helpers_devops/devops_status.py +499 -0
- machineconfig/scripts/python/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
- machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +3 -3
- machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
- machineconfig/scripts/python/helpers_fire_command/f.py +0 -0
- machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
- machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +121 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/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/helpers_navigator/command_builder.py +111 -0
- machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +620 -0
- machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
- machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
- machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
- machineconfig/scripts/python/helpers_network/__init__.py +0 -0
- machineconfig/scripts/python/helpers_network/address.py +132 -0
- machineconfig/scripts/python/{devops_add_identity.py → helpers_network/devops_add_identity.py} +0 -2
- machineconfig/scripts/python/helpers_network/devops_add_ssh_key.py +153 -0
- machineconfig/scripts/{linux → python/helpers_network}/mount_nfs +0 -1
- machineconfig/scripts/python/{mount_nfs.py → helpers_network/mount_nfs.py} +3 -3
- machineconfig/scripts/{linux → python/helpers_network}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → helpers_network/mount_ssh.py} +3 -3
- machineconfig/scripts/python/{onetimeshare.py → helpers_network/onetimeshare.py} +0 -1
- machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +391 -0
- machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +338 -0
- machineconfig/scripts/python/{wifi_conn.py → helpers_network/wifi_conn.py} +1 -53
- machineconfig/scripts/python/{wsl_windows_transfer.py → helpers_network/wsl_windows_transfer.py} +5 -4
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
- machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
- machineconfig/scripts/python/{count_lines.py → helpers_repos/repo_analyzer_2.py} +113 -192
- machineconfig/scripts/python/helpers_repos/sync.py +66 -0
- machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
- machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +65 -0
- machineconfig/scripts/python/helpers_utils/download.py +150 -0
- machineconfig/scripts/python/helpers_utils/path.py +185 -0
- machineconfig/scripts/python/interactive.py +64 -84
- machineconfig/scripts/python/mcfg_entry.py +58 -0
- machineconfig/scripts/python/msearch.py +71 -0
- machineconfig/scripts/python/sessions.py +119 -45
- machineconfig/scripts/python/terminal.py +133 -0
- machineconfig/scripts/python/utils.py +64 -0
- machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -0
- machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
- machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
- machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
- machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
- machineconfig/settings/broot/br.sh +0 -4
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
- machineconfig/settings/lf/linux/lfrc +10 -12
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +18 -38
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/pistol/pistol.conf +1 -1
- machineconfig/settings/shells/bash/init.sh +82 -31
- 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 +61 -43
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +32 -17
- machineconfig/settings/shells/zsh/init.sh +89 -0
- machineconfig/settings/svim/linux/init.toml +0 -4
- machineconfig/settings/svim/windows/init.toml +0 -3
- machineconfig/settings/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/setup_linux/__init__.py +11 -0
- machineconfig/setup_linux/apps_desktop.sh +89 -0
- machineconfig/setup_linux/apps_gui.sh +64 -0
- machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
- machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
- machineconfig/setup_linux/uv.sh +15 -0
- machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
- machineconfig/setup_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 +11 -0
- machineconfig/setup_windows/others/power_options.ps1 +7 -0
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
- machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
- machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
- machineconfig/setup_windows/uv.ps1 +17 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -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/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +155 -105
- machineconfig/utils/files/art/fat_croco.txt +10 -0
- machineconfig/utils/files/art/halfwit_croco.txt +9 -0
- machineconfig/utils/files/art/happy_croco.txt +22 -0
- machineconfig/utils/files/art/water_croco.txt +11 -0
- machineconfig/utils/files/ascii_art.py +1 -1
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +11 -14
- machineconfig/utils/files/ouch/__init__.py +0 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +10 -18
- machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
- machineconfig/utils/installer_utils/install_from_url.py +183 -0
- machineconfig/utils/installer_utils/installer_class.py +64 -181
- 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} +66 -97
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +49 -82
- machineconfig/utils/io.py +77 -23
- machineconfig/utils/links.py +254 -162
- machineconfig/utils/meta.py +256 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +46 -18
- machineconfig/utils/options_tv.py +119 -0
- machineconfig/utils/path_extended.py +48 -101
- machineconfig/utils/path_helper.py +76 -23
- machineconfig/utils/procs.py +50 -70
- machineconfig/utils/scheduler.py +88 -124
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/schemas/layouts/layout_types.py +1 -1
- machineconfig/utils/source_of_truth.py +3 -6
- machineconfig/utils/ssh.py +263 -274
- 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 +302 -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/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +114 -28
- machineconfig/utils/ve.py +12 -4
- machineconfig-7.98.dist-info/METADATA +132 -0
- machineconfig-7.98.dist-info/RECORD +504 -0
- machineconfig-7.98.dist-info/entry_points.txt +13 -0
- machineconfig/cluster/sessions_managers/ffile.py +0 -4
- machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
- machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
- machineconfig/jobs/python/python_ve_symlink.py +0 -37
- machineconfig/jobs/python/vscode/api.py +0 -57
- machineconfig/jobs/python/vscode/sync_code.py +0 -73
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
- machineconfig/jobs/windows/start_terminal.ps1 +0 -6
- machineconfig/jobs/windows/startup_file.cmd +0 -2
- machineconfig/profile/create.py +0 -303
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- machineconfig/scripts/linux/agents +0 -2
- machineconfig/scripts/linux/choose_wezterm_theme +0 -3
- machineconfig/scripts/linux/cloud_copy +0 -2
- machineconfig/scripts/linux/cloud_mount +0 -2
- machineconfig/scripts/linux/cloud_repo_sync +0 -2
- machineconfig/scripts/linux/cloud_sync +0 -2
- machineconfig/scripts/linux/croshell +0 -3
- machineconfig/scripts/linux/devops +0 -2
- machineconfig/scripts/linux/fire +0 -2
- machineconfig/scripts/linux/ftpx +0 -2
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzfag +0 -17
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/fzfrga +0 -21
- machineconfig/scripts/linux/gh_models +0 -2
- machineconfig/scripts/linux/initai +0 -2
- machineconfig/scripts/linux/kill_process +0 -2
- machineconfig/scripts/linux/scheduler +0 -2
- machineconfig/scripts/linux/sessions +0 -2
- machineconfig/scripts/linux/share_smb +0 -1
- machineconfig/scripts/linux/skrg +0 -4
- machineconfig/scripts/linux/start_slidev +0 -2
- machineconfig/scripts/linux/start_terminals +0 -3
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/wifi_conn +0 -2
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/generate_files.py +0 -83
- machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
- machineconfig/scripts/python/cloud_repo_sync.py +0 -190
- machineconfig/scripts/python/count_lines_frontend.py +0 -16
- machineconfig/scripts/python/devops_add_ssh_key.py +0 -120
- machineconfig/scripts/python/dotfile.py +0 -78
- machineconfig/scripts/python/fire_agents_help_launch.py +0 -120
- machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
- machineconfig/scripts/python/fire_jobs_route_helper.py +0 -65
- machineconfig/scripts/python/get_zellij_cmd.py +0 -15
- machineconfig/scripts/python/gh_models.py +0 -104
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -116
- machineconfig/scripts/python/repos.py +0 -132
- machineconfig/scripts/python/repos_helper_action.py +0 -378
- machineconfig/scripts/python/snapshot.py +0 -25
- machineconfig/scripts/python/start_terminals.py +0 -121
- machineconfig/scripts/python/t4.py +0 -17
- machineconfig/scripts/windows/agents.ps1 +0 -1
- machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
- machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
- machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
- machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
- machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
- machineconfig/scripts/windows/croshell.ps1 +0 -1
- machineconfig/scripts/windows/devops.ps1 +0 -1
- machineconfig/scripts/windows/dotfile.ps1 +0 -1
- machineconfig/scripts/windows/fire.ps1 +0 -1
- machineconfig/scripts/windows/ftpx.ps1 +0 -1
- machineconfig/scripts/windows/fzfb.ps1 +0 -3
- machineconfig/scripts/windows/fzfg.ps1 +0 -2
- machineconfig/scripts/windows/fzfrga.bat +0 -20
- machineconfig/scripts/windows/gpt.ps1 +0 -1
- machineconfig/scripts/windows/grep.ps1 +0 -2
- machineconfig/scripts/windows/initai.ps1 +0 -1
- machineconfig/scripts/windows/kill_process.ps1 +0 -1
- machineconfig/scripts/windows/nano.ps1 +0 -3
- machineconfig/scripts/windows/pomodoro.ps1 +0 -1
- machineconfig/scripts/windows/reload_path.ps1 +0 -3
- machineconfig/scripts/windows/scheduler.ps1 +0 -1
- machineconfig/scripts/windows/sessions.ps1 +0 -1
- machineconfig/scripts/windows/snapshot.ps1 +0 -1
- machineconfig/scripts/windows/start_slidev.ps1 +0 -1
- machineconfig/scripts/windows/start_terminals.ps1 +0 -1
- machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
- machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
- machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/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/nix/cli_installation.sh +0 -157
- machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
- machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
- machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
- machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
- machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
- machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
- machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
- machineconfig/utils/ai/generate_file_checklist.py +0 -68
- machineconfig/utils/installer_utils/installer.py +0 -189
- machineconfig-5.15.dist-info/METADATA +0 -188
- machineconfig-5.15.dist-info/RECORD +0 -415
- machineconfig-5.15.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
- machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
- machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
- machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
- machineconfig/{jobs/python → scripts/python/ai/utils}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers → helpers_agents}/__init__.py +0 -0
- machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_agents/agentic_frameworks/__init__.py} +0 -0
- machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
- machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
- machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_cloud/__init__.py} +0 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_croshell/__init__.py} +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
- /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
- /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
- /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/__init__.py} +0 -0
- /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_devops/themes/__init__.py} +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
- /machineconfig/scripts/{linux → python/helpers_network}/mount_drive +0 -0
- /machineconfig/scripts/python/{mount_nw_drive.py → helpers_network/mount_nw_drive.py} +0 -0
- /machineconfig/scripts/{linux → python/helpers_network}/mount_smb +0 -0
- /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
- /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
- /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
- /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.98.dist-info}/WHEEL +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.98.dist-info}/top_level.txt +0 -0
|
@@ -2,154 +2,79 @@
|
|
|
2
2
|
"""
|
|
3
3
|
Windows Terminal local layout generator and session manager.
|
|
4
4
|
Equivalent to zellij_local.py but for Windows Terminal.
|
|
5
|
+
|
|
6
|
+
https://github.com/ruby9455/app_management/tree/main/app_management
|
|
7
|
+
|
|
5
8
|
"""
|
|
6
9
|
|
|
7
|
-
import shlex
|
|
8
10
|
import subprocess
|
|
9
|
-
import random
|
|
10
|
-
import string
|
|
11
|
-
import json
|
|
12
11
|
import platform
|
|
13
|
-
from typing import
|
|
12
|
+
from typing import Optional, Any
|
|
14
13
|
from pathlib import Path
|
|
15
14
|
import logging
|
|
16
15
|
|
|
16
|
+
from rich.console import Console
|
|
17
|
+
from rich.panel import Panel
|
|
18
|
+
from rich.table import Table
|
|
19
|
+
|
|
17
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
|
+
)
|
|
18
29
|
|
|
19
30
|
logging.basicConfig(level=logging.INFO)
|
|
20
31
|
logger = logging.getLogger(__name__)
|
|
21
|
-
|
|
32
|
+
console = Console()
|
|
22
33
|
|
|
23
34
|
# Check if we're on Windows
|
|
24
35
|
IS_WINDOWS = platform.system().lower() == "windows"
|
|
25
36
|
POWERSHELL_CMD = "powershell" if IS_WINDOWS else "pwsh" # Use pwsh on non-Windows systems
|
|
37
|
+
TMP_LAYOUT_DIR = Path.home() / "tmp_results" / "wt_layouts"
|
|
26
38
|
|
|
27
39
|
|
|
28
40
|
class WTLayoutGenerator:
|
|
29
|
-
def __init__(self):
|
|
30
|
-
self.session_name:
|
|
31
|
-
self.layout_config:
|
|
32
|
-
self.script_path: Optional[str] = None
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if not parts:
|
|
44
|
-
raise ValueError("Empty command provided")
|
|
45
|
-
return parts[0], parts[1:] if len(parts) > 1 else []
|
|
46
|
-
except ValueError as e:
|
|
47
|
-
logger.error(f"Error parsing command '{command}': {e}")
|
|
48
|
-
parts = command.split()
|
|
49
|
-
return parts[0] if parts else "", parts[1:] if len(parts) > 1 else []
|
|
50
|
-
|
|
51
|
-
@staticmethod
|
|
52
|
-
def _escape_for_wt(text: str) -> str:
|
|
53
|
-
"""Escape text for use in Windows Terminal commands."""
|
|
54
|
-
# Windows Terminal uses PowerShell-style escaping
|
|
55
|
-
text = text.replace('"', '""') # Escape quotes for PowerShell
|
|
56
|
-
if " " in text or ";" in text or "&" in text or "|" in text:
|
|
57
|
-
return f'"{text}"'
|
|
58
|
-
return text
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
@staticmethod
|
|
63
|
-
def _validate_layout_config(layout_config: LayoutConfig) -> None:
|
|
64
|
-
"""Validate layout configuration format and content."""
|
|
65
|
-
if not layout_config["layoutTabs"]:
|
|
66
|
-
raise ValueError("Layout must contain at least one tab")
|
|
67
|
-
for tab in layout_config["layoutTabs"]:
|
|
68
|
-
if not tab["tabName"].strip():
|
|
69
|
-
raise ValueError(f"Invalid tab name: {tab['tabName']}")
|
|
70
|
-
if not tab["command"].strip():
|
|
71
|
-
raise ValueError(f"Invalid command for tab '{tab['tabName']}': {tab['command']}")
|
|
72
|
-
if not tab["startDir"].strip():
|
|
73
|
-
raise ValueError(f"Invalid startDir for tab '{tab['tabName']}': {tab['startDir']}")
|
|
74
|
-
|
|
75
|
-
def create_wt_layout(self, layout_config: LayoutConfig, output_dir: Optional[str]) -> str:
|
|
76
|
-
WTLayoutGenerator._validate_layout_config(layout_config)
|
|
77
|
-
logger.info(f"Creating Windows Terminal layout '{layout_config['layoutName']}' with {len(layout_config['layoutTabs'])} tabs")
|
|
78
|
-
|
|
79
|
-
# Store session name and layout config for status checking
|
|
80
|
-
self.session_name = layout_config["layoutName"]
|
|
81
|
-
self.layout_config = layout_config.copy()
|
|
82
|
-
|
|
83
|
-
# Generate Windows Terminal command
|
|
84
|
-
wt_command = self._generate_wt_command_string(layout_config, self.session_name)
|
|
85
|
-
|
|
86
|
-
try:
|
|
87
|
-
random_suffix = WTLayoutGenerator._generate_random_suffix(8)
|
|
88
|
-
if output_dir:
|
|
89
|
-
output_path = Path(output_dir)
|
|
90
|
-
output_path.mkdir(parents=True, exist_ok=True)
|
|
91
|
-
script_file = output_path / f"wt_layout_{random_suffix}.ps1"
|
|
92
|
-
else:
|
|
93
|
-
# Use the predefined TMP_LAYOUT_DIR for temporary files
|
|
94
|
-
TMP_LAYOUT_DIR.mkdir(parents=True, exist_ok=True)
|
|
95
|
-
script_file = TMP_LAYOUT_DIR / f"wt_layout_{self.session_name}_{random_suffix}.ps1"
|
|
41
|
+
def __init__(self, layout_config: LayoutConfig, session_name: str):
|
|
42
|
+
self.session_name: str = session_name
|
|
43
|
+
self.layout_config: LayoutConfig = layout_config.copy()
|
|
44
|
+
self.script_path: Optional[str] = None
|
|
45
|
+
|
|
46
|
+
def create_layout_file(self) -> bool:
|
|
47
|
+
"""Create Windows Terminal layout file and return success status."""
|
|
48
|
+
validate_layout_config(self.layout_config)
|
|
49
|
+
tab_count = len(self.layout_config['layoutTabs'])
|
|
50
|
+
layout_name = self.layout_config['layoutName']
|
|
51
|
+
console.print(f"[bold cyan]📋 Creating Windows Terminal layout[/bold cyan] [bright_green]'{layout_name}' with {tab_count} tabs[/bright_green]")
|
|
52
|
+
|
|
53
|
+
for tab in self.layout_config['layoutTabs']:
|
|
54
|
+
console.print(f" [yellow]→[/yellow] [bold]{tab['tabName']}[/bold] [dim]in[/dim] [blue]{tab['startDir']}[/blue]")
|
|
96
55
|
|
|
97
|
-
|
|
98
|
-
|
|
56
|
+
wt_command = generate_wt_command_string(self.layout_config, self.session_name)
|
|
57
|
+
|
|
58
|
+
random_suffix = generate_random_suffix(8)
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
def _generate_wt_command_string(self, layout_config: LayoutConfig, window_name: str) -> str:
|
|
112
|
-
"""Generate complete Windows Terminal command string."""
|
|
113
|
-
# Build the complete Windows Terminal command
|
|
114
|
-
command_parts = []
|
|
115
|
-
|
|
116
|
-
for i, tab in enumerate(layout_config["layoutTabs"]):
|
|
117
|
-
is_first = i == 0
|
|
118
|
-
|
|
119
|
-
if is_first:
|
|
120
|
-
# First tab: start with wt command and window name
|
|
121
|
-
tab_parts = ["wt", "-w", WTLayoutGenerator._escape_for_wt(window_name)]
|
|
122
|
-
else:
|
|
123
|
-
# Subsequent tabs: use new-tab
|
|
124
|
-
tab_parts = ["new-tab"]
|
|
125
|
-
|
|
126
|
-
# Add common tab arguments
|
|
127
|
-
tab_name = tab["tabName"]
|
|
128
|
-
cwd = tab["startDir"]
|
|
129
|
-
command = tab["command"]
|
|
130
|
-
|
|
131
|
-
# Convert paths to Windows format if needed
|
|
132
|
-
if cwd.startswith("~/"):
|
|
133
|
-
cwd = cwd.replace("~/", f"{Path.home()}/")
|
|
134
|
-
elif cwd == "~":
|
|
135
|
-
cwd = str(Path.home())
|
|
136
|
-
|
|
137
|
-
# Add arguments in the correct order
|
|
138
|
-
tab_parts.extend(["-d", WTLayoutGenerator._escape_for_wt(cwd)])
|
|
139
|
-
tab_parts.extend(["--title", WTLayoutGenerator._escape_for_wt(tab_name)])
|
|
140
|
-
tab_parts.append(WTLayoutGenerator._escape_for_wt(command))
|
|
141
|
-
|
|
142
|
-
command_parts.append(" ".join(tab_parts))
|
|
143
|
-
|
|
144
|
-
# Join all tab commands with escaped semicolons for PowerShell
|
|
145
|
-
return " `; ".join(command_parts)
|
|
63
|
+
tmp_dir = Path(TMP_LAYOUT_DIR)
|
|
64
|
+
tmp_dir.mkdir(parents=True, exist_ok=True)
|
|
65
|
+
script_file = tmp_dir / f"wt_layout_{self.session_name}_{random_suffix}.ps1"
|
|
66
|
+
script_file.write_text(script_content, encoding="utf-8")
|
|
67
|
+
self.script_path = str(script_file.absolute())
|
|
68
|
+
|
|
69
|
+
console.print(f"[bold green]✅ Layout created successfully:[/bold green] [cyan]{self.script_path}[/cyan]")
|
|
70
|
+
return True
|
|
146
71
|
|
|
147
72
|
def get_wt_layout_preview(self, layout_config: LayoutConfig) -> str:
|
|
148
73
|
"""Generate preview of the Windows Terminal command that would be created."""
|
|
149
|
-
|
|
150
|
-
return
|
|
74
|
+
validate_layout_config(layout_config)
|
|
75
|
+
return generate_wt_command_string(layout_config, "preview")
|
|
151
76
|
|
|
152
|
-
def check_all_commands_status(self) ->
|
|
77
|
+
def check_all_commands_status(self) -> dict[str, dict[str, Any]]:
|
|
153
78
|
if not self.layout_config:
|
|
154
79
|
logger.warning("No layout config tracked. Make sure to create a layout first.")
|
|
155
80
|
return {}
|
|
@@ -157,137 +82,13 @@ class WTLayoutGenerator:
|
|
|
157
82
|
status_report = {}
|
|
158
83
|
for tab in self.layout_config["layoutTabs"]:
|
|
159
84
|
tab_name = tab["tabName"]
|
|
160
|
-
status_report[tab_name] =
|
|
85
|
+
status_report[tab_name] = check_command_status(tab_name, self.layout_config)
|
|
161
86
|
|
|
162
87
|
return status_report
|
|
163
88
|
|
|
164
|
-
|
|
165
|
-
def check_wt_session_status(session_name: str) -> Dict[str, Any]:
|
|
166
|
-
try:
|
|
167
|
-
# Simplified Windows Terminal process check
|
|
168
|
-
ps_script = """
|
|
169
|
-
try {
|
|
170
|
-
$wtProcesses = Get-Process -Name 'WindowsTerminal' -ErrorAction SilentlyContinue
|
|
171
|
-
if ($wtProcesses) {
|
|
172
|
-
$processInfo = @()
|
|
173
|
-
$wtProcesses | ForEach-Object {
|
|
174
|
-
$info = @{
|
|
175
|
-
"Id" = $_.Id
|
|
176
|
-
"ProcessName" = $_.ProcessName
|
|
177
|
-
"StartTime" = $_.StartTime.ToString()
|
|
178
|
-
}
|
|
179
|
-
$processInfo += $info
|
|
180
|
-
}
|
|
181
|
-
$processInfo | ConvertTo-Json -Depth 2
|
|
182
|
-
}
|
|
183
|
-
} catch {
|
|
184
|
-
# No Windows Terminal processes found
|
|
185
|
-
}
|
|
186
|
-
"""
|
|
187
|
-
|
|
188
|
-
result = subprocess.run([POWERSHELL_CMD, "-Command", ps_script], capture_output=True, text=True, timeout=5)
|
|
189
|
-
|
|
190
|
-
if result.returncode == 0:
|
|
191
|
-
output = result.stdout.strip()
|
|
192
|
-
if output and output != "":
|
|
193
|
-
try:
|
|
194
|
-
processes = json.loads(output)
|
|
195
|
-
if not isinstance(processes, list):
|
|
196
|
-
processes = [processes]
|
|
197
|
-
|
|
198
|
-
# For simplicity, assume session exists if WT is running
|
|
199
|
-
return {
|
|
200
|
-
"wt_running": True,
|
|
201
|
-
"session_exists": len(processes) > 0,
|
|
202
|
-
"session_name": session_name,
|
|
203
|
-
"all_windows": processes,
|
|
204
|
-
"session_windows": processes # Simplified - assume all windows could be session windows
|
|
205
|
-
}
|
|
206
|
-
except Exception as e:
|
|
207
|
-
return {"wt_running": True, "session_exists": False, "error": f"Failed to parse process info: {e}", "session_name": session_name}
|
|
208
|
-
else:
|
|
209
|
-
return {"wt_running": False, "session_exists": False, "session_name": session_name, "all_windows": []}
|
|
210
|
-
else:
|
|
211
|
-
return {"wt_running": False, "error": result.stderr, "session_name": session_name}
|
|
212
|
-
|
|
213
|
-
except subprocess.TimeoutExpired:
|
|
214
|
-
return {"wt_running": False, "error": "Timeout while checking Windows Terminal processes", "session_name": session_name}
|
|
215
|
-
except FileNotFoundError:
|
|
216
|
-
return {"wt_running": False, "error": f"PowerShell ({POWERSHELL_CMD}) not found in PATH", "session_name": session_name}
|
|
217
|
-
except Exception as e:
|
|
218
|
-
return {"wt_running": False, "error": str(e), "session_name": session_name}
|
|
219
|
-
|
|
220
|
-
@staticmethod
|
|
221
|
-
def check_command_status(tab_name: str, layout_config: LayoutConfig) -> Dict[str, Any]:
|
|
222
|
-
"""Check if a command is running by looking for processes."""
|
|
223
|
-
# Find the tab with the given name
|
|
224
|
-
tab_config = None
|
|
225
|
-
for tab in layout_config["layoutTabs"]:
|
|
226
|
-
if tab["tabName"] == tab_name:
|
|
227
|
-
tab_config = tab
|
|
228
|
-
break
|
|
229
|
-
|
|
230
|
-
if tab_config is None:
|
|
231
|
-
return {"status": "unknown", "error": f"Tab '{tab_name}' not found in layout config", "running": False, "pid": None, "command": None}
|
|
232
|
-
|
|
233
|
-
command = tab_config["command"]
|
|
234
|
-
|
|
235
|
-
try:
|
|
236
|
-
# Extract the primary executable name from command
|
|
237
|
-
primary_cmd = command.split()[0] if command.strip() else ""
|
|
238
|
-
if not primary_cmd:
|
|
239
|
-
return {"status": "error", "error": "Empty command", "running": False, "command": command, "tab_name": tab_name}
|
|
240
|
-
|
|
241
|
-
# Use a much simpler PowerShell script that just checks for process names
|
|
242
|
-
ps_script = f"""
|
|
243
|
-
try {{
|
|
244
|
-
$processes = Get-Process -Name '{primary_cmd}' -ErrorAction SilentlyContinue
|
|
245
|
-
if ($processes) {{
|
|
246
|
-
$processes | ForEach-Object {{
|
|
247
|
-
$procInfo = @{{
|
|
248
|
-
"pid" = $_.Id
|
|
249
|
-
"name" = $_.ProcessName
|
|
250
|
-
"start_time" = $_.StartTime.ToString()
|
|
251
|
-
}}
|
|
252
|
-
Write-Output ($procInfo | ConvertTo-Json -Compress)
|
|
253
|
-
}}
|
|
254
|
-
}}
|
|
255
|
-
}} catch {{
|
|
256
|
-
# No processes found or other error
|
|
257
|
-
}}
|
|
258
|
-
"""
|
|
259
|
-
|
|
260
|
-
result = subprocess.run([POWERSHELL_CMD, "-Command", ps_script], capture_output=True, text=True, timeout=5)
|
|
261
|
-
|
|
262
|
-
if result.returncode == 0:
|
|
263
|
-
output_lines = [line.strip() for line in result.stdout.strip().split("\n") if line.strip()]
|
|
264
|
-
matching_processes = []
|
|
265
|
-
|
|
266
|
-
for line in output_lines:
|
|
267
|
-
if line.startswith("{") and line.endswith("}"):
|
|
268
|
-
try:
|
|
269
|
-
proc_info = json.loads(line)
|
|
270
|
-
matching_processes.append(proc_info)
|
|
271
|
-
except json.JSONDecodeError:
|
|
272
|
-
continue
|
|
273
|
-
|
|
274
|
-
if matching_processes:
|
|
275
|
-
return {"status": "running", "running": True, "processes": matching_processes, "command": command, "tab_name": tab_name}
|
|
276
|
-
else:
|
|
277
|
-
return {"status": "not_running", "running": False, "processes": [], "command": command, "tab_name": tab_name}
|
|
278
|
-
else:
|
|
279
|
-
return {"status": "error", "error": f"Command failed: {result.stderr}", "running": False, "command": command, "tab_name": tab_name}
|
|
280
|
-
|
|
281
|
-
except subprocess.TimeoutExpired:
|
|
282
|
-
logger.error(f"Timeout checking command status for tab '{tab_name}'")
|
|
283
|
-
return {"status": "timeout", "error": "Timeout checking process status", "running": False, "command": command, "tab_name": tab_name}
|
|
284
|
-
except Exception as e:
|
|
285
|
-
logger.error(f"Error checking command status for tab '{tab_name}': {e}")
|
|
286
|
-
return {"status": "error", "error": str(e), "running": False, "command": command, "tab_name": tab_name}
|
|
287
|
-
|
|
288
|
-
def get_status_report(self) -> Dict[str, Any]:
|
|
89
|
+
def get_status_report(self) -> dict[str, Any]:
|
|
289
90
|
"""Get status report for this layout including Windows Terminal and commands."""
|
|
290
|
-
wt_status =
|
|
91
|
+
wt_status = check_wt_session_status(self.session_name or "default")
|
|
291
92
|
commands_status = self.check_all_commands_status()
|
|
292
93
|
|
|
293
94
|
running_count = sum(1 for status in commands_status.values() if status.get("running", False))
|
|
@@ -306,64 +107,87 @@ try {{
|
|
|
306
107
|
commands = status["commands"]
|
|
307
108
|
summary = status["summary"]
|
|
308
109
|
|
|
309
|
-
print(
|
|
310
|
-
print("
|
|
311
|
-
print("=" * 80)
|
|
110
|
+
console.print()
|
|
111
|
+
console.print(Panel.fit("� WINDOWS TERMINAL LAYOUT STATUS REPORT", style="bold cyan"))
|
|
312
112
|
|
|
313
113
|
# Windows Terminal session status
|
|
314
|
-
print(f"🪟 Session: {self.session_name}")
|
|
315
114
|
if wt_session.get("wt_running", False):
|
|
316
115
|
if wt_session.get("session_exists", False):
|
|
317
116
|
session_windows = wt_session.get("session_windows", [])
|
|
318
117
|
all_windows = wt_session.get("all_windows", [])
|
|
319
|
-
print("✅ Windows Terminal is running")
|
|
320
|
-
print(f" Session windows: {len(session_windows)}")
|
|
321
|
-
print(f" Total WT windows: {len(all_windows)}")
|
|
118
|
+
console.print(f"[bold green]✅ Windows Terminal session[/bold green] [yellow]'{self.session_name}'[/yellow] [green]is running[/green]")
|
|
119
|
+
console.print(f" Session windows: {len(session_windows)}")
|
|
120
|
+
console.print(f" Total WT windows: {len(all_windows)}")
|
|
322
121
|
else:
|
|
323
|
-
print("⚠️ Windows Terminal is running but
|
|
122
|
+
console.print(f"[bold yellow]⚠️ Windows Terminal is running but session[/bold yellow] [yellow]'{self.session_name}'[/yellow] [yellow]not found[/yellow]")
|
|
324
123
|
else:
|
|
325
124
|
error_msg = wt_session.get("error", "Unknown error")
|
|
326
|
-
print(f"❌ Windows Terminal session issue: {error_msg}")
|
|
125
|
+
console.print(f"[bold red]❌ Windows Terminal session issue:[/bold red] [red]{error_msg}[/red]")
|
|
126
|
+
|
|
127
|
+
console.print()
|
|
327
128
|
|
|
328
|
-
|
|
129
|
+
# Commands status table
|
|
130
|
+
table = Table(title="📋 COMMAND STATUS", show_header=True, header_style="bold magenta")
|
|
131
|
+
table.add_column("Tab", style="cyan", no_wrap=True)
|
|
132
|
+
table.add_column("Status", justify="center")
|
|
133
|
+
table.add_column("PID", justify="center", style="dim")
|
|
134
|
+
table.add_column("Command", style="green", max_width=40)
|
|
329
135
|
|
|
330
|
-
# Commands in this layout
|
|
331
|
-
print(f"📋 COMMANDS ({summary['running_commands']}/{summary['total_commands']} running):")
|
|
332
136
|
for tab_name, cmd_status in commands.items():
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
137
|
+
if cmd_status.get("running", False):
|
|
138
|
+
status_text = "[bold green]✅ Running[/bold green]"
|
|
139
|
+
processes = cmd_status.get("processes", [])
|
|
140
|
+
if processes:
|
|
141
|
+
proc = processes[0]
|
|
142
|
+
pid = str(proc.get("pid", "N/A"))
|
|
143
|
+
else:
|
|
144
|
+
pid = "N/A"
|
|
145
|
+
else:
|
|
146
|
+
status_text = "[bold red]❌ Stopped[/bold red]"
|
|
147
|
+
pid = "N/A"
|
|
337
148
|
|
|
338
|
-
|
|
149
|
+
command = cmd_status.get("command", "Unknown")
|
|
150
|
+
if len(command) > 35:
|
|
151
|
+
command = command[:32] + "..."
|
|
339
152
|
|
|
340
|
-
|
|
341
|
-
for proc in cmd_status["processes"][:2]: # Show first 2 processes
|
|
342
|
-
pid = proc.get("pid", "Unknown")
|
|
343
|
-
name = proc.get("name", "Unknown")
|
|
344
|
-
print(f" └─ PID {pid}: {name}")
|
|
345
|
-
print()
|
|
153
|
+
table.add_row(tab_name, status_text, pid, command)
|
|
346
154
|
|
|
347
|
-
print(
|
|
155
|
+
console.print(table)
|
|
156
|
+
console.print()
|
|
348
157
|
|
|
158
|
+
# Summary panel
|
|
159
|
+
summary_text = f"""[bold]Total commands:[/bold] {summary['total_commands']}
|
|
160
|
+
[green]Running:[/green] {summary['running_commands']}
|
|
161
|
+
[red]Stopped:[/red] {summary['stopped_commands']}
|
|
162
|
+
[yellow]Session healthy:[/yellow] {"✅" if summary['session_healthy'] else "❌"}"""
|
|
349
163
|
|
|
350
|
-
|
|
351
|
-
generator = WTLayoutGenerator()
|
|
352
|
-
return generator.create_wt_layout(layout_config, output_dir)
|
|
164
|
+
console.print(Panel(summary_text, title="📊 Summary", style="blue"))
|
|
353
165
|
|
|
354
166
|
|
|
355
|
-
def
|
|
356
|
-
|
|
357
|
-
generator = WTLayoutGenerator()
|
|
358
|
-
|
|
167
|
+
def create_wt_layout(layout_config: LayoutConfig, output_path: str) -> str:
|
|
168
|
+
session_name = layout_config["layoutName"]
|
|
169
|
+
generator = WTLayoutGenerator(layout_config=layout_config, session_name=session_name)
|
|
170
|
+
generator.create_layout_file()
|
|
171
|
+
|
|
172
|
+
if generator.script_path is None:
|
|
173
|
+
raise RuntimeError("Script path was not set after creating layout file")
|
|
174
|
+
|
|
175
|
+
logger.info(f"Windows Terminal PowerShell script created: {generator.script_path}")
|
|
176
|
+
return generator.script_path
|
|
177
|
+
|
|
359
178
|
|
|
179
|
+
def run_wt_layout(layout_config: LayoutConfig) -> None:
|
|
180
|
+
"""Create and run a Windows Terminal layout."""
|
|
181
|
+
session_name = layout_config["layoutName"]
|
|
182
|
+
generator = WTLayoutGenerator(layout_config=layout_config, session_name=session_name)
|
|
183
|
+
generator.create_layout_file()
|
|
184
|
+
if generator.script_path is None:
|
|
185
|
+
raise RuntimeError("Script path was not set after creating layout file")
|
|
360
186
|
# Execute the script
|
|
361
|
-
cmd = f'powershell -ExecutionPolicy Bypass -File "{script_path}"'
|
|
187
|
+
cmd = f'powershell -ExecutionPolicy Bypass -File "{generator.script_path}"'
|
|
362
188
|
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
|
|
363
|
-
|
|
364
189
|
if result.returncode == 0:
|
|
365
190
|
print(f"Windows Terminal layout is running @ {layout_config['layoutName']}")
|
|
366
|
-
return script_path
|
|
367
191
|
else:
|
|
368
192
|
logger.error(f"Failed to run Windows Terminal layout: {result.stderr}")
|
|
369
193
|
raise RuntimeError(f"Failed to run layout: {result.stderr}")
|
|
@@ -372,7 +196,6 @@ def run_wt_layout(layout_config: LayoutConfig) -> str:
|
|
|
372
196
|
def run_command_in_wt_tab(command: str, tab_name: str, cwd: Optional[str]) -> str:
|
|
373
197
|
"""Create a command to run in a new Windows Terminal tab."""
|
|
374
198
|
cwd_part = f'-d "{cwd}"' if cwd else ""
|
|
375
|
-
|
|
376
199
|
return f"""
|
|
377
200
|
echo "Creating new Windows Terminal tab: {tab_name}"
|
|
378
201
|
wt new-tab --title "{tab_name}" {cwd_part} "{command}"
|
|
@@ -386,15 +209,17 @@ if __name__ == "__main__":
|
|
|
386
209
|
{"tabName": "Monitor", "startDir": "~", "command": "lf"}
|
|
387
210
|
]}
|
|
388
211
|
try:
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
212
|
+
session_name = sample_layout["layoutName"]
|
|
213
|
+
generator = WTLayoutGenerator(layout_config=sample_layout, session_name=session_name)
|
|
214
|
+
generator.create_layout_file()
|
|
215
|
+
|
|
216
|
+
print(f"✅ Windows Terminal layout created: {generator.script_path}")
|
|
217
|
+
preview = generator.get_wt_layout_preview(generator.layout_config)
|
|
393
218
|
print(f"📋 Command Preview:\n{preview}")
|
|
394
219
|
print("🔍 Current status:")
|
|
395
220
|
generator.print_status_report()
|
|
396
221
|
print("▶️ To run this layout, execute:")
|
|
397
|
-
print(f' powershell -ExecutionPolicy Bypass -File "{script_path}"')
|
|
222
|
+
print(f' powershell -ExecutionPolicy Bypass -File "{generator.script_path}"')
|
|
398
223
|
except Exception as e:
|
|
399
224
|
print(f"❌ Error: {e}")
|
|
400
225
|
import traceback
|