machineconfig 3.7__py3-none-any.whl → 7.69__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 (465) hide show
  1. machineconfig/__init__.py +0 -28
  2. machineconfig/cluster/remote/distribute.py +0 -1
  3. machineconfig/cluster/remote/file_manager.py +0 -2
  4. machineconfig/cluster/remote/script_execution.py +1 -2
  5. machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
  6. machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
  7. machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
  8. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  9. machineconfig/cluster/sessions_managers/wt_local.py +128 -330
  10. machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
  11. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  12. machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
  13. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
  14. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  15. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  16. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
  17. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  18. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  19. machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
  20. machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -172
  21. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  22. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
  23. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
  24. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
  25. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
  26. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
  27. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
  28. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
  29. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
  30. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
  31. machineconfig/jobs/{python → installer}/check_installations.py +7 -21
  32. machineconfig/jobs/installer/custom/boxes.py +61 -0
  33. machineconfig/jobs/installer/custom/gh.py +128 -0
  34. machineconfig/jobs/{python_custom_installers → installer/custom}/hx.py +84 -18
  35. machineconfig/jobs/installer/custom_dev/alacritty.py +86 -0
  36. machineconfig/jobs/installer/custom_dev/brave.py +82 -0
  37. machineconfig/jobs/installer/custom_dev/bypass_paywall.py +59 -0
  38. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  39. machineconfig/jobs/installer/custom_dev/code.py +63 -0
  40. machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/cursor.py +7 -7
  41. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  42. machineconfig/jobs/installer/custom_dev/espanso.py +117 -0
  43. machineconfig/jobs/installer/custom_dev/goes.py +68 -0
  44. machineconfig/jobs/installer/custom_dev/lvim.py +89 -0
  45. machineconfig/jobs/installer/custom_dev/nerdfont.py +111 -0
  46. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +149 -0
  47. machineconfig/jobs/installer/custom_dev/redis.py +88 -0
  48. machineconfig/jobs/installer/custom_dev/sysabc.py +145 -0
  49. machineconfig/jobs/installer/custom_dev/wezterm.py +92 -0
  50. machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/winget.py +2 -3
  51. machineconfig/jobs/installer/installer_data.json +3440 -0
  52. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/brave.sh +4 -14
  53. machineconfig/jobs/{python_custom_installers/scripts/linux/warp-cli.sh → installer/linux_scripts/cloudflare_warp_cli.sh} +5 -17
  54. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker.sh +6 -18
  55. machineconfig/jobs/installer/linux_scripts/docker_start.sh +37 -0
  56. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/edge.sh +3 -11
  57. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  58. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/nerdfont.sh +5 -17
  59. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  60. machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
  61. machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
  62. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/redis.sh +6 -17
  63. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/vscode.sh +5 -17
  64. machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/wezterm.sh +4 -12
  65. machineconfig/jobs/installer/package_groups.py +255 -0
  66. machineconfig/logger.py +0 -1
  67. machineconfig/profile/backup.toml +49 -0
  68. machineconfig/profile/bash_shell_profiles.md +11 -0
  69. machineconfig/profile/create_helper.py +74 -0
  70. machineconfig/profile/create_links.py +288 -0
  71. machineconfig/profile/create_links_export.py +100 -0
  72. machineconfig/profile/create_shell_profile.py +136 -0
  73. machineconfig/profile/mapper.toml +258 -0
  74. machineconfig/scripts/__init__.py +0 -4
  75. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  76. machineconfig/scripts/linux/wrap_mcfg +47 -0
  77. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  78. machineconfig/scripts/python/agents.py +198 -0
  79. machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
  80. machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
  81. machineconfig/scripts/python/ai/generate_files.py +307 -42
  82. machineconfig/scripts/python/ai/{mcinit.py → initai.py} +3 -38
  83. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +114 -0
  84. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +88 -22
  85. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  86. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -1
  87. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  88. machineconfig/scripts/python/ai/solutions/gemini/settings.json +1 -1
  89. machineconfig/scripts/python/ai/solutions/generic.py +27 -4
  90. machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
  91. machineconfig/scripts/python/cloud.py +29 -0
  92. machineconfig/scripts/python/croshell.py +129 -198
  93. machineconfig/scripts/python/define.py +31 -0
  94. machineconfig/scripts/python/devops.py +45 -131
  95. machineconfig/scripts/python/devops_navigator.py +6 -0
  96. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  97. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  98. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  99. machineconfig/scripts/python/fire_jobs.py +166 -235
  100. machineconfig/scripts/python/ftpx.py +164 -100
  101. machineconfig/scripts/python/helpers/ast_search.py +74 -0
  102. machineconfig/scripts/python/helpers/repo_rag.py +325 -0
  103. machineconfig/scripts/python/helpers/symantic_search.py +25 -0
  104. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  105. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
  106. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  107. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
  108. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  109. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
  110. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
  111. machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
  112. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  113. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  114. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  115. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +52 -39
  116. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +13 -18
  117. machineconfig/scripts/python/helpers_cloud/cloud_sync.py +81 -0
  118. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
  119. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  120. machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -1
  121. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +32 -20
  122. machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
  123. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  124. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  125. machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
  126. machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
  127. machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
  128. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  129. machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
  130. machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
  131. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  132. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  133. machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
  134. machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
  135. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  136. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  137. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
  138. machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -2
  139. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -89
  140. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
  141. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
  142. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  143. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
  144. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
  145. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
  146. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  147. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  148. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  149. machineconfig/scripts/python/helpers_navigator/command_tree.py +620 -0
  150. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  151. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  152. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  153. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  154. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  155. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
  156. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  157. machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
  158. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
  159. machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
  160. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  161. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
  162. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  163. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  164. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
  165. machineconfig/scripts/python/helpers_utils/download.py +152 -0
  166. machineconfig/scripts/python/helpers_utils/path.py +108 -0
  167. machineconfig/scripts/python/interactive.py +187 -0
  168. machineconfig/scripts/python/mcfg_entry.py +63 -0
  169. machineconfig/scripts/python/msearch.py +40 -0
  170. machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
  171. machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
  172. machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
  173. machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
  174. machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
  175. machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
  176. machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
  177. machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
  178. machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
  179. machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -51
  180. machineconfig/scripts/python/nw/wsl_windows_transfer.py +67 -0
  181. machineconfig/scripts/python/sessions.py +167 -0
  182. machineconfig/scripts/python/terminal.py +127 -0
  183. machineconfig/scripts/python/utils.py +66 -0
  184. machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -0
  185. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  186. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  187. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  188. machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
  189. machineconfig/settings/broot/br.sh +0 -4
  190. machineconfig/settings/broot/conf.toml +1 -1
  191. machineconfig/settings/helix/config.toml +16 -0
  192. machineconfig/settings/helix/languages.toml +13 -4
  193. machineconfig/settings/helix/yazi-picker.sh +12 -0
  194. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  195. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  196. machineconfig/settings/lf/linux/lfrc +10 -12
  197. machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
  198. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  199. machineconfig/settings/lf/windows/lfrc +18 -38
  200. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  201. machineconfig/settings/linters/.ruff.toml +1 -1
  202. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  203. machineconfig/settings/marimo/marimo.toml +80 -0
  204. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  205. machineconfig/settings/pistol/pistol.conf +1 -1
  206. machineconfig/settings/shells/bash/init.sh +55 -31
  207. machineconfig/settings/shells/nushell/config.nu +1 -34
  208. machineconfig/settings/shells/nushell/init.nu +127 -0
  209. machineconfig/settings/shells/pwsh/init.ps1 +61 -43
  210. machineconfig/settings/shells/starship/starship.toml +16 -0
  211. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  212. machineconfig/settings/shells/wt/settings.json +32 -17
  213. machineconfig/settings/shells/zsh/init.sh +89 -0
  214. machineconfig/settings/svim/linux/init.toml +0 -4
  215. machineconfig/settings/svim/windows/init.toml +0 -3
  216. machineconfig/settings/yazi/init.lua +57 -0
  217. machineconfig/settings/yazi/keymap_linux.toml +79 -0
  218. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  219. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  220. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  221. machineconfig/settings/yazi/yazi.toml +14 -1
  222. machineconfig/setup_linux/__init__.py +10 -0
  223. machineconfig/setup_linux/apps_desktop.sh +89 -0
  224. machineconfig/setup_linux/apps_gui.sh +64 -0
  225. machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
  226. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  227. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  228. machineconfig/setup_linux/uv.sh +15 -0
  229. machineconfig/setup_linux/web_shortcuts/interactive.sh +28 -203
  230. machineconfig/setup_mac/__init__.py +16 -0
  231. machineconfig/setup_mac/apps_gui.sh +248 -0
  232. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  233. machineconfig/setup_mac/uv.sh +36 -0
  234. machineconfig/setup_windows/__init__.py +8 -0
  235. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  236. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  237. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  238. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  239. machineconfig/setup_windows/uv.ps1 +17 -0
  240. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -189
  241. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  242. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
  243. machineconfig/utils/accessories.py +52 -12
  244. machineconfig/utils/cloud/onedrive/README.md +139 -0
  245. machineconfig/utils/code.py +140 -93
  246. machineconfig/utils/files/art/fat_croco.txt +10 -0
  247. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  248. machineconfig/utils/files/art/happy_croco.txt +22 -0
  249. machineconfig/utils/files/art/water_croco.txt +11 -0
  250. machineconfig/utils/files/ascii_art.py +118 -0
  251. machineconfig/utils/files/dbms.py +257 -0
  252. machineconfig/utils/files/headers.py +68 -0
  253. machineconfig/utils/files/ouch/decompress.py +45 -0
  254. machineconfig/utils/files/read.py +95 -0
  255. machineconfig/utils/installer_utils/github_release_bulk.py +188 -0
  256. machineconfig/utils/installer_utils/install_from_url.py +180 -0
  257. machineconfig/utils/installer_utils/installer_class.py +239 -316
  258. machineconfig/utils/installer_utils/installer_cli.py +186 -0
  259. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +90 -5
  260. machineconfig/utils/installer_utils/installer_runner.py +191 -0
  261. machineconfig/utils/io.py +77 -24
  262. machineconfig/utils/links.py +309 -100
  263. machineconfig/utils/meta.py +255 -0
  264. machineconfig/utils/notifications.py +1 -1
  265. machineconfig/utils/options.py +19 -47
  266. machineconfig/utils/path_extended.py +111 -121
  267. machineconfig/utils/path_helper.py +75 -22
  268. machineconfig/utils/procs.py +50 -74
  269. machineconfig/utils/scheduler.py +94 -97
  270. machineconfig/utils/scheduling.py +0 -3
  271. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
  272. machineconfig/utils/schemas/installer/installer_types.py +28 -6
  273. machineconfig/utils/schemas/layouts/layout_types.py +34 -1
  274. machineconfig/utils/source_of_truth.py +3 -6
  275. machineconfig/utils/ssh.py +742 -254
  276. machineconfig/utils/ssh_utils/utils.py +0 -0
  277. machineconfig/utils/terminal.py +3 -140
  278. machineconfig/utils/tst.py +20 -0
  279. machineconfig/utils/upgrade_packages.py +109 -28
  280. machineconfig/utils/ve.py +13 -5
  281. machineconfig-7.69.dist-info/METADATA +124 -0
  282. machineconfig-7.69.dist-info/RECORD +454 -0
  283. machineconfig-7.69.dist-info/entry_points.txt +15 -0
  284. machineconfig/cluster/templates/cli_click.py +0 -102
  285. machineconfig/cluster/templates/cli_gooey.py +0 -115
  286. machineconfig/cluster/templates/utils.py +0 -51
  287. machineconfig/jobs/linux/msc/cli_agents.sh +0 -32
  288. machineconfig/jobs/python/create_bootable_media.py +0 -16
  289. machineconfig/jobs/python/python_cargo_build_share.py +0 -59
  290. machineconfig/jobs/python/python_ve_symlink.py +0 -29
  291. machineconfig/jobs/python/tasks.py +0 -3
  292. machineconfig/jobs/python/vscode/api.py +0 -48
  293. machineconfig/jobs/python/vscode/link_ve.py +0 -63
  294. machineconfig/jobs/python/vscode/select_interpreter.py +0 -87
  295. machineconfig/jobs/python/vscode/sync_code.py +0 -58
  296. machineconfig/jobs/python_custom_installers/archive/ngrok.py +0 -63
  297. machineconfig/jobs/python_custom_installers/dev/aider.py +0 -37
  298. machineconfig/jobs/python_custom_installers/dev/alacritty.py +0 -65
  299. machineconfig/jobs/python_custom_installers/dev/brave.py +0 -71
  300. machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +0 -50
  301. machineconfig/jobs/python_custom_installers/dev/code.py +0 -51
  302. machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -78
  303. machineconfig/jobs/python_custom_installers/dev/espanso.py +0 -90
  304. machineconfig/jobs/python_custom_installers/dev/goes.py +0 -55
  305. machineconfig/jobs/python_custom_installers/dev/lvim.py +0 -77
  306. machineconfig/jobs/python_custom_installers/dev/nerdfont.py +0 -68
  307. machineconfig/jobs/python_custom_installers/dev/redis.py +0 -65
  308. machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +0 -31
  309. machineconfig/jobs/python_custom_installers/dev/wezterm.py +0 -70
  310. machineconfig/jobs/python_custom_installers/docker.py +0 -74
  311. machineconfig/jobs/python_custom_installers/gh.py +0 -97
  312. machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +0 -45
  313. machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +0 -49
  314. machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +0 -85
  315. machineconfig/jobs/python_custom_installers/warp-cli.py +0 -71
  316. machineconfig/jobs/python_generic_installers/config.json +0 -603
  317. machineconfig/jobs/python_generic_installers/config.json.bak +0 -414
  318. machineconfig/jobs/python_generic_installers/dev/config.archive.json +0 -18
  319. machineconfig/jobs/python_generic_installers/dev/config.json +0 -825
  320. machineconfig/jobs/python_generic_installers/dev/config.json.bak +0 -565
  321. machineconfig/jobs/python_linux_installers/archive/config.json +0 -18
  322. machineconfig/jobs/python_linux_installers/archive/config.json.bak +0 -10
  323. machineconfig/jobs/python_linux_installers/config.json +0 -145
  324. machineconfig/jobs/python_linux_installers/config.json.bak +0 -110
  325. machineconfig/jobs/python_linux_installers/dev/config.json +0 -276
  326. machineconfig/jobs/python_linux_installers/dev/config.json.bak +0 -206
  327. machineconfig/jobs/python_windows_installers/archive/file.json +0 -11
  328. machineconfig/jobs/python_windows_installers/config.json +0 -82
  329. machineconfig/jobs/python_windows_installers/config.json.bak +0 -56
  330. machineconfig/jobs/python_windows_installers/dev/config.json +0 -4
  331. machineconfig/jobs/python_windows_installers/dev/config.json.bak +0 -3
  332. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  333. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  334. machineconfig/jobs/windows/startup_file.cmd +0 -2
  335. machineconfig/profile/create.py +0 -169
  336. machineconfig/profile/shell.py +0 -176
  337. machineconfig/scripts/cloud/init.sh +0 -119
  338. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  339. machineconfig/scripts/linux/cloud_copy +0 -2
  340. machineconfig/scripts/linux/cloud_mount +0 -2
  341. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  342. machineconfig/scripts/linux/cloud_sync +0 -2
  343. machineconfig/scripts/linux/croshell +0 -3
  344. machineconfig/scripts/linux/devops +0 -2
  345. machineconfig/scripts/linux/fire +0 -2
  346. machineconfig/scripts/linux/fire_agents +0 -2
  347. machineconfig/scripts/linux/ftpx +0 -2
  348. machineconfig/scripts/linux/fzf2g +0 -21
  349. machineconfig/scripts/linux/fzffg +0 -25
  350. machineconfig/scripts/linux/gh_models +0 -2
  351. machineconfig/scripts/linux/kill_process +0 -2
  352. machineconfig/scripts/linux/mcinit +0 -2
  353. machineconfig/scripts/linux/programs +0 -21
  354. machineconfig/scripts/linux/repos +0 -2
  355. machineconfig/scripts/linux/scheduler +0 -2
  356. machineconfig/scripts/linux/share_smb +0 -1
  357. machineconfig/scripts/linux/start_slidev +0 -2
  358. machineconfig/scripts/linux/start_terminals +0 -3
  359. machineconfig/scripts/linux/warp-cli.sh +0 -122
  360. machineconfig/scripts/linux/wifi_conn +0 -2
  361. machineconfig/scripts/linux/z_ls +0 -104
  362. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  363. machineconfig/scripts/python/archive/im2text.py +0 -34
  364. machineconfig/scripts/python/archive/tmate_conn.py +0 -41
  365. machineconfig/scripts/python/archive/tmate_start.py +0 -44
  366. machineconfig/scripts/python/cloud_repo_sync.py +0 -192
  367. machineconfig/scripts/python/cloud_sync.py +0 -85
  368. machineconfig/scripts/python/devops_devapps_install.py +0 -202
  369. machineconfig/scripts/python/devops_update_repos.py +0 -180
  370. machineconfig/scripts/python/dotfile.py +0 -52
  371. machineconfig/scripts/python/fire_agents.py +0 -176
  372. machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
  373. machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
  374. machineconfig/scripts/python/fire_jobs_args_helper.py +0 -84
  375. machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -66
  376. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  377. machineconfig/scripts/python/gh_models.py +0 -104
  378. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
  379. machineconfig/scripts/python/repos.py +0 -160
  380. machineconfig/scripts/python/snapshot.py +0 -25
  381. machineconfig/scripts/python/start_terminals.py +0 -121
  382. machineconfig/scripts/python/wsl_windows_transfer.py +0 -72
  383. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  384. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  385. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  386. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  387. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  388. machineconfig/scripts/windows/croshell.ps1 +0 -1
  389. machineconfig/scripts/windows/devops.ps1 +0 -1
  390. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  391. machineconfig/scripts/windows/fire.ps1 +0 -1
  392. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  393. machineconfig/scripts/windows/gpt.ps1 +0 -1
  394. machineconfig/scripts/windows/grep.ps1 +0 -2
  395. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  396. machineconfig/scripts/windows/mcinit.ps1 +0 -1
  397. machineconfig/scripts/windows/nano.ps1 +0 -3
  398. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  399. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  400. machineconfig/scripts/windows/repos.ps1 +0 -1
  401. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  402. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  403. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  404. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  405. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  406. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  407. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  408. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  409. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  410. machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
  411. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  412. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  413. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  414. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  415. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  416. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  417. machineconfig/setup_windows/wt_and_pwsh/install_nerd_fonts.py +0 -100
  418. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  419. machineconfig/utils/installer.py +0 -255
  420. machineconfig-3.7.dist-info/METADATA +0 -165
  421. machineconfig-3.7.dist-info/RECORD +0 -432
  422. machineconfig-3.7.dist-info/entry_points.txt +0 -18
  423. machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
  424. machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
  425. machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
  426. machineconfig/jobs/{python → installer}/__init__.py +0 -0
  427. machineconfig/jobs/{python_custom_installers → installer/custom_dev}/__init__.py +0 -0
  428. machineconfig/{setup_windows/wt_and_pwsh → jobs/installer/powershell_scripts}/install_fonts.ps1 +0 -0
  429. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  430. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  431. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  432. machineconfig/{jobs/python_generic_installers → scripts/python/helpers_agents}/__init__.py +0 -0
  433. machineconfig/{jobs/python_linux_installers → scripts/python/helpers_agents/agentic_frameworks}/__init__.py +0 -0
  434. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  435. machineconfig/{jobs/python_linux_installers/dev → scripts/python/helpers_cloud}/__init__.py +0 -0
  436. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  437. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  438. /machineconfig/{jobs/python_windows_installers → scripts/python/helpers_croshell}/__init__.py +0 -0
  439. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  440. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  441. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  442. /machineconfig/{jobs/python_windows_installers/archive → scripts/python/helpers_devops}/__init__.py +0 -0
  443. /machineconfig/{jobs/python_windows_installers/dev → scripts/python/helpers_devops/themes}/__init__.py +0 -0
  444. /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  445. /machineconfig/scripts/python/{helpers → helpers_fire_command}/__init__.py +0 -0
  446. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
  447. /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
  448. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
  449. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
  450. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
  451. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_sessions/__init__.py} +0 -0
  452. /machineconfig/scripts/{windows/share_nfs.ps1 → python/nw/__init__.py} +0 -0
  453. /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
  454. /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
  455. /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
  456. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  457. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  458. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  459. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  460. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  461. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  462. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  463. /machineconfig/{settings/yazi/keymap.toml → utils/files/ouch/__init__.py} +0 -0
  464. {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/WHEEL +0 -0
  465. {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/top_level.txt +0 -0
@@ -2,169 +2,79 @@
2
2
  """
3
3
  Windows Terminal local layout generator and session manager.
4
4
  Equivalent to zellij_local.py but for Windows Terminal.
5
+
6
+ https://github.com/ruby9455/app_management/tree/main/app_management
7
+
5
8
  """
6
9
 
7
- import shlex
8
10
  import subprocess
9
- import random
10
- import string
11
- import json
12
- from typing import Dict, List, Optional, Any
11
+ import platform
12
+ from typing import Optional, Any
13
13
  from pathlib import Path
14
14
  import logging
15
15
 
16
- from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig, TabConfig
16
+ from rich.console import Console
17
+ from rich.panel import Panel
18
+ from rich.table import Table
19
+
20
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
21
+ from machineconfig.cluster.sessions_managers.wt_utils.wt_helpers import (
22
+ generate_random_suffix,
23
+ # escape_for_wt,
24
+ validate_layout_config,
25
+ generate_wt_command_string,
26
+ check_wt_session_status,
27
+ check_command_status,
28
+ )
17
29
 
18
30
  logging.basicConfig(level=logging.INFO)
19
31
  logger = logging.getLogger(__name__)
20
- TMP_LAYOUT_DIR = Path.home().joinpath("tmp_results", "session_manager", "wt", "layout_manager")
32
+ console = Console()
21
33
 
34
+ # Check if we're on Windows
35
+ IS_WINDOWS = platform.system().lower() == "windows"
36
+ POWERSHELL_CMD = "powershell" if IS_WINDOWS else "pwsh" # Use pwsh on non-Windows systems
37
+ TMP_LAYOUT_DIR = Path.home() / "tmp_results" / "wt_layouts"
22
38
 
23
- class WTLayoutGenerator:
24
- def __init__(self):
25
- self.session_name: Optional[str] = None
26
- self.layout_config: Optional[LayoutConfig] = None # Store the complete layout config
27
- self.script_path: Optional[str] = None # Store the full path to the PowerShell script
28
-
29
- @staticmethod
30
- def _generate_random_suffix(length: int) -> str:
31
- """Generate a random string suffix for unique PowerShell script names."""
32
- return "".join(random.choices(string.ascii_lowercase + string.digits, k=length))
33
-
34
- @staticmethod
35
- def _parse_command(command: str) -> tuple[str, List[str]]:
36
- try:
37
- parts = shlex.split(command)
38
- if not parts:
39
- raise ValueError("Empty command provided")
40
- return parts[0], parts[1:] if len(parts) > 1 else []
41
- except ValueError as e:
42
- logger.error(f"Error parsing command '{command}': {e}")
43
- parts = command.split()
44
- return parts[0] if parts else "", parts[1:] if len(parts) > 1 else []
45
-
46
- @staticmethod
47
- def _escape_for_wt(text: str) -> str:
48
- """Escape text for use in Windows Terminal commands."""
49
- # Windows Terminal uses PowerShell-style escaping
50
- text = text.replace('"', '""') # Escape quotes for PowerShell
51
- if " " in text or ";" in text or "&" in text or "|" in text:
52
- return f'"{text}"'
53
- return text
54
-
55
- @staticmethod
56
- def _create_tab_command(tab_config: TabConfig, is_first_tab: bool) -> str:
57
- """Create a Windows Terminal tab command string from tab config."""
58
- tab_name = tab_config["tabName"]
59
- cwd = tab_config["startDir"]
60
- command = tab_config["command"]
61
-
62
- # Convert paths to Windows format if needed
63
- if cwd.startswith("~/"):
64
- cwd = cwd.replace("~/", f"{Path.home()}/")
65
- elif cwd == "~":
66
- cwd = str(Path.home())
67
-
68
- # Build the wt command parts
69
- tab_parts = []
70
-
71
- if not is_first_tab:
72
- tab_parts.append("new-tab")
73
-
74
- # Add starting directory
75
- tab_parts.extend(["-d", WTLayoutGenerator._escape_for_wt(cwd)])
76
-
77
- # Add tab title
78
- tab_parts.extend(["--title", WTLayoutGenerator._escape_for_wt(tab_name)])
79
-
80
- # Add the command to execute
81
- tab_parts.append(WTLayoutGenerator._escape_for_wt(command))
82
-
83
- return " ".join(tab_parts)
84
-
85
- @staticmethod
86
- def _validate_layout_config(layout_config: LayoutConfig) -> None:
87
- """Validate layout configuration format and content."""
88
- if not layout_config["layoutTabs"]:
89
- raise ValueError("Layout must contain at least one tab")
90
- for tab in layout_config["layoutTabs"]:
91
- if not tab["tabName"].strip():
92
- raise ValueError(f"Invalid tab name: {tab['tabName']}")
93
- if not tab["command"].strip():
94
- raise ValueError(f"Invalid command for tab '{tab['tabName']}': {tab['command']}")
95
- if not tab["startDir"].strip():
96
- raise ValueError(f"Invalid startDir for tab '{tab['tabName']}': {tab['startDir']}")
97
-
98
- def create_wt_layout(self, layout_config: LayoutConfig, output_dir: Optional[str]) -> str:
99
- WTLayoutGenerator._validate_layout_config(layout_config)
100
- logger.info(f"Creating Windows Terminal layout '{layout_config['layoutName']}' with {len(layout_config['layoutTabs'])} tabs")
101
-
102
- # Store session name and layout config for status checking
103
- self.session_name = layout_config["layoutName"]
104
- self.layout_config = layout_config.copy()
105
-
106
- # Generate Windows Terminal command
107
- wt_command = self._generate_wt_command_string(layout_config, self.session_name)
108
-
109
- try:
110
- random_suffix = WTLayoutGenerator._generate_random_suffix(8)
111
- if output_dir:
112
- output_path = Path(output_dir)
113
- output_path.mkdir(parents=True, exist_ok=True)
114
- script_file = output_path / f"wt_layout_{random_suffix}.ps1"
115
- else:
116
- # Use the predefined TMP_LAYOUT_DIR for temporary files
117
- TMP_LAYOUT_DIR.mkdir(parents=True, exist_ok=True)
118
- script_file = TMP_LAYOUT_DIR / f"wt_layout_{self.session_name}_{random_suffix}.ps1"
119
39
 
120
- # Create PowerShell script
121
- text = f"""# Windows Terminal layout for {self.session_name}
40
+ class WTLayoutGenerator:
41
+ def __init__(self, layout_config: LayoutConfig, session_name: str):
42
+ self.session_name: str = session_name
43
+ self.layout_config: LayoutConfig = layout_config.copy()
44
+ self.script_path: Optional[str] = None
45
+
46
+ def create_layout_file(self) -> bool:
47
+ """Create Windows Terminal layout file and return success status."""
48
+ validate_layout_config(self.layout_config)
49
+ tab_count = len(self.layout_config['layoutTabs'])
50
+ layout_name = self.layout_config['layoutName']
51
+ console.print(f"[bold cyan]📋 Creating Windows Terminal layout[/bold cyan] [bright_green]'{layout_name}' with {tab_count} tabs[/bright_green]")
52
+
53
+ for tab in self.layout_config['layoutTabs']:
54
+ console.print(f" [yellow]→[/yellow] [bold]{tab['tabName']}[/bold] [dim]in[/dim] [blue]{tab['startDir']}[/blue]")
55
+
56
+ wt_command = generate_wt_command_string(self.layout_config, self.session_name)
57
+
58
+ random_suffix = generate_random_suffix(8)
59
+ script_content = f"""# Windows Terminal layout for {self.session_name}
122
60
  # Generated with random suffix: {random_suffix}
123
61
  {wt_command}
124
62
  """
125
- script_file.write_text(text, encoding="utf-8")
126
-
127
- self.script_path = str(script_file.absolute())
128
- logger.info(f"Windows Terminal PowerShell script created: {self.script_path}")
129
- return self.script_path
130
- except OSError as e:
131
- logger.error(f"Failed to create PowerShell script: {e}")
132
- raise
133
-
134
- def _generate_wt_command_string(self, layout_config: LayoutConfig, window_name: str) -> str:
135
- """Generate complete Windows Terminal command string."""
136
- # Start building the wt command
137
- wt_parts = ["wt"]
138
-
139
- # Add window name
140
- wt_parts.extend(["-w", WTLayoutGenerator._escape_for_wt(window_name)])
141
-
142
- # Add tabs
143
- tab_commands = []
144
- for i, tab in enumerate(layout_config["layoutTabs"]):
145
- is_first = i == 0
146
- tab_cmd = self._create_tab_command(tab, is_first)
147
- tab_commands.append(tab_cmd)
148
-
149
- # Join all parts with semicolons (Windows Terminal command separator)
150
- if tab_commands:
151
- if len(tab_commands) == 1:
152
- # Single tab - just add to the main command
153
- wt_parts.extend(tab_commands[0].split())
154
- else:
155
- # Multiple tabs - join with semicolons
156
- wt_parts.append(tab_commands[0]) # First tab
157
- for tab_cmd in tab_commands[1:]:
158
- wt_parts.extend([";", tab_cmd])
63
+ tmp_dir = Path(TMP_LAYOUT_DIR)
64
+ tmp_dir.mkdir(parents=True, exist_ok=True)
65
+ script_file = tmp_dir / f"wt_layout_{self.session_name}_{random_suffix}.ps1"
66
+ script_file.write_text(script_content, encoding="utf-8")
67
+ self.script_path = str(script_file.absolute())
159
68
 
160
- return " ".join(wt_parts)
69
+ console.print(f"[bold green]✅ Layout created successfully:[/bold green] [cyan]{self.script_path}[/cyan]")
70
+ return True
161
71
 
162
72
  def get_wt_layout_preview(self, layout_config: LayoutConfig) -> str:
163
73
  """Generate preview of the Windows Terminal command that would be created."""
164
- WTLayoutGenerator._validate_layout_config(layout_config)
165
- return self._generate_wt_command_string(layout_config, "preview")
74
+ validate_layout_config(layout_config)
75
+ return generate_wt_command_string(layout_config, "preview")
166
76
 
167
- def check_all_commands_status(self) -> Dict[str, Dict[str, Any]]:
77
+ def check_all_commands_status(self) -> dict[str, dict[str, Any]]:
168
78
  if not self.layout_config:
169
79
  logger.warning("No layout config tracked. Make sure to create a layout first.")
170
80
  return {}
@@ -172,142 +82,13 @@ class WTLayoutGenerator:
172
82
  status_report = {}
173
83
  for tab in self.layout_config["layoutTabs"]:
174
84
  tab_name = tab["tabName"]
175
- status_report[tab_name] = WTLayoutGenerator.check_command_status(tab_name, self.layout_config)
85
+ status_report[tab_name] = check_command_status(tab_name, self.layout_config)
176
86
 
177
87
  return status_report
178
88
 
179
- @staticmethod
180
- def check_wt_session_status(session_name: str) -> Dict[str, Any]:
181
- try:
182
- # Check for Windows Terminal processes
183
- wt_check_cmd = ["powershell", "-Command", "Get-Process -Name 'WindowsTerminal' -ErrorAction SilentlyContinue | Select-Object Id, ProcessName, StartTime, MainWindowTitle | ConvertTo-Json -Depth 2"]
184
-
185
- result = subprocess.run(wt_check_cmd, capture_output=True, text=True, timeout=10)
186
-
187
- if result.returncode == 0:
188
- output = result.stdout.strip()
189
- if output and output != "":
190
- try:
191
- import json
192
-
193
- processes = json.loads(output)
194
- if not isinstance(processes, list):
195
- processes = [processes]
196
-
197
- # Look for windows that might belong to our session
198
- session_windows = []
199
- for proc in processes:
200
- window_title = proc.get("MainWindowTitle", "")
201
- if session_name in window_title or not window_title:
202
- session_windows.append(proc)
203
-
204
- return {"wt_running": True, "session_exists": len(session_windows) > 0, "session_name": session_name, "all_windows": processes, "session_windows": session_windows}
205
- except Exception as e:
206
- return {"wt_running": True, "session_exists": False, "error": f"Failed to parse process info: {e}", "session_name": session_name}
207
- else:
208
- return {"wt_running": False, "session_exists": False, "session_name": session_name, "all_windows": []}
209
- else:
210
- return {"wt_running": False, "error": result.stderr, "session_name": session_name}
211
-
212
- except subprocess.TimeoutExpired:
213
- return {"wt_running": False, "error": "Timeout while checking Windows Terminal processes", "session_name": session_name}
214
- except FileNotFoundError:
215
- return {"wt_running": False, "error": "PowerShell not found in PATH", "session_name": session_name}
216
- except Exception as e:
217
- return {"wt_running": False, "error": str(e), "session_name": session_name}
218
-
219
- @staticmethod
220
- def check_command_status(tab_name: str, layout_config: LayoutConfig) -> Dict[str, Any]:
221
- """Check if a command is running by looking for processes."""
222
- # Find the tab with the given name
223
- tab_config = None
224
- for tab in layout_config["layoutTabs"]:
225
- if tab["tabName"] == tab_name:
226
- tab_config = tab
227
- break
228
-
229
- if tab_config is None:
230
- return {"status": "unknown", "error": f"Tab '{tab_name}' not found in layout config", "running": False, "pid": None, "command": None}
231
-
232
- command = tab_config["command"]
233
-
234
- try:
235
- # Create PowerShell script to check for processes
236
- cmd_parts = [part for part in command.split() if len(part) > 2]
237
- primary_cmd = cmd_parts[0] if cmd_parts else ""
238
-
239
- ps_script = f"""
240
- $targetCommand = '{command.replace("'", "''")}'
241
- $cmdParts = @({", ".join([f"'{part}'" for part in cmd_parts])})
242
- $primaryCmd = '{primary_cmd}'
243
- $currentPid = $PID
244
- $matchingProcesses = @()
245
-
246
- Get-Process | ForEach-Object {{
247
- try {{
248
- if ($_.Id -eq $currentPid) {{ return }}
249
-
250
- $cmdline = ""
251
- try {{
252
- $cmdline = (Get-WmiObject Win32_Process -Filter "ProcessId = $($_.Id)").CommandLine
253
- }} catch {{
254
- $cmdline = $_.ProcessName
255
- }}
256
-
257
- if ($cmdline -and $cmdline -ne "") {{
258
- if ($cmdline -like "*PowerShell*" -and $cmdline -like "*Get-Process*") {{ return }}
259
-
260
- $matchesPrimary = $cmdline -like "*$primaryCmd*" -and $primaryCmd -ne "powershell"
261
- $matchCount = 0
262
- foreach ($part in $cmdParts[1..($cmdParts.Length-1)]) {{
263
- if ($cmdline -like "*$part*") {{ $matchCount++ }}
264
- }}
265
-
266
- if ($matchesPrimary -and $matchCount -ge 1) {{
267
- $procInfo = @{{
268
- "pid" = $_.Id
269
- "name" = $_.ProcessName
270
- "cmdline" = $cmdline
271
- "status" = $_.Status
272
- "start_time" = $_.StartTime
273
- }} | ConvertTo-Json -Compress
274
- Write-Output $procInfo
275
- }}
276
- }}
277
- }} catch {{
278
- # Ignore processes we can't access
279
- }}
280
- }}
281
- """
282
-
283
- result = subprocess.run(["powershell", "-Command", ps_script], capture_output=True, text=True, timeout=15)
284
-
285
- if result.returncode == 0:
286
- output_lines = [line.strip() for line in result.stdout.strip().split("\n") if line.strip()]
287
- matching_processes = []
288
-
289
- for line in output_lines:
290
- if line.startswith("{") and line.endswith("}"):
291
- try:
292
- proc_info = json.loads(line)
293
- matching_processes.append(proc_info)
294
- except json.JSONDecodeError:
295
- continue
296
-
297
- if matching_processes:
298
- return {"status": "running", "running": True, "processes": matching_processes, "command": command, "tab_name": tab_name}
299
- else:
300
- return {"status": "not_running", "running": False, "processes": [], "command": command, "tab_name": tab_name}
301
- else:
302
- return {"status": "error", "error": f"Command failed: {result.stderr}", "running": False, "command": command, "tab_name": tab_name}
303
-
304
- except Exception as e:
305
- logger.error(f"Error checking command status for tab '{tab_name}': {e}")
306
- return {"status": "error", "error": str(e), "running": False, "command": command, "tab_name": tab_name}
307
-
308
- def get_status_report(self) -> Dict[str, Any]:
89
+ def get_status_report(self) -> dict[str, Any]:
309
90
  """Get status report for this layout including Windows Terminal and commands."""
310
- wt_status = WTLayoutGenerator.check_wt_session_status(self.session_name or "default")
91
+ wt_status = check_wt_session_status(self.session_name or "default")
311
92
  commands_status = self.check_all_commands_status()
312
93
 
313
94
  running_count = sum(1 for status in commands_status.values() if status.get("running", False))
@@ -326,64 +107,87 @@ Get-Process | ForEach-Object {{
326
107
  commands = status["commands"]
327
108
  summary = status["summary"]
328
109
 
329
- print("=" * 80)
330
- print("🖥️ WINDOWS TERMINAL LAYOUT STATUS REPORT")
331
- print("=" * 80)
110
+ console.print()
111
+ console.print(Panel.fit("WINDOWS TERMINAL LAYOUT STATUS REPORT", style="bold cyan"))
332
112
 
333
113
  # Windows Terminal session status
334
- print(f"🪟 Session: {self.session_name}")
335
114
  if wt_session.get("wt_running", False):
336
115
  if wt_session.get("session_exists", False):
337
116
  session_windows = wt_session.get("session_windows", [])
338
117
  all_windows = wt_session.get("all_windows", [])
339
- print("✅ Windows Terminal is running")
340
- print(f" Session windows: {len(session_windows)}")
341
- print(f" Total WT windows: {len(all_windows)}")
118
+ console.print(f"[bold green]✅ Windows Terminal session[/bold green] [yellow]'{self.session_name}'[/yellow] [green]is running[/green]")
119
+ console.print(f" Session windows: {len(session_windows)}")
120
+ console.print(f" Total WT windows: {len(all_windows)}")
342
121
  else:
343
- print("⚠️ Windows Terminal is running but no session windows found")
122
+ console.print(f"[bold yellow]⚠️ Windows Terminal is running but session[/bold yellow] [yellow]'{self.session_name}'[/yellow] [yellow]not found[/yellow]")
344
123
  else:
345
124
  error_msg = wt_session.get("error", "Unknown error")
346
- print(f"❌ Windows Terminal session issue: {error_msg}")
125
+ console.print(f"[bold red]❌ Windows Terminal session issue:[/bold red] [red]{error_msg}[/red]")
347
126
 
348
- print()
127
+ console.print()
128
+
129
+ # Commands status table
130
+ table = Table(title="📋 COMMAND STATUS", show_header=True, header_style="bold magenta")
131
+ table.add_column("Tab", style="cyan", no_wrap=True)
132
+ table.add_column("Status", justify="center")
133
+ table.add_column("PID", justify="center", style="dim")
134
+ table.add_column("Command", style="green", max_width=40)
349
135
 
350
- # Commands in this layout
351
- print(f"📋 COMMANDS ({summary['running_commands']}/{summary['total_commands']} running):")
352
136
  for tab_name, cmd_status in commands.items():
353
- status_icon = "✅" if cmd_status.get("running", False) else "❌"
354
- cmd_text = cmd_status.get("command", "Unknown")[:50]
355
- if len(cmd_status.get("command", "")) > 50:
356
- cmd_text += "..."
137
+ if cmd_status.get("running", False):
138
+ status_text = "[bold green]✅ Running[/bold green]"
139
+ processes = cmd_status.get("processes", [])
140
+ if processes:
141
+ proc = processes[0]
142
+ pid = str(proc.get("pid", "N/A"))
143
+ else:
144
+ pid = "N/A"
145
+ else:
146
+ status_text = "[bold red]❌ Stopped[/bold red]"
147
+ pid = "N/A"
357
148
 
358
- print(f" {status_icon} {tab_name}: {cmd_text}")
149
+ command = cmd_status.get("command", "Unknown")
150
+ if len(command) > 35:
151
+ command = command[:32] + "..."
359
152
 
360
- if cmd_status.get("processes"):
361
- for proc in cmd_status["processes"][:2]: # Show first 2 processes
362
- pid = proc.get("pid", "Unknown")
363
- name = proc.get("name", "Unknown")
364
- print(f" └─ PID {pid}: {name}")
365
- print()
153
+ table.add_row(tab_name, status_text, pid, command)
366
154
 
367
- print("=" * 80)
155
+ console.print(table)
156
+ console.print()
368
157
 
158
+ # Summary panel
159
+ summary_text = f"""[bold]Total commands:[/bold] {summary['total_commands']}
160
+ [green]Running:[/green] {summary['running_commands']}
161
+ [red]Stopped:[/red] {summary['stopped_commands']}
162
+ [yellow]Session healthy:[/yellow] {"✅" if summary['session_healthy'] else "❌"}"""
369
163
 
370
- def create_wt_layout(layout_config: LayoutConfig, output_dir: Optional[str]) -> str:
371
- generator = WTLayoutGenerator()
372
- return generator.create_wt_layout(layout_config, output_dir)
164
+ console.print(Panel(summary_text, title="📊 Summary", style="blue"))
373
165
 
374
166
 
375
- def run_wt_layout(layout_config: LayoutConfig) -> str:
376
- """Create and run a Windows Terminal layout."""
377
- generator = WTLayoutGenerator()
378
- script_path = generator.create_wt_layout(layout_config, None)
167
+ def create_wt_layout(layout_config: LayoutConfig, output_path: str) -> str:
168
+ session_name = layout_config["layoutName"]
169
+ generator = WTLayoutGenerator(layout_config=layout_config, session_name=session_name)
170
+ generator.create_layout_file()
171
+
172
+ if generator.script_path is None:
173
+ raise RuntimeError("Script path was not set after creating layout file")
174
+
175
+ logger.info(f"Windows Terminal PowerShell script created: {generator.script_path}")
176
+ return generator.script_path
379
177
 
178
+
179
+ def run_wt_layout(layout_config: LayoutConfig) -> None:
180
+ """Create and run a Windows Terminal layout."""
181
+ session_name = layout_config["layoutName"]
182
+ generator = WTLayoutGenerator(layout_config=layout_config, session_name=session_name)
183
+ generator.create_layout_file()
184
+ if generator.script_path is None:
185
+ raise RuntimeError("Script path was not set after creating layout file")
380
186
  # Execute the script
381
- cmd = f'powershell -ExecutionPolicy Bypass -File "{script_path}"'
187
+ cmd = f'powershell -ExecutionPolicy Bypass -File "{generator.script_path}"'
382
188
  result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
383
-
384
189
  if result.returncode == 0:
385
190
  print(f"Windows Terminal layout is running @ {layout_config['layoutName']}")
386
- return script_path
387
191
  else:
388
192
  logger.error(f"Failed to run Windows Terminal layout: {result.stderr}")
389
193
  raise RuntimeError(f"Failed to run layout: {result.stderr}")
@@ -392,7 +196,6 @@ def run_wt_layout(layout_config: LayoutConfig) -> str:
392
196
  def run_command_in_wt_tab(command: str, tab_name: str, cwd: Optional[str]) -> str:
393
197
  """Create a command to run in a new Windows Terminal tab."""
394
198
  cwd_part = f'-d "{cwd}"' if cwd else ""
395
-
396
199
  return f"""
397
200
  echo "Creating new Windows Terminal tab: {tab_name}"
398
201
  wt new-tab --title "{tab_name}" {cwd_part} "{command}"
@@ -400,29 +203,24 @@ wt new-tab --title "{tab_name}" {cwd_part} "{command}"
400
203
 
401
204
 
402
205
  if __name__ == "__main__":
403
- # Example usage with new schema
404
- sample_layout: LayoutConfig = {"layoutName": "TestLayout", "layoutTabs": [{"tabName": "Frontend", "startDir": "~/code", "command": "btm"}, {"tabName": "Monitor", "startDir": "~", "command": "lf"}]}
405
-
206
+ sample_layout: LayoutConfig = {"layoutName": "TestLayout",
207
+ "layoutTabs": [
208
+ {"tabName": "Frontend", "startDir": "~/code", "command": "btm"},
209
+ {"tabName": "Monitor", "startDir": "~", "command": "lf"}
210
+ ]}
406
211
  try:
407
- # Create layout using the generator
408
- generator = WTLayoutGenerator()
409
- script_path = generator.create_wt_layout(sample_layout, None)
410
- print(f"✅ Windows Terminal layout created: {script_path}")
411
-
412
- # Show preview
413
- preview = generator.get_wt_layout_preview(sample_layout)
414
- print(f"\n📋 Command Preview:\n{preview}")
415
-
416
- # Check status (won't find anything since we haven't run it)
417
- print("\n🔍 Current status:")
212
+ session_name = sample_layout["layoutName"]
213
+ generator = WTLayoutGenerator(layout_config=sample_layout, session_name=session_name)
214
+ generator.create_layout_file()
215
+
216
+ print(f"✅ Windows Terminal layout created: {generator.script_path}")
217
+ preview = generator.get_wt_layout_preview(generator.layout_config)
218
+ print(f"📋 Command Preview:\n{preview}")
219
+ print("🔍 Current status:")
418
220
  generator.print_status_report()
419
-
420
- # Show how to run the layout
421
- print("\n▶️ To run this layout, execute:")
422
- print(f' powershell -ExecutionPolicy Bypass -File "{script_path}"')
423
-
221
+ print("▶️ To run this layout, execute:")
222
+ print(f' powershell -ExecutionPolicy Bypass -File "{generator.script_path}"')
424
223
  except Exception as e:
425
224
  print(f"❌ Error: {e}")
426
225
  import traceback
427
-
428
226
  traceback.print_exc()