machineconfig 3.7__py3-none-any.whl → 7.69__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/__init__.py +0 -28
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/remote/script_execution.py +1 -2
- machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
- machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +128 -330
- machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
- machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -172
- machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
- machineconfig/jobs/{python → installer}/check_installations.py +7 -21
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/gh.py +128 -0
- machineconfig/jobs/{python_custom_installers → installer/custom}/hx.py +84 -18
- machineconfig/jobs/installer/custom_dev/alacritty.py +86 -0
- machineconfig/jobs/installer/custom_dev/brave.py +82 -0
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py +59 -0
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +63 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/cursor.py +7 -7
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/espanso.py +117 -0
- machineconfig/jobs/installer/custom_dev/goes.py +68 -0
- machineconfig/jobs/installer/custom_dev/lvim.py +89 -0
- machineconfig/jobs/installer/custom_dev/nerdfont.py +111 -0
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +149 -0
- machineconfig/jobs/installer/custom_dev/redis.py +88 -0
- machineconfig/jobs/installer/custom_dev/sysabc.py +145 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +92 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/winget.py +2 -3
- machineconfig/jobs/installer/installer_data.json +3440 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/brave.sh +4 -14
- machineconfig/jobs/{python_custom_installers/scripts/linux/warp-cli.sh → installer/linux_scripts/cloudflare_warp_cli.sh} +5 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker.sh +6 -18
- machineconfig/jobs/installer/linux_scripts/docker_start.sh +37 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/edge.sh +3 -11
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/nerdfont.sh +5 -17
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
- machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/redis.sh +6 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/vscode.sh +5 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/wezterm.sh +4 -12
- machineconfig/jobs/installer/package_groups.py +255 -0
- machineconfig/logger.py +0 -1
- machineconfig/profile/backup.toml +49 -0
- machineconfig/profile/bash_shell_profiles.md +11 -0
- machineconfig/profile/create_helper.py +74 -0
- machineconfig/profile/create_links.py +288 -0
- machineconfig/profile/create_links_export.py +100 -0
- machineconfig/profile/create_shell_profile.py +136 -0
- machineconfig/profile/mapper.toml +258 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
- machineconfig/scripts/linux/wrap_mcfg +47 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +198 -0
- machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
- machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
- machineconfig/scripts/python/ai/generate_files.py +307 -42
- machineconfig/scripts/python/ai/{mcinit.py → initai.py} +3 -38
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +114 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +88 -22
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -1
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +1 -1
- machineconfig/scripts/python/ai/solutions/generic.py +27 -4
- machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
- machineconfig/scripts/python/cloud.py +29 -0
- machineconfig/scripts/python/croshell.py +129 -198
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +45 -131
- machineconfig/scripts/python/devops_navigator.py +6 -0
- machineconfig/scripts/python/env_manager/__init__.py +1 -0
- machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
- machineconfig/scripts/python/fire_jobs.py +166 -235
- machineconfig/scripts/python/ftpx.py +164 -100
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
- machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
- machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +52 -39
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +13 -18
- machineconfig/scripts/python/helpers_cloud/cloud_sync.py +81 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -1
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +32 -20
- machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
- machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
- machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
- machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
- machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
- machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
- machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
- machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
- machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
- machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -2
- machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -89
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
- machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +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_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
- machineconfig/scripts/python/helpers_repos/sync.py +66 -0
- machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
- machineconfig/scripts/python/helpers_utils/download.py +152 -0
- machineconfig/scripts/python/helpers_utils/path.py +108 -0
- machineconfig/scripts/python/interactive.py +187 -0
- machineconfig/scripts/python/mcfg_entry.py +63 -0
- machineconfig/scripts/python/msearch.py +40 -0
- machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
- machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
- machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
- machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
- machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -51
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +67 -0
- machineconfig/scripts/python/sessions.py +167 -0
- machineconfig/scripts/python/terminal.py +127 -0
- machineconfig/scripts/python/utils.py +66 -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 +60 -0
- machineconfig/settings/broot/br.sh +0 -4
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
- machineconfig/settings/lf/linux/lfrc +10 -12
- machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
- machineconfig/settings/lf/windows/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 +55 -31
- machineconfig/settings/shells/nushell/config.nu +1 -34
- machineconfig/settings/shells/nushell/init.nu +127 -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/yazi/init.lua +57 -0
- machineconfig/settings/yazi/keymap_linux.toml +79 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/yazi.toml +14 -1
- machineconfig/setup_linux/__init__.py +10 -0
- machineconfig/setup_linux/apps_desktop.sh +89 -0
- machineconfig/setup_linux/apps_gui.sh +64 -0
- machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
- machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
- machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
- machineconfig/setup_linux/uv.sh +15 -0
- machineconfig/setup_linux/web_shortcuts/interactive.sh +28 -203
- machineconfig/setup_mac/__init__.py +16 -0
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
- machineconfig/setup_mac/uv.sh +36 -0
- machineconfig/setup_windows/__init__.py +8 -0
- machineconfig/setup_windows/others/power_options.ps1 +7 -0
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
- machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
- machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
- machineconfig/setup_windows/uv.ps1 +17 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -189
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
- machineconfig/utils/accessories.py +52 -12
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +140 -93
- machineconfig/utils/files/art/fat_croco.txt +10 -0
- machineconfig/utils/files/art/halfwit_croco.txt +9 -0
- machineconfig/utils/files/art/happy_croco.txt +22 -0
- machineconfig/utils/files/art/water_croco.txt +11 -0
- machineconfig/utils/files/ascii_art.py +118 -0
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +68 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +95 -0
- machineconfig/utils/installer_utils/github_release_bulk.py +188 -0
- machineconfig/utils/installer_utils/install_from_url.py +180 -0
- machineconfig/utils/installer_utils/installer_class.py +239 -316
- machineconfig/utils/installer_utils/installer_cli.py +186 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +90 -5
- machineconfig/utils/installer_utils/installer_runner.py +191 -0
- machineconfig/utils/io.py +77 -24
- machineconfig/utils/links.py +309 -100
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +19 -47
- machineconfig/utils/path_extended.py +111 -121
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -74
- machineconfig/utils/scheduler.py +94 -97
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
- machineconfig/utils/schemas/installer/installer_types.py +28 -6
- machineconfig/utils/schemas/layouts/layout_types.py +34 -1
- machineconfig/utils/source_of_truth.py +3 -6
- machineconfig/utils/ssh.py +742 -254
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +3 -140
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +13 -5
- machineconfig-7.69.dist-info/METADATA +124 -0
- machineconfig-7.69.dist-info/RECORD +454 -0
- machineconfig-7.69.dist-info/entry_points.txt +15 -0
- machineconfig/cluster/templates/cli_click.py +0 -102
- machineconfig/cluster/templates/cli_gooey.py +0 -115
- machineconfig/cluster/templates/utils.py +0 -51
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -32
- machineconfig/jobs/python/create_bootable_media.py +0 -16
- machineconfig/jobs/python/python_cargo_build_share.py +0 -59
- machineconfig/jobs/python/python_ve_symlink.py +0 -29
- machineconfig/jobs/python/tasks.py +0 -3
- machineconfig/jobs/python/vscode/api.py +0 -48
- machineconfig/jobs/python/vscode/link_ve.py +0 -63
- machineconfig/jobs/python/vscode/select_interpreter.py +0 -87
- machineconfig/jobs/python/vscode/sync_code.py +0 -58
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +0 -63
- machineconfig/jobs/python_custom_installers/dev/aider.py +0 -37
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +0 -65
- machineconfig/jobs/python_custom_installers/dev/brave.py +0 -71
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +0 -50
- machineconfig/jobs/python_custom_installers/dev/code.py +0 -51
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -78
- machineconfig/jobs/python_custom_installers/dev/espanso.py +0 -90
- machineconfig/jobs/python_custom_installers/dev/goes.py +0 -55
- machineconfig/jobs/python_custom_installers/dev/lvim.py +0 -77
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +0 -68
- machineconfig/jobs/python_custom_installers/dev/redis.py +0 -65
- machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +0 -31
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +0 -70
- machineconfig/jobs/python_custom_installers/docker.py +0 -74
- machineconfig/jobs/python_custom_installers/gh.py +0 -97
- machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +0 -45
- machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +0 -49
- machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +0 -85
- machineconfig/jobs/python_custom_installers/warp-cli.py +0 -71
- machineconfig/jobs/python_generic_installers/config.json +0 -603
- machineconfig/jobs/python_generic_installers/config.json.bak +0 -414
- machineconfig/jobs/python_generic_installers/dev/config.archive.json +0 -18
- machineconfig/jobs/python_generic_installers/dev/config.json +0 -825
- machineconfig/jobs/python_generic_installers/dev/config.json.bak +0 -565
- machineconfig/jobs/python_linux_installers/archive/config.json +0 -18
- machineconfig/jobs/python_linux_installers/archive/config.json.bak +0 -10
- machineconfig/jobs/python_linux_installers/config.json +0 -145
- machineconfig/jobs/python_linux_installers/config.json.bak +0 -110
- machineconfig/jobs/python_linux_installers/dev/config.json +0 -276
- machineconfig/jobs/python_linux_installers/dev/config.json.bak +0 -206
- machineconfig/jobs/python_windows_installers/archive/file.json +0 -11
- machineconfig/jobs/python_windows_installers/config.json +0 -82
- machineconfig/jobs/python_windows_installers/config.json.bak +0 -56
- machineconfig/jobs/python_windows_installers/dev/config.json +0 -4
- machineconfig/jobs/python_windows_installers/dev/config.json.bak +0 -3
- 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 -169
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- machineconfig/scripts/linux/choose_wezterm_theme +0 -3
- machineconfig/scripts/linux/cloud_copy +0 -2
- machineconfig/scripts/linux/cloud_mount +0 -2
- machineconfig/scripts/linux/cloud_repo_sync +0 -2
- machineconfig/scripts/linux/cloud_sync +0 -2
- machineconfig/scripts/linux/croshell +0 -3
- machineconfig/scripts/linux/devops +0 -2
- machineconfig/scripts/linux/fire +0 -2
- machineconfig/scripts/linux/fire_agents +0 -2
- machineconfig/scripts/linux/ftpx +0 -2
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/gh_models +0 -2
- machineconfig/scripts/linux/kill_process +0 -2
- machineconfig/scripts/linux/mcinit +0 -2
- machineconfig/scripts/linux/programs +0 -21
- machineconfig/scripts/linux/repos +0 -2
- machineconfig/scripts/linux/scheduler +0 -2
- machineconfig/scripts/linux/share_smb +0 -1
- machineconfig/scripts/linux/start_slidev +0 -2
- machineconfig/scripts/linux/start_terminals +0 -3
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/wifi_conn +0 -2
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
- machineconfig/scripts/python/archive/im2text.py +0 -34
- machineconfig/scripts/python/archive/tmate_conn.py +0 -41
- machineconfig/scripts/python/archive/tmate_start.py +0 -44
- machineconfig/scripts/python/cloud_repo_sync.py +0 -192
- machineconfig/scripts/python/cloud_sync.py +0 -85
- machineconfig/scripts/python/devops_devapps_install.py +0 -202
- machineconfig/scripts/python/devops_update_repos.py +0 -180
- machineconfig/scripts/python/dotfile.py +0 -52
- machineconfig/scripts/python/fire_agents.py +0 -176
- machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
- machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
- machineconfig/scripts/python/fire_jobs_args_helper.py +0 -84
- machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -66
- machineconfig/scripts/python/get_zellij_cmd.py +0 -15
- machineconfig/scripts/python/gh_models.py +0 -104
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
- machineconfig/scripts/python/repos.py +0 -160
- machineconfig/scripts/python/snapshot.py +0 -25
- machineconfig/scripts/python/start_terminals.py +0 -121
- machineconfig/scripts/python/wsl_windows_transfer.py +0 -72
- machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
- machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
- machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
- machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
- machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
- machineconfig/scripts/windows/croshell.ps1 +0 -1
- machineconfig/scripts/windows/devops.ps1 +0 -1
- machineconfig/scripts/windows/dotfile.ps1 +0 -1
- machineconfig/scripts/windows/fire.ps1 +0 -1
- machineconfig/scripts/windows/ftpx.ps1 +0 -1
- machineconfig/scripts/windows/gpt.ps1 +0 -1
- machineconfig/scripts/windows/grep.ps1 +0 -2
- machineconfig/scripts/windows/kill_process.ps1 +0 -1
- machineconfig/scripts/windows/mcinit.ps1 +0 -1
- machineconfig/scripts/windows/nano.ps1 +0 -3
- machineconfig/scripts/windows/pomodoro.ps1 +0 -1
- machineconfig/scripts/windows/reload_path.ps1 +0 -3
- machineconfig/scripts/windows/repos.ps1 +0 -1
- machineconfig/scripts/windows/scheduler.ps1 +0 -1
- machineconfig/scripts/windows/snapshot.ps1 +0 -1
- machineconfig/scripts/windows/start_slidev.ps1 +0 -1
- machineconfig/scripts/windows/start_terminals.ps1 +0 -1
- machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
- machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
- machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
- machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
- machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
- machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
- machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
- machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
- machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
- machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
- machineconfig/setup_windows/wt_and_pwsh/install_nerd_fonts.py +0 -100
- machineconfig/utils/ai/generate_file_checklist.py +0 -68
- machineconfig/utils/installer.py +0 -255
- machineconfig-3.7.dist-info/METADATA +0 -165
- machineconfig-3.7.dist-info/RECORD +0 -432
- machineconfig-3.7.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
- machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
- machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
- machineconfig/jobs/{python → installer}/__init__.py +0 -0
- machineconfig/jobs/{python_custom_installers → installer/custom_dev}/__init__.py +0 -0
- machineconfig/{setup_windows/wt_and_pwsh → jobs/installer/powershell_scripts}/install_fonts.ps1 +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_generic_installers → scripts/python/helpers_agents}/__init__.py +0 -0
- machineconfig/{jobs/python_linux_installers → 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/{jobs/python_linux_installers/dev → scripts/python/helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/{jobs/python_windows_installers → scripts/python/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.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/{jobs/python_windows_installers/archive → scripts/python/helpers_devops}/__init__.py +0 -0
- /machineconfig/{jobs/python_windows_installers/dev → scripts/python/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{helpers → helpers_fire_command}/__init__.py +0 -0
- /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
- /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_sessions/__init__.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/nw/__init__.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
- /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
- /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
- /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
- /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
- /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- /machineconfig/{settings/yazi/keymap.toml → utils/files/ouch/__init__.py} +0 -0
- {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/WHEEL +0 -0
- {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/top_level.txt +0 -0
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
from datetime import datetime
|
|
3
|
-
import json
|
|
4
|
-
import uuid
|
|
5
3
|
import logging
|
|
6
4
|
import subprocess
|
|
7
5
|
from pathlib import Path
|
|
8
|
-
from typing import Optional,
|
|
6
|
+
from typing import Optional, Any
|
|
7
|
+
from rich.console import Console
|
|
9
8
|
from machineconfig.utils.scheduler import Scheduler
|
|
10
9
|
from machineconfig.cluster.sessions_managers.wt_local import WTLayoutGenerator
|
|
10
|
+
from machineconfig.cluster.sessions_managers.wt_utils.wt_helpers import check_wt_session_status
|
|
11
11
|
from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
|
|
12
|
+
from machineconfig.cluster.sessions_managers.zellij_utils.monitoring_types import StartResult, ActiveSessionInfo
|
|
13
|
+
from machineconfig.cluster.sessions_managers.wt_utils.manager_persistence import (
|
|
14
|
+
generate_session_id, save_json_file, load_json_file, list_saved_sessions_in_dir, delete_session_dir, ensure_session_dir_exists
|
|
15
|
+
)
|
|
16
|
+
from machineconfig.cluster.sessions_managers.wt_utils.status_reporting import (
|
|
17
|
+
print_global_summary, print_session_health_status, print_commands_status, calculate_session_summary, calculate_global_summary_from_status
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
12
22
|
|
|
13
23
|
logging.basicConfig(level=logging.INFO)
|
|
14
24
|
logger = logging.getLogger(__name__)
|
|
25
|
+
console = Console()
|
|
26
|
+
TMP_SERIALIZATION_DIR = Path.home() / "tmp_results" / "wt_sessions" / "serialized"
|
|
15
27
|
|
|
16
|
-
TMP_SERIALIZATION_DIR = Path.home().joinpath("tmp_results", "session_manager", "wt", "local_manager")
|
|
17
28
|
|
|
18
29
|
|
|
19
30
|
class WTLocalManager:
|
|
@@ -30,21 +41,22 @@ class WTLocalManager:
|
|
|
30
41
|
"""
|
|
31
42
|
self.session_name_prefix = session_name_prefix
|
|
32
43
|
self.session_layouts = session_layouts # Store the original config
|
|
33
|
-
self.managers:
|
|
44
|
+
self.managers: list[WTLayoutGenerator] = []
|
|
34
45
|
|
|
35
46
|
# Create a WTLayoutGenerator for each session
|
|
36
47
|
for layout_config in session_layouts:
|
|
37
|
-
|
|
38
|
-
manager
|
|
48
|
+
session_name = layout_config["layoutName"]
|
|
49
|
+
manager = WTLayoutGenerator(layout_config=layout_config, session_name=session_name)
|
|
50
|
+
manager.create_layout_file()
|
|
39
51
|
self.managers.append(manager)
|
|
40
52
|
|
|
41
53
|
logger.info(f"Initialized WTLocalManager with {len(self.managers)} sessions")
|
|
42
54
|
|
|
43
|
-
def get_all_session_names(self) ->
|
|
55
|
+
def get_all_session_names(self) -> list[str]:
|
|
44
56
|
"""Get all managed session names."""
|
|
45
|
-
return [manager.session_name for manager in self.managers
|
|
57
|
+
return [manager.session_name for manager in self.managers]
|
|
46
58
|
|
|
47
|
-
def start_all_sessions(self) ->
|
|
59
|
+
def start_all_sessions(self) -> dict[str, StartResult]:
|
|
48
60
|
"""Start all Windows Terminal sessions with their layouts."""
|
|
49
61
|
results = {}
|
|
50
62
|
for manager in self.managers:
|
|
@@ -75,7 +87,7 @@ class WTLocalManager:
|
|
|
75
87
|
|
|
76
88
|
return results
|
|
77
89
|
|
|
78
|
-
def kill_all_sessions(self) ->
|
|
90
|
+
def kill_all_sessions(self) -> dict[str, StartResult]:
|
|
79
91
|
"""Kill all managed Windows Terminal sessions."""
|
|
80
92
|
results = {}
|
|
81
93
|
for manager in self.managers:
|
|
@@ -119,105 +131,30 @@ class WTLocalManager:
|
|
|
119
131
|
commands.append("")
|
|
120
132
|
return "\n".join(commands)
|
|
121
133
|
|
|
122
|
-
def check_all_sessions_status(self) ->
|
|
123
|
-
"""Check the status of all sessions and their commands."""
|
|
134
|
+
def check_all_sessions_status(self) -> dict[str, dict[str, Any]]:
|
|
124
135
|
status_report = {}
|
|
125
|
-
|
|
126
136
|
for manager in self.managers:
|
|
127
137
|
session_name = manager.session_name or "default"
|
|
128
|
-
|
|
129
|
-
# Get session status
|
|
130
|
-
session_status = WTLayoutGenerator.check_wt_session_status(session_name)
|
|
131
|
-
|
|
132
|
-
# Get commands status for this session
|
|
138
|
+
session_status = check_wt_session_status(session_name)
|
|
133
139
|
commands_status = manager.check_all_commands_status()
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
running_count = sum(1 for status in commands_status.values() if status.get("running", False))
|
|
137
|
-
total_count = len(commands_status)
|
|
138
|
-
|
|
139
|
-
status_report[session_name] = {
|
|
140
|
-
"session_status": session_status,
|
|
141
|
-
"commands_status": commands_status,
|
|
142
|
-
"summary": {"total_commands": total_count, "running_commands": running_count, "stopped_commands": total_count - running_count, "session_healthy": session_status.get("session_exists", False)},
|
|
143
|
-
}
|
|
144
|
-
|
|
140
|
+
summary = calculate_session_summary(commands_status, session_status.get("session_exists", False))
|
|
141
|
+
status_report[session_name] = {"session_status": session_status, "commands_status": commands_status, "summary": summary}
|
|
145
142
|
return status_report
|
|
146
143
|
|
|
147
|
-
def get_global_summary(self) ->
|
|
148
|
-
"""Get a global summary across all sessions."""
|
|
144
|
+
def get_global_summary(self) -> dict[str, Any]:
|
|
149
145
|
all_status = self.check_all_sessions_status()
|
|
150
|
-
|
|
151
|
-
total_sessions = len(all_status)
|
|
152
|
-
healthy_sessions = sum(1 for status in all_status.values() if status["summary"]["session_healthy"])
|
|
153
|
-
total_commands = sum(status["summary"]["total_commands"] for status in all_status.values())
|
|
154
|
-
total_running = sum(status["summary"]["running_commands"] for status in all_status.values())
|
|
155
|
-
|
|
156
|
-
return {
|
|
157
|
-
"total_sessions": total_sessions,
|
|
158
|
-
"healthy_sessions": healthy_sessions,
|
|
159
|
-
"unhealthy_sessions": total_sessions - healthy_sessions,
|
|
160
|
-
"total_commands": total_commands,
|
|
161
|
-
"running_commands": total_running,
|
|
162
|
-
"stopped_commands": total_commands - total_running,
|
|
163
|
-
"all_sessions_healthy": healthy_sessions == total_sessions,
|
|
164
|
-
"all_commands_running": total_running == total_commands,
|
|
165
|
-
}
|
|
146
|
+
return calculate_global_summary_from_status(all_status, include_remote_machines=False)
|
|
166
147
|
|
|
167
148
|
def print_status_report(self) -> None:
|
|
168
|
-
"""Print a comprehensive status report for all sessions."""
|
|
169
149
|
all_status = self.check_all_sessions_status()
|
|
170
150
|
global_summary = self.get_global_summary()
|
|
171
|
-
|
|
172
|
-
print("=" * 80)
|
|
173
|
-
print("🖥️ WINDOWS TERMINAL LOCAL MANAGER STATUS REPORT")
|
|
174
|
-
print("=" * 80)
|
|
175
|
-
|
|
176
|
-
# Global summary
|
|
177
|
-
print("🌐 GLOBAL SUMMARY:")
|
|
178
|
-
print(f" Total sessions: {global_summary['total_sessions']}")
|
|
179
|
-
print(f" Healthy sessions: {global_summary['healthy_sessions']}")
|
|
180
|
-
print(f" Total commands: {global_summary['total_commands']}")
|
|
181
|
-
print(f" Running commands: {global_summary['running_commands']}")
|
|
182
|
-
print(f" All healthy: {'✅' if global_summary['all_sessions_healthy'] else '❌'}")
|
|
183
|
-
print()
|
|
184
|
-
|
|
185
|
-
# Per-session details
|
|
151
|
+
print_global_summary(global_summary, "WINDOWS TERMINAL LOCAL MANAGER STATUS REPORT")
|
|
186
152
|
for session_name, status in all_status.items():
|
|
187
|
-
session_status = status["session_status"]
|
|
188
|
-
commands_status = status["commands_status"]
|
|
189
|
-
summary = status["summary"]
|
|
190
|
-
|
|
191
153
|
print(f"🪟 SESSION: {session_name}")
|
|
192
154
|
print("-" * 60)
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if session_status.get("wt_running", False):
|
|
196
|
-
if session_status.get("session_exists", False):
|
|
197
|
-
session_windows = session_status.get("session_windows", [])
|
|
198
|
-
all_windows = session_status.get("all_windows", [])
|
|
199
|
-
print("✅ Windows Terminal is running")
|
|
200
|
-
print(f" Session windows: {len(session_windows)}")
|
|
201
|
-
print(f" Total WT windows: {len(all_windows)}")
|
|
202
|
-
else:
|
|
203
|
-
print("⚠️ Windows Terminal is running but no session windows found")
|
|
204
|
-
else:
|
|
205
|
-
print(f"❌ Windows Terminal session issue: {session_status.get('error', 'Unknown error')}")
|
|
206
|
-
|
|
207
|
-
# Commands in this session
|
|
208
|
-
print(f" Commands ({summary['running_commands']}/{summary['total_commands']} running):")
|
|
209
|
-
for tab_name, cmd_status in commands_status.items():
|
|
210
|
-
status_icon = "✅" if cmd_status.get("running", False) else "❌"
|
|
211
|
-
cmd_text = cmd_status.get("command", "Unknown")[:50]
|
|
212
|
-
if len(cmd_status.get("command", "")) > 50:
|
|
213
|
-
cmd_text += "..."
|
|
214
|
-
print(f" {status_icon} {tab_name}: {cmd_text}")
|
|
215
|
-
|
|
216
|
-
if cmd_status.get("processes"):
|
|
217
|
-
for proc in cmd_status["processes"][:2]: # Show first 2 processes
|
|
218
|
-
print(f" └─ PID {proc['pid']}: {proc['name']}")
|
|
155
|
+
print_session_health_status(status["session_status"], remote_name=None)
|
|
156
|
+
print_commands_status(status["commands_status"], status["summary"])
|
|
219
157
|
print()
|
|
220
|
-
|
|
221
158
|
print("=" * 80)
|
|
222
159
|
|
|
223
160
|
def run_monitoring_routine(self, wait_ms: int = 30000) -> None:
|
|
@@ -279,128 +216,59 @@ class WTLocalManager:
|
|
|
279
216
|
sched.run(max_cycles=None)
|
|
280
217
|
|
|
281
218
|
def save(self, session_id: Optional[str] = None) -> str:
|
|
282
|
-
"""Save the manager state to disk."""
|
|
283
219
|
if session_id is None:
|
|
284
|
-
session_id =
|
|
285
|
-
|
|
286
|
-
# Create session directory
|
|
220
|
+
session_id = generate_session_id()
|
|
287
221
|
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
288
|
-
session_dir
|
|
289
|
-
|
|
290
|
-
# Save the session2wt_tabs configuration
|
|
291
|
-
config_file = session_dir / "session_layouts.json"
|
|
292
|
-
text = json.dumps(self.session_layouts, indent=2, ensure_ascii=False)
|
|
293
|
-
config_file.write_text(text, encoding="utf-8")
|
|
294
|
-
|
|
295
|
-
# Save metadata
|
|
222
|
+
ensure_session_dir_exists(session_dir)
|
|
223
|
+
save_json_file(session_dir / "session_layouts.json", self.session_layouts, "session layouts")
|
|
296
224
|
metadata = {"session_name_prefix": self.session_name_prefix, "created_at": str(datetime.now()), "num_managers": len(self.managers), "sessions": [item["layoutName"] for item in self.session_layouts], "manager_type": "WTLocalManager"}
|
|
297
|
-
|
|
298
|
-
text = json.dumps(metadata, indent=2, ensure_ascii=False)
|
|
299
|
-
metadata_file.write_text(text, encoding="utf-8")
|
|
300
|
-
|
|
301
|
-
# Save each manager's state
|
|
225
|
+
save_json_file(session_dir / "metadata.json", metadata, "metadata")
|
|
302
226
|
managers_dir = session_dir / "managers"
|
|
303
227
|
managers_dir.mkdir(exist_ok=True)
|
|
304
|
-
|
|
305
228
|
for i, manager in enumerate(self.managers):
|
|
306
229
|
manager_data = {"session_name": manager.session_name, "layout_config": manager.layout_config, "script_path": manager.script_path}
|
|
307
|
-
|
|
308
|
-
text = json.dumps(manager_data, indent=2, ensure_ascii=False)
|
|
309
|
-
manager_file.write_text(text, encoding="utf-8")
|
|
310
|
-
|
|
230
|
+
save_json_file(managers_dir / f"manager_{i}_{manager.session_name}.json", manager_data, f"manager {i}")
|
|
311
231
|
logger.info(f"✅ Saved WTLocalManager session to: {session_dir}")
|
|
312
232
|
return session_id
|
|
313
233
|
|
|
314
234
|
@classmethod
|
|
315
235
|
def load(cls, session_id: str) -> "WTLocalManager":
|
|
316
|
-
"""Load a saved manager state from disk."""
|
|
317
236
|
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
318
|
-
|
|
319
237
|
if not session_dir.exists():
|
|
320
238
|
raise FileNotFoundError(f"Session directory not found: {session_dir}")
|
|
321
|
-
|
|
322
|
-
#
|
|
323
|
-
|
|
324
|
-
if
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
text = config_file.read_text(encoding="utf-8")
|
|
328
|
-
session_layouts = json.loads(text)
|
|
329
|
-
|
|
330
|
-
# Load metadata
|
|
331
|
-
metadata_file = session_dir / "metadata.json"
|
|
332
|
-
session_name_prefix = "LocalWTMgr" # default fallback
|
|
333
|
-
if metadata_file.exists():
|
|
334
|
-
text = metadata_file.read_text(encoding="utf-8")
|
|
335
|
-
metadata = json.loads(text)
|
|
336
|
-
session_name_prefix = metadata.get("session_name_prefix", "LocalWTMgr")
|
|
337
|
-
|
|
338
|
-
# Create new instance
|
|
239
|
+
loaded_data = load_json_file(session_dir / "session_layouts.json", "Configuration file")
|
|
240
|
+
session_layouts = loaded_data if isinstance(loaded_data, list) else [] # type: ignore[arg-type]
|
|
241
|
+
metadata_data = load_json_file(session_dir / "metadata.json", "Metadata file") if (session_dir / "metadata.json").exists() else {}
|
|
242
|
+
metadata = metadata_data if isinstance(metadata_data, dict) else {} # type: ignore[arg-type]
|
|
243
|
+
session_name_prefix = metadata.get("session_name_prefix", "LocalWTMgr") # type: ignore[union-attr]
|
|
339
244
|
instance = cls(session_layouts=session_layouts, session_name_prefix=session_name_prefix)
|
|
340
|
-
|
|
341
|
-
# Load saved manager states
|
|
342
245
|
managers_dir = session_dir / "managers"
|
|
343
246
|
if managers_dir.exists():
|
|
344
247
|
instance.managers = []
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
for manager_file in manager_files:
|
|
248
|
+
for manager_file in sorted(managers_dir.glob("manager_*.json")):
|
|
348
249
|
try:
|
|
349
|
-
|
|
350
|
-
manager_data =
|
|
351
|
-
|
|
352
|
-
#
|
|
353
|
-
manager = WTLayoutGenerator()
|
|
354
|
-
manager.session_name = manager_data["session_name"]
|
|
355
|
-
manager.layout_config = manager_data["layout_config"]
|
|
356
|
-
manager.script_path = manager_data["script_path"]
|
|
357
|
-
|
|
250
|
+
loaded_manager_data = load_json_file(manager_file, "Manager data")
|
|
251
|
+
manager_data = loaded_manager_data if isinstance(loaded_manager_data, dict) else {} # type: ignore[arg-type]
|
|
252
|
+
manager = WTLayoutGenerator(layout_config=manager_data["layout_config"], session_name=manager_data["session_name"]) # type: ignore[typeddict-item]
|
|
253
|
+
manager.script_path = manager_data["script_path"] # type: ignore[typeddict-item]
|
|
358
254
|
instance.managers.append(manager)
|
|
359
|
-
|
|
360
255
|
except Exception as e:
|
|
361
256
|
logger.warning(f"Failed to load manager from {manager_file}: {e}")
|
|
362
|
-
|
|
363
257
|
logger.info(f"✅ Loaded WTLocalManager session from: {session_dir}")
|
|
364
258
|
return instance
|
|
365
259
|
|
|
366
260
|
@staticmethod
|
|
367
|
-
def list_saved_sessions() ->
|
|
368
|
-
|
|
369
|
-
if not TMP_SERIALIZATION_DIR.exists():
|
|
370
|
-
return []
|
|
371
|
-
|
|
372
|
-
sessions = []
|
|
373
|
-
for item in TMP_SERIALIZATION_DIR.iterdir():
|
|
374
|
-
if item.is_dir() and (item / "metadata.json").exists():
|
|
375
|
-
sessions.append(item.name)
|
|
376
|
-
|
|
377
|
-
return sorted(sessions)
|
|
261
|
+
def list_saved_sessions() -> list[str]:
|
|
262
|
+
return list_saved_sessions_in_dir(TMP_SERIALIZATION_DIR)
|
|
378
263
|
|
|
379
264
|
@staticmethod
|
|
380
265
|
def delete_session(session_id: str) -> bool:
|
|
381
|
-
|
|
382
|
-
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
383
|
-
|
|
384
|
-
if not session_dir.exists():
|
|
385
|
-
logger.warning(f"Session directory not found: {session_dir}")
|
|
386
|
-
return False
|
|
387
|
-
|
|
388
|
-
try:
|
|
389
|
-
import shutil
|
|
390
|
-
|
|
391
|
-
shutil.rmtree(session_dir)
|
|
392
|
-
logger.info(f"✅ Deleted session: {session_id}")
|
|
393
|
-
return True
|
|
394
|
-
except Exception as e:
|
|
395
|
-
logger.error(f"Failed to delete session {session_id}: {e}")
|
|
396
|
-
return False
|
|
266
|
+
return delete_session_dir(TMP_SERIALIZATION_DIR / session_id, session_id)
|
|
397
267
|
|
|
398
|
-
def list_active_sessions(self) ->
|
|
399
|
-
|
|
400
|
-
active_sessions = []
|
|
268
|
+
def list_active_sessions(self) -> list[ActiveSessionInfo]:
|
|
269
|
+
active_sessions: list[ActiveSessionInfo] = []
|
|
401
270
|
|
|
402
271
|
try:
|
|
403
|
-
# Get all running Windows Terminal processes
|
|
404
272
|
result = subprocess.run(
|
|
405
273
|
["powershell", "-Command", 'Get-Process -Name "WindowsTerminal" -ErrorAction SilentlyContinue | Select-Object Id, ProcessName, StartTime, MainWindowTitle | ConvertTo-Json -Depth 2'], capture_output=True, text=True, timeout=10
|
|
406
274
|
)
|
|
@@ -412,7 +280,6 @@ class WTLocalManager:
|
|
|
412
280
|
if not isinstance(all_processes, list):
|
|
413
281
|
all_processes = [all_processes]
|
|
414
282
|
|
|
415
|
-
# Filter to only our managed sessions
|
|
416
283
|
for manager in self.managers:
|
|
417
284
|
session_name = manager.session_name
|
|
418
285
|
session_windows = []
|
|
@@ -428,7 +295,6 @@ class WTLocalManager:
|
|
|
428
295
|
"is_active": len(session_windows) > 0,
|
|
429
296
|
"tab_count": len(manager.layout_config["layoutTabs"]) if manager.layout_config else 0,
|
|
430
297
|
"tabs": [tab["tabName"] for tab in manager.layout_config["layoutTabs"]] if manager.layout_config else [],
|
|
431
|
-
"windows": session_windows,
|
|
432
298
|
}
|
|
433
299
|
)
|
|
434
300
|
|
|
@@ -437,7 +303,7 @@ class WTLocalManager:
|
|
|
437
303
|
|
|
438
304
|
return active_sessions
|
|
439
305
|
|
|
440
|
-
def get_wt_overview(self) ->
|
|
306
|
+
def get_wt_overview(self) -> dict[str, Any]:
|
|
441
307
|
"""Get overview of all Windows Terminal windows and processes."""
|
|
442
308
|
try:
|
|
443
309
|
result = subprocess.run(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
from typing import
|
|
2
|
+
from typing import Optional, Any
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
import logging
|
|
5
5
|
import json
|
|
@@ -11,18 +11,18 @@ from machineconfig.cluster.sessions_managers.wt_utils.layout_generator import WT
|
|
|
11
11
|
from machineconfig.cluster.sessions_managers.wt_utils.process_monitor import WTProcessMonitor
|
|
12
12
|
from machineconfig.cluster.sessions_managers.wt_utils.session_manager import WTSessionManager
|
|
13
13
|
from machineconfig.cluster.sessions_managers.wt_utils.status_reporter import WTStatusReporter
|
|
14
|
-
from machineconfig.utils.schemas.layouts.layout_types import TabConfig
|
|
14
|
+
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
|
|
15
15
|
|
|
16
16
|
logging.basicConfig(level=logging.INFO)
|
|
17
17
|
logger = logging.getLogger(__name__)
|
|
18
|
-
TMP_LAYOUT_DIR = Path.home()
|
|
18
|
+
TMP_LAYOUT_DIR = Path.home() / "tmp_results" / "wt_layouts"
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class WTRemoteLayoutGenerator:
|
|
22
|
-
def __init__(self, remote_name: str,
|
|
23
|
-
self.remote_name = remote_name
|
|
24
|
-
self.session_name =
|
|
25
|
-
self.
|
|
22
|
+
def __init__(self, layout_config: LayoutConfig, remote_name: str, session_name: str):
|
|
23
|
+
self.remote_name: str = remote_name
|
|
24
|
+
self.session_name: str = session_name
|
|
25
|
+
self.layout_config: LayoutConfig = layout_config.copy()
|
|
26
26
|
self.script_path: Optional[str] = None
|
|
27
27
|
|
|
28
28
|
# Initialize modular components
|
|
@@ -32,22 +32,30 @@ class WTRemoteLayoutGenerator:
|
|
|
32
32
|
self.session_manager = WTSessionManager(self.remote_executor, self.session_name, TMP_LAYOUT_DIR)
|
|
33
33
|
self.status_reporter = WTStatusReporter(self.process_monitor, self.session_manager)
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
logger.info(f"Creating Windows Terminal layout with {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
35
|
+
def create_layout_file(self) -> bool:
|
|
36
|
+
"""Create Windows Terminal layout file and return success status."""
|
|
37
|
+
tab_count = len(self.layout_config["layoutTabs"])
|
|
38
|
+
logger.info(f"Creating Windows Terminal layout with {tab_count} tabs for remote '{self.remote_name}'")
|
|
39
|
+
|
|
40
|
+
# Extract tabs from layout_config
|
|
41
|
+
tabs: list[TabConfig] = self.layout_config["layoutTabs"]
|
|
42
|
+
script_content = self.layout_generator.create_wt_script(tabs, self.session_name, window_name=None)
|
|
43
|
+
|
|
44
|
+
# Write to file
|
|
45
|
+
tmp_layout_dir = Path.home() / "tmp_results" / "wt_layouts" / "remote"
|
|
46
|
+
tmp_layout_dir.mkdir(parents=True, exist_ok=True)
|
|
47
|
+
random_suffix = WTLayoutGenerator.generate_random_suffix(8)
|
|
48
|
+
script_file = tmp_layout_dir / f"wt_layout_{self.session_name}_{random_suffix}.ps1"
|
|
49
|
+
script_file.write_text(script_content, encoding="utf-8")
|
|
50
|
+
self.script_path = str(script_file.absolute())
|
|
51
|
+
|
|
52
|
+
logger.info(f"✅ Remote layout created: {self.script_path}")
|
|
53
|
+
return True
|
|
46
54
|
|
|
47
55
|
# Legacy methods for backward compatibility
|
|
48
56
|
|
|
49
|
-
def to_dict(self) ->
|
|
50
|
-
return {"remote_name": self.remote_name, "session_name": self.session_name, "
|
|
57
|
+
def to_dict(self) -> dict[str, Any]:
|
|
58
|
+
return {"remote_name": self.remote_name, "session_name": self.session_name, "layout_config": self.layout_config, "script_path": self.script_path, "created_at": datetime.now().isoformat(), "class_name": self.__class__.__name__}
|
|
51
59
|
|
|
52
60
|
def to_json(self, file_path: Optional[str]) -> str:
|
|
53
61
|
# Generate file path if not provided
|
|
@@ -95,29 +103,18 @@ class WTRemoteLayoutGenerator:
|
|
|
95
103
|
logger.warning(f"Class name mismatch: expected {cls.__name__}, got {data.get('class_name')}")
|
|
96
104
|
|
|
97
105
|
# Create new instance
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
session_name_prefix = session_name
|
|
104
|
-
|
|
105
|
-
instance = cls(remote_name=data["remote_name"], session_name_prefix=session_name_prefix)
|
|
106
|
-
|
|
107
|
-
# Restore state
|
|
108
|
-
instance.session_name = data["session_name"]
|
|
109
|
-
# New schema only
|
|
110
|
-
if "tabs" in data:
|
|
111
|
-
instance.tabs = data["tabs"]
|
|
112
|
-
else:
|
|
113
|
-
instance.tabs = []
|
|
106
|
+
instance = cls(
|
|
107
|
+
layout_config=data["layout_config"],
|
|
108
|
+
remote_name=data["remote_name"],
|
|
109
|
+
session_name=data["session_name"]
|
|
110
|
+
)
|
|
114
111
|
instance.script_path = data["script_path"]
|
|
115
112
|
|
|
116
113
|
logger.info(f"✅ Loaded WTRemoteLayoutGenerator from: {file_path}")
|
|
117
114
|
return instance
|
|
118
115
|
|
|
119
116
|
@staticmethod
|
|
120
|
-
def list_saved_sessions(directory_path: Optional[str]) ->
|
|
117
|
+
def list_saved_sessions(directory_path: Optional[str]) -> list[str]:
|
|
121
118
|
if directory_path is None:
|
|
122
119
|
dir_path = Path.home() / "tmp_results" / "wt_sessions" / "serialized"
|
|
123
120
|
else:
|
|
@@ -132,7 +129,7 @@ class WTRemoteLayoutGenerator:
|
|
|
132
129
|
|
|
133
130
|
if __name__ == "__main__":
|
|
134
131
|
# Example usage
|
|
135
|
-
sample_tabs:
|
|
132
|
+
sample_tabs: list[TabConfig] = [
|
|
136
133
|
{"tabName": "🤖Bot1", "startDir": "~/code/bytesense/bithence", "command": "python bot1.py --create_new_bot True"},
|
|
137
134
|
{"tabName": "🤖Bot2", "startDir": "~/code/bytesense/bithence", "command": "python bot2.py --create_new_bot True"},
|
|
138
135
|
{"tabName": "📊Monitor", "startDir": "~", "command": "Get-Process | Sort-Object CPU -Descending | Select-Object -First 10"},
|
|
@@ -144,10 +141,21 @@ if __name__ == "__main__":
|
|
|
144
141
|
session_name = "test_remote_session"
|
|
145
142
|
|
|
146
143
|
try:
|
|
144
|
+
# Create layout config from tabs
|
|
145
|
+
sample_layout: LayoutConfig = {
|
|
146
|
+
"layoutName": "RemoteBots",
|
|
147
|
+
"layoutTabs": sample_tabs
|
|
148
|
+
}
|
|
149
|
+
|
|
147
150
|
# Create layout using the remote generator
|
|
148
|
-
generator = WTRemoteLayoutGenerator(
|
|
149
|
-
|
|
150
|
-
|
|
151
|
+
generator = WTRemoteLayoutGenerator(
|
|
152
|
+
layout_config=sample_layout,
|
|
153
|
+
remote_name=remote_name,
|
|
154
|
+
session_name=session_name
|
|
155
|
+
)
|
|
156
|
+
generator.create_layout_file()
|
|
157
|
+
|
|
158
|
+
print(f"✅ Remote layout created successfully: {generator.script_path}")
|
|
151
159
|
|
|
152
160
|
# Check if Windows Terminal is available on remote
|
|
153
161
|
wt_available = generator.remote_executor.check_wt_available()
|
|
@@ -170,7 +178,7 @@ if __name__ == "__main__":
|
|
|
170
178
|
# Demonstrate loading (using the full path)
|
|
171
179
|
loaded_generator = WTRemoteLayoutGenerator.from_json(saved_path)
|
|
172
180
|
print(f"✅ Session loaded successfully: {loaded_generator.session_name}")
|
|
173
|
-
print(f"📊 Loaded tabs: {[tab['tabName'] for tab in loaded_generator.
|
|
181
|
+
print(f"📊 Loaded tabs: {[tab['tabName'] for tab in loaded_generator.layout_config['layoutTabs']]}")
|
|
174
182
|
|
|
175
183
|
# Show command preview
|
|
176
184
|
preview = generator.layout_generator.generate_wt_command(sample_tabs)
|
|
@@ -178,7 +186,7 @@ if __name__ == "__main__":
|
|
|
178
186
|
|
|
179
187
|
# Demonstrate status checking
|
|
180
188
|
print(f"\n🔍 Checking command status on remote '{remote_name}':")
|
|
181
|
-
generator.status_reporter.print_status_report(
|
|
189
|
+
generator.status_reporter.print_status_report(sample_tabs)
|
|
182
190
|
|
|
183
191
|
# Show Windows Terminal overview
|
|
184
192
|
print("\n🖥️ Windows Terminal Overview:")
|