machineconfig 3.99__py3-none-any.whl → 7.66__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (418) hide show
  1. machineconfig/__init__.py +0 -28
  2. machineconfig/cluster/remote/distribute.py +0 -1
  3. machineconfig/cluster/remote/file_manager.py +0 -2
  4. machineconfig/cluster/remote/script_execution.py +1 -2
  5. machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
  6. machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
  7. machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
  8. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  9. machineconfig/cluster/sessions_managers/wt_local.py +128 -330
  10. machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
  11. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  12. machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
  13. machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
  14. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  15. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  16. machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
  17. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  18. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  19. machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
  20. machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -172
  21. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  22. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
  23. machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
  24. machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
  25. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
  26. machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
  27. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
  28. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
  29. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
  30. machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
  31. machineconfig/jobs/{python → installer}/check_installations.py +2 -16
  32. machineconfig/jobs/installer/custom/boxes.py +61 -0
  33. machineconfig/jobs/installer/custom/gh.py +69 -53
  34. machineconfig/jobs/installer/custom/hx.py +77 -20
  35. machineconfig/jobs/installer/custom_dev/alacritty.py +45 -30
  36. machineconfig/jobs/installer/custom_dev/brave.py +43 -35
  37. machineconfig/jobs/installer/custom_dev/bypass_paywall.py +31 -20
  38. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  39. machineconfig/jobs/installer/custom_dev/code.py +33 -21
  40. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  41. machineconfig/jobs/installer/custom_dev/espanso.py +64 -41
  42. machineconfig/jobs/installer/custom_dev/goes.py +41 -36
  43. machineconfig/jobs/installer/custom_dev/lvim.py +49 -33
  44. machineconfig/jobs/installer/custom_dev/nerdfont.py +71 -47
  45. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +32 -26
  46. machineconfig/jobs/installer/custom_dev/redis.py +51 -33
  47. machineconfig/jobs/installer/custom_dev/sysabc.py +119 -0
  48. machineconfig/jobs/installer/custom_dev/wezterm.py +55 -39
  49. machineconfig/jobs/installer/custom_dev/winget.py +1 -0
  50. machineconfig/jobs/installer/installer_data.json +3406 -0
  51. machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
  52. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
  53. machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
  54. machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
  55. machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
  56. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  57. machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
  58. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  59. machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
  60. machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
  61. machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
  62. machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
  63. machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
  64. machineconfig/jobs/installer/package_groups.py +255 -0
  65. machineconfig/logger.py +0 -1
  66. machineconfig/profile/backup.toml +49 -0
  67. machineconfig/profile/bash_shell_profiles.md +11 -0
  68. machineconfig/profile/create_helper.py +74 -0
  69. machineconfig/profile/create_links.py +288 -0
  70. machineconfig/profile/create_links_export.py +100 -0
  71. machineconfig/profile/create_shell_profile.py +136 -0
  72. machineconfig/profile/mapper.toml +258 -0
  73. machineconfig/scripts/Restore-ThunderbirdProfile.ps1 +92 -0
  74. machineconfig/scripts/__init__.py +0 -4
  75. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  76. machineconfig/scripts/linux/wrap_mcfg +47 -0
  77. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  78. machineconfig/scripts/python/agents.py +198 -0
  79. machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
  80. machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
  81. machineconfig/scripts/python/ai/generate_files.py +307 -42
  82. machineconfig/scripts/python/ai/initai.py +3 -28
  83. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
  84. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
  85. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  86. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +1 -1
  87. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  88. machineconfig/scripts/python/ai/solutions/generic.py +27 -4
  89. machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
  90. machineconfig/scripts/python/cloud.py +29 -0
  91. machineconfig/scripts/python/croshell.py +117 -181
  92. machineconfig/scripts/python/define.py +31 -0
  93. machineconfig/scripts/python/devops.py +44 -124
  94. machineconfig/scripts/python/devops_navigator.py +10 -0
  95. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  96. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  97. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  98. machineconfig/scripts/python/explore.py +49 -0
  99. machineconfig/scripts/python/fire_jobs.py +106 -244
  100. machineconfig/scripts/python/ftpx.py +125 -68
  101. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  102. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
  103. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  104. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
  105. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  106. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
  107. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
  108. machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
  109. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  110. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  111. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  112. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
  113. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +11 -19
  114. machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
  115. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
  116. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  117. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +17 -7
  118. machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
  119. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  120. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  121. machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
  122. machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
  123. machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
  124. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  125. machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
  126. machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
  127. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  128. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  129. machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
  130. machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
  131. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  132. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  133. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
  134. machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  135. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -87
  136. machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
  137. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
  138. machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  139. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  140. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
  141. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
  142. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
  143. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  144. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  145. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  146. machineconfig/scripts/python/helpers_navigator/command_tree.py +588 -0
  147. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  148. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  149. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  150. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  151. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  152. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
  153. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  154. machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
  155. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
  156. machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
  157. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  158. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
  159. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  160. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  161. machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  162. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
  163. machineconfig/scripts/python/helpers_utils/download.py +152 -0
  164. machineconfig/scripts/python/helpers_utils/path.py +108 -0
  165. machineconfig/scripts/python/interactive.py +79 -160
  166. machineconfig/scripts/python/machineconfig.py +63 -0
  167. machineconfig/scripts/python/msearch.py +21 -0
  168. machineconfig/scripts/python/nw/__init__.py +0 -0
  169. machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
  170. machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
  171. machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
  172. machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
  173. machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
  174. machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
  175. machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
  176. machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
  177. machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
  178. machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -53
  179. machineconfig/scripts/python/{wsl_windows_transfer.py → nw/wsl_windows_transfer.py} +6 -5
  180. machineconfig/scripts/python/sessions.py +167 -0
  181. machineconfig/scripts/python/terminal.py +127 -0
  182. machineconfig/scripts/python/utils.py +66 -0
  183. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  184. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  185. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  186. machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
  187. machineconfig/settings/broot/br.sh +0 -4
  188. machineconfig/settings/broot/conf.toml +1 -1
  189. machineconfig/settings/helix/config.toml +16 -0
  190. machineconfig/settings/helix/languages.toml +13 -4
  191. machineconfig/settings/helix/yazi-picker.sh +12 -0
  192. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  193. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  194. machineconfig/settings/lf/linux/lfrc +10 -12
  195. machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
  196. machineconfig/settings/lf/windows/lfrc +18 -38
  197. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  198. machineconfig/settings/linters/.ruff.toml +1 -1
  199. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  200. machineconfig/settings/marimo/marimo.toml +80 -0
  201. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  202. machineconfig/settings/pistol/pistol.conf +1 -1
  203. machineconfig/settings/shells/bash/init.sh +55 -31
  204. machineconfig/settings/shells/nushell/config.nu +1 -34
  205. machineconfig/settings/shells/nushell/init.nu +127 -0
  206. machineconfig/settings/shells/pwsh/init.ps1 +60 -43
  207. machineconfig/settings/shells/starship/starship.toml +16 -0
  208. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  209. machineconfig/settings/shells/wt/settings.json +32 -17
  210. machineconfig/settings/shells/zsh/init.sh +89 -0
  211. machineconfig/settings/svim/linux/init.toml +0 -4
  212. machineconfig/settings/svim/windows/init.toml +0 -3
  213. machineconfig/settings/yazi/init.lua +57 -0
  214. machineconfig/settings/yazi/keymap_linux.toml +79 -0
  215. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  216. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  217. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  218. machineconfig/settings/yazi/yazi.toml +13 -0
  219. machineconfig/setup_linux/__init__.py +10 -0
  220. machineconfig/setup_linux/apps_desktop.sh +89 -0
  221. machineconfig/setup_linux/apps_gui.sh +64 -0
  222. machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
  223. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  224. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  225. machineconfig/setup_linux/uv.sh +15 -0
  226. machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
  227. machineconfig/setup_mac/__init__.py +16 -0
  228. machineconfig/setup_mac/apps_gui.sh +248 -0
  229. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  230. machineconfig/setup_mac/uv.sh +36 -0
  231. machineconfig/setup_windows/__init__.py +8 -0
  232. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  233. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  234. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  235. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  236. machineconfig/setup_windows/uv.ps1 +10 -0
  237. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -9
  238. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +16 -0
  239. machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
  240. machineconfig/utils/accessories.py +7 -5
  241. machineconfig/utils/cloud/onedrive/README.md +139 -0
  242. machineconfig/utils/code.py +140 -93
  243. machineconfig/utils/files/art/fat_croco.txt +10 -0
  244. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  245. machineconfig/utils/files/art/happy_croco.txt +22 -0
  246. machineconfig/utils/files/art/water_croco.txt +11 -0
  247. machineconfig/utils/files/ascii_art.py +118 -0
  248. machineconfig/utils/files/dbms.py +257 -0
  249. machineconfig/utils/files/headers.py +68 -0
  250. machineconfig/utils/files/ouch/__init__.py +0 -0
  251. machineconfig/utils/files/ouch/decompress.py +45 -0
  252. machineconfig/utils/files/read.py +95 -0
  253. machineconfig/utils/installer_utils/github_release_bulk.py +2 -12
  254. machineconfig/utils/installer_utils/installer_class.py +68 -126
  255. machineconfig/utils/installer_utils/installer_cli.py +181 -0
  256. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +38 -85
  257. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +69 -69
  258. machineconfig/utils/io.py +77 -23
  259. machineconfig/utils/links.py +309 -100
  260. machineconfig/utils/meta.py +255 -0
  261. machineconfig/utils/notifications.py +1 -1
  262. machineconfig/utils/options.py +10 -25
  263. machineconfig/utils/path_extended.py +94 -104
  264. machineconfig/utils/path_helper.py +75 -22
  265. machineconfig/utils/procs.py +50 -74
  266. machineconfig/utils/scheduler.py +94 -97
  267. machineconfig/utils/scheduling.py +0 -3
  268. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
  269. machineconfig/utils/schemas/installer/installer_types.py +0 -1
  270. machineconfig/utils/schemas/layouts/layout_types.py +2 -1
  271. machineconfig/utils/source_of_truth.py +3 -6
  272. machineconfig/utils/ssh.py +742 -254
  273. machineconfig/utils/ssh_utils/utils.py +0 -0
  274. machineconfig/utils/terminal.py +3 -140
  275. machineconfig/utils/tst.py +20 -0
  276. machineconfig/utils/upgrade_packages.py +109 -28
  277. machineconfig/utils/ve.py +13 -5
  278. machineconfig-7.66.dist-info/METADATA +124 -0
  279. machineconfig-7.66.dist-info/RECORD +451 -0
  280. machineconfig-7.66.dist-info/entry_points.txt +15 -0
  281. machineconfig/cluster/templates/utils.py +0 -51
  282. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
  283. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
  284. machineconfig/jobs/installer/packages_custom_dev.json +0 -226
  285. machineconfig/jobs/installer/packages_custom_essential.json +0 -39
  286. machineconfig/jobs/installer/packages_github_dev.json +0 -1110
  287. machineconfig/jobs/installer/packages_github_essential.json +0 -804
  288. machineconfig/jobs/linux/msc/cli_agents.sh +0 -37
  289. machineconfig/jobs/python/create_bootable_media.py +0 -16
  290. machineconfig/jobs/python/python_cargo_build_share.py +0 -59
  291. machineconfig/jobs/python/python_ve_symlink.py +0 -29
  292. machineconfig/jobs/python/tasks.py +0 -3
  293. machineconfig/jobs/python/vscode/api.py +0 -49
  294. machineconfig/jobs/python/vscode/sync_code.py +0 -58
  295. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  296. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  297. machineconfig/jobs/windows/startup_file.cmd +0 -2
  298. machineconfig/profile/create.py +0 -170
  299. machineconfig/profile/shell.py +0 -176
  300. machineconfig/scripts/cloud/init.sh +0 -119
  301. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  302. machineconfig/scripts/linux/cloud_copy +0 -2
  303. machineconfig/scripts/linux/cloud_mount +0 -2
  304. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  305. machineconfig/scripts/linux/cloud_sync +0 -2
  306. machineconfig/scripts/linux/croshell +0 -3
  307. machineconfig/scripts/linux/devops +0 -2
  308. machineconfig/scripts/linux/fire +0 -2
  309. machineconfig/scripts/linux/fire_agents +0 -2
  310. machineconfig/scripts/linux/ftpx +0 -2
  311. machineconfig/scripts/linux/fzf2g +0 -21
  312. machineconfig/scripts/linux/fzffg +0 -25
  313. machineconfig/scripts/linux/gh_models +0 -2
  314. machineconfig/scripts/linux/initai +0 -2
  315. machineconfig/scripts/linux/kill_process +0 -2
  316. machineconfig/scripts/linux/programs +0 -21
  317. machineconfig/scripts/linux/repos +0 -2
  318. machineconfig/scripts/linux/scheduler +0 -2
  319. machineconfig/scripts/linux/share_smb +0 -1
  320. machineconfig/scripts/linux/start_slidev +0 -2
  321. machineconfig/scripts/linux/start_terminals +0 -3
  322. machineconfig/scripts/linux/warp-cli.sh +0 -122
  323. machineconfig/scripts/linux/wifi_conn +0 -2
  324. machineconfig/scripts/linux/z_ls +0 -104
  325. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  326. machineconfig/scripts/python/cloud_repo_sync.py +0 -186
  327. machineconfig/scripts/python/devops_devapps_install.py +0 -159
  328. machineconfig/scripts/python/devops_update_repos.py +0 -180
  329. machineconfig/scripts/python/dotfile.py +0 -52
  330. machineconfig/scripts/python/fire_agents.py +0 -175
  331. machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
  332. machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
  333. machineconfig/scripts/python/fire_jobs_args_helper.py +0 -75
  334. machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -74
  335. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  336. machineconfig/scripts/python/gh_models.py +0 -104
  337. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
  338. machineconfig/scripts/python/repos.py +0 -80
  339. machineconfig/scripts/python/repos_helper_action.py +0 -335
  340. machineconfig/scripts/python/share_terminal.py +0 -104
  341. machineconfig/scripts/python/snapshot.py +0 -25
  342. machineconfig/scripts/python/start_terminals.py +0 -121
  343. machineconfig/scripts/python/t4.py +0 -17
  344. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  345. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  346. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  347. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  348. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  349. machineconfig/scripts/windows/croshell.ps1 +0 -1
  350. machineconfig/scripts/windows/devops.ps1 +0 -1
  351. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  352. machineconfig/scripts/windows/fire.ps1 +0 -1
  353. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  354. machineconfig/scripts/windows/gpt.ps1 +0 -1
  355. machineconfig/scripts/windows/grep.ps1 +0 -2
  356. machineconfig/scripts/windows/initai.ps1 +0 -1
  357. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  358. machineconfig/scripts/windows/nano.ps1 +0 -3
  359. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  360. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  361. machineconfig/scripts/windows/repos.ps1 +0 -1
  362. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  363. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  364. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  365. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  366. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  367. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  368. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  369. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  370. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  371. machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
  372. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  373. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  374. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  375. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  376. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  377. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  378. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  379. machineconfig-3.99.dist-info/METADATA +0 -167
  380. machineconfig-3.99.dist-info/RECORD +0 -409
  381. machineconfig-3.99.dist-info/entry_points.txt +0 -18
  382. machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
  383. machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
  384. machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
  385. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  386. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  387. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  388. machineconfig/{jobs/python → scripts/python/helpers_agents}/__init__.py +0 -0
  389. machineconfig/scripts/python/{helpers → helpers_agents/agentic_frameworks}/__init__.py +0 -0
  390. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  391. machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_cloud/__init__.py} +0 -0
  392. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  393. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  394. /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_croshell/__init__.py} +0 -0
  395. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  396. /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
  397. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  398. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  399. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_devops/__init__.py} +0 -0
  400. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/themes/__init__.py} +0 -0
  401. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  402. /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
  403. /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
  404. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
  405. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
  406. /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
  407. /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
  408. /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
  409. /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
  410. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  411. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  412. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  413. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  414. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  415. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  416. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  417. {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/WHEEL +0 -0
  418. {machineconfig-3.99.dist-info → machineconfig-7.66.dist-info}/top_level.txt +0 -0
@@ -1,175 +0,0 @@
1
- """Utility to launch multiple AI agent prompts in a Zellij session.
2
-
3
- Improved design notes:
4
- * Clear separation of: input collection, prompt preparation, agent launch.
5
- * Configurable max agent cap (default 15) with interactive confirmation if exceeded.
6
- * Added type aliases + docstrings for maintainability.
7
- * Preserves original core behavior & command generation for each agent type.
8
- """
9
-
10
- from pathlib import Path
11
- from typing import cast, get_args, Iterable, TypeAlias, Literal
12
- import json
13
- import sys
14
-
15
- from machineconfig.scripts.python.fire_agents_help_launch import prep_agent_launch, get_agents_launch_layout, AGENTS
16
- from machineconfig.scripts.python.fire_agents_help_search import search_files_by_pattern, search_python_files
17
- from machineconfig.scripts.python.fire_agents_load_balancer import chunk_prompts, SPLITTING_STRATEGY, DEFAULT_AGENT_CAP
18
- from machineconfig.utils.options import choose_from_options
19
- from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig
20
- from machineconfig.utils.accessories import get_repo_root
21
-
22
- SEARCH_STRATEGIES: TypeAlias = Literal["file_path", "keyword_search", "filename_pattern"]
23
-
24
-
25
- def _write_list_file(target: Path, files: Iterable[Path]) -> None:
26
- target.parent.mkdir(parents=True, exist_ok=True)
27
- target.write_text("\n".join(str(f) for f in files), encoding="utf-8")
28
-
29
-
30
- def get_prompt_material(search_strategy: SEARCH_STRATEGIES, repo_root: Path) -> tuple[Path, str]:
31
- if search_strategy == "file_path":
32
- file_path_input = input("Enter path to target file: ").strip()
33
- if not file_path_input:
34
- print("No file path provided. Exiting.")
35
- sys.exit(1)
36
- target_file_path = Path(file_path_input).expanduser().resolve()
37
- if not target_file_path.exists() or not target_file_path.is_file():
38
- print(f"Invalid file path: {target_file_path}")
39
- sys.exit(1)
40
- separator = input("Enter separator [\\n]: ").strip() or "\n"
41
- elif search_strategy == "keyword_search":
42
- keyword = input("Enter keyword to search recursively for all .py files containing it: ").strip()
43
- if not keyword:
44
- print("No keyword supplied. Exiting.")
45
- sys.exit(1)
46
- matching_files = search_python_files(repo_root, keyword)
47
- if not matching_files:
48
- print(f"💥 No .py files found containing keyword: {keyword}")
49
- sys.exit(1)
50
- for idx, mf in enumerate(matching_files):
51
- print(f"{idx:>3}: {mf}")
52
- print(f"\nFound {len(matching_files)} .py files containing keyword: {keyword}")
53
- target_file_path = repo_root / ".ai" / "target_file.txt"
54
- _write_list_file(target_file_path, matching_files)
55
- separator = "\n"
56
- elif search_strategy == "filename_pattern":
57
- pattern = input("Enter filename pattern (e.g., '*.py', '*test*', 'config.*'): ").strip()
58
- if not pattern:
59
- print("No pattern supplied. Exiting.")
60
- sys.exit(1)
61
- matching_files = search_files_by_pattern(repo_root, pattern)
62
- if not matching_files:
63
- print(f"💥 No files found matching pattern: {pattern}")
64
- sys.exit(1)
65
- for idx, mf in enumerate(matching_files):
66
- print(f"{idx:>3}: {mf}")
67
- print(f"\nFound {len(matching_files)} files matching pattern: {pattern}")
68
- target_file_path = repo_root / ".ai" / "target_file.txt"
69
- _write_list_file(target_file_path, matching_files)
70
- separator = "\n"
71
- else:
72
- raise ValueError(f"Unknown search strategy: {search_strategy}")
73
- return target_file_path, separator
74
-
75
-
76
- def main(): # noqa: C901 - (complexity acceptable for CLI glue)
77
- repo_root = get_repo_root(Path.cwd())
78
- if repo_root is None:
79
- print("💥 Could not determine the repository root. Please run this script from within a git repository.")
80
- sys.exit(1)
81
- print(f"Operating @ {repo_root}")
82
-
83
- search_strategy = cast(SEARCH_STRATEGIES, choose_from_options(multi=False, msg="Choose one option", header="Choose search strategy:", options=get_args(SEARCH_STRATEGIES)))
84
- splitting_strategy = cast(SPLITTING_STRATEGY, choose_from_options(multi=False, msg="Choose one option", header="Choose prompt splitting strategy:", options=get_args(SPLITTING_STRATEGY)))
85
- agent_selected = cast(AGENTS, choose_from_options(multi=False, msg="Choose one option", header="Select agent type", options=get_args(AGENTS)))
86
- print("Enter prefix prompt (end with Ctrl-D / Ctrl-Z):")
87
- prompt_prefix = "\n".join(sys.stdin.readlines())
88
- job_name = input("Enter job name [AI_AGENTS]: ") or "AI_Agents"
89
- keep_material_in_separate_file_input = input("Keep prompt material in separate file? [y/N]: ").strip().lower() == "y"
90
-
91
- prompt_material_path, separator = get_prompt_material(search_strategy=search_strategy, repo_root=repo_root)
92
- match splitting_strategy:
93
- case "agent_cap":
94
- agent_cap_input = input(f"Enter maximum number of agents/splits [default: {DEFAULT_AGENT_CAP}]: ").strip()
95
- agent_cap = int(agent_cap_input) if agent_cap_input else DEFAULT_AGENT_CAP
96
- task_rows = None
97
- case "task_rows":
98
- task_rows_input: str = input("Enter number of rows/tasks per agent [13]: ").strip() or "13"
99
- task_rows = int(task_rows_input)
100
- agent_cap = None
101
- prompt_material_re_splitted = chunk_prompts(prompt_material_path, splitting_strategy, agent_cap=agent_cap, task_rows=task_rows, joiner=separator)
102
-
103
- agents_dir = prep_agent_launch(repo_root=repo_root, prompts_material=prompt_material_re_splitted, keep_material_in_separate_file=keep_material_in_separate_file_input, prompt_prefix=prompt_prefix, agent=agent_selected, job_name=job_name)
104
- layoutfile = get_agents_launch_layout(session_root=agents_dir)
105
-
106
- regenerate_py_code = f"""
107
- #!/usr/bin/env uv run --python 3.13 --with machineconfig
108
- #!/usr/bin/env uv run --no-dev --project $HOME/code/machineconfig
109
-
110
- from machineconfig.scripts.python.fire_agents import *
111
-
112
- repo_root = Path("{repo_root}")
113
- search_strategy = "{search_strategy}"
114
- splitting_strategy = "{splitting_strategy}"
115
- agent_selected = "{agent_selected}"
116
- prompt_prefix = '''{prompt_prefix}'''
117
- job_name = "{job_name}"
118
- keep_material_in_separate_file_input = {keep_material_in_separate_file_input}
119
- separator = "{separator}"
120
- prompt_material_path = Path("{prompt_material_path}")
121
- agent_cap = {agent_cap}
122
- task_rows = {task_rows}
123
-
124
- prompt_material_re_splitted = chunk_prompts(prompt_material_path, splitting_strategy, agent_cap=agent_cap, task_rows=task_rows, joiner=separator)
125
- agents_dir = prep_agent_launch(repo_root=repo_root, prompts_material=prompt_material_re_splitted, keep_material_in_separate_file=keep_material_in_separate_file_input, prompt_prefix=prompt_prefix, agent=agent_selected, job_name=job_name)
126
- layout = get_agents_launch_layout(session_root=agents_dir)
127
-
128
- (agents_dir / "aa_agents_relaunch.py").write_text(data=regenerate_py_code, encoding="utf-8")
129
- (agents_dir / "layout.json").write_text(data=json.dumps(layout, indent=2), encoding="utf-8")
130
-
131
- if len(layout["layoutTabs"]) > 25:
132
- print("Too many agents (>25) to launch. Skipping launch.")
133
- sys.exit(0)
134
- manager = ZellijLocalManager(session_layouts=[layout])
135
- manager.start_all_sessions()
136
- manager.run_monitoring_routine()
137
-
138
- """
139
- (agents_dir / "aa_agents_relaunch.py").write_text(data=regenerate_py_code, encoding="utf-8")
140
- (agents_dir / "layout.json").write_text(data=json.dumps(layoutfile, indent=2), encoding="utf-8")
141
-
142
- MAX_TABS = 10
143
- if len(layoutfile["layouts"][0]["layoutTabs"]) > MAX_TABS:
144
- print(f"Too many tabs (>{MAX_TABS}) to launch. Skipping launch.")
145
- sys.exit(0)
146
- from machineconfig.cluster.sessions_managers.zellij_local_manager import ZellijLocalManager
147
-
148
- manager = ZellijLocalManager(session_layouts=layoutfile["layouts"])
149
- manager.start_all_sessions(poll_interval=2, poll_seconds=2)
150
- manager.run_monitoring_routine(wait_ms=2000)
151
-
152
-
153
- def split_too_many_tabs_to_run_in_sequential_sessions(layout_tabs: list[TabConfig], every: int):
154
- from machineconfig.utils.accessories import split_list
155
- from machineconfig.cluster.sessions_managers.zellij_local_manager import ZellijLocalManager
156
-
157
- for idx, layout_tabs_chunk in enumerate(split_list(layout_tabs, every=every, to=None)):
158
- a_layout_file: LayoutConfig = {"layoutName": f"split_{idx}", "layoutTabs": layout_tabs_chunk}
159
- manager = ZellijLocalManager(session_layouts=[a_layout_file])
160
- manager.start_all_sessions(poll_interval=2, poll_seconds=2)
161
- manager.run_monitoring_routine(wait_ms=2000)
162
- manager.kill_all_sessions()
163
-
164
-
165
- def split_too_many_layouts_to_run_in_sequential_sessions(layouts: list[LayoutConfig], every: int):
166
- from machineconfig.utils.accessories import split_list
167
- from machineconfig.cluster.sessions_managers.zellij_local_manager import ZellijLocalManager
168
- for _idx, layout_chunk in enumerate(split_list(layouts, every=every)):
169
- manager = ZellijLocalManager(session_layouts=layout_chunk)
170
- manager.start_all_sessions(poll_interval=2, poll_seconds=2)
171
- manager.run_monitoring_routine(wait_ms=2000)
172
-
173
-
174
- if __name__ == "__main__": # pragma: no cover
175
- main()
@@ -1,143 +0,0 @@
1
- from machineconfig.utils.accessories import randstr
2
-
3
- import random
4
- import shlex
5
- from pathlib import Path
6
- from typing import Literal, TypeAlias
7
-
8
-
9
- AGENTS: TypeAlias = Literal[
10
- "cursor-agent", "gemini", "crush", "q", "onlyPrepPromptFiles"
11
- # warp terminal
12
- ]
13
- AGENT_NAME_FORMATTER = "agent_{idx}_cmd.sh" # e.g., agent_0_cmd.sh
14
-
15
-
16
- def get_gemini_api_keys() -> list[str]:
17
- from machineconfig.utils.io import read_ini
18
-
19
- config = read_ini(Path.home().joinpath("dotfiles/creds/llm/gemini/api_keys.ini"))
20
- res: list[str] = []
21
- for a_section_name in list(config.sections()):
22
- a_section = config[a_section_name]
23
- if "api_key" in a_section:
24
- api_key = a_section["api_key"].strip()
25
- if api_key:
26
- res.append(api_key)
27
- print(f"Found {len(res)} Gemini API keys configured.")
28
- return res
29
-
30
-
31
- def prep_agent_launch(repo_root: Path, prompts_material: list[str], prompt_prefix: str, keep_material_in_separate_file: bool, agent: AGENTS, *, job_name: str) -> Path:
32
- session_root = repo_root / ".ai" / f"tmp_prompts/{job_name}_{randstr()}"
33
- session_root.mkdir(parents=True, exist_ok=True)
34
- prompt_folder = session_root / "prompts"
35
- prompt_folder.mkdir(parents=True, exist_ok=True)
36
-
37
- all_materials_scripts: list[Path] = []
38
- for idx, a_prompt_material in enumerate(prompts_material):
39
- prompt_root = prompt_folder / f"agent_{idx}"
40
- prompt_root.mkdir(parents=True, exist_ok=True)
41
- prompt_path = prompt_root / f"agent_{idx}_prompt.txt"
42
- if keep_material_in_separate_file:
43
- prompt_material_path = prompt_root / f"agent_{idx}_material.txt"
44
- prompt_material_path.write_text(a_prompt_material, encoding="utf-8")
45
- prompt_path.write_text(prompt_prefix + f"""\nPlease only look @ {prompt_material_path}. You don't need to do any other work beside the content of this material file.""", encoding="utf-8")
46
- all_materials_scripts.append(prompt_material_path)
47
- else:
48
- prompt_material_path = prompt_path
49
- prompt_path.write_text(prompt_prefix + """\nPlease only look @ the following:\n""" + a_prompt_material, encoding="utf-8")
50
-
51
- agent_cmd_launch_path = prompt_root / AGENT_NAME_FORMATTER.format(idx=idx) # e.g., agent_0_cmd.sh
52
- random_sleep_time = random.uniform(0, 5)
53
- cmd_prefix = f"""
54
- #!/usr/bin/env bash
55
-
56
- # AGENT-{idx}-LAUNCH-SCRIPT
57
- # Auto-generated by fire_agents.py
58
-
59
- export FIRE_AGENTS_AGENT_NAME="{agent}"
60
- export FIRE_AGENTS_JOB_NAME="{job_name}"
61
- export FIRE_AGENTS_PROMPT_FILE="{prompt_path}"
62
- export FIRE_AGENTS_MATERIAL_FILE="{prompt_material_path}"
63
- export FIRE_AGENTS_AGENT_LAUNCHER="{agent_cmd_launch_path}"
64
-
65
- echo "Sleeping for {random_sleep_time:.2f} seconds to stagger agent startups..."
66
- sleep {random_sleep_time:.2f}
67
- echo "Launching agent {agent} with prompt from {prompt_path}"
68
- echo "Launching agent {agent} with command from {agent_cmd_launch_path}"
69
- echo "--------START OF AGENT OUTPUT--------"
70
- sleep 0.1
71
-
72
- """
73
- match agent:
74
- case "gemini":
75
- model = "gemini-2.5-pro"
76
- # model = "gemini-2.5-flash-lite"
77
- # model = None # auto-select
78
- # if model is None:
79
- # model_arg = ""
80
- # else:
81
- model_arg = f"--model {shlex.quote(model)}"
82
- # Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
83
- safe_path = shlex.quote(str(prompt_path))
84
- api_keys = get_gemini_api_keys()
85
- api_key = api_keys[idx % len(api_keys)] if api_keys else ""
86
- # Export the environment variable so it's available to subshells
87
- cmd = f"""
88
- export GEMINI_API_KEY={shlex.quote(api_key)}
89
- echo "Using Gemini API key $GEMINI_API_KEY"
90
- bash -lc 'cat {safe_path} | gemini {model_arg} --yolo --prompt'
91
- """
92
- case "cursor-agent":
93
- # As originally implemented
94
- cmd = f"""
95
-
96
- cursor-agent --print --output-format text < {prompt_path}
97
-
98
- """
99
- case "crush":
100
- cmd = f"""
101
- crush run {prompt_path}
102
- """
103
- case "q":
104
- cmd = f"""
105
- q chat --no-interactive --trust-all-tools {prompt_path}
106
- """
107
- case "onlyPrepPromptFiles":
108
- cmd = f"""
109
- echo "Prepared prompt file at {prompt_path}"
110
- """
111
- case _:
112
- raise ValueError(f"Unsupported agent type: {agent}")
113
- cmd_postfix = """
114
- sleep 0.1
115
- echo "---------END OF AGENT OUTPUT---------"
116
- """
117
- agent_cmd_launch_path.write_text(cmd_prefix + cmd + cmd_postfix, encoding="utf-8")
118
-
119
- # print(f"Launching a template with #{len(tab_config)} agents")
120
- if len(all_materials_scripts) > 0:
121
- all_materials_list_path = session_root / "all_materials_redistributed.txt"
122
- all_materials_list_path.write_text("\n".join(str(p) for p in all_materials_scripts), encoding="utf-8")
123
- print(f"All prompt materials listed @ {all_materials_list_path}")
124
- return session_root
125
-
126
-
127
- def get_agents_launch_layout(session_root: Path):
128
- from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig, LayoutsFile
129
-
130
- tab_config: list[TabConfig] = []
131
- prompt_root = session_root / "prompts"
132
- all_dirs_under_prompts = [d for d in prompt_root.iterdir() if d.is_dir()]
133
- launch_agents_squentially = ""
134
- for a_prompt_dir in all_dirs_under_prompts:
135
- idx = a_prompt_dir.name.split("_")[-1] # e.g., agent_0 -> 0
136
- agent_cmd_path = a_prompt_dir / AGENT_NAME_FORMATTER.format(idx=idx)
137
- fire_cmd = f"bash {shlex.quote(str(agent_cmd_path))}"
138
- tab_config.append(TabConfig(tabName=f"Agent{idx}", startDir=str(session_root.parent.parent.parent), command=fire_cmd))
139
- launch_agents_squentially += f". {shlex.quote(str(agent_cmd_path))}\n"
140
- layout = LayoutConfig(layoutName="Agents", layoutTabs=tab_config)
141
- (session_root / "launch_all_agents_sequentially.sh").write_text(launch_agents_squentially, encoding="utf-8")
142
- layouts_file: LayoutsFile = LayoutsFile(version="1.0", layouts=[layout])
143
- return layouts_file
@@ -1,50 +0,0 @@
1
- from typing import Literal, TypeAlias
2
- from math import ceil
3
- from pathlib import Path
4
-
5
-
6
- SPLITTING_STRATEGY: TypeAlias = Literal[
7
- "agent_cap", # User decides number of agents, rows/tasks determined automatically
8
- "task_rows", # User decides number of rows/tasks, number of agents determined automatically
9
- ]
10
- DEFAULT_AGENT_CAP = 6
11
-
12
-
13
- def chunk_prompts(prompt_material_path: Path, strategy: SPLITTING_STRATEGY, joiner: str, *, agent_cap: int | None, task_rows: int | None) -> list[str]:
14
- """Chunk prompts based on splitting strategy.
15
-
16
- Args:
17
- prompts: List of prompts to chunk
18
- strategy: Either 'agent_cap' or 'task_rows'
19
- agent_cap: Maximum number of agents (used with 'agent_cap' strategy)
20
- task_rows: Number of rows/tasks per agent (used with 'task_rows' strategy)
21
- """
22
- prompts = [p for p in prompt_material_path.read_text(encoding="utf-8", errors="ignore").split(joiner) if p.strip() != ""] # drop blank entries
23
-
24
- if strategy == "agent_cap":
25
- if agent_cap is None:
26
- raise ValueError("agent_cap must be provided when using 'agent_cap' strategy")
27
-
28
- if len(prompts) <= agent_cap:
29
- return prompts
30
-
31
- print(f"Chunking {len(prompts)} prompts into groups for up to {agent_cap} agents because it exceeds the cap.")
32
- chunk_size = ceil(len(prompts) / agent_cap)
33
- grouped: list[str] = []
34
- for i in range(0, len(prompts), chunk_size):
35
- grouped.append(joiner.join(prompts[i : i + chunk_size]))
36
- return grouped
37
-
38
- elif strategy == "task_rows":
39
- if task_rows is None:
40
- raise ValueError("task_rows must be provided when using 'task_rows' strategy")
41
- if task_rows >= len(prompts):
42
- return prompts
43
- print(f"Chunking {len(prompts)} prompts into groups of {task_rows} rows/tasks each.")
44
- grouped: list[str] = []
45
- for i in range(0, len(prompts), task_rows):
46
- grouped.append(joiner.join(prompts[i : i + task_rows]))
47
- return grouped
48
-
49
- else:
50
- raise ValueError(f"Unknown splitting strategy: {strategy}")
@@ -1,75 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Optional, Any
3
-
4
-
5
- @dataclass
6
- class FireJobArgs:
7
- """Type-safe dataclass for fire_jobs command line arguments."""
8
-
9
- path: str = "."
10
- function: Optional[str] = None
11
- ve: str = ""
12
- cmd: bool = False
13
- interactive: bool = False
14
- debug: bool = False
15
- choose_function: bool = False
16
- loop: bool = False
17
- jupyter: bool = False
18
- submit_to_cloud: bool = False
19
- remote: bool = False
20
- module: bool = False
21
- streamlit: bool = False
22
- environment: str = ""
23
- holdDirectory: bool = False
24
- PathExport: bool = False
25
- git_pull: bool = False
26
- optimized: bool = False
27
- Nprocess: int = 1
28
- zellij_tab: Optional[str] = None
29
- watch: bool = False
30
- layout: bool = False
31
-
32
-
33
- def extract_kwargs(args: FireJobArgs) -> dict[str, object]:
34
- """Extract kwargs from command line using -- separator.
35
-
36
- Returns empty dict since kwargs are now parsed directly from sys.argv
37
- using the -- separator pattern in the main function.
38
- """
39
- return {}
40
-
41
-
42
- def parse_fire_args_from_argv() -> str:
43
- """Parse arguments after -- separator for Fire compatibility.
44
-
45
- Returns:
46
- String of Fire-compatible arguments to append to command
47
- """
48
- import sys
49
-
50
- if '--' in sys.argv:
51
- separator_index = sys.argv.index('--')
52
- fire_args = sys.argv[separator_index + 1:]
53
- # Join all Fire arguments - they should already be in Fire format
54
- return ' '.join(fire_args) if fire_args else ''
55
-
56
- return ''
57
-
58
-
59
- def parse_fire_args_from_context(ctx: Any) -> str:
60
- """Parse Fire arguments from typer context.
61
-
62
- Args:
63
- ctx: Typer context containing raw arguments
64
-
65
- Returns:
66
- String of Fire-compatible arguments to append to command
67
- """
68
- # Get remaining args that weren't consumed by typer
69
- if hasattr(ctx, 'args') and ctx.args:
70
- args = ctx.args
71
- # Filter out the -- separator if present
72
- if args and args[0] == '--':
73
- args = args[1:]
74
- return ' '.join(args)
75
- return ''
@@ -1,74 +0,0 @@
1
- from pathlib import Path
2
- from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig, LayoutsFile
3
- from typing import Optional, TYPE_CHECKING
4
- from machineconfig.scripts.python.helpers.helpers4 import search_for_files_of_interest
5
- from machineconfig.utils.options import choose_from_options
6
- from machineconfig.utils.path_helper import match_file_name, sanitize_path
7
- from machineconfig.utils.path_extended import PathExtended as PathExtended
8
-
9
- if TYPE_CHECKING:
10
- from machineconfig.scripts.python.fire_jobs_args_helper import FireJobArgs
11
-
12
-
13
- def select_layout(layouts_json_file: Path, layouts_name: Optional[list[str]]) -> list[LayoutConfig]:
14
- import json
15
- layout_file: LayoutsFile = json.loads(layouts_json_file.read_text(encoding="utf-8"))
16
- if len(layout_file["layouts"]) == 0:
17
- raise ValueError(f"No layouts found in {layouts_json_file}")
18
- if layouts_name is None:
19
- options = [layout["layoutName"] for layout in layout_file["layouts"]]
20
- from machineconfig.utils.options import choose_from_options
21
- layouts_name = choose_from_options(multi=True, options=options, prompt="Choose a layout configuration:", fzf=True, msg="Choose one option")
22
- print(f"Selected layout(s): {layouts_name}")
23
- # layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == layouts_name), None)
24
- # if layout_chosen is None:
25
- # layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"].lower() == layouts_name.lower()), None)
26
- # if layout_chosen is None:
27
- # available_layouts = [layout["layoutName"] for layout in layout_file["layouts"]]
28
- # raise ValueError(f"Layout '{layouts_name}' not found. Available layouts: {available_layouts}")
29
- layouts_chosen: list[LayoutConfig] = []
30
- for name in layouts_name:
31
- layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == name), None)
32
- if layout_chosen is None:
33
- layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"].lower() == name.lower()), None)
34
- if layout_chosen is None:
35
- available_layouts = [layout["layoutName"] for layout in layout_file["layouts"]]
36
- raise ValueError(f"Layout '{name}' not found. Available layouts: {available_layouts}")
37
- layouts_chosen.append(layout_chosen)
38
- return layouts_chosen
39
-
40
-
41
- def launch_layout(layout_config: LayoutConfig) -> Optional[Exception]:
42
- import platform
43
- if platform.system() == "Linux" or platform.system() == "Darwin":
44
- print("🧑‍💻 Launching layout using Zellij terminal multiplexer...")
45
- from machineconfig.cluster.sessions_managers.zellij_local import run_zellij_layout
46
- run_zellij_layout(layout_config=layout_config)
47
- elif platform.system() == "Windows":
48
- print("🧑‍💻 Launching layout using Windows Terminal...")
49
- from machineconfig.cluster.sessions_managers.wt_local import run_wt_layout
50
-
51
- run_wt_layout(layout_config=layout_config)
52
- else:
53
- print(f"❌ Unsupported platform: {platform.system()}")
54
- return None
55
-
56
-
57
- def handle_layout_args(args: "FireJobArgs") -> None:
58
- # args.function = args.path
59
- # args.path = "layout.json"
60
- path_obj = sanitize_path(args.path)
61
- if not path_obj.exists():
62
- choice_file = match_file_name(sub_string=args.path, search_root=PathExtended.cwd(), suffixes={".json"})
63
- elif path_obj.is_dir():
64
- print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
65
- files = search_for_files_of_interest(path_obj)
66
- print(f"🔍 Got #{len(files)} results.")
67
- choice_file = choose_from_options(multi=False, options=files, fzf=True, msg="Choose one option")
68
- choice_file = PathExtended(choice_file)
69
- else:
70
- choice_file = path_obj
71
- if args.function is None: layouts_name = None
72
- else: layouts_name = args.function.split(",")
73
- for a_layout_config in select_layout(layouts_json_file=choice_file, layouts_name=layouts_name):
74
- launch_layout(layout_config=a_layout_config)
@@ -1,15 +0,0 @@
1
- from pathlib import Path
2
-
3
-
4
- def get_zellij_cmd(wd1: Path, wd2: Path) -> str:
5
- _ = wd1, wd2
6
- lines = [
7
- """ zellij action new-tab --name gitdiff""",
8
- """zellij action new-pane --direction down --name local --cwd ./data """,
9
- """zellij action write-chars "cd '{wd1}'; git status" """,
10
- """zellij action move-focus up; zellij action close-pane """,
11
- """zellij action new-pane --direction down --name remote --cwd code """,
12
- """zellij action write-chars "cd '{wd2}' """,
13
- """git status" """,
14
- ]
15
- return "; ".join(lines)
@@ -1,104 +0,0 @@
1
- # # as per https://github.com/marketplace/models/azure-openai/o1-preview
2
- # from openai import OpenAI
3
- # from machineconfig.utils.path_reduced import P as PathExtended
4
- # from machineconfig.utils.utils2 import read_ini
5
- # from rich import print as rprint
6
- # from rich.panel import Panel
7
- # from typing import Any
8
-
9
-
10
- # gh_token = read_ini(PathExtended.home().joinpath("dotfiles/creds/git/git_host_tokens.ini"))['thisismygitrepo']['newLongterm']
11
- # endpoint = "https://models.inference.ai.azure.com"
12
- # model_name_preferences = ["o3-mini", "o1-preview", "o1-mini", "GPT-4o", "GPT-4-o-mini"]
13
- # client__ = OpenAI(
14
- # base_url=endpoint,
15
- # api_key=gh_token,
16
- # )
17
-
18
-
19
- # def get_response(client: Any, model_name: str, messages: list[dict[str, str]]):
20
- # print(f"""
21
- # ┌────────────────────────────────────────────────────────────────
22
- # │ 🤖 Querying Model: {model_name}
23
- # │ Sending request to API...
24
- # └────────────────────────────────────────────────────────────────""")
25
- # try:
26
- # response = client.chat.completions.create(
27
- # messages=messages,
28
- # model=model_name
29
- # )
30
- # return response.choices
31
- # except Exception as e:
32
- # print(f"""
33
- # ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
34
- # ┃ ❌ API Error with model {model_name}
35
- # ┃ {str(e)}
36
- # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
37
- # return None
38
-
39
-
40
- # def interactive_chat():
41
- # conversation_history = []
42
- # model_index = 0
43
- # model_name = model_name_preferences[model_index]
44
-
45
- # print("""
46
- # ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
47
- # ┃ 🚀 Interactive Chat Started
48
- # ┃ Type your message and press Enter to chat
49
- # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
50
-
51
- # while True:
52
- # header = f" 🤖 Using Model: {model_name} "
53
- # print(f"\n{header.center(80, '═')}\n")
54
-
55
- # while True:
56
- # try:
57
- # user_input = input("💬 You: ")
58
- # conversation_history.append({"role": "user", "content": user_input})
59
-
60
- # while True:
61
- # choices = get_response(client__, model_name, conversation_history)
62
- # if choices is None:
63
- # model_index += 1
64
- # model_name = model_name_preferences[model_index % len(model_name_preferences)]
65
- # print(f"""
66
- # ┌────────────────────────────────────────────────────────────────
67
- # │ 🔄 Model Switch
68
- # │ Now using: {model_name}
69
- # └────────────────────────────────────────────────────────────────""")
70
- # continue
71
- # else:
72
- # break
73
-
74
- # for a_choice in choices:
75
- # response_content = a_choice.message.content
76
- # print("\n" * 2)
77
- # try:
78
- # rprint(Panel(
79
- # f"{response_content}",
80
- # title=f"🤖 AI ({model_name})",
81
- # border_style="blue"
82
- # ))
83
- # except Exception:
84
- # # Fallback if rich formatting fails
85
- # print(f"""
86
- # ┌────────────────────────────────────────────────────────────────
87
- # │ 🤖 AI ({model_name}):
88
- # │
89
- # {response_content}
90
- # └────────────────────────────────────────────────────────────────""")
91
-
92
- # conversation_history.append({"role": "assistant", "content": response_content})
93
- # print("\n")
94
- # except KeyboardInterrupt:
95
- # print("""
96
- # ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
97
- # ┃ 👋 Chat Session Ended
98
- # ┃ Thank you for using the interactive chat!
99
- # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━""")
100
- # return
101
-
102
-
103
- # if __name__ == "__main__":
104
- # interactive_chat()