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