machineconfig 1.95__py3-none-any.whl → 1.97__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 (504) hide show
  1. machineconfig/cluster/cloud_manager.py +445 -343
  2. machineconfig/cluster/data_transfer.py +63 -57
  3. machineconfig/cluster/distribute.py +284 -280
  4. machineconfig/cluster/file_manager.py +234 -237
  5. machineconfig/cluster/job_params.py +133 -133
  6. machineconfig/cluster/loader_runner.py +183 -149
  7. machineconfig/cluster/remote_machine.py +269 -252
  8. machineconfig/cluster/script_execution.py +215 -209
  9. machineconfig/cluster/script_notify_upon_completion.py +50 -43
  10. machineconfig/cluster/self_ssh.py +52 -54
  11. machineconfig/cluster/sessions_managers/__init__.py +0 -0
  12. machineconfig/cluster/sessions_managers/archive/__init__.py +0 -0
  13. machineconfig/{jobs/python → cluster/sessions_managers/archive}/create_zellij_template.py +5 -3
  14. machineconfig/cluster/sessions_managers/archive/session_managers.py +184 -0
  15. machineconfig/cluster/sessions_managers/demo_rich_zellij.py +0 -0
  16. machineconfig/cluster/sessions_managers/enhanced_command_runner.py +160 -0
  17. machineconfig/cluster/sessions_managers/wt_local.py +494 -0
  18. machineconfig/cluster/sessions_managers/wt_local_manager.py +577 -0
  19. machineconfig/cluster/sessions_managers/wt_remote.py +288 -0
  20. machineconfig/cluster/sessions_managers/wt_remote_manager.py +483 -0
  21. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +196 -0
  22. machineconfig/cluster/sessions_managers/wt_utils/process_monitor.py +418 -0
  23. machineconfig/cluster/sessions_managers/wt_utils/remote_executor.py +175 -0
  24. machineconfig/cluster/sessions_managers/wt_utils/session_manager.py +300 -0
  25. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +228 -0
  26. machineconfig/cluster/sessions_managers/zellij_local.py +418 -0
  27. machineconfig/cluster/sessions_managers/zellij_local_manager.py +533 -0
  28. machineconfig/cluster/sessions_managers/zellij_remote.py +229 -0
  29. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +188 -0
  30. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +64 -0
  31. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +126 -0
  32. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +334 -0
  33. machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py +68 -0
  34. machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py +119 -0
  35. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +85 -0
  36. machineconfig/cluster/templates/cli_click.py +0 -1
  37. machineconfig/cluster/templates/cli_gooey.py +102 -104
  38. machineconfig/cluster/templates/run_cloud.py +51 -51
  39. machineconfig/cluster/templates/run_cluster.py +103 -59
  40. machineconfig/cluster/templates/run_remote.py +57 -58
  41. machineconfig/cluster/templates/utils.py +69 -36
  42. machineconfig/jobs/__pycache__/__init__.cpython-311.pyc +0 -0
  43. machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
  44. machineconfig/jobs/python/check_installations.py +258 -190
  45. machineconfig/jobs/python/create_bootable_media.py +7 -3
  46. machineconfig/jobs/python/python_cargo_build_share.py +50 -50
  47. machineconfig/jobs/python/python_ve_symlink.py +6 -6
  48. machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
  49. machineconfig/jobs/python/vscode/api.py +1 -1
  50. machineconfig/jobs/python/vscode/link_ve.py +2 -2
  51. machineconfig/jobs/python/vscode/select_interpreter.py +9 -5
  52. machineconfig/jobs/python/vscode/sync_code.py +8 -5
  53. machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  54. machineconfig/jobs/python_custom_installers/archive/ngrok.py +1 -1
  55. machineconfig/jobs/python_custom_installers/dev/alacritty.py +3 -2
  56. machineconfig/jobs/python_custom_installers/dev/brave.py +7 -3
  57. machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +3 -4
  58. machineconfig/jobs/python_custom_installers/dev/code.py +3 -1
  59. machineconfig/jobs/python_custom_installers/dev/cursor.py +66 -5
  60. machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -1
  61. machineconfig/jobs/python_custom_installers/dev/espanso.py +13 -9
  62. machineconfig/jobs/python_custom_installers/dev/goes.py +2 -8
  63. machineconfig/jobs/python_custom_installers/dev/lvim.py +3 -2
  64. machineconfig/jobs/python_custom_installers/dev/nerdfont.py +1 -1
  65. machineconfig/jobs/python_custom_installers/dev/redis.py +7 -3
  66. machineconfig/jobs/python_custom_installers/dev/wezterm.py +8 -4
  67. machineconfig/jobs/python_custom_installers/dev/winget.py +194 -0
  68. machineconfig/jobs/python_custom_installers/{dev/docker.py → docker.py} +8 -3
  69. machineconfig/jobs/python_custom_installers/gh.py +4 -3
  70. machineconfig/jobs/python_custom_installers/hx.py +9 -8
  71. machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +97 -30
  72. machineconfig/jobs/python_custom_installers/{dev/warp-cli.py → warp-cli.py} +1 -1
  73. machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  74. machineconfig/jobs/python_generic_installers/config.json +133 -9
  75. machineconfig/jobs/python_generic_installers/dev/config.json +208 -37
  76. machineconfig/jobs/python_generic_installers/update.py +3 -0
  77. machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  78. machineconfig/jobs/python_linux_installers/config.json +42 -6
  79. machineconfig/jobs/python_linux_installers/dev/config.json +79 -11
  80. machineconfig/jobs/python_windows_installers/config.json +6 -0
  81. machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
  82. machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
  83. machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
  84. machineconfig/profile/create.py +5 -5
  85. machineconfig/profile/create_hardlinks.py +5 -5
  86. machineconfig/profile/shell.py +44 -17
  87. machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  88. machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
  89. machineconfig/scripts/linux/fire_agents +27 -0
  90. machineconfig/scripts/linux/mcinit +27 -0
  91. machineconfig/scripts/linux/wifi_conn +24 -0
  92. machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
  93. machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
  94. machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
  95. machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
  96. machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
  97. machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
  98. machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
  99. machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
  100. machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
  101. machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
  102. machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
  103. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
  104. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
  105. machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
  106. machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
  107. machineconfig/scripts/python/ai/__pycache__/init.cpython-311.pyc +0 -0
  108. machineconfig/scripts/python/ai/init.py +56 -0
  109. machineconfig/scripts/python/ai/rules/python/dev.md +31 -0
  110. machineconfig/scripts/python/archive/im2text.py +1 -3
  111. machineconfig/scripts/python/choose_wezterm_theme.py +3 -3
  112. machineconfig/scripts/python/cloud_copy.py +10 -10
  113. machineconfig/scripts/python/cloud_manager.py +77 -99
  114. machineconfig/scripts/python/cloud_mount.py +13 -12
  115. machineconfig/scripts/python/cloud_repo_sync.py +14 -11
  116. machineconfig/scripts/python/croshell.py +24 -21
  117. machineconfig/scripts/python/devops.py +12 -17
  118. machineconfig/scripts/python/devops_add_identity.py +32 -10
  119. machineconfig/scripts/python/devops_add_ssh_key.py +10 -10
  120. machineconfig/scripts/python/devops_backup_retrieve.py +9 -8
  121. machineconfig/scripts/python/devops_devapps_install.py +6 -6
  122. machineconfig/scripts/python/devops_update_repos.py +4 -3
  123. machineconfig/scripts/python/dotfile.py +10 -7
  124. machineconfig/scripts/python/fire_agents.py +69 -0
  125. machineconfig/scripts/python/fire_jobs.py +62 -65
  126. machineconfig/scripts/python/ftpx.py +8 -8
  127. machineconfig/scripts/python/get_zellij_cmd.py +3 -3
  128. machineconfig/scripts/python/gh_models.py +6 -4
  129. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
  130. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
  131. machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
  132. machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
  133. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
  134. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
  135. machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
  136. machineconfig/scripts/python/helpers/cloud_helpers.py +12 -12
  137. machineconfig/scripts/python/helpers/helpers2.py +9 -8
  138. machineconfig/scripts/python/helpers/helpers4.py +23 -35
  139. machineconfig/scripts/python/helpers/repo_sync_helpers.py +17 -16
  140. machineconfig/scripts/python/mount_nfs.py +8 -11
  141. machineconfig/scripts/python/mount_nw_drive.py +4 -4
  142. machineconfig/scripts/python/mount_ssh.py +2 -2
  143. machineconfig/scripts/python/onetimeshare.py +56 -57
  144. machineconfig/scripts/python/pomodoro.py +55 -55
  145. machineconfig/scripts/python/repos.py +26 -18
  146. machineconfig/scripts/python/scheduler.py +70 -53
  147. machineconfig/scripts/python/snapshot.py +21 -24
  148. machineconfig/scripts/python/start_slidev.py +6 -5
  149. machineconfig/scripts/python/start_terminals.py +3 -1
  150. machineconfig/scripts/python/viewer.py +5 -4
  151. machineconfig/scripts/python/viewer_template.py +138 -140
  152. machineconfig/scripts/python/wifi_conn.py +412 -60
  153. machineconfig/scripts/python/wsl_windows_transfer.py +18 -3
  154. machineconfig/scripts/windows/mcinit.ps1 +4 -0
  155. machineconfig/settings/linters/.pylintrc +6 -7
  156. machineconfig/settings/lvim/windows/config.lua +0 -0
  157. machineconfig/settings/shells/bash/init.sh +6 -0
  158. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +7 -6
  159. machineconfig/settings/shells/pwsh/init.ps1 +6 -6
  160. machineconfig/settings/shells/wt/settings.json +51 -266
  161. machineconfig/setup_linux/web_shortcuts/interactive.sh +5 -2
  162. machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +3 -6
  163. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +11 -9
  164. machineconfig/utils/ai/url2md.py +2 -2
  165. machineconfig/utils/cloud/onedrive/setup_oauth.py +59 -0
  166. machineconfig/utils/cloud/onedrive/transaction.py +796 -0
  167. machineconfig/utils/code.py +22 -13
  168. machineconfig/utils/installer.py +78 -35
  169. machineconfig/utils/installer_utils/installer_abc.py +7 -6
  170. machineconfig/utils/installer_utils/installer_class.py +44 -25
  171. machineconfig/utils/io_save.py +107 -0
  172. machineconfig/utils/links.py +19 -15
  173. machineconfig/utils/options.py +4 -8
  174. machineconfig/utils/path.py +91 -78
  175. machineconfig/utils/path_reduced.py +608 -0
  176. machineconfig/utils/procs.py +110 -45
  177. machineconfig/utils/scheduling.py +312 -222
  178. machineconfig/utils/utils.py +7 -7
  179. machineconfig/utils/utils2.py +42 -0
  180. machineconfig/utils/utils5.py +84 -0
  181. machineconfig/utils/ve.py +49 -87
  182. {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/METADATA +2 -2
  183. machineconfig-1.97.dist-info/RECORD +442 -0
  184. machineconfig/cluster/session_managers.py +0 -183
  185. machineconfig/cluster/templates/f.py +0 -4
  186. machineconfig/jobs/python/__pycache__/check_installations.cpython-311.pyc +0 -0
  187. machineconfig/jobs/python/__pycache__/checkout_version.cpython-311.pyc +0 -0
  188. machineconfig/jobs/python/__pycache__/python_ve_symlink.cpython-311.pyc +0 -0
  189. machineconfig/jobs/python/checkout_version.py +0 -123
  190. machineconfig/jobs/python/vscode/__pycache__/api.cpython-311.pyc +0 -0
  191. machineconfig/jobs/python/vscode/__pycache__/link_ve.cpython-311.pyc +0 -0
  192. machineconfig/jobs/python_custom_installers/__pycache__/hx.cpython-311.pyc +0 -0
  193. machineconfig/jobs/python_windows_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  194. machineconfig/scripts/python/.mypy_cache/.gitignore +0 -2
  195. machineconfig/scripts/python/.mypy_cache/3.11/@plugins_snapshot.json +0 -1
  196. machineconfig/scripts/python/.mypy_cache/3.11/__future__.data.json +0 -1
  197. machineconfig/scripts/python/.mypy_cache/3.11/__future__.meta.json +0 -1
  198. machineconfig/scripts/python/.mypy_cache/3.11/_ast.data.json +0 -1
  199. machineconfig/scripts/python/.mypy_cache/3.11/_ast.meta.json +0 -1
  200. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.data.json +0 -1
  201. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.meta.json +0 -1
  202. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.data.json +0 -1
  203. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.meta.json +0 -1
  204. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.data.json +0 -1
  205. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.meta.json +0 -1
  206. machineconfig/scripts/python/.mypy_cache/3.11/_compression.data.json +0 -1
  207. machineconfig/scripts/python/.mypy_cache/3.11/_compression.meta.json +0 -1
  208. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.data.json +0 -1
  209. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.meta.json +0 -1
  210. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.data.json +0 -1
  211. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.meta.json +0 -1
  212. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.data.json +0 -1
  213. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.meta.json +0 -1
  214. machineconfig/scripts/python/.mypy_cache/3.11/_io.data.json +0 -1
  215. machineconfig/scripts/python/.mypy_cache/3.11/_io.meta.json +0 -1
  216. machineconfig/scripts/python/.mypy_cache/3.11/_locale.data.json +0 -1
  217. machineconfig/scripts/python/.mypy_cache/3.11/_locale.meta.json +0 -1
  218. machineconfig/scripts/python/.mypy_cache/3.11/_stat.data.json +0 -1
  219. machineconfig/scripts/python/.mypy_cache/3.11/_stat.meta.json +0 -1
  220. machineconfig/scripts/python/.mypy_cache/3.11/_struct.data.json +0 -1
  221. machineconfig/scripts/python/.mypy_cache/3.11/_struct.meta.json +0 -1
  222. machineconfig/scripts/python/.mypy_cache/3.11/_thread.data.json +0 -1
  223. machineconfig/scripts/python/.mypy_cache/3.11/_thread.meta.json +0 -1
  224. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.data.json +0 -1
  225. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.meta.json +0 -1
  226. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.data.json +0 -1
  227. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.meta.json +0 -1
  228. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.data.json +0 -1
  229. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.meta.json +0 -1
  230. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.data.json +0 -1
  231. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.meta.json +0 -1
  232. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.data.json +0 -1
  233. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.meta.json +0 -1
  234. machineconfig/scripts/python/.mypy_cache/3.11/abc.data.json +0 -1
  235. machineconfig/scripts/python/.mypy_cache/3.11/abc.meta.json +0 -1
  236. machineconfig/scripts/python/.mypy_cache/3.11/argparse.data.json +0 -1
  237. machineconfig/scripts/python/.mypy_cache/3.11/argparse.meta.json +0 -1
  238. machineconfig/scripts/python/.mypy_cache/3.11/ast.data.json +0 -1
  239. machineconfig/scripts/python/.mypy_cache/3.11/ast.meta.json +0 -1
  240. machineconfig/scripts/python/.mypy_cache/3.11/binascii.data.json +0 -1
  241. machineconfig/scripts/python/.mypy_cache/3.11/binascii.meta.json +0 -1
  242. machineconfig/scripts/python/.mypy_cache/3.11/builtins.data.json +0 -1
  243. machineconfig/scripts/python/.mypy_cache/3.11/builtins.meta.json +0 -1
  244. machineconfig/scripts/python/.mypy_cache/3.11/bz2.data.json +0 -1
  245. machineconfig/scripts/python/.mypy_cache/3.11/bz2.meta.json +0 -1
  246. machineconfig/scripts/python/.mypy_cache/3.11/calendar.data.json +0 -1
  247. machineconfig/scripts/python/.mypy_cache/3.11/calendar.meta.json +0 -1
  248. machineconfig/scripts/python/.mypy_cache/3.11/codecs.data.json +0 -1
  249. machineconfig/scripts/python/.mypy_cache/3.11/codecs.meta.json +0 -1
  250. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.data.json +0 -1
  251. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.meta.json +0 -1
  252. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.data.json +0 -1
  253. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.meta.json +0 -1
  254. machineconfig/scripts/python/.mypy_cache/3.11/configparser.data.json +0 -1
  255. machineconfig/scripts/python/.mypy_cache/3.11/configparser.meta.json +0 -1
  256. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.data.json +0 -1
  257. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.meta.json +0 -1
  258. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.data.json +0 -1
  259. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.meta.json +0 -1
  260. machineconfig/scripts/python/.mypy_cache/3.11/datetime.data.json +0 -1
  261. machineconfig/scripts/python/.mypy_cache/3.11/datetime.meta.json +0 -1
  262. machineconfig/scripts/python/.mypy_cache/3.11/decimal.data.json +0 -1
  263. machineconfig/scripts/python/.mypy_cache/3.11/decimal.meta.json +0 -1
  264. machineconfig/scripts/python/.mypy_cache/3.11/dis.data.json +0 -1
  265. machineconfig/scripts/python/.mypy_cache/3.11/dis.meta.json +0 -1
  266. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.data.json +0 -1
  267. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.meta.json +0 -1
  268. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.data.json +0 -1
  269. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.meta.json +0 -1
  270. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.data.json +0 -1
  271. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.meta.json +0 -1
  272. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.data.json +0 -1
  273. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.meta.json +0 -1
  274. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.data.json +0 -1
  275. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.meta.json +0 -1
  276. machineconfig/scripts/python/.mypy_cache/3.11/email/header.data.json +0 -1
  277. machineconfig/scripts/python/.mypy_cache/3.11/email/header.meta.json +0 -1
  278. machineconfig/scripts/python/.mypy_cache/3.11/email/message.data.json +0 -1
  279. machineconfig/scripts/python/.mypy_cache/3.11/email/message.meta.json +0 -1
  280. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.data.json +0 -1
  281. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.meta.json +0 -1
  282. machineconfig/scripts/python/.mypy_cache/3.11/enum.data.json +0 -1
  283. machineconfig/scripts/python/.mypy_cache/3.11/enum.meta.json +0 -1
  284. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.data.json +0 -1
  285. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.meta.json +0 -1
  286. machineconfig/scripts/python/.mypy_cache/3.11/functools.data.json +0 -1
  287. machineconfig/scripts/python/.mypy_cache/3.11/functools.meta.json +0 -1
  288. machineconfig/scripts/python/.mypy_cache/3.11/gc.data.json +0 -1
  289. machineconfig/scripts/python/.mypy_cache/3.11/gc.meta.json +0 -1
  290. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.data.json +0 -1
  291. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.meta.json +0 -1
  292. machineconfig/scripts/python/.mypy_cache/3.11/getpass.data.json +0 -1
  293. machineconfig/scripts/python/.mypy_cache/3.11/getpass.meta.json +0 -1
  294. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.data.json +0 -1
  295. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.meta.json +0 -1
  296. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.data.json +0 -1
  297. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.meta.json +0 -1
  298. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.data.json +0 -1
  299. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.meta.json +0 -1
  300. machineconfig/scripts/python/.mypy_cache/3.11/git/config.data.json +0 -1
  301. machineconfig/scripts/python/.mypy_cache/3.11/git/config.meta.json +0 -1
  302. machineconfig/scripts/python/.mypy_cache/3.11/git/db.data.json +0 -1
  303. machineconfig/scripts/python/.mypy_cache/3.11/git/db.meta.json +0 -1
  304. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.data.json +0 -1
  305. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.meta.json +0 -1
  306. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.data.json +0 -1
  307. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.meta.json +0 -1
  308. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.data.json +0 -1
  309. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.meta.json +0 -1
  310. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.data.json +0 -1
  311. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.meta.json +0 -1
  312. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.data.json +0 -1
  313. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.meta.json +0 -1
  314. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.data.json +0 -1
  315. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.meta.json +0 -1
  316. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.data.json +0 -1
  317. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.meta.json +0 -1
  318. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.data.json +0 -1
  319. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.meta.json +0 -1
  320. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.data.json +0 -1
  321. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.meta.json +0 -1
  322. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.data.json +0 -1
  323. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.meta.json +0 -1
  324. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.data.json +0 -1
  325. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.meta.json +0 -1
  326. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.data.json +0 -1
  327. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.meta.json +0 -1
  328. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.data.json +0 -1
  329. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.meta.json +0 -1
  330. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.data.json +0 -1
  331. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.meta.json +0 -1
  332. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.data.json +0 -1
  333. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.meta.json +0 -1
  334. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.data.json +0 -1
  335. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.meta.json +0 -1
  336. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.data.json +0 -1
  337. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.meta.json +0 -1
  338. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.data.json +0 -1
  339. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.meta.json +0 -1
  340. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.data.json +0 -1
  341. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.meta.json +0 -1
  342. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.data.json +0 -1
  343. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.meta.json +0 -1
  344. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.data.json +0 -1
  345. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.meta.json +0 -1
  346. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.data.json +0 -1
  347. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.meta.json +0 -1
  348. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.data.json +0 -1
  349. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.meta.json +0 -1
  350. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.data.json +0 -1
  351. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.meta.json +0 -1
  352. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.data.json +0 -1
  353. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.meta.json +0 -1
  354. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.data.json +0 -1
  355. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.meta.json +0 -1
  356. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.data.json +0 -1
  357. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.meta.json +0 -1
  358. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.data.json +0 -1
  359. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.meta.json +0 -1
  360. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.data.json +0 -1
  361. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.meta.json +0 -1
  362. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.data.json +0 -1
  363. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.meta.json +0 -1
  364. machineconfig/scripts/python/.mypy_cache/3.11/git/types.data.json +0 -1
  365. machineconfig/scripts/python/.mypy_cache/3.11/git/types.meta.json +0 -1
  366. machineconfig/scripts/python/.mypy_cache/3.11/git/util.data.json +0 -1
  367. machineconfig/scripts/python/.mypy_cache/3.11/git/util.meta.json +0 -1
  368. machineconfig/scripts/python/.mypy_cache/3.11/glob.data.json +0 -1
  369. machineconfig/scripts/python/.mypy_cache/3.11/glob.meta.json +0 -1
  370. machineconfig/scripts/python/.mypy_cache/3.11/gzip.data.json +0 -1
  371. machineconfig/scripts/python/.mypy_cache/3.11/gzip.meta.json +0 -1
  372. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.data.json +0 -1
  373. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.meta.json +0 -1
  374. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.data.json +0 -1
  375. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.meta.json +0 -1
  376. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.data.json +0 -1
  377. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.meta.json +0 -1
  378. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.data.json +0 -1
  379. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.meta.json +0 -1
  380. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.data.json +0 -1
  381. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.meta.json +0 -1
  382. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.data.json +0 -1
  383. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.meta.json +0 -1
  384. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.data.json +0 -1
  385. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.meta.json +0 -1
  386. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.data.json +0 -1
  387. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.meta.json +0 -1
  388. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.data.json +0 -1
  389. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.meta.json +0 -1
  390. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.data.json +0 -1
  391. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.meta.json +0 -1
  392. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.data.json +0 -1
  393. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.meta.json +0 -1
  394. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.data.json +0 -1
  395. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.meta.json +0 -1
  396. machineconfig/scripts/python/.mypy_cache/3.11/inspect.data.json +0 -1
  397. machineconfig/scripts/python/.mypy_cache/3.11/inspect.meta.json +0 -1
  398. machineconfig/scripts/python/.mypy_cache/3.11/io.data.json +0 -1
  399. machineconfig/scripts/python/.mypy_cache/3.11/io.meta.json +0 -1
  400. machineconfig/scripts/python/.mypy_cache/3.11/itertools.data.json +0 -1
  401. machineconfig/scripts/python/.mypy_cache/3.11/itertools.meta.json +0 -1
  402. machineconfig/scripts/python/.mypy_cache/3.11/locale.data.json +0 -1
  403. machineconfig/scripts/python/.mypy_cache/3.11/locale.meta.json +0 -1
  404. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.data.json +0 -1
  405. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.meta.json +0 -1
  406. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.data.json +0 -1
  407. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.meta.json +0 -1
  408. machineconfig/scripts/python/.mypy_cache/3.11/mmap.data.json +0 -1
  409. machineconfig/scripts/python/.mypy_cache/3.11/mmap.meta.json +0 -1
  410. machineconfig/scripts/python/.mypy_cache/3.11/numbers.data.json +0 -1
  411. machineconfig/scripts/python/.mypy_cache/3.11/numbers.meta.json +0 -1
  412. machineconfig/scripts/python/.mypy_cache/3.11/opcode.data.json +0 -1
  413. machineconfig/scripts/python/.mypy_cache/3.11/opcode.meta.json +0 -1
  414. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.data.json +0 -1
  415. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.meta.json +0 -1
  416. machineconfig/scripts/python/.mypy_cache/3.11/os/path.data.json +0 -1
  417. machineconfig/scripts/python/.mypy_cache/3.11/os/path.meta.json +0 -1
  418. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.data.json +0 -1
  419. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.meta.json +0 -1
  420. machineconfig/scripts/python/.mypy_cache/3.11/platform.data.json +0 -1
  421. machineconfig/scripts/python/.mypy_cache/3.11/platform.meta.json +0 -1
  422. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.data.json +0 -1
  423. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.meta.json +0 -1
  424. machineconfig/scripts/python/.mypy_cache/3.11/re.data.json +0 -1
  425. machineconfig/scripts/python/.mypy_cache/3.11/re.meta.json +0 -1
  426. machineconfig/scripts/python/.mypy_cache/3.11/resource.data.json +0 -1
  427. machineconfig/scripts/python/.mypy_cache/3.11/resource.meta.json +0 -1
  428. machineconfig/scripts/python/.mypy_cache/3.11/shlex.data.json +0 -1
  429. machineconfig/scripts/python/.mypy_cache/3.11/shlex.meta.json +0 -1
  430. machineconfig/scripts/python/.mypy_cache/3.11/shutil.data.json +0 -1
  431. machineconfig/scripts/python/.mypy_cache/3.11/shutil.meta.json +0 -1
  432. machineconfig/scripts/python/.mypy_cache/3.11/signal.data.json +0 -1
  433. machineconfig/scripts/python/.mypy_cache/3.11/signal.meta.json +0 -1
  434. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.data.json +0 -1
  435. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.meta.json +0 -1
  436. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.data.json +0 -1
  437. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.meta.json +0 -1
  438. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.data.json +0 -1
  439. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.meta.json +0 -1
  440. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.data.json +0 -1
  441. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.meta.json +0 -1
  442. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.data.json +0 -1
  443. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.meta.json +0 -1
  444. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.data.json +0 -1
  445. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.meta.json +0 -1
  446. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.data.json +0 -1
  447. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.meta.json +0 -1
  448. machineconfig/scripts/python/.mypy_cache/3.11/stat.data.json +0 -1
  449. machineconfig/scripts/python/.mypy_cache/3.11/stat.meta.json +0 -1
  450. machineconfig/scripts/python/.mypy_cache/3.11/string.data.json +0 -1
  451. machineconfig/scripts/python/.mypy_cache/3.11/string.meta.json +0 -1
  452. machineconfig/scripts/python/.mypy_cache/3.11/struct.data.json +0 -1
  453. machineconfig/scripts/python/.mypy_cache/3.11/struct.meta.json +0 -1
  454. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.data.json +0 -1
  455. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.meta.json +0 -1
  456. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.data.json +0 -1
  457. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.meta.json +0 -1
  458. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.data.json +0 -1
  459. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.meta.json +0 -1
  460. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.data.json +0 -1
  461. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.meta.json +0 -1
  462. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.data.json +0 -1
  463. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.meta.json +0 -1
  464. machineconfig/scripts/python/.mypy_cache/3.11/threading.data.json +0 -1
  465. machineconfig/scripts/python/.mypy_cache/3.11/threading.meta.json +0 -1
  466. machineconfig/scripts/python/.mypy_cache/3.11/time.data.json +0 -1
  467. machineconfig/scripts/python/.mypy_cache/3.11/time.meta.json +0 -1
  468. machineconfig/scripts/python/.mypy_cache/3.11/types.data.json +0 -1
  469. machineconfig/scripts/python/.mypy_cache/3.11/types.meta.json +0 -1
  470. machineconfig/scripts/python/.mypy_cache/3.11/typing.data.json +0 -1
  471. machineconfig/scripts/python/.mypy_cache/3.11/typing.meta.json +0 -1
  472. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.data.json +0 -1
  473. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.meta.json +0 -1
  474. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.data.json +0 -1
  475. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.meta.json +0 -1
  476. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.data.json +0 -1
  477. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.meta.json +0 -1
  478. machineconfig/scripts/python/.mypy_cache/3.11/uuid.data.json +0 -1
  479. machineconfig/scripts/python/.mypy_cache/3.11/uuid.meta.json +0 -1
  480. machineconfig/scripts/python/.mypy_cache/3.11/warnings.data.json +0 -1
  481. machineconfig/scripts/python/.mypy_cache/3.11/warnings.meta.json +0 -1
  482. machineconfig/scripts/python/.mypy_cache/3.11/weakref.data.json +0 -1
  483. machineconfig/scripts/python/.mypy_cache/3.11/weakref.meta.json +0 -1
  484. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.data.json +0 -1
  485. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.meta.json +0 -1
  486. machineconfig/scripts/python/.mypy_cache/3.11/zlib.data.json +0 -1
  487. machineconfig/scripts/python/.mypy_cache/3.11/zlib.meta.json +0 -1
  488. machineconfig/scripts/python/.mypy_cache/CACHEDIR.TAG +0 -3
  489. machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-311.pyc +0 -0
  490. machineconfig/scripts/python/__pycache__/gh_models.cpython-311.pyc +0 -0
  491. machineconfig/scripts/python/__pycache__/url2md.cpython-311.pyc +0 -0
  492. machineconfig/scripts/python/__pycache__/viewer.cpython-311.pyc +0 -0
  493. machineconfig/scripts/python/__pycache__/vscode_api.cpython-311.pyc +0 -0
  494. machineconfig/settings/__pycache__/__init__.cpython-311.pyc +0 -0
  495. machineconfig/settings/linters/.ruff_cache/.gitignore +0 -2
  496. machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +0 -1
  497. machineconfig/settings/shells/ipy/profiles/default/__pycache__/__init__.cpython-311.pyc +0 -0
  498. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/__init__.cpython-311.pyc +0 -0
  499. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/playext.cpython-311.pyc +0 -0
  500. machineconfig/utils/ve_utils/ve1.py +0 -111
  501. machineconfig/utils/ve_utils/ve2.py +0 -155
  502. machineconfig-1.95.dist-info/RECORD +0 -712
  503. {machineconfig-1.95.dist-info → machineconfig-1.97.dist-info}/WHEEL +0 -0
  504. {machineconfig-1.95.dist-info → machineconfig-1.97.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()