machineconfig 1.94__py3-none-any.whl → 1.96__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of machineconfig might be problematic. Click here for more details.

Files changed (529) hide show
  1. machineconfig/cluster/cloud_manager.py +445 -343
  2. machineconfig/cluster/data_transfer.py +63 -56
  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/linux/msc/lid.sh +2 -4
  44. machineconfig/jobs/linux/msc/network.sh +3 -6
  45. machineconfig/jobs/python/__pycache__/__init__.cpython-311.pyc +0 -0
  46. machineconfig/jobs/python/check_installations.py +258 -190
  47. machineconfig/jobs/python/create_bootable_media.py +7 -3
  48. machineconfig/jobs/python/python_cargo_build_share.py +50 -50
  49. machineconfig/jobs/python/python_ve_symlink.py +10 -10
  50. machineconfig/jobs/python/vscode/__pycache__/select_interpreter.cpython-311.pyc +0 -0
  51. machineconfig/jobs/python/vscode/api.py +3 -3
  52. machineconfig/jobs/python/vscode/link_ve.py +6 -6
  53. machineconfig/jobs/python/vscode/select_interpreter.py +13 -9
  54. machineconfig/jobs/python/vscode/sync_code.py +14 -11
  55. machineconfig/jobs/python_custom_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  56. machineconfig/jobs/python_custom_installers/archive/ngrok.py +5 -5
  57. machineconfig/jobs/python_custom_installers/dev/aider.py +4 -4
  58. machineconfig/jobs/python_custom_installers/dev/alacritty.py +7 -6
  59. machineconfig/jobs/python_custom_installers/dev/brave.py +11 -7
  60. machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +7 -8
  61. machineconfig/jobs/python_custom_installers/dev/code.py +7 -5
  62. machineconfig/jobs/python_custom_installers/dev/cursor.py +66 -5
  63. machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +4 -5
  64. machineconfig/jobs/python_custom_installers/dev/espanso.py +21 -17
  65. machineconfig/jobs/python_custom_installers/dev/goes.py +6 -12
  66. machineconfig/jobs/python_custom_installers/dev/lvim.py +7 -6
  67. machineconfig/jobs/python_custom_installers/dev/nerdfont.py +5 -5
  68. machineconfig/jobs/python_custom_installers/dev/redis.py +11 -7
  69. machineconfig/jobs/python_custom_installers/dev/wezterm.py +12 -8
  70. machineconfig/jobs/python_custom_installers/dev/winget.py +194 -0
  71. machineconfig/jobs/python_custom_installers/{dev/docker.py → docker.py} +12 -7
  72. machineconfig/jobs/python_custom_installers/gh.py +10 -9
  73. machineconfig/jobs/python_custom_installers/hx.py +36 -65
  74. machineconfig/jobs/python_custom_installers/scripts/linux/brave.sh +4 -8
  75. machineconfig/jobs/python_custom_installers/scripts/linux/docker.sh +5 -10
  76. machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +3 -6
  77. machineconfig/jobs/python_custom_installers/scripts/linux/edge.sh +3 -6
  78. machineconfig/jobs/python_custom_installers/scripts/linux/nerdfont.sh +5 -10
  79. machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +4 -8
  80. machineconfig/jobs/python_custom_installers/scripts/linux/redis.sh +5 -10
  81. machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +6 -12
  82. machineconfig/jobs/python_custom_installers/scripts/linux/vscode.sh +101 -33
  83. machineconfig/jobs/python_custom_installers/scripts/linux/warp-cli.sh +5 -10
  84. machineconfig/jobs/python_custom_installers/scripts/linux/wezterm.sh +3 -6
  85. machineconfig/jobs/python_custom_installers/{dev/warp-cli.py → warp-cli.py} +5 -5
  86. machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  87. machineconfig/jobs/python_generic_installers/config.json +133 -9
  88. machineconfig/jobs/python_generic_installers/dev/config.json +208 -37
  89. machineconfig/jobs/python_generic_installers/update.py +3 -0
  90. machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  91. machineconfig/jobs/python_linux_installers/config.json +42 -6
  92. machineconfig/jobs/python_linux_installers/dev/config.json +79 -11
  93. machineconfig/jobs/python_windows_installers/config.json +6 -0
  94. machineconfig/profile/__pycache__/__init__.cpython-311.pyc +0 -0
  95. machineconfig/profile/__pycache__/create.cpython-311.pyc +0 -0
  96. machineconfig/profile/__pycache__/shell.cpython-311.pyc +0 -0
  97. machineconfig/profile/create.py +5 -5
  98. machineconfig/profile/create_hardlinks.py +5 -5
  99. machineconfig/profile/shell.py +69 -63
  100. machineconfig/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  101. machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
  102. machineconfig/scripts/cloud/init.sh +9 -18
  103. machineconfig/scripts/linux/fire +5 -24
  104. machineconfig/scripts/linux/fire_agents +27 -0
  105. machineconfig/scripts/linux/share_cloud.sh +6 -12
  106. machineconfig/scripts/linux/wifi_conn +24 -0
  107. machineconfig/scripts/python/__pycache__/__init__.cpython-311.pyc +0 -0
  108. machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
  109. machineconfig/scripts/python/__pycache__/cloud_copy.cpython-311.pyc +0 -0
  110. machineconfig/scripts/python/__pycache__/cloud_mount.cpython-311.pyc +0 -0
  111. machineconfig/scripts/python/__pycache__/cloud_sync.cpython-311.pyc +0 -0
  112. machineconfig/scripts/python/__pycache__/croshell.cpython-311.pyc +0 -0
  113. machineconfig/scripts/python/__pycache__/devops.cpython-311.pyc +0 -0
  114. machineconfig/scripts/python/__pycache__/devops_backup_retrieve.cpython-311.pyc +0 -0
  115. machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-311.pyc +0 -0
  116. machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-311.pyc +0 -0
  117. machineconfig/scripts/python/__pycache__/fire_agents.cpython-311.pyc +0 -0
  118. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-311.pyc +0 -0
  119. machineconfig/scripts/python/__pycache__/fire_jobs.cpython-313.pyc +0 -0
  120. machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-311.pyc +0 -0
  121. machineconfig/scripts/python/__pycache__/repos.cpython-311.pyc +0 -0
  122. machineconfig/scripts/python/archive/im2text.py +28 -30
  123. machineconfig/scripts/python/archive/tmate_conn.py +10 -13
  124. machineconfig/scripts/python/archive/tmate_start.py +12 -16
  125. machineconfig/scripts/python/choose_wezterm_theme.py +12 -21
  126. machineconfig/scripts/python/cloud_copy.py +49 -104
  127. machineconfig/scripts/python/cloud_manager.py +77 -91
  128. machineconfig/scripts/python/cloud_mount.py +36 -46
  129. machineconfig/scripts/python/cloud_repo_sync.py +33 -79
  130. machineconfig/scripts/python/cloud_sync.py +35 -45
  131. machineconfig/scripts/python/croshell.py +70 -92
  132. machineconfig/scripts/python/devops.py +54 -113
  133. machineconfig/scripts/python/devops_add_identity.py +71 -109
  134. machineconfig/scripts/python/devops_add_ssh_key.py +42 -149
  135. machineconfig/scripts/python/devops_backup_retrieve.py +31 -119
  136. machineconfig/scripts/python/devops_devapps_install.py +6 -10
  137. machineconfig/scripts/python/devops_update_repos.py +5 -4
  138. machineconfig/scripts/python/dotfile.py +10 -7
  139. machineconfig/scripts/python/fire_agents.py +69 -0
  140. machineconfig/scripts/python/fire_jobs.py +117 -78
  141. machineconfig/scripts/python/ftpx.py +8 -8
  142. machineconfig/scripts/python/get_zellij_cmd.py +3 -3
  143. machineconfig/scripts/python/gh_models.py +6 -4
  144. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-311.pyc +0 -0
  145. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
  146. machineconfig/scripts/python/helpers/__pycache__/cloud_helpers.cpython-311.pyc +0 -0
  147. machineconfig/scripts/python/helpers/__pycache__/helpers2.cpython-311.pyc +0 -0
  148. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-311.pyc +0 -0
  149. machineconfig/scripts/python/helpers/__pycache__/helpers4.cpython-313.pyc +0 -0
  150. machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-311.pyc +0 -0
  151. machineconfig/scripts/python/helpers/cloud_helpers.py +49 -46
  152. machineconfig/scripts/python/helpers/helpers2.py +26 -39
  153. machineconfig/scripts/python/helpers/helpers4.py +23 -35
  154. machineconfig/scripts/python/helpers/repo_sync_helpers.py +33 -67
  155. machineconfig/scripts/python/mount_nfs.py +8 -11
  156. machineconfig/scripts/python/mount_nw_drive.py +4 -4
  157. machineconfig/scripts/python/mount_ssh.py +2 -2
  158. machineconfig/scripts/python/onetimeshare.py +56 -57
  159. machineconfig/scripts/python/pomodoro.py +55 -55
  160. machineconfig/scripts/python/repos.py +72 -49
  161. machineconfig/scripts/python/scheduler.py +70 -53
  162. machineconfig/scripts/python/snapshot.py +21 -24
  163. machineconfig/scripts/python/start_slidev.py +6 -5
  164. machineconfig/scripts/python/start_terminals.py +3 -1
  165. machineconfig/scripts/python/viewer.py +5 -4
  166. machineconfig/scripts/python/viewer_template.py +138 -140
  167. machineconfig/scripts/python/wifi_conn.py +416 -62
  168. machineconfig/scripts/python/wsl_windows_transfer.py +18 -3
  169. machineconfig/scripts/windows/fire.ps1 +27 -15
  170. machineconfig/settings/linters/.pylintrc +6 -7
  171. machineconfig/settings/lvim/windows/config.lua +0 -0
  172. machineconfig/settings/shells/bash/init.sh +6 -0
  173. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +7 -6
  174. machineconfig/settings/shells/pwsh/init.ps1 +6 -6
  175. machineconfig/settings/shells/wt/settings.json +51 -266
  176. machineconfig/setup_linux/nix/cli_installation.sh +9 -18
  177. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +3 -6
  178. machineconfig/setup_linux/web_shortcuts/all.sh +5 -10
  179. machineconfig/setup_linux/web_shortcuts/ascii_art.sh +7 -14
  180. machineconfig/setup_linux/web_shortcuts/croshell.sh +6 -12
  181. machineconfig/setup_linux/web_shortcuts/interactive.sh +39 -70
  182. machineconfig/setup_linux/web_shortcuts/ssh.sh +8 -16
  183. machineconfig/setup_linux/web_shortcuts/update_system.sh +7 -14
  184. machineconfig/setup_windows/wt_and_pwsh/set_pwsh_theme.py +3 -6
  185. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +27 -21
  186. machineconfig/utils/ai/browser_user_wrapper.py +60 -45
  187. machineconfig/utils/ai/generate_file_checklist.py +4 -7
  188. machineconfig/utils/ai/url2md.py +15 -7
  189. machineconfig/utils/cloud/onedrive/setup_oauth.py +59 -0
  190. machineconfig/utils/cloud/onedrive/transaction.py +796 -0
  191. machineconfig/utils/{utils_code.py → code.py} +25 -22
  192. machineconfig/utils/installer.py +81 -44
  193. machineconfig/utils/installer_utils/installer_abc.py +7 -6
  194. machineconfig/utils/installer_utils/installer_class.py +44 -25
  195. machineconfig/utils/io_save.py +107 -0
  196. machineconfig/utils/{utils_links.py → links.py} +28 -35
  197. machineconfig/utils/{utils_options.py → options.py} +14 -28
  198. machineconfig/utils/path.py +112 -0
  199. machineconfig/utils/path_reduced.py +608 -0
  200. machineconfig/utils/procs.py +134 -73
  201. machineconfig/utils/scheduling.py +312 -222
  202. machineconfig/utils/utils.py +19 -26
  203. machineconfig/utils/utils2.py +42 -0
  204. machineconfig/utils/utils5.py +84 -0
  205. machineconfig/utils/ve.py +49 -103
  206. {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/METADATA +5 -3
  207. machineconfig-1.96.dist-info/RECORD +437 -0
  208. {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/WHEEL +1 -1
  209. machineconfig/cluster/session_managers.py +0 -183
  210. machineconfig/cluster/templates/f.py +0 -4
  211. machineconfig/jobs/python/__pycache__/check_installations.cpython-311.pyc +0 -0
  212. machineconfig/jobs/python/__pycache__/checkout_version.cpython-311.pyc +0 -0
  213. machineconfig/jobs/python/__pycache__/python_ve_symlink.cpython-311.pyc +0 -0
  214. machineconfig/jobs/python/checkout_version.py +0 -123
  215. machineconfig/jobs/python/vscode/__pycache__/api.cpython-311.pyc +0 -0
  216. machineconfig/jobs/python/vscode/__pycache__/link_ve.cpython-311.pyc +0 -0
  217. machineconfig/jobs/python_custom_installers/__pycache__/hx.cpython-311.pyc +0 -0
  218. machineconfig/jobs/python_windows_installers/__pycache__/__init__.cpython-311.pyc +0 -0
  219. machineconfig/scripts/python/.mypy_cache/.gitignore +0 -2
  220. machineconfig/scripts/python/.mypy_cache/3.11/@plugins_snapshot.json +0 -1
  221. machineconfig/scripts/python/.mypy_cache/3.11/__future__.data.json +0 -1
  222. machineconfig/scripts/python/.mypy_cache/3.11/__future__.meta.json +0 -1
  223. machineconfig/scripts/python/.mypy_cache/3.11/_ast.data.json +0 -1
  224. machineconfig/scripts/python/.mypy_cache/3.11/_ast.meta.json +0 -1
  225. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.data.json +0 -1
  226. machineconfig/scripts/python/.mypy_cache/3.11/_bz2.meta.json +0 -1
  227. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.data.json +0 -1
  228. machineconfig/scripts/python/.mypy_cache/3.11/_codecs.meta.json +0 -1
  229. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.data.json +0 -1
  230. machineconfig/scripts/python/.mypy_cache/3.11/_collections_abc.meta.json +0 -1
  231. machineconfig/scripts/python/.mypy_cache/3.11/_compression.data.json +0 -1
  232. machineconfig/scripts/python/.mypy_cache/3.11/_compression.meta.json +0 -1
  233. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.data.json +0 -1
  234. machineconfig/scripts/python/.mypy_cache/3.11/_decimal.meta.json +0 -1
  235. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.data.json +0 -1
  236. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib.meta.json +0 -1
  237. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.data.json +0 -1
  238. machineconfig/scripts/python/.mypy_cache/3.11/_frozen_importlib_external.meta.json +0 -1
  239. machineconfig/scripts/python/.mypy_cache/3.11/_io.data.json +0 -1
  240. machineconfig/scripts/python/.mypy_cache/3.11/_io.meta.json +0 -1
  241. machineconfig/scripts/python/.mypy_cache/3.11/_locale.data.json +0 -1
  242. machineconfig/scripts/python/.mypy_cache/3.11/_locale.meta.json +0 -1
  243. machineconfig/scripts/python/.mypy_cache/3.11/_stat.data.json +0 -1
  244. machineconfig/scripts/python/.mypy_cache/3.11/_stat.meta.json +0 -1
  245. machineconfig/scripts/python/.mypy_cache/3.11/_struct.data.json +0 -1
  246. machineconfig/scripts/python/.mypy_cache/3.11/_struct.meta.json +0 -1
  247. machineconfig/scripts/python/.mypy_cache/3.11/_thread.data.json +0 -1
  248. machineconfig/scripts/python/.mypy_cache/3.11/_thread.meta.json +0 -1
  249. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.data.json +0 -1
  250. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/__init__.meta.json +0 -1
  251. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.data.json +0 -1
  252. machineconfig/scripts/python/.mypy_cache/3.11/_typeshed/importlib.meta.json +0 -1
  253. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.data.json +0 -1
  254. machineconfig/scripts/python/.mypy_cache/3.11/_warnings.meta.json +0 -1
  255. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.data.json +0 -1
  256. machineconfig/scripts/python/.mypy_cache/3.11/_weakref.meta.json +0 -1
  257. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.data.json +0 -1
  258. machineconfig/scripts/python/.mypy_cache/3.11/_weakrefset.meta.json +0 -1
  259. machineconfig/scripts/python/.mypy_cache/3.11/abc.data.json +0 -1
  260. machineconfig/scripts/python/.mypy_cache/3.11/abc.meta.json +0 -1
  261. machineconfig/scripts/python/.mypy_cache/3.11/argparse.data.json +0 -1
  262. machineconfig/scripts/python/.mypy_cache/3.11/argparse.meta.json +0 -1
  263. machineconfig/scripts/python/.mypy_cache/3.11/ast.data.json +0 -1
  264. machineconfig/scripts/python/.mypy_cache/3.11/ast.meta.json +0 -1
  265. machineconfig/scripts/python/.mypy_cache/3.11/binascii.data.json +0 -1
  266. machineconfig/scripts/python/.mypy_cache/3.11/binascii.meta.json +0 -1
  267. machineconfig/scripts/python/.mypy_cache/3.11/builtins.data.json +0 -1
  268. machineconfig/scripts/python/.mypy_cache/3.11/builtins.meta.json +0 -1
  269. machineconfig/scripts/python/.mypy_cache/3.11/bz2.data.json +0 -1
  270. machineconfig/scripts/python/.mypy_cache/3.11/bz2.meta.json +0 -1
  271. machineconfig/scripts/python/.mypy_cache/3.11/calendar.data.json +0 -1
  272. machineconfig/scripts/python/.mypy_cache/3.11/calendar.meta.json +0 -1
  273. machineconfig/scripts/python/.mypy_cache/3.11/codecs.data.json +0 -1
  274. machineconfig/scripts/python/.mypy_cache/3.11/codecs.meta.json +0 -1
  275. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.data.json +0 -1
  276. machineconfig/scripts/python/.mypy_cache/3.11/collections/__init__.meta.json +0 -1
  277. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.data.json +0 -1
  278. machineconfig/scripts/python/.mypy_cache/3.11/collections/abc.meta.json +0 -1
  279. machineconfig/scripts/python/.mypy_cache/3.11/configparser.data.json +0 -1
  280. machineconfig/scripts/python/.mypy_cache/3.11/configparser.meta.json +0 -1
  281. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.data.json +0 -1
  282. machineconfig/scripts/python/.mypy_cache/3.11/contextlib.meta.json +0 -1
  283. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.data.json +0 -1
  284. machineconfig/scripts/python/.mypy_cache/3.11/dataclasses.meta.json +0 -1
  285. machineconfig/scripts/python/.mypy_cache/3.11/datetime.data.json +0 -1
  286. machineconfig/scripts/python/.mypy_cache/3.11/datetime.meta.json +0 -1
  287. machineconfig/scripts/python/.mypy_cache/3.11/decimal.data.json +0 -1
  288. machineconfig/scripts/python/.mypy_cache/3.11/decimal.meta.json +0 -1
  289. machineconfig/scripts/python/.mypy_cache/3.11/dis.data.json +0 -1
  290. machineconfig/scripts/python/.mypy_cache/3.11/dis.meta.json +0 -1
  291. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.data.json +0 -1
  292. machineconfig/scripts/python/.mypy_cache/3.11/email/__init__.meta.json +0 -1
  293. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.data.json +0 -1
  294. machineconfig/scripts/python/.mypy_cache/3.11/email/_policybase.meta.json +0 -1
  295. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.data.json +0 -1
  296. machineconfig/scripts/python/.mypy_cache/3.11/email/charset.meta.json +0 -1
  297. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.data.json +0 -1
  298. machineconfig/scripts/python/.mypy_cache/3.11/email/contentmanager.meta.json +0 -1
  299. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.data.json +0 -1
  300. machineconfig/scripts/python/.mypy_cache/3.11/email/errors.meta.json +0 -1
  301. machineconfig/scripts/python/.mypy_cache/3.11/email/header.data.json +0 -1
  302. machineconfig/scripts/python/.mypy_cache/3.11/email/header.meta.json +0 -1
  303. machineconfig/scripts/python/.mypy_cache/3.11/email/message.data.json +0 -1
  304. machineconfig/scripts/python/.mypy_cache/3.11/email/message.meta.json +0 -1
  305. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.data.json +0 -1
  306. machineconfig/scripts/python/.mypy_cache/3.11/email/policy.meta.json +0 -1
  307. machineconfig/scripts/python/.mypy_cache/3.11/enum.data.json +0 -1
  308. machineconfig/scripts/python/.mypy_cache/3.11/enum.meta.json +0 -1
  309. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.data.json +0 -1
  310. machineconfig/scripts/python/.mypy_cache/3.11/fnmatch.meta.json +0 -1
  311. machineconfig/scripts/python/.mypy_cache/3.11/functools.data.json +0 -1
  312. machineconfig/scripts/python/.mypy_cache/3.11/functools.meta.json +0 -1
  313. machineconfig/scripts/python/.mypy_cache/3.11/gc.data.json +0 -1
  314. machineconfig/scripts/python/.mypy_cache/3.11/gc.meta.json +0 -1
  315. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.data.json +0 -1
  316. machineconfig/scripts/python/.mypy_cache/3.11/genericpath.meta.json +0 -1
  317. machineconfig/scripts/python/.mypy_cache/3.11/getpass.data.json +0 -1
  318. machineconfig/scripts/python/.mypy_cache/3.11/getpass.meta.json +0 -1
  319. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.data.json +0 -1
  320. machineconfig/scripts/python/.mypy_cache/3.11/git/__init__.meta.json +0 -1
  321. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.data.json +0 -1
  322. machineconfig/scripts/python/.mypy_cache/3.11/git/cmd.meta.json +0 -1
  323. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.data.json +0 -1
  324. machineconfig/scripts/python/.mypy_cache/3.11/git/compat.meta.json +0 -1
  325. machineconfig/scripts/python/.mypy_cache/3.11/git/config.data.json +0 -1
  326. machineconfig/scripts/python/.mypy_cache/3.11/git/config.meta.json +0 -1
  327. machineconfig/scripts/python/.mypy_cache/3.11/git/db.data.json +0 -1
  328. machineconfig/scripts/python/.mypy_cache/3.11/git/db.meta.json +0 -1
  329. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.data.json +0 -1
  330. machineconfig/scripts/python/.mypy_cache/3.11/git/diff.meta.json +0 -1
  331. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.data.json +0 -1
  332. machineconfig/scripts/python/.mypy_cache/3.11/git/exc.meta.json +0 -1
  333. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.data.json +0 -1
  334. machineconfig/scripts/python/.mypy_cache/3.11/git/index/__init__.meta.json +0 -1
  335. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.data.json +0 -1
  336. machineconfig/scripts/python/.mypy_cache/3.11/git/index/base.meta.json +0 -1
  337. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.data.json +0 -1
  338. machineconfig/scripts/python/.mypy_cache/3.11/git/index/fun.meta.json +0 -1
  339. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.data.json +0 -1
  340. machineconfig/scripts/python/.mypy_cache/3.11/git/index/typ.meta.json +0 -1
  341. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.data.json +0 -1
  342. machineconfig/scripts/python/.mypy_cache/3.11/git/index/util.meta.json +0 -1
  343. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.data.json +0 -1
  344. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/__init__.meta.json +0 -1
  345. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.data.json +0 -1
  346. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/base.meta.json +0 -1
  347. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.data.json +0 -1
  348. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/blob.meta.json +0 -1
  349. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.data.json +0 -1
  350. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/commit.meta.json +0 -1
  351. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.data.json +0 -1
  352. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/fun.meta.json +0 -1
  353. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.data.json +0 -1
  354. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/__init__.meta.json +0 -1
  355. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.data.json +0 -1
  356. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/base.meta.json +0 -1
  357. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.data.json +0 -1
  358. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/root.meta.json +0 -1
  359. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.data.json +0 -1
  360. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/submodule/util.meta.json +0 -1
  361. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.data.json +0 -1
  362. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tag.meta.json +0 -1
  363. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.data.json +0 -1
  364. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/tree.meta.json +0 -1
  365. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.data.json +0 -1
  366. machineconfig/scripts/python/.mypy_cache/3.11/git/objects/util.meta.json +0 -1
  367. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.data.json +0 -1
  368. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/__init__.meta.json +0 -1
  369. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.data.json +0 -1
  370. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/head.meta.json +0 -1
  371. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.data.json +0 -1
  372. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/log.meta.json +0 -1
  373. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.data.json +0 -1
  374. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/reference.meta.json +0 -1
  375. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.data.json +0 -1
  376. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/remote.meta.json +0 -1
  377. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.data.json +0 -1
  378. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/symbolic.meta.json +0 -1
  379. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.data.json +0 -1
  380. machineconfig/scripts/python/.mypy_cache/3.11/git/refs/tag.meta.json +0 -1
  381. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.data.json +0 -1
  382. machineconfig/scripts/python/.mypy_cache/3.11/git/remote.meta.json +0 -1
  383. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.data.json +0 -1
  384. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/__init__.meta.json +0 -1
  385. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.data.json +0 -1
  386. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/base.meta.json +0 -1
  387. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.data.json +0 -1
  388. machineconfig/scripts/python/.mypy_cache/3.11/git/repo/fun.meta.json +0 -1
  389. machineconfig/scripts/python/.mypy_cache/3.11/git/types.data.json +0 -1
  390. machineconfig/scripts/python/.mypy_cache/3.11/git/types.meta.json +0 -1
  391. machineconfig/scripts/python/.mypy_cache/3.11/git/util.data.json +0 -1
  392. machineconfig/scripts/python/.mypy_cache/3.11/git/util.meta.json +0 -1
  393. machineconfig/scripts/python/.mypy_cache/3.11/glob.data.json +0 -1
  394. machineconfig/scripts/python/.mypy_cache/3.11/glob.meta.json +0 -1
  395. machineconfig/scripts/python/.mypy_cache/3.11/gzip.data.json +0 -1
  396. machineconfig/scripts/python/.mypy_cache/3.11/gzip.meta.json +0 -1
  397. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.data.json +0 -1
  398. machineconfig/scripts/python/.mypy_cache/3.11/importlib/__init__.meta.json +0 -1
  399. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.data.json +0 -1
  400. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_abc.meta.json +0 -1
  401. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.data.json +0 -1
  402. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap.meta.json +0 -1
  403. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.data.json +0 -1
  404. machineconfig/scripts/python/.mypy_cache/3.11/importlib/_bootstrap_external.meta.json +0 -1
  405. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.data.json +0 -1
  406. machineconfig/scripts/python/.mypy_cache/3.11/importlib/abc.meta.json +0 -1
  407. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.data.json +0 -1
  408. machineconfig/scripts/python/.mypy_cache/3.11/importlib/machinery.meta.json +0 -1
  409. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.data.json +0 -1
  410. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/__init__.meta.json +0 -1
  411. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.data.json +0 -1
  412. machineconfig/scripts/python/.mypy_cache/3.11/importlib/metadata/_meta.meta.json +0 -1
  413. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.data.json +0 -1
  414. machineconfig/scripts/python/.mypy_cache/3.11/importlib/readers.meta.json +0 -1
  415. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.data.json +0 -1
  416. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/__init__.meta.json +0 -1
  417. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.data.json +0 -1
  418. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/_common.meta.json +0 -1
  419. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.data.json +0 -1
  420. machineconfig/scripts/python/.mypy_cache/3.11/importlib/resources/abc.meta.json +0 -1
  421. machineconfig/scripts/python/.mypy_cache/3.11/inspect.data.json +0 -1
  422. machineconfig/scripts/python/.mypy_cache/3.11/inspect.meta.json +0 -1
  423. machineconfig/scripts/python/.mypy_cache/3.11/io.data.json +0 -1
  424. machineconfig/scripts/python/.mypy_cache/3.11/io.meta.json +0 -1
  425. machineconfig/scripts/python/.mypy_cache/3.11/itertools.data.json +0 -1
  426. machineconfig/scripts/python/.mypy_cache/3.11/itertools.meta.json +0 -1
  427. machineconfig/scripts/python/.mypy_cache/3.11/locale.data.json +0 -1
  428. machineconfig/scripts/python/.mypy_cache/3.11/locale.meta.json +0 -1
  429. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.data.json +0 -1
  430. machineconfig/scripts/python/.mypy_cache/3.11/logging/__init__.meta.json +0 -1
  431. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.data.json +0 -1
  432. machineconfig/scripts/python/.mypy_cache/3.11/mimetypes.meta.json +0 -1
  433. machineconfig/scripts/python/.mypy_cache/3.11/mmap.data.json +0 -1
  434. machineconfig/scripts/python/.mypy_cache/3.11/mmap.meta.json +0 -1
  435. machineconfig/scripts/python/.mypy_cache/3.11/numbers.data.json +0 -1
  436. machineconfig/scripts/python/.mypy_cache/3.11/numbers.meta.json +0 -1
  437. machineconfig/scripts/python/.mypy_cache/3.11/opcode.data.json +0 -1
  438. machineconfig/scripts/python/.mypy_cache/3.11/opcode.meta.json +0 -1
  439. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.data.json +0 -1
  440. machineconfig/scripts/python/.mypy_cache/3.11/os/__init__.meta.json +0 -1
  441. machineconfig/scripts/python/.mypy_cache/3.11/os/path.data.json +0 -1
  442. machineconfig/scripts/python/.mypy_cache/3.11/os/path.meta.json +0 -1
  443. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.data.json +0 -1
  444. machineconfig/scripts/python/.mypy_cache/3.11/pathlib.meta.json +0 -1
  445. machineconfig/scripts/python/.mypy_cache/3.11/platform.data.json +0 -1
  446. machineconfig/scripts/python/.mypy_cache/3.11/platform.meta.json +0 -1
  447. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.data.json +0 -1
  448. machineconfig/scripts/python/.mypy_cache/3.11/posixpath.meta.json +0 -1
  449. machineconfig/scripts/python/.mypy_cache/3.11/re.data.json +0 -1
  450. machineconfig/scripts/python/.mypy_cache/3.11/re.meta.json +0 -1
  451. machineconfig/scripts/python/.mypy_cache/3.11/resource.data.json +0 -1
  452. machineconfig/scripts/python/.mypy_cache/3.11/resource.meta.json +0 -1
  453. machineconfig/scripts/python/.mypy_cache/3.11/shlex.data.json +0 -1
  454. machineconfig/scripts/python/.mypy_cache/3.11/shlex.meta.json +0 -1
  455. machineconfig/scripts/python/.mypy_cache/3.11/shutil.data.json +0 -1
  456. machineconfig/scripts/python/.mypy_cache/3.11/shutil.meta.json +0 -1
  457. machineconfig/scripts/python/.mypy_cache/3.11/signal.data.json +0 -1
  458. machineconfig/scripts/python/.mypy_cache/3.11/signal.meta.json +0 -1
  459. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.data.json +0 -1
  460. machineconfig/scripts/python/.mypy_cache/3.11/src/__init__.meta.json +0 -1
  461. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.data.json +0 -1
  462. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/__init__.meta.json +0 -1
  463. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.data.json +0 -1
  464. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/__init__.meta.json +0 -1
  465. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.data.json +0 -1
  466. machineconfig/scripts/python/.mypy_cache/3.11/src/machineconfig/scripts/python/__init__.meta.json +0 -1
  467. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.data.json +0 -1
  468. machineconfig/scripts/python/.mypy_cache/3.11/sre_compile.meta.json +0 -1
  469. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.data.json +0 -1
  470. machineconfig/scripts/python/.mypy_cache/3.11/sre_constants.meta.json +0 -1
  471. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.data.json +0 -1
  472. machineconfig/scripts/python/.mypy_cache/3.11/sre_parse.meta.json +0 -1
  473. machineconfig/scripts/python/.mypy_cache/3.11/stat.data.json +0 -1
  474. machineconfig/scripts/python/.mypy_cache/3.11/stat.meta.json +0 -1
  475. machineconfig/scripts/python/.mypy_cache/3.11/string.data.json +0 -1
  476. machineconfig/scripts/python/.mypy_cache/3.11/string.meta.json +0 -1
  477. machineconfig/scripts/python/.mypy_cache/3.11/struct.data.json +0 -1
  478. machineconfig/scripts/python/.mypy_cache/3.11/struct.meta.json +0 -1
  479. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.data.json +0 -1
  480. machineconfig/scripts/python/.mypy_cache/3.11/subprocess.meta.json +0 -1
  481. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.data.json +0 -1
  482. machineconfig/scripts/python/.mypy_cache/3.11/sys/__init__.meta.json +0 -1
  483. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.data.json +0 -1
  484. machineconfig/scripts/python/.mypy_cache/3.11/tarfile.meta.json +0 -1
  485. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.data.json +0 -1
  486. machineconfig/scripts/python/.mypy_cache/3.11/tempfile.meta.json +0 -1
  487. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.data.json +0 -1
  488. machineconfig/scripts/python/.mypy_cache/3.11/textwrap.meta.json +0 -1
  489. machineconfig/scripts/python/.mypy_cache/3.11/threading.data.json +0 -1
  490. machineconfig/scripts/python/.mypy_cache/3.11/threading.meta.json +0 -1
  491. machineconfig/scripts/python/.mypy_cache/3.11/time.data.json +0 -1
  492. machineconfig/scripts/python/.mypy_cache/3.11/time.meta.json +0 -1
  493. machineconfig/scripts/python/.mypy_cache/3.11/types.data.json +0 -1
  494. machineconfig/scripts/python/.mypy_cache/3.11/types.meta.json +0 -1
  495. machineconfig/scripts/python/.mypy_cache/3.11/typing.data.json +0 -1
  496. machineconfig/scripts/python/.mypy_cache/3.11/typing.meta.json +0 -1
  497. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.data.json +0 -1
  498. machineconfig/scripts/python/.mypy_cache/3.11/typing_extensions.meta.json +0 -1
  499. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.data.json +0 -1
  500. machineconfig/scripts/python/.mypy_cache/3.11/urllib/__init__.meta.json +0 -1
  501. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.data.json +0 -1
  502. machineconfig/scripts/python/.mypy_cache/3.11/urllib/parse.meta.json +0 -1
  503. machineconfig/scripts/python/.mypy_cache/3.11/uuid.data.json +0 -1
  504. machineconfig/scripts/python/.mypy_cache/3.11/uuid.meta.json +0 -1
  505. machineconfig/scripts/python/.mypy_cache/3.11/warnings.data.json +0 -1
  506. machineconfig/scripts/python/.mypy_cache/3.11/warnings.meta.json +0 -1
  507. machineconfig/scripts/python/.mypy_cache/3.11/weakref.data.json +0 -1
  508. machineconfig/scripts/python/.mypy_cache/3.11/weakref.meta.json +0 -1
  509. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.data.json +0 -1
  510. machineconfig/scripts/python/.mypy_cache/3.11/zipfile/__init__.meta.json +0 -1
  511. machineconfig/scripts/python/.mypy_cache/3.11/zlib.data.json +0 -1
  512. machineconfig/scripts/python/.mypy_cache/3.11/zlib.meta.json +0 -1
  513. machineconfig/scripts/python/.mypy_cache/CACHEDIR.TAG +0 -3
  514. machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-311.pyc +0 -0
  515. machineconfig/scripts/python/__pycache__/gh_models.cpython-311.pyc +0 -0
  516. machineconfig/scripts/python/__pycache__/url2md.cpython-311.pyc +0 -0
  517. machineconfig/scripts/python/__pycache__/viewer.cpython-311.pyc +0 -0
  518. machineconfig/scripts/python/__pycache__/vscode_api.cpython-311.pyc +0 -0
  519. machineconfig/settings/__pycache__/__init__.cpython-311.pyc +0 -0
  520. machineconfig/settings/linters/.ruff_cache/.gitignore +0 -2
  521. machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +0 -1
  522. machineconfig/settings/shells/ipy/profiles/default/__pycache__/__init__.cpython-311.pyc +0 -0
  523. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/__init__.cpython-311.pyc +0 -0
  524. machineconfig/settings/shells/ipy/profiles/default/startup/__pycache__/playext.cpython-311.pyc +0 -0
  525. machineconfig/utils/utils_path.py +0 -151
  526. machineconfig/utils/ve_utils/ve1.py +0 -111
  527. machineconfig/utils/ve_utils/ve2.py +0 -142
  528. machineconfig-1.94.dist-info/RECORD +0 -710
  529. {machineconfig-1.94.dist-info → machineconfig-1.96.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,334 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Process monitoring and status checking utilities for remote commands.
4
+ """
5
+ import json
6
+ import shlex
7
+ import logging
8
+ from typing import Dict, Tuple, Any
9
+ from .remote_executor import RemoteExecutor
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ class ProcessMonitor:
15
+ """Handles process status checking and verification on remote machines."""
16
+
17
+ def __init__(self, remote_executor: RemoteExecutor):
18
+ self.remote_executor = remote_executor
19
+
20
+ def check_command_status(self, tab_name: str, tab_config: Dict[str, Tuple[str, str]],
21
+ use_verification: bool = True) -> Dict[str, Any]:
22
+ """Check command status with optional process verification."""
23
+ if tab_name not in tab_config:
24
+ return {
25
+ "status": "unknown",
26
+ "error": f"Tab '{tab_name}' not found in tracked configuration",
27
+ "running": False,
28
+ "pid": None,
29
+ "command": None,
30
+ "remote": self.remote_executor.remote_name
31
+ }
32
+
33
+ # Use the verified method by default for more accurate results
34
+ if use_verification:
35
+ return self.get_verified_process_status(tab_name, tab_config)
36
+
37
+ return self._basic_process_check(tab_name, tab_config)
38
+
39
+ def _basic_process_check(self, tab_name: str, tab_config: Dict[str, Tuple[str, str]]) -> Dict[str, Any]:
40
+ """Basic process checking without verification."""
41
+ _, command = tab_config[tab_name]
42
+
43
+ try:
44
+ check_script = self._create_process_check_script(command)
45
+ remote_cmd = f"$HOME/venvs/ve/bin/python -c {shlex.quote(check_script)}"
46
+ result = self.remote_executor.run_command(remote_cmd, timeout=15)
47
+
48
+ if result.returncode == 0:
49
+ try:
50
+ matching_processes = json.loads(result.stdout.strip())
51
+
52
+ if matching_processes:
53
+ return {
54
+ "status": "running",
55
+ "running": True,
56
+ "processes": matching_processes,
57
+ "command": command,
58
+ "tab_name": tab_name,
59
+ "remote": self.remote_executor.remote_name
60
+ }
61
+ else:
62
+ return {
63
+ "status": "not_running",
64
+ "running": False,
65
+ "processes": [],
66
+ "command": command,
67
+ "tab_name": tab_name,
68
+ "remote": self.remote_executor.remote_name
69
+ }
70
+ except json.JSONDecodeError as e:
71
+ logger.error(f"Failed to parse remote process check output: {e}")
72
+ return {
73
+ "status": "error",
74
+ "error": f"Failed to parse remote output: {e}",
75
+ "running": False,
76
+ "command": command,
77
+ "tab_name": tab_name,
78
+ "remote": self.remote_executor.remote_name
79
+ }
80
+ else:
81
+ return {
82
+ "status": "error",
83
+ "error": f"Remote command failed: {result.stderr}",
84
+ "running": False,
85
+ "command": command,
86
+ "tab_name": tab_name,
87
+ "remote": self.remote_executor.remote_name
88
+ }
89
+
90
+ except Exception as e:
91
+ logger.error(f"Error checking command status for tab '{tab_name}': {e}")
92
+ return {
93
+ "status": "error",
94
+ "error": str(e),
95
+ "running": False,
96
+ "command": command,
97
+ "tab_name": tab_name,
98
+ "remote": self.remote_executor.remote_name
99
+ }
100
+
101
+ def _create_process_check_script(self, command: str) -> str:
102
+ """Create Python script for checking processes on remote machine."""
103
+ return f"""
104
+ import psutil
105
+ import json
106
+ import os
107
+
108
+ def check_process():
109
+ matching_processes = []
110
+ full_command = '{command}'
111
+ cmd_parts = [part for part in full_command.split() if len(part) > 2]
112
+ current_pid = os.getpid()
113
+
114
+ primary_cmd = cmd_parts[0] if cmd_parts else ''
115
+
116
+ for proc in psutil.process_iter(['pid', 'name', 'cmdline', 'status', 'create_time']):
117
+ try:
118
+ if proc.info['pid'] == current_pid:
119
+ continue
120
+
121
+ if proc.info['cmdline'] and len(proc.info['cmdline']) > 0:
122
+ cmdline_str = ' '.join(proc.info['cmdline'])
123
+
124
+ if 'check_process()' in cmdline_str or 'psutil.process_iter' in cmdline_str:
125
+ continue
126
+
127
+ matches_primary = primary_cmd in cmdline_str
128
+ matches_parts = sum(1 for part in cmd_parts[1:] if part in cmdline_str)
129
+
130
+ if (matches_primary and matches_parts >= 2) or \\
131
+ (full_command in cmdline_str and not any(python_indicator in cmdline_str.lower()
132
+ for python_indicator in ['python -c', 'import psutil', 'def check_process'])):
133
+ matching_processes.append({{
134
+ "pid": proc.info['pid'],
135
+ "name": proc.info['name'],
136
+ "cmdline": proc.info['cmdline'],
137
+ "status": proc.info['status'],
138
+ "cmdline_str": cmdline_str,
139
+ "create_time": proc.info['create_time']
140
+ }})
141
+ except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
142
+ continue
143
+
144
+ return matching_processes
145
+
146
+ if __name__ == "__main__":
147
+ processes = check_process()
148
+ print(json.dumps(processes))
149
+ """
150
+
151
+ def force_fresh_process_check(self, tab_name: str, tab_config: Dict[str, Tuple[str, str]]) -> Dict[str, Any]:
152
+ """Force a fresh process check with additional validation."""
153
+ if tab_name not in tab_config:
154
+ return {
155
+ "status": "unknown",
156
+ "error": f"Tab '{tab_name}' not found in tracked configuration",
157
+ "running": False,
158
+ "command": None,
159
+ "remote": self.remote_executor.remote_name
160
+ }
161
+
162
+ _, command = tab_config[tab_name]
163
+
164
+ try:
165
+ # Get timestamp for freshness validation
166
+ timestamp_result = self.remote_executor.run_command("date +%s", timeout=5)
167
+ check_timestamp = timestamp_result.stdout.strip() if timestamp_result.returncode == 0 else "unknown"
168
+
169
+ check_script = self._create_fresh_check_script(command)
170
+ remote_cmd = f"$HOME/venvs/ve/bin/python -c {shlex.quote(check_script)}"
171
+ result = self.remote_executor.run_command(remote_cmd, timeout=15)
172
+
173
+ if result.returncode == 0:
174
+ try:
175
+ check_result = json.loads(result.stdout.strip())
176
+ matching_processes = check_result.get("processes", [])
177
+
178
+ return {
179
+ "status": "running" if matching_processes else "not_running",
180
+ "running": bool(matching_processes),
181
+ "processes": matching_processes,
182
+ "command": command,
183
+ "tab_name": tab_name,
184
+ "remote": self.remote_executor.remote_name,
185
+ "check_timestamp": check_timestamp,
186
+ "method": "force_fresh_check"
187
+ }
188
+ except json.JSONDecodeError as e:
189
+ logger.error(f"Failed to parse fresh check output: {e}")
190
+ return {
191
+ "status": "error",
192
+ "error": f"Failed to parse output: {e}",
193
+ "running": False,
194
+ "command": command,
195
+ "tab_name": tab_name,
196
+ "remote": self.remote_executor.remote_name,
197
+ "raw_output": result.stdout
198
+ }
199
+ else:
200
+ return {
201
+ "status": "error",
202
+ "error": f"Remote command failed: {result.stderr}",
203
+ "running": False,
204
+ "command": command,
205
+ "tab_name": tab_name,
206
+ "remote": self.remote_executor.remote_name
207
+ }
208
+
209
+ except Exception as e:
210
+ logger.error(f"Error in fresh process check for tab '{tab_name}': {e}")
211
+ return {
212
+ "status": "error",
213
+ "error": str(e),
214
+ "running": False,
215
+ "command": command,
216
+ "tab_name": tab_name,
217
+ "remote": self.remote_executor.remote_name
218
+ }
219
+
220
+ def _create_fresh_check_script(self, command: str) -> str:
221
+ """Create enhanced process checking script with freshness validation."""
222
+ escaped_command = command.replace("'", "\\'").replace('"', '\\"')
223
+
224
+ return f'''
225
+ import psutil
226
+ import json
227
+ import os
228
+ import time
229
+
230
+ def force_fresh_check():
231
+ time.sleep(0.1)
232
+
233
+ matching_processes = []
234
+ full_command = '{escaped_command}'
235
+ cmd_parts = [part for part in full_command.split() if len(part) > 2]
236
+ current_pid = os.getpid()
237
+ primary_cmd = cmd_parts[0] if cmd_parts else ''
238
+
239
+ check_time = time.time()
240
+
241
+ for proc in psutil.process_iter(['pid', 'name', 'cmdline', 'status', 'create_time']):
242
+ try:
243
+ if proc.info['pid'] == current_pid:
244
+ continue
245
+
246
+ if proc.info['cmdline'] and len(proc.info['cmdline']) > 0:
247
+ cmdline_str = ' '.join(proc.info['cmdline'])
248
+
249
+ if any(indicator in cmdline_str for indicator in [
250
+ 'check_process()', 'psutil.process_iter', 'force_fresh_check',
251
+ 'import psutil', 'def check_process'
252
+ ]):
253
+ continue
254
+
255
+ if proc.info['create_time'] and proc.info['create_time'] > check_time - 5:
256
+ continue
257
+
258
+ matches_primary = primary_cmd in cmdline_str and primary_cmd != 'python'
259
+ matches_parts = sum(1 for part in cmd_parts[1:] if part in cmdline_str)
260
+
261
+ if matches_primary and matches_parts >= 2:
262
+ script_indicators = ['-c', 'import ', 'def ', 'psutil']
263
+ is_direct_command = not any(script_indicator in cmdline_str.lower()
264
+ for script_indicator in script_indicators)
265
+
266
+ if is_direct_command or (full_command in cmdline_str and 'python -c' not in cmdline_str):
267
+ matching_processes.append({{
268
+ "pid": proc.info['pid'],
269
+ "name": proc.info['name'],
270
+ "cmdline": proc.info['cmdline'],
271
+ "status": proc.info['status'],
272
+ "cmdline_str": cmdline_str,
273
+ "create_time": proc.info['create_time'],
274
+ "is_direct_command": is_direct_command
275
+ }})
276
+ except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
277
+ continue
278
+
279
+ return {{
280
+ "processes": matching_processes,
281
+ "check_timestamp": check_time,
282
+ "search_command": full_command,
283
+ "search_parts": cmd_parts
284
+ }}
285
+
286
+ if __name__ == "__main__":
287
+ result = force_fresh_check()
288
+ print(json.dumps(result))
289
+ '''
290
+
291
+ def verify_process_alive(self, pid: int) -> bool:
292
+ """Verify if a process with given PID is actually alive."""
293
+ try:
294
+ verify_cmd = f"kill -0 {pid} 2>/dev/null && echo 'alive' || echo 'dead'"
295
+ result = self.remote_executor.run_command(verify_cmd, timeout=5)
296
+
297
+ if result.returncode == 0:
298
+ return result.stdout.strip() == 'alive'
299
+ return False
300
+ except Exception:
301
+ return False
302
+
303
+ def get_verified_process_status(self, tab_name: str, tab_config: Dict[str, Tuple[str, str]]) -> Dict[str, Any]:
304
+ """Get process status with additional verification that processes are actually alive."""
305
+ status = self.force_fresh_process_check(tab_name, tab_config)
306
+
307
+ if status.get("running") and status.get("processes"):
308
+ verified_processes = []
309
+ for proc in status["processes"]:
310
+ pid = proc.get("pid")
311
+ if pid and self.verify_process_alive(pid):
312
+ proc["verified_alive"] = True
313
+ verified_processes.append(proc)
314
+ else:
315
+ proc["verified_alive"] = False
316
+ logger.warning(f"Process PID {pid} found in process list but not actually alive")
317
+
318
+ status["processes"] = verified_processes
319
+ status["running"] = bool(verified_processes)
320
+ status["status"] = "running" if verified_processes else "not_running"
321
+ status["verification_method"] = "kill_signal_check"
322
+
323
+ return status
324
+
325
+ def check_all_commands_status(self, tab_config: Dict[str, Tuple[str, str]]) -> Dict[str, Dict[str, Any]]:
326
+ """Check status of all commands in the tab configuration."""
327
+ if not tab_config:
328
+ logger.warning("No tab configuration provided.")
329
+ return {}
330
+
331
+ status_report = {}
332
+ for tab_name in tab_config:
333
+ status_report[tab_name] = self.check_command_status(tab_name, tab_config)
334
+ return status_report
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Remote command execution utilities for SSH operations.
4
+ """
5
+ import subprocess
6
+ import logging
7
+ from typing import Dict, Any
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ class RemoteExecutor:
13
+ """Handles SSH command execution on remote machines."""
14
+
15
+ def __init__(self, remote_name: str):
16
+ self.remote_name = remote_name
17
+
18
+ def run_command(self, command: str, timeout: int = 30) -> subprocess.CompletedProcess[str]:
19
+ """Execute a command on the remote machine via SSH."""
20
+ ssh_cmd = ["ssh", self.remote_name, command]
21
+ try:
22
+ result = subprocess.run(
23
+ ssh_cmd,
24
+ capture_output=True,
25
+ text=True,
26
+ timeout=timeout
27
+ )
28
+ return result
29
+ except subprocess.TimeoutExpired:
30
+ logger.error(f"SSH command timed out after {timeout}s: {command}")
31
+ raise
32
+ except Exception as e:
33
+ logger.error(f"SSH command failed: {e}")
34
+ raise
35
+
36
+ def copy_file_to_remote(self, local_file: str, remote_path: str) -> Dict[str, Any]:
37
+ """Copy a file to the remote machine using SCP."""
38
+ scp_cmd = ["scp", local_file, f"{self.remote_name}:{remote_path}"]
39
+ try:
40
+ result = subprocess.run(scp_cmd, capture_output=True, text=True)
41
+ if result.returncode == 0:
42
+ logger.info(f"File copied successfully to {self.remote_name}:{remote_path}")
43
+ return {"success": True, "remote_path": remote_path}
44
+ else:
45
+ logger.error(f"SCP failed: {result.stderr}")
46
+ return {"success": False, "error": result.stderr}
47
+ except Exception as e:
48
+ logger.error(f"SCP operation failed: {e}")
49
+ return {"success": False, "error": str(e)}
50
+
51
+ def create_remote_directory(self, remote_dir: str) -> bool:
52
+ """Create a directory on the remote machine."""
53
+ try:
54
+ result = self.run_command(f"mkdir -p {remote_dir}")
55
+ return result.returncode == 0
56
+ except Exception as e:
57
+ logger.error(f"Failed to create remote directory {remote_dir}: {e}")
58
+ return False
59
+
60
+ def attach_to_session_interactive(self, session_name: str) -> None:
61
+ """Attach to a Zellij session interactively via SSH."""
62
+ try:
63
+ attach_cmd = ["ssh", "-t", self.remote_name, f"zellij attach {session_name}"]
64
+ logger.info(f"Attaching to Zellij session '{session_name}' on {self.remote_name}")
65
+ subprocess.run(attach_cmd)
66
+ except Exception as e:
67
+ logger.error(f"Failed to attach to session: {e}")
68
+ raise
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Zellij session management utilities for remote operations.
4
+ """
5
+ import logging
6
+ from typing import Dict, Any, Optional
7
+ from pathlib import Path
8
+
9
+ from rich.console import Console
10
+
11
+ from .remote_executor import RemoteExecutor
12
+
13
+ logger = logging.getLogger(__name__)
14
+ console = Console()
15
+
16
+
17
+ class SessionManager:
18
+ """Handles Zellij session operations on remote machines."""
19
+
20
+ def __init__(self, remote_executor: RemoteExecutor, session_name: str, tmp_layout_dir: Path):
21
+ self.remote_executor = remote_executor
22
+ self.session_name = session_name
23
+ self.tmp_layout_dir = tmp_layout_dir
24
+
25
+ def copy_layout_to_remote(self, local_layout_file: Path, random_suffix: str) -> str:
26
+ """Copy the layout file to the remote machine and return the remote path."""
27
+ remote_layout_dir = f"~/{self.tmp_layout_dir.relative_to(Path.home())}"
28
+ remote_layout_file = f"{remote_layout_dir}/zellij_layout_{self.session_name}_{random_suffix}.kdl"
29
+
30
+ # Create remote directory
31
+ if not self.remote_executor.create_remote_directory(remote_layout_dir):
32
+ raise RuntimeError(f"Failed to create remote directory: {remote_layout_dir}")
33
+
34
+ # Copy layout file to remote machine
35
+ copy_result = self.remote_executor.copy_file_to_remote(str(local_layout_file), remote_layout_file)
36
+ if not copy_result["success"]:
37
+ raise RuntimeError(f"Failed to copy layout file to remote: {copy_result['error']}")
38
+
39
+ # Enhanced Rich logging
40
+ console.print(f"[bold green]📁 Zellij layout file copied to remote:[/bold green] [yellow]{self.remote_executor.remote_name}[/yellow][cyan]:{remote_layout_file}[/cyan]")
41
+ return remote_layout_file
42
+
43
+ def check_zellij_session_status(self) -> Dict[str, Any]:
44
+ """Check if the Zellij session exists and is running."""
45
+ try:
46
+ result = self.remote_executor.run_command('zellij list-sessions', timeout=10)
47
+
48
+ if result.returncode == 0:
49
+ sessions = result.stdout.strip().split('\n') if result.stdout.strip() else []
50
+ session_running = any(self.session_name in session for session in sessions)
51
+
52
+ return {
53
+ "zellij_running": True,
54
+ "session_exists": session_running,
55
+ "session_name": self.session_name,
56
+ "all_sessions": sessions,
57
+ "remote": self.remote_executor.remote_name
58
+ }
59
+ else:
60
+ return {
61
+ "zellij_running": False,
62
+ "error": result.stderr,
63
+ "session_name": self.session_name,
64
+ "remote": self.remote_executor.remote_name
65
+ }
66
+
67
+ except Exception as e:
68
+ return {
69
+ "zellij_running": False,
70
+ "error": str(e),
71
+ "session_name": self.session_name,
72
+ "remote": self.remote_executor.remote_name
73
+ }
74
+
75
+ def start_zellij_session(self, layout_file_path: Optional[str] = None) -> Dict[str, Any]:
76
+ """Start a Zellij session on the remote machine with the generated layout."""
77
+ try:
78
+ if layout_file_path:
79
+ layout_filename = Path(layout_file_path).name
80
+ remote_layout_file = f"~/{self.tmp_layout_dir.relative_to(Path.home())}/{layout_filename}"
81
+ else:
82
+ raise ValueError("No layout file path provided.")
83
+
84
+ # Enhanced Rich logging for session start
85
+ console.print(f"[bold cyan]🚀 Starting Zellij session[/bold cyan] [yellow]'{self.session_name}'[/yellow] [dim]on remote[/dim] [bold yellow]'{self.remote_executor.remote_name}'[/bold yellow] [dim]with layout:[/dim] [blue]{remote_layout_file}[/blue]")
86
+
87
+ # Start Zellij session with layout
88
+ start_cmd = f"zellij --layout {remote_layout_file} a -b {self.session_name}"
89
+ console.print(f"[dim]Executing:[/dim] [green]{start_cmd}[/green]")
90
+ result = self.remote_executor.run_command(start_cmd, timeout=30)
91
+
92
+ if result.returncode == 0:
93
+ console.print(f"[bold green]✅ Zellij session[/bold green] [yellow]'{self.session_name}'[/yellow] [green]started successfully on[/green] [bold yellow]{self.remote_executor.remote_name}[/bold yellow]")
94
+ return {
95
+ "success": True,
96
+ "session_name": self.session_name,
97
+ "remote": self.remote_executor.remote_name,
98
+ "message": "Session started successfully"
99
+ }
100
+ else:
101
+ return {
102
+ "success": False,
103
+ "error": result.stderr,
104
+ "session_name": self.session_name,
105
+ "remote": self.remote_executor.remote_name
106
+ }
107
+
108
+ except Exception as e:
109
+ logger.error(f"Failed to start Zellij session on {self.remote_executor.remote_name}: {e}")
110
+ return {
111
+ "success": False,
112
+ "error": str(e),
113
+ "session_name": self.session_name,
114
+ "remote": self.remote_executor.remote_name
115
+ }
116
+
117
+ def attach_to_session(self) -> None:
118
+ """Attach to the Zellij session on the remote machine via SSH."""
119
+ self.remote_executor.attach_to_session_interactive(self.session_name)
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Status reporting utilities for Zellij remote layouts.
4
+ """
5
+ import logging
6
+ from typing import Dict, Any, Tuple
7
+ from .process_monitor import ProcessMonitor
8
+ from .session_manager import SessionManager
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+
13
+ class StatusReporter:
14
+ """Handles comprehensive status reporting for Zellij remote sessions."""
15
+
16
+ def __init__(self, process_monitor: ProcessMonitor, session_manager: SessionManager):
17
+ self.process_monitor = process_monitor
18
+ self.session_manager = session_manager
19
+
20
+ def get_comprehensive_status(self, tab_config: Dict[str, Tuple[str, str]]) -> Dict[str, Any]:
21
+ """Get comprehensive status including Zellij session and all commands."""
22
+ zellij_status = self.session_manager.check_zellij_session_status()
23
+ commands_status = self.process_monitor.check_all_commands_status(tab_config)
24
+
25
+ running_count = sum(1 for status in commands_status.values() if status.get("running", False))
26
+ total_count = len(commands_status)
27
+
28
+ return {
29
+ "zellij_session": zellij_status,
30
+ "commands": commands_status,
31
+ "summary": {
32
+ "total_commands": total_count,
33
+ "running_commands": running_count,
34
+ "stopped_commands": total_count - running_count,
35
+ "session_healthy": zellij_status.get("session_exists", False),
36
+ "remote": self.session_manager.remote_executor.remote_name
37
+ }
38
+ }
39
+
40
+ def print_status_report(self, tab_config: Dict[str, Tuple[str, str]]) -> None:
41
+ """Print a formatted status report to console."""
42
+ status = self.get_comprehensive_status(tab_config)
43
+ remote_name = self.session_manager.remote_executor.remote_name
44
+ session_name = self.session_manager.session_name
45
+
46
+ print("=" * 60)
47
+ print(f"🔍 ZELLIJ REMOTE LAYOUT STATUS REPORT ({remote_name})")
48
+ print("=" * 60)
49
+
50
+ # Zellij session status
51
+ zellij = status["zellij_session"]
52
+ if zellij.get("zellij_running", False):
53
+ if zellij.get("session_exists", False):
54
+ print(f"✅ Zellij session '{session_name}' is running on {remote_name}")
55
+ else:
56
+ print(f"⚠️ Zellij is running on {remote_name} but session '{session_name}' not found")
57
+ else:
58
+ print(f"❌ Zellij session issue on {remote_name}: {zellij.get('error', 'Unknown error')}")
59
+
60
+ print()
61
+
62
+ # Commands status
63
+ print("📋 COMMAND STATUS:")
64
+ print("-" * 40)
65
+
66
+ for tab_name, cmd_status in status["commands"].items():
67
+ if cmd_status.get("running", False):
68
+ print(f"✅ {tab_name}: Running on {remote_name}")
69
+ if cmd_status.get("processes"):
70
+ for proc in cmd_status["processes"][:2]: # Show first 2 processes
71
+ print(f" └─ PID {proc['pid']}: {proc['name']} ({proc['status']})")
72
+ else:
73
+ print(f"❌ {tab_name}: Not running on {remote_name}")
74
+ print(f" Command: {cmd_status.get('command', 'Unknown')}")
75
+ print()
76
+
77
+ # Summary
78
+ summary = status["summary"]
79
+ print("📊 SUMMARY:")
80
+ print(f" Remote machine: {remote_name}")
81
+ print(f" Total commands: {summary['total_commands']}")
82
+ print(f" Running: {summary['running_commands']}")
83
+ print(f" Stopped: {summary['stopped_commands']}")
84
+ print(f" Session healthy: {'✅' if summary['session_healthy'] else '❌'}")
85
+ print("=" * 60)
@@ -5,7 +5,6 @@
5
5
  # #
6
6
  # # from machineconfig.cluster.distribute import Cluster, WorkloadParams
7
7
  # from machineconfig.cluster.remote_machine import RemoteMachineConfig, RemoteMachine, CloudManager
8
- # from crocodile.file_management import Read
9
8
  # from machineconfig.cluster.templates.run_cloud import to_email_default, email_config_name_default, default_cloud
10
9
  # import click
11
10
  # # from trogon import tui