machineconfig 6.82__py3-none-any.whl → 8.51__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. machineconfig/cluster/remote/cloud_manager.py +1 -1
  2. machineconfig/cluster/remote/run_cluster.py +1 -1
  3. machineconfig/cluster/remote/run_remote.py +1 -1
  4. machineconfig/cluster/sessions_managers/utils/maker.py +29 -15
  5. machineconfig/cluster/sessions_managers/wt_local.py +17 -222
  6. machineconfig/cluster/sessions_managers/wt_local_manager.py +56 -194
  7. machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
  8. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  9. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  10. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  11. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  12. machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
  13. machineconfig/cluster/sessions_managers/zellij_local_manager.py +4 -2
  14. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
  15. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
  16. machineconfig/jobs/installer/checks/check_installations.py +133 -0
  17. machineconfig/jobs/installer/checks/install_utils.py +132 -0
  18. machineconfig/jobs/installer/checks/report_utils.py +39 -0
  19. machineconfig/jobs/installer/checks/vt_utils.py +89 -0
  20. machineconfig/jobs/installer/installer_data.json +1500 -310
  21. machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
  22. machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
  23. machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
  24. machineconfig/jobs/installer/package_groups.py +62 -91
  25. machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
  26. machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -3
  27. machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
  28. machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
  29. machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +14 -9
  30. machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
  31. machineconfig/jobs/installer/python_scripts/hx.py +214 -0
  32. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
  33. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +32 -26
  34. machineconfig/jobs/installer/python_scripts/sysabc.py +145 -0
  35. machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
  36. machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
  37. machineconfig/jobs/installer/python_scripts/yazi.py +139 -0
  38. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
  39. machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
  40. machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
  41. machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
  42. machineconfig/jobs/scripts_dynamic/a.py +428 -0
  43. machineconfig/logger.py +1 -2
  44. machineconfig/profile/create_helper.py +56 -18
  45. machineconfig/profile/create_links.py +79 -21
  46. machineconfig/profile/create_links_export.py +87 -36
  47. machineconfig/profile/create_shell_profile.py +92 -127
  48. machineconfig/profile/mapper_data.toml +45 -0
  49. machineconfig/profile/mapper_dotfiles.toml +249 -0
  50. machineconfig/scripts/__init__.py +0 -4
  51. machineconfig/scripts/linux/wrap_mcfg +46 -0
  52. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  53. machineconfig/scripts/python/agents.py +85 -165
  54. machineconfig/scripts/python/ai/initai.py +4 -2
  55. machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
  56. machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
  57. machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
  58. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
  59. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
  60. machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
  61. machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
  62. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
  63. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
  64. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
  65. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +6 -6
  66. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +33 -0
  67. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
  68. machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
  69. machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
  70. machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
  71. machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
  72. machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
  73. machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
  74. machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +13 -5
  75. machineconfig/scripts/python/cloud.py +58 -11
  76. machineconfig/scripts/python/croshell.py +10 -162
  77. machineconfig/scripts/python/devops.py +73 -36
  78. machineconfig/scripts/python/devops_navigator.py +16 -6
  79. machineconfig/scripts/python/fire_jobs.py +8 -222
  80. machineconfig/scripts/python/ftpx.py +7 -200
  81. machineconfig/scripts/python/graph/cli_graph.json +8743 -0
  82. machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
  83. machineconfig/scripts/python/helpers/helper_env/env_manager_tui.py +204 -0
  84. machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
  85. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
  86. machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
  87. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
  88. machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
  89. machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  90. machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
  91. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_launch.py +38 -16
  92. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_helper_types.py +11 -14
  93. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
  94. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
  95. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
  96. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
  97. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
  98. machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
  99. machineconfig/scripts/python/helpers/helpers_agents/templates/prompt.txt +10 -0
  100. machineconfig/scripts/python/helpers/helpers_agents/templates/template.sh +34 -0
  101. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +32 -25
  102. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +29 -22
  103. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +9 -8
  104. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
  105. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +3 -3
  106. machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
  107. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
  108. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +12 -12
  109. machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
  110. machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
  111. machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
  112. machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
  113. machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +67 -0
  114. machineconfig/scripts/python/helpers/helpers_devops/cli_nw.py +201 -0
  115. machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
  116. machineconfig/scripts/python/helpers/helpers_devops/cli_self.py +197 -0
  117. machineconfig/scripts/python/helpers/helpers_devops/cli_share_file.py +151 -0
  118. machineconfig/scripts/python/helpers/helpers_devops/cli_share_server.py +125 -0
  119. machineconfig/scripts/python/{helpers_devops/cli_terminal.py → helpers/helpers_devops/cli_share_terminal.py} +26 -22
  120. machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
  121. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +17 -23
  122. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
  123. machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +78 -71
  124. machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
  125. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
  126. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
  127. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +4 -4
  128. machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers/helpers_fire_command/file_wrangler.py} +57 -20
  129. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
  130. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
  131. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +26 -16
  132. machineconfig/scripts/python/helpers/helpers_msearch/__init__.py +5 -0
  133. machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
  134. machineconfig/scripts/{linux → python/helpers/helpers_msearch/scripts_linux}/fzfg +6 -5
  135. machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
  136. machineconfig/scripts/python/helpers/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
  137. machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
  138. machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
  139. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
  140. machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
  141. machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
  142. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
  143. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
  144. machineconfig/scripts/python/helpers/helpers_network/address.py +174 -0
  145. machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
  146. machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
  147. machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nfs.py +2 -2
  148. machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_ssh.py +3 -3
  149. machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
  150. machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
  151. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
  152. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
  153. machineconfig/scripts/python/{nw → helpers/helpers_network}/wifi_conn.py +1 -53
  154. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
  155. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
  156. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -1
  157. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +159 -48
  158. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +4 -3
  159. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -12
  160. machineconfig/scripts/python/helpers/helpers_repos/repo_analyzer_1.py +160 -0
  161. machineconfig/scripts/python/{helpers_repos/count_lines.py → helpers/helpers_repos/repo_analyzer_2.py} +156 -191
  162. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
  163. machineconfig/scripts/python/helpers/helpers_search/ast_search.py +74 -0
  164. machineconfig/scripts/python/helpers/helpers_search/qr_code.py +166 -0
  165. machineconfig/scripts/python/helpers/helpers_search/repo_rag.py +325 -0
  166. machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
  167. machineconfig/scripts/python/helpers/helpers_search/symantic_search.py +25 -0
  168. machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  169. machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
  170. machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +20 -14
  171. machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
  172. machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
  173. machineconfig/scripts/python/helpers/helpers_utils/download.py +150 -0
  174. machineconfig/scripts/python/helpers/helpers_utils/pdf.py +96 -0
  175. machineconfig/scripts/python/helpers/helpers_utils/python.py +210 -0
  176. machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
  177. machineconfig/scripts/python/mcfg_entry.py +143 -0
  178. machineconfig/scripts/python/msearch.py +26 -0
  179. machineconfig/scripts/python/sessions.py +69 -135
  180. machineconfig/scripts/python/terminal.py +58 -0
  181. machineconfig/scripts/python/utils.py +115 -38
  182. machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
  183. machineconfig/settings/atuin/config.toml +294 -0
  184. machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
  185. machineconfig/settings/broot/conf.toml +1 -1
  186. machineconfig/settings/helix/config.toml +16 -0
  187. machineconfig/settings/helix/languages.toml +13 -4
  188. machineconfig/settings/helix/yazi-picker.sh +12 -0
  189. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  190. machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
  191. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  192. machineconfig/settings/lf/windows/lfrc +14 -16
  193. machineconfig/settings/linters/.ruff.toml +2 -1
  194. machineconfig/settings/marimo/marimo.toml +1 -1
  195. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  196. machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
  197. machineconfig/settings/shells/bash/init.sh +47 -12
  198. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
  199. machineconfig/settings/shells/nushell/config.nu +25 -33
  200. machineconfig/settings/shells/nushell/env.nu +21 -8
  201. machineconfig/settings/shells/nushell/init.nu +138 -0
  202. machineconfig/settings/shells/pwsh/init.ps1 +111 -17
  203. machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
  204. machineconfig/settings/shells/starship/starship.toml +16 -0
  205. machineconfig/settings/shells/wezterm/wezterm.lua +6 -1
  206. machineconfig/settings/shells/wt/settings.json +27 -18
  207. machineconfig/settings/shells/zsh/init.sh +42 -23
  208. machineconfig/settings/television/cable_unix/alias.toml +8 -0
  209. machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
  210. machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
  211. machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
  212. machineconfig/settings/television/cable_unix/channels.toml +19 -0
  213. machineconfig/settings/television/cable_unix/dirs.toml +13 -0
  214. machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
  215. machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
  216. machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
  217. machineconfig/settings/television/cable_unix/env.toml +17 -0
  218. machineconfig/settings/television/cable_unix/files.toml +11 -0
  219. machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
  220. machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
  221. machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
  222. machineconfig/settings/television/cable_unix/git-log.toml +12 -0
  223. machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
  224. machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
  225. machineconfig/settings/television/cable_unix/guix.toml +20 -0
  226. machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
  227. machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
  228. machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
  229. machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
  230. machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
  231. machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
  232. machineconfig/settings/television/cable_unix/procs.toml +20 -0
  233. machineconfig/settings/television/cable_unix/text.toml +17 -0
  234. machineconfig/settings/television/cable_unix/tldr.toml +18 -0
  235. machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
  236. machineconfig/settings/television/cable_windows/alias.toml +7 -0
  237. machineconfig/settings/television/cable_windows/dirs.toml +13 -0
  238. machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
  239. machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
  240. machineconfig/settings/television/cable_windows/env.toml +17 -0
  241. machineconfig/settings/television/cable_windows/files.toml +14 -0
  242. machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
  243. machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
  244. machineconfig/settings/television/cable_windows/git-log.toml +11 -0
  245. machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
  246. machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
  247. machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
  248. machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
  249. machineconfig/settings/television/cable_windows/text.toml +17 -0
  250. machineconfig/settings/tv/config.toml +234 -0
  251. machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
  252. machineconfig/settings/wsl/.wslconfig +5 -30
  253. machineconfig/settings/wt/__init__.py +0 -0
  254. machineconfig/settings/yazi/init.lua +61 -0
  255. machineconfig/settings/yazi/keymap_linux.toml +94 -0
  256. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  257. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  258. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  259. machineconfig/settings/yazi/theme.toml +4 -0
  260. machineconfig/settings/yazi/yazi_linux.toml +94 -0
  261. machineconfig/settings/yazi/yazi_windows.toml +58 -0
  262. machineconfig/settings/zellij/layouts/st.kdl +40 -9
  263. machineconfig/settings/zellij/layouts/st2.kdl +1 -1
  264. machineconfig/setup_linux/__init__.py +2 -2
  265. machineconfig/setup_linux/apps_desktop.sh +8 -27
  266. machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
  267. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +34 -0
  268. machineconfig/setup_mac/__init__.py +1 -4
  269. machineconfig/setup_mac/apps_gui.sh +248 -0
  270. machineconfig/setup_windows/__init__.py +2 -5
  271. machineconfig/setup_windows/uv.ps1 +8 -1
  272. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -12
  273. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +31 -0
  274. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  275. machineconfig/type_hinting/sql/__init__.py +1 -0
  276. machineconfig/type_hinting/sql/base.py +216 -0
  277. machineconfig/type_hinting/sql/core_schema.py +64 -0
  278. machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
  279. machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
  280. machineconfig/type_hinting/typedict/__init__.py +1 -0
  281. machineconfig/type_hinting/typedict/ast_utils.py +130 -0
  282. machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
  283. machineconfig/type_hinting/typedict/generators.py +231 -0
  284. machineconfig/type_hinting/typedict/polars_schema.py +24 -0
  285. machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
  286. machineconfig/utils/accessories.py +31 -4
  287. machineconfig/utils/code.py +163 -51
  288. machineconfig/utils/files/ascii_art.py +11 -15
  289. machineconfig/utils/files/headers.py +6 -7
  290. machineconfig/utils/files/read.py +8 -1
  291. machineconfig/utils/installer_utils/github_release_bulk.py +95 -138
  292. machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
  293. machineconfig/utils/installer_utils/install_from_url.py +183 -0
  294. machineconfig/utils/installer_utils/installer_class.py +53 -102
  295. machineconfig/utils/installer_utils/installer_cli.py +161 -0
  296. machineconfig/utils/installer_utils/installer_helper.py +129 -0
  297. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +42 -91
  298. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +20 -65
  299. machineconfig/utils/io.py +94 -9
  300. machineconfig/utils/links.py +56 -38
  301. machineconfig/utils/meta.py +38 -21
  302. machineconfig/utils/options.py +81 -23
  303. machineconfig/utils/options_utils/__init__.py +0 -0
  304. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  305. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  306. machineconfig/utils/options_utils/tv_options.py +37 -0
  307. machineconfig/utils/path_extended.py +52 -102
  308. machineconfig/utils/path_helper.py +76 -23
  309. machineconfig/utils/procs.py +1 -1
  310. machineconfig/utils/scheduler.py +26 -53
  311. machineconfig/utils/scheduling.py +0 -2
  312. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  313. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  314. machineconfig/utils/source_of_truth.py +6 -1
  315. machineconfig/utils/ssh.py +216 -419
  316. machineconfig/utils/ssh_utils/abc.py +5 -0
  317. machineconfig/utils/ssh_utils/copy_from_here.py +116 -0
  318. machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
  319. machineconfig/utils/ssh_utils/utils.py +158 -0
  320. machineconfig/utils/ssh_utils/wsl.py +147 -0
  321. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  322. machineconfig/utils/terminal.py +1 -0
  323. machineconfig/utils/upgrade_packages.py +107 -35
  324. machineconfig/utils/ve.py +12 -4
  325. machineconfig-8.51.dist-info/METADATA +140 -0
  326. machineconfig-8.51.dist-info/RECORD +543 -0
  327. {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/entry_points.txt +4 -1
  328. machineconfig/jobs/installer/check_installations.py +0 -248
  329. machineconfig/jobs/installer/custom/hx.py +0 -140
  330. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
  331. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
  332. machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
  333. machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
  334. machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
  335. machineconfig/profile/backup.toml +0 -49
  336. machineconfig/profile/mapper.toml +0 -256
  337. machineconfig/scripts/linux/fzf2g +0 -21
  338. machineconfig/scripts/linux/fzfag +0 -17
  339. machineconfig/scripts/linux/fzffg +0 -25
  340. machineconfig/scripts/linux/fzfrga +0 -21
  341. machineconfig/scripts/linux/mcfgs +0 -38
  342. machineconfig/scripts/linux/other/share_smb +0 -1
  343. machineconfig/scripts/linux/other/switch_ip +0 -20
  344. machineconfig/scripts/linux/skrg +0 -4
  345. machineconfig/scripts/linux/warp-cli.sh +0 -122
  346. machineconfig/scripts/linux/z_ls +0 -104
  347. machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
  348. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -120
  349. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -77
  350. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  351. machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -73
  352. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -181
  353. machineconfig/scripts/python/helpers_devops/cli_self.py +0 -122
  354. machineconfig/scripts/python/helpers_devops/cli_share_server.py +0 -104
  355. machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -221
  356. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  357. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
  358. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
  359. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
  360. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
  361. machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
  362. machineconfig/scripts/python/helpers_fire/template.sh +0 -15
  363. machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
  364. machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
  365. machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -588
  366. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
  367. machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -76
  368. machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
  369. machineconfig/scripts/python/mcfg.py +0 -48
  370. machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
  371. machineconfig/scripts/python/nw/devops_add_identity.py +0 -82
  372. machineconfig/scripts/python/nw/devops_add_ssh_key.py +0 -134
  373. machineconfig/scripts/python/nw/ssh_debug_linux.py +0 -391
  374. machineconfig/scripts/python/nw/ssh_debug_windows.py +0 -338
  375. machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
  376. machineconfig/scripts/windows/fzfb.ps1 +0 -3
  377. machineconfig/scripts/windows/fzfg.ps1 +0 -2
  378. machineconfig/scripts/windows/fzfrga.bat +0 -20
  379. machineconfig/scripts/windows/mcfgs.ps1 +0 -17
  380. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
  381. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  382. machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
  383. machineconfig/settings/lf/windows/tst.ps1 +0 -1
  384. machineconfig/settings/yazi/yazi.toml +0 -4
  385. machineconfig/setup_linux/apps.sh +0 -66
  386. machineconfig/setup_linux/others/cli_installation.sh +0 -137
  387. machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
  388. machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
  389. machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
  390. machineconfig/setup_mac/apps.sh +0 -73
  391. machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
  392. machineconfig/setup_windows/apps.ps1 +0 -62
  393. machineconfig/setup_windows/others/obs.ps1 +0 -4
  394. machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
  395. machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
  396. machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
  397. machineconfig/utils/installer_utils/installer.py +0 -225
  398. machineconfig/utils/tst.py +0 -20
  399. machineconfig-6.82.dist-info/METADATA +0 -82
  400. machineconfig-6.82.dist-info/RECORD +0 -441
  401. machineconfig/jobs/installer/{custom_dev → checks}/__init__.py +0 -0
  402. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
  403. machineconfig/{scripts/python/helpers_cloud → jobs/installer/python_scripts}/__init__.py +0 -0
  404. machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
  405. machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
  406. machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
  407. machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
  408. machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
  409. machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
  410. machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
  411. machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
  412. machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
  413. machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
  414. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
  415. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
  416. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
  417. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
  418. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
  419. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
  420. machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
  421. machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
  422. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
  423. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
  424. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
  425. machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
  426. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
  427. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
  428. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
  429. machineconfig/scripts/python/{helpers_croshell → ai/utils}/__init__.py +0 -0
  430. machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
  431. machineconfig/scripts/python/{helpers_devops → graph}/__init__.py +0 -0
  432. machineconfig/scripts/python/{helpers_devops/themes → helpers}/__init__.py +0 -0
  433. machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
  434. machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
  435. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/__init__.py +0 -0
  436. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/__init__.py +0 -0
  437. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
  438. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
  439. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents/templates}/template.ps1 +0 -0
  440. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_cloud}/__init__.py +0 -0
  441. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +1 -1
  442. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
  443. /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_croshell}/__init__.py +0 -0
  444. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
  445. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
  446. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
  447. /machineconfig/scripts/python/{nw → helpers/helpers_devops}/__init__.py +0 -0
  448. /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_devops/themes}/__init__.py +0 -0
  449. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  450. /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
  451. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
  452. /machineconfig/scripts/python/{helpers_fire_command/fire_jobs_streamlit_helper.py → helpers/helpers_fire_command/f.py} +0 -0
  453. /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
  454. /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
  455. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers/helpers_network/__init__.py} +0 -0
  456. /machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nw_drive.py +0 -0
  457. /machineconfig/scripts/python/{nw → helpers/helpers_network}/onetimeshare.py +0 -0
  458. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
  459. /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
  460. {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/WHEEL +0 -0
  461. {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/top_level.txt +0 -0
@@ -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,25 +2,30 @@
2
2
  import random
3
3
  import shlex
4
4
  from pathlib import Path
5
- from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import AGENTS, AGENT_NAME_FORMATTER, HOST, PROVIDER, MODEL
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
- def get_api_keys(provider: PROVIDER) -> list[str]:
8
+ def get_api_keys(provider: PROVIDER) -> list[API_SPEC]:
9
9
  from machineconfig.utils.io import read_ini
10
10
  config = read_ini(Path.home().joinpath(f"dotfiles/creds/llm/{provider}/api_keys.ini"))
11
- res: list[str] = []
11
+ res: list[API_SPEC] = []
12
12
  for a_section_name in list(config.sections()):
13
13
  a_section = config[a_section_name]
14
14
  if "api_key" in a_section:
15
15
  api_key = a_section["api_key"].strip()
16
16
  if api_key:
17
- res.append(api_key)
17
+ res.append(API_SPEC(
18
+ api_key=api_key,
19
+ api_name=a_section.get("api_name", ""),
20
+ api_label=a_section_name,
21
+ api_account=a_section.get("email", "")
22
+ ))
18
23
  print(f"Found {len(res)} {provider} API keys configured.")
19
24
  return res
20
25
 
21
26
 
22
27
  def prep_agent_launch(repo_root: Path, agents_dir: Path, prompts_material: list[str], prompt_prefix: str, keep_material_in_separate_file: bool,
23
- machine: HOST, model: MODEL, provider: PROVIDER, agent: AGENTS, *, job_name: str) -> None:
28
+ machine: HOST, model: str, provider: PROVIDER, agent: AGENTS, *, job_name: str) -> None:
24
29
  agents_dir.mkdir(parents=True, exist_ok=True)
25
30
  prompt_folder = agents_dir / "prompts"
26
31
  prompt_folder.mkdir(parents=True, exist_ok=True)
@@ -55,6 +60,7 @@ export FIRE_AGENTS_PROMPT_FILE="{prompt_path}"
55
60
  export FIRE_AGENTS_MATERIAL_FILE="{prompt_material_path}"
56
61
  export FIRE_AGENTS_AGENT_LAUNCHER="{agent_cmd_launch_path}"
57
62
 
63
+
58
64
  echo "Sleeping for {random_sleep_time:.2f} seconds to stagger agent startups..."
59
65
  sleep {random_sleep_time:.2f}
60
66
  echo "--------START OF AGENT OUTPUT--------"
@@ -65,24 +71,37 @@ sleep 0.1
65
71
  case "gemini":
66
72
  assert provider == "google", "Gemini agent only works with google provider."
67
73
  api_keys = get_api_keys(provider="google")
68
- api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
69
- from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_gemini import fire_gemini
70
- cmd = fire_gemini(api_key=api_key, prompt_path=prompt_path, machine=machine, model="gemini-2.5-pro", provider="google", repo_root=repo_root)
74
+ api_spec = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
75
+ if api_spec is None:
76
+ raise ValueError("No API keys found for Google Gemini. Please configure them in dotfiles/creds/llm/google/api_keys.ini")
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.helpers_agents.agentic_frameworks.fire_gemini import fire_gemini
79
+ cmd = fire_gemini(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
71
80
  case "cursor-agent":
72
- from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_cursor_agents import fire_cursor
73
- cmd = fire_cursor(prompt_path=prompt_path, machine=machine, api_key=None)
81
+ api_spec = API_SPEC(api_key=None, api_name="", api_label="", api_account="")
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.helpers_agents.agentic_frameworks.fire_cursor_agents import fire_cursor
84
+ cmd = fire_cursor(ai_spec=ai_spec, prompt_path=prompt_path)
74
85
  raise NotImplementedError("Cursor agent is not implemented yet, api key missing")
75
86
  case "crush":
76
- from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_crush import fire_crush
77
87
  api_keys = get_api_keys(provider=provider)
78
- api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
79
- cmd = fire_crush(api_key=api_key, prompt_path=prompt_path, machine=machine, repo_root=repo_root, model=model, provider=provider)
88
+ api_spec = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
89
+ if api_spec is None:
90
+ raise ValueError("No API keys found for Crush. Please configure them in dotfiles/creds/llm/crush/api_keys.ini")
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.helpers_agents.agentic_frameworks.fire_crush import fire_crush
93
+ cmd = fire_crush(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
80
94
  # case "q":
81
- # from machineconfig.scripts.python.helpers_fire.fire_q import fire_q
95
+ # from machineconfig.scripts.python.helpers.helpers_fire.fire_q import fire_q
82
96
  # cmd = fire_q(api_key="", prompt_path=prompt_path, machine=machine)
83
97
  case _:
84
98
  raise ValueError(f"Unsupported agent type: {agent}")
85
-
99
+ cmd_prefix += f"""
100
+ echo "Running with api label: {ai_spec['api_spec']['api_label']}"
101
+ echo "Running with api acount: {ai_spec['api_spec']['api_account']}"
102
+ echo "Running with api name: {ai_spec['api_spec']['api_name']}"
103
+ echo "Running with api key: {ai_spec['api_spec']['api_key']}"
104
+ """
86
105
  cmd_postfix = """
87
106
  sleep 0.1
88
107
  echo "---------END OF AGENT OUTPUT---------"
@@ -93,10 +112,13 @@ echo "---------END OF AGENT OUTPUT---------"
93
112
 
94
113
  def get_agents_launch_layout(session_root: Path):
95
114
  from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig, LayoutsFile
96
-
97
115
  tab_config: list[TabConfig] = []
98
116
  prompt_root = session_root / "prompts"
99
117
  all_dirs_under_prompts = [d for d in prompt_root.iterdir() if d.is_dir()]
118
+
119
+ import re
120
+ all_dirs_under_prompts = sorted(all_dirs_under_prompts, key=lambda path: [int(text) if text.isdigit() else text.lower() for text in re.split(r'(\d+)', path.name)])
121
+ print(all_dirs_under_prompts)
100
122
  for a_prompt_dir in all_dirs_under_prompts:
101
123
  idx = a_prompt_dir.name.split("_")[-1] # e.g., agent_0 -> 0
102
124
  agent_cmd_path = a_prompt_dir / AGENT_NAME_FORMATTER.format(idx=idx)
@@ -19,24 +19,21 @@ from typing import Literal, TypeAlias, TypedDict
19
19
  AGENTS: TypeAlias = Literal["cursor-agent", "gemini", "qwen-code", "copilot", "crush", "q", "opencode", "kilocode", "cline", "auggie", "warp", "droid"]
20
20
  HOST: TypeAlias = Literal["local", "docker"]
21
21
  PROVIDER: TypeAlias = Literal["azure", "google", "aws", "openai", "anthropic", "openrouter", "xai"]
22
- MODEL: TypeAlias = Literal["zai/glm-4.6", "anthropic/sonnet-4.5", "google/gemini-2.5-pro", "openai/gpt-5-codex",
23
- "openrouter/supernova", "x-ai/grok-4-fast:free",
24
- ]
25
- PROVIDER2MODEL: dict[PROVIDER, list[MODEL]] = {
26
- "azure": ["zai/glm-4.6"],
27
- "google": ["google/gemini-2.5-pro"],
28
- "aws": [],
29
- "openai": ["openai/gpt-5-codex"],
30
- "anthropic": ["anthropic/sonnet-4.5"],
31
- "openrouter": ["openrouter/supernova"],
32
- "xai": ["x-ai/grok-4-fast:free"]
33
- }
22
+
23
+
24
+ class API_SPEC(TypedDict):
25
+ api_key: str | None
26
+ api_name: str
27
+ api_label: str
28
+ api_account: str
29
+
34
30
 
35
31
  class AI_SPEC(TypedDict):
36
32
  provider: PROVIDER
37
- model: MODEL
33
+ model: str
38
34
  agent: AGENTS
39
- machine: HOST
35
+ machine: HOST
36
+ api_spec: API_SPEC
40
37
 
41
38
 
42
39
  AGENT_NAME_FORMATTER = "agent_{idx}_cmd.sh" # e.g., agent_0_cmd.sh
@@ -0,0 +1,5 @@
1
+ save: false
2
+ save_session: false
3
+ save_shell_history: false
4
+ user_agent: "Mozilla/5.0"
5
+ sync_models_url: ""
@@ -0,0 +1,2 @@
1
+ analytics: false
2
+ check-update: false
@@ -0,0 +1 @@
1
+ optional_usage_analytics: false
@@ -0,0 +1,10 @@
1
+ {
2
+ "options": {
3
+ "disable_metrics": true,
4
+ "disable_provider_auto_update": true,
5
+ "attribution": {
6
+ "trailer_style": "none",
7
+ "generated_with": false
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "telemetry": {
3
+ "enabled": false,
4
+ "logPrompts": false,
5
+ "useCollector": false,
6
+ "target": "local",
7
+ "outfile": null
8
+ },
9
+ "advanced": {
10
+ "bugCommand": null
11
+ }
12
+ }
@@ -0,0 +1,109 @@
1
+ """
2
+
3
+ create 18 tasks one per cli
4
+ in each one, you do comprehensive search on internet on how to set up the cli/extension or whatever so we get max privacy and security (nothing shared everything is declined and is on the safe side)
5
+ this is a moving space, everyday, there are new versions, new configs, new settings, new policies, new rules, new terms of service, new eula, new privacy policies etc etc
6
+ so please search for latest and don't be complacent with the work done so far.
7
+
8
+ do it one by one, don't research and implement next before finishing the task before it.
9
+
10
+ I provided gemini cli solution as a reference (feel free to make it more flexible if you need mroe room to implement something more complex than what I did, its just a guide)
11
+ remember that other cli's have different names and configs and locations etc, read official docs
12
+
13
+ in the following cli how to set it for maximal prviacy *turn off any telemetry, reject any use of data, etc etc, please think of everything and read all theird docs and fine print
14
+ "aider",
15
+ "aichat", # rust cli
16
+ "copilot", # cli from github copilot extension
17
+ "gemini", # gemini cli
18
+ "crush", # cli from charm team
19
+ "mods", # cli from same people as crush (not agent) @ https://github.com/charmbracelet/mods
20
+ "opencode-ai",
21
+ "chatgpt",
22
+ "q", # from aws
23
+ "qwen-code", # fork of gemini cli
24
+ "cursor-cli",
25
+ "droid",
26
+ "kilocode",
27
+ "cline", # cli from cline ai extension
28
+ "auggie",
29
+ "codex", # from openai
30
+
31
+ """
32
+
33
+ from typing import Optional
34
+
35
+
36
+ def apply_max_privacy_and_security_rules_and_configs(overwrite: bool, repo_root: Optional[str]) -> None:
37
+ from machineconfig.utils.source_of_truth import LIBRARY_ROOT
38
+ root = LIBRARY_ROOT / "scripts/python/helpers_agents/privacy/configs"
39
+ from pathlib import Path
40
+
41
+ # Gemini privacy settings
42
+ gemini_settings_source = root.joinpath("gemini/settings.json")
43
+ gemini_settings_target_global = Path.home().joinpath(".gemini/settings.json")
44
+ if not gemini_settings_target_global.exists() or overwrite:
45
+ gemini_settings_target_global.parent.mkdir(parents=True, exist_ok=True)
46
+ gemini_settings_target_global.write_text(gemini_settings_source.read_text())
47
+ if repo_root:
48
+ gemini_settings_target_repo = Path(repo_root).joinpath(".gemini/settings.json")
49
+ if not gemini_settings_target_repo.exists() or overwrite:
50
+ gemini_settings_target_repo.parent.mkdir(parents=True, exist_ok=True)
51
+ gemini_settings_target_repo.write_text(gemini_settings_source.read_text())
52
+
53
+ # Aider privacy settings
54
+ aider_settings_source = root.joinpath("aider/.aider.conf.yml")
55
+ aider_settings_target_global = Path.home().joinpath(".aider.conf.yml")
56
+ if not aider_settings_target_global.exists() or overwrite:
57
+ aider_settings_target_global.parent.mkdir(parents=True, exist_ok=True)
58
+ aider_settings_target_global.write_text(aider_settings_source.read_text())
59
+
60
+ if repo_root:
61
+ aider_settings_target_repo = Path(repo_root).joinpath(".aider.conf.yml")
62
+ if not aider_settings_target_repo.exists() or overwrite:
63
+ aider_settings_target_repo.parent.mkdir(parents=True, exist_ok=True)
64
+ aider_settings_target_repo.write_text(aider_settings_source.read_text())
65
+
66
+ # Aichat privacy settings
67
+ aichat_settings_source = root.joinpath("aichat/config.yaml")
68
+ aichat_settings_target_global = Path.home().joinpath(".config/aichat/config.yaml")
69
+ if not aichat_settings_target_global.exists() or overwrite:
70
+ aichat_settings_target_global.parent.mkdir(parents=True, exist_ok=True)
71
+ aichat_settings_target_global.write_text(aichat_settings_source.read_text())
72
+
73
+ if repo_root:
74
+ aichat_settings_target_repo = Path(repo_root).joinpath(".config/aichat/config.yaml")
75
+ if not aichat_settings_target_repo.exists() or overwrite:
76
+ aichat_settings_target_repo.parent.mkdir(parents=True, exist_ok=True)
77
+ aichat_settings_target_repo.write_text(aichat_settings_source.read_text())
78
+
79
+ # Copilot privacy settings
80
+ copilot_settings_source = root.joinpath("copilot/config.yml")
81
+ copilot_settings_target_global = Path.home().joinpath(".config/gh-copilot/config.yml")
82
+ if not copilot_settings_target_global.exists() or overwrite:
83
+ copilot_settings_target_global.parent.mkdir(parents=True, exist_ok=True)
84
+ copilot_settings_target_global.write_text(copilot_settings_source.read_text())
85
+
86
+ if repo_root:
87
+ copilot_settings_target_repo = Path(repo_root).joinpath(".config/gh-copilot/config.yml")
88
+ if not copilot_settings_target_repo.exists() or overwrite:
89
+ copilot_settings_target_repo.parent.mkdir(parents=True, exist_ok=True)
90
+ copilot_settings_target_repo.write_text(copilot_settings_source.read_text())
91
+
92
+ # Crush privacy settings
93
+ crush_settings_source = root.joinpath("crush/crush.json")
94
+ crush_settings_target_global = Path.home().joinpath(".config/crush/crush.json")
95
+ if not crush_settings_target_global.exists() or overwrite:
96
+ crush_settings_target_global.parent.mkdir(parents=True, exist_ok=True)
97
+ crush_settings_target_global.write_text(crush_settings_source.read_text())
98
+
99
+ if repo_root:
100
+ crush_settings_target_repo = Path(repo_root).joinpath(".crush.json")
101
+ if not crush_settings_target_repo.exists() or overwrite:
102
+ crush_settings_target_repo.parent.mkdir(parents=True, exist_ok=True)
103
+ crush_settings_target_repo.write_text(crush_settings_source.read_text())
104
+
105
+ # next, cursh cli
106
+
107
+
108
+ if __name__ == "__main__":
109
+ pass
@@ -0,0 +1,10 @@
1
+
2
+ Please inspect the following python files, and document which methods of PathExtended class have been used (if the class is used at all)
3
+ please create a file next to this file on same dir called result.md and put your results in it.
4
+ Like this:
5
+ * File_NAME
6
+ * method1
7
+ * method2
8
+
9
+ * File_NAME
10
+ * method x
@@ -0,0 +1,34 @@
1
+
2
+ #!/bin/bash
3
+ # set -e # Exit immediately if a command exits with a non-zero status.
4
+
5
+
6
+ REPO_ROOT="$HOME/code/machineconfig"
7
+
8
+ JOB_NAME="agentsTrial"
9
+ CONTEXT_PATH="$REPO_ROOT/.ai/agents/files.md"
10
+ PROMPT_PATH="$REPO_ROOT/.ai/agents/prompt.txt"
11
+ AGENTS_DIR="$REPO_ROOT/.ai/agents/$JOB_NAME"
12
+ rm -rfd "$AGENTS_DIR" || true
13
+
14
+ agents create \
15
+ --agents gemini \
16
+ --host docker \
17
+ --model gemini-2.5-pro \
18
+ --provider google \
19
+ --agent-load 5 \
20
+ --context-path $CONTEXT_PATH \
21
+ --prompt-path $PROMPT_PATH \
22
+ --job-name $JOB_NAME \
23
+ --agents-dir $AGENTS_DIR
24
+
25
+ sessions balance-load "$AGENTS_DIR/layout.json" \
26
+ --max-threshold 4 \
27
+ --breaking-method moreLayouts \
28
+ --threshold-type number \
29
+ --output-path "$AGENTS_DIR/layout_balanced.json"
30
+
31
+ sessions run "$AGENTS_DIR/layout_balanced.json" --kill-upon-completion
32
+
33
+
34
+ # agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"
@@ -2,26 +2,24 @@
2
2
  CC
3
3
  """
4
4
 
5
- from machineconfig.utils.path_extended import PathExtended
6
- from tenacity import retry, stop_after_attempt, wait_chain, wait_fixed
7
- import getpass
8
- import os
9
5
  from typing import Optional, Annotated
10
-
11
6
  import typer
12
7
 
13
- from machineconfig.scripts.python.helpers_cloud.helpers2 import parse_cloud_source_target
14
- from machineconfig.scripts.python.helpers_cloud.cloud_helpers import ArgsDefaults, Args
15
- from rich.console import Console
16
- from rich.panel import Panel
17
- from rich.progress import Progress
18
- from machineconfig.utils.accessories import pprint
8
+ from tenacity import retry, stop_after_attempt, wait_chain, wait_fixed
19
9
 
20
- console = Console()
21
10
 
22
11
 
23
12
  @retry(stop=stop_after_attempt(3), wait=wait_chain(wait_fixed(1), wait_fixed(4), wait_fixed(9)))
24
13
  def get_securely_shared_file(url: Optional[str] = None, folder: Optional[str] = None) -> None:
14
+ from rich.console import Console
15
+ from rich.panel import Panel
16
+ from rich.progress import Progress
17
+ import getpass
18
+ import os
19
+ from machineconfig.utils.path_extended import PathExtended
20
+
21
+ console = Console()
22
+
25
23
  console.print(Panel("🚀 Secure File Downloader", title="[bold blue]Downloader[/bold blue]", border_style="blue"))
26
24
 
27
25
  folder_obj = PathExtended.cwd() if folder is None else PathExtended(folder)
@@ -54,7 +52,7 @@ def get_securely_shared_file(url: Optional[str] = None, folder: Optional[str] =
54
52
  tmp_folder = PathExtended.tmpdir(prefix="tmp_unzip")
55
53
  try:
56
54
  res = url_obj.decrypt(pwd=pwd, inplace=True).unzip(inplace=True, folder=tmp_folder)
57
- for x in res.search("*"):
55
+ for x in res.glob("*"):
58
56
  x.move(folder=folder_obj, overwrite=True)
59
57
  finally:
60
58
  # Clean up temporary folder
@@ -62,21 +60,30 @@ def get_securely_shared_file(url: Optional[str] = None, folder: Optional[str] =
62
60
  tmp_folder.delete()
63
61
 
64
62
 
63
+
65
64
  def main(
66
65
  source: Annotated[str, typer.Argument(help="📂 file/folder path to be taken from here.")],
67
66
  target: Annotated[str, typer.Argument(help="🎯 file/folder path to be be sent to here.")],
68
- overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="✍️ Overwrite existing file.")] = ArgsDefaults.overwrite,
69
- share: Annotated[bool, typer.Option("--share", "-s", help="🔗 Share file / directory")] = ArgsDefaults.share,
70
- rel2home: Annotated[bool, typer.Option("--relative2home", "-r", help="🏠 Relative to `myhome` folder")] = ArgsDefaults.rel2home,
71
- root: Annotated[Optional[str], typer.Option("--root", "-R", help="🌳 Remote root. None is the default, unless rel2home is raied, making the default `myhome`.")] = ArgsDefaults.root,
72
- key: Annotated[Optional[str], typer.Option("--key", "-k", help="🔑 Key for encryption")] = ArgsDefaults.key,
73
- pwd: Annotated[Optional[str], typer.Option("--password", "-p", help="🔒 Password for encryption")] = ArgsDefaults.pwd,
74
- encrypt: Annotated[bool, typer.Option("--encrypt", "-e", help="🔐 Encrypt before sending.")] = ArgsDefaults.encrypt,
75
- zip_: Annotated[bool, typer.Option("--zip", "-z", help="📦 unzip after receiving.")] = ArgsDefaults.zip_,
76
- os_specific: Annotated[bool, typer.Option("--os-specific", "-O", help="💻 choose path specific for this OS.")] = ArgsDefaults.os_specific,
67
+ overwrite: Annotated[bool, typer.Option("--overwrite", "-o", help="✍️ Overwrite existing file.")] = False,
68
+ share: Annotated[bool, typer.Option("--share", "-s", help="🔗 Share file / directory")] = False,
69
+ rel2home: Annotated[bool, typer.Option("--relative2home", "-r", help="🏠 Relative to `myhome` folder")] = False,
70
+ root: Annotated[Optional[str], typer.Option("--root", "-R", help="🌳 Remote root. None is the default, unless rel2home is raied, making the default `myhome`.")] = None,
71
+ key: Annotated[Optional[str], typer.Option("--key", "-k", help="🔑 Key for encryption")] = None,
72
+ pwd: Annotated[Optional[str], typer.Option("--password", "-p", help="🔒 Password for encryption")] = None,
73
+ encrypt: Annotated[bool, typer.Option("--encrypt", "-e", help="🔐 Encrypt before sending.")] = False,
74
+ zip_: Annotated[bool, typer.Option("--zip", "-z", help="📦 unzip after receiving.")] = False,
75
+ os_specific: Annotated[bool, typer.Option("--os-specific", "-O", help="💻 choose path specific for this OS.")] = False,
77
76
  config: Annotated[Optional[str], typer.Option("--config", "-c", help="⚙️ path to cloud.json file.")] = None,
78
77
  ) -> None:
79
78
  """📤 Upload or 📥 Download files/folders to/from cloud storage services like Google Drive, Dropbox, OneDrive, etc."""
79
+ from rich.console import Console
80
+ from rich.panel import Panel
81
+ from machineconfig.utils.path_extended import PathExtended
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
+ from machineconfig.utils.accessories import pprint
85
+
86
+ console = Console()
80
87
  console.print(Panel("☁️ Cloud Copy Utility", title="[bold blue]Cloud Copy[/bold blue]", border_style="blue", width=152))
81
88
  args_obj = Args(
82
89
  overwrite=overwrite,
@@ -100,7 +107,7 @@ def main(
100
107
  print("🔄 Converting Google Drive link to direct download URL")
101
108
  else:
102
109
  console.print(Panel("❌ Invalid Google Drive link format", title="[bold red]Error[/bold red]", border_style="red"))
103
- raise ValueError("Invalid Google Drive link format")
110
+ raise typer.Exit(code=1)
104
111
  return get_securely_shared_file(url=source, folder=target)
105
112
 
106
113
  if args_obj.rel2home is True and args_obj.root is None:
@@ -115,7 +122,7 @@ def main(
115
122
 
116
123
  if args_obj.key is not None:
117
124
  console.print(Panel("❌ Key-based encryption is not supported yet", title="[bold red]Error[/bold red]", border_style="red"))
118
- raise ValueError("Key-based encryption is not supported yet.")
125
+ raise typer.Exit(code=1)
119
126
 
120
127
  if cloud in source:
121
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))
@@ -152,7 +159,7 @@ def main(
152
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))
153
160
  else:
154
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))
155
- raise ValueError(f"Cloud `{cloud}` not found in source or target.")
162
+ raise typer.Exit(code=1)
156
163
 
157
164
 
158
165
  def arg_parser() -> None: