machineconfig 7.98__py3-none-any.whl → 8.51__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 (331) 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 +271 -152
  13. machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
  14. machineconfig/jobs/installer/package_groups.py +11 -9
  15. machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +1 -2
  16. machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +1 -1
  17. machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +10 -8
  18. machineconfig/jobs/installer/{custom → python_scripts}/hx.py +30 -13
  19. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +1 -1
  20. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +6 -5
  21. machineconfig/jobs/installer/{custom_dev → python_scripts}/sysabc.py +26 -20
  22. machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +1 -1
  23. machineconfig/jobs/installer/{custom → python_scripts}/yazi.py +39 -19
  24. machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
  25. machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
  26. machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
  27. machineconfig/jobs/scripts_dynamic/a.py +428 -0
  28. machineconfig/logger.py +1 -1
  29. machineconfig/profile/create_helper.py +21 -10
  30. machineconfig/profile/create_links.py +77 -20
  31. machineconfig/profile/create_links_export.py +63 -58
  32. machineconfig/profile/create_shell_profile.py +14 -0
  33. machineconfig/profile/mapper_data.toml +45 -0
  34. machineconfig/profile/mapper_dotfiles.toml +249 -0
  35. machineconfig/scripts/python/agents.py +76 -171
  36. machineconfig/scripts/python/ai/initai.py +3 -1
  37. machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
  38. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
  39. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
  40. machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
  41. machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
  42. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +1 -1
  43. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +29 -0
  44. machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
  45. machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
  46. machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
  47. machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
  48. machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
  49. machineconfig/scripts/python/ai/utils/vscode_tasks.py +6 -3
  50. machineconfig/scripts/python/cloud.py +58 -11
  51. machineconfig/scripts/python/croshell.py +4 -155
  52. machineconfig/scripts/python/devops.py +57 -38
  53. machineconfig/scripts/python/devops_navigator.py +17 -3
  54. machineconfig/scripts/python/fire_jobs.py +10 -193
  55. machineconfig/scripts/python/ftpx.py +5 -224
  56. machineconfig/scripts/python/graph/cli_graph.json +8743 -0
  57. machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
  58. machineconfig/scripts/python/{env_manager → helpers/helper_env}/env_manager_tui.py +1 -1
  59. machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
  60. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.py +1 -1
  61. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
  62. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_gemini.py +1 -1
  63. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_qwen.py +1 -1
  64. machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
  65. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py +10 -7
  66. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
  67. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
  68. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
  69. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
  70. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
  71. machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
  72. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +3 -1
  73. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +6 -6
  74. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +10 -5
  75. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +4 -4
  76. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
  77. machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
  78. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
  79. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +7 -6
  80. machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
  81. machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
  82. machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
  83. machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
  84. machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +67 -0
  85. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_nw.py +69 -82
  86. machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
  87. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +47 -22
  88. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_file.py +44 -30
  89. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_server.py +26 -43
  90. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_terminal.py +12 -6
  91. machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
  92. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +12 -6
  93. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
  94. machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +64 -50
  95. machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
  96. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
  97. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
  98. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +3 -3
  99. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/file_wrangler.py +1 -0
  100. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
  101. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
  102. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +3 -3
  103. machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
  104. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_linux/fzfg +4 -3
  105. machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
  106. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_windows/fzfg.ps1 +1 -1
  107. machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
  108. machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
  109. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
  110. machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
  111. machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
  112. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
  113. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
  114. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address.py +52 -10
  115. machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
  116. machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
  117. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_ssh.py +2 -2
  118. machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
  119. machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
  120. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
  121. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
  122. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
  123. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
  124. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +118 -34
  125. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +3 -2
  126. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -13
  127. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_2.py +63 -19
  128. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
  129. machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
  130. machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  131. machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
  132. machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -2
  133. machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
  134. machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
  135. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/download.py +1 -1
  136. machineconfig/scripts/python/{helpers_devops/cli_utils.py → helpers/helpers_utils/pdf.py} +2 -2
  137. machineconfig/scripts/python/{helpers_utils/path.py → helpers/helpers_utils/python.py} +65 -40
  138. machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
  139. machineconfig/scripts/python/mcfg_entry.py +133 -48
  140. machineconfig/scripts/python/msearch.py +16 -61
  141. machineconfig/scripts/python/sessions.py +68 -203
  142. machineconfig/scripts/python/terminal.py +27 -102
  143. machineconfig/scripts/python/utils.py +101 -22
  144. machineconfig/settings/atuin/config.toml +294 -0
  145. machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
  146. machineconfig/settings/linters/.ruff.toml +2 -1
  147. machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
  148. machineconfig/settings/shells/bash/init.sh +6 -3
  149. machineconfig/settings/shells/nushell/config.nu +23 -1
  150. machineconfig/settings/shells/nushell/env.nu +22 -48
  151. machineconfig/settings/shells/nushell/init.nu +64 -240
  152. machineconfig/settings/shells/pwsh/init.ps1 +69 -1
  153. machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
  154. machineconfig/settings/shells/wezterm/wezterm.lua +4 -1
  155. machineconfig/settings/shells/wt/settings.json +21 -21
  156. machineconfig/settings/shells/zsh/init.sh +25 -4
  157. machineconfig/settings/television/cable_unix/bash-history.toml +1 -1
  158. machineconfig/settings/television/cable_windows/pwsh-history.toml +1 -1
  159. machineconfig/settings/tv/config.toml +234 -0
  160. machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
  161. machineconfig/settings/wsl/.wslconfig +5 -30
  162. machineconfig/settings/wt/__init__.py +0 -0
  163. machineconfig/settings/yazi/yazi_linux.toml +18 -8
  164. machineconfig/settings/zellij/layouts/st.kdl +40 -9
  165. machineconfig/settings/zellij/layouts/st2.kdl +1 -1
  166. machineconfig/setup_linux/__init__.py +0 -1
  167. machineconfig/setup_linux/apps_desktop.sh +8 -27
  168. machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
  169. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +3 -0
  170. machineconfig/setup_mac/__init__.py +0 -2
  171. machineconfig/setup_windows/__init__.py +2 -5
  172. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +14 -13
  173. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +4 -3
  174. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +3 -3
  175. machineconfig/type_hinting/sql/__init__.py +1 -0
  176. machineconfig/type_hinting/sql/base.py +216 -0
  177. machineconfig/type_hinting/sql/core_schema.py +64 -0
  178. machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
  179. machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
  180. machineconfig/type_hinting/typedict/__init__.py +1 -0
  181. machineconfig/type_hinting/typedict/ast_utils.py +130 -0
  182. machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
  183. machineconfig/type_hinting/typedict/generators.py +231 -0
  184. machineconfig/type_hinting/typedict/polars_schema.py +24 -0
  185. machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
  186. machineconfig/utils/accessories.py +24 -0
  187. machineconfig/utils/code.py +78 -33
  188. machineconfig/utils/files/ascii_art.py +10 -14
  189. machineconfig/utils/files/headers.py +3 -5
  190. machineconfig/utils/files/read.py +8 -1
  191. machineconfig/utils/installer_utils/github_release_bulk.py +11 -91
  192. machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
  193. machineconfig/utils/installer_utils/install_from_url.py +1 -1
  194. machineconfig/utils/installer_utils/installer_class.py +12 -4
  195. machineconfig/utils/installer_utils/installer_cli.py +1 -15
  196. machineconfig/utils/installer_utils/installer_helper.py +2 -2
  197. machineconfig/utils/installer_utils/installer_locator_utils.py +13 -13
  198. machineconfig/utils/installer_utils/installer_runner.py +4 -4
  199. machineconfig/utils/io.py +25 -8
  200. machineconfig/utils/meta.py +6 -4
  201. machineconfig/utils/options.py +49 -19
  202. machineconfig/utils/options_utils/__init__.py +0 -0
  203. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  204. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  205. machineconfig/utils/options_utils/tv_options.py +37 -0
  206. machineconfig/utils/path_extended.py +8 -7
  207. machineconfig/utils/scheduler.py +8 -2
  208. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  209. machineconfig/utils/source_of_truth.py +6 -1
  210. machineconfig/utils/ssh.py +73 -23
  211. machineconfig/utils/ssh_utils/abc.py +1 -1
  212. machineconfig/utils/ssh_utils/copy_from_here.py +19 -14
  213. machineconfig/utils/ssh_utils/copy_to_here.py +2 -1
  214. machineconfig/utils/ssh_utils/utils.py +23 -7
  215. machineconfig/utils/ssh_utils/wsl.py +107 -170
  216. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  217. machineconfig/utils/upgrade_packages.py +4 -8
  218. {machineconfig-7.98.dist-info → machineconfig-8.51.dist-info}/METADATA +30 -22
  219. machineconfig-8.51.dist-info/RECORD +543 -0
  220. machineconfig/jobs/installer/check_installations.py +0 -248
  221. machineconfig/profile/backup.toml +0 -49
  222. machineconfig/profile/mapper.toml +0 -263
  223. machineconfig/scripts/linux/other/switch_ip +0 -20
  224. machineconfig/scripts/python/helpers/run_py_script.py +0 -79
  225. machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +0 -26
  226. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
  227. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
  228. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  229. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -215
  230. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  231. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
  232. machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
  233. machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
  234. machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -620
  235. machineconfig/scripts/python/helpers_network/devops_add_identity.py +0 -82
  236. machineconfig/scripts/python/helpers_network/devops_add_ssh_key.py +0 -153
  237. machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +0 -391
  238. machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +0 -338
  239. machineconfig/scripts/python/helpers_network/wsl_windows_transfer.py +0 -67
  240. machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
  241. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
  242. machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
  243. machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
  244. machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
  245. machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
  246. machineconfig/setup_windows/others/obs.ps1 +0 -4
  247. machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
  248. machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
  249. machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
  250. machineconfig/setup_windows/ssh/openssh-server_add_key.ps1 +0 -7
  251. machineconfig/setup_windows/ssh/openssh-server_copy-ssh-id.ps1 +0 -14
  252. machineconfig/utils/options_tv.py +0 -119
  253. machineconfig/utils/tst.py +0 -20
  254. machineconfig-7.98.dist-info/RECORD +0 -504
  255. /machineconfig/jobs/installer/{custom_dev → checks}/__init__.py +0 -0
  256. /machineconfig/{scripts/python/helpers_agents → jobs/installer/python_scripts}/__init__.py +0 -0
  257. /machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
  258. /machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
  259. /machineconfig/jobs/installer/{custom_dev → python_scripts}/cloudflare_warp_cli.py +0 -0
  260. /machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
  261. /machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +0 -0
  262. /machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
  263. /machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
  264. /machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
  265. /machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
  266. /machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
  267. /machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +0 -0
  268. /machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
  269. /machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
  270. /machineconfig/{scripts/python/helpers_network → jobs/scripts/bash_scripts}/mount_drive +0 -0
  271. /machineconfig/{scripts/python/helpers_network → jobs/scripts/bash_scripts}/mount_nfs +0 -0
  272. /machineconfig/{scripts/python/helpers_network → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
  273. /machineconfig/{scripts/python/helpers_network → jobs/scripts/bash_scripts}/mount_smb +0 -0
  274. /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
  275. /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
  276. /machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
  277. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
  278. /machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
  279. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
  280. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
  281. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
  282. /machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
  283. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
  284. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
  285. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
  286. /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
  287. /machineconfig/scripts/python/{helpers_agents/agentic_frameworks → graph}/__init__.py +0 -0
  288. /machineconfig/scripts/python/{helpers_cloud → helpers}/__init__.py +0 -0
  289. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
  290. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
  291. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_agents}/__init__.py +0 -0
  292. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_agents/agentic_frameworks}/__init__.py +0 -0
  293. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
  294. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
  295. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_helper_types.py +0 -0
  296. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
  297. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/prompt.txt +0 -0
  298. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
  299. /machineconfig/scripts/python/{helpers_devops/themes → helpers/helpers_cloud}/__init__.py +0 -0
  300. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +0 -0
  301. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
  302. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_croshell}/__init__.py +0 -0
  303. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +0 -0
  304. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
  305. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
  306. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
  307. /machineconfig/scripts/python/{helpers_network → helpers/helpers_devops}/__init__.py +0 -0
  308. /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_devops/themes}/__init__.py +0 -0
  309. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  310. /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_fire_command}/__init__.py +0 -0
  311. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
  312. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/f.py +0 -0
  313. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_streamlit_helper.py +0 -0
  314. /machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/__init__.py +0 -0
  315. /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
  316. /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_network/__init__.py} +0 -0
  317. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nfs.py +0 -0
  318. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nw_drive.py +0 -0
  319. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/onetimeshare.py +0 -0
  320. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/wifi_conn.py +0 -0
  321. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -0
  322. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_1.py +0 -0
  323. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
  324. /machineconfig/scripts/python/helpers/{ast_search.py → helpers_search/ast_search.py} +0 -0
  325. /machineconfig/scripts/python/helpers/{qr_code.py → helpers_search/qr_code.py} +0 -0
  326. /machineconfig/scripts/python/helpers/{repo_rag.py → helpers_search/repo_rag.py} +0 -0
  327. /machineconfig/scripts/python/helpers/{symantic_search.py → helpers_search/symantic_search.py} +0 -0
  328. /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
  329. {machineconfig-7.98.dist-info → machineconfig-8.51.dist-info}/WHEEL +0 -0
  330. {machineconfig-7.98.dist-info → machineconfig-8.51.dist-info}/entry_points.txt +0 -0
  331. {machineconfig-7.98.dist-info → machineconfig-8.51.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,11 @@
1
1
  import typer
2
2
  from typing import Optional, Annotated, Literal, TypedDict, cast
3
+ from machineconfig.utils.ssh_utils.abc import MACHINECONFIG_VERSION
3
4
 
4
5
 
5
6
  def tui_env(which: Annotated[Literal["PATH", "p", "ENV", "e"], typer.Argument(help="Which environment variable to display.")] = "ENV") -> None:
6
7
  """📚 NAVIGATE PATH variable with TUI"""
7
- from machineconfig.scripts.python import env_manager as navigator
8
+ from machineconfig.scripts.python.helpers import helper_env as navigator
8
9
  from pathlib import Path
9
10
 
10
11
  match which:
@@ -17,50 +18,51 @@ def tui_env(which: Annotated[Literal["PATH", "p", "ENV", "e"], typer.Argument(he
17
18
  uv_with = ["textual"]
18
19
  uv_project_dir = None
19
20
  if not Path.home().joinpath("code/machineconfig").exists():
20
- uv_with.append("machineconfig>=7.98")
21
+ uv_with.append(MACHINECONFIG_VERSION)
21
22
  else:
22
23
  uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
23
24
  run_shell_script(
24
- get_uv_command_executing_python_script(python_script=path.read_text(encoding="utf-8"), uv_with=uv_with, uv_project_dir=uv_project_dir)[0]
25
+ get_uv_command_executing_python_script(python_script=path.read_text(encoding="utf-8"), uv_with=uv_with, uv_project_dir=uv_project_dir)[0],
26
+ display_script=True,
27
+ clean_env=False,
25
28
  )
26
29
 
27
30
 
28
31
  def init_project(
29
32
  name: Annotated[Optional[str], typer.Option("--name", "-n", help="Name of the project.")] = None,
30
- tmp_dir: Annotated[
31
- bool, typer.Option("--tmp-dir", "-t", help="Use a temporary directory for the project initialization.")
32
- ] = False,
33
- python: Annotated[Literal["3.13", "3.14"], typer.Option("--python", "-p", help="Python version for the uv virtual environment.")] = "3.13",
34
- libraries: Annotated[Optional[str], typer.Option("--libraries", "-l", help="Additional packages to include in the uv virtual environment.")] = None,
35
- group: Annotated[Optional[str], typer.Option("--group", "-g", help="group of packages names (no separation) p:plot, t:types, l:linting, i:interactive, d:data")] = "ptlid",
36
- # types_packages: Annotated[
37
- # bool, typer.Option("--types-packages/--no-types-packages", "-T/-NT", help="Include types packages for better type hinting.")
38
- # ] = True,
39
- # linting_debug_packages: Annotated[
40
- # bool, typer.Option("--linting-debug-packages/--no-linting-debug-packages", "-L/-NL", help="Include linting and debugging packages.")
41
- # ] = True,
42
- # ia_packages: Annotated[bool, typer.Option("--ia-packages/--no-ia-packages", "-I/-NI", help="Include interactive and IA packages.")] = True,
43
- # plot_packages: Annotated[bool, typer.Option("--plot-packages/--no-plot-packages", "-P/-NP", help="Include plotting packages.")] = True,
44
- # data_packages: Annotated[bool, typer.Option("--data-packages/--no-data-packages", "-D/-ND", help="Include data manipulation packages.")] = True,
45
-
33
+ tmp_dir: Annotated[bool, typer.Option("--tmp-dir", "-t", help="Use a temporary directory for the project initialization.")] = False,
34
+ python: Annotated[
35
+ Literal["3.11", "3.12", "3.13", "3.14"], typer.Option("--python", "-p", help="Python sub version for the uv virtual environment.")
36
+ ] = "3.13",
37
+ libraries: Annotated[
38
+ Optional[str], typer.Option("--libraries", "-l", help="Additional packages to include in the uv virtual environment (space separated).")
39
+ ] = None,
40
+ group: Annotated[
41
+ Optional[str], typer.Option("--group", "-g", help="group of packages names (no separation) p:plot, t:types, l:linting, i:interactive, d:data")
42
+ ] = "p,t,l,i,d",
46
43
  ) -> None:
47
44
  if libraries is not None:
48
45
  packages_add_line = f"uv add {libraries}"
49
46
  else:
50
47
  packages_add_line = ""
51
48
  from pathlib import Path
49
+
52
50
  if not tmp_dir:
53
51
  repo_root = Path.cwd()
54
52
  if not (repo_root / "pyproject.toml").exists():
55
53
  typer.echo(f"❌ Error: pyproject.toml not found in {repo_root}", err=True)
56
54
  raise typer.Exit(code=1)
57
55
  starting_code = ""
56
+ agents_line = ""
58
57
  else:
58
+ agents_line = """agents make-config"""
59
59
  if name is not None:
60
60
  from machineconfig.utils.accessories import randstr
61
+
61
62
  repo_root = Path.home().joinpath(f"tmp_results/tmp_projects/{name}")
62
63
  else:
63
64
  from machineconfig.utils.accessories import randstr
65
+
64
66
  repo_root = Path.home().joinpath(f"tmp_results/tmp_projects/{randstr(6)}")
65
67
  repo_root.mkdir(parents=True, exist_ok=True)
66
68
  print(f"Using temporary directory for project initialization: {repo_root}")
@@ -70,32 +72,49 @@ uv init --python {python}
70
72
  uv venv
71
73
  """
72
74
  print(f"Adding group `{group}` with common data science and plotting packages...")
73
- total_packages: list[str] = []
75
+ total_packages: dict[str, list[str]] = {}
74
76
  if group is not None:
75
- if "t" in group:
76
- total_packages.append(
77
- "types-python-dateutil types-pyyaml types-requests types-tqdm types-mysqlclient types-paramiko types-pytz types-sqlalchemy types-toml types-urllib3"
78
- )
79
- if "l" in group:
80
- total_packages.append("mypy pyright ruff pylint pyrefly cleanpy ipdb pudb")
81
- if "i" in group:
82
- total_packages.append("ipython ipykernel jupyterlab nbformat marimo")
83
- if "p" in group:
84
- total_packages.append("python-magic matplotlib plotly kaleido")
85
- if "d" in group:
86
- total_packages.append("numpy pandas polars duckdb-engine sqlalchemy psycopg2-binary pyarrow tqdm openpyxl")
77
+ packages = group.split(",")
78
+ if "t" in packages or "types" in packages:
79
+ total_packages["types"] = [
80
+ "types-python-dateutil",
81
+ "types-pyyaml",
82
+ "types-requests",
83
+ "types-tqdm",
84
+ "types-mysqlclient",
85
+ "types-paramiko",
86
+ "types-pytz",
87
+ "types-sqlalchemy",
88
+ "types-toml",
89
+ "types-urllib3",
90
+ ]
91
+ if "l" in packages:
92
+ total_packages["linting"] = ["mypy", "pyright", "ruff", "pylint", "pyrefly", "cleanpy", "ipdb", "pudb"]
93
+ if "i" in packages:
94
+ total_packages["interactive"] = ["ipython", "ipykernel", "jupyterlab", "nbformat", "marimo"]
95
+ if "p" in packages:
96
+ total_packages["plot"] = ["python-magic", "matplotlib", "plotly", "kaleido"]
97
+ if "d" in packages:
98
+ total_packages["data"] = ["numpy", "pandas", "polars", "duckdb-engine", "sqlalchemy", "psycopg2-binary", "pyarrow", "tqdm", "openpyxl"]
87
99
  from machineconfig.utils.ve import get_ve_activate_line
88
-
100
+ groups_packages_lines = "\n".join(
101
+ [f"uv add --group {group_name} {' '.join(packages)}" for group_name, packages in total_packages.items()]
102
+ )
89
103
  script = f"""
90
104
  {starting_code}
91
105
  {packages_add_line}
92
- uv add --group {group} {" ".join(total_packages)}
106
+ {groups_packages_lines}
93
107
  {get_ve_activate_line(ve_root=str(repo_root.joinpath(".venv")))}
108
+ {agents_line}
94
109
  ls
95
110
  """
96
- from machineconfig.utils.code import exit_then_run_shell_script
97
-
111
+ from machineconfig.utils.code import exit_then_run_shell_script, run_shell_script
98
112
  exit_then_run_shell_script(script)
113
+ _ = exit_then_run_shell_script, run_shell_script
114
+ # run_shell_script(script)
115
+ # if tempdir:
116
+ # from machineconfig.scripts.python.ai.initai import add_ai_configs
117
+ # add_ai_configs(repo_root=repo_root)
99
118
 
100
119
 
101
120
  def edit_file_with_hx(
@@ -142,13 +161,19 @@ class MachineSpecs(TypedDict):
142
161
  user: str
143
162
 
144
163
 
145
- def get_machine_specs() -> MachineSpecs:
164
+ def get_machine_specs(hardware: Annotated[bool, typer.Option(..., "--hardware", "-h", help="Show compute capability")] = False) -> MachineSpecs:
146
165
  """Write print and return the local machine specs."""
166
+ if hardware:
167
+ from machineconfig.scripts.python.helpers.helpers_utils.specs import main
168
+ main()
169
+ import sys
170
+ sys.exit()
171
+
147
172
  import platform
148
- from machineconfig.utils.code import get_uv_run_command
173
+ from machineconfig.utils.code import get_uv_command
149
174
 
150
- uv_run_cmd = get_uv_run_command(platform=platform.system()) # type: ignore
151
- command = f"""{uv_run_cmd} --with distro python -c "import distro; print(distro.name(pretty=True))" """
175
+ uv_cmd = get_uv_command(platform=platform.system()) # type: ignore
176
+ command = f"""{uv_cmd} run --with distro python -c "import distro; print(distro.name(pretty=True))" """
152
177
  import subprocess
153
178
  from pathlib import Path
154
179
  import socket
@@ -0,0 +1,246 @@
1
+ """
2
+ CPU Specification Helper.
3
+
4
+ This module provides utilities to detect the CPU model and fetch Geekbench scores
5
+ using the geekbench-browser-python tool.
6
+ """
7
+
8
+ import platform
9
+ import re
10
+ import subprocess
11
+
12
+
13
+ def get_cpu_name() -> str:
14
+ """
15
+ Detect the CPU model name across different operating systems.
16
+
17
+ Returns:
18
+ str: The detected CPU model name or 'Unknown CPU'.
19
+ """
20
+ system = platform.system()
21
+
22
+ if system == "Linux":
23
+ try:
24
+ with open("/proc/cpuinfo") as f:
25
+ for line in f:
26
+ if "model name" in line:
27
+ return line.split(":", 1)[1].strip()
28
+ except FileNotFoundError:
29
+ pass
30
+
31
+ elif system == "Windows":
32
+ try:
33
+ # shell=True might be needed for wmic depending on environment,
34
+ # but usually check_output with string list is safer if executable is in path.
35
+ # User provided: wmic cpu get name
36
+ output = subprocess.check_output("wmic cpu get name", shell=True).decode()
37
+ lines = output.strip().split("\n")
38
+ if len(lines) > 1:
39
+ return lines[1].strip()
40
+ except (subprocess.CalledProcessError, IndexError):
41
+ pass
42
+
43
+ elif system == "Darwin":
44
+ try:
45
+ return subprocess.check_output(
46
+ ["sysctl", "-n", "machdep.cpu.brand_string"]
47
+ ).decode().strip()
48
+ except subprocess.CalledProcessError:
49
+ pass
50
+
51
+ return "Unknown CPU"
52
+
53
+
54
+ def clean_cpu_name(cpu_name: str) -> str:
55
+ """
56
+ Clean the CPU name to improve Geekbench search results.
57
+
58
+ Removes extra details like 'w/ Radeon Graphics', frequency, etc.
59
+
60
+ Args:
61
+ cpu_name (str): The raw CPU name string.
62
+
63
+ Returns:
64
+ str: A cleaned CPU name suitable for searching.
65
+ """
66
+ # Remove "w/ ..." or "with ..."
67
+ # Example: AMD Ryzen 7 8745HS w/ Radeon 780M Graphics -> AMD Ryzen 7 8745HS
68
+ cleaned = re.split(r"\s+(w/|with)\s+", cpu_name, flags=re.IGNORECASE)[0]
69
+
70
+ # Remove (R) and (TM) symbols which confuse regex search and are often noisy
71
+ cleaned = re.sub(r"\([RT]M?\)", "", cleaned, flags=re.IGNORECASE)
72
+
73
+ # Remove clock speed like " @ 3.00GHz", " 3.00GHz", " 3.2GHz"
74
+ cleaned = re.sub(r"\s+@?\s*\d+(\.\d+)?\s*GHz", "", cleaned, flags=re.IGNORECASE)
75
+
76
+ # Remove "12-Core Processor" etc if present (some linux distros add this)
77
+ cleaned = re.sub(r"\s+\d+-Core\s+Processor", "", cleaned, flags=re.IGNORECASE)
78
+
79
+ # Remove trailing "Processor" word if it's there
80
+ cleaned = re.sub(r"\s+Processor", "", cleaned, flags=re.IGNORECASE)
81
+
82
+ # Collapse multiple spaces
83
+ cleaned = re.sub(r"\s+", " ", cleaned)
84
+
85
+ return cleaned.strip()
86
+
87
+
88
+ def run_geekbench_lookup(search_term: str) -> bool:
89
+ """
90
+ Run the geekbench search using uvx.
91
+
92
+ Args:
93
+ search_term (str): The CPU name to search for (supports Regex).
94
+
95
+ Returns:
96
+ bool: True if results were found, False otherwise.
97
+ """
98
+ # Note: uvx caches the tool so subsequent runs are fast.
99
+ # The 'gbr' tool uses pandas.str.contains(regex=True), so we can use regex patterns.
100
+ # We quote the search term to ensure it's treated as a single pattern containing spaces.
101
+ cmd = [
102
+ "uvx",
103
+ "--from",
104
+ "geekbench-browser-python",
105
+ "gbr",
106
+ search_term,
107
+ "--verbose",
108
+ ]
109
+ printable_cmd = " ".join(f'"{x}"' if " " in x else x for x in cmd)
110
+ print(f"Running: {printable_cmd}")
111
+ try:
112
+ # Capture output to check for results
113
+ # We enforce utf-8 encoding because 'geekbench-browser-python' likely outputs
114
+ # Unicode characters (Rich tables, box drawing) which can fail to decode or
115
+ # appear as garbage on Windows (default cp1252) if not handled.
116
+ result = subprocess.run(
117
+ cmd,
118
+ check=True,
119
+ stdout=subprocess.PIPE,
120
+ stderr=subprocess.PIPE,
121
+ text=True,
122
+ encoding="utf-8",
123
+ errors="replace",
124
+ )
125
+ output = result.stdout
126
+
127
+ # Check if we have data rows.
128
+ # Check iteratively for lines that look like data rows (Unicode or ASCII).
129
+ lines = output.splitlines()
130
+ has_data = False
131
+ for line in lines:
132
+ line_stripped = line.strip()
133
+ # Unicode table data row start (Light Vertical)
134
+ if "│" in line:
135
+ has_data = True
136
+ break
137
+ # ASCII table data row start (Pipe)
138
+ # Must exclude headers and separators which also start with pipe in ASCII mode.
139
+ if line_stripped.startswith("|"):
140
+ lower_line = line.lower()
141
+ # Skip header/separator lines
142
+ if "description" in lower_line or "single" in lower_line or "---" in line:
143
+ continue
144
+ has_data = True
145
+ break
146
+
147
+ if has_data:
148
+ print(output)
149
+ return True
150
+ else:
151
+ # If verbose debugging is needed, we could print output here.
152
+ # But normally if no table is found, the tool might have just printed log info to stderr.
153
+ # If it did print something to stdout that isn't a table, we probably shouldn't show it
154
+ # as a "result", but it might be helpful for debugging why it failed.
155
+ if output.strip():
156
+ # Only print debug info if it's NOT just an empty table structure to avoid noise
157
+ if not ("description" in output.lower() and ("---" in output or "│" in output)):
158
+ print(f"Debug output from tool:\n{output}")
159
+
160
+ print(f"No results found for '{search_term}'.")
161
+ return False
162
+
163
+ except subprocess.CalledProcessError:
164
+ print("Failed to retrieve Geekbench scores (command failed).")
165
+ return False
166
+ except FileNotFoundError:
167
+ print("Error: 'uvx' command not found. Please ensure 'uv' is installed.")
168
+ return False
169
+
170
+
171
+ def main() -> None:
172
+ """Main entry point."""
173
+ cpu_name = get_cpu_name()
174
+ print(f"Detected CPU: {cpu_name}")
175
+
176
+ if cpu_name == "Unknown CPU":
177
+ print("Could not detect CPU name. Exiting.")
178
+ return
179
+
180
+ full_search_term = clean_cpu_name(cpu_name)
181
+
182
+ # Retry logic: remove last word until we find something or run out of words
183
+ # We escape each word to ensure regex special characters (like +, (), etc) in the name
184
+ # are treated as literals, while preserving our ability to use regex wildcards later.
185
+ words = [re.escape(w) for w in full_search_term.split()]
186
+
187
+ while words:
188
+ current_term = " ".join(words)
189
+
190
+ # Heuristic: Don't search for extremely short generic terms if possible,
191
+ # but "AMD" or "Intel" might be what we end up with if nothing else works.
192
+ # Let's try at least length 2 words unless it's just 1 word left.
193
+ if len(words) > 1 and len(current_term) < 4:
194
+ words.pop()
195
+ continue
196
+
197
+ print(f"Search Term: {current_term}")
198
+ if run_geekbench_lookup(current_term):
199
+ return
200
+
201
+ last_word = words[-1]
202
+ numeric_part = None
203
+
204
+ # Check if the last word starts with digits (e.g. 8745HS or 8745)
205
+ # We want to both strip suffix AND try wildcards.
206
+ match_digits = re.match(r"^(\d+)([a-zA-Z].*)?$", last_word)
207
+
208
+ if match_digits:
209
+ numeric_part = match_digits.group(1)
210
+ suffix_part = match_digits.group(2) # May be None
211
+
212
+ # Intermediate Try 1: Strip suffix (e.g. 8745HS -> 8745)
213
+ if suffix_part and len(numeric_part) >= 3:
214
+ intermediate_term = " ".join(words[:-1] + [numeric_part])
215
+ if intermediate_term != current_term:
216
+ print(f"Search Term: {intermediate_term} (stripped suffix)")
217
+ if run_geekbench_lookup(intermediate_term):
218
+ return
219
+
220
+ # Intermediate Try 2: Wildcard/Regex search (e.g. 8745 -> 87..)
221
+ # The tool uses Regex, so we use dots '.' to match any character instead of '?'
222
+ if numeric_part and len(numeric_part) >= 3:
223
+ # If 4+ digits (e.g. 8745), replace last 2 with .. -> 87..
224
+ # If 3 digits (e.g. 780), replace last 1 with . -> 78.
225
+ if len(numeric_part) >= 4:
226
+ wildcard_model = numeric_part[:-2] + ".."
227
+ else:
228
+ wildcard_model = numeric_part[:-1] + "."
229
+
230
+ wildcard_term = " ".join(words[:-1] + [wildcard_model])
231
+
232
+ # Check duplication against current_term and the stripped version
233
+ stripped_term = " ".join(words[:-1] + [numeric_part])
234
+ if wildcard_term != current_term and wildcard_term != stripped_term:
235
+ print(f"Search Term: {wildcard_term} (regex wildcard)")
236
+ if run_geekbench_lookup(wildcard_term):
237
+ return
238
+
239
+ # Remove last word for next iteration
240
+ words.pop()
241
+
242
+ print("Could not find any matching Geekbench scores.")
243
+
244
+
245
+ if __name__ == "__main__":
246
+ main()
@@ -1,55 +1,140 @@
1
-
2
- from machineconfig.scripts.python.devops import get_app as get_devops_app
3
- from machineconfig.scripts.python.cloud import get_app as get_cloud_app
4
- from machineconfig.scripts.python.agents import get_app as get_agents_app
5
- from machineconfig.scripts.python.sessions import get_app as get_sessions_app
6
- from machineconfig.scripts.python.utils import get_app as get_utils_app
7
-
8
- from machineconfig.scripts.python.ftpx import ftpx as ftpx_func
9
- from machineconfig.scripts.python.croshell import croshell as croshell_func
10
- from machineconfig.scripts.python.fire_jobs import fire as get_fire_jobs_app
11
- from machineconfig.scripts.python.terminal import get_app as get_terminal_app
12
-
13
- def get_app():
14
- import typer
15
- app = typer.Typer(help="MachineConfig CLI - Manage your machine configurations and workflows", no_args_is_help=True, add_help_option=False, add_completion=False)
16
- devops_app = get_devops_app()
17
- app.add_typer(devops_app, name="devops", help="[d] DevOps related commands", no_args_is_help=True)
18
- app.add_typer(devops_app, name="d", hidden=True) # short alias
19
-
20
- cloud_app = get_cloud_app()
21
- app.add_typer(cloud_app, name="cloud", help="[c] Cloud management commands", no_args_is_help=True)
22
- app.add_typer(cloud_app, name="c", hidden=True) # short alias
23
-
24
- sessions_app = get_sessions_app()
25
- app.add_typer(sessions_app, name="sessions", help="[s] Session and layout management", no_args_is_help=True)
26
- app.add_typer(sessions_app, name="s", hidden=True) # short alias
27
-
28
-
29
- agents_app = get_agents_app()
30
- app.add_typer(agents_app, name="agents", help="[a] 🤖 AI Agents management commands", no_args_is_help=True)
31
- app.add_typer(agents_app, name="a", hidden=True) # short alias
32
-
33
- app.command(name="fire", help="[f] Fire and manage jobs", no_args_is_help=False)(get_fire_jobs_app)
34
- app.command(name="f", hidden=True, no_args_is_help=False)(get_fire_jobs_app)
35
- app.command("ftpx", no_args_is_help=True, help="[ff] File transfer utility though SSH")(ftpx_func)
36
- app.command("ff", no_args_is_help=True, hidden=True)(ftpx_func) # short alias
37
- app.command("croshell", no_args_is_help=False, help="[r] Cross-shell command execution")(croshell_func)
38
- app.command("r", no_args_is_help=False, hidden=True)(croshell_func) # short alias
39
-
40
- utils_app = get_utils_app()
41
- app.add_typer(utils_app, name="utils", help="[u] Utility commands", no_args_is_help=True)
42
- app.add_typer(utils_app, name="u", hidden=True) # short alias
43
-
44
-
45
- terminal_app = get_terminal_app()
46
- app.add_typer(terminal_app, name="terminal", help="[t] Terminal management commands", no_args_is_help=True)
47
- app.add_typer(terminal_app, name="t", hidden=True) # short alias
1
+ """Fast-loading CLI entry point using lazy imports.
2
+
3
+ Submodules are only imported when their commands are actually invoked, not at startup.
4
+ This makes `mcfg --help` much faster by avoiding loading heavy dependencies.
5
+ """
6
+ from typing import Optional, Annotated
7
+ import typer
8
+
9
+
10
+ def fire(
11
+ ctx: typer.Context,
12
+ path: Annotated[str, typer.Argument(help="Path to the Python file to run")] = ".",
13
+ function: Annotated[Optional[str], typer.Argument(help="Function to run")] = None,
14
+ ve: Annotated[str, typer.Option("--ve", "-v", help="Virtual environment name")] = "",
15
+ cmd: Annotated[bool, typer.Option("--cmd", "-B", help="Create a cmd fire command to launch the job asynchronously")] = False,
16
+ interactive: Annotated[bool, typer.Option("--interactive", "-i", help="Whether to run the job interactively using IPython")] = False,
17
+ debug: Annotated[bool, typer.Option("--debug", "-d", help="Enable debug mode")] = False,
18
+ choose_function: Annotated[bool, typer.Option("--choose-function", "-c", help="Choose function interactively")] = False,
19
+ loop: Annotated[bool, typer.Option("--loop", "-l", help="Infinite recursion (runs again after completion/interruption)")] = False,
20
+ jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="Open in a jupyter notebook")] = False,
21
+ marimo: Annotated[bool, typer.Option("--marimo", "-M", help="Open in a marimo notebook")] = False,
22
+ module: Annotated[bool, typer.Option("--module", "-m", help="Launch the main file")] = False,
23
+ script: Annotated[bool, typer.Option("--script", "-s", help="Launch as a script without fire")] = False,
24
+ optimized: Annotated[bool, typer.Option("--optimized", "-O", help="Run the optimized version of the function")] = False,
25
+ zellij_tab: Annotated[Optional[str], typer.Option("--zellij-tab", "-z", help="Open in a new zellij tab")] = None,
26
+ submit_to_cloud: Annotated[bool, typer.Option("--submit-to-cloud", "-C", help="Submit to cloud compute")] = False,
27
+ remote: Annotated[bool, typer.Option("--remote", "-r", help="Launch on a remote machine")] = False,
28
+ streamlit: Annotated[bool, typer.Option("--streamlit", "-S", help="Run as streamlit app")] = False,
29
+ environment: Annotated[str, typer.Option("--environment", "-E", help="Choose ip, localhost, hostname or arbitrary url")] = "",
30
+ holdDirectory: Annotated[bool, typer.Option("--holdDirectory", "-D", help="Hold current directory and avoid cd'ing to the script directory")] = False,
31
+ PathExport: Annotated[bool, typer.Option("--PathExport", "-P", help="Augment the PYTHONPATH with repo root")] = False,
32
+ git_pull: Annotated[bool, typer.Option("--git-pull", "-g", help="Start by pulling the git repo")] = False,
33
+ watch: Annotated[bool, typer.Option("--watch", "-w", help="Watch the file for changes")] = False,
34
+ ) -> None:
35
+ """Fire and manage jobs."""
36
+ from machineconfig.scripts.python.fire_jobs import fire as fire_impl
37
+ fire_impl(ctx=ctx, path=path, function=function, ve=ve, cmd=cmd, interactive=interactive, debug=debug,
38
+ choose_function=choose_function, loop=loop, jupyter=jupyter, marimo=marimo, module=module,
39
+ script=script, optimized=optimized, zellij_tab=zellij_tab, submit_to_cloud=submit_to_cloud,
40
+ remote=remote, streamlit=streamlit, environment=environment, holdDirectory=holdDirectory,
41
+ PathExport=PathExport, git_pull=git_pull, watch=watch)
42
+
43
+
44
+ def ftpx(
45
+ source: Annotated[str, typer.Argument(help="Source path (machine:path)")],
46
+ target: Annotated[str, typer.Argument(help="Target path (machine:path)")],
47
+ recursive: Annotated[bool, typer.Option("--recursive", "-r", help="Send recursively.")] = False,
48
+ zipFirst: Annotated[bool, typer.Option("--zipFirst", "-z", help="Zip before sending.")] = False,
49
+ cloud: Annotated[bool, typer.Option("--cloud", "-c", help="Transfer through the cloud.")] = False,
50
+ overwrite_existing: Annotated[bool, typer.Option("--overwrite-existing", "-o", help="Overwrite existing files on remote when sending from local to remote.")] = False,
51
+ ) -> None:
52
+ """File transfer utility though SSH."""
53
+ from machineconfig.scripts.python.ftpx import ftpx as ftpx_impl
54
+ ftpx_impl(source=source, target=target, recursive=recursive, zipFirst=zipFirst, cloud=cloud, overwrite_existing=overwrite_existing)
55
+
56
+
57
+ def croshell(
58
+ path: Annotated[Optional[str], typer.Argument(help="path of file to read.")] = None,
59
+ project_path: Annotated[Optional[str], typer.Option("--project", "-p", help="specify uv project to use")] = None,
60
+ uv_with: Annotated[Optional[str], typer.Option("--uv-with", "-w", help="specify uv with packages to use")] = None,
61
+ marimo: Annotated[bool, typer.Option("--marimo", "-m", help="open the notebook using marimo if available")] = False,
62
+ jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="run in jupyter interactive console")] = False,
63
+ vscode: Annotated[bool, typer.Option("--vscode", "-c", help="open the script in vscode")] = False,
64
+ visidata: Annotated[bool, typer.Option("--visidata", "-v", help="open data file in visidata")] = False,
65
+ python: Annotated[bool, typer.Option("--python", "-P", help="flag to use python over IPython.")] = False,
66
+ profile: Annotated[Optional[str], typer.Option("--profile", "-r", help="ipython profile to use, defaults to default profile.")] = None,
67
+ ) -> None:
68
+ """Cross-shell command execution."""
69
+ from machineconfig.scripts.python.croshell import croshell as croshell_impl
70
+ croshell_impl(path=path, project_path=project_path, uv_with=uv_with, marimo=marimo, jupyter=jupyter, vscode=vscode, visidata=visidata, python=python, profile=profile)
71
+
72
+
73
+ def devops(ctx: typer.Context) -> None:
74
+ """[d] DevOps related commands."""
75
+ from machineconfig.scripts.python.devops import get_app
76
+ get_app()(ctx.args, standalone_mode=not ctx.args)
77
+
78
+
79
+ def cloud(ctx: typer.Context) -> None:
80
+ """[c] Cloud management commands."""
81
+ from machineconfig.scripts.python.cloud import get_app
82
+ get_app()(ctx.args, standalone_mode=not ctx.args)
83
+
84
+
85
+ def sessions(ctx: typer.Context) -> None:
86
+ """[s] Session and layout management."""
87
+ from machineconfig.scripts.python.sessions import get_app
88
+ get_app()(ctx.args, standalone_mode=not ctx.args)
89
+
90
+
91
+ def agents(ctx: typer.Context) -> None:
92
+ """[a] 🤖 AI Agents management commands."""
93
+ from machineconfig.scripts.python.agents import get_app
94
+ get_app()(ctx.args, standalone_mode=not ctx.args)
95
+
96
+
97
+ def utils(ctx: typer.Context) -> None:
98
+ """[u] Utility commands."""
99
+ from machineconfig.scripts.python.utils import get_app
100
+ get_app()(ctx.args, standalone_mode=not ctx.args)
101
+
102
+
103
+ def terminal(ctx: typer.Context) -> None:
104
+ """[t] Terminal management commands."""
105
+ from machineconfig.scripts.python.terminal import get_app
106
+ get_app()(ctx.args, standalone_mode=not ctx.args)
107
+
108
+
109
+ def get_app() -> typer.Typer:
110
+ app = typer.Typer(help="MachineConfig CLI - Manage your machine configurations and workflows", no_args_is_help=True, add_help_option=True, add_completion=False)
111
+
112
+ ctx_settings: dict[str, object] = {"allow_extra_args": True, "allow_interspersed_args": True, "ignore_unknown_options": True, "help_option_names": []}
113
+
114
+ app.command(name="devops", help="[d] DevOps related commands", context_settings=ctx_settings)(devops)
115
+ app.command(name="d", hidden=True, context_settings=ctx_settings)(devops)
116
+ app.command(name="cloud", help="[c] Cloud management commands", context_settings=ctx_settings)(cloud)
117
+ app.command(name="c", hidden=True, context_settings=ctx_settings)(cloud)
118
+ app.command(name="sessions", help="[s] Session and layout management", context_settings=ctx_settings)(sessions)
119
+ app.command(name="s", hidden=True, context_settings=ctx_settings)(sessions)
120
+ app.command(name="agents", help="[a] 🤖 AI Agents management commands", context_settings=ctx_settings)(agents)
121
+ app.command(name="a", hidden=True, context_settings=ctx_settings)(agents)
122
+ app.command(name="utils", help="[u] Utility commands", context_settings=ctx_settings)(utils)
123
+ app.command(name="u", hidden=True, context_settings=ctx_settings)(utils)
124
+ app.command(name="terminal", help="[t] Terminal management commands", context_settings=ctx_settings)(terminal)
125
+ app.command(name="t", hidden=True, context_settings=ctx_settings)(terminal)
126
+
127
+ app.command(name="fire", help="[f] Fire and manage jobs", no_args_is_help=False, context_settings={"allow_extra_args": True, "allow_interspersed_args": False})(fire)
128
+ app.command(name="f", hidden=True, no_args_is_help=False, context_settings={"allow_extra_args": True, "allow_interspersed_args": False})(fire)
129
+ app.command("ftpx", no_args_is_help=True, help="[ff] File transfer utility though SSH")(ftpx)
130
+ app.command("ff", no_args_is_help=True, hidden=True)(ftpx)
131
+ app.command("croshell", no_args_is_help=False, help="[r] Cross-shell command execution")(croshell)
132
+ app.command("r", no_args_is_help=False, hidden=True)(croshell)
48
133
 
49
134
  return app
50
135
 
51
136
 
52
- def main():
137
+ def main() -> None:
53
138
  app = get_app()
54
139
  app()
55
140