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

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

Potentially problematic release.


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

Files changed (273) hide show
  1. machineconfig/cluster/remote/run_cluster.py +1 -1
  2. machineconfig/cluster/remote/run_remote.py +1 -1
  3. machineconfig/cluster/sessions_managers/utils/maker.py +10 -8
  4. machineconfig/cluster/sessions_managers/wt_local.py +1 -1
  5. machineconfig/cluster/sessions_managers/wt_local_manager.py +1 -1
  6. machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
  7. machineconfig/cluster/sessions_managers/zellij_local_manager.py +1 -1
  8. machineconfig/jobs/installer/checks/check_installations.py +133 -0
  9. machineconfig/jobs/installer/checks/install_utils.py +132 -0
  10. machineconfig/jobs/installer/checks/report_utils.py +39 -0
  11. machineconfig/jobs/installer/checks/vt_utils.py +89 -0
  12. machineconfig/jobs/installer/installer_data.json +225 -140
  13. machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
  14. machineconfig/jobs/installer/package_groups.py +10 -9
  15. machineconfig/jobs/installer/python_scripts/boxes.py +1 -2
  16. machineconfig/jobs/installer/python_scripts/code.py +10 -8
  17. machineconfig/jobs/installer/python_scripts/hx.py +30 -13
  18. machineconfig/jobs/installer/python_scripts/nerfont_windows_helper.py +6 -5
  19. machineconfig/jobs/installer/python_scripts/sysabc.py +25 -19
  20. machineconfig/jobs/installer/python_scripts/yazi.py +33 -17
  21. machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
  22. machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +1 -1
  23. machineconfig/jobs/scripts_dynamic/a.py +413 -10
  24. machineconfig/profile/create_links.py +77 -20
  25. machineconfig/profile/create_links_export.py +63 -58
  26. machineconfig/profile/mapper_data.toml +30 -0
  27. machineconfig/profile/mapper_dotfiles.toml +253 -0
  28. machineconfig/scripts/python/agents.py +70 -172
  29. machineconfig/scripts/python/ai/initai.py +3 -1
  30. machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
  31. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
  32. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +7 -5
  33. machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
  34. machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
  35. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +1 -1
  36. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +29 -0
  37. machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
  38. machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
  39. machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
  40. machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
  41. machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
  42. machineconfig/scripts/python/ai/utils/vscode_tasks.py +6 -3
  43. machineconfig/scripts/python/cloud.py +58 -11
  44. machineconfig/scripts/python/croshell.py +4 -156
  45. machineconfig/scripts/python/devops.py +57 -40
  46. machineconfig/scripts/python/devops_navigator.py +17 -3
  47. machineconfig/scripts/python/fire_jobs.py +8 -207
  48. machineconfig/scripts/python/ftpx.py +5 -225
  49. machineconfig/scripts/python/graph/cli_graph.json +8743 -0
  50. machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
  51. machineconfig/scripts/python/{env_manager → helpers/helper_env}/env_manager_tui.py +1 -1
  52. machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
  53. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.py +1 -1
  54. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
  55. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_gemini.py +1 -1
  56. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_qwen.py +1 -1
  57. machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
  58. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py +5 -5
  59. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +6 -6
  60. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +10 -5
  61. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +3 -3
  62. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
  63. machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
  64. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
  65. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +7 -6
  66. machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
  67. machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +267 -0
  68. machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
  69. machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
  70. machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +76 -0
  71. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_nw.py +52 -72
  72. machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
  73. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +40 -23
  74. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_file.py +44 -30
  75. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_server.py +26 -43
  76. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_terminal.py +12 -6
  77. machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
  78. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +12 -6
  79. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
  80. machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +68 -52
  81. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/run_script.py +75 -58
  82. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
  83. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
  84. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +3 -3
  85. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
  86. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +3 -3
  87. machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
  88. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_linux/fzfg +4 -3
  89. machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
  90. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_windows/fzfg.ps1 +1 -1
  91. machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
  92. machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
  93. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
  94. machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
  95. machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
  96. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
  97. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
  98. machineconfig/scripts/python/helpers/helpers_network/__init__.py +0 -0
  99. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address.py +15 -17
  100. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address_switch.py +1 -1
  101. machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
  102. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_ssh.py +2 -2
  103. machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
  104. machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
  105. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
  106. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
  107. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
  108. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
  109. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +117 -33
  110. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +3 -2
  111. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -13
  112. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_2.py +63 -19
  113. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
  114. machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
  115. machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  116. machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
  117. machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -1
  118. machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
  119. machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
  120. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/download.py +1 -1
  121. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/python.py +47 -26
  122. machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
  123. machineconfig/scripts/python/mcfg_entry.py +133 -48
  124. machineconfig/scripts/python/msearch.py +15 -61
  125. machineconfig/scripts/python/sessions.py +59 -194
  126. machineconfig/scripts/python/terminal.py +18 -96
  127. machineconfig/scripts/python/utils.py +101 -20
  128. machineconfig/settings/atuin/config.toml +294 -0
  129. machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
  130. machineconfig/settings/linters/.ruff.toml +1 -0
  131. machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
  132. machineconfig/settings/shells/bash/init.sh +6 -3
  133. machineconfig/settings/shells/pwsh/init.ps1 +69 -1
  134. machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
  135. machineconfig/settings/shells/wezterm/wezterm.lua +4 -1
  136. machineconfig/settings/shells/wt/settings.json +20 -7
  137. machineconfig/settings/shells/zsh/init.sh +25 -4
  138. machineconfig/settings/television/cable_unix/bash-history.toml +1 -1
  139. machineconfig/settings/television/cable_windows/pwsh-history.toml +1 -1
  140. machineconfig/settings/tv/config.toml +234 -0
  141. machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
  142. machineconfig/settings/wsl/.wslconfig +5 -30
  143. machineconfig/settings/yazi/yazi_linux.toml +18 -8
  144. machineconfig/settings/zellij/layouts/st.kdl +2 -2
  145. machineconfig/settings/zellij/layouts/st2.kdl +1 -1
  146. machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
  147. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +3 -0
  148. machineconfig/setup_mac/__init__.py +0 -2
  149. machineconfig/setup_windows/__init__.py +0 -1
  150. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +14 -13
  151. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +4 -3
  152. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +3 -3
  153. machineconfig/type_hinting/sql/__init__.py +1 -0
  154. machineconfig/type_hinting/sql/base.py +216 -0
  155. machineconfig/type_hinting/sql/core_schema.py +64 -0
  156. machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
  157. machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
  158. machineconfig/type_hinting/typedict/__init__.py +1 -0
  159. machineconfig/type_hinting/typedict/ast_utils.py +130 -0
  160. machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
  161. machineconfig/type_hinting/typedict/generators.py +231 -0
  162. machineconfig/type_hinting/typedict/polars_schema.py +24 -0
  163. machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
  164. machineconfig/utils/accessories.py +24 -0
  165. machineconfig/utils/code.py +41 -13
  166. machineconfig/utils/files/ascii_art.py +10 -14
  167. machineconfig/utils/files/headers.py +3 -5
  168. machineconfig/utils/files/read.py +8 -1
  169. machineconfig/utils/installer_utils/github_release_bulk.py +11 -91
  170. machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
  171. machineconfig/utils/installer_utils/install_from_url.py +1 -1
  172. machineconfig/utils/installer_utils/installer_class.py +12 -4
  173. machineconfig/utils/installer_utils/installer_cli.py +1 -15
  174. machineconfig/utils/installer_utils/installer_helper.py +2 -2
  175. machineconfig/utils/installer_utils/installer_locator_utils.py +13 -13
  176. machineconfig/utils/installer_utils/installer_runner.py +4 -4
  177. machineconfig/utils/io.py +25 -8
  178. machineconfig/utils/meta.py +6 -4
  179. machineconfig/utils/options.py +49 -19
  180. machineconfig/utils/options_utils/__init__.py +0 -0
  181. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  182. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  183. machineconfig/utils/options_utils/tv_options.py +37 -0
  184. machineconfig/utils/path_extended.py +6 -6
  185. machineconfig/utils/scheduler.py +8 -2
  186. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  187. machineconfig/utils/source_of_truth.py +6 -1
  188. machineconfig/utils/ssh.py +69 -18
  189. machineconfig/utils/ssh_utils/abc.py +1 -1
  190. machineconfig/utils/ssh_utils/copy_from_here.py +17 -12
  191. machineconfig/utils/ssh_utils/utils.py +21 -5
  192. machineconfig/utils/ssh_utils/wsl.py +107 -170
  193. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  194. machineconfig/utils/upgrade_packages.py +4 -8
  195. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/METADATA +29 -22
  196. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/RECORD +251 -211
  197. machineconfig/jobs/installer/check_installations.py +0 -248
  198. machineconfig/profile/backup.toml +0 -49
  199. machineconfig/profile/mapper.toml +0 -263
  200. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
  201. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
  202. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  203. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -208
  204. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  205. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
  206. machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
  207. machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
  208. machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -620
  209. machineconfig/scripts/python/helpers_network/ssh_add_identity.py +0 -116
  210. machineconfig/scripts/python/helpers_network/ssh_add_ssh_key.py +0 -153
  211. machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +0 -391
  212. machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +0 -338
  213. machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
  214. machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
  215. machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
  216. machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
  217. machineconfig/utils/options_tv.py +0 -119
  218. machineconfig/utils/tst.py +0 -20
  219. /machineconfig/{scripts/python/helpers_agents → jobs/installer/checks}/__init__.py +0 -0
  220. /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
  221. /machineconfig/scripts/python/{helpers_agents/agentic_frameworks → graph}/__init__.py +0 -0
  222. /machineconfig/scripts/python/{helpers_cloud → helpers}/__init__.py +0 -0
  223. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
  224. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
  225. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_agents}/__init__.py +0 -0
  226. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_agents/agentic_frameworks}/__init__.py +0 -0
  227. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
  228. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
  229. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_helper_types.py +0 -0
  230. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
  231. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aichat/config.yaml +0 -0
  232. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aider/.aider.conf.yml +0 -0
  233. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/copilot/config.yml +0 -0
  234. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/crush/crush.json +0 -0
  235. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/gemini/settings.json +0 -0
  236. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/privacy.py +0 -0
  237. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/prompt.txt +0 -0
  238. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
  239. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +0 -0
  240. /machineconfig/scripts/python/{helpers_devops/themes → helpers/helpers_cloud}/__init__.py +0 -0
  241. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +0 -0
  242. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
  243. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_croshell}/__init__.py +0 -0
  244. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +0 -0
  245. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
  246. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
  247. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
  248. /machineconfig/scripts/python/{helpers_network → helpers/helpers_devops}/__init__.py +0 -0
  249. /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_devops/themes}/__init__.py +0 -0
  250. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  251. /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
  252. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
  253. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/f.py +0 -0
  254. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/file_wrangler.py +0 -0
  255. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +0 -0
  256. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_streamlit_helper.py +0 -0
  257. /machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/__init__.py +0 -0
  258. /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
  259. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nfs.py +0 -0
  260. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nw_drive.py +0 -0
  261. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/onetimeshare.py +0 -0
  262. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/wifi_conn.py +0 -0
  263. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -0
  264. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_1.py +0 -0
  265. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
  266. /machineconfig/scripts/python/helpers/{ast_search.py → helpers_search/ast_search.py} +0 -0
  267. /machineconfig/scripts/python/helpers/{qr_code.py → helpers_search/qr_code.py} +0 -0
  268. /machineconfig/scripts/python/helpers/{repo_rag.py → helpers_search/repo_rag.py} +0 -0
  269. /machineconfig/scripts/python/helpers/{symantic_search.py → helpers_search/symantic_search.py} +0 -0
  270. /machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/pdf.py +0 -0
  271. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/WHEEL +0 -0
  272. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/entry_points.txt +0 -0
  273. {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=8.14",
5
+ # "machineconfig>=8.50",
6
6
  # "textual",
7
7
  # "pyperclip",
8
8
  # ]
@@ -18,7 +18,7 @@ from textual.binding import Binding
18
18
  from textual.containers import Horizontal, Vertical
19
19
  from textual.widgets import Footer, Header, Label, ListItem, ListView, Static
20
20
 
21
- from machineconfig.scripts.python.env_manager.path_manager_backend import get_directory_contents, get_path_entries, get_platform
21
+ from machineconfig.scripts.python.helpers.helper_env.path_manager_backend import get_directory_contents, get_path_entries, get_platform
22
22
 
23
23
 
24
24
  class DirectoryPreview(Static):
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=8.14",
5
+ # "machineconfig>=8.50",
6
6
  # "textual",
7
7
  # "pyperclip",
8
8
  # ]
@@ -0,0 +1,228 @@
1
+ #!/usr/bin/env -S uv run --script
2
+ # /// script
3
+ # requires-python = ">=3.13"
4
+ # dependencies = [
5
+ # "machineconfig>=8.50",
6
+ # "textual",
7
+ # "pyperclip",
8
+ # ]
9
+ # ///
10
+
11
+ """Cross-platform PATH explorer with Textual TUI."""
12
+
13
+ from pathlib import Path
14
+
15
+ from textual import on
16
+ from textual.app import App, ComposeResult
17
+ from textual.binding import Binding
18
+ from textual.containers import Horizontal, Vertical
19
+ from textual.widgets import Footer, Header, Label, ListItem, ListView, Static
20
+
21
+ from machineconfig.scripts.python.helpers.helper_env.path_manager_backend import get_directory_contents, get_path_entries, get_platform
22
+
23
+
24
+ class DirectoryPreview(Static):
25
+ """Widget to display directory contents."""
26
+
27
+ def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
28
+ super().__init__(*args, **kwargs)
29
+ self.border_title = "📂 Directory Preview"
30
+
31
+ def update_preview(self, directory: str) -> None:
32
+ """Update the preview with directory contents."""
33
+ if not directory:
34
+ self.update("Select a PATH entry to preview its contents")
35
+ return
36
+
37
+ contents = get_directory_contents(directory, max_items=30)
38
+ preview_text = f"[bold cyan]{directory}[/bold cyan]\n\n"
39
+ preview_text += "\n".join(contents)
40
+ self.update(preview_text)
41
+
42
+
43
+ class StatusBar(Static):
44
+ """Status bar to show messages."""
45
+
46
+ def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
47
+ super().__init__(*args, **kwargs)
48
+ self.border_title = "ℹ️ Status"
49
+
50
+ def show_message(self, message: str, message_type: str = "info") -> None:
51
+ """Display a status message."""
52
+ color = {"info": "cyan", "success": "green", "error": "red", "warning": "yellow"}.get(message_type, "white")
53
+ self.update(f"[{color}]{message}[/{color}]")
54
+
55
+
56
+ class PathExplorerApp(App[None]):
57
+ """A Textual app to explore PATH entries."""
58
+
59
+ CSS = """
60
+ Screen {
61
+ background: $surface;
62
+ }
63
+
64
+ Header {
65
+ background: $primary;
66
+ color: $text;
67
+ }
68
+
69
+ Footer {
70
+ background: $panel;
71
+ }
72
+
73
+ #main-container {
74
+ height: 100%;
75
+ }
76
+
77
+ #left-panel {
78
+ width: 50%;
79
+ height: 100%;
80
+ border: solid $primary;
81
+ padding: 1;
82
+ }
83
+
84
+ #right-panel {
85
+ width: 50%;
86
+ height: 100%;
87
+ border: solid $accent;
88
+ padding: 1;
89
+ }
90
+
91
+ ListView {
92
+ height: 1fr;
93
+ border: solid $accent;
94
+ background: $surface;
95
+ }
96
+
97
+ ListView > ListItem {
98
+ padding: 0 1;
99
+ }
100
+
101
+ ListView > ListItem.--highlight {
102
+ background: $accent 20%;
103
+ }
104
+
105
+ DirectoryPreview {
106
+ height: 1fr;
107
+ border: solid $primary;
108
+ background: $surface;
109
+ padding: 1;
110
+ overflow-y: auto;
111
+ }
112
+
113
+ StatusBar {
114
+ height: 3;
115
+ border: solid $success;
116
+ background: $surface;
117
+ padding: 1;
118
+ }
119
+
120
+ Label {
121
+ padding: 0 1;
122
+ height: auto;
123
+ }
124
+ """
125
+
126
+ BINDINGS = [
127
+ Binding("q", "quit", "Quit", show=True),
128
+ Binding("r", "refresh", "Refresh", show=True),
129
+ Binding("c", "copy_path", "Copy Path", show=True),
130
+ ]
131
+
132
+ def __init__(self) -> None:
133
+ super().__init__()
134
+ self.selected_path: str = ""
135
+
136
+ def compose(self) -> ComposeResult:
137
+ """Create child widgets for the app."""
138
+ platform_name = get_platform()
139
+ yield Header(show_clock=True)
140
+
141
+ with Horizontal(id="main-container"):
142
+ with Vertical(id="left-panel"):
143
+ yield Label(f"🔧 PATH Entries ({platform_name})")
144
+ yield ListView(id="path-list")
145
+
146
+ with Vertical(id="right-panel"):
147
+ yield DirectoryPreview(id="preview")
148
+ yield StatusBar(id="status")
149
+
150
+ yield Footer()
151
+
152
+ def on_mount(self) -> None:
153
+ """Initialize the app when mounted."""
154
+ self.title = "PATH Explorer"
155
+ self.sub_title = f"Platform: {get_platform()}"
156
+ self.refresh_path_list()
157
+ self.query_one("#status", StatusBar).show_message("Ready. Select a PATH entry to preview its contents.", "info")
158
+
159
+ def refresh_path_list(self) -> None:
160
+ """Refresh the list of PATH entries."""
161
+ list_view = self.query_one("#path-list", ListView)
162
+ list_view.clear()
163
+
164
+ entries = get_path_entries()
165
+ for entry in entries:
166
+ path = Path(entry)
167
+ exists = path.exists()
168
+ icon = "✅" if exists else "❌"
169
+ item = ListItem(Label(f"{icon} {entry}"))
170
+ item.set_class(exists, "--valid")
171
+ list_view.append(item)
172
+
173
+ self.query_one("#status", StatusBar).show_message(f"Loaded {len(entries)} PATH entries", "success")
174
+
175
+ @on(ListView.Highlighted)
176
+ def handle_highlight(self, event: ListView.Highlighted) -> None:
177
+ """Handle highlighting of a PATH entry (scroll preview)."""
178
+ if event.item is None:
179
+ return
180
+ label = event.item.query_one(Label)
181
+ text = label.render()
182
+ # Remove the icon prefix
183
+ highlighted_path = str(text).split(" ", 1)[1] if " " in str(text) else str(text)
184
+
185
+ preview = self.query_one("#preview", DirectoryPreview)
186
+ preview.update_preview(highlighted_path)
187
+
188
+ self.query_one("#status", StatusBar).show_message(f"Previewing: {highlighted_path}", "info")
189
+
190
+ @on(ListView.Selected)
191
+ def handle_selection(self, event: ListView.Selected) -> None:
192
+ """Handle selection of a PATH entry (Enter key)."""
193
+ label = event.item.query_one(Label)
194
+ text = label.render()
195
+ # Remove the icon prefix
196
+ self.selected_path = str(text).split(" ", 1)[1] if " " in str(text) else str(text)
197
+
198
+ preview = self.query_one("#preview", DirectoryPreview)
199
+ preview.update_preview(self.selected_path)
200
+
201
+ self.query_one("#status", StatusBar).show_message(f"Selected: {self.selected_path}", "success")
202
+
203
+ def action_refresh(self) -> None:
204
+ """Refresh the PATH list."""
205
+ self.refresh_path_list()
206
+
207
+ def action_copy_path(self) -> None:
208
+ """Copy selected path to clipboard."""
209
+ if not self.selected_path:
210
+ self.query_one("#status", StatusBar).show_message("No PATH entry selected", "warning")
211
+ return
212
+ # # Try to copy to clipboard
213
+ # try:
214
+ # import pyperclip
215
+ # pyperclip.copy(self.selected_path)
216
+ # self.query_one("#status", StatusBar).show_message(f"Copied to clipboard: {self.selected_path}", "success")
217
+ # except ImportError:
218
+ # self.query_one("#status", StatusBar).show_message("pyperclip not available. Install it to enable clipboard support.", "warning")
219
+
220
+
221
+ def main() -> None:
222
+ """Run the PATH Explorer TUI."""
223
+ app = PathExplorerApp()
224
+ app.run()
225
+
226
+
227
+ if __name__ == "__main__":
228
+ main()
@@ -1,7 +1,7 @@
1
1
 
2
2
  from pathlib import Path
3
3
  # import shlex
4
- from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
4
+ from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import AI_SPEC
5
5
 
6
6
 
7
7
  def fire_crush(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path) -> str:
@@ -2,7 +2,7 @@
2
2
 
3
3
  from pathlib import Path
4
4
  # import shlex
5
- from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
5
+ from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import AI_SPEC
6
6
 
7
7
  def fire_cursor(ai_spec: AI_SPEC, prompt_path: Path) -> str:
8
8
  match ai_spec["machine"]:
@@ -1,7 +1,7 @@
1
1
 
2
2
  from pathlib import Path
3
3
  import shlex
4
- from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
4
+ from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import AI_SPEC
5
5
 
6
6
 
7
7
  def fire_gemini(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path) -> str:
@@ -1,7 +1,7 @@
1
1
 
2
2
  from pathlib import Path
3
3
  import shlex
4
- from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
4
+ from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import AI_SPEC
5
5
 
6
6
 
7
7
  def fire_qwen(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path, config_dir: str | None) -> str:
@@ -0,0 +1,168 @@
1
+ """Pure Python implementations for agents commands - no typer dependencies."""
2
+
3
+ from typing import Optional, cast
4
+ from pathlib import Path
5
+
6
+
7
+ def agents_create(
8
+ agent: str,
9
+ host: str,
10
+ model: str,
11
+ provider: str,
12
+ context_path: Optional[str],
13
+ separator: str,
14
+ agent_load: int,
15
+ prompt: Optional[str],
16
+ prompt_path: Optional[str],
17
+ job_name: str,
18
+ separate: bool,
19
+ output_path: Optional[str],
20
+ agents_dir: Optional[str],
21
+ ) -> None:
22
+ """Create agents layout file, ready to run."""
23
+ from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_help_launch import prep_agent_launch, get_agents_launch_layout
24
+ from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_load_balancer import chunk_prompts
25
+ from machineconfig.utils.accessories import get_repo_root, randstr
26
+ import json
27
+
28
+ prompt_options = [prompt, prompt_path]
29
+ provided_prompt = [opt for opt in prompt_options if opt is not None]
30
+ if len(provided_prompt) != 1:
31
+ raise ValueError("Exactly one of --prompt or --prompt-path must be provided")
32
+
33
+ repo_root = get_repo_root(Path.cwd())
34
+ if repo_root is None:
35
+ raise RuntimeError("💥 Could not determine the repository root. Please run this script from within a git repository.")
36
+
37
+ print(f"Operating @ {repo_root}")
38
+
39
+ if context_path is None:
40
+ context_path_resolved = Path(repo_root) / ".ai" / "todo"
41
+ else:
42
+ context_path_resolved = Path(context_path).expanduser().resolve()
43
+
44
+ if not context_path_resolved.exists():
45
+ raise ValueError(f"Path does not exist: {context_path_resolved}")
46
+
47
+ if context_path_resolved.is_file():
48
+ prompt_material_re_splitted = chunk_prompts(context_path_resolved, tasks_per_prompt=agent_load, joiner=separator)
49
+ elif context_path_resolved.is_dir():
50
+ files = [f for f in context_path_resolved.rglob("*") if f.is_file()]
51
+ if not files:
52
+ raise ValueError(f"No files found in directory: {context_path_resolved}")
53
+ concatenated = separator.join(f.read_text(encoding="utf-8") for f in files)
54
+ prompt_material_re_splitted = [concatenated]
55
+ else:
56
+ raise ValueError(f"Path is neither file nor directory: {context_path_resolved}")
57
+
58
+ if prompt_path is not None:
59
+ prompt_prefix = Path(prompt_path).read_text(encoding="utf-8")
60
+ else:
61
+ prompt_prefix = cast(str, prompt)
62
+
63
+ agent_selected = agent
64
+ if agents_dir is None:
65
+ agents_dir_obj = Path(repo_root) / ".ai" / f"tmp_prompts/{job_name}_{randstr()}"
66
+ else:
67
+ import shutil
68
+ if Path(agents_dir).exists():
69
+ shutil.rmtree(agents_dir)
70
+ agents_dir_obj = Path(agents_dir)
71
+
72
+ from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import HOST, AGENTS, PROVIDER
73
+ prep_agent_launch(
74
+ repo_root=repo_root,
75
+ agents_dir=agents_dir_obj,
76
+ prompts_material=prompt_material_re_splitted,
77
+ keep_material_in_separate_file=separate,
78
+ prompt_prefix=prompt_prefix,
79
+ machine=cast(HOST, host),
80
+ agent=cast(AGENTS, agent_selected),
81
+ model=model,
82
+ provider=cast(PROVIDER, provider),
83
+ job_name=job_name,
84
+ )
85
+ layoutfile = get_agents_launch_layout(session_root=agents_dir_obj)
86
+
87
+ layout_output_path = Path(output_path) if output_path is not None else agents_dir_obj / "layout.json"
88
+ layout_output_path.parent.mkdir(parents=True, exist_ok=True)
89
+ layout_output_path.write_text(data=json.dumps(layoutfile, indent=4), encoding="utf-8")
90
+ print(f"Created agents in {agents_dir_obj}")
91
+ print(f"Created layout in {layout_output_path}")
92
+
93
+
94
+ def collect(agent_dir: str, output_path: str, separator: str) -> None:
95
+ """Collect all material files from an agent directory and concatenate them."""
96
+ if not Path(agent_dir).exists() or not Path(agent_dir).is_dir():
97
+ raise ValueError(f"Agent directory does not exist or is not a directory: {agent_dir}")
98
+
99
+ prompts_dir = Path(agent_dir) / "prompts"
100
+ if not prompts_dir.exists():
101
+ raise ValueError(f"Prompts directory not found: {prompts_dir}")
102
+
103
+ material_files: list[Path] = []
104
+ for agent_subdir in prompts_dir.iterdir():
105
+ if agent_subdir.is_dir() and agent_subdir.name.startswith("agent_"):
106
+ material_file = agent_subdir / f"{agent_subdir.name}_material.txt"
107
+ if material_file.exists():
108
+ material_files.append(material_file)
109
+
110
+ if not material_files:
111
+ print("No material files found in the agent directory.")
112
+ return
113
+
114
+ material_files.sort(key=lambda x: int(x.parent.name.split("_")[-1]))
115
+
116
+ concatenated_content: list[str] = []
117
+ for material_file in material_files:
118
+ content = material_file.read_text(encoding="utf-8")
119
+ concatenated_content.append(content)
120
+
121
+ result = separator.join(concatenated_content)
122
+
123
+ Path(output_path).parent.mkdir(parents=True, exist_ok=True)
124
+ Path(output_path).write_text(result, encoding="utf-8")
125
+ print(f"Concatenated material written to {output_path}")
126
+
127
+
128
+ def make_agents_command_template() -> None:
129
+ """Create a template for fire agents."""
130
+ from platform import system
131
+ import machineconfig.scripts.python.helpers.helpers_agents as module
132
+
133
+ if system() == "Linux" or system() == "Darwin":
134
+ template_path = Path(module.__file__).parent / "templates/template.sh"
135
+ elif system() == "Windows":
136
+ template_path = Path(module.__file__).parent / "templates/template.ps1"
137
+ else:
138
+ raise ValueError(f"Unsupported OS: {system()}")
139
+
140
+ from machineconfig.utils.accessories import get_repo_root
141
+ repo_root = get_repo_root(Path.cwd())
142
+ if repo_root is None:
143
+ raise RuntimeError("💥 Could not determine the repository root. Please run this script from within a git repository.")
144
+
145
+ save_path_root = repo_root / ".ai" / "agents"
146
+
147
+ save_path_root.mkdir(parents=True, exist_ok=True)
148
+ save_path_root.joinpath("template_fire_agents.sh").write_text(template_path.read_text(encoding="utf-8"), encoding="utf-8")
149
+ print(f"Template bash script written to {save_path_root}")
150
+
151
+ from machineconfig.scripts.python.ai.utils.generate_files import make_todo_files
152
+ make_todo_files(
153
+ pattern=".py", repo=str(repo_root), strategy="name", output_path=str(save_path_root / "files.md"), split_every=None, split_to=None
154
+ )
155
+
156
+ prompt_path = Path(module.__file__).parent / "templates/prompt.txt"
157
+ save_path_root.joinpath("prompt.txt").write_text(prompt_path.read_text(encoding="utf-8"), encoding="utf-8")
158
+ print(f"Prompt template written to {save_path_root}")
159
+
160
+
161
+ def init_config(root: Optional[str]) -> None:
162
+ """Initialize AI configurations in the current repository."""
163
+ from machineconfig.scripts.python.ai.initai import add_ai_configs
164
+ if root is None:
165
+ repo_root = Path.cwd()
166
+ else:
167
+ repo_root = Path(root).expanduser().resolve()
168
+ add_ai_configs(repo_root=repo_root)
@@ -2,7 +2,7 @@
2
2
  import random
3
3
  import shlex
4
4
  from pathlib import Path
5
- from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AGENTS, AGENT_NAME_FORMATTER, HOST, PROVIDER, AI_SPEC, API_SPEC
5
+ from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import AGENTS, AGENT_NAME_FORMATTER, HOST, PROVIDER, AI_SPEC, API_SPEC
6
6
 
7
7
 
8
8
  def get_api_keys(provider: PROVIDER) -> list[API_SPEC]:
@@ -75,12 +75,12 @@ sleep 0.1
75
75
  if api_spec is None:
76
76
  raise ValueError("No API keys found for Google Gemini. Please configure them in dotfiles/creds/llm/google/api_keys.ini")
77
77
  ai_spec: AI_SPEC = AI_SPEC(provider=provider, model="gemini-2.5-pro", agent=agent, machine=machine, api_spec=api_spec)
78
- from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_gemini import fire_gemini
78
+ from machineconfig.scripts.python.helpers.helpers_agents.agentic_frameworks.fire_gemini import fire_gemini
79
79
  cmd = fire_gemini(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
80
80
  case "cursor-agent":
81
81
  api_spec = API_SPEC(api_key=None, api_name="", api_label="", api_account="")
82
82
  ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_spec=api_spec)
83
- from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_cursor_agents import fire_cursor
83
+ from machineconfig.scripts.python.helpers.helpers_agents.agentic_frameworks.fire_cursor_agents import fire_cursor
84
84
  cmd = fire_cursor(ai_spec=ai_spec, prompt_path=prompt_path)
85
85
  raise NotImplementedError("Cursor agent is not implemented yet, api key missing")
86
86
  case "crush":
@@ -89,10 +89,10 @@ sleep 0.1
89
89
  if api_spec is None:
90
90
  raise ValueError("No API keys found for Crush. Please configure them in dotfiles/creds/llm/crush/api_keys.ini")
91
91
  ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_spec=api_spec)
92
- from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_crush import fire_crush
92
+ from machineconfig.scripts.python.helpers.helpers_agents.agentic_frameworks.fire_crush import fire_crush
93
93
  cmd = fire_crush(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
94
94
  # case "q":
95
- # from machineconfig.scripts.python.helpers_fire.fire_q import fire_q
95
+ # from machineconfig.scripts.python.helpers.helpers_fire.fire_q import fire_q
96
96
  # cmd = fire_q(api_key="", prompt_path=prompt_path, machine=machine)
97
97
  case _:
98
98
  raise ValueError(f"Unsupported agent type: {agent}")
@@ -52,7 +52,7 @@ def get_securely_shared_file(url: Optional[str] = None, folder: Optional[str] =
52
52
  tmp_folder = PathExtended.tmpdir(prefix="tmp_unzip")
53
53
  try:
54
54
  res = url_obj.decrypt(pwd=pwd, inplace=True).unzip(inplace=True, folder=tmp_folder)
55
- for x in res.search("*"):
55
+ for x in res.glob("*"):
56
56
  x.move(folder=folder_obj, overwrite=True)
57
57
  finally:
58
58
  # Clean up temporary folder
@@ -79,8 +79,8 @@ def main(
79
79
  from rich.console import Console
80
80
  from rich.panel import Panel
81
81
  from machineconfig.utils.path_extended import PathExtended
82
- from machineconfig.scripts.python.helpers_cloud.helpers2 import parse_cloud_source_target
83
- from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args
82
+ from machineconfig.scripts.python.helpers.helpers_cloud.helpers2 import parse_cloud_source_target
83
+ from machineconfig.scripts.python.helpers.helpers_cloud.cloud_helpers import Args
84
84
  from machineconfig.utils.accessories import pprint
85
85
 
86
86
  console = Console()
@@ -107,7 +107,7 @@ def main(
107
107
  print("🔄 Converting Google Drive link to direct download URL")
108
108
  else:
109
109
  console.print(Panel("❌ Invalid Google Drive link format", title="[bold red]Error[/bold red]", border_style="red"))
110
- raise ValueError("Invalid Google Drive link format")
110
+ raise typer.Exit(code=1)
111
111
  return get_securely_shared_file(url=source, folder=target)
112
112
 
113
113
  if args_obj.rel2home is True and args_obj.root is None:
@@ -122,7 +122,7 @@ def main(
122
122
 
123
123
  if args_obj.key is not None:
124
124
  console.print(Panel("❌ Key-based encryption is not supported yet", title="[bold red]Error[/bold red]", border_style="red"))
125
- raise ValueError("Key-based encryption is not supported yet.")
125
+ raise typer.Exit(code=1)
126
126
 
127
127
  if cloud in source:
128
128
  console.print(Panel(f"📥 DOWNLOADING FROM CLOUD\n☁️ Cloud: {cloud}\n📂 Source: {source.replace(cloud + ':', '')}\n🎯 Target: {target}", title="[bold blue]Download[/bold blue]", border_style="blue", width=152))
@@ -159,7 +159,7 @@ def main(
159
159
  console.print(Panel(f"🔗 SHARE URL GENERATED\n📝 URL file: {share_url_path}\n🌍 {res.as_url_str()}", title="[bold blue]Share[/bold blue]", border_style="blue", width=152))
160
160
  else:
161
161
  console.print(Panel(f"❌ ERROR: Cloud '{cloud}' not found in source or target", title="[bold red]Error[/bold red]", border_style="red", width=152))
162
- raise ValueError(f"Cloud `{cloud}` not found in source or target.")
162
+ raise typer.Exit(code=1)
163
163
 
164
164
 
165
165
  def arg_parser() -> None:
@@ -19,12 +19,13 @@ def get_rclone_config():
19
19
 
20
20
  def get_mprocs_mount_txt(cloud: str, rclone_cmd: str, cloud_brand: str): # cloud_brand = config[cloud]["type"]
21
21
  from machineconfig.utils.path_extended import PathExtended
22
+ from machineconfig.utils.accessories import randstr
22
23
  import platform
23
24
  DEFAULT_MOUNT = "~/data/rclone"
24
25
 
25
26
  header = f"{' ' + cloud + ' | ' + cloud_brand + ' '}".center(50, "=")
26
27
  if platform.system() == "Windows":
27
- sub_text_path = PathExtended.tmpfile(suffix=".ps1")
28
+ sub_text_path = PathExtended("~/tmp_results/tmp_files").expanduser().joinpath(f"{randstr()}.ps1")
28
29
  sub_text_path.parent.mkdir(parents=True, exist_ok=True)
29
30
  sub_text_path.write_text(
30
31
  f"""
@@ -70,7 +71,8 @@ def mount(
70
71
  if type(res) is str:
71
72
  cloud = res
72
73
  else:
73
- raise ValueError("no cloud selected")
74
+ print(" Error: No cloud selected")
75
+ raise typer.Exit(code=1)
74
76
  print(f"🌩️ Selected cloud: {cloud}")
75
77
 
76
78
  if network is None:
@@ -97,13 +99,15 @@ def mount(
97
99
  console.print(Panel(f"{warning_line}\n{err_line}", title="Warning", border_style="yellow"))
98
100
  pass
99
101
  else:
100
- raise ValueError("unsupported platform")
102
+ print(" Error: Unsupported platform")
103
+ raise typer.Exit(code=1)
101
104
 
102
105
  elif network and platform.system() == "Windows":
103
106
  mount_loc = "X: --network-mode"
104
107
  print(f"🔌 Setting up network mount at {mount_loc}")
105
108
  else:
106
- raise ValueError("network mount only supported on windows")
109
+ print(" Error: Network mount only supported on Windows")
110
+ raise typer.Exit(code=1)
107
111
 
108
112
  mount_cmd = f"rclone mount {cloud}: {mount_loc} --vfs-cache-mode full --file-perms=0777"
109
113
  console.print(Panel(f"🚀 Preparing mount command:\n{mount_cmd}", border_style="blue"))
@@ -148,7 +152,8 @@ zellij run --in-place --cwd $HOME/data/rclone/{cloud} -- bash
148
152
  zellij action move-focus up
149
153
  """
150
154
  else:
151
- raise ValueError("unsupported platform")
155
+ print(" Error: Unsupported platform")
156
+ raise typer.Exit(code=1)
152
157
  # print(f"running command: \n{txt}")
153
158
  # PROGRAM_PATH.write_text(txt, encoding="utf-8")
154
159
  import subprocess
@@ -21,9 +21,9 @@ def main(
21
21
  verbose: Annotated[bool, typer.Option("--verbose", "-v", help="Verbosity of mprocs to show details of syncing.")] = False,
22
22
  ) -> None:
23
23
 
24
- from machineconfig.scripts.python.helpers_cloud.helpers2 import parse_cloud_source_target
25
- from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args
26
- from machineconfig.scripts.python.helpers_cloud.cloud_mount import get_mprocs_mount_txt
24
+ from machineconfig.scripts.python.helpers.helpers_cloud.helpers2 import parse_cloud_source_target
25
+ from machineconfig.scripts.python.helpers.helpers_cloud.cloud_helpers import Args
26
+ from machineconfig.scripts.python.helpers.helpers_cloud.cloud_mount import get_mprocs_mount_txt
27
27
  from rich.console import Console
28
28
  from rich.panel import Panel
29
29
  console = Console()
@@ -1,4 +1,4 @@
1
- from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args, ArgsDefaults, absolute, find_cloud_config, get_secure_share_cloud_config
1
+ from machineconfig.scripts.python.helpers.helpers_cloud.cloud_helpers import Args, ArgsDefaults, absolute, find_cloud_config, get_secure_share_cloud_config
2
2
  from machineconfig.utils.io import read_ini
3
3
  from machineconfig.utils.source_of_truth import DEFAULTS_PATH
4
4
  from machineconfig.utils.accessories import pprint