machineconfig 1.95__py3-none-any.whl → 1.96__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/cluster/cloud_manager.py +445 -343
- machineconfig/cluster/data_transfer.py +63 -57
- machineconfig/cluster/distribute.py +284 -280
- machineconfig/cluster/file_manager.py +234 -237
- machineconfig/cluster/job_params.py +133 -133
- machineconfig/cluster/loader_runner.py +183 -149
- machineconfig/cluster/remote_machine.py +269 -252
- machineconfig/cluster/script_execution.py +215 -209
- machineconfig/cluster/script_notify_upon_completion.py +50 -43
- machineconfig/cluster/self_ssh.py +52 -54
- machineconfig/cluster/sessions_managers/__init__.py +0 -0
- machineconfig/cluster/sessions_managers/archive/__init__.py +0 -0
- machineconfig/{jobs/python → cluster/sessions_managers/archive}/create_zellij_template.py +5 -3
- machineconfig/cluster/sessions_managers/archive/session_managers.py +184 -0
- machineconfig/cluster/sessions_managers/demo_rich_zellij.py +0 -0
- machineconfig/cluster/sessions_managers/enhanced_command_runner.py +160 -0
- machineconfig/cluster/sessions_managers/wt_local.py +494 -0
- machineconfig/cluster/sessions_managers/wt_local_manager.py +577 -0
- machineconfig/cluster/sessions_managers/wt_remote.py +288 -0
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +483 -0
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +196 -0
- machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +418 -0
- machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +175 -0
- machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +300 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +418 -0
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +533 -0
- machineconfig/cluster/sessions_managers/zellij_remote.py +229 -0
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +188 -0
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +64 -0
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +126 -0
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +334 -0
- machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +68 -0
- machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +119 -0
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +85 -0
- machineconfig/cluster/templates/cli_click.py +0 -1
- machineconfig/cluster/templates/cli_gooey.py +102 -104
- machineconfig/cluster/templates/run_cloud.py +51 -51
- machineconfig/cluster/templates/run_cluster.py +103 -59
- machineconfig/cluster/templates/run_remote.py +57 -58
- machineconfig/cluster/templates/utils.py +69 -36
- machineconfig/jobs/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python/check_installations.py +258 -190
- machineconfig/jobs/python/create_bootable_media.py +7 -3
- machineconfig/jobs/python/python_cargo_build_share.py +50 -50
- machineconfig/jobs/python/python_ve_symlink.py +6 -6
- machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
- machineconfig/jobs/python/vscode/api.py +1 -1
- machineconfig/jobs/python/vscode/link_ve.py +2 -2
- machineconfig/jobs/python/vscode/select_interpreter.py +9 -5
- machineconfig/jobs/python/vscode/sync_code.py +8 -5
- machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +1 -1
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +3 -2
- machineconfig/jobs/python_custom_installers/dev/brave.py +7 -3
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +3 -4
- machineconfig/jobs/python_custom_installers/dev/code.py +3 -1
- machineconfig/jobs/python_custom_installers/dev/cursor.py +66 -5
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -1
- machineconfig/jobs/python_custom_installers/dev/espanso.py +13 -9
- machineconfig/jobs/python_custom_installers/dev/goes.py +2 -8
- machineconfig/jobs/python_custom_installers/dev/lvim.py +3 -2
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +1 -1
- machineconfig/jobs/python_custom_installers/dev/redis.py +7 -3
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +8 -4
- machineconfig/jobs/python_custom_installers/dev/winget.py +194 -0
- machineconfig/jobs/python_custom_installers/{dev/docker.py → docker.py} +8 -3
- machineconfig/jobs/python_custom_installers/gh.py +4 -3
- machineconfig/jobs/python_custom_installers/hx.py +9 -8
- machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +97 -30
- machineconfig/jobs/python_custom_installers/{dev/warp-cli.py → warp-cli.py} +1 -1
- machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_generic_installers/config.json +133 -9
- machineconfig/jobs/python_generic_installers/dev/config.json +208 -37
- machineconfig/jobs/python_generic_installers/update.py +3 -0
- machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_linux_installers/config.json +42 -6
- machineconfig/jobs/python_linux_installers/dev/config.json +79 -11
- machineconfig/jobs/python_windows_installers/config.json +6 -0
- machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
- machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
- machineconfig/profile/create.py +5 -5
- machineconfig/profile/create_hardlinks.py +5 -5
- machineconfig/profile/shell.py +44 -17
- machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/linux/fire_agents +27 -0
- machineconfig/scripts/linux/wifi_conn +24 -0
- machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
- machineconfig/scripts/python/archive/im2text.py +1 -3
- machineconfig/scripts/python/choose_wezterm_theme.py +3 -3
- machineconfig/scripts/python/cloud_copy.py +10 -10
- machineconfig/scripts/python/cloud_manager.py +77 -99
- machineconfig/scripts/python/cloud_mount.py +13 -12
- machineconfig/scripts/python/cloud_repo_sync.py +14 -11
- machineconfig/scripts/python/croshell.py +24 -21
- machineconfig/scripts/python/devops.py +12 -17
- machineconfig/scripts/python/devops_add_identity.py +32 -10
- machineconfig/scripts/python/devops_add_ssh_key.py +10 -10
- machineconfig/scripts/python/devops_backup_retrieve.py +9 -8
- machineconfig/scripts/python/devops_devapps_install.py +6 -6
- machineconfig/scripts/python/devops_update_repos.py +4 -3
- machineconfig/scripts/python/dotfile.py +10 -7
- machineconfig/scripts/python/fire_agents.py +69 -0
- machineconfig/scripts/python/fire_jobs.py +56 -65
- machineconfig/scripts/python/ftpx.py +8 -8
- machineconfig/scripts/python/get_zellij_cmd.py +3 -3
- machineconfig/scripts/python/gh_models.py +6 -4
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
- machineconfig/scripts/python/helpers/cloud_helpers.py +12 -12
- machineconfig/scripts/python/helpers/helpers2.py +9 -8
- machineconfig/scripts/python/helpers/helpers4.py +23 -35
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +17 -16
- machineconfig/scripts/python/mount_nfs.py +8 -11
- machineconfig/scripts/python/mount_nw_drive.py +4 -4
- machineconfig/scripts/python/mount_ssh.py +2 -2
- machineconfig/scripts/python/onetimeshare.py +56 -57
- machineconfig/scripts/python/pomodoro.py +55 -55
- machineconfig/scripts/python/repos.py +26 -18
- machineconfig/scripts/python/scheduler.py +70 -53
- machineconfig/scripts/python/snapshot.py +21 -24
- machineconfig/scripts/python/start_slidev.py +6 -5
- machineconfig/scripts/python/start_terminals.py +3 -1
- machineconfig/scripts/python/viewer.py +5 -4
- machineconfig/scripts/python/viewer_template.py +138 -140
- machineconfig/scripts/python/wifi_conn.py +412 -60
- machineconfig/scripts/python/wsl_windows_transfer.py +18 -3
- machineconfig/settings/linters/.pylintrc +6 -7
- machineconfig/settings/lvim/windows/config.lua +0 -0
- machineconfig/settings/shells/bash/init.sh +6 -0
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +7 -6
- machineconfig/settings/shells/pwsh/init.ps1 +6 -6
- machineconfig/settings/shells/wt/settings.json +51 -266
- machineconfig/setup_linux/web_shortcuts/interactive.sh +5 -2
- machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +3 -6
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +11 -9
- machineconfig/utils/ai/url2md.py +2 -2
- machineconfig/utils/cloud/onedrive/setup_oauth.py +59 -0
- machineconfig/utils/cloud/onedrive/transaction.py +796 -0
- machineconfig/utils/code.py +22 -13
- machineconfig/utils/installer.py +78 -35
- machineconfig/utils/installer_utils/installer_abc.py +7 -6
- machineconfig/utils/installer_utils/installer_class.py +44 -25
- machineconfig/utils/io_save.py +107 -0
- machineconfig/utils/links.py +19 -15
- machineconfig/utils/options.py +4 -8
- machineconfig/utils/path.py +91 -78
- machineconfig/utils/path_reduced.py +608 -0
- machineconfig/utils/procs.py +110 -45
- machineconfig/utils/scheduling.py +312 -222
- machineconfig/utils/utils.py +7 -7
- machineconfig/utils/utils2.py +42 -0
- machineconfig/utils/utils5.py +84 -0
- machineconfig/utils/ve.py +49 -87
- {machineconfig-1.95.dist-info → machineconfig-1.96.dist-info}/METADATA +2 -2
- machineconfig-1.96.dist-info/RECORD +437 -0
- machineconfig/cluster/session_managers.py +0 -183
- machineconfig/cluster/templates/f.py +0 -4
- machineconfig/jobs/python/__pycache__/check_installations.cpython-311.pyc +0 -0
- machineconfig/jobs/python/__pycache__/checkout_version.cpython-311.pyc +0 -0
- machineconfig/jobs/python/__pycache__/python_ve_symlink.cpython-311.pyc +0 -0
- machineconfig/jobs/python/checkout_version.py +0 -123
- machineconfig/jobs/python/vscode/__pycache__/api.cpython-311.pyc +0 -0
- machineconfig/jobs/python/vscode/__pycache__/link_ve.cpython-311.pyc +0 -0
- machineconfig/jobs/python_custom_installers/__pycache__/hx.cpython-311.pyc +0 -0
- machineconfig/jobs/python_windows_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/python/.mypy_cache/.gitignore +0 -2
- machineconfig/scripts/python/.mypy_cache/3.11/@plugins_snapshot.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/__future__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/__future__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_ast.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_ast.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_bz2.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_bz2.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_codecs.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_codecs.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_compression.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_compression.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_decimal.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_decimal.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_io.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_io.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_locale.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_locale.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_stat.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_stat.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_struct.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_struct.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_thread.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_thread.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_warnings.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_warnings.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakref.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakref.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/argparse.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/argparse.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/ast.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/ast.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/binascii.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/binascii.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/builtins.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/builtins.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/bz2.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/bz2.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/calendar.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/calendar.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/codecs.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/codecs.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/configparser.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/configparser.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/contextlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/contextlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/datetime.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/datetime.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/decimal.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/decimal.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dis.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/dis.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/charset.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/charset.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/errors.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/errors.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/header.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/header.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/message.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/message.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/policy.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/email/policy.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/enum.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/enum.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/functools.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/functools.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/genericpath.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/genericpath.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/getpass.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/getpass.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/compat.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/compat.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/config.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/config.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/db.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/db.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/diff.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/diff.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/exc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/exc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/remote.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/remote.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/types.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/types.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/util.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/git/util.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/glob.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/glob.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gzip.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/gzip.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/inspect.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/inspect.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/io.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/io.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/itertools.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/itertools.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/locale.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/locale.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mmap.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/mmap.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/numbers.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/numbers.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/opcode.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/opcode.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/path.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/os/path.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/pathlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/pathlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/platform.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/platform.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/posixpath.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/posixpath.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/re.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/re.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/resource.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/resource.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shlex.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shlex.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shutil.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/shutil.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/signal.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/signal.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/stat.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/stat.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/string.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/string.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/struct.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/struct.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/subprocess.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/subprocess.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tarfile.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tarfile.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tempfile.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/tempfile.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/textwrap.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/textwrap.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/threading.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/threading.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/time.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/time.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/types.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/types.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/uuid.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/uuid.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/warnings.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/warnings.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/weakref.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/weakref.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zlib.data.json +0 -1
- machineconfig/scripts/python/.mypy_cache/3.11/zlib.meta.json +0 -1
- machineconfig/scripts/python/.mypy_cache/CACHEDIR.TAG +0 -3
- machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/gh_models.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/url2md.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/viewer.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/vscode_api.cpython-311.pyc +0 -0
- machineconfig/settings/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/settings/linters/.ruff_cache/.gitignore +0 -2
- machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +0 -1
- machineconfig/settings/shells/ipy/profiles/default/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/playext.cpython-311.pyc +0 -0
- machineconfig/utils/ve_utils/ve1.py +0 -111
- machineconfig/utils/ve_utils/ve2.py +0 -155
- machineconfig-1.95.dist-info/RECORD +0 -712
- {machineconfig-1.95.dist-info → machineconfig-1.96.dist-info}/WHEEL +0 -0
- {machineconfig-1.95.dist-info → machineconfig-1.96.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
import json
|
|
4
|
+
import uuid
|
|
5
|
+
import logging
|
|
6
|
+
import subprocess
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Optional, Dict, List, Any
|
|
9
|
+
from machineconfig.utils.utils5 import Scheduler
|
|
10
|
+
from machineconfig.cluster.sessions_managers.wt_local import WTLayoutGenerator
|
|
11
|
+
|
|
12
|
+
logging.basicConfig(level=logging.INFO)
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
TMP_SERIALIZATION_DIR = Path.home().joinpath("tmp_results", "session_manager", "wt", "local_manager")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class WTLocalManager:
|
|
19
|
+
"""Manages multiple local Windows Terminal sessions and monitors their tabs and processes."""
|
|
20
|
+
|
|
21
|
+
def __init__(self, session2wt_tabs: Dict[str, Dict[str, tuple[str, str]]], session_name_prefix: str = "LocalWTMgr"):
|
|
22
|
+
"""
|
|
23
|
+
Initialize the local Windows Terminal manager.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
session2wt_tabs: Dict mapping session names to their tab configs
|
|
27
|
+
Format: {session_name: {tab_name: (cwd, command), ...}, ...}
|
|
28
|
+
session_name_prefix: Prefix for session names
|
|
29
|
+
"""
|
|
30
|
+
self.session_name_prefix = session_name_prefix
|
|
31
|
+
self.session2wt_tabs = session2wt_tabs # Store the original config
|
|
32
|
+
self.managers: List[WTLayoutGenerator] = []
|
|
33
|
+
|
|
34
|
+
# Create a WTLayoutGenerator for each session
|
|
35
|
+
for session_name, tab_config in session2wt_tabs.items():
|
|
36
|
+
manager = WTLayoutGenerator()
|
|
37
|
+
full_session_name = f"{self.session_name_prefix}_{session_name}"
|
|
38
|
+
manager.create_wt_layout(tab_config=tab_config, session_name=full_session_name)
|
|
39
|
+
self.managers.append(manager)
|
|
40
|
+
|
|
41
|
+
logger.info(f"Initialized WTLocalManager with {len(self.managers)} sessions")
|
|
42
|
+
|
|
43
|
+
def get_all_session_names(self) -> List[str]:
|
|
44
|
+
"""Get all managed session names."""
|
|
45
|
+
return [manager.session_name for manager in self.managers if manager.session_name is not None]
|
|
46
|
+
|
|
47
|
+
def start_all_sessions(self) -> Dict[str, Any]:
|
|
48
|
+
"""Start all Windows Terminal sessions with their layouts."""
|
|
49
|
+
results = {}
|
|
50
|
+
for manager in self.managers:
|
|
51
|
+
session_name = manager.session_name or "unknown"
|
|
52
|
+
try:
|
|
53
|
+
script_path = manager.script_path
|
|
54
|
+
|
|
55
|
+
if not script_path:
|
|
56
|
+
results[session_name] = {
|
|
57
|
+
"success": False,
|
|
58
|
+
"error": "No script file path available"
|
|
59
|
+
}
|
|
60
|
+
continue
|
|
61
|
+
|
|
62
|
+
# Execute the PowerShell script to start Windows Terminal
|
|
63
|
+
cmd = f"powershell -ExecutionPolicy Bypass -File \"{script_path}\""
|
|
64
|
+
|
|
65
|
+
logger.info(f"Starting session '{session_name}' with script: {script_path}")
|
|
66
|
+
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=30)
|
|
67
|
+
|
|
68
|
+
if result.returncode == 0:
|
|
69
|
+
results[session_name] = {
|
|
70
|
+
"success": True,
|
|
71
|
+
"message": f"Session '{session_name}' started successfully"
|
|
72
|
+
}
|
|
73
|
+
logger.info(f"✅ Session '{session_name}' started successfully")
|
|
74
|
+
else:
|
|
75
|
+
results[session_name] = {
|
|
76
|
+
"success": False,
|
|
77
|
+
"error": result.stderr or result.stdout
|
|
78
|
+
}
|
|
79
|
+
logger.error(f"❌ Failed to start session '{session_name}': {result.stderr}")
|
|
80
|
+
|
|
81
|
+
except Exception as e:
|
|
82
|
+
results[session_name] = {
|
|
83
|
+
"success": False,
|
|
84
|
+
"error": str(e)
|
|
85
|
+
}
|
|
86
|
+
logger.error(f"❌ Exception starting session '{session_name}': {e}")
|
|
87
|
+
|
|
88
|
+
return results
|
|
89
|
+
|
|
90
|
+
def kill_all_sessions(self) -> Dict[str, Any]:
|
|
91
|
+
"""Kill all managed Windows Terminal sessions."""
|
|
92
|
+
results = {}
|
|
93
|
+
for manager in self.managers:
|
|
94
|
+
session_name = manager.session_name or "unknown"
|
|
95
|
+
try:
|
|
96
|
+
# Kill all Windows Terminal processes (Windows Terminal doesn't have session-specific killing)
|
|
97
|
+
cmd = "powershell -Command \"Get-Process -Name 'WindowsTerminal' -ErrorAction SilentlyContinue | Stop-Process -Force\""
|
|
98
|
+
|
|
99
|
+
logger.info(f"Killing Windows Terminal processes for session '{session_name}'")
|
|
100
|
+
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=10)
|
|
101
|
+
|
|
102
|
+
results[session_name] = {
|
|
103
|
+
"success": result.returncode == 0,
|
|
104
|
+
"message": "Windows Terminal processes killed" if result.returncode == 0 else result.stderr
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
except Exception as e:
|
|
108
|
+
results[session_name] = {
|
|
109
|
+
"success": False,
|
|
110
|
+
"error": str(e)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return results
|
|
114
|
+
|
|
115
|
+
def attach_to_session(self, session_name: Optional[str] = None) -> str:
|
|
116
|
+
"""
|
|
117
|
+
Generate command to attach to a specific session or list attachment commands for all.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
session_name: Specific session to attach to, or None for all sessions
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
Command string to attach to session(s)
|
|
124
|
+
"""
|
|
125
|
+
if session_name:
|
|
126
|
+
# Find the specific session
|
|
127
|
+
for manager in self.managers:
|
|
128
|
+
if manager.session_name == session_name:
|
|
129
|
+
return f"wt -w {session_name}"
|
|
130
|
+
raise ValueError(f"Session '{session_name}' not found")
|
|
131
|
+
else:
|
|
132
|
+
# Return commands for all sessions
|
|
133
|
+
commands = []
|
|
134
|
+
for manager in self.managers:
|
|
135
|
+
commands.append(f"# Attach to session '{manager.session_name}':")
|
|
136
|
+
commands.append(f"wt -w {manager.session_name}")
|
|
137
|
+
commands.append("")
|
|
138
|
+
return "\n".join(commands)
|
|
139
|
+
|
|
140
|
+
def check_all_sessions_status(self) -> Dict[str, Dict[str, Any]]:
|
|
141
|
+
"""Check the status of all sessions and their commands."""
|
|
142
|
+
status_report = {}
|
|
143
|
+
|
|
144
|
+
for manager in self.managers:
|
|
145
|
+
session_name = manager.session_name or "default"
|
|
146
|
+
|
|
147
|
+
# Get session status
|
|
148
|
+
session_status = WTLayoutGenerator.check_wt_session_status(session_name)
|
|
149
|
+
|
|
150
|
+
# Get commands status for this session
|
|
151
|
+
commands_status = manager.check_all_commands_status()
|
|
152
|
+
|
|
153
|
+
# Calculate summary for this session
|
|
154
|
+
running_count = sum(1 for status in commands_status.values() if status.get("running", False))
|
|
155
|
+
total_count = len(commands_status)
|
|
156
|
+
|
|
157
|
+
status_report[session_name] = {
|
|
158
|
+
"session_status": session_status,
|
|
159
|
+
"commands_status": commands_status,
|
|
160
|
+
"summary": {
|
|
161
|
+
"total_commands": total_count,
|
|
162
|
+
"running_commands": running_count,
|
|
163
|
+
"stopped_commands": total_count - running_count,
|
|
164
|
+
"session_healthy": session_status.get("session_exists", False)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return status_report
|
|
169
|
+
|
|
170
|
+
def get_global_summary(self) -> Dict[str, Any]:
|
|
171
|
+
"""Get a global summary across all sessions."""
|
|
172
|
+
all_status = self.check_all_sessions_status()
|
|
173
|
+
|
|
174
|
+
total_sessions = len(all_status)
|
|
175
|
+
healthy_sessions = sum(1 for status in all_status.values()
|
|
176
|
+
if status["summary"]["session_healthy"])
|
|
177
|
+
total_commands = sum(status["summary"]["total_commands"]
|
|
178
|
+
for status in all_status.values())
|
|
179
|
+
total_running = sum(status["summary"]["running_commands"]
|
|
180
|
+
for status in all_status.values())
|
|
181
|
+
|
|
182
|
+
return {
|
|
183
|
+
"total_sessions": total_sessions,
|
|
184
|
+
"healthy_sessions": healthy_sessions,
|
|
185
|
+
"unhealthy_sessions": total_sessions - healthy_sessions,
|
|
186
|
+
"total_commands": total_commands,
|
|
187
|
+
"running_commands": total_running,
|
|
188
|
+
"stopped_commands": total_commands - total_running,
|
|
189
|
+
"all_sessions_healthy": healthy_sessions == total_sessions,
|
|
190
|
+
"all_commands_running": total_running == total_commands
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
def print_status_report(self) -> None:
|
|
194
|
+
"""Print a comprehensive status report for all sessions."""
|
|
195
|
+
all_status = self.check_all_sessions_status()
|
|
196
|
+
global_summary = self.get_global_summary()
|
|
197
|
+
|
|
198
|
+
print("=" * 80)
|
|
199
|
+
print("🖥️ WINDOWS TERMINAL LOCAL MANAGER STATUS REPORT")
|
|
200
|
+
print("=" * 80)
|
|
201
|
+
|
|
202
|
+
# Global summary
|
|
203
|
+
print("🌐 GLOBAL SUMMARY:")
|
|
204
|
+
print(f" Total sessions: {global_summary['total_sessions']}")
|
|
205
|
+
print(f" Healthy sessions: {global_summary['healthy_sessions']}")
|
|
206
|
+
print(f" Total commands: {global_summary['total_commands']}")
|
|
207
|
+
print(f" Running commands: {global_summary['running_commands']}")
|
|
208
|
+
print(f" All healthy: {'✅' if global_summary['all_sessions_healthy'] else '❌'}")
|
|
209
|
+
print()
|
|
210
|
+
|
|
211
|
+
# Per-session details
|
|
212
|
+
for session_name, status in all_status.items():
|
|
213
|
+
session_status = status["session_status"]
|
|
214
|
+
commands_status = status["commands_status"]
|
|
215
|
+
summary = status["summary"]
|
|
216
|
+
|
|
217
|
+
print(f"🪟 SESSION: {session_name}")
|
|
218
|
+
print("-" * 60)
|
|
219
|
+
|
|
220
|
+
# Session health
|
|
221
|
+
if session_status.get("wt_running", False):
|
|
222
|
+
if session_status.get("session_exists", False):
|
|
223
|
+
session_windows = session_status.get("session_windows", [])
|
|
224
|
+
all_windows = session_status.get("all_windows", [])
|
|
225
|
+
print("✅ Windows Terminal is running")
|
|
226
|
+
print(f" Session windows: {len(session_windows)}")
|
|
227
|
+
print(f" Total WT windows: {len(all_windows)}")
|
|
228
|
+
else:
|
|
229
|
+
print("⚠️ Windows Terminal is running but no session windows found")
|
|
230
|
+
else:
|
|
231
|
+
print(f"❌ Windows Terminal session issue: {session_status.get('error', 'Unknown error')}")
|
|
232
|
+
|
|
233
|
+
# Commands in this session
|
|
234
|
+
print(f" Commands ({summary['running_commands']}/{summary['total_commands']} running):")
|
|
235
|
+
for tab_name, cmd_status in commands_status.items():
|
|
236
|
+
status_icon = "✅" if cmd_status.get("running", False) else "❌"
|
|
237
|
+
cmd_text = cmd_status.get("command", "Unknown")[:50]
|
|
238
|
+
if len(cmd_status.get("command", "")) > 50:
|
|
239
|
+
cmd_text += "..."
|
|
240
|
+
print(f" {status_icon} {tab_name}: {cmd_text}")
|
|
241
|
+
|
|
242
|
+
if cmd_status.get("processes"):
|
|
243
|
+
for proc in cmd_status["processes"][:2]: # Show first 2 processes
|
|
244
|
+
print(f" └─ PID {proc['pid']}: {proc['name']}")
|
|
245
|
+
print()
|
|
246
|
+
|
|
247
|
+
print("=" * 80)
|
|
248
|
+
|
|
249
|
+
def run_monitoring_routine(self, wait_ms: int = 30000) -> None:
|
|
250
|
+
"""
|
|
251
|
+
Run a continuous monitoring routine that checks status periodically.
|
|
252
|
+
|
|
253
|
+
Args:
|
|
254
|
+
wait_ms: How long to wait between checks in milliseconds (default: 30000ms = 30s)
|
|
255
|
+
"""
|
|
256
|
+
def routine(scheduler: Scheduler):
|
|
257
|
+
print(f"\n⏰ Monitoring cycle {scheduler.cycle} at {datetime.now()}")
|
|
258
|
+
print("-" * 50)
|
|
259
|
+
|
|
260
|
+
if scheduler.cycle % 2 == 0:
|
|
261
|
+
# Detailed status check every other cycle
|
|
262
|
+
all_status = self.check_all_sessions_status()
|
|
263
|
+
|
|
264
|
+
# Create DataFrame-like data for easier viewing
|
|
265
|
+
status_data = []
|
|
266
|
+
for session_name, status in all_status.items():
|
|
267
|
+
for tab_name, cmd_status in status["commands_status"].items():
|
|
268
|
+
status_data.append({
|
|
269
|
+
"session": session_name,
|
|
270
|
+
"tab": tab_name,
|
|
271
|
+
"running": cmd_status.get("running", False),
|
|
272
|
+
"command": cmd_status.get("command", "Unknown")[:50] + "..." if len(cmd_status.get("command", "")) > 50 else cmd_status.get("command", ""),
|
|
273
|
+
"processes": len(cmd_status.get("processes", []))
|
|
274
|
+
})
|
|
275
|
+
|
|
276
|
+
if status_data:
|
|
277
|
+
# Format data as table
|
|
278
|
+
headers = ["session", "tab", "running", "command", "processes"]
|
|
279
|
+
header_line = " | ".join(f"{h:<15}" for h in headers)
|
|
280
|
+
separator = "-" * len(header_line)
|
|
281
|
+
print(header_line)
|
|
282
|
+
print(separator)
|
|
283
|
+
for row in status_data:
|
|
284
|
+
values = [str(row.get(h, ""))[:15] for h in headers]
|
|
285
|
+
print(" | ".join(f"{v:<15}" for v in values))
|
|
286
|
+
|
|
287
|
+
# Check if all sessions have stopped
|
|
288
|
+
running_count = sum(1 for row in status_data if row.get("running", False))
|
|
289
|
+
if running_count == 0:
|
|
290
|
+
print("\n⚠️ All commands have stopped. Stopping monitoring.")
|
|
291
|
+
scheduler.max_cycles = scheduler.cycle
|
|
292
|
+
return
|
|
293
|
+
else:
|
|
294
|
+
print("No status data available")
|
|
295
|
+
else:
|
|
296
|
+
# Quick summary check
|
|
297
|
+
global_summary = self.get_global_summary()
|
|
298
|
+
print(f"📊 Quick Summary: {global_summary['running_commands']}/{global_summary['total_commands']} commands running across {global_summary['healthy_sessions']}/{global_summary['total_sessions']} sessions")
|
|
299
|
+
|
|
300
|
+
logger.info(f"Starting monitoring routine with {wait_ms}ms intervals")
|
|
301
|
+
sched = Scheduler(routine=routine, wait_ms=wait_ms)
|
|
302
|
+
sched.run(max_cycles=None)
|
|
303
|
+
|
|
304
|
+
def save(self, session_id: Optional[str] = None) -> str:
|
|
305
|
+
"""Save the manager state to disk."""
|
|
306
|
+
if session_id is None:
|
|
307
|
+
session_id = str(uuid.uuid4())[:8]
|
|
308
|
+
|
|
309
|
+
# Create session directory
|
|
310
|
+
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
311
|
+
session_dir.mkdir(parents=True, exist_ok=True)
|
|
312
|
+
|
|
313
|
+
# Save the session2wt_tabs configuration
|
|
314
|
+
config_file = session_dir / "session2wt_tabs.json"
|
|
315
|
+
with open(config_file, 'w', encoding='utf-8') as f:
|
|
316
|
+
json.dump(self.session2wt_tabs, f, indent=2, ensure_ascii=False)
|
|
317
|
+
|
|
318
|
+
# Save metadata
|
|
319
|
+
metadata = {
|
|
320
|
+
"session_name_prefix": self.session_name_prefix,
|
|
321
|
+
"created_at": str(datetime.now()),
|
|
322
|
+
"num_managers": len(self.managers),
|
|
323
|
+
"sessions": list(self.session2wt_tabs.keys()),
|
|
324
|
+
"manager_type": "WTLocalManager"
|
|
325
|
+
}
|
|
326
|
+
metadata_file = session_dir / "metadata.json"
|
|
327
|
+
with open(metadata_file, 'w', encoding='utf-8') as f:
|
|
328
|
+
json.dump(metadata, f, indent=2, ensure_ascii=False)
|
|
329
|
+
|
|
330
|
+
# Save each manager's state
|
|
331
|
+
managers_dir = session_dir / "managers"
|
|
332
|
+
managers_dir.mkdir(exist_ok=True)
|
|
333
|
+
|
|
334
|
+
for i, manager in enumerate(self.managers):
|
|
335
|
+
manager_data = {
|
|
336
|
+
"session_name": manager.session_name,
|
|
337
|
+
"tab_config": manager.tab_config,
|
|
338
|
+
"script_path": manager.script_path
|
|
339
|
+
}
|
|
340
|
+
manager_file = managers_dir / f"manager_{i}_{manager.session_name}.json"
|
|
341
|
+
with open(manager_file, 'w', encoding='utf-8') as f:
|
|
342
|
+
json.dump(manager_data, f, indent=2, ensure_ascii=False)
|
|
343
|
+
|
|
344
|
+
logger.info(f"✅ Saved WTLocalManager session to: {session_dir}")
|
|
345
|
+
return session_id
|
|
346
|
+
|
|
347
|
+
@classmethod
|
|
348
|
+
def load(cls, session_id: str) -> 'WTLocalManager':
|
|
349
|
+
"""Load a saved manager state from disk."""
|
|
350
|
+
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
351
|
+
|
|
352
|
+
if not session_dir.exists():
|
|
353
|
+
raise FileNotFoundError(f"Session directory not found: {session_dir}")
|
|
354
|
+
|
|
355
|
+
# Load configuration
|
|
356
|
+
config_file = session_dir / "session2wt_tabs.json"
|
|
357
|
+
if not config_file.exists():
|
|
358
|
+
raise FileNotFoundError(f"Configuration file not found: {config_file}")
|
|
359
|
+
|
|
360
|
+
with open(config_file, 'r', encoding='utf-8') as f:
|
|
361
|
+
session2wt_tabs = json.load(f)
|
|
362
|
+
|
|
363
|
+
# Load metadata
|
|
364
|
+
metadata_file = session_dir / "metadata.json"
|
|
365
|
+
session_name_prefix = "LocalWTMgr" # default fallback
|
|
366
|
+
if metadata_file.exists():
|
|
367
|
+
with open(metadata_file, 'r', encoding='utf-8') as f:
|
|
368
|
+
metadata = json.load(f)
|
|
369
|
+
session_name_prefix = metadata.get("session_name_prefix", "LocalWTMgr")
|
|
370
|
+
|
|
371
|
+
# Create new instance
|
|
372
|
+
instance = cls(session2wt_tabs=session2wt_tabs, session_name_prefix=session_name_prefix)
|
|
373
|
+
|
|
374
|
+
# Load saved manager states
|
|
375
|
+
managers_dir = session_dir / "managers"
|
|
376
|
+
if managers_dir.exists():
|
|
377
|
+
instance.managers = []
|
|
378
|
+
manager_files = sorted(managers_dir.glob("manager_*.json"))
|
|
379
|
+
|
|
380
|
+
for manager_file in manager_files:
|
|
381
|
+
try:
|
|
382
|
+
with open(manager_file, 'r', encoding='utf-8') as f:
|
|
383
|
+
manager_data = json.load(f)
|
|
384
|
+
|
|
385
|
+
# Recreate the manager
|
|
386
|
+
manager = WTLayoutGenerator()
|
|
387
|
+
manager.session_name = manager_data["session_name"]
|
|
388
|
+
manager.tab_config = manager_data["tab_config"]
|
|
389
|
+
manager.script_path = manager_data["script_path"]
|
|
390
|
+
|
|
391
|
+
instance.managers.append(manager)
|
|
392
|
+
|
|
393
|
+
except Exception as e:
|
|
394
|
+
logger.warning(f"Failed to load manager from {manager_file}: {e}")
|
|
395
|
+
|
|
396
|
+
logger.info(f"✅ Loaded WTLocalManager session from: {session_dir}")
|
|
397
|
+
return instance
|
|
398
|
+
|
|
399
|
+
@staticmethod
|
|
400
|
+
def list_saved_sessions() -> List[str]:
|
|
401
|
+
"""List all saved session IDs."""
|
|
402
|
+
if not TMP_SERIALIZATION_DIR.exists():
|
|
403
|
+
return []
|
|
404
|
+
|
|
405
|
+
sessions = []
|
|
406
|
+
for item in TMP_SERIALIZATION_DIR.iterdir():
|
|
407
|
+
if item.is_dir() and (item / "metadata.json").exists():
|
|
408
|
+
sessions.append(item.name)
|
|
409
|
+
|
|
410
|
+
return sorted(sessions)
|
|
411
|
+
|
|
412
|
+
@staticmethod
|
|
413
|
+
def delete_session(session_id: str) -> bool:
|
|
414
|
+
"""Delete a saved session."""
|
|
415
|
+
session_dir = TMP_SERIALIZATION_DIR / session_id
|
|
416
|
+
|
|
417
|
+
if not session_dir.exists():
|
|
418
|
+
logger.warning(f"Session directory not found: {session_dir}")
|
|
419
|
+
return False
|
|
420
|
+
|
|
421
|
+
try:
|
|
422
|
+
import shutil
|
|
423
|
+
shutil.rmtree(session_dir)
|
|
424
|
+
logger.info(f"✅ Deleted session: {session_id}")
|
|
425
|
+
return True
|
|
426
|
+
except Exception as e:
|
|
427
|
+
logger.error(f"Failed to delete session {session_id}: {e}")
|
|
428
|
+
return False
|
|
429
|
+
|
|
430
|
+
def list_active_sessions(self) -> List[Dict[str, Any]]:
|
|
431
|
+
"""List currently active Windows Terminal sessions managed by this instance."""
|
|
432
|
+
active_sessions = []
|
|
433
|
+
|
|
434
|
+
try:
|
|
435
|
+
# Get all running Windows Terminal processes
|
|
436
|
+
result = subprocess.run(
|
|
437
|
+
['powershell', '-Command',
|
|
438
|
+
'Get-Process -Name "WindowsTerminal" -ErrorAction SilentlyContinue | Select-Object Id, ProcessName, StartTime, MainWindowTitle | ConvertTo-Json -Depth 2'],
|
|
439
|
+
capture_output=True,
|
|
440
|
+
text=True,
|
|
441
|
+
timeout=10
|
|
442
|
+
)
|
|
443
|
+
|
|
444
|
+
if result.returncode == 0 and result.stdout.strip():
|
|
445
|
+
import json
|
|
446
|
+
all_processes = json.loads(result.stdout.strip())
|
|
447
|
+
if not isinstance(all_processes, list):
|
|
448
|
+
all_processes = [all_processes]
|
|
449
|
+
|
|
450
|
+
# Filter to only our managed sessions
|
|
451
|
+
for manager in self.managers:
|
|
452
|
+
session_name = manager.session_name
|
|
453
|
+
session_windows = []
|
|
454
|
+
|
|
455
|
+
for proc in all_processes:
|
|
456
|
+
window_title = proc.get("MainWindowTitle", "")
|
|
457
|
+
if session_name in window_title or not window_title:
|
|
458
|
+
session_windows.append(proc)
|
|
459
|
+
|
|
460
|
+
active_sessions.append({
|
|
461
|
+
"session_name": session_name,
|
|
462
|
+
"is_active": len(session_windows) > 0,
|
|
463
|
+
"tab_count": len(manager.tab_config),
|
|
464
|
+
"tabs": list(manager.tab_config.keys()),
|
|
465
|
+
"windows": session_windows
|
|
466
|
+
})
|
|
467
|
+
|
|
468
|
+
except Exception as e:
|
|
469
|
+
logger.error(f"Error listing active sessions: {e}")
|
|
470
|
+
|
|
471
|
+
return active_sessions
|
|
472
|
+
|
|
473
|
+
def get_wt_overview(self) -> Dict[str, Any]:
|
|
474
|
+
"""Get overview of all Windows Terminal windows and processes."""
|
|
475
|
+
try:
|
|
476
|
+
result = subprocess.run(
|
|
477
|
+
['powershell', '-Command',
|
|
478
|
+
'Get-Process -Name "WindowsTerminal" -ErrorAction SilentlyContinue | Select-Object Id, ProcessName, StartTime, MainWindowTitle, CPU | ConvertTo-Json -Depth 2'],
|
|
479
|
+
capture_output=True,
|
|
480
|
+
text=True,
|
|
481
|
+
timeout=10
|
|
482
|
+
)
|
|
483
|
+
|
|
484
|
+
if result.returncode == 0 and result.stdout.strip():
|
|
485
|
+
import json
|
|
486
|
+
processes = json.loads(result.stdout.strip())
|
|
487
|
+
if not isinstance(processes, list):
|
|
488
|
+
processes = [processes]
|
|
489
|
+
|
|
490
|
+
return {
|
|
491
|
+
"success": True,
|
|
492
|
+
"total_windows": len(processes),
|
|
493
|
+
"windows": processes,
|
|
494
|
+
"managed_sessions": len(self.managers)
|
|
495
|
+
}
|
|
496
|
+
else:
|
|
497
|
+
return {
|
|
498
|
+
"success": True,
|
|
499
|
+
"total_windows": 0,
|
|
500
|
+
"windows": [],
|
|
501
|
+
"managed_sessions": len(self.managers),
|
|
502
|
+
"message": "No Windows Terminal processes found"
|
|
503
|
+
}
|
|
504
|
+
except Exception as e:
|
|
505
|
+
return {
|
|
506
|
+
"success": False,
|
|
507
|
+
"error": str(e),
|
|
508
|
+
"managed_sessions": len(self.managers)
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
if __name__ == "__main__":
|
|
513
|
+
# Example usage
|
|
514
|
+
sample_sessions = {
|
|
515
|
+
"development": {
|
|
516
|
+
"🚀Frontend": ("~/code/myapp/frontend", "npm run dev"),
|
|
517
|
+
"⚙️Backend": ("~/code/myapp/backend", "python manage.py runserver"),
|
|
518
|
+
"📊Monitor": ("~", "Get-Process | Sort-Object CPU -Descending | Select-Object -First 10")
|
|
519
|
+
},
|
|
520
|
+
"testing": {
|
|
521
|
+
"🧪Tests": ("~/code/myapp", "pytest --watch"),
|
|
522
|
+
"🔍Coverage": ("~/code/myapp", "python -m coverage run --source=. -m pytest"),
|
|
523
|
+
"📝Logs": ("~/logs", "Get-Content app.log -Wait")
|
|
524
|
+
},
|
|
525
|
+
"deployment": {
|
|
526
|
+
"🐳Docker": ("~/code/myapp", "docker-compose up"),
|
|
527
|
+
"☸️K8s": ("~/k8s", "kubectl get pods --watch"),
|
|
528
|
+
"📈Metrics": ("~", "Get-Counter \"\\Processor(_Total)\\% Processor Time\" -SampleInterval 2 -MaxSamples 30")
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
try:
|
|
533
|
+
# Create the local manager
|
|
534
|
+
manager = WTLocalManager(sample_sessions, session_name_prefix="DevEnv")
|
|
535
|
+
print(f"✅ Local manager created with {len(manager.managers)} sessions")
|
|
536
|
+
|
|
537
|
+
# Show session names
|
|
538
|
+
print(f"📋 Sessions: {manager.get_all_session_names()}")
|
|
539
|
+
|
|
540
|
+
# Print attachment commands (without actually starting)
|
|
541
|
+
print("\n📎 Attachment commands:")
|
|
542
|
+
print(manager.attach_to_session())
|
|
543
|
+
|
|
544
|
+
# Show current status
|
|
545
|
+
print("\n🔍 Current status:")
|
|
546
|
+
manager.print_status_report()
|
|
547
|
+
|
|
548
|
+
# Show Windows Terminal overview
|
|
549
|
+
print("\n🖥️ Windows Terminal Overview:")
|
|
550
|
+
overview = manager.get_wt_overview()
|
|
551
|
+
if overview["success"]:
|
|
552
|
+
print(f" Total WT windows: {overview['total_windows']}")
|
|
553
|
+
print(f" Managed sessions: {overview['managed_sessions']}")
|
|
554
|
+
else:
|
|
555
|
+
print(f" Error: {overview.get('error', 'Unknown')}")
|
|
556
|
+
|
|
557
|
+
# Demonstrate save/load
|
|
558
|
+
print("\n💾 Demonstrating save/load...")
|
|
559
|
+
session_id = manager.save()
|
|
560
|
+
print(f"✅ Saved session: {session_id}")
|
|
561
|
+
|
|
562
|
+
# List saved sessions
|
|
563
|
+
saved_sessions = WTLocalManager.list_saved_sessions()
|
|
564
|
+
print(f"📋 Saved sessions: {saved_sessions}")
|
|
565
|
+
|
|
566
|
+
# Load and verify
|
|
567
|
+
loaded_manager = WTLocalManager.load(session_id)
|
|
568
|
+
print(f"✅ Loaded session with {len(loaded_manager.managers)} sessions")
|
|
569
|
+
|
|
570
|
+
# Show how to start monitoring (commented out to prevent infinite loop in demo)
|
|
571
|
+
print("\n⏰ To start monitoring, run:")
|
|
572
|
+
print("manager.run_monitoring_routine(wait_ms=30000) # 30 seconds")
|
|
573
|
+
|
|
574
|
+
except Exception as e:
|
|
575
|
+
print(f"❌ Error: {e}")
|
|
576
|
+
import traceback
|
|
577
|
+
traceback.print_exc()
|