machineconfig 8.12__py3-none-any.whl → 8.45__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 +40 -51
  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 +265 -0
  73. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +45 -21
  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} +69 -45
  81. machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
  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 +116 -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 +177 -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 +49 -29
  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 +34 -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 +79 -37
  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 +1 -0
  170. machineconfig/utils/installer_utils/install_from_url.py +1 -1
  171. machineconfig/utils/installer_utils/installer_class.py +12 -4
  172. machineconfig/utils/installer_utils/installer_cli.py +1 -15
  173. machineconfig/utils/installer_utils/installer_helper.py +2 -2
  174. machineconfig/utils/installer_utils/installer_locator_utils.py +13 -13
  175. machineconfig/utils/installer_utils/installer_runner.py +4 -4
  176. machineconfig/utils/meta.py +6 -4
  177. machineconfig/utils/options.py +49 -19
  178. machineconfig/utils/options_utils/__init__.py +0 -0
  179. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  180. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  181. machineconfig/utils/options_utils/tv_options.py +37 -0
  182. machineconfig/utils/path_extended.py +6 -6
  183. machineconfig/utils/scheduler.py +8 -2
  184. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  185. machineconfig/utils/source_of_truth.py +6 -1
  186. machineconfig/utils/ssh.py +73 -22
  187. machineconfig/utils/ssh_utils/abc.py +1 -1
  188. machineconfig/utils/ssh_utils/copy_from_here.py +2 -2
  189. machineconfig/utils/ssh_utils/utils.py +2 -2
  190. machineconfig/utils/ssh_utils/wsl.py +107 -170
  191. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  192. machineconfig/utils/upgrade_packages.py +4 -8
  193. {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/METADATA +29 -22
  194. {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/RECORD +249 -211
  195. machineconfig/jobs/installer/check_installations.py +0 -248
  196. machineconfig/jobs/scripts/bash_scripts/mint_keyboard_shortcuts.sh +0 -30
  197. machineconfig/profile/backup.toml +0 -49
  198. machineconfig/profile/mapper.toml +0 -263
  199. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
  200. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
  201. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  202. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -208
  203. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  204. machineconfig/scripts/python/helpers_devops/run_script.py +0 -168
  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.12.dist-info → machineconfig-8.45.dist-info}/WHEEL +0 -0
  272. {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/entry_points.txt +0 -0
  273. {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/top_level.txt +0 -0
@@ -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
 
@@ -1,72 +1,26 @@
1
+ """msearch - Machineconfig search helper."""
1
2
 
2
3
  import typer
3
4
  from typing import Annotated
4
5
 
5
6
 
6
7
  def machineconfig_search(
7
- directory: Annotated[str, typer.Option(..., "--directory", "-d", help="The directory to search")] = ".",
8
- ast: Annotated[bool, typer.Option(..., "--ast", "-a", help="The abstract syntax tree search/ tree sitter search of symbols")] = False,
9
- symantic: Annotated[bool, typer.Option(..., "--symantic", "-s", help="The symantic search of symbols")] = False,
10
- extension: Annotated[str, typer.Option(..., "--extension", "-e", help="File extension to filter by (e.g., .py, .js)")] = "",
11
- file: Annotated[bool, typer.Option(..., "--file", "-f", help="File search using fzf")] = False,
12
- no_dotfiles: Annotated[bool, typer.Option(..., "--no-dotfiles", "-D", help="Exclude dotfiles from search")] = False,
13
- rga: Annotated[bool, typer.Option(..., "--rga", "-A", help="Use ripgrep-all for searching all (non text files) instead of ripgrep")] = False,
14
- install_dependencies: Annotated[bool, typer.Option(..., "--install-req", "-p", help="Install required dependencies if missing")] = False
15
- ):
16
- """machineconfig search helper"""
17
- if install_dependencies:
18
- from machineconfig.utils.installer_utils.installer_cli import install_if_missing
19
- install_if_missing("fzf")
20
- install_if_missing("tv")
21
- install_if_missing("bat")
22
- install_if_missing("fd")
23
- install_if_missing("rg") # ripgrep
24
- install_if_missing("rga") # ripgrep-all
25
- # install_if_missing("tree-sitter-cli")
26
- return
27
- if symantic:
28
- script = ""
29
- for an_ex in extension.split(","):
30
- script = script + f"""\nparse *.{an_ex} """
31
- from machineconfig.utils.code import run_shell_script
32
- run_shell_script(script=script)
33
- return
34
- if ast:
35
- from machineconfig.scripts.python.helpers.ast_search import get_repo_symbols
36
- symbols = get_repo_symbols(directory)
37
- from machineconfig.utils.options import choose_from_options
38
- try:
39
- res = choose_from_options(options=symbols, msg="Select a symbol to search for:", tv=True, multi=False)
40
- from rich import print_json
41
- import json
42
- res_json = json.dumps(res, indent=4)
43
- print_json(res_json)
44
- return None
45
- except Exception as e:
46
- print(f"❌ Error during selection: {e}")
47
- return None
48
- if file:
49
- script = """fzf --ansi --preview-window 'right:60%' --preview 'bat --color=always --style=numbers,grid,header --line-range :300 {}' """
50
- if no_dotfiles:
51
- script = "fd | " + script
52
- from machineconfig.utils.code import run_shell_script
53
- run_shell_script(script=script)
54
- return
55
- from machineconfig.scripts.python.helpers_msearch import FZFG_LINUX_PATH, FZFG_WINDOWS_PATH
56
- import platform
57
- if platform.system() == "Linux" or platform.system() == "Darwin":
58
- script = FZFG_LINUX_PATH.read_text(encoding="utf-8")
59
- elif platform.system() == "Windows":
60
- script = FZFG_WINDOWS_PATH.read_text(encoding="utf-8")
61
- else:
62
- raise RuntimeError("Unsupported platform")
63
- if rga:
64
- script = script.replace("rg ", "rga ").replace("ripgrep", "ripgrep-all")
65
- from machineconfig.utils.code import exit_then_run_shell_script
66
- exit_then_run_shell_script(script=script, strict=False)
8
+ path: Annotated[str, typer.Argument(help="The directory/file to search")] = ".",
9
+ ast: Annotated[bool, typer.Option(..., "--ast", "-a", help="The abstract syntax tree search/ tree sitter search of symbols")] = False,
10
+ symantic: Annotated[bool, typer.Option(..., "--symantic", "-s", help="The symantic search of symbols")] = False,
11
+ extension: Annotated[str, typer.Option(..., "--extension", "-E", help="File extension to filter by (e.g., .py, .js)")] = "",
12
+ file: Annotated[bool, typer.Option(..., "--file", "-f", help="File search using fzf")] = False,
13
+ no_dotfiles: Annotated[bool, typer.Option(..., "--no-dotfiles", "-D", help="Exclude dotfiles from search")] = False,
14
+ rga: Annotated[bool, typer.Option(..., "--rga", "-A", help="Use ripgrep-all for searching all (non text files) instead of ripgrep")] = False,
15
+ edit: Annotated[bool, typer.Option(..., "--edit", "-e", help="Open selection in editor (helix)")] = False,
16
+ install_dependencies: Annotated[bool, typer.Option(..., "--install-req", "-i", help="Install required dependencies if missing")] = False,
17
+ ) -> None:
18
+ """Machineconfig search helper."""
19
+ from machineconfig.scripts.python.helpers.helpers_msearch.msearch_impl import machineconfig_search as impl
20
+ impl(path=path, ast=ast, symantic=symantic, extension=extension, file=file, no_dotfiles=no_dotfiles, rga=rga, edit=edit, install_dependencies=install_dependencies)
67
21
 
68
22
 
69
- def main():
23
+ def main() -> None:
70
24
  app = typer.Typer(add_completion=False, no_args_is_help=True)
71
25
  app.command(name="msearch", help=machineconfig_search.__doc__, short_help="machineconfig search helper", no_args_is_help=False)(machineconfig_search)
72
26
  app()