machineconfig 5.15__py3-none-any.whl → 7.98__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 (472) hide show
  1. machineconfig/__init__.py +0 -28
  2. machineconfig/cluster/remote/cloud_manager.py +1 -1
  3. machineconfig/cluster/remote/distribute.py +0 -1
  4. machineconfig/cluster/remote/file_manager.py +0 -2
  5. machineconfig/cluster/remote/script_execution.py +0 -1
  6. machineconfig/cluster/sessions_managers/{utils → helpers}/enhanced_command_runner.py +4 -6
  7. machineconfig/cluster/sessions_managers/utils/load_balancer.py +1 -1
  8. machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
  9. machineconfig/cluster/sessions_managers/wt_local.py +114 -289
  10. machineconfig/cluster/sessions_managers/wt_local_manager.py +70 -210
  11. machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
  12. machineconfig/cluster/sessions_managers/wt_remote_manager.py +52 -198
  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 +25 -170
  21. machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
  22. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +16 -12
  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 -3
  32. machineconfig/jobs/installer/custom/boxes.py +61 -0
  33. machineconfig/jobs/installer/custom/hx.py +76 -19
  34. machineconfig/jobs/installer/custom/yazi.py +119 -0
  35. machineconfig/jobs/installer/custom_dev/alacritty.py +4 -4
  36. machineconfig/jobs/installer/custom_dev/brave.py +5 -9
  37. machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
  38. machineconfig/jobs/installer/custom_dev/code.py +4 -1
  39. machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
  40. machineconfig/jobs/installer/custom_dev/nerdfont.py +1 -1
  41. machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +33 -28
  42. machineconfig/jobs/installer/custom_dev/sysabc.py +139 -0
  43. machineconfig/jobs/installer/custom_dev/wezterm.py +2 -19
  44. machineconfig/jobs/installer/custom_dev/winget.py +10 -14
  45. machineconfig/jobs/installer/installer_data.json +1487 -229
  46. machineconfig/jobs/installer/linux_scripts/brave.sh +4 -14
  47. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +5 -17
  48. machineconfig/jobs/installer/linux_scripts/docker.sh +5 -17
  49. machineconfig/jobs/installer/linux_scripts/docker_start.sh +6 -14
  50. machineconfig/jobs/installer/linux_scripts/edge.sh +3 -11
  51. machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
  52. machineconfig/jobs/installer/linux_scripts/nerdfont.sh +5 -17
  53. machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
  54. machineconfig/jobs/installer/linux_scripts/q.sh +10 -6
  55. machineconfig/jobs/installer/linux_scripts/redis.sh +6 -17
  56. machineconfig/jobs/installer/linux_scripts/vscode.sh +5 -17
  57. machineconfig/jobs/installer/linux_scripts/wezterm.sh +4 -12
  58. machineconfig/jobs/installer/package_groups.py +106 -177
  59. machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
  60. machineconfig/logger.py +0 -1
  61. machineconfig/profile/backup.toml +49 -0
  62. machineconfig/profile/bash_shell_profiles.md +11 -0
  63. machineconfig/profile/create_helper.py +62 -0
  64. machineconfig/profile/create_links.py +288 -0
  65. machineconfig/profile/create_links_export.py +100 -0
  66. machineconfig/profile/create_shell_profile.py +147 -0
  67. machineconfig/profile/mapper.toml +263 -0
  68. machineconfig/scripts/__init__.py +0 -4
  69. machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
  70. machineconfig/scripts/linux/wrap_mcfg +46 -0
  71. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  72. machineconfig/scripts/python/agents.py +123 -117
  73. machineconfig/scripts/python/ai/initai.py +3 -28
  74. machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
  75. machineconfig/scripts/python/ai/scripts/command_runner.sh +9 -0
  76. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +17 -18
  77. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +17 -18
  78. machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
  79. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
  80. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
  81. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
  82. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +5 -5
  83. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +5 -1
  84. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
  85. machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
  86. machineconfig/scripts/python/ai/solutions/generic.py +28 -5
  87. machineconfig/scripts/python/ai/utils/generate_files.py +348 -0
  88. machineconfig/scripts/python/ai/utils/vscode_tasks.py +37 -0
  89. machineconfig/scripts/python/cloud.py +29 -0
  90. machineconfig/scripts/python/croshell.py +137 -113
  91. machineconfig/scripts/python/devops.py +61 -101
  92. machineconfig/scripts/python/devops_navigator.py +6 -0
  93. machineconfig/scripts/python/env_manager/__init__.py +1 -0
  94. machineconfig/scripts/python/env_manager/env_manager_tui.py +204 -0
  95. machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
  96. machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
  97. machineconfig/scripts/python/fire_jobs.py +110 -150
  98. machineconfig/scripts/python/ftpx.py +51 -24
  99. machineconfig/scripts/python/helpers/ast_search.py +74 -0
  100. machineconfig/scripts/python/helpers/qr_code.py +166 -0
  101. machineconfig/scripts/python/helpers/repo_rag.py +325 -0
  102. machineconfig/scripts/python/helpers/run_py_script.py +79 -0
  103. machineconfig/scripts/python/helpers/symantic_search.py +25 -0
  104. machineconfig/scripts/python/helpers/tmp_py_scripts/a.py +26 -0
  105. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
  106. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
  107. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
  108. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
  109. machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  110. machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +126 -0
  111. machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +41 -0
  112. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +10 -0
  113. machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
  114. machineconfig/scripts/python/helpers_agents/templates/template.sh +32 -0
  115. machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +30 -23
  116. machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +29 -35
  117. machineconfig/scripts/python/{cloud_sync.py → helpers_cloud/cloud_sync.py} +12 -18
  118. machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +1 -1
  119. machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
  120. machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +8 -9
  121. machineconfig/scripts/python/helpers_devops/cli_config.py +105 -0
  122. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
  123. machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
  124. machineconfig/scripts/python/helpers_devops/cli_nw.py +214 -0
  125. machineconfig/scripts/python/helpers_devops/cli_repos.py +215 -0
  126. machineconfig/scripts/python/helpers_devops/cli_self.py +172 -0
  127. machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
  128. machineconfig/scripts/python/helpers_devops/cli_share_server.py +142 -0
  129. machineconfig/scripts/python/{share_terminal.py → helpers_devops/cli_share_terminal.py} +45 -35
  130. machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
  131. machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
  132. machineconfig/scripts/python/helpers_devops/devops_status.py +499 -0
  133. machineconfig/scripts/python/{devops_update_repos.py → helpers_devops/devops_update_repos.py} +68 -49
  134. machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
  135. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
  136. machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +3 -3
  137. machineconfig/scripts/python/helpers_fire_command/__init__.py +0 -0
  138. machineconfig/scripts/python/helpers_fire_command/f.py +0 -0
  139. machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +56 -20
  140. machineconfig/scripts/python/{fire_jobs_args_helper.py → helpers_fire_command/fire_jobs_args_helper.py} +5 -1
  141. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +121 -0
  142. machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  143. machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
  144. machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +3 -3
  145. machineconfig/scripts/python/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
  146. machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
  147. machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
  148. machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
  149. machineconfig/scripts/python/helpers_navigator/command_tree.py +620 -0
  150. machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
  151. machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
  152. machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
  153. machineconfig/scripts/python/helpers_network/__init__.py +0 -0
  154. machineconfig/scripts/python/helpers_network/address.py +132 -0
  155. machineconfig/scripts/python/{devops_add_identity.py → helpers_network/devops_add_identity.py} +0 -2
  156. machineconfig/scripts/python/helpers_network/devops_add_ssh_key.py +153 -0
  157. machineconfig/scripts/{linux → python/helpers_network}/mount_nfs +0 -1
  158. machineconfig/scripts/python/{mount_nfs.py → helpers_network/mount_nfs.py} +3 -3
  159. machineconfig/scripts/{linux → python/helpers_network}/mount_nw_drive +1 -2
  160. machineconfig/scripts/python/{mount_ssh.py → helpers_network/mount_ssh.py} +3 -3
  161. machineconfig/scripts/python/{onetimeshare.py → helpers_network/onetimeshare.py} +0 -1
  162. machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +391 -0
  163. machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +338 -0
  164. machineconfig/scripts/python/{wifi_conn.py → helpers_network/wifi_conn.py} +1 -53
  165. machineconfig/scripts/python/{wsl_windows_transfer.py → helpers_network/wsl_windows_transfer.py} +5 -4
  166. machineconfig/scripts/python/helpers_repos/action.py +209 -0
  167. machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
  168. machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +2 -3
  169. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
  170. machineconfig/scripts/python/{repos_helper.py → helpers_repos/entrypoint.py} +9 -17
  171. machineconfig/scripts/python/helpers_repos/grource.py +340 -0
  172. machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +4 -3
  173. machineconfig/scripts/python/helpers_repos/repo_analyzer_1.py +160 -0
  174. machineconfig/scripts/python/{count_lines.py → helpers_repos/repo_analyzer_2.py} +113 -192
  175. machineconfig/scripts/python/helpers_repos/sync.py +66 -0
  176. machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
  177. machineconfig/scripts/python/helpers_sessions/__init__.py +0 -0
  178. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +65 -0
  179. machineconfig/scripts/python/helpers_utils/download.py +150 -0
  180. machineconfig/scripts/python/helpers_utils/path.py +185 -0
  181. machineconfig/scripts/python/interactive.py +64 -84
  182. machineconfig/scripts/python/mcfg_entry.py +58 -0
  183. machineconfig/scripts/python/msearch.py +71 -0
  184. machineconfig/scripts/python/sessions.py +119 -45
  185. machineconfig/scripts/python/terminal.py +133 -0
  186. machineconfig/scripts/python/utils.py +64 -0
  187. machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -0
  188. machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
  189. machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
  190. machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
  191. machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
  192. machineconfig/settings/broot/br.sh +0 -4
  193. machineconfig/settings/broot/conf.toml +1 -1
  194. machineconfig/settings/helix/config.toml +16 -0
  195. machineconfig/settings/helix/languages.toml +13 -4
  196. machineconfig/settings/helix/yazi-picker.sh +12 -0
  197. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  198. machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
  199. machineconfig/settings/lf/linux/lfrc +10 -12
  200. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  201. machineconfig/settings/lf/windows/lfrc +18 -38
  202. machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
  203. machineconfig/settings/linters/.ruff.toml +1 -1
  204. machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
  205. machineconfig/settings/marimo/marimo.toml +80 -0
  206. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  207. machineconfig/settings/pistol/pistol.conf +1 -1
  208. machineconfig/settings/shells/bash/init.sh +82 -31
  209. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
  210. machineconfig/settings/shells/nushell/config.nu +2 -35
  211. machineconfig/settings/shells/nushell/env.nu +45 -6
  212. machineconfig/settings/shells/nushell/init.nu +314 -0
  213. machineconfig/settings/shells/pwsh/init.ps1 +61 -43
  214. machineconfig/settings/shells/starship/starship.toml +16 -0
  215. machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
  216. machineconfig/settings/shells/wt/settings.json +32 -17
  217. machineconfig/settings/shells/zsh/init.sh +89 -0
  218. machineconfig/settings/svim/linux/init.toml +0 -4
  219. machineconfig/settings/svim/windows/init.toml +0 -3
  220. machineconfig/settings/television/cable_unix/alias.toml +8 -0
  221. machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
  222. machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
  223. machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
  224. machineconfig/settings/television/cable_unix/channels.toml +19 -0
  225. machineconfig/settings/television/cable_unix/dirs.toml +13 -0
  226. machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
  227. machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
  228. machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
  229. machineconfig/settings/television/cable_unix/env.toml +17 -0
  230. machineconfig/settings/television/cable_unix/files.toml +11 -0
  231. machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
  232. machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
  233. machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
  234. machineconfig/settings/television/cable_unix/git-log.toml +12 -0
  235. machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
  236. machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
  237. machineconfig/settings/television/cable_unix/guix.toml +20 -0
  238. machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
  239. machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
  240. machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
  241. machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
  242. machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
  243. machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
  244. machineconfig/settings/television/cable_unix/procs.toml +20 -0
  245. machineconfig/settings/television/cable_unix/text.toml +17 -0
  246. machineconfig/settings/television/cable_unix/tldr.toml +18 -0
  247. machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
  248. machineconfig/settings/television/cable_windows/alias.toml +7 -0
  249. machineconfig/settings/television/cable_windows/dirs.toml +13 -0
  250. machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
  251. machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
  252. machineconfig/settings/television/cable_windows/env.toml +17 -0
  253. machineconfig/settings/television/cable_windows/files.toml +14 -0
  254. machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
  255. machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
  256. machineconfig/settings/television/cable_windows/git-log.toml +11 -0
  257. machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
  258. machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
  259. machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
  260. machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
  261. machineconfig/settings/television/cable_windows/text.toml +17 -0
  262. machineconfig/settings/yazi/init.lua +61 -0
  263. machineconfig/settings/yazi/keymap_linux.toml +94 -0
  264. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  265. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  266. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  267. machineconfig/settings/yazi/theme.toml +4 -0
  268. machineconfig/settings/yazi/yazi_linux.toml +84 -0
  269. machineconfig/settings/yazi/yazi_windows.toml +58 -0
  270. machineconfig/setup_linux/__init__.py +11 -0
  271. machineconfig/setup_linux/apps_desktop.sh +89 -0
  272. machineconfig/setup_linux/apps_gui.sh +64 -0
  273. machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
  274. machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
  275. machineconfig/setup_linux/uv.sh +15 -0
  276. machineconfig/setup_linux/web_shortcuts/interactive.sh +26 -6
  277. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +31 -0
  278. machineconfig/setup_mac/__init__.py +16 -0
  279. machineconfig/setup_mac/apps_gui.sh +248 -0
  280. machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
  281. machineconfig/setup_mac/uv.sh +36 -0
  282. machineconfig/setup_windows/__init__.py +11 -0
  283. machineconfig/setup_windows/others/power_options.ps1 +7 -0
  284. machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
  285. machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
  286. machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
  287. machineconfig/setup_windows/uv.ps1 +17 -0
  288. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +27 -10
  289. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +30 -0
  290. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  291. machineconfig/utils/accessories.py +7 -5
  292. machineconfig/utils/cloud/onedrive/README.md +139 -0
  293. machineconfig/utils/code.py +155 -105
  294. machineconfig/utils/files/art/fat_croco.txt +10 -0
  295. machineconfig/utils/files/art/halfwit_croco.txt +9 -0
  296. machineconfig/utils/files/art/happy_croco.txt +22 -0
  297. machineconfig/utils/files/art/water_croco.txt +11 -0
  298. machineconfig/utils/files/ascii_art.py +1 -1
  299. machineconfig/utils/files/dbms.py +257 -0
  300. machineconfig/utils/files/headers.py +11 -14
  301. machineconfig/utils/files/ouch/__init__.py +0 -0
  302. machineconfig/utils/files/ouch/decompress.py +45 -0
  303. machineconfig/utils/files/read.py +10 -18
  304. machineconfig/utils/installer_utils/github_release_bulk.py +156 -119
  305. machineconfig/utils/installer_utils/install_from_url.py +183 -0
  306. machineconfig/utils/installer_utils/installer_class.py +64 -181
  307. machineconfig/utils/installer_utils/installer_cli.py +175 -0
  308. machineconfig/utils/installer_utils/installer_helper.py +129 -0
  309. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +66 -97
  310. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +49 -82
  311. machineconfig/utils/io.py +77 -23
  312. machineconfig/utils/links.py +254 -162
  313. machineconfig/utils/meta.py +256 -0
  314. machineconfig/utils/notifications.py +1 -1
  315. machineconfig/utils/options.py +46 -18
  316. machineconfig/utils/options_tv.py +119 -0
  317. machineconfig/utils/path_extended.py +48 -101
  318. machineconfig/utils/path_helper.py +76 -23
  319. machineconfig/utils/procs.py +50 -70
  320. machineconfig/utils/scheduler.py +88 -124
  321. machineconfig/utils/scheduling.py +0 -3
  322. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  323. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  324. machineconfig/utils/source_of_truth.py +3 -6
  325. machineconfig/utils/ssh.py +263 -274
  326. machineconfig/utils/ssh_utils/abc.py +5 -0
  327. machineconfig/utils/ssh_utils/copy_from_here.py +111 -0
  328. machineconfig/utils/ssh_utils/copy_to_here.py +302 -0
  329. machineconfig/utils/ssh_utils/utils.py +142 -0
  330. machineconfig/utils/ssh_utils/wsl.py +210 -0
  331. machineconfig/utils/terminal.py +3 -113
  332. machineconfig/utils/tst.py +20 -0
  333. machineconfig/utils/upgrade_packages.py +114 -28
  334. machineconfig/utils/ve.py +12 -4
  335. machineconfig-7.98.dist-info/METADATA +132 -0
  336. machineconfig-7.98.dist-info/RECORD +504 -0
  337. machineconfig-7.98.dist-info/entry_points.txt +13 -0
  338. machineconfig/cluster/sessions_managers/ffile.py +0 -4
  339. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -49
  340. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -85
  341. machineconfig/jobs/linux/msc/cli_agents.sh +0 -16
  342. machineconfig/jobs/python/python_ve_symlink.py +0 -37
  343. machineconfig/jobs/python/vscode/api.py +0 -57
  344. machineconfig/jobs/python/vscode/sync_code.py +0 -73
  345. machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
  346. machineconfig/jobs/windows/start_terminal.ps1 +0 -6
  347. machineconfig/jobs/windows/startup_file.cmd +0 -2
  348. machineconfig/profile/create.py +0 -303
  349. machineconfig/profile/shell.py +0 -176
  350. machineconfig/scripts/cloud/init.sh +0 -119
  351. machineconfig/scripts/linux/agents +0 -2
  352. machineconfig/scripts/linux/choose_wezterm_theme +0 -3
  353. machineconfig/scripts/linux/cloud_copy +0 -2
  354. machineconfig/scripts/linux/cloud_mount +0 -2
  355. machineconfig/scripts/linux/cloud_repo_sync +0 -2
  356. machineconfig/scripts/linux/cloud_sync +0 -2
  357. machineconfig/scripts/linux/croshell +0 -3
  358. machineconfig/scripts/linux/devops +0 -2
  359. machineconfig/scripts/linux/fire +0 -2
  360. machineconfig/scripts/linux/ftpx +0 -2
  361. machineconfig/scripts/linux/fzf2g +0 -21
  362. machineconfig/scripts/linux/fzfag +0 -17
  363. machineconfig/scripts/linux/fzffg +0 -25
  364. machineconfig/scripts/linux/fzfrga +0 -21
  365. machineconfig/scripts/linux/gh_models +0 -2
  366. machineconfig/scripts/linux/initai +0 -2
  367. machineconfig/scripts/linux/kill_process +0 -2
  368. machineconfig/scripts/linux/scheduler +0 -2
  369. machineconfig/scripts/linux/sessions +0 -2
  370. machineconfig/scripts/linux/share_smb +0 -1
  371. machineconfig/scripts/linux/skrg +0 -4
  372. machineconfig/scripts/linux/start_slidev +0 -2
  373. machineconfig/scripts/linux/start_terminals +0 -3
  374. machineconfig/scripts/linux/warp-cli.sh +0 -122
  375. machineconfig/scripts/linux/wifi_conn +0 -2
  376. machineconfig/scripts/linux/z_ls +0 -104
  377. machineconfig/scripts/python/ai/generate_files.py +0 -83
  378. machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
  379. machineconfig/scripts/python/cloud_repo_sync.py +0 -190
  380. machineconfig/scripts/python/count_lines_frontend.py +0 -16
  381. machineconfig/scripts/python/devops_add_ssh_key.py +0 -120
  382. machineconfig/scripts/python/dotfile.py +0 -78
  383. machineconfig/scripts/python/fire_agents_help_launch.py +0 -120
  384. machineconfig/scripts/python/fire_agents_helper_types.py +0 -12
  385. machineconfig/scripts/python/fire_jobs_route_helper.py +0 -65
  386. machineconfig/scripts/python/get_zellij_cmd.py +0 -15
  387. machineconfig/scripts/python/gh_models.py +0 -104
  388. machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -116
  389. machineconfig/scripts/python/repos.py +0 -132
  390. machineconfig/scripts/python/repos_helper_action.py +0 -378
  391. machineconfig/scripts/python/snapshot.py +0 -25
  392. machineconfig/scripts/python/start_terminals.py +0 -121
  393. machineconfig/scripts/python/t4.py +0 -17
  394. machineconfig/scripts/windows/agents.ps1 +0 -1
  395. machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
  396. machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
  397. machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
  398. machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
  399. machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
  400. machineconfig/scripts/windows/croshell.ps1 +0 -1
  401. machineconfig/scripts/windows/devops.ps1 +0 -1
  402. machineconfig/scripts/windows/dotfile.ps1 +0 -1
  403. machineconfig/scripts/windows/fire.ps1 +0 -1
  404. machineconfig/scripts/windows/ftpx.ps1 +0 -1
  405. machineconfig/scripts/windows/fzfb.ps1 +0 -3
  406. machineconfig/scripts/windows/fzfg.ps1 +0 -2
  407. machineconfig/scripts/windows/fzfrga.bat +0 -20
  408. machineconfig/scripts/windows/gpt.ps1 +0 -1
  409. machineconfig/scripts/windows/grep.ps1 +0 -2
  410. machineconfig/scripts/windows/initai.ps1 +0 -1
  411. machineconfig/scripts/windows/kill_process.ps1 +0 -1
  412. machineconfig/scripts/windows/nano.ps1 +0 -3
  413. machineconfig/scripts/windows/pomodoro.ps1 +0 -1
  414. machineconfig/scripts/windows/reload_path.ps1 +0 -3
  415. machineconfig/scripts/windows/scheduler.ps1 +0 -1
  416. machineconfig/scripts/windows/sessions.ps1 +0 -1
  417. machineconfig/scripts/windows/snapshot.ps1 +0 -1
  418. machineconfig/scripts/windows/start_slidev.ps1 +0 -1
  419. machineconfig/scripts/windows/start_terminals.ps1 +0 -1
  420. machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
  421. machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
  422. machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
  423. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  424. machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
  425. machineconfig/settings/lf/windows/tst.ps1 +0 -1
  426. machineconfig/settings/yazi/yazi.toml +0 -4
  427. machineconfig/setup_linux/nix/cli_installation.sh +0 -157
  428. machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
  429. machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
  430. machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
  431. machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
  432. machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
  433. machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
  434. machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
  435. machineconfig/utils/ai/generate_file_checklist.py +0 -68
  436. machineconfig/utils/installer_utils/installer.py +0 -189
  437. machineconfig-5.15.dist-info/METADATA +0 -188
  438. machineconfig-5.15.dist-info/RECORD +0 -415
  439. machineconfig-5.15.dist-info/entry_points.txt +0 -18
  440. machineconfig/cluster/sessions_managers/{utils → helpers}/load_balancer_helper.py +0 -0
  441. machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
  442. machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
  443. machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
  444. machineconfig/{jobs/python → scripts/python/ai/utils}/__init__.py +0 -0
  445. machineconfig/scripts/python/{helpers → helpers_agents}/__init__.py +0 -0
  446. machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_agents/agentic_frameworks/__init__.py} +0 -0
  447. machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
  448. machineconfig/scripts/python/{fire_agents_load_balancer.py → helpers_agents/fire_agents_load_balancer.py} +0 -0
  449. machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_cloud/__init__.py} +0 -0
  450. machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
  451. /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
  452. /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_croshell/__init__.py} +0 -0
  453. /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
  454. /machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -0
  455. /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
  456. /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
  457. /machineconfig/scripts/{windows/share_nfs.ps1 → python/helpers_devops/__init__.py} +0 -0
  458. /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers_devops/themes/__init__.py} +0 -0
  459. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
  460. /machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -0
  461. /machineconfig/scripts/{linux → python/helpers_network}/mount_drive +0 -0
  462. /machineconfig/scripts/python/{mount_nw_drive.py → helpers_network/mount_nw_drive.py} +0 -0
  463. /machineconfig/scripts/{linux → python/helpers_network}/mount_smb +0 -0
  464. /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
  465. /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
  466. /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
  467. /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
  468. /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
  469. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
  470. /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
  471. {machineconfig-5.15.dist-info → machineconfig-7.98.dist-info}/WHEEL +0 -0
  472. {machineconfig-5.15.dist-info → machineconfig-7.98.dist-info}/top_level.txt +0 -0
@@ -2,44 +2,33 @@
2
2
 
3
3
  """
4
4
 
5
- from pathlib import Path
6
- from typing import cast, Iterable, Optional, get_args
5
+ from typing import cast, Optional, get_args, Annotated
7
6
  import typer
8
- from machineconfig.scripts.python.fire_agents_helper_types import AGENTS
9
-
10
-
11
- def _write_list_file(target: Path, files: Iterable[Path]) -> None:
12
- target.parent.mkdir(parents=True, exist_ok=True)
13
- target.write_text("\n".join(str(f) for f in files), encoding="utf-8")
7
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AGENTS, HOST, PROVIDER
14
8
 
15
9
 
16
10
  def create(
17
- context_path: Optional[Path] = typer.Option(None, help="Path to the context file"),
18
- keyword_search: Optional[str] = typer.Option(None, help="Keyword to search in Python files"),
19
- filename_pattern: Optional[str] = typer.Option(None, help="Filename pattern to match"),
20
- separator: str = typer.Option("\n", help="Separator for context"),
21
- tasks_per_prompt: int = typer.Option(13, help="Number of tasks per prompt"),
22
- agent: AGENTS = typer.Option(..., help=f"Agent type. One of {', '.join(get_args(AGENTS))}"),
23
- prompt: Optional[str] = typer.Option(None, help="Prompt prefix as string"),
24
- prompt_path: Optional[Path] = typer.Option(None, help="Path to prompt file"),
25
- job_name: str = typer.Option("AI_Agents", help="Job name"),
26
- keep_separate: bool = typer.Option(True, help="Keep prompt material in separate file to the context."),
27
- output_path: Optional[Path] = typer.Option(None, help="Path to write the layout.json file"),
28
- agents_dir: Optional[Path] = typer.Option(None, help="Directory to store agent files. If not provided, will be constructed automatically."),
11
+ agent: Annotated[AGENTS, typer.Option(..., "--agents", "-a", help=f"Agent type. One of {', '.join(get_args(AGENTS)[:3])}")],
12
+ host: Annotated[HOST, typer.Option(..., "--host", "-h", help=f"Machine to run agents on. One of {', '.join(get_args(HOST))}")],
13
+ model: Annotated[str, typer.Option(..., "--model", "-m", help="Model to use (for crush agent).")],
14
+ provider: Annotated[PROVIDER, typer.Option(..., "--provider", "-p", help=f"Provider to use (for crush agent). One of {', '.join(get_args(PROVIDER)[:3])}")],
15
+ context_path: Annotated[Optional[str], typer.Option(..., "--context-path", "-c", help="Path to the context file/folder, defaults to .ai/todo/")] = None,
16
+ separator: Annotated[str, typer.Option(..., "--separator", "-s", help="Separator for context")] = "\n",
17
+ agent_load: Annotated[int, typer.Option(..., "--agent-load", "-al", help="Number of tasks per prompt")] = 13,
18
+ prompt: Annotated[Optional[str], typer.Option(..., "--prompt", "-P", help="Prompt prefix as string")] = None,
19
+ prompt_path: Annotated[Optional[str], typer.Option(..., "--prompt-path", "-pp", help="Path to prompt file")] = None,
20
+ job_name: Annotated[str, typer.Option(..., "--job-name", "-j", help="Job name")] = "AI_Agents",
21
+ separate: Annotated[bool, typer.Option(..., "--separate", "-S", help="Keep prompt material in separate file to the context.")] = True,
22
+ output_path: Annotated[Optional[str], typer.Option(..., "--output-path", "-o", help="Path to write the layout.json file")] = None,
23
+ agents_dir: Annotated[Optional[str], typer.Option(..., "--agents-dir", "-ad", help="Directory to store agent files. If not provided, will be constructed automatically.")] = None,
29
24
  ):
30
25
 
31
- from machineconfig.scripts.python.fire_agents_help_launch import prep_agent_launch, get_agents_launch_layout
32
- from machineconfig.scripts.python.fire_agents_help_search import search_files_by_pattern, search_python_files
33
- from machineconfig.scripts.python.fire_agents_load_balancer import chunk_prompts
26
+ from machineconfig.scripts.python.helpers_agents.fire_agents_help_launch import prep_agent_launch, get_agents_launch_layout
27
+ from machineconfig.scripts.python.helpers_agents.fire_agents_load_balancer import chunk_prompts
34
28
  from machineconfig.utils.accessories import get_repo_root, randstr
35
29
  import json
36
-
30
+ from pathlib import Path
37
31
  # validate mutual exclusive
38
- context_options = [context_path, keyword_search, filename_pattern]
39
- provided_context = [opt for opt in context_options if opt is not None]
40
- if len(provided_context) != 1:
41
- raise typer.BadParameter("Exactly one of --context-path, --keyword-search, --filename-pattern must be provided")
42
-
43
32
  prompt_options = [prompt, prompt_path]
44
33
  provided_prompt = [opt for opt in prompt_options if opt is not None]
45
34
  if len(provided_prompt) != 1:
@@ -49,80 +38,73 @@ def create(
49
38
  if repo_root is None:
50
39
  typer.echo("💥 Could not determine the repository root. Please run this script from within a git repository.")
51
40
  raise typer.Exit(1)
41
+ return
52
42
  typer.echo(f"Operating @ {repo_root}")
53
43
 
54
- search_strategy = ""
55
- prompt_material_path = Path("")
44
+ if context_path is None:
45
+ context_path_resolved = Path(repo_root) / ".ai" / "todo"
46
+ else: context_path_resolved = Path(context_path).expanduser().resolve()
47
+
48
+ if not context_path_resolved.exists():
49
+ raise typer.BadParameter(f"Path does not exist: {context_path_resolved}")
56
50
 
57
- if context_path is not None:
58
- search_strategy = "file_path"
59
- target_file_path = context_path.expanduser().resolve()
60
- if not target_file_path.exists() or not target_file_path.is_file():
61
- raise typer.BadParameter(f"Invalid file path: {target_file_path}")
62
- prompt_material_path = target_file_path
63
- elif keyword_search is not None:
64
- search_strategy = "keyword_search"
65
- matching_files = search_python_files(repo_root, keyword_search)
66
- if not matching_files:
67
- typer.echo(f"💥 No .py files found containing keyword: {keyword_search}")
68
- raise typer.Exit(1)
69
- target_file_path = repo_root / ".ai" / "target_file.txt"
70
- _write_list_file(target_file_path, matching_files)
71
- prompt_material_path = target_file_path
72
- elif filename_pattern is not None:
73
- search_strategy = "filename_pattern"
74
- matching_files = search_files_by_pattern(repo_root, filename_pattern)
75
- if not matching_files:
76
- typer.echo(f"💥 No files found matching pattern: {filename_pattern}")
77
- raise typer.Exit(1)
78
- target_file_path = repo_root / ".ai" / "target_file.txt"
79
- _write_list_file(target_file_path, matching_files)
80
- prompt_material_path = target_file_path
51
+ if context_path_resolved.is_file():
52
+ prompt_material_re_splitted = chunk_prompts(context_path_resolved, tasks_per_prompt=agent_load, joiner=separator)
53
+ elif context_path_resolved.is_dir():
54
+ files = [f for f in context_path_resolved.rglob("*") if f.is_file()]
55
+ if not files:
56
+ raise typer.BadParameter(f"No files found in directory: {context_path_resolved}")
57
+ concatenated = separator.join(f.read_text(encoding="utf-8") for f in files)
58
+ prompt_material_re_splitted = [concatenated]
59
+ else:
60
+ raise typer.BadParameter(f"Path is neither file nor directory: {context_path_resolved}")
81
61
 
82
62
  if prompt_path is not None:
83
- prompt_prefix = prompt_path.read_text(encoding="utf-8")
63
+ prompt_prefix = Path(prompt_path).read_text(encoding="utf-8")
84
64
  else:
85
65
  prompt_prefix = cast(str, prompt)
86
66
  agent_selected = agent
87
- keep_material_in_separate_file_input = keep_separate
88
- prompt_material_re_splitted = chunk_prompts(prompt_material_path, tasks_per_prompt=tasks_per_prompt, joiner=separator)
89
- if agents_dir is None: agents_dir = repo_root / ".ai" / f"tmp_prompts/{job_name}_{randstr()}"
67
+ if agents_dir is None: agents_dir_obj = Path(repo_root) / ".ai" / f"tmp_prompts/{job_name}_{randstr()}"
90
68
  else:
91
69
  import shutil
92
- if agents_dir.exists():
70
+ if Path(agents_dir).exists():
93
71
  shutil.rmtree(agents_dir)
94
- prep_agent_launch(agents_dir=agents_dir, 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)
95
- layoutfile = get_agents_launch_layout(session_root=agents_dir)
72
+ agents_dir_obj = Path(agents_dir)
73
+ prep_agent_launch(repo_root=repo_root, agents_dir=agents_dir_obj, prompts_material=prompt_material_re_splitted,
74
+ keep_material_in_separate_file=separate,
75
+ prompt_prefix=prompt_prefix, machine=host, agent=agent_selected, model=model, provider=provider,
76
+ job_name=job_name)
77
+ layoutfile = get_agents_launch_layout(session_root=agents_dir_obj)
96
78
  regenerate_py_code = f"""
97
- #!/usr/bin/env uv run --python 3.13 --with machineconfig
98
- #!/usr/bin/env uv run --no-dev --project $HOME/code/machineconfig
99
- fire_agents create --context-path "{prompt_material_path}" \\
100
- --{search_strategy} "{context_path or keyword_search or filename_pattern}" \\
79
+ #!/usr/bin/env uv run --python 3.14 --with machineconfig
80
+ agents create "{context_path_resolved}" \\
101
81
  --prompt-path "{prompt_path or ''}" \\
102
82
  --agent "{agent_selected}" \\
83
+ --host "{host}" \\
103
84
  --job-name "{job_name}" \\
104
- --tasks-per-prompt {tasks_per_prompt} \\
85
+ --agent_load {agent_load} \\
105
86
  --separator "{separator}" \\
106
- {"--keep-separate" if keep_material_in_separate_file_input else ""}
87
+ {"--separate" if separate else ""}
107
88
  """
108
- (agents_dir / "aa_agents_relaunch.py").write_text(data=regenerate_py_code, encoding="utf-8")
109
- layout_output_path = output_path if output_path is not None else agents_dir / "layout.json"
89
+ (agents_dir_obj / "aa_agents_relaunch.sh").write_text(data=regenerate_py_code, encoding="utf-8")
90
+ layout_output_path = Path(output_path) if output_path is not None else agents_dir_obj / "layout.json"
110
91
  layout_output_path.parent.mkdir(parents=True, exist_ok=True)
111
92
  layout_output_path.write_text(data=json.dumps(layoutfile, indent=4), encoding="utf-8")
112
- typer.echo(f"Created agents in {agents_dir}")
93
+ typer.echo(f"Created agents in {agents_dir_obj}")
113
94
  typer.echo(f"Ceated layout in {layout_output_path}")
114
95
 
115
96
 
116
97
  def collect(
117
- agent_dir: Path = typer.Argument(..., help="Path to the agent directory containing the prompts folder"),
118
- output_path: Path = typer.Argument(..., help="Path to write the concatenated material files"),
119
- separator: str = typer.Option("\n", help="Separator to use when concatenating material files"),
98
+ agent_dir: Annotated[str, typer.Argument(..., help="Path to the agent directory containing the prompts folder")],
99
+ output_path: Annotated[str, typer.Argument(..., help="Path to write the concatenated material files")],
100
+ separator: Annotated[str, typer.Option(..., help="Separator to use when concatenating material files")] = "\n",
120
101
  ) -> None:
121
102
  """Collect all material files from an agent directory and concatenate them."""
122
- if not agent_dir.exists() or not agent_dir.is_dir():
103
+ from pathlib import Path
104
+ if not Path(agent_dir).exists() or not Path(agent_dir).is_dir():
123
105
  raise typer.BadParameter(f"Agent directory does not exist or is not a directory: {agent_dir}")
124
106
 
125
- prompts_dir = agent_dir / "prompts"
107
+ prompts_dir = Path(agent_dir) / "prompts"
126
108
  if not prompts_dir.exists():
127
109
  raise typer.BadParameter(f"Prompts directory not found: {prompts_dir}")
128
110
 
@@ -149,36 +131,20 @@ def collect(
149
131
  result = separator.join(concatenated_content)
150
132
 
151
133
  # Write to output file
152
- output_path.parent.mkdir(parents=True, exist_ok=True)
153
- output_path.write_text(result, encoding="utf-8")
134
+ Path(output_path).parent.mkdir(parents=True, exist_ok=True)
135
+ Path(output_path).write_text(result, encoding="utf-8")
154
136
  typer.echo(f"Concatenated material written to {output_path}")
155
137
 
156
138
 
157
- def template():
158
- template_bash = """#!/bin/bash
159
- JOB_NAME="outpatient_mapping"
160
- REPO_ROOT="$HOME/code/work/winter_planning/"
161
- CONTEXT_PATH="$REPO_ROOT/data/outpatient_mapping/op_services_collected.csv"
162
- PROMPT_PATH="$REPO_ROOT/data/outpatient_mapping/prompt"
163
-
164
- AGENTS_DIR="$REPO_ROOT/.ai/agents/$JOB_NAME"
165
- LAYOUT_PATH="$REPO_ROOT/.ai/agents/$JOB_NAME/layout_unbalanced.json"
166
- LAYOUT_BALANCED_PATH="$REPO_ROOT/.ai/agents/$JOB_NAME/layout_balanced.json"
167
-
168
- agents create --context-path $CONTEXT_PATH --tasks-per-prompt 10 --agent crush --prompt-path $PROMPT_PATH --keep-separate --output-path $LAYOUT_PATH --agents-dir $AGENTS_DIR
169
- sessions balance-load $LAYOUT_PATH --max-thresh 6 --breaking-method moreLayouts --thresh-type number --output-path $LAYOUT_BALANCED_PATH
170
-
171
- sessions run $LAYOUT_BALANCED_PATH --kill-upon-completion
172
- agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"
173
- """
174
- template_powershell = """
175
-
176
- """
139
+ def make_agents_command_template():
177
140
  from platform import system
178
- if system() == "Linux":
179
- template = template_bash
141
+ import machineconfig.scripts.python.helpers_agents as module
142
+ from pathlib import Path
143
+
144
+ if system() == "Linux" or system() == "Darwin":
145
+ template_path = Path(module.__file__).parent / "templates/template.sh"
180
146
  elif system() == "Windows":
181
- template = template_powershell
147
+ template_path = Path(module.__file__).parent / "templates/template.ps1"
182
148
  else:
183
149
  raise typer.BadParameter(f"Unsupported OS: {system()}")
184
150
 
@@ -187,22 +153,62 @@ agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"
187
153
  if repo_root is None:
188
154
  typer.echo("💥 Could not determine the repository root. Please run this script from within a git repository.")
189
155
  raise typer.Exit(1)
190
- save_path = repo_root / ".ai" / "agents" / "template_fire_agents.sh"
191
- save_path.parent.mkdir(parents=True, exist_ok=True)
192
- save_path.write_text(template, encoding="utf-8")
193
- typer.echo(f"Template bash script written to {save_path}")
194
-
195
-
196
- def main_from_parser():
197
- import sys
198
- agents_app = typer.Typer(help="🤖 AI Agents management subcommands")
199
- agents_app.command("create")(create)
200
- agents_app.command("collect")(collect)
201
- agents_app.command("template")(template)
202
- if len(sys.argv) == 1:
203
- agents_app(["--help"])
204
- else:
205
- agents_app()
156
+
157
+ save_path_root = repo_root / ".ai" / "agents"
158
+
159
+ save_path_root.mkdir(parents=True, exist_ok=True)
160
+ save_path_root.joinpath("template_fire_agents.sh").write_text(template_path.read_text(encoding="utf-8"), encoding="utf-8")
161
+ typer.echo(f"Template bash script written to {save_path_root}")
162
+
163
+ from machineconfig.scripts.python.ai.utils.generate_files import make_todo_files
164
+ make_todo_files(
165
+ pattern=".py", repo=str(repo_root), strategy="name", output_path=str(save_path_root / "files.md"), split_every=None, split_to=None
166
+ )
167
+
168
+ prompt_path = Path(module.__file__).parent / "templates/prompt.txt"
169
+ save_path_root.joinpath("prompt.txt").write_text(prompt_path.read_text(encoding="utf-8"), encoding="utf-8")
170
+ typer.echo(f"Prompt template written to {save_path_root}")
171
+
172
+
173
+ def init_config():
174
+ from machineconfig.scripts.python.ai.initai import add_ai_configs
175
+ from pathlib import Path
176
+ add_ai_configs(repo_root=Path.cwd())
177
+
178
+
179
+ def get_app():
180
+ agents_app = typer.Typer(help="🤖 AI Agents management subcommands", no_args_is_help=True, add_help_option=False, add_completion=False)
181
+ sep = "\n"
182
+ agents_full_help = f"""
183
+ [c] Create agents layout file, ready to run.
184
+ {sep}
185
+ PROVIDER options: {', '.join(get_args(PROVIDER))}
186
+ {sep}
187
+ AGENT options: {', '.join(get_args(AGENTS))}
188
+ """
189
+ agents_app.command("create", no_args_is_help=True, help=agents_full_help)(create)
190
+ agents_app.command("c", no_args_is_help=True, help="Create agents layout file, ready to run.", hidden=True)(create)
191
+ agents_app.command("collect", no_args_is_help=True, help="[T] Collect all agent materials into a single file.")(collect)
192
+ agents_app.command("T", no_args_is_help=True, help="Collect all agent materials into a single file.", hidden=True)(collect)
193
+ agents_app.command("make-template", no_args_is_help=False, help="[t] Create a template for fire agents")(make_agents_command_template)
194
+ agents_app.command("t", no_args_is_help=False, help="Create a template for fire agents", hidden=True)(make_agents_command_template)
195
+ agents_app.command("make-config", no_args_is_help=False, help="[g] Initialize AI configurations in the current repository")(init_config)
196
+ agents_app.command("g", no_args_is_help=False, help="Initialize AI configurations in the current repository", hidden=True)(init_config)
197
+ from machineconfig.scripts.python.ai.utils.generate_files import make_todo_files
198
+ agents_app.command("make-todo", no_args_is_help=True, help="[d] Generate a markdown file listing all Python files in the repo")(make_todo_files)
199
+ agents_app.command("d", no_args_is_help=True, help="Generate a markdown file listing all Python files in the repo", hidden=True)(make_todo_files)
200
+ from machineconfig.scripts.python.ai.utils.generate_files import create_symlink_command
201
+ agents_app.command(name="make-symlinks", no_args_is_help=True, help="[s] Create symlinks to the current repo in ~/code_copies/")(create_symlink_command)
202
+ agents_app.command(name="s", no_args_is_help=True, help="Create symlinks to the current repo in ~/code_copies/", hidden=True)(create_symlink_command)
203
+ return agents_app
204
+
205
+
206
+ def main():
207
+ agents_app = get_app()
208
+ # from trogon.typer import init_tui
209
+ # agents_app_tui = init_tui(agents_app)
210
+ agents_app()
211
+ # agents_app_tui()
206
212
 
207
213
 
208
214
  if __name__ == "__main__": # pragma: no cover
@@ -7,6 +7,7 @@ from machineconfig.scripts.python.ai.solutions.copilot import github_copilot
7
7
  from machineconfig.scripts.python.ai.solutions.crush import crush
8
8
  from machineconfig.scripts.python.ai.solutions.cursor import cursors
9
9
  from machineconfig.scripts.python.ai.solutions.gemini import gemini
10
+ from machineconfig.scripts.python.ai.utils.vscode_tasks import add_lint_and_type_check_task
10
11
  from machineconfig.utils.accessories import get_repo_root
11
12
 
12
13
 
@@ -14,25 +15,6 @@ def add_ai_configs(repo_root: Path) -> None:
14
15
  repo_root_resolved = get_repo_root(repo_root)
15
16
  if repo_root_resolved is not None:
16
17
  repo_root = repo_root_resolved # this means you can run the command from any subdirectory of the repo.
17
-
18
- if repo_root.joinpath("pyproject.toml").exists() is False:
19
- uv_init = input(f"{repo_root} does not seem to be a python project (no pyproject.toml found), would you like to initialize one? (y/n) ")
20
- if uv_init.strip().lower() == "y":
21
- command_to_run = """
22
- uv init --python 3.13
23
- uv venv
24
- uv add --upgrade-package pylint pyright mypy pyrefly ty --dev # linters and type checkers
25
- uv add --upgrade-package pytest --dev
26
- # uv add typer --dev
27
-
28
- """
29
- import subprocess
30
-
31
- subprocess.run(command_to_run, shell=True, check=True)
32
- else:
33
- print("Terminating initai ...")
34
- return
35
-
36
18
  dot_ai_dir = repo_root.joinpath(".ai")
37
19
  dot_ai_dir.mkdir(parents=True, exist_ok=True)
38
20
  dot_scripts_dir = repo_root.joinpath(".scripts")
@@ -40,6 +22,8 @@ uv add --upgrade-package pytest --dev
40
22
  generic.create_dot_scripts(repo_root=repo_root)
41
23
  generic.adjust_gitignore(repo_root=repo_root)
42
24
 
25
+ add_lint_and_type_check_task(repo_root=repo_root)
26
+
43
27
  github_copilot.build_configuration(repo_root=repo_root)
44
28
  cursors.build_configuration(repo_root=repo_root)
45
29
  gemini.build_configuration(repo_root=repo_root)
@@ -47,12 +31,3 @@ uv add --upgrade-package pytest --dev
47
31
  crush.build_configuration(repo_root=repo_root)
48
32
  cline.build_configuration(repo_root=repo_root)
49
33
 
50
-
51
-
52
- def main() -> None:
53
- repo_root = Path.cwd()
54
- add_ai_configs(repo_root=repo_root)
55
-
56
-
57
- if __name__ == "__main__":
58
- add_ai_configs(repo_root=Path.cwd())
@@ -0,0 +1,33 @@
1
+ $TerminalOutputDirectory = "/.ai/terminal/debug"
2
+ $TerminalOutputPathRaw = Join-Path $TerminalOutputDirectory "terminal_output_raw.txt"
3
+ $TerminalOutputPath = Join-Path $TerminalOutputDirectory "terminal_output.txt"
4
+
5
+ # Ensure the output directory exists before writing files.
6
+ New-Item -ItemType Directory -Path $TerminalOutputDirectory -Force | Out-Null
7
+
8
+ Set-Content -Path $TerminalOutputPath -Value $null
9
+ Add-Content -Path $TerminalOutputPath -Value "New run is underway. If you are reading this message, it means the execution has not finished yet, and you will need to wait. Once done you won't see this message and you will see terminal output instead."
10
+ Write-Host "Starting new uv run..."
11
+
12
+ $processInfo = New-Object System.Diagnostics.ProcessStartInfo
13
+ $processInfo.FileName = "uv"
14
+ $processInfo.ArgumentList.Add("run")
15
+ $processInfo.ArgumentList.Add("/home/alex/code/bytesense/exchanges/src/exchanges/cli/cli_binance.py")
16
+ $processInfo.ArgumentList.Add("b")
17
+ $processInfo.UseShellExecute = $false
18
+ $processInfo.RedirectStandardOutput = $true
19
+ $processInfo.RedirectStandardError = $true
20
+ $processInfo.EnvironmentVariables["COLUMNS"] = "200"
21
+
22
+ $process = New-Object System.Diagnostics.Process
23
+ $process.StartInfo = $processInfo
24
+ $process.Start() | Out-Null
25
+ $standardOutput = $process.StandardOutput.ReadToEnd()
26
+ $standardError = $process.StandardError.ReadToEnd()
27
+ $process.WaitForExit()
28
+
29
+ $rawOutput = $standardOutput + $standardError
30
+ Set-Content -Path $TerminalOutputPathRaw -Value $rawOutput
31
+
32
+ $cleanOutput = $rawOutput -replace "`e\[[0-9;]*[mK]", ""
33
+ Set-Content -Path $TerminalOutputPath -Value $cleanOutput
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+ TERMINAL_OUTPUT_PATH_RAW="/.ai/terminal/debug/terminal_output_raw.txt"
3
+ TERMINAL_OUTPUT_PATH="/.ai/terminal/debug/terminal_output.txt"
4
+ > $TERMINAL_OUTPUT_PATH
5
+ echo "New run is underway. If you are reading this message, it means the execution has not finished yet, and you will need to wait. Once done you won't see this message and you will see terminal output instead." >> $TERMINAL_OUTPUT_PATH
6
+ echo "Starting new uv run..."
7
+ COLUMNS=200 unbuffer uv run /home/alex/code/bytesense/exchanges/src/exchanges/cli/cli_binance.py b > $TERMINAL_OUTPUT_PATH_RAW 2>&1
8
+ cat $TERMINAL_OUTPUT_PATH_RAW | sed -r "s/\x1B\[[0-9;]*[mK]//g" > $TERMINAL_OUTPUT_PATH
9
+ # watchexec --watch ./.ai/terminal/command_runner.sh --watch . -e py -- bash ./.ai/terminal/command_runner.sh
@@ -66,9 +66,8 @@ uv run -m cleanpy .
66
66
  uv run -m ruff clean
67
67
  # uv run -m ruff format .
68
68
  uv run -m ruff check . --fix
69
- uv run --no-dev --project $HOME/code/machineconfig -m machineconfig.scripts.python.ai.generate_files
70
69
 
71
- New-Item -ItemType Directory -Force -Path .linters | Out-Null
70
+ New-Item -ItemType Directory -Force -Path .ai/linters | Out-Null
72
71
 
73
72
  Write-Host "${GREEN}🧹 Code cleanup complete!${NC}"
74
73
  Write-Host
@@ -78,38 +77,38 @@ Draw-Box "🔍 TYPE CHECKERS & LINTERS 🔍" "${BOLD}${PURPLE}"
78
77
  $CURRENT_STEP++
79
78
  Draw-Progress $CURRENT_STEP $TOTAL_STEPS "Pyright Type Checker"
80
79
  Write-Host "${BLUE}📋 Analyzing types with Pyright...${NC}"
81
- Remove-Item ./.linters/pyright_result.md -ErrorAction SilentlyContinue
82
- uv run pyright . | Out-File -FilePath ./.linters/pyright_result.md
83
- Write-Host "${GREEN}✅ Results saved to ${UNDERLINE}./.linters/pyright_result.md${NC}"
80
+ Remove-Item ./.ai/linters/issues_pyright.md -ErrorAction SilentlyContinue
81
+ uv run pyright . | Out-File -FilePath ./.ai/linters/issues_pyright.md
82
+ Write-Host "${GREEN}✅ Results saved to ${UNDERLINE}./.ai/linters/issues_pyright.md${NC}"
84
83
 
85
84
  $CURRENT_STEP++
86
85
  Draw-Progress $CURRENT_STEP $TOTAL_STEPS "MyPy Type Checker"
87
86
  Write-Host "${BLUE}📋 Analyzing types with MyPy...${NC}"
88
- Remove-Item ./.linters/mypy_result.md -ErrorAction SilentlyContinue
89
- uv run mypy . | Out-File -FilePath ./.linters/mypy_result.md
90
- Write-Host "${GREEN}✅ Results saved to ${UNDERLINE}./.linters/mypy_result.md${NC}"
87
+ Remove-Item ./.ai/linters/issues_mypy.md -ErrorAction SilentlyContinue
88
+ uv run mypy . | Out-File -FilePath ./.ai/linters/issues_mypy.md
89
+ Write-Host "${GREEN}✅ Results saved to ${UNDERLINE}./.ai/linters/issues_mypy.md${NC}"
91
90
 
92
91
  $CURRENT_STEP++
93
92
  Draw-Progress $CURRENT_STEP $TOTAL_STEPS "Pylint Code Analysis"
94
93
  Write-Host "${BLUE}📋 Analyzing code quality with Pylint...${NC}"
95
- Remove-Item ./.linters/pylint_result.md -ErrorAction SilentlyContinue
96
- uv run pylint ./src/ | Out-File -FilePath ./.linters/pylint_result.md
97
- Write-Host "${GREEN}✅ Results saved to ${UNDERLINE}./.linters/pylint_result.md${NC}"
94
+ Remove-Item ./.ai/linters/issues_pylint.md -ErrorAction SilentlyContinue
95
+ uv run pylint ./src/ | Out-File -FilePath ./.ai/linters/issues_pylint.md
96
+ Write-Host "${GREEN}✅ Results saved to ${UNDERLINE}./.ai/linters/issues_pylint.md${NC}"
98
97
 
99
98
  $CURRENT_STEP++
100
99
  Draw-Progress $CURRENT_STEP $TOTAL_STEPS "Pyrefly Type Checker"
101
100
  Write-Host "${BLUE}📋 Analyzing types with Pyrefly...${NC}"
102
- Remove-Item ./.linters/pyrefly_result.md -ErrorAction SilentlyContinue
103
- uv run pyrefly check . | Out-File -FilePath ./.linters/pyrefly_result.md
104
- Write-Host "${GREEN}✅ Results saved to ${UNDERLINE}./.linters/pyrefly_result.md${NC}"
101
+ Remove-Item ./.ai/linters/issues_pyrefly.md -ErrorAction SilentlyContinue
102
+ uv run pyrefly check . | Out-File -FilePath ./.ai/linters/issues_pyrefly.md
103
+ Write-Host "${GREEN}✅ Results saved to ${UNDERLINE}./.ai/linters/issues_pyrefly.md${NC}"
105
104
 
106
105
  $CURRENT_STEP++
107
106
  Draw-Progress $CURRENT_STEP $TOTAL_STEPS "Ruff Linter"
108
107
  Write-Host "${BLUE}📋 Checking code style with Ruff...${NC}"
109
- Remove-Item ./.linters/ruff_result.md -ErrorAction SilentlyContinue
110
- uv run ruff check . | Out-File -FilePath ./.linters/ruff_result.md
111
- Write-Host "${GREEN}✅ Results saved to ${UNDERLINE}./.linters/ruff_result.md${NC}"
108
+ Remove-Item ./.ai/linters/issues_ruff.md -ErrorAction SilentlyContinue
109
+ uv run ruff check . | Out-File -FilePath ./.ai/linters/issues_ruff.md
110
+ Write-Host "${GREEN}✅ Results saved to ${UNDERLINE}./.ai/linters/issues_ruff.md${NC}"
112
111
 
113
112
  Write-Host
114
113
  Draw-Box "🎉 ALL CHECKS COMPLETED! 🎉" "${BOLD}${GREEN}"
115
- Write-Host "${BOLD}${GREEN}📁 Check the ${UNDERLINE}.linters${NC}${BOLD}${GREEN} directory for detailed results.${NC}"
114
+ Write-Host "${BOLD}${GREEN}📁 Check the ${UNDERLINE}.ai/linters${NC}${BOLD}${GREEN} directory for detailed results.${NC}"
@@ -70,9 +70,8 @@ uv run -m cleanpy .
70
70
  uv run -m ruff clean
71
71
  # uv run -m ruff format .
72
72
  uv run -m ruff check . --fix
73
- uv run --no-dev --project $HOME/code/machineconfig -m machineconfig.scripts.python.ai.generate_files
74
73
 
75
- mkdir .linters
74
+ mkdir .ai/linters
76
75
 
77
76
  echo -e "${GREEN}🧹 Code cleanup complete!${NC}"
78
77
  echo
@@ -82,38 +81,38 @@ draw_box "🔍 TYPE CHECKERS & LINTERS 🔍" "${BOLD}${PURPLE}"
82
81
  ((CURRENT_STEP++))
83
82
  draw_progress $CURRENT_STEP $TOTAL_STEPS "Pyright Type Checker"
84
83
  echo -e "${BLUE}📋 Analyzing types with Pyright...${NC}"
85
- rm ./.linters/pyright_result.md || true
86
- uv run pyright . > ./.linters/pyright_result.md
87
- echo -e "${GREEN}✅ Results saved to ${UNDERLINE}./.linters/pyright_result.md${NC}"
84
+ rm ./.ai/linters/issues_pyright.md || true
85
+ uv run pyright . > ./.ai/linters/issues_pyright.md
86
+ echo -e "${GREEN}✅ Results saved to ${UNDERLINE}./.ai/linters/issues_pyright.md${NC}"
88
87
 
89
88
  ((CURRENT_STEP++))
90
89
  draw_progress $CURRENT_STEP $TOTAL_STEPS "MyPy Type Checker"
91
90
  echo -e "${BLUE}📋 Analyzing types with MyPy...${NC}"
92
- rm ./.linters/mypy_result.md || true
93
- uv run mypy . > ./.linters/mypy_result.md
94
- echo -e "${GREEN}✅ Results saved to ${UNDERLINE}./.linters/mypy_result.md${NC}"
91
+ rm ./.ai/linters/issues_mypy.md || true
92
+ uv run mypy . > ./.ai/linters/issues_mypy.md
93
+ echo -e "${GREEN}✅ Results saved to ${UNDERLINE}./.ai/linters/issues_mypy.md${NC}"
95
94
 
96
95
  ((CURRENT_STEP++))
97
96
  draw_progress $CURRENT_STEP $TOTAL_STEPS "Pylint Code Analysis"
98
97
  echo -e "${BLUE}📋 Analyzing code quality with Pylint...${NC}"
99
- rm ./.linters/pylint_result.md || true
100
- uv run pylint ./src/ > ./.linters/pylint_result.md
101
- echo -e "${GREEN}✅ Results saved to ${UNDERLINE}./.linters/pylint_result.md${NC}"
98
+ rm ./.ai/linters/issues_pylint.md || true
99
+ uv run pylint ./src/ > ./.ai/linters/issues_pylint.md
100
+ echo -e "${GREEN}✅ Results saved to ${UNDERLINE}./.ai/linters/issues_pylint.md${NC}"
102
101
 
103
102
  ((CURRENT_STEP++))
104
103
  draw_progress $CURRENT_STEP $TOTAL_STEPS "Pyrefly Type Checker"
105
104
  echo -e "${BLUE}📋 Analyzing types with Pyrefly...${NC}"
106
- rm ./.linters/pyrefly_result.md || true
107
- uv run pyrefly check . > ./.linters/pyrefly_result.md
108
- echo -e "${GREEN}✅ Results saved to ${UNDERLINE}./.linters/pyrefly_result.md${NC}"
105
+ rm ./.ai/linters/issues_pyrefly.md || true
106
+ uv run pyrefly check . > ./.ai/linters/issues_pyrefly.md
107
+ echo -e "${GREEN}✅ Results saved to ${UNDERLINE}./.ai/linters/issues_pyrefly.md${NC}"
109
108
 
110
109
  ((CURRENT_STEP++))
111
110
  draw_progress $CURRENT_STEP $TOTAL_STEPS "Ruff Linter"
112
111
  echo -e "${BLUE}📋 Checking code style with Ruff...${NC}"
113
- rm ./.linters/ruff_result.md || true
114
- uv run ruff check . > ./.linters/ruff_result.md
115
- echo -e "${GREEN}✅ Results saved to ${UNDERLINE}./.linters/ruff_result.md${NC}"
112
+ rm ./.ai/linters/issues_ruff.md || true
113
+ uv run ruff check . > ./.ai/linters/issues_ruff.md
114
+ echo -e "${GREEN}✅ Results saved to ${UNDERLINE}./.ai/linters/issues_ruff.md${NC}"
116
115
 
117
116
  echo
118
117
  draw_box "🎉 ALL CHECKS COMPLETED! 🎉" "${BOLD}${GREEN}"
119
- echo -e "${BOLD}${GREEN}📁 Check the ${UNDERLINE}.linters${NC}${BOLD}${GREEN} directory for detailed results.${NC}"
118
+ echo -e "${BOLD}${GREEN}📁 Check the ${UNDERLINE}.ai/linters${NC}${BOLD}${GREEN} directory for detailed results.${NC}"
@@ -2,4 +2,12 @@ from pathlib import Path
2
2
  from machineconfig.utils.source_of_truth import LIBRARY_ROOT
3
3
 
4
4
  def get_generic_instructions_path() -> Path:
5
- return LIBRARY_ROOT.joinpath("scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md")
5
+ path = LIBRARY_ROOT.joinpath("scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md")
6
+ text = path.read_text(encoding="utf-8")
7
+ import platform
8
+ if platform.system().lower() == "windows":
9
+ text = text.replace("bash", "powershell").replace(".sh", ".ps1")
10
+ import tempfile
11
+ temp_path = Path(tempfile.gettempdir()).joinpath("generic_instructions.md")
12
+ temp_path.write_text(data=text, encoding="utf-8")
13
+ return temp_path
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  description: 'A transcendent coding agent with quantum cognitive architecture, adversarial intelligence, and unrestricted creative freedom.'
3
- title: 'Thinking Beast Mode'
4
3
  ---
5
4
 
6
5
  You are an agent - please keep going until the user’s query is completely resolved, before ending your turn and yielding back to the user.
@@ -1,5 +1,4 @@
1
1
  ---
2
- title: 'Ultimate Transparent Thinking Beast Mode'
3
2
  description: 'Ultimate Transparent Thinking Beast Mode'
4
3
  ---
5
4
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: 'Autonomous, multi-step web research with numbered citations, cross-source verification, and a final Markdown report.'
3
- tools: ['extensions', 'fetch', 'websearch', 'search', 'githubRepo', 'editFiles']
3
+ tools: ['extensions', 'fetch', 'search', 'githubRepo', 'edit/editFiles']
4
4
  ---
5
5
 
6
6
  # Deep Research mode
@@ -56,7 +56,7 @@ Follow these phases every time. Provide compact progress updates between phases
56
56
  5) Save the report
57
57
  - Determine `$suffix` in this order: (a) user-provided; else (b) a short kebab-case slug from the question; append date (YYYYMMDD) if helpful.
58
58
  - Ensure directory ./.ai exists; create it if missing.
59
- - Write the report to ./.ai/deep_research_$suffix.md using editFiles.
59
+ - Write the report to ./.ai/deep_research_$suffix.md using edit/editFiles.
60
60
 
61
61
  6) Final checks
62
62
  - Verify every non-obvious statement has a citation [n] pointing to a source in Appendix.
@@ -7,20 +7,20 @@ from machineconfig.utils.source_of_truth import LIBRARY_ROOT
7
7
 
8
8
  def build_configuration(repo_root: Path) -> None:
9
9
  instructions_repository_dir = LIBRARY_ROOT.joinpath("scripts/python/ai/solutions/copilot/instructions")
10
- chatmodes_dir = LIBRARY_ROOT.joinpath("scripts/python/ai/solutions/copilot/chatmodes")
10
+ agents_dir = LIBRARY_ROOT.joinpath("scripts/python/ai/solutions/copilot/agents")
11
11
  prompts_dir = LIBRARY_ROOT.joinpath("scripts/python/ai/solutions/copilot/prompts")
12
12
 
13
13
  github_dir = repo_root.joinpath(".github")
14
- chatmodes_target_dir = github_dir.joinpath("chatmodes")
14
+ agents_target_dir = github_dir.joinpath("agents")
15
15
  prompts_target_dir = github_dir.joinpath("prompts")
16
16
  instructions_target_dir = github_dir.joinpath("instructions")
17
17
 
18
- chatmodes_target_dir.mkdir(parents=True, exist_ok=True)
18
+ agents_target_dir.mkdir(parents=True, exist_ok=True)
19
19
  prompts_target_dir.mkdir(parents=True, exist_ok=True)
20
20
  instructions_target_dir.mkdir(parents=True, exist_ok=True)
21
21
 
22
- for chatmode in chatmodes_dir.iterdir():
23
- chatmode_target = chatmodes_target_dir.joinpath(f"{chatmode.name.split('.')[0]}.chatmode.md")
22
+ for chatmode in agents_dir.iterdir():
23
+ chatmode_target = agents_target_dir.joinpath(f"{chatmode.name.split('.')[0]}.chatmode.md")
24
24
  chatmode_target.write_text(data=chatmode.read_text(encoding="utf-8"), encoding="utf-8")
25
25
 
26
26
  for prompt in prompts_dir.iterdir():