machineconfig 1.97__py3-none-any.whl โ 2.1__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 +22 -29
- machineconfig/cluster/data_transfer.py +2 -3
- machineconfig/cluster/distribute.py +0 -2
- machineconfig/cluster/file_manager.py +4 -5
- machineconfig/cluster/job_params.py +1 -4
- machineconfig/cluster/loader_runner.py +8 -11
- machineconfig/cluster/remote_machine.py +4 -5
- machineconfig/cluster/script_execution.py +2 -2
- machineconfig/cluster/script_notify_upon_completion.py +0 -1
- machineconfig/cluster/sessions_managers/archive/create_zellij_template.py +4 -6
- machineconfig/cluster/sessions_managers/archive/session_managers.py +0 -1
- machineconfig/cluster/sessions_managers/enhanced_command_runner.py +35 -75
- machineconfig/cluster/sessions_managers/wt_local.py +113 -185
- machineconfig/cluster/sessions_managers/wt_local_manager.py +127 -197
- machineconfig/cluster/sessions_managers/wt_remote.py +60 -67
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +110 -149
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +61 -64
- machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +72 -172
- machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +27 -60
- machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +58 -137
- machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +46 -74
- machineconfig/cluster/sessions_managers/zellij_local.py +91 -147
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +165 -190
- machineconfig/cluster/sessions_managers/zellij_remote.py +51 -58
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +40 -46
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +19 -17
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +30 -31
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +64 -134
- machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +7 -11
- machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +27 -55
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +14 -13
- machineconfig/cluster/templates/cli_click.py +0 -1
- machineconfig/cluster/templates/cli_gooey.py +0 -2
- machineconfig/cluster/templates/cli_trogon.py +0 -1
- machineconfig/cluster/templates/run_cloud.py +0 -1
- machineconfig/cluster/templates/run_cluster.py +0 -1
- machineconfig/cluster/templates/run_remote.py +0 -1
- machineconfig/cluster/templates/utils.py +27 -11
- machineconfig/jobs/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/jobs/linux/msc/cli_agents.sh +16 -0
- machineconfig/jobs/python/check_installations.py +9 -9
- machineconfig/jobs/python/create_bootable_media.py +0 -2
- machineconfig/jobs/python/python_cargo_build_share.py +2 -2
- machineconfig/jobs/python/python_ve_symlink.py +9 -11
- machineconfig/jobs/python/tasks.py +0 -1
- machineconfig/jobs/python/vscode/api.py +5 -5
- machineconfig/jobs/python/vscode/link_ve.py +20 -21
- machineconfig/jobs/python/vscode/select_interpreter.py +28 -29
- machineconfig/jobs/python/vscode/sync_code.py +14 -18
- machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +15 -15
- machineconfig/jobs/python_custom_installers/dev/aider.py +10 -18
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +12 -21
- machineconfig/jobs/python_custom_installers/dev/brave.py +13 -22
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +13 -20
- machineconfig/jobs/python_custom_installers/dev/code.py +17 -24
- machineconfig/jobs/python_custom_installers/dev/cursor.py +10 -21
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +12 -11
- machineconfig/jobs/python_custom_installers/dev/espanso.py +19 -23
- machineconfig/jobs/python_custom_installers/dev/goes.py +9 -16
- machineconfig/jobs/python_custom_installers/dev/lvim.py +13 -21
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +15 -22
- machineconfig/jobs/python_custom_installers/dev/redis.py +15 -23
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +15 -22
- machineconfig/jobs/python_custom_installers/dev/winget.py +32 -50
- machineconfig/jobs/python_custom_installers/docker.py +15 -24
- machineconfig/jobs/python_custom_installers/gh.py +18 -26
- machineconfig/jobs/python_custom_installers/hx.py +33 -17
- machineconfig/jobs/python_custom_installers/warp-cli.py +15 -23
- machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/jobs/python_generic_installers/config.json +412 -389
- machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/jobs/python_windows_installers/dev/config.json +1 -1
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +1 -1
- machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
- machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
- machineconfig/jobs/windows/start_terminal.ps1 +1 -1
- machineconfig/logger.py +50 -0
- machineconfig/profile/create.py +50 -36
- machineconfig/profile/create_hardlinks.py +33 -26
- machineconfig/profile/shell.py +87 -60
- machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/cloud/init.sh +2 -2
- machineconfig/scripts/linux/checkout_versions +1 -1
- machineconfig/scripts/linux/choose_wezterm_theme +1 -1
- machineconfig/scripts/linux/cloud_copy +1 -1
- machineconfig/scripts/linux/cloud_manager +1 -1
- machineconfig/scripts/linux/cloud_mount +1 -1
- machineconfig/scripts/linux/cloud_repo_sync +1 -1
- machineconfig/scripts/linux/cloud_sync +1 -1
- machineconfig/scripts/linux/croshell +1 -1
- machineconfig/scripts/linux/devops +3 -5
- machineconfig/scripts/linux/fire +2 -1
- machineconfig/scripts/linux/fire_agents +3 -3
- machineconfig/scripts/linux/ftpx +1 -1
- machineconfig/scripts/linux/gh_models +1 -1
- machineconfig/scripts/linux/kill_process +1 -1
- machineconfig/scripts/linux/mcinit +2 -2
- machineconfig/scripts/linux/repos +1 -1
- machineconfig/scripts/linux/scheduler +1 -1
- machineconfig/scripts/linux/start_slidev +1 -1
- machineconfig/scripts/linux/start_terminals +1 -1
- machineconfig/scripts/linux/url2md +1 -1
- machineconfig/scripts/linux/warp-cli.sh +122 -0
- machineconfig/scripts/linux/wifi_conn +1 -1
- machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/croshell.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-313.pyc +0 -0
- machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
- machineconfig/scripts/python/ai/__init__.py +0 -0
- machineconfig/scripts/python/ai/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/ai/__pycache__/generate_files.cpython-313.pyc +0 -0
- machineconfig/scripts/python/ai/__pycache__/mcinit.cpython-313.pyc +0 -0
- machineconfig/scripts/python/ai/chatmodes/Thinking-Beast-Mode.chatmode.md +337 -0
- machineconfig/scripts/python/ai/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +644 -0
- machineconfig/scripts/python/ai/chatmodes/deepResearch.chatmode.md +81 -0
- machineconfig/scripts/python/ai/configs/.gemini/settings.json +81 -0
- machineconfig/scripts/python/ai/generate_files.py +84 -0
- machineconfig/scripts/python/ai/instructions/python/dev.instructions.md +45 -0
- machineconfig/scripts/python/ai/mcinit.py +107 -0
- machineconfig/scripts/python/ai/prompts/allLintersAndTypeCheckers.prompt.md +5 -0
- machineconfig/scripts/python/ai/prompts/research-report-skeleton.prompt.md +38 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +52 -0
- machineconfig/scripts/python/archive/tmate_conn.py +5 -5
- machineconfig/scripts/python/archive/tmate_start.py +3 -3
- machineconfig/scripts/python/choose_wezterm_theme.py +2 -2
- machineconfig/scripts/python/cloud_copy.py +20 -19
- machineconfig/scripts/python/cloud_mount.py +10 -8
- machineconfig/scripts/python/cloud_repo_sync.py +15 -15
- machineconfig/scripts/python/cloud_sync.py +1 -1
- machineconfig/scripts/python/croshell.py +18 -16
- machineconfig/scripts/python/devops.py +6 -6
- machineconfig/scripts/python/devops_add_identity.py +9 -7
- machineconfig/scripts/python/devops_add_ssh_key.py +19 -19
- machineconfig/scripts/python/devops_backup_retrieve.py +14 -14
- machineconfig/scripts/python/devops_devapps_install.py +3 -3
- machineconfig/scripts/python/devops_update_repos.py +141 -53
- machineconfig/scripts/python/dotfile.py +3 -3
- machineconfig/scripts/python/fire_agents.py +202 -41
- machineconfig/scripts/python/fire_jobs.py +20 -21
- machineconfig/scripts/python/ftpx.py +4 -3
- machineconfig/scripts/python/gh_models.py +94 -94
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
- machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
- machineconfig/scripts/python/helpers/cloud_helpers.py +3 -3
- machineconfig/scripts/python/helpers/helpers2.py +3 -3
- machineconfig/scripts/python/helpers/helpers4.py +8 -7
- machineconfig/scripts/python/helpers/helpers5.py +7 -7
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +2 -2
- machineconfig/scripts/python/mount_nfs.py +4 -3
- machineconfig/scripts/python/mount_nw_drive.py +4 -4
- machineconfig/scripts/python/mount_ssh.py +4 -3
- machineconfig/scripts/python/repos.py +9 -9
- machineconfig/scripts/python/scheduler.py +1 -1
- machineconfig/scripts/python/start_slidev.py +9 -8
- machineconfig/scripts/python/start_terminals.py +1 -1
- machineconfig/scripts/python/viewer.py +40 -40
- machineconfig/scripts/python/wifi_conn.py +65 -66
- machineconfig/scripts/python/wsl_windows_transfer.py +2 -2
- machineconfig/scripts/windows/checkout_version.ps1 +1 -3
- machineconfig/scripts/windows/choose_wezterm_theme.ps1 +1 -3
- machineconfig/scripts/windows/cloud_copy.ps1 +2 -6
- machineconfig/scripts/windows/cloud_manager.ps1 +1 -1
- machineconfig/scripts/windows/cloud_repo_sync.ps1 +1 -2
- machineconfig/scripts/windows/cloud_sync.ps1 +2 -2
- machineconfig/scripts/windows/croshell.ps1 +2 -2
- machineconfig/scripts/windows/devops.ps1 +1 -4
- machineconfig/scripts/windows/dotfile.ps1 +1 -3
- machineconfig/scripts/windows/fire.ps1 +1 -1
- machineconfig/scripts/windows/ftpx.ps1 +2 -2
- machineconfig/scripts/windows/gpt.ps1 +1 -1
- machineconfig/scripts/windows/kill_process.ps1 +1 -2
- machineconfig/scripts/windows/mcinit.ps1 +2 -2
- machineconfig/scripts/windows/mount_nfs.ps1 +1 -1
- machineconfig/scripts/windows/mount_ssh.ps1 +1 -1
- machineconfig/scripts/windows/pomodoro.ps1 +1 -1
- machineconfig/scripts/windows/py2exe.ps1 +1 -3
- machineconfig/scripts/windows/repos.ps1 +1 -1
- machineconfig/scripts/windows/scheduler.ps1 +1 -1
- machineconfig/scripts/windows/snapshot.ps1 +2 -2
- machineconfig/scripts/windows/start_slidev.ps1 +1 -1
- machineconfig/scripts/windows/start_terminals.ps1 +1 -1
- machineconfig/scripts/windows/wifi_conn.ps1 +1 -1
- machineconfig/scripts/windows/wsl_windows_transfer.ps1 +1 -3
- machineconfig/settings/lf/linux/lfrc +1 -1
- machineconfig/settings/linters/.ruff.toml +2 -2
- machineconfig/settings/linters/.ruff_cache/.gitignore +2 -0
- machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +1 -0
- machineconfig/settings/lvim/windows/archive/config_additional.lua +1 -1
- machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +71 -71
- machineconfig/settings/shells/wt/settings.json +8 -8
- machineconfig/settings/svim/linux/init.toml +1 -1
- machineconfig/settings/svim/windows/init.toml +1 -1
- machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -54
- machineconfig/setup_linux/web_shortcuts/interactive.sh +6 -6
- machineconfig/setup_linux/web_shortcuts/tmp.sh +2 -0
- machineconfig/setup_windows/web_shortcuts/all.ps1 +2 -2
- machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +1 -1
- machineconfig/setup_windows/web_shortcuts/croshell.ps1 +1 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +5 -5
- machineconfig/setup_windows/wt_and_pwsh/install_fonts.ps1 +51 -15
- machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +75 -18
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +52 -42
- machineconfig/utils/ai/browser_user_wrapper.py +5 -5
- machineconfig/utils/ai/generate_file_checklist.py +19 -22
- machineconfig/utils/ai/url2md.py +5 -3
- machineconfig/utils/cloud/onedrive/setup_oauth.py +5 -4
- machineconfig/utils/cloud/onedrive/transaction.py +192 -227
- machineconfig/utils/code.py +71 -43
- machineconfig/utils/installer.py +77 -85
- machineconfig/utils/installer_utils/installer_abc.py +29 -17
- machineconfig/utils/installer_utils/installer_class.py +188 -83
- machineconfig/utils/io_save.py +3 -15
- machineconfig/utils/links.py +22 -11
- machineconfig/utils/notifications.py +197 -0
- machineconfig/utils/options.py +38 -25
- machineconfig/utils/path.py +18 -6
- machineconfig/utils/path_reduced.py +637 -316
- machineconfig/utils/procs.py +69 -63
- machineconfig/utils/scheduling.py +11 -13
- machineconfig/utils/ssh.py +351 -0
- machineconfig/utils/terminal.py +225 -0
- machineconfig/utils/utils.py +13 -12
- machineconfig/utils/utils2.py +43 -10
- machineconfig/utils/utils5.py +242 -46
- machineconfig/utils/ve.py +11 -6
- {machineconfig-1.97.dist-info โ machineconfig-2.1.dist-info}/METADATA +15 -9
- {machineconfig-1.97.dist-info โ machineconfig-2.1.dist-info}/RECORD +232 -235
- machineconfig/cluster/self_ssh.py +0 -57
- machineconfig/jobs/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python/archive/python_tools.txt +0 -12
- machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
- machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/jobs/python_generic_installers/update.py +0 -3
- machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -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/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- machineconfig/scripts/linux/activate_ve +0 -87
- machineconfig/scripts/python/__pycache__/__init__.cpython-311.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__/get_zellij_cmd.cpython-311.pyc +0 -0
- machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
- machineconfig/scripts/python/ai/__pycache__/init.cpython-311.pyc +0 -0
- machineconfig/scripts/python/ai/init.py +0 -56
- machineconfig/scripts/python/ai/rules/python/dev.md +0 -31
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.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__/repo_sync_helpers.cpython-311.pyc +0 -0
- machineconfig/scripts/windows/activate_ve.ps1 +0 -54
- {machineconfig-1.97.dist-info โ machineconfig-2.1.dist-info}/WHEEL +0 -0
- {machineconfig-1.97.dist-info โ machineconfig-2.1.dist-info}/top_level.txt +0 -0
|
@@ -18,20 +18,19 @@ TMP_LAYOUT_DIR = Path.home().joinpath("tmp_results", "wt_layouts", "layout_manag
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class WTRemoteLayoutGenerator:
|
|
21
|
-
|
|
22
21
|
def __init__(self, remote_name: str, session_name_prefix: str):
|
|
23
22
|
self.remote_name = remote_name
|
|
24
23
|
self.session_name = session_name_prefix + "_" + WTLayoutGenerator.generate_random_suffix()
|
|
25
24
|
self.tab_config: Dict[str, Tuple[str, str]] = {}
|
|
26
25
|
self.script_path: Optional[str] = None
|
|
27
|
-
|
|
26
|
+
|
|
28
27
|
# Initialize modular components
|
|
29
28
|
self.remote_executor = WTRemoteExecutor(remote_name)
|
|
30
29
|
self.layout_generator = WTLayoutGenerator()
|
|
31
30
|
self.process_monitor = WTProcessMonitor(self.remote_executor)
|
|
32
31
|
self.session_manager = WTSessionManager(self.remote_executor, self.session_name, TMP_LAYOUT_DIR)
|
|
33
32
|
self.status_reporter = WTStatusReporter(self.process_monitor, self.session_manager)
|
|
34
|
-
|
|
33
|
+
|
|
35
34
|
def copy_script_to_remote(self, local_script_file: Path, random_suffix: str) -> str:
|
|
36
35
|
return self.session_manager.copy_script_to_remote(local_script_file, random_suffix)
|
|
37
36
|
|
|
@@ -42,12 +41,12 @@ class WTRemoteLayoutGenerator:
|
|
|
42
41
|
output_path = Path(output_dir)
|
|
43
42
|
else:
|
|
44
43
|
output_path = TMP_LAYOUT_DIR
|
|
45
|
-
self.script_path = self.layout_generator.create_wt_script(tab_config, output_path, self.session_name)
|
|
44
|
+
self.script_path = self.layout_generator.create_wt_script(tab_config, output_path, self.session_name)
|
|
46
45
|
return self.script_path
|
|
47
|
-
|
|
46
|
+
|
|
48
47
|
def get_layout_preview(self, tab_config: Dict[str, Tuple[str, str]]) -> str:
|
|
49
48
|
return self.layout_generator.generate_wt_command(tab_config)
|
|
50
|
-
|
|
49
|
+
|
|
51
50
|
def check_command_status(self, tab_name: str, use_verification: bool = True) -> Dict[str, Any]:
|
|
52
51
|
return self.process_monitor.check_command_status(tab_name, self.tab_config, use_verification)
|
|
53
52
|
|
|
@@ -102,14 +101,7 @@ class WTRemoteLayoutGenerator:
|
|
|
102
101
|
return self.remote_executor.get_remote_windows_info()
|
|
103
102
|
|
|
104
103
|
def to_dict(self) -> Dict[str, Any]:
|
|
105
|
-
return {
|
|
106
|
-
"remote_name": self.remote_name,
|
|
107
|
-
"session_name": self.session_name,
|
|
108
|
-
"tab_config": self.tab_config,
|
|
109
|
-
"script_path": self.script_path,
|
|
110
|
-
"created_at": datetime.now().isoformat(),
|
|
111
|
-
"class_name": self.__class__.__name__
|
|
112
|
-
}
|
|
104
|
+
return {"remote_name": self.remote_name, "session_name": self.session_name, "tab_config": self.tab_config, "script_path": self.script_path, "created_at": datetime.now().isoformat(), "class_name": self.__class__.__name__}
|
|
113
105
|
|
|
114
106
|
def to_json(self, file_path: Optional[str] = None) -> str:
|
|
115
107
|
# Generate file path if not provided
|
|
@@ -120,57 +112,57 @@ class WTRemoteLayoutGenerator:
|
|
|
120
112
|
path_obj = default_dir / f"wt_session_{random_id}.json"
|
|
121
113
|
else:
|
|
122
114
|
path_obj = Path(file_path)
|
|
123
|
-
|
|
115
|
+
|
|
124
116
|
# Ensure .json extension
|
|
125
|
-
if not str(path_obj).endswith(
|
|
126
|
-
path_obj = path_obj.with_suffix(
|
|
127
|
-
|
|
117
|
+
if not str(path_obj).endswith(".json"):
|
|
118
|
+
path_obj = path_obj.with_suffix(".json")
|
|
119
|
+
|
|
128
120
|
# Ensure parent directory exists
|
|
129
121
|
path_obj.parent.mkdir(parents=True, exist_ok=True)
|
|
130
|
-
|
|
122
|
+
|
|
131
123
|
# Serialize to JSON
|
|
132
124
|
data = self.to_dict()
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
125
|
+
|
|
126
|
+
text = json.dumps(data, indent=2, ensure_ascii=False)
|
|
127
|
+
path_obj.write_text(text, encoding="utf-8")
|
|
128
|
+
|
|
137
129
|
logger.info(f"โ
Serialized WTRemoteLayoutGenerator to: {path_obj}")
|
|
138
130
|
return str(path_obj)
|
|
139
131
|
|
|
140
132
|
@classmethod
|
|
141
|
-
def from_json(cls, file_path: str) ->
|
|
133
|
+
def from_json(cls, file_path: str) -> "WTRemoteLayoutGenerator":
|
|
142
134
|
path_obj = Path(file_path)
|
|
143
|
-
|
|
135
|
+
|
|
144
136
|
# Ensure .json extension
|
|
145
|
-
if not str(path_obj).endswith(
|
|
146
|
-
path_obj = path_obj.with_suffix(
|
|
147
|
-
|
|
137
|
+
if not str(path_obj).endswith(".json"):
|
|
138
|
+
path_obj = path_obj.with_suffix(".json")
|
|
139
|
+
|
|
148
140
|
if not path_obj.exists():
|
|
149
141
|
raise FileNotFoundError(f"JSON file not found: {path_obj}")
|
|
150
|
-
|
|
142
|
+
|
|
151
143
|
# Load JSON data
|
|
152
|
-
with open(path_obj,
|
|
144
|
+
with open(path_obj, "r", encoding="utf-8") as f:
|
|
153
145
|
data = json.load(f)
|
|
154
|
-
|
|
146
|
+
|
|
155
147
|
# Validate that it's the correct class
|
|
156
|
-
if data.get(
|
|
148
|
+
if data.get("class_name") != cls.__name__:
|
|
157
149
|
logger.warning(f"Class name mismatch: expected {cls.__name__}, got {data.get('class_name')}")
|
|
158
|
-
|
|
150
|
+
|
|
159
151
|
# Create new instance
|
|
160
152
|
# Extract session name prefix by removing the suffix
|
|
161
|
-
session_name = data[
|
|
162
|
-
if
|
|
163
|
-
session_name_prefix =
|
|
153
|
+
session_name = data["session_name"]
|
|
154
|
+
if "_" in session_name:
|
|
155
|
+
session_name_prefix = "_".join(session_name.split("_")[:-1])
|
|
164
156
|
else:
|
|
165
157
|
session_name_prefix = session_name
|
|
166
|
-
|
|
167
|
-
instance = cls(remote_name=data[
|
|
168
|
-
|
|
158
|
+
|
|
159
|
+
instance = cls(remote_name=data["remote_name"], session_name_prefix=session_name_prefix)
|
|
160
|
+
|
|
169
161
|
# Restore state
|
|
170
|
-
instance.session_name = data[
|
|
171
|
-
instance.tab_config = data[
|
|
172
|
-
instance.script_path = data[
|
|
173
|
-
|
|
162
|
+
instance.session_name = data["session_name"]
|
|
163
|
+
instance.tab_config = data["tab_config"]
|
|
164
|
+
instance.script_path = data["script_path"]
|
|
165
|
+
|
|
174
166
|
logger.info(f"โ
Loaded WTRemoteLayoutGenerator from: {file_path}")
|
|
175
167
|
return instance
|
|
176
168
|
|
|
@@ -180,10 +172,10 @@ class WTRemoteLayoutGenerator:
|
|
|
180
172
|
dir_path = Path.home() / "tmp_results" / "wt_sessions" / "serialized"
|
|
181
173
|
else:
|
|
182
174
|
dir_path = Path(directory_path)
|
|
183
|
-
|
|
175
|
+
|
|
184
176
|
if not dir_path.exists():
|
|
185
177
|
return []
|
|
186
|
-
|
|
178
|
+
|
|
187
179
|
json_files = [f.name for f in dir_path.glob("*.json")]
|
|
188
180
|
return sorted(json_files)
|
|
189
181
|
|
|
@@ -220,69 +212,70 @@ if __name__ == "__main__":
|
|
|
220
212
|
# Example usage
|
|
221
213
|
sample_tabs = {
|
|
222
214
|
"๐คBot1": ("~/code/bytesense/bithence", "python bot1.py --create_new_bot True"),
|
|
223
|
-
"๐คBot2": ("~/code/bytesense/bithence", "python bot2.py --create_new_bot True"),
|
|
215
|
+
"๐คBot2": ("~/code/bytesense/bithence", "python bot2.py --create_new_bot True"),
|
|
224
216
|
"๐Monitor": ("~", "Get-Process | Sort-Object CPU -Descending | Select-Object -First 10"),
|
|
225
|
-
"๐Logs": ("C:/logs", "Get-Content app.log -Wait")
|
|
217
|
+
"๐Logs": ("C:/logs", "Get-Content app.log -Wait"),
|
|
226
218
|
}
|
|
227
|
-
|
|
219
|
+
|
|
228
220
|
# Replace 'myserver' with an actual SSH config alias for a Windows machine
|
|
229
221
|
remote_name = "myserver" # This should be in ~/.ssh/config
|
|
230
222
|
session_name = "test_remote_session"
|
|
231
|
-
|
|
223
|
+
|
|
232
224
|
try:
|
|
233
225
|
# Create layout using the remote generator
|
|
234
226
|
generator = WTRemoteLayoutGenerator(remote_name=remote_name, session_name_prefix=session_name)
|
|
235
227
|
script_path = generator.create_wt_layout(sample_tabs)
|
|
236
228
|
print(f"โ
Remote layout created successfully: {script_path}")
|
|
237
|
-
|
|
229
|
+
|
|
238
230
|
# Check if Windows Terminal is available on remote
|
|
239
231
|
wt_available = generator.check_wt_available()
|
|
240
232
|
print(f"๐ฅ๏ธ Windows Terminal available on {remote_name}: {'โ
' if wt_available else 'โ'}")
|
|
241
|
-
|
|
233
|
+
|
|
242
234
|
# Get remote Windows info
|
|
243
235
|
windows_info = generator.get_remote_windows_info()
|
|
244
236
|
if windows_info.get("wt_available"):
|
|
245
237
|
print(f"๐ฆ Remote system info: {windows_info.get('windows_info', 'Unknown')}")
|
|
246
|
-
|
|
238
|
+
|
|
247
239
|
# Demonstrate serialization
|
|
248
240
|
print("\n๐พ Demonstrating serialization...")
|
|
249
241
|
saved_path = generator.to_json()
|
|
250
242
|
print(f"โ
Session saved to: {saved_path}")
|
|
251
|
-
|
|
243
|
+
|
|
252
244
|
# List all saved sessions
|
|
253
245
|
saved_sessions = WTRemoteLayoutGenerator.list_saved_sessions()
|
|
254
246
|
print(f"๐ Available saved sessions: {saved_sessions}")
|
|
255
|
-
|
|
247
|
+
|
|
256
248
|
# Demonstrate loading (using the full path)
|
|
257
249
|
loaded_generator = WTRemoteLayoutGenerator.from_json(saved_path)
|
|
258
250
|
print(f"โ
Session loaded successfully: {loaded_generator.session_name}")
|
|
259
251
|
print(f"๐ Loaded tabs: {list(loaded_generator.tab_config.keys())}")
|
|
260
|
-
|
|
252
|
+
|
|
261
253
|
# Show command preview
|
|
262
254
|
preview = generator.get_layout_preview(sample_tabs)
|
|
263
255
|
print(f"\n๐ Command Preview:\n{preview}")
|
|
264
|
-
|
|
256
|
+
|
|
265
257
|
# Demonstrate status checking
|
|
266
258
|
print(f"\n๐ Checking command status on remote '{remote_name}':")
|
|
267
259
|
generator.print_status_report()
|
|
268
|
-
|
|
260
|
+
|
|
269
261
|
# Show Windows Terminal overview
|
|
270
|
-
print(
|
|
262
|
+
print("\n๐ฅ๏ธ Windows Terminal Overview:")
|
|
271
263
|
generator.print_windows_terminal_overview()
|
|
272
|
-
|
|
264
|
+
|
|
273
265
|
# Start the session (uncomment to actually start)
|
|
274
266
|
# start_result = generator.start_wt_session()
|
|
275
267
|
# print(f"Session start result: {start_result}")
|
|
276
|
-
|
|
268
|
+
|
|
277
269
|
# Attach to session (uncomment to attach)
|
|
278
270
|
# generator.attach_to_session()
|
|
279
|
-
|
|
280
|
-
print(
|
|
281
|
-
print(
|
|
282
|
-
print(
|
|
283
|
-
print(
|
|
284
|
-
|
|
271
|
+
|
|
272
|
+
print("\nโถ๏ธ To start this session, run:")
|
|
273
|
+
print(" generator.start_wt_session()")
|
|
274
|
+
print("\n๐ To attach to this session, run:")
|
|
275
|
+
print(" generator.attach_to_session()")
|
|
276
|
+
|
|
285
277
|
except Exception as e:
|
|
286
278
|
print(f"โ Error: {e}")
|
|
287
279
|
import traceback
|
|
288
|
-
|
|
280
|
+
|
|
281
|
+
traceback.print_exc()
|