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.

Files changed (268) hide show
  1. machineconfig/cluster/cloud_manager.py +22 -29
  2. machineconfig/cluster/data_transfer.py +2 -3
  3. machineconfig/cluster/distribute.py +0 -2
  4. machineconfig/cluster/file_manager.py +4 -5
  5. machineconfig/cluster/job_params.py +1 -4
  6. machineconfig/cluster/loader_runner.py +8 -11
  7. machineconfig/cluster/remote_machine.py +4 -5
  8. machineconfig/cluster/script_execution.py +2 -2
  9. machineconfig/cluster/script_notify_upon_completion.py +0 -1
  10. machineconfig/cluster/sessions_managers/archive/create_zellij_template.py +4 -6
  11. machineconfig/cluster/sessions_managers/archive/session_managers.py +0 -1
  12. machineconfig/cluster/sessions_managers/enhanced_command_runner.py +35 -75
  13. machineconfig/cluster/sessions_managers/wt_local.py +113 -185
  14. machineconfig/cluster/sessions_managers/wt_local_manager.py +127 -197
  15. machineconfig/cluster/sessions_managers/wt_remote.py +60 -67
  16. machineconfig/cluster/sessions_managers/wt_remote_manager.py +110 -149
  17. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +61 -64
  18. machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +72 -172
  19. machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +27 -60
  20. machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +58 -137
  21. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +46 -74
  22. machineconfig/cluster/sessions_managers/zellij_local.py +91 -147
  23. machineconfig/cluster/sessions_managers/zellij_local_manager.py +165 -190
  24. machineconfig/cluster/sessions_managers/zellij_remote.py +51 -58
  25. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +40 -46
  26. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +19 -17
  27. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +30 -31
  28. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +64 -134
  29. machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +7 -11
  30. machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +27 -55
  31. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +14 -13
  32. machineconfig/cluster/templates/cli_click.py +0 -1
  33. machineconfig/cluster/templates/cli_gooey.py +0 -2
  34. machineconfig/cluster/templates/cli_trogon.py +0 -1
  35. machineconfig/cluster/templates/run_cloud.py +0 -1
  36. machineconfig/cluster/templates/run_cluster.py +0 -1
  37. machineconfig/cluster/templates/run_remote.py +0 -1
  38. machineconfig/cluster/templates/utils.py +27 -11
  39. machineconfig/jobs/__pycache__/__init__.cpython-313.pyc +0 -0
  40. machineconfig/jobs/linux/msc/cli_agents.sh +16 -0
  41. machineconfig/jobs/python/check_installations.py +9 -9
  42. machineconfig/jobs/python/create_bootable_media.py +0 -2
  43. machineconfig/jobs/python/python_cargo_build_share.py +2 -2
  44. machineconfig/jobs/python/python_ve_symlink.py +9 -11
  45. machineconfig/jobs/python/tasks.py +0 -1
  46. machineconfig/jobs/python/vscode/api.py +5 -5
  47. machineconfig/jobs/python/vscode/link_ve.py +20 -21
  48. machineconfig/jobs/python/vscode/select_interpreter.py +28 -29
  49. machineconfig/jobs/python/vscode/sync_code.py +14 -18
  50. machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-313.pyc +0 -0
  51. machineconfig/jobs/python_custom_installers/archive/ngrok.py +15 -15
  52. machineconfig/jobs/python_custom_installers/dev/aider.py +10 -18
  53. machineconfig/jobs/python_custom_installers/dev/alacritty.py +12 -21
  54. machineconfig/jobs/python_custom_installers/dev/brave.py +13 -22
  55. machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +13 -20
  56. machineconfig/jobs/python_custom_installers/dev/code.py +17 -24
  57. machineconfig/jobs/python_custom_installers/dev/cursor.py +10 -21
  58. machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +12 -11
  59. machineconfig/jobs/python_custom_installers/dev/espanso.py +19 -23
  60. machineconfig/jobs/python_custom_installers/dev/goes.py +9 -16
  61. machineconfig/jobs/python_custom_installers/dev/lvim.py +13 -21
  62. machineconfig/jobs/python_custom_installers/dev/nerdfont.py +15 -22
  63. machineconfig/jobs/python_custom_installers/dev/redis.py +15 -23
  64. machineconfig/jobs/python_custom_installers/dev/wezterm.py +15 -22
  65. machineconfig/jobs/python_custom_installers/dev/winget.py +32 -50
  66. machineconfig/jobs/python_custom_installers/docker.py +15 -24
  67. machineconfig/jobs/python_custom_installers/gh.py +18 -26
  68. machineconfig/jobs/python_custom_installers/hx.py +33 -17
  69. machineconfig/jobs/python_custom_installers/warp-cli.py +15 -23
  70. machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-313.pyc +0 -0
  71. machineconfig/jobs/python_generic_installers/config.json +412 -389
  72. machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-313.pyc +0 -0
  73. machineconfig/jobs/python_windows_installers/dev/config.json +1 -1
  74. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +1 -1
  75. machineconfig/jobs/windows/msc/cli_agents.bat +0 -0
  76. machineconfig/jobs/windows/msc/cli_agents.ps1 +0 -0
  77. machineconfig/jobs/windows/start_terminal.ps1 +1 -1
  78. machineconfig/logger.py +50 -0
  79. machineconfig/profile/create.py +50 -36
  80. machineconfig/profile/create_hardlinks.py +33 -26
  81. machineconfig/profile/shell.py +87 -60
  82. machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
  83. machineconfig/scripts/cloud/init.sh +2 -2
  84. machineconfig/scripts/linux/checkout_versions +1 -1
  85. machineconfig/scripts/linux/choose_wezterm_theme +1 -1
  86. machineconfig/scripts/linux/cloud_copy +1 -1
  87. machineconfig/scripts/linux/cloud_manager +1 -1
  88. machineconfig/scripts/linux/cloud_mount +1 -1
  89. machineconfig/scripts/linux/cloud_repo_sync +1 -1
  90. machineconfig/scripts/linux/cloud_sync +1 -1
  91. machineconfig/scripts/linux/croshell +1 -1
  92. machineconfig/scripts/linux/devops +3 -5
  93. machineconfig/scripts/linux/fire +2 -1
  94. machineconfig/scripts/linux/fire_agents +3 -3
  95. machineconfig/scripts/linux/ftpx +1 -1
  96. machineconfig/scripts/linux/gh_models +1 -1
  97. machineconfig/scripts/linux/kill_process +1 -1
  98. machineconfig/scripts/linux/mcinit +2 -2
  99. machineconfig/scripts/linux/repos +1 -1
  100. machineconfig/scripts/linux/scheduler +1 -1
  101. machineconfig/scripts/linux/start_slidev +1 -1
  102. machineconfig/scripts/linux/start_terminals +1 -1
  103. machineconfig/scripts/linux/url2md +1 -1
  104. machineconfig/scripts/linux/warp-cli.sh +122 -0
  105. machineconfig/scripts/linux/wifi_conn +1 -1
  106. machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
  107. machineconfig/scripts/python/__pycache__/croshell.cpython-313.pyc +0 -0
  108. machineconfig/scripts/python/__pycache__/devops.cpython-313.pyc +0 -0
  109. machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-313.pyc +0 -0
  110. machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-313.pyc +0 -0
  111. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
  112. machineconfig/scripts/python/ai/__init__.py +0 -0
  113. machineconfig/scripts/python/ai/__pycache__/__init__.cpython-313.pyc +0 -0
  114. machineconfig/scripts/python/ai/__pycache__/generate_files.cpython-313.pyc +0 -0
  115. machineconfig/scripts/python/ai/__pycache__/mcinit.cpython-313.pyc +0 -0
  116. machineconfig/scripts/python/ai/chatmodes/Thinking-Beast-Mode.chatmode.md +337 -0
  117. machineconfig/scripts/python/ai/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md +644 -0
  118. machineconfig/scripts/python/ai/chatmodes/deepResearch.chatmode.md +81 -0
  119. machineconfig/scripts/python/ai/configs/.gemini/settings.json +81 -0
  120. machineconfig/scripts/python/ai/generate_files.py +84 -0
  121. machineconfig/scripts/python/ai/instructions/python/dev.instructions.md +45 -0
  122. machineconfig/scripts/python/ai/mcinit.py +107 -0
  123. machineconfig/scripts/python/ai/prompts/allLintersAndTypeCheckers.prompt.md +5 -0
  124. machineconfig/scripts/python/ai/prompts/research-report-skeleton.prompt.md +38 -0
  125. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +52 -0
  126. machineconfig/scripts/python/archive/tmate_conn.py +5 -5
  127. machineconfig/scripts/python/archive/tmate_start.py +3 -3
  128. machineconfig/scripts/python/choose_wezterm_theme.py +2 -2
  129. machineconfig/scripts/python/cloud_copy.py +20 -19
  130. machineconfig/scripts/python/cloud_mount.py +10 -8
  131. machineconfig/scripts/python/cloud_repo_sync.py +15 -15
  132. machineconfig/scripts/python/cloud_sync.py +1 -1
  133. machineconfig/scripts/python/croshell.py +18 -16
  134. machineconfig/scripts/python/devops.py +6 -6
  135. machineconfig/scripts/python/devops_add_identity.py +9 -7
  136. machineconfig/scripts/python/devops_add_ssh_key.py +19 -19
  137. machineconfig/scripts/python/devops_backup_retrieve.py +14 -14
  138. machineconfig/scripts/python/devops_devapps_install.py +3 -3
  139. machineconfig/scripts/python/devops_update_repos.py +141 -53
  140. machineconfig/scripts/python/dotfile.py +3 -3
  141. machineconfig/scripts/python/fire_agents.py +202 -41
  142. machineconfig/scripts/python/fire_jobs.py +20 -21
  143. machineconfig/scripts/python/ftpx.py +4 -3
  144. machineconfig/scripts/python/gh_models.py +94 -94
  145. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
  146. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
  147. machineconfig/scripts/python/helpers/cloud_helpers.py +3 -3
  148. machineconfig/scripts/python/helpers/helpers2.py +3 -3
  149. machineconfig/scripts/python/helpers/helpers4.py +8 -7
  150. machineconfig/scripts/python/helpers/helpers5.py +7 -7
  151. machineconfig/scripts/python/helpers/repo_sync_helpers.py +2 -2
  152. machineconfig/scripts/python/mount_nfs.py +4 -3
  153. machineconfig/scripts/python/mount_nw_drive.py +4 -4
  154. machineconfig/scripts/python/mount_ssh.py +4 -3
  155. machineconfig/scripts/python/repos.py +9 -9
  156. machineconfig/scripts/python/scheduler.py +1 -1
  157. machineconfig/scripts/python/start_slidev.py +9 -8
  158. machineconfig/scripts/python/start_terminals.py +1 -1
  159. machineconfig/scripts/python/viewer.py +40 -40
  160. machineconfig/scripts/python/wifi_conn.py +65 -66
  161. machineconfig/scripts/python/wsl_windows_transfer.py +2 -2
  162. machineconfig/scripts/windows/checkout_version.ps1 +1 -3
  163. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +1 -3
  164. machineconfig/scripts/windows/cloud_copy.ps1 +2 -6
  165. machineconfig/scripts/windows/cloud_manager.ps1 +1 -1
  166. machineconfig/scripts/windows/cloud_repo_sync.ps1 +1 -2
  167. machineconfig/scripts/windows/cloud_sync.ps1 +2 -2
  168. machineconfig/scripts/windows/croshell.ps1 +2 -2
  169. machineconfig/scripts/windows/devops.ps1 +1 -4
  170. machineconfig/scripts/windows/dotfile.ps1 +1 -3
  171. machineconfig/scripts/windows/fire.ps1 +1 -1
  172. machineconfig/scripts/windows/ftpx.ps1 +2 -2
  173. machineconfig/scripts/windows/gpt.ps1 +1 -1
  174. machineconfig/scripts/windows/kill_process.ps1 +1 -2
  175. machineconfig/scripts/windows/mcinit.ps1 +2 -2
  176. machineconfig/scripts/windows/mount_nfs.ps1 +1 -1
  177. machineconfig/scripts/windows/mount_ssh.ps1 +1 -1
  178. machineconfig/scripts/windows/pomodoro.ps1 +1 -1
  179. machineconfig/scripts/windows/py2exe.ps1 +1 -3
  180. machineconfig/scripts/windows/repos.ps1 +1 -1
  181. machineconfig/scripts/windows/scheduler.ps1 +1 -1
  182. machineconfig/scripts/windows/snapshot.ps1 +2 -2
  183. machineconfig/scripts/windows/start_slidev.ps1 +1 -1
  184. machineconfig/scripts/windows/start_terminals.ps1 +1 -1
  185. machineconfig/scripts/windows/wifi_conn.ps1 +1 -1
  186. machineconfig/scripts/windows/wsl_windows_transfer.ps1 +1 -3
  187. machineconfig/settings/lf/linux/lfrc +1 -1
  188. machineconfig/settings/linters/.ruff.toml +2 -2
  189. machineconfig/settings/linters/.ruff_cache/.gitignore +2 -0
  190. machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +1 -0
  191. machineconfig/settings/lvim/windows/archive/config_additional.lua +1 -1
  192. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +71 -71
  193. machineconfig/settings/shells/wt/settings.json +8 -8
  194. machineconfig/settings/svim/linux/init.toml +1 -1
  195. machineconfig/settings/svim/windows/init.toml +1 -1
  196. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -54
  197. machineconfig/setup_linux/web_shortcuts/interactive.sh +6 -6
  198. machineconfig/setup_linux/web_shortcuts/tmp.sh +2 -0
  199. machineconfig/setup_windows/web_shortcuts/all.ps1 +2 -2
  200. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +1 -1
  201. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +1 -1
  202. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +5 -5
  203. machineconfig/setup_windows/wt_and_pwsh/install_fonts.ps1 +51 -15
  204. machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +75 -18
  205. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +52 -42
  206. machineconfig/utils/ai/browser_user_wrapper.py +5 -5
  207. machineconfig/utils/ai/generate_file_checklist.py +19 -22
  208. machineconfig/utils/ai/url2md.py +5 -3
  209. machineconfig/utils/cloud/onedrive/setup_oauth.py +5 -4
  210. machineconfig/utils/cloud/onedrive/transaction.py +192 -227
  211. machineconfig/utils/code.py +71 -43
  212. machineconfig/utils/installer.py +77 -85
  213. machineconfig/utils/installer_utils/installer_abc.py +29 -17
  214. machineconfig/utils/installer_utils/installer_class.py +188 -83
  215. machineconfig/utils/io_save.py +3 -15
  216. machineconfig/utils/links.py +22 -11
  217. machineconfig/utils/notifications.py +197 -0
  218. machineconfig/utils/options.py +38 -25
  219. machineconfig/utils/path.py +18 -6
  220. machineconfig/utils/path_reduced.py +637 -316
  221. machineconfig/utils/procs.py +69 -63
  222. machineconfig/utils/scheduling.py +11 -13
  223. machineconfig/utils/ssh.py +351 -0
  224. machineconfig/utils/terminal.py +225 -0
  225. machineconfig/utils/utils.py +13 -12
  226. machineconfig/utils/utils2.py +43 -10
  227. machineconfig/utils/utils5.py +242 -46
  228. machineconfig/utils/ve.py +11 -6
  229. {machineconfig-1.97.dist-info โ†’ machineconfig-2.1.dist-info}/METADATA +15 -9
  230. {machineconfig-1.97.dist-info โ†’ machineconfig-2.1.dist-info}/RECORD +232 -235
  231. machineconfig/cluster/self_ssh.py +0 -57
  232. machineconfig/jobs/__pycache__/__init__.cpython-311.pyc +0 -0
  233. machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
  234. machineconfig/jobs/python/archive/python_tools.txt +0 -12
  235. machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
  236. machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  237. machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  238. machineconfig/jobs/python_generic_installers/update.py +0 -3
  239. machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  240. machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
  241. machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
  242. machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
  243. machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  244. machineconfig/scripts/linux/activate_ve +0 -87
  245. machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
  246. machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
  247. machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
  248. machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
  249. machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
  250. machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
  251. machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
  252. machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
  253. machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
  254. machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
  255. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
  256. machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
  257. machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
  258. machineconfig/scripts/python/ai/__pycache__/init.cpython-311.pyc +0 -0
  259. machineconfig/scripts/python/ai/init.py +0 -56
  260. machineconfig/scripts/python/ai/rules/python/dev.md +0 -31
  261. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
  262. machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
  263. machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
  264. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
  265. machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
  266. machineconfig/scripts/windows/activate_ve.ps1 +0 -54
  267. {machineconfig-1.97.dist-info โ†’ machineconfig-2.1.dist-info}/WHEEL +0 -0
  268. {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('.json'):
126
- path_obj = path_obj.with_suffix('.json')
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
- with open(path_obj, 'w', encoding='utf-8') as f:
135
- json.dump(data, f, indent=2, ensure_ascii=False)
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) -> 'WTRemoteLayoutGenerator':
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('.json'):
146
- path_obj = path_obj.with_suffix('.json')
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, 'r', encoding='utf-8') as f:
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('class_name') != cls.__name__:
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['session_name']
162
- if '_' in session_name:
163
- session_name_prefix = '_'.join(session_name.split('_')[:-1])
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['remote_name'], session_name_prefix=session_name_prefix)
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['session_name']
171
- instance.tab_config = data['tab_config']
172
- instance.script_path = data['script_path']
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(f"\n๐Ÿ–ฅ๏ธ Windows Terminal Overview:")
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(f"\nโ–ถ๏ธ To start this session, run:")
281
- print(f" generator.start_wt_session()")
282
- print(f"\n๐Ÿ“Ž To attach to this session, run:")
283
- print(f" generator.attach_to_session()")
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
- traceback.print_exc()
280
+
281
+ traceback.print_exc()