machineconfig 7.98__py3-none-any.whl → 8.61__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 (353) hide show
  1. machineconfig/cluster/remote/run_cluster.py +1 -1
  2. machineconfig/cluster/remote/run_remote.py +1 -1
  3. machineconfig/cluster/sessions_managers/utils/maker.py +10 -8
  4. machineconfig/cluster/sessions_managers/wt_local.py +1 -1
  5. machineconfig/cluster/sessions_managers/wt_local_manager.py +1 -1
  6. machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
  7. machineconfig/cluster/sessions_managers/zellij_local_manager.py +1 -1
  8. machineconfig/jobs/installer/checks/check_installations.py +133 -0
  9. machineconfig/jobs/installer/checks/install_utils.py +132 -0
  10. machineconfig/jobs/installer/checks/report_utils.py +39 -0
  11. machineconfig/jobs/installer/checks/vt_utils.py +89 -0
  12. machineconfig/jobs/installer/installer_data.json +271 -152
  13. machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
  14. machineconfig/jobs/installer/package_groups.py +11 -9
  15. machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +1 -2
  16. machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +1 -1
  17. machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +10 -8
  18. machineconfig/jobs/installer/{custom → python_scripts}/hx.py +30 -13
  19. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +1 -1
  20. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +6 -5
  21. machineconfig/jobs/installer/{custom_dev → python_scripts}/sysabc.py +28 -43
  22. machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +1 -1
  23. machineconfig/jobs/installer/{custom → python_scripts}/yazi.py +39 -19
  24. machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
  25. machineconfig/jobs/scripts_dynamic/a.py +428 -0
  26. machineconfig/logger.py +1 -1
  27. machineconfig/profile/create_helper.py +21 -10
  28. machineconfig/profile/create_links.py +77 -20
  29. machineconfig/profile/create_links_export.py +63 -58
  30. machineconfig/profile/create_shell_profile.py +14 -0
  31. machineconfig/profile/mapper_data.toml +45 -0
  32. machineconfig/profile/mapper_dotfiles.toml +249 -0
  33. machineconfig/scripts/python/agents.py +76 -171
  34. machineconfig/scripts/python/ai/initai.py +3 -1
  35. machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
  36. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
  37. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
  38. machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
  39. machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
  40. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +1 -1
  41. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +29 -0
  42. machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
  43. machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
  44. machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
  45. machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
  46. machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
  47. machineconfig/scripts/python/ai/utils/vscode_tasks.py +6 -3
  48. machineconfig/scripts/python/cloud.py +58 -11
  49. machineconfig/scripts/python/croshell.py +4 -155
  50. machineconfig/scripts/python/devops.py +57 -38
  51. machineconfig/scripts/python/devops_navigator.py +17 -3
  52. machineconfig/scripts/python/fire_jobs.py +10 -193
  53. machineconfig/scripts/python/ftpx.py +5 -224
  54. machineconfig/scripts/python/graph/cli_graph.json +8743 -0
  55. machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
  56. machineconfig/scripts/python/{env_manager → helpers/helper_env}/env_manager_tui.py +1 -1
  57. machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
  58. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.py +1 -1
  59. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
  60. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_gemini.py +1 -1
  61. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_qwen.py +1 -1
  62. machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
  63. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py +10 -7
  64. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
  65. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
  66. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
  67. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
  68. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
  69. machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
  70. machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +3 -1
  71. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +6 -6
  72. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +10 -5
  73. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +4 -4
  74. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
  75. machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +229 -0
  76. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
  77. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +7 -6
  78. machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
  79. machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
  80. machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +130 -0
  81. machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
  82. machineconfig/scripts/python/helpers/helpers_devops/cli_config_mount.py +77 -0
  83. machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +71 -0
  84. machineconfig/scripts/python/helpers/helpers_devops/cli_nw.py +285 -0
  85. machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
  86. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +84 -33
  87. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_file.py +44 -30
  88. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_server.py +26 -43
  89. machineconfig/scripts/python/helpers/helpers_devops/cli_share_temp.py +69 -0
  90. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_terminal.py +12 -6
  91. machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
  92. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +12 -6
  93. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
  94. machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +64 -50
  95. machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/commands.py +25 -0
  96. machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/device_entry.py +17 -0
  97. machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/devices.py +17 -0
  98. machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/linux.py +103 -0
  99. machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/macos.py +100 -0
  100. machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/selection.py +47 -0
  101. machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/utils.py +28 -0
  102. machineconfig/scripts/python/helpers/helpers_devops/mount_helpers/windows.py +91 -0
  103. machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
  104. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
  105. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
  106. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +3 -3
  107. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/file_wrangler.py +1 -0
  108. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
  109. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
  110. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +3 -3
  111. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  112. machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
  113. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_linux/fzfg +4 -3
  114. machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
  115. machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_windows/fzfg.ps1 +2 -7
  116. machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
  117. machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
  118. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
  119. machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
  120. machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
  121. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
  122. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
  123. machineconfig/scripts/python/helpers/helpers_network/__init__.py +0 -0
  124. machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address.py +52 -10
  125. machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
  126. machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
  127. machineconfig/scripts/python/helpers/helpers_network/ssh/__init__.py +0 -0
  128. machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_add_identity.py +73 -0
  129. machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_add_key_windows.py +23 -0
  130. machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_add_ssh_key.py +169 -0
  131. machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_cloud_init.py +33 -0
  132. machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_debug_linux.py +338 -0
  133. machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_debug_linux_utils.py +35 -0
  134. machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_debug_windows.py +245 -0
  135. machineconfig/scripts/python/helpers/helpers_network/ssh/ssh_debug_windows_utils.py +34 -0
  136. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
  137. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
  138. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +120 -37
  139. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +3 -2
  140. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -13
  141. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_2.py +63 -19
  142. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
  143. machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
  144. machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  145. machineconfig/scripts/python/helpers/helpers_sessions/attach_impl.py +87 -0
  146. machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +114 -0
  147. machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -2
  148. machineconfig/scripts/python/helpers/helpers_sessions/utils.py +69 -0
  149. machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/download.py +1 -1
  150. machineconfig/scripts/python/{helpers_devops/cli_utils.py → helpers/helpers_utils/pdf.py} +2 -2
  151. machineconfig/scripts/python/{helpers_utils/path.py → helpers/helpers_utils/python.py} +65 -40
  152. machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
  153. machineconfig/scripts/python/mcfg_entry.py +126 -48
  154. machineconfig/scripts/python/msearch.py +16 -61
  155. machineconfig/scripts/python/sessions.py +137 -191
  156. machineconfig/scripts/python/utils.py +104 -24
  157. machineconfig/settings/atuin/config.toml +294 -0
  158. machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
  159. machineconfig/settings/linters/.ruff.toml +2 -1
  160. machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
  161. machineconfig/settings/shells/bash/init.sh +6 -10
  162. machineconfig/settings/shells/nushell/config.nu +23 -1
  163. machineconfig/settings/shells/nushell/env.nu +22 -48
  164. machineconfig/settings/shells/nushell/init.nu +64 -240
  165. machineconfig/settings/shells/pwsh/init.ps1 +71 -5
  166. machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
  167. machineconfig/settings/shells/wezterm/wezterm.lua +4 -0
  168. machineconfig/settings/shells/wt/settings.json +31 -37
  169. machineconfig/settings/shells/zsh/init.sh +25 -5
  170. machineconfig/settings/television/cable_unix/bash-history.toml +1 -1
  171. machineconfig/settings/television/cable_windows/pwsh-history.toml +1 -1
  172. machineconfig/settings/tv/config.toml +234 -0
  173. machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
  174. machineconfig/settings/wsl/.wslconfig +5 -30
  175. machineconfig/settings/wt/__init__.py +0 -0
  176. machineconfig/settings/yazi/yazi_linux.toml +18 -8
  177. machineconfig/settings/zellij/__init__.py +0 -0
  178. machineconfig/settings/zellij/config.kdl +0 -295
  179. machineconfig/settings/zellij/layouts/__init__.py +0 -0
  180. machineconfig/settings/zellij/layouts/st.kdl +39 -9
  181. machineconfig/settings/zellij/layouts/st2.kdl +6 -2
  182. machineconfig/setup_linux/__init__.py +0 -1
  183. machineconfig/setup_linux/apps_desktop.sh +8 -27
  184. machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
  185. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +3 -0
  186. machineconfig/setup_mac/__init__.py +0 -2
  187. machineconfig/setup_windows/__init__.py +2 -5
  188. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +14 -13
  189. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +4 -3
  190. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +3 -3
  191. machineconfig/type_hinting/sql/__init__.py +1 -0
  192. machineconfig/type_hinting/sql/base.py +216 -0
  193. machineconfig/type_hinting/sql/core_schema.py +64 -0
  194. machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
  195. machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
  196. machineconfig/type_hinting/typedict/__init__.py +1 -0
  197. machineconfig/type_hinting/typedict/ast_utils.py +130 -0
  198. machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
  199. machineconfig/type_hinting/typedict/generators.py +231 -0
  200. machineconfig/type_hinting/typedict/polars_schema.py +24 -0
  201. machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
  202. machineconfig/utils/accessories.py +24 -0
  203. machineconfig/utils/code.py +78 -33
  204. machineconfig/utils/files/ascii_art.py +10 -14
  205. machineconfig/utils/files/headers.py +3 -5
  206. machineconfig/utils/files/read.py +8 -1
  207. machineconfig/utils/installer_utils/github_release_bulk.py +11 -91
  208. machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
  209. machineconfig/utils/installer_utils/install_from_url.py +1 -1
  210. machineconfig/utils/installer_utils/installer_class.py +12 -4
  211. machineconfig/utils/installer_utils/installer_cli.py +7 -17
  212. machineconfig/utils/installer_utils/installer_helper.py +52 -36
  213. machineconfig/utils/installer_utils/installer_locator_utils.py +15 -25
  214. machineconfig/utils/installer_utils/installer_runner.py +4 -4
  215. machineconfig/utils/io.py +25 -8
  216. machineconfig/utils/meta.py +6 -4
  217. machineconfig/utils/options.py +49 -19
  218. machineconfig/utils/options_utils/__init__.py +0 -0
  219. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  220. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  221. machineconfig/utils/options_utils/tv_options.py +37 -0
  222. machineconfig/utils/path_extended.py +8 -7
  223. machineconfig/utils/procs.py +35 -27
  224. machineconfig/utils/scheduler.py +8 -2
  225. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  226. machineconfig/utils/schemas/layouts/layout_types.py +10 -0
  227. machineconfig/utils/source_of_truth.py +7 -1
  228. machineconfig/utils/ssh.py +73 -23
  229. machineconfig/utils/ssh_utils/abc.py +1 -1
  230. machineconfig/utils/ssh_utils/copy_from_here.py +19 -14
  231. machineconfig/utils/ssh_utils/copy_to_here.py +2 -1
  232. machineconfig/utils/ssh_utils/utils.py +23 -7
  233. machineconfig/utils/ssh_utils/wsl.py +107 -170
  234. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  235. machineconfig/utils/upgrade_packages.py +4 -8
  236. {machineconfig-7.98.dist-info → machineconfig-8.61.dist-info}/METADATA +30 -23
  237. machineconfig-8.61.dist-info/RECORD +539 -0
  238. {machineconfig-7.98.dist-info → machineconfig-8.61.dist-info}/entry_points.txt +0 -1
  239. machineconfig/jobs/installer/check_installations.py +0 -248
  240. machineconfig/profile/backup.toml +0 -49
  241. machineconfig/profile/mapper.toml +0 -263
  242. machineconfig/scripts/linux/other/share_cloud.sh +0 -64
  243. machineconfig/scripts/linux/other/share_nfs +0 -49
  244. machineconfig/scripts/linux/other/start_docker +0 -23
  245. machineconfig/scripts/linux/other/switch_ip +0 -20
  246. machineconfig/scripts/python/helpers/run_py_script.py +0 -79
  247. machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +0 -26
  248. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
  249. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
  250. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  251. machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -214
  252. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -215
  253. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  254. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
  255. machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
  256. machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
  257. machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -620
  258. machineconfig/scripts/python/helpers_network/devops_add_identity.py +0 -82
  259. machineconfig/scripts/python/helpers_network/devops_add_ssh_key.py +0 -153
  260. machineconfig/scripts/python/helpers_network/mount_drive +0 -128
  261. machineconfig/scripts/python/helpers_network/mount_nfs +0 -49
  262. machineconfig/scripts/python/helpers_network/mount_nfs.py +0 -85
  263. machineconfig/scripts/python/helpers_network/mount_nw_drive +0 -61
  264. machineconfig/scripts/python/helpers_network/mount_nw_drive.py +0 -48
  265. machineconfig/scripts/python/helpers_network/mount_smb +0 -3
  266. machineconfig/scripts/python/helpers_network/mount_ssh.py +0 -64
  267. machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +0 -391
  268. machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +0 -338
  269. machineconfig/scripts/python/helpers_network/wsl_windows_transfer.py +0 -67
  270. machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
  271. machineconfig/scripts/python/terminal.py +0 -133
  272. machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +0 -92
  273. machineconfig/scripts/windows/mounts/mount_nfs.ps1 +0 -42
  274. machineconfig/scripts/windows/mounts/mount_nw.ps1 +0 -9
  275. machineconfig/scripts/windows/mounts/mount_smb.ps1 +0 -2
  276. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
  277. machineconfig/scripts/windows/mounts/share_cloud.cmd +0 -34
  278. machineconfig/scripts/windows/mounts/share_smb.ps1 +0 -16
  279. machineconfig/settings/zellij/config.orig.kdl +0 -295
  280. machineconfig/setup_linux/others/android.sh +0 -2
  281. machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
  282. machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
  283. machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
  284. machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
  285. machineconfig/setup_windows/others/docker.ps1 +0 -7
  286. machineconfig/setup_windows/others/obs.ps1 +0 -4
  287. machineconfig/setup_windows/others/power_options.ps1 +0 -7
  288. machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
  289. machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
  290. machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
  291. machineconfig/setup_windows/ssh/openssh-server_add_key.ps1 +0 -7
  292. machineconfig/setup_windows/ssh/openssh-server_copy-ssh-id.ps1 +0 -14
  293. machineconfig/utils/options_tv.py +0 -119
  294. machineconfig/utils/tst.py +0 -20
  295. machineconfig-7.98.dist-info/RECORD +0 -504
  296. /machineconfig/{jobs/installer/custom_dev → cluster/sessions_managers/wt_utils/examples}/__init__.py +0 -0
  297. /machineconfig/{scripts/python/helpers_agents → jobs/installer/checks}/__init__.py +0 -0
  298. /machineconfig/{scripts/python/helpers_agents/agentic_frameworks → jobs/installer/python_scripts}/__init__.py +0 -0
  299. /machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
  300. /machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
  301. /machineconfig/jobs/installer/{custom_dev → python_scripts}/cloudflare_warp_cli.py +0 -0
  302. /machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
  303. /machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +0 -0
  304. /machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
  305. /machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
  306. /machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
  307. /machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
  308. /machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
  309. /machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +0 -0
  310. /machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
  311. /machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
  312. /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
  313. /machineconfig/scripts/python/{helpers_cloud → graph}/__init__.py +0 -0
  314. /machineconfig/scripts/python/{helpers_croshell → helpers}/__init__.py +0 -0
  315. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
  316. /machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
  317. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_agents}/__init__.py +0 -0
  318. /machineconfig/scripts/python/{helpers_devops/themes → helpers/helpers_agents/agentic_frameworks}/__init__.py +0 -0
  319. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
  320. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
  321. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_helper_types.py +0 -0
  322. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
  323. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/prompt.txt +0 -0
  324. /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
  325. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_cloud}/__init__.py +0 -0
  326. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +0 -0
  327. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
  328. /machineconfig/scripts/python/{helpers_network → helpers/helpers_croshell}/__init__.py +0 -0
  329. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +0 -0
  330. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
  331. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
  332. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
  333. /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_devops}/__init__.py +0 -0
  334. /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_devops/mount_helpers}/__init__.py +0 -0
  335. /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_devops/themes/__init__.py} +0 -0
  336. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  337. /machineconfig/scripts/python/{helpers_fire_command/f.py → helpers/helpers_fire_command/__init__.py} +0 -0
  338. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
  339. /machineconfig/scripts/python/{helpers_fire_command/fire_jobs_streamlit_helper.py → helpers/helpers_fire_command/f.py} +0 -0
  340. /machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/__init__.py +0 -0
  341. /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
  342. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/onetimeshare.py +0 -0
  343. /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/wifi_conn.py +0 -0
  344. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -0
  345. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_1.py +0 -0
  346. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
  347. /machineconfig/scripts/python/helpers/{ast_search.py → helpers_search/ast_search.py} +0 -0
  348. /machineconfig/scripts/python/helpers/{qr_code.py → helpers_search/qr_code.py} +0 -0
  349. /machineconfig/scripts/python/helpers/{repo_rag.py → helpers_search/repo_rag.py} +0 -0
  350. /machineconfig/scripts/python/helpers/{symantic_search.py → helpers_search/symantic_search.py} +0 -0
  351. /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
  352. {machineconfig-7.98.dist-info → machineconfig-8.61.dist-info}/WHEEL +0 -0
  353. {machineconfig-7.98.dist-info → machineconfig-8.61.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>=7.98",
5
+ # "machineconfig>=8.61",
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>=7.98",
5
+ # "machineconfig>=8.61",
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.61",
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}")
@@ -100,7 +100,7 @@ sleep 0.1
100
100
  echo "Running with api label: {ai_spec['api_spec']['api_label']}"
101
101
  echo "Running with api acount: {ai_spec['api_spec']['api_account']}"
102
102
  echo "Running with api name: {ai_spec['api_spec']['api_name']}"
103
-
103
+ echo "Running with api key: {ai_spec['api_spec']['api_key']}"
104
104
  """
105
105
  cmd_postfix = """
106
106
  sleep 0.1
@@ -112,10 +112,13 @@ echo "---------END OF AGENT OUTPUT---------"
112
112
 
113
113
  def get_agents_launch_layout(session_root: Path):
114
114
  from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig, LayoutsFile
115
-
116
115
  tab_config: list[TabConfig] = []
117
116
  prompt_root = session_root / "prompts"
118
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)
119
122
  for a_prompt_dir in all_dirs_under_prompts:
120
123
  idx = a_prompt_dir.name.split("_")[-1] # e.g., agent_0 -> 0
121
124
  agent_cmd_path = a_prompt_dir / AGENT_NAME_FORMATTER.format(idx=idx)
@@ -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