machineconfig 6.82__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 (294) hide show
  1. machineconfig/cluster/remote/cloud_manager.py +1 -1
  2. machineconfig/cluster/sessions_managers/utils/maker.py +25 -13
  3. machineconfig/cluster/sessions_managers/wt_local.py +16 -221
  4. machineconfig/cluster/sessions_managers/wt_local_manager.py +55 -193
  5. machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
  6. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  7. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  8. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  9. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  10. machineconfig/cluster/sessions_managers/zellij_local_manager.py +3 -1
  11. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
  12. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
  13. machineconfig/jobs/installer/custom/boxes.py +2 -2
  14. machineconfig/jobs/installer/custom/hx.py +75 -18
  15. machineconfig/jobs/installer/custom/yazi.py +119 -0
  16. machineconfig/jobs/installer/custom_dev/brave.py +5 -3
  17. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  18. machineconfig/jobs/installer/custom_dev/code.py +4 -1
  19. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +1 -1
  20. machineconfig/jobs/installer/custom_dev/nerdfont.py +1 -1
  21. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +27 -22
  22. machineconfig/jobs/installer/custom_dev/sysabc.py +139 -0
  23. machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
  24. machineconfig/jobs/installer/custom_dev/winget.py +10 -14
  25. machineconfig/jobs/installer/installer_data.json +1287 -216
  26. machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
  27. machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
  28. machineconfig/jobs/installer/package_groups.py +58 -89
  29. machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
  30. machineconfig/logger.py +0 -1
  31. machineconfig/profile/create_helper.py +43 -16
  32. machineconfig/profile/create_links.py +2 -1
  33. machineconfig/profile/create_links_export.py +64 -18
  34. machineconfig/profile/create_shell_profile.py +78 -127
  35. machineconfig/profile/mapper.toml +15 -8
  36. machineconfig/scripts/__init__.py +0 -4
  37. machineconfig/scripts/linux/wrap_mcfg +46 -0
  38. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  39. machineconfig/scripts/python/agents.py +52 -37
  40. machineconfig/scripts/python/ai/initai.py +1 -1
  41. machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
  42. machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
  43. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
  44. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
  45. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
  46. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
  47. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -0
  48. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
  49. machineconfig/scripts/python/ai/solutions/generic.py +1 -1
  50. machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
  51. machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +7 -2
  52. machineconfig/scripts/python/croshell.py +77 -78
  53. machineconfig/scripts/python/devops.py +39 -21
  54. machineconfig/scripts/python/devops_navigator.py +0 -4
  55. machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
  56. machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
  57. machineconfig/scripts/python/fire_jobs.py +84 -115
  58. machineconfig/scripts/python/ftpx.py +42 -16
  59. machineconfig/scripts/python/helpers/ast_search.py +74 -0
  60. machineconfig/scripts/python/helpers/qr_code.py +166 -0
  61. machineconfig/scripts/python/helpers/repo_rag.py +325 -0
  62. machineconfig/scripts/python/helpers/run_py_script.py +79 -0
  63. machineconfig/scripts/python/helpers/symantic_search.py +25 -0
  64. machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +26 -0
  65. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
  66. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
  67. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
  68. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
  69. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  70. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +32 -13
  71. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_helper_types.py +11 -14
  72. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
  73. machineconfig/scripts/python/helpers_agents/templates/template.sh +32 -0
  74. machineconfig/scripts/python/helpers_cloud/cloud_copy.py +28 -21
  75. machineconfig/scripts/python/helpers_cloud/cloud_helpers.py +1 -1
  76. machineconfig/scripts/python/helpers_cloud/cloud_mount.py +19 -17
  77. machineconfig/scripts/python/helpers_cloud/cloud_sync.py +8 -7
  78. machineconfig/scripts/python/helpers_croshell/crosh.py +3 -3
  79. machineconfig/scripts/python/helpers_croshell/start_slidev.py +6 -7
  80. machineconfig/scripts/python/helpers_devops/cli_config.py +46 -61
  81. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +67 -55
  82. machineconfig/scripts/python/helpers_devops/cli_nw.py +157 -16
  83. machineconfig/scripts/python/helpers_devops/cli_repos.py +55 -21
  84. machineconfig/scripts/python/helpers_devops/cli_self.py +98 -48
  85. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  86. machineconfig/scripts/python/helpers_devops/cli_share_server.py +80 -42
  87. machineconfig/scripts/python/helpers_devops/{cli_terminal.py → cli_share_terminal.py} +15 -17
  88. machineconfig/scripts/python/helpers_devops/cli_utils.py +3 -128
  89. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +4 -4
  90. machineconfig/scripts/python/helpers_devops/devops_status.py +7 -19
  91. machineconfig/scripts/python/helpers_devops/themes/choose_wezterm_theme.py +1 -1
  92. machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
  93. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +26 -16
  94. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  95. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
  96. machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
  97. machineconfig/scripts/python/helpers_navigator/command_tree.py +50 -18
  98. machineconfig/scripts/python/helpers_network/address.py +132 -0
  99. machineconfig/scripts/python/{nw → helpers_network}/devops_add_ssh_key.py +24 -5
  100. machineconfig/scripts/python/{nw → helpers_network}/mount_nfs +0 -1
  101. machineconfig/scripts/python/{nw → helpers_network}/mount_nfs.py +2 -2
  102. machineconfig/scripts/python/{nw → helpers_network}/mount_ssh.py +1 -1
  103. machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_linux.py +7 -7
  104. machineconfig/scripts/python/{nw → helpers_network}/ssh_debug_windows.py +4 -4
  105. machineconfig/scripts/python/{nw → helpers_network}/wifi_conn.py +1 -53
  106. machineconfig/scripts/python/{nw → helpers_network}/wsl_windows_transfer.py +3 -2
  107. machineconfig/scripts/python/helpers_repos/clone.py +0 -1
  108. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +46 -19
  109. machineconfig/scripts/python/helpers_repos/entrypoint.py +2 -1
  110. machineconfig/scripts/python/helpers_repos/grource.py +1 -1
  111. machineconfig/scripts/python/helpers_repos/record.py +2 -1
  112. machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
  113. machineconfig/scripts/python/helpers_repos/{count_lines.py → repo_analyzer_2.py} +113 -192
  114. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +20 -13
  115. machineconfig/scripts/python/helpers_utils/download.py +150 -0
  116. machineconfig/scripts/python/helpers_utils/path.py +185 -0
  117. machineconfig/scripts/python/interactive.py +19 -26
  118. machineconfig/scripts/python/{mcfg.py → mcfg_entry.py} +10 -0
  119. machineconfig/scripts/python/msearch.py +71 -0
  120. machineconfig/scripts/python/sessions.py +94 -25
  121. machineconfig/scripts/python/terminal.py +133 -0
  122. machineconfig/scripts/python/utils.py +28 -30
  123. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
  124. machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
  125. machineconfig/settings/broot/conf.toml +1 -1
  126. machineconfig/settings/helix/config.toml +16 -0
  127. machineconfig/settings/helix/languages.toml +13 -4
  128. machineconfig/settings/helix/yazi-picker.sh +12 -0
  129. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  130. machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
  131. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  132. machineconfig/settings/lf/windows/lfrc +14 -16
  133. machineconfig/settings/marimo/marimo.toml +1 -1
  134. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  135. machineconfig/settings/shells/bash/init.sh +43 -11
  136. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
  137. machineconfig/settings/shells/nushell/config.nu +2 -32
  138. machineconfig/settings/shells/nushell/env.nu +45 -6
  139. machineconfig/settings/shells/nushell/init.nu +314 -0
  140. machineconfig/settings/shells/pwsh/init.ps1 +40 -14
  141. machineconfig/settings/shells/starship/starship.toml +16 -0
  142. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  143. machineconfig/settings/shells/wt/settings.json +14 -5
  144. machineconfig/settings/shells/zsh/init.sh +17 -19
  145. machineconfig/settings/television/cable_unix/alias.toml +8 -0
  146. machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
  147. machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
  148. machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
  149. machineconfig/settings/television/cable_unix/channels.toml +19 -0
  150. machineconfig/settings/television/cable_unix/dirs.toml +13 -0
  151. machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
  152. machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
  153. machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
  154. machineconfig/settings/television/cable_unix/env.toml +17 -0
  155. machineconfig/settings/television/cable_unix/files.toml +11 -0
  156. machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
  157. machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
  158. machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
  159. machineconfig/settings/television/cable_unix/git-log.toml +12 -0
  160. machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
  161. machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
  162. machineconfig/settings/television/cable_unix/guix.toml +20 -0
  163. machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
  164. machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
  165. machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
  166. machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
  167. machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
  168. machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
  169. machineconfig/settings/television/cable_unix/procs.toml +20 -0
  170. machineconfig/settings/television/cable_unix/text.toml +17 -0
  171. machineconfig/settings/television/cable_unix/tldr.toml +18 -0
  172. machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
  173. machineconfig/settings/television/cable_windows/alias.toml +7 -0
  174. machineconfig/settings/television/cable_windows/dirs.toml +13 -0
  175. machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
  176. machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
  177. machineconfig/settings/television/cable_windows/env.toml +17 -0
  178. machineconfig/settings/television/cable_windows/files.toml +14 -0
  179. machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
  180. machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
  181. machineconfig/settings/television/cable_windows/git-log.toml +11 -0
  182. machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
  183. machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
  184. machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
  185. machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
  186. machineconfig/settings/television/cable_windows/text.toml +17 -0
  187. machineconfig/settings/yazi/init.lua +61 -0
  188. machineconfig/settings/yazi/keymap_linux.toml +94 -0
  189. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  190. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  191. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  192. machineconfig/settings/yazi/theme.toml +4 -0
  193. machineconfig/settings/yazi/yazi_linux.toml +84 -0
  194. machineconfig/settings/yazi/yazi_windows.toml +58 -0
  195. machineconfig/setup_linux/__init__.py +2 -1
  196. machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
  197. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
  198. machineconfig/setup_mac/__init__.py +2 -3
  199. machineconfig/setup_mac/apps_gui.sh +248 -0
  200. machineconfig/setup_windows/__init__.py +3 -3
  201. machineconfig/setup_windows/uv.ps1 +8 -1
  202. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +26 -11
  203. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
  204. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  205. machineconfig/utils/accessories.py +7 -4
  206. machineconfig/utils/code.py +99 -32
  207. machineconfig/utils/files/ascii_art.py +1 -1
  208. machineconfig/utils/files/headers.py +3 -2
  209. machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
  210. machineconfig/utils/installer_utils/install_from_url.py +183 -0
  211. machineconfig/utils/installer_utils/installer_class.py +42 -99
  212. machineconfig/utils/installer_utils/installer_cli.py +175 -0
  213. machineconfig/utils/installer_utils/installer_helper.py +129 -0
  214. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +36 -85
  215. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +16 -61
  216. machineconfig/utils/io.py +69 -1
  217. machineconfig/utils/links.py +56 -38
  218. machineconfig/utils/meta.py +33 -18
  219. machineconfig/utils/options.py +46 -18
  220. machineconfig/utils/options_tv.py +119 -0
  221. machineconfig/utils/path_extended.py +44 -95
  222. machineconfig/utils/path_helper.py +76 -23
  223. machineconfig/utils/procs.py +1 -1
  224. machineconfig/utils/scheduler.py +20 -53
  225. machineconfig/utils/scheduling.py +0 -2
  226. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  227. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  228. machineconfig/utils/ssh.py +159 -412
  229. machineconfig/utils/ssh_utils/abc.py +5 -0
  230. machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
  231. machineconfig/utils/ssh_utils/copy_to_here.py +302 -0
  232. machineconfig/utils/ssh_utils/utils.py +142 -0
  233. machineconfig/utils/ssh_utils/wsl.py +210 -0
  234. machineconfig/utils/terminal.py +1 -0
  235. machineconfig/utils/upgrade_packages.py +104 -28
  236. machineconfig/utils/ve.py +12 -4
  237. machineconfig-7.98.dist-info/METADATA +132 -0
  238. {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/RECORD +259 -196
  239. {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/entry_points.txt +4 -1
  240. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
  241. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
  242. machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
  243. machineconfig/scripts/linux/fzf2g +0 -21
  244. machineconfig/scripts/linux/fzfag +0 -17
  245. machineconfig/scripts/linux/fzffg +0 -25
  246. machineconfig/scripts/linux/fzfrga +0 -21
  247. machineconfig/scripts/linux/mcfgs +0 -38
  248. machineconfig/scripts/linux/other/share_smb +0 -1
  249. machineconfig/scripts/linux/skrg +0 -4
  250. machineconfig/scripts/linux/warp-cli.sh +0 -122
  251. machineconfig/scripts/linux/z_ls +0 -104
  252. machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
  253. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
  254. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
  255. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
  256. machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
  257. machineconfig/scripts/python/helpers_fire/template.sh +0 -15
  258. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
  259. machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
  260. machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
  261. machineconfig/scripts/windows/fzfb.ps1 +0 -3
  262. machineconfig/scripts/windows/fzfg.ps1 +0 -2
  263. machineconfig/scripts/windows/fzfrga.bat +0 -20
  264. machineconfig/scripts/windows/mcfgs.ps1 +0 -17
  265. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  266. machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
  267. machineconfig/settings/lf/windows/tst.ps1 +0 -1
  268. machineconfig/settings/yazi/yazi.toml +0 -4
  269. machineconfig/setup_linux/apps.sh +0 -66
  270. machineconfig/setup_linux/others/cli_installation.sh +0 -137
  271. machineconfig/setup_mac/apps.sh +0 -73
  272. machineconfig/setup_windows/apps.ps1 +0 -62
  273. machineconfig/utils/installer_utils/installer.py +0 -225
  274. machineconfig-6.82.dist-info/METADATA +0 -82
  275. /machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
  276. /machineconfig/scripts/python/{helpers_fire → ai/utils}/__init__.py +0 -0
  277. /machineconfig/scripts/python/{helpers_fire/agentic_frameworks → helpers_agents}/__init__.py +0 -0
  278. /machineconfig/scripts/python/{nw → helpers_agents/agentic_frameworks}/__init__.py +0 -0
  279. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
  280. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
  281. /machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
  282. /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_fire_command/f.py} +0 -0
  283. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_network/__init__.py} +0 -0
  284. /machineconfig/scripts/python/{nw → helpers_network}/devops_add_identity.py +0 -0
  285. /machineconfig/scripts/python/{nw → helpers_network}/mount_drive +0 -0
  286. /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive +0 -0
  287. /machineconfig/scripts/python/{nw → helpers_network}/mount_nw_drive.py +0 -0
  288. /machineconfig/scripts/python/{nw → helpers_network}/mount_smb +0 -0
  289. /machineconfig/scripts/python/{nw → helpers_network}/onetimeshare.py +0 -0
  290. /machineconfig/scripts/{Restore-ThunderbirdProfile.ps1 → windows/mounts/Restore-ThunderbirdProfile.ps1} +0 -0
  291. /machineconfig/{jobs/installer/powershell_scripts → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  292. /machineconfig/{jobs/installer/powershell_scripts → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  293. {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/WHEEL +0 -0
  294. {machineconfig-6.82.dist-info → machineconfig-7.98.dist-info}/top_level.txt +0 -0
@@ -243,7 +243,7 @@
243
243
  # The reason it is not automated for remotes is because even though the server might have failed, the processes therein might be running, so there is no automated way to tell."""
244
244
  # log = self.read_log()
245
245
  # jobs_all: list[str] = [p.name for p in self.base_path.expanduser().joinpath("jobs").iterdir()]
246
- # jobs_selected = choose_from_options(options=jobs_all, msg="Select Jobs to Redo", multi=True, fzf=True)
246
+ # jobs_selected = choose_from_options(options=jobs_all, msg="Select Jobs to Redo", multi=True, tv=True)
247
247
  # for a_job in jobs_selected:
248
248
  # # find in which log list does this job live:
249
249
  # found_log_type = None
@@ -4,49 +4,61 @@ from typing import Optional, Literal
4
4
  from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
5
5
  from pathlib import Path
6
6
 
7
- def get_fire_tab_using_uv(func: FunctionType, import_module: bool, uv_with: Optional[list[str]], uv_project_dir: Optional[str]) -> tuple[TabConfig, Path]:
7
+ def get_fire_tab_using_uv(func: FunctionType, tab_weight: int, import_module: bool, uv_with: Optional[list[str]], uv_project_dir: Optional[str]) -> tuple[TabConfig, Path]:
8
8
  from machineconfig.utils.meta import lambda_to_python_script
9
- py_script = lambda_to_python_script(lmb=lambda: func, in_global=True, import_module=import_module)
9
+ if func.__name__ == "<lambda>":
10
+ py_script = lambda_to_python_script(func,
11
+ in_global=True, import_module=import_module)
12
+ else:
13
+ py_script = lambda_to_python_script(lambda: func(),
14
+ in_global=True, import_module=import_module)
10
15
  from machineconfig.utils.code import get_uv_command_executing_python_script
11
16
  command_to_run, py_script_path = get_uv_command_executing_python_script(python_script=py_script, uv_with=uv_with, uv_project_dir=uv_project_dir)
12
17
  tab_config: TabConfig = {
13
18
  "command": command_to_run,
14
19
  "startDir": "$HOME",
15
- "tabName": func.__name__
20
+ "tabName": func.__name__,
21
+ "tabWeight": tab_weight
16
22
  }
17
23
  return tab_config, py_script_path
18
- def get_fire_tab_using_fire(func: FunctionType):
24
+ def get_fire_tab_using_fire(func: FunctionType, tab_weight: int) -> TabConfig:
19
25
  import inspect
20
26
  from machineconfig.utils.source_of_truth import CONFIG_ROOT
21
27
  import platform
22
28
  if platform.system().lower() == "windows":
23
- mcfgs = CONFIG_ROOT / "scripts/windows/mcfgs.ps1"
24
- mcfgs = f'& "{mcfgs}"'
29
+ wrap_mcfg = CONFIG_ROOT / "scripts/wrap_mcfg.ps1"
30
+ wrap_mcfg = f'& "{wrap_mcfg}"'
25
31
  elif platform.system().lower() == "linux" or platform.system().lower() == "darwin":
26
- mcfgs = CONFIG_ROOT / "scripts/linux/mcfgs"
32
+ wrap_mcfg = CONFIG_ROOT / "scripts/wrap_mcfg"
27
33
  else:
28
34
  raise ValueError(f"Unsupported platform: {platform.system()}")
29
35
  path = Path(inspect.getfile(func))
30
36
  path_relative = path.relative_to(Path.home())
31
- command_to_run = f"""{mcfgs} fire {path_relative} {func.__name__} """
37
+ command_to_run = f"""{wrap_mcfg} fire {path_relative} {func.__name__} """
32
38
  tab_config: TabConfig = {
33
39
  "command": command_to_run,
34
40
  "startDir": "$HOME",
35
- "tabName": func.__name__
41
+ "tabName": func.__name__,
42
+ "tabWeight": tab_weight
36
43
  }
37
44
  return tab_config
38
45
 
39
46
 
40
47
 
41
- def make_layout_from_functions(functions: list[FunctionType], import_module: bool, tab_configs: list[TabConfig], layout_name: str, method: Literal["script", "fire"]="fire") -> LayoutConfig:
48
+ def make_layout_from_functions(functions: list[FunctionType], functions_weights: Optional[list[int]], import_module: bool, tab_configs: list[TabConfig],
49
+ layout_name: str, method: Literal["script", "fire"],
50
+ uv_with: Optional[list[str]] = None, uv_project_dir: Optional[str] = None
51
+ ) -> LayoutConfig:
42
52
  tabs2artifacts: list[tuple[TabConfig, list[Path]]] = []
43
- for a_func in functions:
53
+ for a_func, tab_weight in zip(functions, functions_weights or [1]*len(functions)):
44
54
  match method:
45
55
  case "script":
46
- tab_config, artifact_files_1 = get_fire_tab_using_uv(a_func, import_module=import_module, uv_with=None, uv_project_dir=None)
56
+ tab_config, artifact_files_1 = get_fire_tab_using_uv(a_func, tab_weight=tab_weight, import_module=import_module,
57
+ uv_with=uv_with, uv_project_dir=uv_project_dir
58
+ )
47
59
  artifact_files = [artifact_files_1]
48
60
  case "fire":
49
- tab_config = get_fire_tab_using_fire(a_func)
61
+ tab_config = get_fire_tab_using_fire(a_func, tab_weight=tab_weight)
50
62
  artifact_files = []
51
63
  tabs2artifacts.append((tab_config, artifact_files))
52
64
  list_of_tabs = [tab for tab, _ in tabs2artifacts] + tab_configs
@@ -7,11 +7,7 @@ https://github.com/ruby9455/app_management/tree/main/app_management
7
7
 
8
8
  """
9
9
 
10
- import shlex
11
10
  import subprocess
12
- import random
13
- import string
14
- import json
15
11
  import platform
16
12
  from typing import Optional, Any
17
13
  from pathlib import Path
@@ -22,6 +18,14 @@ from rich.panel import Panel
22
18
  from rich.table import Table
23
19
 
24
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
+ )
25
29
 
26
30
  logging.basicConfig(level=logging.INFO)
27
31
  logger = logging.getLogger(__name__)
@@ -37,52 +41,11 @@ class WTLayoutGenerator:
37
41
  def __init__(self, layout_config: LayoutConfig, session_name: str):
38
42
  self.session_name: str = session_name
39
43
  self.layout_config: LayoutConfig = layout_config.copy()
40
- self.script_path: Optional[str] = None # Store the full path to the PowerShell script
41
-
42
- @staticmethod
43
- def _generate_random_suffix(length: int) -> str:
44
- """Generate a random string suffix for unique PowerShell script names."""
45
- return "".join(random.choices(string.ascii_lowercase + string.digits, k=length))
46
-
47
- @staticmethod
48
- def _parse_command(command: str) -> tuple[str, list[str]]:
49
- try:
50
- parts = shlex.split(command)
51
- if not parts:
52
- raise ValueError("Empty command provided")
53
- return parts[0], parts[1:] if len(parts) > 1 else []
54
- except ValueError as e:
55
- logger.error(f"Error parsing command '{command}': {e}")
56
- parts = command.split()
57
- return parts[0] if parts else "", parts[1:] if len(parts) > 1 else []
58
-
59
- @staticmethod
60
- def _escape_for_wt(text: str) -> str:
61
- """Escape text for use in Windows Terminal commands."""
62
- # Windows Terminal uses PowerShell-style escaping
63
- text = text.replace('"', '""') # Escape quotes for PowerShell
64
- if " " in text or ";" in text or "&" in text or "|" in text:
65
- return f'"{text}"'
66
- return text
67
-
68
-
69
-
70
- @staticmethod
71
- def _validate_layout_config(layout_config: LayoutConfig) -> None:
72
- """Validate layout configuration format and content."""
73
- if not layout_config["layoutTabs"]:
74
- raise ValueError("Layout must contain at least one tab")
75
- for tab in layout_config["layoutTabs"]:
76
- if not tab["tabName"].strip():
77
- raise ValueError(f"Invalid tab name: {tab['tabName']}")
78
- if not tab["command"].strip():
79
- raise ValueError(f"Invalid command for tab '{tab['tabName']}': {tab['command']}")
80
- if not tab["startDir"].strip():
81
- raise ValueError(f"Invalid startDir for tab '{tab['tabName']}': {tab['startDir']}")
44
+ self.script_path: Optional[str] = None
82
45
 
83
46
  def create_layout_file(self) -> bool:
84
47
  """Create Windows Terminal layout file and return success status."""
85
- WTLayoutGenerator._validate_layout_config(self.layout_config)
48
+ validate_layout_config(self.layout_config)
86
49
  tab_count = len(self.layout_config['layoutTabs'])
87
50
  layout_name = self.layout_config['layoutName']
88
51
  console.print(f"[bold cyan]📋 Creating Windows Terminal layout[/bold cyan] [bright_green]'{layout_name}' with {tab_count} tabs[/bright_green]")
@@ -90,17 +53,13 @@ class WTLayoutGenerator:
90
53
  for tab in self.layout_config['layoutTabs']:
91
54
  console.print(f" [yellow]→[/yellow] [bold]{tab['tabName']}[/bold] [dim]in[/dim] [blue]{tab['startDir']}[/blue]")
92
55
 
93
- # Generate Windows Terminal command
94
- wt_command = self._generate_wt_command_string(self.layout_config, self.session_name)
56
+ wt_command = generate_wt_command_string(self.layout_config, self.session_name)
95
57
 
96
- random_suffix = WTLayoutGenerator._generate_random_suffix(8)
97
- # Create PowerShell script content
58
+ random_suffix = generate_random_suffix(8)
98
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
- # Write to file
103
- random_suffix = WTLayoutGenerator._generate_random_suffix(8)
104
63
  tmp_dir = Path(TMP_LAYOUT_DIR)
105
64
  tmp_dir.mkdir(parents=True, exist_ok=True)
106
65
  script_file = tmp_dir / f"wt_layout_{self.session_name}_{random_suffix}.ps1"
@@ -110,46 +69,10 @@ class WTLayoutGenerator:
110
69
  console.print(f"[bold green]✅ Layout created successfully:[/bold green] [cyan]{self.script_path}[/cyan]")
111
70
  return True
112
71
 
113
- def _generate_wt_command_string(self, layout_config: LayoutConfig, window_name: str) -> str:
114
- """Generate complete Windows Terminal command string."""
115
- # Build the complete Windows Terminal command
116
- command_parts = []
117
-
118
- for i, tab in enumerate(layout_config["layoutTabs"]):
119
- is_first = i == 0
120
-
121
- if is_first:
122
- # First tab: start with wt command and window name
123
- tab_parts = ["wt", "-w", WTLayoutGenerator._escape_for_wt(window_name)]
124
- else:
125
- # Subsequent tabs: use new-tab
126
- tab_parts = ["new-tab"]
127
-
128
- # Add common tab arguments
129
- tab_name = tab["tabName"]
130
- cwd = tab["startDir"]
131
- command = tab["command"]
132
-
133
- # Convert paths to Windows format if needed
134
- if cwd.startswith("~/"):
135
- cwd = cwd.replace("~/", f"{Path.home()}/")
136
- elif cwd == "~":
137
- cwd = str(Path.home())
138
-
139
- # Add arguments in the correct order
140
- tab_parts.extend(["-d", WTLayoutGenerator._escape_for_wt(cwd)])
141
- tab_parts.extend(["--title", WTLayoutGenerator._escape_for_wt(tab_name)])
142
- tab_parts.append(WTLayoutGenerator._escape_for_wt(command))
143
-
144
- command_parts.append(" ".join(tab_parts))
145
-
146
- # Join all tab commands with escaped semicolons for PowerShell
147
- return " `; ".join(command_parts)
148
-
149
72
  def get_wt_layout_preview(self, layout_config: LayoutConfig) -> str:
150
73
  """Generate preview of the Windows Terminal command that would be created."""
151
- WTLayoutGenerator._validate_layout_config(layout_config)
152
- return self._generate_wt_command_string(layout_config, "preview")
74
+ validate_layout_config(layout_config)
75
+ return generate_wt_command_string(layout_config, "preview")
153
76
 
154
77
  def check_all_commands_status(self) -> dict[str, dict[str, Any]]:
155
78
  if not self.layout_config:
@@ -159,137 +82,13 @@ class WTLayoutGenerator:
159
82
  status_report = {}
160
83
  for tab in self.layout_config["layoutTabs"]:
161
84
  tab_name = tab["tabName"]
162
- 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)
163
86
 
164
87
  return status_report
165
88
 
166
- @staticmethod
167
- def check_wt_session_status(session_name: str) -> dict[str, Any]:
168
- try:
169
- # Simplified Windows Terminal process check
170
- ps_script = """
171
- try {
172
- $wtProcesses = Get-Process -Name 'WindowsTerminal' -ErrorAction SilentlyContinue
173
- if ($wtProcesses) {
174
- $processInfo = @()
175
- $wtProcesses | ForEach-Object {
176
- $info = @{
177
- "Id" = $_.Id
178
- "ProcessName" = $_.ProcessName
179
- "StartTime" = $_.StartTime.ToString()
180
- }
181
- $processInfo += $info
182
- }
183
- $processInfo | ConvertTo-Json -Depth 2
184
- }
185
- } catch {
186
- # No Windows Terminal processes found
187
- }
188
- """
189
-
190
- result = subprocess.run([POWERSHELL_CMD, "-Command", ps_script], capture_output=True, text=True, timeout=5)
191
-
192
- if result.returncode == 0:
193
- output = result.stdout.strip()
194
- if output and output != "":
195
- try:
196
- processes = json.loads(output)
197
- if not isinstance(processes, list):
198
- processes = [processes]
199
-
200
- # For simplicity, assume session exists if WT is running
201
- return {
202
- "wt_running": True,
203
- "session_exists": len(processes) > 0,
204
- "session_name": session_name,
205
- "all_windows": processes,
206
- "session_windows": processes # Simplified - assume all windows could be session windows
207
- }
208
- except Exception as e:
209
- return {"wt_running": True, "session_exists": False, "error": f"Failed to parse process info: {e}", "session_name": session_name}
210
- else:
211
- return {"wt_running": False, "session_exists": False, "session_name": session_name, "all_windows": []}
212
- else:
213
- return {"wt_running": False, "error": result.stderr, "session_name": session_name}
214
-
215
- except subprocess.TimeoutExpired:
216
- return {"wt_running": False, "error": "Timeout while checking Windows Terminal processes", "session_name": session_name}
217
- except FileNotFoundError:
218
- return {"wt_running": False, "error": f"PowerShell ({POWERSHELL_CMD}) not found in PATH", "session_name": session_name}
219
- except Exception as e:
220
- return {"wt_running": False, "error": str(e), "session_name": session_name}
221
-
222
- @staticmethod
223
- def check_command_status(tab_name: str, layout_config: LayoutConfig) -> dict[str, Any]:
224
- """Check if a command is running by looking for processes."""
225
- # Find the tab with the given name
226
- tab_config = None
227
- for tab in layout_config["layoutTabs"]:
228
- if tab["tabName"] == tab_name:
229
- tab_config = tab
230
- break
231
-
232
- if tab_config is None:
233
- return {"status": "unknown", "error": f"Tab '{tab_name}' not found in layout config", "running": False, "pid": None, "command": None}
234
-
235
- command = tab_config["command"]
236
-
237
- try:
238
- # Extract the primary executable name from command
239
- primary_cmd = command.split()[0] if command.strip() else ""
240
- if not primary_cmd:
241
- return {"status": "error", "error": "Empty command", "running": False, "command": command, "tab_name": tab_name}
242
-
243
- # Use a much simpler PowerShell script that just checks for process names
244
- ps_script = f"""
245
- try {{
246
- $processes = Get-Process -Name '{primary_cmd}' -ErrorAction SilentlyContinue
247
- if ($processes) {{
248
- $processes | ForEach-Object {{
249
- $procInfo = @{{
250
- "pid" = $_.Id
251
- "name" = $_.ProcessName
252
- "start_time" = $_.StartTime.ToString()
253
- }}
254
- Write-Output ($procInfo | ConvertTo-Json -Compress)
255
- }}
256
- }}
257
- }} catch {{
258
- # No processes found or other error
259
- }}
260
- """
261
-
262
- result = subprocess.run([POWERSHELL_CMD, "-Command", ps_script], capture_output=True, text=True, timeout=5)
263
-
264
- if result.returncode == 0:
265
- output_lines = [line.strip() for line in result.stdout.strip().split("\n") if line.strip()]
266
- matching_processes = []
267
-
268
- for line in output_lines:
269
- if line.startswith("{") and line.endswith("}"):
270
- try:
271
- proc_info = json.loads(line)
272
- matching_processes.append(proc_info)
273
- except json.JSONDecodeError:
274
- continue
275
-
276
- if matching_processes:
277
- return {"status": "running", "running": True, "processes": matching_processes, "command": command, "tab_name": tab_name}
278
- else:
279
- return {"status": "not_running", "running": False, "processes": [], "command": command, "tab_name": tab_name}
280
- else:
281
- return {"status": "error", "error": f"Command failed: {result.stderr}", "running": False, "command": command, "tab_name": tab_name}
282
-
283
- except subprocess.TimeoutExpired:
284
- logger.error(f"Timeout checking command status for tab '{tab_name}'")
285
- return {"status": "timeout", "error": "Timeout checking process status", "running": False, "command": command, "tab_name": tab_name}
286
- except Exception as e:
287
- logger.error(f"Error checking command status for tab '{tab_name}': {e}")
288
- return {"status": "error", "error": str(e), "running": False, "command": command, "tab_name": tab_name}
289
-
290
89
  def get_status_report(self) -> dict[str, Any]:
291
90
  """Get status report for this layout including Windows Terminal and commands."""
292
- wt_status = WTLayoutGenerator.check_wt_session_status(self.session_name or "default")
91
+ wt_status = check_wt_session_status(self.session_name or "default")
293
92
  commands_status = self.check_all_commands_status()
294
93
 
295
94
  running_count = sum(1 for status in commands_status.values() if status.get("running", False))
@@ -382,14 +181,11 @@ def run_wt_layout(layout_config: LayoutConfig) -> None:
382
181
  session_name = layout_config["layoutName"]
383
182
  generator = WTLayoutGenerator(layout_config=layout_config, session_name=session_name)
384
183
  generator.create_layout_file()
385
-
386
184
  if generator.script_path is None:
387
185
  raise RuntimeError("Script path was not set after creating layout file")
388
-
389
186
  # Execute the script
390
187
  cmd = f'powershell -ExecutionPolicy Bypass -File "{generator.script_path}"'
391
188
  result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
392
-
393
189
  if result.returncode == 0:
394
190
  print(f"Windows Terminal layout is running @ {layout_config['layoutName']}")
395
191
  else:
@@ -400,7 +196,6 @@ def run_wt_layout(layout_config: LayoutConfig) -> None:
400
196
  def run_command_in_wt_tab(command: str, tab_name: str, cwd: Optional[str]) -> str:
401
197
  """Create a command to run in a new Windows Terminal tab."""
402
198
  cwd_part = f'-d "{cwd}"' if cwd else ""
403
-
404
199
  return f"""
405
200
  echo "Creating new Windows Terminal tab: {tab_name}"
406
201
  wt new-tab --title "{tab_name}" {cwd_part} "{command}"