machineconfig 5.15__py3-none-any.whl → 7.66__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/__init__.py +0 -28
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/remote/script_execution.py +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 +50 -193
- 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 -169
- machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
- machineconfig/jobs/{python → installer}/check_installations.py +2 -3
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/hx.py +76 -19
- machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
- machineconfig/jobs/installer/custom_dev/brave.py +1 -7
- 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/nerfont_windows_helper.py +9 -18
- machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
- machineconfig/jobs/installer/installer_data.json +1101 -115
- 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 +1 -0
- machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
- machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
- machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
- machineconfig/jobs/installer/package_groups.py +108 -180
- machineconfig/logger.py +0 -1
- machineconfig/profile/backup.toml +49 -0
- machineconfig/profile/bash_shell_profiles.md +11 -0
- machineconfig/profile/create_helper.py +74 -0
- machineconfig/profile/create_links.py +288 -0
- machineconfig/profile/create_links_export.py +100 -0
- machineconfig/profile/create_shell_profile.py +136 -0
- machineconfig/profile/mapper.toml +258 -0
- machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
- machineconfig/scripts/linux/wrap_mcfg +47 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +92 -103
- machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
- machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
- machineconfig/scripts/python/ai/generate_files.py +307 -42
- machineconfig/scripts/python/ai/initai.py +3 -28
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- machineconfig/scripts/python/ai/solutions/generic.py +27 -4
- machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
- machineconfig/scripts/python/cloud.py +29 -0
- machineconfig/scripts/python/croshell.py +111 -114
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +44 -103
- machineconfig/scripts/python/devops_navigator.py +10 -0
- machineconfig/scripts/python/env_manager/__init__.py +1 -0
- machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
- machineconfig/scripts/python/explore.py +49 -0
- machineconfig/scripts/python/fire_jobs.py +115 -152
- machineconfig/scripts/python/ftpx.py +29 -24
- 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/{fire_agents_help_launch.py → helpers_agents/fire_agents_help_launch.py} +34 -44
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
- machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
- machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +10 -18
- 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} +2 -2
- 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/{share_terminal.py → helpers_devops/cli_terminal.py} +35 -23
- 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/{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} +2 -2
- machineconfig/scripts/python/helpers_fire_command/__init__.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/{fire_jobs_route_helper.py → helpers_fire_command/fire_jobs_route_helper.py} +47 -2
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
- machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
- machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
- machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
- machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/{count_lines.py → helpers_repos/count_lines.py} +10 -10
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -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/sync.py +66 -0
- machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
- machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
- machineconfig/scripts/python/helpers_utils/download.py +152 -0
- machineconfig/scripts/python/helpers_utils/path.py +108 -0
- machineconfig/scripts/python/interactive.py +64 -84
- machineconfig/scripts/python/machineconfig.py +63 -0
- machineconfig/scripts/python/msearch.py +21 -0
- machineconfig/scripts/python/nw/__init__.py +0 -0
- machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +0 -2
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +73 -43
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +3 -3
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +3 -3
- machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
- machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
- machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
- machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
- machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +5 -4
- machineconfig/scripts/python/sessions.py +64 -44
- machineconfig/scripts/python/terminal.py +127 -0
- machineconfig/scripts/python/utils.py +66 -0
- machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
- machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
- machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
- machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
- machineconfig/settings/broot/br.sh +0 -4
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
- machineconfig/settings/lf/linux/lfrc +10 -12
- machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
- machineconfig/settings/lf/windows/lfrc +18 -38
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/pistol/pistol.conf +1 -1
- machineconfig/settings/shells/bash/init.sh +55 -31
- machineconfig/settings/shells/nushell/config.nu +1 -34
- machineconfig/settings/shells/nushell/init.nu +127 -0
- machineconfig/settings/shells/pwsh/init.ps1 +60 -43
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +32 -17
- machineconfig/settings/shells/zsh/init.sh +89 -0
- machineconfig/settings/svim/linux/init.toml +0 -4
- machineconfig/settings/svim/windows/init.toml +0 -3
- machineconfig/settings/yazi/init.lua +57 -0
- machineconfig/settings/yazi/keymap_linux.toml +79 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/yazi.toml +13 -0
- machineconfig/setup_linux/__init__.py +10 -0
- machineconfig/setup_linux/apps_desktop.sh +89 -0
- machineconfig/setup_linux/apps_gui.sh +64 -0
- machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
- machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
- machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
- machineconfig/setup_linux/uv.sh +15 -0
- machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
- machineconfig/setup_mac/__init__.py +16 -0
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
- machineconfig/setup_mac/uv.sh +36 -0
- machineconfig/setup_windows/__init__.py +8 -0
- machineconfig/setup_windows/others/power_options.ps1 +7 -0
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
- machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
- machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
- machineconfig/setup_windows/uv.ps1 +10 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -10
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
- machineconfig/utils/accessories.py +7 -5
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +133 -106
- 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/installer_class.py +68 -126
- machineconfig/utils/installer_utils/{installer.py → installer_cli.py} +109 -117
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +31 -81
- machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +44 -74
- machineconfig/utils/io.py +77 -23
- machineconfig/utils/links.py +254 -162
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +13 -3
- machineconfig/utils/path_extended.py +46 -100
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -70
- machineconfig/utils/scheduler.py +94 -97
- 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 +742 -264
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +2 -113
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +11 -4
- machineconfig-7.66.dist-info/METADATA +124 -0
- machineconfig-7.66.dist-info/RECORD +451 -0
- machineconfig-7.66.dist-info/entry_points.txt +15 -0
- machineconfig/cluster/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/fzffg +0 -25
- machineconfig/scripts/linux/gh_models +0 -2
- machineconfig/scripts/linux/initai +0 -2
- machineconfig/scripts/linux/kill_process +0 -2
- machineconfig/scripts/linux/scheduler +0 -2
- machineconfig/scripts/linux/sessions +0 -2
- machineconfig/scripts/linux/share_smb +0 -1
- machineconfig/scripts/linux/start_slidev +0 -2
- machineconfig/scripts/linux/start_terminals +0 -3
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/wifi_conn +0 -2
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
- machineconfig/scripts/python/cloud_repo_sync.py +0 -190
- machineconfig/scripts/python/count_lines_frontend.py +0 -16
- machineconfig/scripts/python/dotfile.py +0 -78
- machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
- 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/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/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-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/helpers_agents}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
- machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
- machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
- /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
- /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
- /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
- /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
- /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
- /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
- /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
- /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
- /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
- /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
- /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
- {machineconfig-5.15.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
|
@@ -1,28 +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
|
|
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
|
|
13
|
-
|
|
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
|
|
14
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
|
+
|
|
15
20
|
|
|
16
21
|
|
|
17
|
-
class WTSessionReport(TypedDict):
|
|
18
|
-
session_status: Dict[str, Any] # WT-specific session status
|
|
19
|
-
commands_status: Dict[str, CommandStatus]
|
|
20
|
-
summary: CommandSummary
|
|
21
22
|
|
|
22
23
|
logging.basicConfig(level=logging.INFO)
|
|
23
24
|
logger = logging.getLogger(__name__)
|
|
25
|
+
console = Console()
|
|
26
|
+
TMP_SERIALIZATION_DIR = Path.home() / "tmp_results" / "wt_sessions" / "serialized"
|
|
24
27
|
|
|
25
|
-
TMP_SERIALIZATION_DIR = Path.home().joinpath("tmp_results", "session_manager", "wt", "local_manager")
|
|
26
28
|
|
|
27
29
|
|
|
28
30
|
class WTLocalManager:
|
|
@@ -39,21 +41,22 @@ class WTLocalManager:
|
|
|
39
41
|
"""
|
|
40
42
|
self.session_name_prefix = session_name_prefix
|
|
41
43
|
self.session_layouts = session_layouts # Store the original config
|
|
42
|
-
self.managers:
|
|
44
|
+
self.managers: list[WTLayoutGenerator] = []
|
|
43
45
|
|
|
44
46
|
# Create a WTLayoutGenerator for each session
|
|
45
47
|
for layout_config in session_layouts:
|
|
46
|
-
|
|
47
|
-
manager
|
|
48
|
+
session_name = layout_config["layoutName"]
|
|
49
|
+
manager = WTLayoutGenerator(layout_config=layout_config, session_name=session_name)
|
|
50
|
+
manager.create_layout_file()
|
|
48
51
|
self.managers.append(manager)
|
|
49
52
|
|
|
50
53
|
logger.info(f"Initialized WTLocalManager with {len(self.managers)} sessions")
|
|
51
54
|
|
|
52
|
-
def get_all_session_names(self) ->
|
|
55
|
+
def get_all_session_names(self) -> list[str]:
|
|
53
56
|
"""Get all managed session names."""
|
|
54
|
-
return [manager.session_name for manager in self.managers
|
|
57
|
+
return [manager.session_name for manager in self.managers]
|
|
55
58
|
|
|
56
|
-
def start_all_sessions(self) ->
|
|
59
|
+
def start_all_sessions(self) -> dict[str, StartResult]:
|
|
57
60
|
"""Start all Windows Terminal sessions with their layouts."""
|
|
58
61
|
results = {}
|
|
59
62
|
for manager in self.managers:
|
|
@@ -84,7 +87,7 @@ class WTLocalManager:
|
|
|
84
87
|
|
|
85
88
|
return results
|
|
86
89
|
|
|
87
|
-
def kill_all_sessions(self) ->
|
|
90
|
+
def kill_all_sessions(self) -> dict[str, StartResult]:
|
|
88
91
|
"""Kill all managed Windows Terminal sessions."""
|
|
89
92
|
results = {}
|
|
90
93
|
for manager in self.managers:
|
|
@@ -128,105 +131,30 @@ class WTLocalManager:
|
|
|
128
131
|
commands.append("")
|
|
129
132
|
return "\n".join(commands)
|
|
130
133
|
|
|
131
|
-
def check_all_sessions_status(self) ->
|
|
132
|
-
"""Check the status of all sessions and their commands."""
|
|
134
|
+
def check_all_sessions_status(self) -> dict[str, dict[str, Any]]:
|
|
133
135
|
status_report = {}
|
|
134
|
-
|
|
135
136
|
for manager in self.managers:
|
|
136
137
|
session_name = manager.session_name or "default"
|
|
137
|
-
|
|
138
|
-
# Get session status
|
|
139
|
-
session_status = WTLayoutGenerator.check_wt_session_status(session_name)
|
|
140
|
-
|
|
141
|
-
# Get commands status for this session
|
|
138
|
+
session_status = check_wt_session_status(session_name)
|
|
142
139
|
commands_status = manager.check_all_commands_status()
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
running_count = sum(1 for status in commands_status.values() if status.get("running", False))
|
|
146
|
-
total_count = len(commands_status)
|
|
147
|
-
|
|
148
|
-
status_report[session_name] = {
|
|
149
|
-
"session_status": session_status,
|
|
150
|
-
"commands_status": commands_status,
|
|
151
|
-
"summary": {"total_commands": total_count, "running_commands": running_count, "stopped_commands": total_count - running_count, "session_healthy": session_status.get("session_exists", False)},
|
|
152
|
-
}
|
|
153
|
-
|
|
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}
|
|
154
142
|
return status_report
|
|
155
143
|
|
|
156
|
-
def get_global_summary(self) ->
|
|
157
|
-
"""Get a global summary across all sessions."""
|
|
144
|
+
def get_global_summary(self) -> dict[str, Any]:
|
|
158
145
|
all_status = self.check_all_sessions_status()
|
|
159
|
-
|
|
160
|
-
total_sessions = len(all_status)
|
|
161
|
-
healthy_sessions = sum(1 for status in all_status.values() if status["summary"]["session_healthy"])
|
|
162
|
-
total_commands = sum(status["summary"]["total_commands"] for status in all_status.values())
|
|
163
|
-
total_running = sum(status["summary"]["running_commands"] for status in all_status.values())
|
|
164
|
-
|
|
165
|
-
return {
|
|
166
|
-
"total_sessions": total_sessions,
|
|
167
|
-
"healthy_sessions": healthy_sessions,
|
|
168
|
-
"unhealthy_sessions": total_sessions - healthy_sessions,
|
|
169
|
-
"total_commands": total_commands,
|
|
170
|
-
"running_commands": total_running,
|
|
171
|
-
"stopped_commands": total_commands - total_running,
|
|
172
|
-
"all_sessions_healthy": healthy_sessions == total_sessions,
|
|
173
|
-
"all_commands_running": total_running == total_commands,
|
|
174
|
-
}
|
|
146
|
+
return calculate_global_summary_from_status(all_status, include_remote_machines=False)
|
|
175
147
|
|
|
176
148
|
def print_status_report(self) -> None:
|
|
177
|
-
"""Print a comprehensive status report for all sessions."""
|
|
178
149
|
all_status = self.check_all_sessions_status()
|
|
179
150
|
global_summary = self.get_global_summary()
|
|
180
|
-
|
|
181
|
-
print("=" * 80)
|
|
182
|
-
print("🖥️ WINDOWS TERMINAL LOCAL MANAGER STATUS REPORT")
|
|
183
|
-
print("=" * 80)
|
|
184
|
-
|
|
185
|
-
# Global summary
|
|
186
|
-
print("🌐 GLOBAL SUMMARY:")
|
|
187
|
-
print(f" Total sessions: {global_summary['total_sessions']}")
|
|
188
|
-
print(f" Healthy sessions: {global_summary['healthy_sessions']}")
|
|
189
|
-
print(f" Total commands: {global_summary['total_commands']}")
|
|
190
|
-
print(f" Running commands: {global_summary['running_commands']}")
|
|
191
|
-
print(f" All healthy: {'✅' if global_summary['all_sessions_healthy'] else '❌'}")
|
|
192
|
-
print()
|
|
193
|
-
|
|
194
|
-
# Per-session details
|
|
151
|
+
print_global_summary(global_summary, "WINDOWS TERMINAL LOCAL MANAGER STATUS REPORT")
|
|
195
152
|
for session_name, status in all_status.items():
|
|
196
|
-
session_status = status["session_status"]
|
|
197
|
-
commands_status = status["commands_status"]
|
|
198
|
-
summary = status["summary"]
|
|
199
|
-
|
|
200
153
|
print(f"🪟 SESSION: {session_name}")
|
|
201
154
|
print("-" * 60)
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if session_status.get("wt_running", False):
|
|
205
|
-
if session_status.get("session_exists", False):
|
|
206
|
-
session_windows = session_status.get("session_windows", [])
|
|
207
|
-
all_windows = session_status.get("all_windows", [])
|
|
208
|
-
print("✅ Windows Terminal is running")
|
|
209
|
-
print(f" Session windows: {len(session_windows)}")
|
|
210
|
-
print(f" Total WT windows: {len(all_windows)}")
|
|
211
|
-
else:
|
|
212
|
-
print("⚠️ Windows Terminal is running but no session windows found")
|
|
213
|
-
else:
|
|
214
|
-
print(f"❌ Windows Terminal session issue: {session_status.get('error', 'Unknown error')}")
|
|
215
|
-
|
|
216
|
-
# Commands in this session
|
|
217
|
-
print(f" Commands ({summary['running_commands']}/{summary['total_commands']} running):")
|
|
218
|
-
for tab_name, cmd_status in commands_status.items():
|
|
219
|
-
status_icon = "✅" if cmd_status.get("running", False) else "❌"
|
|
220
|
-
cmd_text = cmd_status.get("command", "Unknown")[:50]
|
|
221
|
-
if len(cmd_status.get("command", "")) > 50:
|
|
222
|
-
cmd_text += "..."
|
|
223
|
-
print(f" {status_icon} {tab_name}: {cmd_text}")
|
|
224
|
-
|
|
225
|
-
if cmd_status.get("processes"):
|
|
226
|
-
for proc in cmd_status["processes"][:2]: # Show first 2 processes
|
|
227
|
-
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"])
|
|
228
157
|
print()
|
|
229
|
-
|
|
230
158
|
print("=" * 80)
|
|
231
159
|
|
|
232
160
|
def run_monitoring_routine(self, wait_ms: int = 30000) -> None:
|
|
@@ -288,128 +216,59 @@ class WTLocalManager:
|
|
|
288
216
|
sched.run(max_cycles=None)
|
|
289
217
|
|
|
290
218
|
def save(self, session_id: Optional[str] = None) -> str:
|
|
291
|
-
"""Save the manager state to disk."""
|
|
292
219
|
if session_id is None:
|
|
293
|
-
session_id =
|
|
294
|
-
|
|
295
|
-
# Create session directory
|
|
220
|
+
session_id = generate_session_id()
|
|
296
221
|
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
297
|
-
session_dir
|
|
298
|
-
|
|
299
|
-
# Save the session2wt_tabs configuration
|
|
300
|
-
config_file = session_dir / "session_layouts.json"
|
|
301
|
-
text = json.dumps(self.session_layouts, indent=2, ensure_ascii=False)
|
|
302
|
-
config_file.write_text(text, encoding="utf-8")
|
|
303
|
-
|
|
304
|
-
# Save metadata
|
|
222
|
+
ensure_session_dir_exists(session_dir)
|
|
223
|
+
save_json_file(session_dir / "session_layouts.json", self.session_layouts, "session layouts")
|
|
305
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"}
|
|
306
|
-
|
|
307
|
-
text = json.dumps(metadata, indent=2, ensure_ascii=False)
|
|
308
|
-
metadata_file.write_text(text, encoding="utf-8")
|
|
309
|
-
|
|
310
|
-
# Save each manager's state
|
|
225
|
+
save_json_file(session_dir / "metadata.json", metadata, "metadata")
|
|
311
226
|
managers_dir = session_dir / "managers"
|
|
312
227
|
managers_dir.mkdir(exist_ok=True)
|
|
313
|
-
|
|
314
228
|
for i, manager in enumerate(self.managers):
|
|
315
229
|
manager_data = {"session_name": manager.session_name, "layout_config": manager.layout_config, "script_path": manager.script_path}
|
|
316
|
-
|
|
317
|
-
text = json.dumps(manager_data, indent=2, ensure_ascii=False)
|
|
318
|
-
manager_file.write_text(text, encoding="utf-8")
|
|
319
|
-
|
|
230
|
+
save_json_file(managers_dir / f"manager_{i}_{manager.session_name}.json", manager_data, f"manager {i}")
|
|
320
231
|
logger.info(f"✅ Saved WTLocalManager session to: {session_dir}")
|
|
321
232
|
return session_id
|
|
322
233
|
|
|
323
234
|
@classmethod
|
|
324
235
|
def load(cls, session_id: str) -> "WTLocalManager":
|
|
325
|
-
"""Load a saved manager state from disk."""
|
|
326
236
|
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
327
|
-
|
|
328
237
|
if not session_dir.exists():
|
|
329
238
|
raise FileNotFoundError(f"Session directory not found: {session_dir}")
|
|
330
|
-
|
|
331
|
-
#
|
|
332
|
-
|
|
333
|
-
if
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
text = config_file.read_text(encoding="utf-8")
|
|
337
|
-
session_layouts = json.loads(text)
|
|
338
|
-
|
|
339
|
-
# Load metadata
|
|
340
|
-
metadata_file = session_dir / "metadata.json"
|
|
341
|
-
session_name_prefix = "LocalWTMgr" # default fallback
|
|
342
|
-
if metadata_file.exists():
|
|
343
|
-
text = metadata_file.read_text(encoding="utf-8")
|
|
344
|
-
metadata = json.loads(text)
|
|
345
|
-
session_name_prefix = metadata.get("session_name_prefix", "LocalWTMgr")
|
|
346
|
-
|
|
347
|
-
# 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]
|
|
348
244
|
instance = cls(session_layouts=session_layouts, session_name_prefix=session_name_prefix)
|
|
349
|
-
|
|
350
|
-
# Load saved manager states
|
|
351
245
|
managers_dir = session_dir / "managers"
|
|
352
246
|
if managers_dir.exists():
|
|
353
247
|
instance.managers = []
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
for manager_file in manager_files:
|
|
248
|
+
for manager_file in sorted(managers_dir.glob("manager_*.json")):
|
|
357
249
|
try:
|
|
358
|
-
|
|
359
|
-
manager_data =
|
|
360
|
-
|
|
361
|
-
#
|
|
362
|
-
manager = WTLayoutGenerator()
|
|
363
|
-
manager.session_name = manager_data["session_name"]
|
|
364
|
-
manager.layout_config = manager_data["layout_config"]
|
|
365
|
-
manager.script_path = manager_data["script_path"]
|
|
366
|
-
|
|
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]
|
|
367
254
|
instance.managers.append(manager)
|
|
368
|
-
|
|
369
255
|
except Exception as e:
|
|
370
256
|
logger.warning(f"Failed to load manager from {manager_file}: {e}")
|
|
371
|
-
|
|
372
257
|
logger.info(f"✅ Loaded WTLocalManager session from: {session_dir}")
|
|
373
258
|
return instance
|
|
374
259
|
|
|
375
260
|
@staticmethod
|
|
376
|
-
def list_saved_sessions() ->
|
|
377
|
-
|
|
378
|
-
if not TMP_SERIALIZATION_DIR.exists():
|
|
379
|
-
return []
|
|
380
|
-
|
|
381
|
-
sessions = []
|
|
382
|
-
for item in TMP_SERIALIZATION_DIR.iterdir():
|
|
383
|
-
if item.is_dir() and (item / "metadata.json").exists():
|
|
384
|
-
sessions.append(item.name)
|
|
385
|
-
|
|
386
|
-
return sorted(sessions)
|
|
261
|
+
def list_saved_sessions() -> list[str]:
|
|
262
|
+
return list_saved_sessions_in_dir(TMP_SERIALIZATION_DIR)
|
|
387
263
|
|
|
388
264
|
@staticmethod
|
|
389
265
|
def delete_session(session_id: str) -> bool:
|
|
390
|
-
|
|
391
|
-
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
392
|
-
|
|
393
|
-
if not session_dir.exists():
|
|
394
|
-
logger.warning(f"Session directory not found: {session_dir}")
|
|
395
|
-
return False
|
|
396
|
-
|
|
397
|
-
try:
|
|
398
|
-
import shutil
|
|
399
|
-
|
|
400
|
-
shutil.rmtree(session_dir)
|
|
401
|
-
logger.info(f"✅ Deleted session: {session_id}")
|
|
402
|
-
return True
|
|
403
|
-
except Exception as e:
|
|
404
|
-
logger.error(f"Failed to delete session {session_id}: {e}")
|
|
405
|
-
return False
|
|
266
|
+
return delete_session_dir(TMP_SERIALIZATION_DIR / session_id, session_id)
|
|
406
267
|
|
|
407
|
-
def list_active_sessions(self) ->
|
|
408
|
-
|
|
409
|
-
active_sessions = []
|
|
268
|
+
def list_active_sessions(self) -> list[ActiveSessionInfo]:
|
|
269
|
+
active_sessions: list[ActiveSessionInfo] = []
|
|
410
270
|
|
|
411
271
|
try:
|
|
412
|
-
# Get all running Windows Terminal processes
|
|
413
272
|
result = subprocess.run(
|
|
414
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
|
|
415
274
|
)
|
|
@@ -421,7 +280,6 @@ class WTLocalManager:
|
|
|
421
280
|
if not isinstance(all_processes, list):
|
|
422
281
|
all_processes = [all_processes]
|
|
423
282
|
|
|
424
|
-
# Filter to only our managed sessions
|
|
425
283
|
for manager in self.managers:
|
|
426
284
|
session_name = manager.session_name
|
|
427
285
|
session_windows = []
|
|
@@ -437,7 +295,6 @@ class WTLocalManager:
|
|
|
437
295
|
"is_active": len(session_windows) > 0,
|
|
438
296
|
"tab_count": len(manager.layout_config["layoutTabs"]) if manager.layout_config else 0,
|
|
439
297
|
"tabs": [tab["tabName"] for tab in manager.layout_config["layoutTabs"]] if manager.layout_config else [],
|
|
440
|
-
"windows": session_windows,
|
|
441
298
|
}
|
|
442
299
|
)
|
|
443
300
|
|
|
@@ -446,7 +303,7 @@ class WTLocalManager:
|
|
|
446
303
|
|
|
447
304
|
return active_sessions
|
|
448
305
|
|
|
449
|
-
def get_wt_overview(self) ->
|
|
306
|
+
def get_wt_overview(self) -> dict[str, Any]:
|
|
450
307
|
"""Get overview of all Windows Terminal windows and processes."""
|
|
451
308
|
try:
|
|
452
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:")
|