machineconfig 8.14__py3-none-any.whl → 8.50__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (273) hide show
  1. machineconfig/cluster/remote/run_cluster.py +1 -1
  2. machineconfig/cluster/remote/run_remote.py +1 -1
  3. machineconfig/cluster/sessions_managers/utils/maker.py +10 -8
  4. machineconfig/cluster/sessions_managers/wt_local.py +1 -1
  5. machineconfig/cluster/sessions_managers/wt_local_manager.py +1 -1
  6. machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
  7. machineconfig/cluster/sessions_managers/zellij_local_manager.py +1 -1
  8. machineconfig/jobs/installer/checks/check_installations.py +133 -0
  9. machineconfig/jobs/installer/checks/install_utils.py +132 -0
  10. machineconfig/jobs/installer/checks/report_utils.py +39 -0
  11. machineconfig/jobs/installer/checks/vt_utils.py +89 -0
  12. machineconfig/jobs/installer/installer_data.json +225 -140
  13. machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
  14. machineconfig/jobs/installer/package_groups.py +10 -9
  15. machineconfig/jobs/installer/python_scripts/boxes.py +1 -2
  16. machineconfig/jobs/installer/python_scripts/code.py +10 -8
  17. machineconfig/jobs/installer/python_scripts/hx.py +30 -13
  18. machineconfig/jobs/installer/python_scripts/nerfont_windows_helper.py +6 -5
  19. machineconfig/jobs/installer/python_scripts/sysabc.py +25 -19
  20. machineconfig/jobs/installer/python_scripts/yazi.py +33 -17
  21. machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
  22. machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +1 -1
  23. machineconfig/jobs/scripts_dynamic/a.py +413 -10
  24. machineconfig/profile/create_links.py +77 -20
  25. machineconfig/profile/create_links_export.py +63 -58
  26. machineconfig/profile/mapper_data.toml +30 -0
  27. machineconfig/profile/mapper_dotfiles.toml +253 -0
  28. machineconfig/scripts/python/agents.py +70 -172
  29. machineconfig/scripts/python/ai/initai.py +3 -1
  30. machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
  31. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
  32. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +7 -5
  33. machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
  34. machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
  35. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +1 -1
  36. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +29 -0
  37. machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
  38. machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
  39. machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
  40. machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
  41. machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
  42. machineconfig/scripts/python/ai/utils/vscode_tasks.py +6 -3
  43. machineconfig/scripts/python/cloud.py +58 -11
  44. machineconfig/scripts/python/croshell.py +4 -156
  45. machineconfig/scripts/python/devops.py +57 -40
  46. machineconfig/scripts/python/devops_navigator.py +17 -3
  47. machineconfig/scripts/python/fire_jobs.py +8 -207
  48. machineconfig/scripts/python/ftpx.py +5 -225
  49. machineconfig/scripts/python/graph/cli_graph.json +8743 -0
  50. machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
  51. machineconfig/scripts/python/{env_manager → helpers/helper_env}/env_manager_tui.py +1 -1
  52. machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
  53. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.py +1 -1
  54. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
  55. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_gemini.py +1 -1
  56. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_qwen.py +1 -1
  57. machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
  58. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py +5 -5
  59. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +6 -6
  60. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +10 -5
  61. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +3 -3
  62. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
  63. machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
  64. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
  65. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +7 -6
  66. machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
  67. machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +267 -0
  68. machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
  69. machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
  70. machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +76 -0
  71. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_nw.py +52 -72
  72. machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
  73. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +40 -23
  74. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_file.py +44 -30
  75. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_server.py +26 -43
  76. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_terminal.py +12 -6
  77. machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
  78. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +12 -6
  79. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
  80. machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +68 -52
  81. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/run_script.py +75 -58
  82. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
  83. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
  84. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +3 -3
  85. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
  86. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +3 -3
  87. machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
  88. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_linux/fzfg +4 -3
  89. machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
  90. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_windows/fzfg.ps1 +1 -1
  91. machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
  92. machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
  93. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
  94. machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
  95. machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
  96. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
  97. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
  98. machineconfig/scripts/python/helpers/helpers_network/__init__.py +0 -0
  99. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address.py +15 -17
  100. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address_switch.py +1 -1
  101. machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
  102. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_ssh.py +2 -2
  103. machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
  104. machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
  105. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
  106. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
  107. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
  108. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
  109. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +117 -33
  110. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +3 -2
  111. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -13
  112. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_2.py +63 -19
  113. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
  114. machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
  115. machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  116. machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
  117. machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -1
  118. machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
  119. machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
  120. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/download.py +1 -1
  121. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/python.py +47 -26
  122. machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
  123. machineconfig/scripts/python/mcfg_entry.py +133 -48
  124. machineconfig/scripts/python/msearch.py +15 -61
  125. machineconfig/scripts/python/sessions.py +59 -194
  126. machineconfig/scripts/python/terminal.py +18 -96
  127. machineconfig/scripts/python/utils.py +101 -20
  128. machineconfig/settings/atuin/config.toml +294 -0
  129. machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
  130. machineconfig/settings/linters/.ruff.toml +1 -0
  131. machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
  132. machineconfig/settings/shells/bash/init.sh +6 -3
  133. machineconfig/settings/shells/pwsh/init.ps1 +69 -1
  134. machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
  135. machineconfig/settings/shells/wezterm/wezterm.lua +4 -1
  136. machineconfig/settings/shells/wt/settings.json +20 -7
  137. machineconfig/settings/shells/zsh/init.sh +25 -4
  138. machineconfig/settings/television/cable_unix/bash-history.toml +1 -1
  139. machineconfig/settings/television/cable_windows/pwsh-history.toml +1 -1
  140. machineconfig/settings/tv/config.toml +234 -0
  141. machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
  142. machineconfig/settings/wsl/.wslconfig +5 -30
  143. machineconfig/settings/yazi/yazi_linux.toml +18 -8
  144. machineconfig/settings/zellij/layouts/st.kdl +2 -2
  145. machineconfig/settings/zellij/layouts/st2.kdl +1 -1
  146. machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
  147. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +3 -0
  148. machineconfig/setup_mac/__init__.py +0 -2
  149. machineconfig/setup_windows/__init__.py +0 -1
  150. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +14 -13
  151. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +4 -3
  152. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +3 -3
  153. machineconfig/type_hinting/sql/__init__.py +1 -0
  154. machineconfig/type_hinting/sql/base.py +216 -0
  155. machineconfig/type_hinting/sql/core_schema.py +64 -0
  156. machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
  157. machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
  158. machineconfig/type_hinting/typedict/__init__.py +1 -0
  159. machineconfig/type_hinting/typedict/ast_utils.py +130 -0
  160. machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
  161. machineconfig/type_hinting/typedict/generators.py +231 -0
  162. machineconfig/type_hinting/typedict/polars_schema.py +24 -0
  163. machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
  164. machineconfig/utils/accessories.py +24 -0
  165. machineconfig/utils/code.py +41 -13
  166. machineconfig/utils/files/ascii_art.py +10 -14
  167. machineconfig/utils/files/headers.py +3 -5
  168. machineconfig/utils/files/read.py +8 -1
  169. machineconfig/utils/installer_utils/github_release_bulk.py +11 -91
  170. machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
  171. machineconfig/utils/installer_utils/install_from_url.py +1 -1
  172. machineconfig/utils/installer_utils/installer_class.py +12 -4
  173. machineconfig/utils/installer_utils/installer_cli.py +1 -15
  174. machineconfig/utils/installer_utils/installer_helper.py +2 -2
  175. machineconfig/utils/installer_utils/installer_locator_utils.py +13 -13
  176. machineconfig/utils/installer_utils/installer_runner.py +4 -4
  177. machineconfig/utils/io.py +25 -8
  178. machineconfig/utils/meta.py +6 -4
  179. machineconfig/utils/options.py +49 -19
  180. machineconfig/utils/options_utils/__init__.py +0 -0
  181. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  182. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  183. machineconfig/utils/options_utils/tv_options.py +37 -0
  184. machineconfig/utils/path_extended.py +6 -6
  185. machineconfig/utils/scheduler.py +8 -2
  186. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  187. machineconfig/utils/source_of_truth.py +6 -1
  188. machineconfig/utils/ssh.py +69 -18
  189. machineconfig/utils/ssh_utils/abc.py +1 -1
  190. machineconfig/utils/ssh_utils/copy_from_here.py +17 -12
  191. machineconfig/utils/ssh_utils/utils.py +21 -5
  192. machineconfig/utils/ssh_utils/wsl.py +107 -170
  193. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  194. machineconfig/utils/upgrade_packages.py +4 -8
  195. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/METADATA +29 -22
  196. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/RECORD +251 -211
  197. machineconfig/jobs/installer/check_installations.py +0 -248
  198. machineconfig/profile/backup.toml +0 -49
  199. machineconfig/profile/mapper.toml +0 -263
  200. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
  201. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
  202. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  203. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -208
  204. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  205. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
  206. machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
  207. machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
  208. machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -620
  209. machineconfig/scripts/python/helpers_network/ssh_add_identity.py +0 -116
  210. machineconfig/scripts/python/helpers_network/ssh_add_ssh_key.py +0 -153
  211. machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +0 -391
  212. machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +0 -338
  213. machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
  214. machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
  215. machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
  216. machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
  217. machineconfig/utils/options_tv.py +0 -119
  218. machineconfig/utils/tst.py +0 -20
  219. /machineconfig/{scripts/python/helpers_agents → jobs/installer/checks}/__init__.py +0 -0
  220. /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
  221. /machineconfig/scripts/python/{helpers_agents/agentic_frameworks → graph}/__init__.py +0 -0
  222. /machineconfig/scripts/python/{helpers_cloud → helpers}/__init__.py +0 -0
  223. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
  224. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
  225. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_agents}/__init__.py +0 -0
  226. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_agents/agentic_frameworks}/__init__.py +0 -0
  227. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
  228. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
  229. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_helper_types.py +0 -0
  230. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
  231. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aichat/config.yaml +0 -0
  232. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aider/.aider.conf.yml +0 -0
  233. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/copilot/config.yml +0 -0
  234. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/crush/crush.json +0 -0
  235. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/gemini/settings.json +0 -0
  236. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/privacy.py +0 -0
  237. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/prompt.txt +0 -0
  238. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
  239. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +0 -0
  240. /machineconfig/scripts/python/{helpers_devops/themes → helpers/helpers_cloud}/__init__.py +0 -0
  241. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +0 -0
  242. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
  243. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_croshell}/__init__.py +0 -0
  244. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +0 -0
  245. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
  246. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
  247. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
  248. /machineconfig/scripts/python/{helpers_network → helpers/helpers_devops}/__init__.py +0 -0
  249. /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_devops/themes}/__init__.py +0 -0
  250. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  251. /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
  252. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
  253. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/f.py +0 -0
  254. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/file_wrangler.py +0 -0
  255. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +0 -0
  256. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_streamlit_helper.py +0 -0
  257. /machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/__init__.py +0 -0
  258. /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
  259. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nfs.py +0 -0
  260. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nw_drive.py +0 -0
  261. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/onetimeshare.py +0 -0
  262. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/wifi_conn.py +0 -0
  263. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -0
  264. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_1.py +0 -0
  265. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
  266. /machineconfig/scripts/python/helpers/{ast_search.py → helpers_search/ast_search.py} +0 -0
  267. /machineconfig/scripts/python/helpers/{qr_code.py → helpers_search/qr_code.py} +0 -0
  268. /machineconfig/scripts/python/helpers/{repo_rag.py → helpers_search/repo_rag.py} +0 -0
  269. /machineconfig/scripts/python/helpers/{symantic_search.py → helpers_search/symantic_search.py} +0 -0
  270. /machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/pdf.py +0 -0
  271. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/WHEEL +0 -0
  272. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/entry_points.txt +0 -0
  273. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,186 @@
1
+ """Pure Python implementations for sessions commands - no typer dependencies."""
2
+
3
+ from typing import Optional, Literal
4
+ from pathlib import Path
5
+
6
+
7
+ def balance_load(
8
+ layout_path: str,
9
+ max_thresh: int,
10
+ thresh_type: Literal["number", "n", "weight", "w"],
11
+ breaking_method: Literal["moreLayouts", "ml", "combineTabs", "ct"],
12
+ output_path: Optional[str],
13
+ ) -> None:
14
+ """Adjust layout file to limit max tabs per layout, etc."""
15
+ thresh_type_resolved: dict[str, Literal["number", "weight"]] = {"number": "number", "n": "number", "weight": "weight", "w": "weight"}
16
+ breaking_method_resolved: dict[str, Literal["moreLayouts", "combineTabs"]] = {"moreLayouts": "moreLayouts", "ml": "moreLayouts", "combineTabs": "combineTabs", "ct": "combineTabs"}
17
+
18
+ layout_path_obj = Path(layout_path).expanduser().absolute()
19
+
20
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile
21
+ import json
22
+ layoutfile: LayoutsFile = json.loads(layout_path_obj.read_text())
23
+ layout_configs = layoutfile["layouts"]
24
+ from machineconfig.cluster.sessions_managers.utils.load_balancer import limit_tab_num
25
+ new_layouts = limit_tab_num(layout_configs=layout_configs, max_thresh=max_thresh, threshold_type=thresh_type_resolved[thresh_type], breaking_method=breaking_method_resolved[breaking_method])
26
+ layoutfile["layouts"] = new_layouts
27
+ target_file = Path(output_path) if output_path is not None else layout_path_obj.parent / f"{layout_path_obj.stem}_adjusted_{max_thresh}_{thresh_type}_{breaking_method}.json"
28
+ target_file.parent.mkdir(parents=True, exist_ok=True)
29
+ target_file.write_text(data=json.dumps(layoutfile, indent=4), encoding="utf-8")
30
+ print(f"Adjusted layout saved to {target_file}")
31
+
32
+
33
+ def select_layout(layouts_json_file: str, selected_layouts_names: Optional[list[str]], select_interactively: bool, subsitute_home: bool) -> list["LayoutConfig"]: # type: ignore[name-defined]
34
+ """Select layout(s) from a layout file."""
35
+ import json
36
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile, LayoutConfig
37
+ json_str = Path(layouts_json_file).read_text(encoding="utf-8")
38
+ if subsitute_home:
39
+ json_str = json_str.replace("~", str(Path.home())).replace("$HOME", str(Path.home()))
40
+ json_str = json_str.replace("""Command": "f """, """Command": "~/.config/machineconfig/scripts/wrap_mcfg fire """)
41
+ json_str = json_str.replace("""Command": "s """, """Command": "~/.config/machineconfig/scripts/wrap_mcfg sessions """)
42
+
43
+ try:
44
+ # src/machineconfig/utils/io.py
45
+ layout_file: LayoutsFile = json.loads(json_str)
46
+ except Exception:
47
+ print(f"Failed to parse the json file {layouts_json_file}, trying to clean the comments and giving it another shot ... ")
48
+ from machineconfig.utils.io import remove_c_style_comments
49
+ json_str = remove_c_style_comments(json_str)
50
+ # print(json_str)
51
+ layout_file: LayoutsFile = json.loads(json_str)
52
+
53
+ if len(layout_file["layouts"]) == 0:
54
+ raise ValueError(f"No layouts found in {layouts_json_file}")
55
+ if selected_layouts_names is None:
56
+ if not select_interactively:
57
+ return layout_file["layouts"]
58
+ options = [layout["layoutName"] for layout in layout_file["layouts"]]
59
+ from machineconfig.utils.options import choose_from_options
60
+ selected_layouts_names = choose_from_options(multi=True, options=options, prompt="Choose a layout configuration:", tv=True, msg="Choose one option")
61
+ print(f"Selected layout(s): {selected_layouts_names}")
62
+ layouts_chosen: list[LayoutConfig] = []
63
+ for name in selected_layouts_names:
64
+ layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == name), None)
65
+ if layout_chosen is None:
66
+ layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"].lower() == name.lower()), None)
67
+ if layout_chosen is None:
68
+ available_layouts = [layout["layoutName"] for layout in layout_file["layouts"]]
69
+ raise ValueError(f"Layout '{name}' not found. Available layouts: {available_layouts}")
70
+ layouts_chosen.append(layout_chosen)
71
+ return layouts_chosen
72
+
73
+
74
+ def find_layout_file(layout_path: str) -> str:
75
+ """Find layout file from a path."""
76
+ from machineconfig.utils.path_helper import search_for_files_of_interest, match_file_name, sanitize_path
77
+ from machineconfig.utils.options import choose_from_options
78
+ path_obj = sanitize_path(layout_path)
79
+ if not path_obj.exists():
80
+ choice_file = match_file_name(sub_string=layout_path, search_root=Path.cwd(), suffixes={".json"})
81
+ elif path_obj.is_dir():
82
+ print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
83
+ files = search_for_files_of_interest(path_obj, suffixes={".py", ".sh", ".ps1"})
84
+ print(f"🔍 Got #{len(files)} results.")
85
+ choice_file = choose_from_options(multi=False, options=files, tv=True, msg="Choose one option")
86
+ choice_file = Path(choice_file).expanduser().absolute()
87
+ else:
88
+ choice_file = path_obj
89
+ return str(choice_file)
90
+
91
+
92
+ def run_layouts(
93
+ layout_path: Optional[str],
94
+ max_tabs: int,
95
+ max_layouts: int,
96
+ sleep_inbetween: float,
97
+ monitor: bool,
98
+ parallel: bool,
99
+ kill_upon_completion: bool,
100
+ choose: Optional[str],
101
+ choose_interactively: bool,
102
+ subsitute_home: bool,
103
+ ) -> None:
104
+ """Launch terminal sessions based on a layout configuration file."""
105
+ if layout_path is None:
106
+ raise ValueError("layout_path is required")
107
+
108
+ layout_path_resolved = find_layout_file(layout_path=layout_path)
109
+ layouts_selected = select_layout(layouts_json_file=layout_path_resolved, selected_layouts_names=choose.split(",") if choose else None, select_interactively=choose_interactively, subsitute_home=subsitute_home)
110
+
111
+ if parallel and len(layouts_selected) > max_layouts:
112
+ raise ValueError(f"Number of layouts {len(layouts_selected)} exceeds the maximum allowed {max_layouts}. Please adjust your layout file.")
113
+ for a_layout in layouts_selected:
114
+ if len(a_layout["layoutTabs"]) > max_tabs:
115
+ raise ValueError(f"Layout '{a_layout.get('layoutName', 'Unnamed')}' has {len(a_layout['layoutTabs'])} tabs which exceeds the max of {max_tabs}.")
116
+
117
+ import time
118
+ import platform
119
+ if platform.system() == "Linux" or platform.system() == "Darwin":
120
+ from machineconfig.cluster.sessions_managers.zellij_local_manager import ZellijLocalManager
121
+ if not parallel:
122
+ iterable = [[item] for item in layouts_selected]
123
+ else:
124
+ iterable = [layouts_selected]
125
+ for i, a_layouts in enumerate(iterable):
126
+ manager = ZellijLocalManager(session_layouts=a_layouts)
127
+ manager.start_all_sessions(poll_interval=2, poll_seconds=2)
128
+ if monitor:
129
+ manager.run_monitoring_routine(wait_ms=2000)
130
+ if kill_upon_completion:
131
+ manager.kill_all_sessions()
132
+ if i < len(layouts_selected) - 1:
133
+ time.sleep(sleep_inbetween)
134
+ elif platform.system() == "Windows":
135
+ from machineconfig.cluster.sessions_managers.wt_local_manager import WTLocalManager
136
+ if not parallel:
137
+ iterable = [[item] for item in layouts_selected]
138
+ else:
139
+ iterable = [layouts_selected]
140
+ for i, a_layouts in enumerate(iterable):
141
+ manager = WTLocalManager(session_layouts=a_layouts)
142
+ manager.start_all_sessions()
143
+ if monitor:
144
+ manager.run_monitoring_routine(wait_ms=2000)
145
+ if kill_upon_completion:
146
+ manager.kill_all_sessions()
147
+ if i < len(layouts_selected) - 1:
148
+ time.sleep(sleep_inbetween)
149
+ else:
150
+ print(f"❌ Unsupported platform: {platform.system()}")
151
+
152
+
153
+ def create_template(name: Optional[str], num_tabs: int) -> None:
154
+ """Create a layout template file."""
155
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile, TabConfig, LayoutConfig
156
+ tabs: list[TabConfig] = []
157
+ for i in range(1, num_tabs + 1):
158
+ tab: TabConfig = {
159
+ "tabName": f"Tab{i}",
160
+ "startDir": "~/" + str(Path.cwd().relative_to(Path.home())),
161
+ "command": "bash",
162
+ }
163
+ tabs.append(tab)
164
+ layouts: list[LayoutConfig] = [
165
+ {
166
+ "layoutName": f"{Path.cwd().name}Layout",
167
+ "layoutTabs": tabs,
168
+ }
169
+ ]
170
+ file: LayoutsFile = {
171
+ "$schema": "https://bit.ly/cfglayout", # type: ignore
172
+ "version": "0.1",
173
+ "layouts": layouts,
174
+ }
175
+ import json
176
+ json_string = json.dumps(file, indent=4)
177
+ if name is None:
178
+ layout_path = Path.cwd() / "layout.json"
179
+ else:
180
+ layout_path = Path.cwd() / (name.replace(".json", "") + ".json")
181
+ layout_path.parent.mkdir(parents=True, exist_ok=True)
182
+ if layout_path.exists():
183
+ print(f"❌ File {layout_path} already exists. Aborting to avoid overwriting.")
184
+ return
185
+ layout_path.write_text(json_string, encoding="utf-8")
186
+ print(f"✅ Created layout template at {layout_path}")
@@ -45,7 +45,7 @@ def create_from_function(
45
45
 
46
46
  # ========================= choosing function to run
47
47
  if function is None or function.strip() == "":
48
- from machineconfig.scripts.python.helpers_fire_command.fire_jobs_route_helper import choose_function_or_lines
48
+ from machineconfig.scripts.python.helpers.helpers_fire_command.fire_jobs_route_helper import choose_function_or_lines
49
49
  choice_function, choice_file, _kwargs_dict = choose_function_or_lines(choice_file, kwargs_dict={})
50
50
  else:
51
51
  choice_function = function
@@ -0,0 +1,96 @@
1
+ import re
2
+ import subprocess
3
+ from pathlib import Path
4
+
5
+
6
+ _ANSI_ESCAPE_RE = re.compile(
7
+ r"(?:\x1B|\u001B|\033)\[[0-?]*[ -/]*[@-~]|\[[0-9;?]+[ -/]*[@-~]|\[m"
8
+ )
9
+
10
+
11
+ def strip_ansi_codes(text: str) -> str:
12
+ return _ANSI_ESCAPE_RE.sub("", text)
13
+
14
+
15
+ def choose_zellij_session(name: str | None, new_session: bool, kill_all: bool) -> tuple[str, str | None]:
16
+ """Choose a Zellij session. Returns tuple of (action, script_to_run) where action is 'run_script', 'exit', or 'error'."""
17
+ if name is not None:
18
+ return ("run_script", f"zellij attach {name}")
19
+ if new_session:
20
+ cmd = "zellij --layout st2"
21
+ if kill_all:
22
+ cmd = f"zellij kill-all-sessions --yes\n{cmd}"
23
+ return ("run_script", cmd)
24
+ cmd = "zellij list-sessions"
25
+ try:
26
+ sessions: list[str] = subprocess.check_output(cmd, shell=True).decode().strip().split("\n")
27
+ except subprocess.CalledProcessError:
28
+ sessions = []
29
+ sessions = [s for s in sessions if s.strip()]
30
+ # print(f"Found Zellij sessions: {sessions}")
31
+ sessions.sort(key=lambda s: "EXITED" in s)
32
+ if "current" in sessions:
33
+ return ("error", "Already in a Zellij session, avoiding nesting and exiting.")
34
+ if len(sessions) == 0:
35
+ return ("run_script", "zellij --layout st2")
36
+ if len(sessions) == 1:
37
+ sn = strip_ansi_codes(sessions[0])
38
+ session_name = sn.split(" [Created")[0]
39
+ return ("run_script", f"zellij attach {session_name}")
40
+ from machineconfig.utils.options import choose_from_options
41
+ NEW_SESSION_LABEL = "NEW SESSION"
42
+ KILL_ALL_AND_NEW_LABEL = "KILL ALL SESSIONS & START NEW"
43
+ options = sessions + [NEW_SESSION_LABEL, KILL_ALL_AND_NEW_LABEL]
44
+ try:
45
+ session_name = choose_from_options(msg="Choose a Zellij session to attach to:", multi=False, options=options, tv=True)
46
+ except Exception as e:
47
+ return ("error", f"Error choosing Zellij session: {e}")
48
+ if session_name == NEW_SESSION_LABEL:
49
+ cmd = "zellij --layout st2"
50
+ if kill_all:
51
+ cmd = f"zellij kill-all-sessions --yes\n{cmd}"
52
+ return ("run_script", cmd)
53
+ if session_name == KILL_ALL_AND_NEW_LABEL:
54
+ return ("run_script", "zellij kill-all-sessions --yes\nzellij --layout st2")
55
+ session_name_clean = strip_ansi_codes(session_name)
56
+ session_name_clean = session_name_clean.split(" [Created")[0]
57
+ return ("run_script", f"zellij attach {session_name_clean}")
58
+
59
+
60
+ def get_session_tabs() -> list[tuple[str, str]]:
61
+ cmd = "zellij list-sessions"
62
+ try:
63
+ sessions: list[str] = subprocess.check_output(cmd, shell=True).decode().strip().split("\n")
64
+ except subprocess.CalledProcessError:
65
+ sessions = []
66
+ sessions = [strip_ansi_codes(s) for s in sessions]
67
+ active_sessions = [s for s in sessions if "EXITED" not in s]
68
+ result: list[tuple[str, str]] = []
69
+ for session_line in active_sessions:
70
+ session_name = session_line.split(" [Created")[0].strip()
71
+ tab_cmd = f"zellij --session {session_name} action query-tab-names"
72
+ try:
73
+ tabs: list[str] = subprocess.check_output(tab_cmd, shell=True).decode().strip().split("\n")
74
+ for tab in tabs:
75
+ if tab.strip():
76
+ result.append((session_name, tab.strip()))
77
+ except subprocess.CalledProcessError:
78
+ continue
79
+ return result
80
+
81
+
82
+ def start_wt(layout_name: str) -> tuple[str, str | None]:
83
+ """Start a Windows Terminal layout by name. Returns tuple of (status, message) where status is 'success' or 'error'."""
84
+ import json
85
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile
86
+ from machineconfig.cluster.sessions_managers.wt_local import run_wt_layout
87
+ layouts_file = Path.home().joinpath("dotfiles/machineconfig/layouts.json")
88
+ if not layouts_file.exists():
89
+ return ("error", f"❌ Layouts file not found: {layouts_file}")
90
+ layouts_data: LayoutsFile = json.loads(layouts_file.read_text(encoding="utf-8"))
91
+ chosen_layout = next((a_layout for a_layout in layouts_data["layouts"] if a_layout["layoutName"] == layout_name), None)
92
+ if not chosen_layout:
93
+ available_layouts = [a_layout["layoutName"] for a_layout in layouts_data["layouts"]]
94
+ return ("error", f"❌ Layout '{layout_name}' not found in layouts file.\nAvailable layouts: {', '.join(available_layouts)}")
95
+ run_wt_layout(layout_config=chosen_layout)
96
+ return ("success", None)
@@ -22,7 +22,7 @@ def download(
22
22
  if output is not None and output_dir is not None:
23
23
  typer.echo("❌ Error: --output and --output-dir cannot be used together.", err=True)
24
24
  return None
25
- typer.echo(f"📥 Downloading from: {url}")
25
+ typer.echo(f" {url}")
26
26
 
27
27
  def _sanitize_candidate_filename(name: str) -> Optional[str]:
28
28
  candidate = Path(name).name.strip()
@@ -1,11 +1,11 @@
1
- from tempfile import tempdir
2
1
  import typer
3
2
  from typing import Optional, Annotated, Literal, TypedDict, cast
3
+ from machineconfig.utils.ssh_utils.abc import MACHINECONFIG_VERSION
4
4
 
5
5
 
6
6
  def tui_env(which: Annotated[Literal["PATH", "p", "ENV", "e"], typer.Argument(help="Which environment variable to display.")] = "ENV") -> None:
7
7
  """📚 NAVIGATE PATH variable with TUI"""
8
- from machineconfig.scripts.python import env_manager as navigator
8
+ from machineconfig.scripts.python.helpers import helper_env as navigator
9
9
  from pathlib import Path
10
10
 
11
11
  match which:
@@ -18,7 +18,7 @@ def tui_env(which: Annotated[Literal["PATH", "p", "ENV", "e"], typer.Argument(he
18
18
  uv_with = ["textual"]
19
19
  uv_project_dir = None
20
20
  if not Path.home().joinpath("code/machineconfig").exists():
21
- uv_with.append("machineconfig>=8.14")
21
+ uv_with.append(MACHINECONFIG_VERSION)
22
22
  else:
23
23
  uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
24
24
  run_shell_script(
@@ -37,7 +37,7 @@ def init_project(
37
37
  ] = None,
38
38
  group: Annotated[
39
39
  Optional[str], typer.Option("--group", "-g", help="group of packages names (no separation) p:plot, t:types, l:linting, i:interactive, d:data")
40
- ] = "ptlid",
40
+ ] = "p,t,l,i,d",
41
41
  ) -> None:
42
42
  if libraries is not None:
43
43
  packages_add_line = f"uv add {libraries}"
@@ -51,7 +51,9 @@ def init_project(
51
51
  typer.echo(f"❌ Error: pyproject.toml not found in {repo_root}", err=True)
52
52
  raise typer.Exit(code=1)
53
53
  starting_code = ""
54
+ agents_line = ""
54
55
  else:
56
+ agents_line = """agents make-config"""
55
57
  if name is not None:
56
58
  from machineconfig.utils.accessories import randstr
57
59
 
@@ -68,36 +70,49 @@ uv init --python {python}
68
70
  uv venv
69
71
  """
70
72
  print(f"Adding group `{group}` with common data science and plotting packages...")
71
- total_packages: list[str] = []
73
+ total_packages: dict[str, list[str]] = {}
72
74
  if group is not None:
73
- if "t" in group:
74
- total_packages.append(
75
- "types-python-dateutil types-pyyaml types-requests types-tqdm types-mysqlclient types-paramiko types-pytz types-sqlalchemy types-toml types-urllib3"
76
- )
77
- if "l" in group:
78
- total_packages.append("mypy pyright ruff pylint pyrefly cleanpy ipdb pudb")
79
- if "i" in group:
80
- total_packages.append("ipython ipykernel jupyterlab nbformat marimo")
81
- if "p" in group:
82
- total_packages.append("python-magic matplotlib plotly kaleido")
83
- if "d" in group:
84
- total_packages.append("numpy pandas polars duckdb-engine sqlalchemy psycopg2-binary pyarrow tqdm openpyxl")
75
+ packages = group.split(",")
76
+ if "t" in packages or "types" in packages:
77
+ total_packages["types"] = [
78
+ "types-python-dateutil",
79
+ "types-pyyaml",
80
+ "types-requests",
81
+ "types-tqdm",
82
+ "types-mysqlclient",
83
+ "types-paramiko",
84
+ "types-pytz",
85
+ "types-sqlalchemy",
86
+ "types-toml",
87
+ "types-urllib3",
88
+ ]
89
+ if "l" in packages:
90
+ total_packages["linting"] = ["mypy", "pyright", "ruff", "pylint", "pyrefly", "cleanpy", "ipdb", "pudb"]
91
+ if "i" in packages:
92
+ total_packages["interactive"] = ["ipython", "ipykernel", "jupyterlab", "nbformat", "marimo"]
93
+ if "p" in packages:
94
+ total_packages["plot"] = ["python-magic", "matplotlib", "plotly", "kaleido"]
95
+ if "d" in packages:
96
+ total_packages["data"] = ["numpy", "pandas", "polars", "duckdb-engine", "sqlalchemy", "psycopg2-binary", "pyarrow", "tqdm", "openpyxl"]
85
97
  from machineconfig.utils.ve import get_ve_activate_line
86
-
98
+ groups_packages_lines = "\n".join(
99
+ [f"uv add --group {group_name} {' '.join(packages)}" for group_name, packages in total_packages.items()]
100
+ )
87
101
  script = f"""
88
102
  {starting_code}
89
103
  {packages_add_line}
90
- uv add --group {group} {" ".join(total_packages)}
104
+ {groups_packages_lines}
91
105
  {get_ve_activate_line(ve_root=str(repo_root.joinpath(".venv")))}
106
+ {agents_line}
92
107
  ls
93
108
  """
94
109
  from machineconfig.utils.code import exit_then_run_shell_script, run_shell_script
95
- # exit_then_run_shell_script(script)
96
- _ = exit_then_run_shell_script
97
- run_shell_script(script)
98
- if tempdir:
99
- from machineconfig.scripts.python.ai.initai import add_ai_configs
100
- add_ai_configs(repo_root=repo_root)
110
+ exit_then_run_shell_script(script)
111
+ _ = exit_then_run_shell_script, run_shell_script
112
+ # run_shell_script(script)
113
+ # if tempdir:
114
+ # from machineconfig.scripts.python.ai.initai import add_ai_configs
115
+ # add_ai_configs(repo_root=repo_root)
101
116
 
102
117
 
103
118
  def edit_file_with_hx(
@@ -144,8 +159,14 @@ class MachineSpecs(TypedDict):
144
159
  user: str
145
160
 
146
161
 
147
- def get_machine_specs() -> MachineSpecs:
162
+ def get_machine_specs(hardware: Annotated[bool, typer.Option(..., "--hardware", "-h", help="Show compute capability")] = False) -> MachineSpecs:
148
163
  """Write print and return the local machine specs."""
164
+ if hardware:
165
+ from machineconfig.scripts.python.helpers.helpers_utils.specs import main
166
+ main()
167
+ import sys
168
+ sys.exit()
169
+
149
170
  import platform
150
171
  from machineconfig.utils.code import get_uv_command
151
172