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
@@ -0,0 +1,166 @@
1
+
2
+
3
+ from typing import Literal
4
+
5
+
6
+ def generate_qrcode_grid(
7
+ strings: list[str],
8
+ output_path: str,
9
+ per_row: int = 3,
10
+ qr_size: int = 200,
11
+ label_height: int = 30,
12
+ padding: int = 20,
13
+ label_max_chars: int = 25,
14
+ format: Literal["svg", "png"] = "svg",
15
+ ) -> str:
16
+ from pathlib import Path
17
+ if not strings:
18
+ raise ValueError("strings list cannot be empty")
19
+
20
+ output_path_obj = Path(output_path)
21
+ output_path_obj.parent.mkdir(parents=True, exist_ok=True)
22
+
23
+ if format == "svg":
24
+ return _generate_svg(strings, output_path, per_row, qr_size, label_height, padding, label_max_chars)
25
+ elif format == "png":
26
+ return _generate_png(strings, output_path, per_row, qr_size, label_height, padding, label_max_chars)
27
+ else:
28
+ raise ValueError(f"Unsupported format: {format}")
29
+
30
+
31
+ def _generate_svg(
32
+ strings: list[str],
33
+ output_path: str,
34
+ per_row: int,
35
+ qr_size: int,
36
+ label_height: int,
37
+ padding: int,
38
+ label_max_chars: int,
39
+ ) -> str:
40
+ num_items = len(strings)
41
+ num_rows = (num_items + per_row - 1) // per_row
42
+
43
+ cell_width = qr_size
44
+ cell_height = qr_size + label_height
45
+ total_width = per_row * cell_width + (per_row + 1) * padding
46
+ total_height = num_rows * cell_height + (num_rows + 1) * padding
47
+
48
+ from xml.etree import ElementTree as ET
49
+
50
+ import qrcode
51
+ svg_root = ET.Element(
52
+ "svg",
53
+ xmlns="http://www.w3.org/2000/svg",
54
+ width=str(total_width),
55
+ height=str(total_height),
56
+ viewBox=f"0 0 {total_width} {total_height}",
57
+ )
58
+
59
+ _bg_rect = ET.SubElement(svg_root, "rect", width=str(total_width), height=str(total_height), fill="white")
60
+
61
+ for idx, text in enumerate(strings):
62
+ row = idx // per_row
63
+ col = idx % per_row
64
+
65
+ x_offset = padding + col * (cell_width + padding)
66
+ y_offset = padding + row * (cell_height + padding)
67
+
68
+ qr = qrcode.QRCode(version=1, error_correction=qrcode.ERROR_CORRECT_L, box_size=10, border=2, image_factory=qrcode.image.svg.SvgPathImage) # type: ignore
69
+ qr.add_data(text)
70
+ qr.make(fit=True)
71
+
72
+ qr_img = qr.make_image()
73
+ qr_svg_string = qr_img.to_string(encoding="unicode")
74
+
75
+ qr_tree = ET.fromstring(qr_svg_string)
76
+
77
+ group = ET.SubElement(svg_root, "g", transform=f"translate({x_offset}, {y_offset})")
78
+
79
+ qr_group = ET.SubElement(group, "g")
80
+ for child in qr_tree:
81
+ qr_group.append(child)
82
+
83
+ label_text = text[:label_max_chars] if len(text) > label_max_chars else text
84
+ text_y = qr_size + label_height // 2
85
+
86
+ text_elem = ET.SubElement(
87
+ group,
88
+ "text",
89
+ x=str(qr_size // 2),
90
+ y=str(text_y),
91
+ fill="black",
92
+ attrib={
93
+ "font-family": "monospace",
94
+ "font-size": "12",
95
+ "text-anchor": "middle",
96
+ "dominant-baseline": "middle",
97
+ },
98
+ )
99
+ text_elem.text = label_text
100
+
101
+ tree = ET.ElementTree(svg_root)
102
+ ET.indent(tree, space=" ")
103
+ tree.write(output_path, encoding="unicode", xml_declaration=True)
104
+
105
+ return output_path
106
+
107
+
108
+ def _generate_png(
109
+ strings: list[str],
110
+ output_path: str,
111
+ per_row: int,
112
+ qr_size: int,
113
+ label_height: int,
114
+ padding: int,
115
+ label_max_chars: int,
116
+ ) -> str:
117
+ num_items = len(strings)
118
+ num_rows = (num_items + per_row - 1) // per_row
119
+
120
+ cell_width = qr_size
121
+ cell_height = qr_size + label_height
122
+ total_width = per_row * cell_width + (per_row + 1) * padding
123
+ total_height = num_rows * cell_height + (num_rows + 1) * padding
124
+
125
+ import qrcode
126
+ import qrcode.image.pil
127
+ from PIL import Image, ImageDraw, ImageFont
128
+ img = Image.new("RGB", (total_width, total_height), color="white")
129
+ draw = ImageDraw.Draw(img)
130
+
131
+ try:
132
+ font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf", 12)
133
+ except OSError:
134
+ try:
135
+ font = ImageFont.truetype("arial.ttf", 12)
136
+ except OSError:
137
+ font = ImageFont.load_default()
138
+
139
+ for idx, text in enumerate(strings):
140
+ row = idx // per_row
141
+ col = idx % per_row
142
+
143
+ x_offset = padding + col * (cell_width + padding)
144
+ y_offset = padding + row * (cell_height + padding)
145
+
146
+ qr = qrcode.QRCode(version=1, error_correction=qrcode.ERROR_CORRECT_L, box_size=10, border=2, image_factory=qrcode.image.pil.PilImage)
147
+ qr.add_data(text)
148
+ qr.make(fit=True)
149
+
150
+ qr_img = qr.make_image(fill_color="black", back_color="white")
151
+ qr_img_resized = qr_img.resize((qr_size, qr_size), Image.Resampling.LANCZOS)
152
+
153
+ img.paste(qr_img_resized, (x_offset, y_offset))
154
+
155
+ label_text = text[:label_max_chars] if len(text) > label_max_chars else text
156
+
157
+ bbox = draw.textbbox((0, 0), label_text, font=font)
158
+ text_width = bbox[2] - bbox[0]
159
+ text_x = x_offset + (qr_size - text_width) // 2
160
+ text_y = y_offset + qr_size + label_height // 2 - 6
161
+
162
+ draw.text((text_x, text_y), label_text, fill="black", font=font)
163
+
164
+ img.save(output_path, format="PNG")
165
+
166
+ return output_path
@@ -0,0 +1,325 @@
1
+ # #!/usr/bin/env python3
2
+ # from pathlib import Path
3
+ # from typing import Annotated
4
+ # import subprocess
5
+ # import typer
6
+ # from rich.console import Console
7
+ # from rich.progress import Progress, SpinnerColumn, TextColumn
8
+ # from rich.table import Table
9
+ # from rich.syntax import Syntax
10
+
11
+ # import chromadb
12
+ # from chromadb.config import Settings
13
+ # from sentence_transformers import SentenceTransformer
14
+
15
+
16
+ # app = typer.Typer(help="Semantic search over your repository using local RAG")
17
+ # console = Console()
18
+
19
+
20
+ # DEFAULT_EXTENSIONS = [".py", ".sh", ".ps1", ".md", ".toml", ".yaml", ".yml", ".json"]
21
+ # DEFAULT_MODEL = "all-MiniLM-L6-v2"
22
+ # DEFAULT_DB_PATH = Path.home() / ".cache" / "repo_rag"
23
+
24
+
25
+ # class RepoRAG:
26
+ # def __init__(self, db_path: Path, model_name: str = DEFAULT_MODEL) -> None:
27
+ # self.db_path = db_path
28
+ # self.db_path.mkdir(parents=True, exist_ok=True)
29
+
30
+ # with console.status(f"[bold green]Loading embedding model: {model_name}..."):
31
+ # self.model = SentenceTransformer(model_name)
32
+
33
+ # self.client = chromadb.PersistentClient(
34
+ # path=str(db_path),
35
+ # settings=Settings(anonymized_telemetry=False)
36
+ # )
37
+
38
+ # def _get_or_create_collection(self, repo_path: Path) -> chromadb.Collection:
39
+ # collection_name = f"repo_{repo_path.name}".replace("-", "_").replace(".", "_")
40
+ # return self.client.get_or_create_collection(
41
+ # name=collection_name,
42
+ # metadata={"repo_path": str(repo_path)}
43
+ # )
44
+
45
+ # def _chunk_file_content(self, content: str, chunk_size: int = 500, overlap: int = 50) -> list[str]:
46
+ # lines = content.split("\n")
47
+ # chunks: list[str] = []
48
+ # current_chunk: list[str] = []
49
+ # current_size = 0
50
+
51
+ # for line in lines:
52
+ # line_size = len(line)
53
+ # if current_size + line_size > chunk_size and current_chunk:
54
+ # chunks.append("\n".join(current_chunk))
55
+ # overlap_lines = current_chunk[-overlap:] if len(current_chunk) > overlap else current_chunk
56
+ # current_chunk = overlap_lines
57
+ # current_size = sum(len(line_text) for line_text in current_chunk)
58
+
59
+ # current_chunk.append(line)
60
+ # current_size += line_size
61
+
62
+ # if current_chunk:
63
+ # chunks.append("\n".join(current_chunk))
64
+
65
+ # return chunks if chunks else [content]
66
+
67
+ # def index_repo(self, repo_path: Path, extensions: list[str], max_file_size_kb: int = 500) -> None:
68
+ # collection = self._get_or_create_collection(repo_path)
69
+
70
+ # files_to_index: list[Path] = []
71
+ # for ext in extensions:
72
+ # files_to_index.extend(repo_path.rglob(f"*{ext}"))
73
+
74
+ # files_to_index = [
75
+ # f for f in files_to_index
76
+ # if not any(part.startswith('.') for part in f.relative_to(repo_path).parts[:-1])
77
+ # and f.stat().st_size < max_file_size_kb * 1024
78
+ # ]
79
+
80
+ # console.print(f"[bold cyan]Found {len(files_to_index)} files to index")
81
+
82
+ # with Progress(
83
+ # SpinnerColumn(),
84
+ # TextColumn("[progress.description]{task.description}"),
85
+ # console=console
86
+ # ) as progress:
87
+ # task = progress.add_task("Indexing files...", total=len(files_to_index))
88
+
89
+ # for file_path in files_to_index:
90
+ # try:
91
+ # content = file_path.read_text(encoding="utf-8", errors="ignore")
92
+ # rel_path = str(file_path.relative_to(repo_path))
93
+
94
+ # chunks = self._chunk_file_content(content)
95
+
96
+ # for i, chunk in enumerate(chunks):
97
+ # doc_id = f"{rel_path}::chunk_{i}"
98
+ # embedding = self.model.encode(chunk).tolist()
99
+
100
+ # collection.upsert(
101
+ # ids=[doc_id],
102
+ # embeddings=[embedding],
103
+ # documents=[chunk],
104
+ # metadatas=[{
105
+ # "file_path": rel_path,
106
+ # "chunk_index": i,
107
+ # "total_chunks": len(chunks),
108
+ # "extension": file_path.suffix
109
+ # }]
110
+ # )
111
+
112
+ # except Exception as e:
113
+ # console.print(f"[yellow]Warning: Failed to index {file_path}: {e}")
114
+
115
+ # progress.advance(task)
116
+
117
+ # console.print("[bold green]✓ Indexing complete!")
118
+
119
+ # def search(self, repo_path: Path, query: str, n_results: int = 20) -> list[dict[str, str | dict[str, str | int]]]:
120
+ # collection = self._get_or_create_collection(repo_path)
121
+
122
+ # with console.status("[bold green]Searching..."):
123
+ # query_embedding = self.model.encode(query).tolist()
124
+ # results = collection.query(
125
+ # query_embeddings=[query_embedding],
126
+ # n_results=n_results
127
+ # )
128
+
129
+ # if not results["ids"] or not results["ids"][0]:
130
+ # return []
131
+
132
+ # search_results: list[dict[str, str | dict[str, str | int]]] = []
133
+ # for i, doc_id in enumerate(results["ids"][0]):
134
+ # search_results.append({
135
+ # "id": doc_id,
136
+ # "file_path": results["metadatas"][0][i]["file_path"],
137
+ # "content": results["documents"][0][i],
138
+ # "distance": results["distances"][0][i] if results.get("distances") else 0.0,
139
+ # "metadata": results["metadatas"][0][i]
140
+ # })
141
+
142
+ # return search_results
143
+
144
+ # def delete_index(self, repo_path: Path) -> None:
145
+ # collection_name = f"repo_{repo_path.name}".replace("-", "_").replace(".", "_")
146
+ # try:
147
+ # self.client.delete_collection(name=collection_name)
148
+ # console.print(f"[bold green]✓ Deleted index for {repo_path.name}")
149
+ # except Exception as e:
150
+ # console.print(f"[bold red]Error deleting index: {e}")
151
+
152
+
153
+ # @app.command()
154
+ # def index(
155
+ # repo_path: Annotated[Path, typer.Argument(help="Path to repository to index")] = Path.cwd(),
156
+ # extensions: Annotated[str, typer.Option("--ext", "-e", help="Comma-separated list of extensions")] = ",".join(DEFAULT_EXTENSIONS),
157
+ # model: Annotated[str, typer.Option("--model", "-m", help="Sentence transformer model name")] = DEFAULT_MODEL,
158
+ # db_path: Annotated[Path, typer.Option("--db", help="Database path")] = DEFAULT_DB_PATH,
159
+ # max_size_kb: Annotated[int, typer.Option("--max-size", help="Max file size in KB")] = 500,
160
+ # ) -> None:
161
+ # repo_path = repo_path.resolve()
162
+
163
+ # if not repo_path.exists():
164
+ # console.print(f"[bold red]Error: Repository path does not exist: {repo_path}")
165
+ # raise typer.Exit(1)
166
+
167
+ # ext_list = [ext.strip() if ext.startswith(".") else f".{ext.strip()}" for ext in extensions.split(",")]
168
+
169
+ # console.print(f"[bold cyan]Repository:[/] {repo_path}")
170
+ # console.print(f"[bold cyan]Extensions:[/] {', '.join(ext_list)}")
171
+ # console.print(f"[bold cyan]Model:[/] {model}")
172
+ # console.print(f"[bold cyan]Database:[/] {db_path}")
173
+ # console.print()
174
+
175
+ # rag = RepoRAG(db_path, model)
176
+ # rag.index_repo(repo_path, ext_list, max_size_kb)
177
+
178
+
179
+ # @app.command()
180
+ # def search(
181
+ # query: Annotated[str, typer.Argument(help="Search query")],
182
+ # repo_path: Annotated[Path, typer.Option("--repo", "-r", help="Path to repository")] = Path.cwd(),
183
+ # n_results: Annotated[int, typer.Option("--num", "-n", help="Number of results")] = 20,
184
+ # model: Annotated[str, typer.Option("--model", "-m", help="Sentence transformer model name")] = DEFAULT_MODEL,
185
+ # db_path: Annotated[Path, typer.Option("--db", help="Database path")] = DEFAULT_DB_PATH,
186
+ # use_fzf: Annotated[bool, typer.Option("--fzf", help="Use fzf for interactive selection")] = True,
187
+ # show_content: Annotated[bool, typer.Option("--content", "-c", help="Show content snippets")] = True,
188
+ # ) -> None:
189
+ # repo_path = repo_path.resolve()
190
+
191
+ # if not repo_path.exists():
192
+ # console.print(f"[bold red]Error: Repository path does not exist: {repo_path}")
193
+ # raise typer.Exit(1)
194
+
195
+ # rag = RepoRAG(db_path, model)
196
+ # results = rag.search(repo_path, query, n_results)
197
+
198
+ # if not results:
199
+ # console.print("[yellow]No results found")
200
+ # raise typer.Exit(0)
201
+
202
+ # if use_fzf:
203
+ # _search_with_fzf(results, repo_path, show_content)
204
+ # else:
205
+ # _display_results(results, show_content)
206
+
207
+
208
+ # def _display_results(results: list[dict[str, str | dict[str, str | int]]], show_content: bool) -> None:
209
+ # table = Table(title="Search Results", show_header=True, header_style="bold magenta")
210
+ # table.add_column("#", style="cyan", width=4)
211
+ # table.add_column("File", style="green")
212
+ # table.add_column("Chunk", style="yellow", width=8)
213
+ # table.add_column("Score", style="blue", width=8)
214
+ # if show_content:
215
+ # table.add_column("Content Preview", style="white", width=60)
216
+
217
+ # for i, result in enumerate(results, 1):
218
+ # file_path = str(result["file_path"])
219
+ # metadata = result["metadata"]
220
+ # chunk_info = f"{int(metadata['chunk_index']) + 1}/{int(metadata['total_chunks'])}"
221
+ # score = f"{float(result['distance']):.3f}"
222
+
223
+ # row = [str(i), file_path, chunk_info, score]
224
+
225
+ # if show_content:
226
+ # content = str(result["content"])
227
+ # preview = content[:200].replace("\n", " ") + ("..." if len(content) > 200 else "")
228
+ # row.append(preview)
229
+
230
+ # table.add_row(*row)
231
+
232
+ # console.print(table)
233
+
234
+
235
+ # def _search_with_fzf(results: list[dict[str, str | dict[str, str | int]]], repo_path: Path, show_content: bool) -> None:
236
+ # try:
237
+ # fzf_input_lines: list[str] = []
238
+ # for i, result in enumerate(results, 1):
239
+ # file_path = str(result["file_path"])
240
+ # metadata = result["metadata"]
241
+ # chunk_info = f"{int(metadata['chunk_index']) + 1}/{int(metadata['total_chunks'])}"
242
+ # score = f"{float(result['distance']):.3f}"
243
+
244
+ # if show_content:
245
+ # content = str(result["content"]).replace("\n", " ")[:100]
246
+ # line = f"{i:3d} │ {score:6s} │ {chunk_info:5s} │ {file_path:60s} │ {content}"
247
+ # else:
248
+ # line = f"{i:3d} │ {score:6s} │ {chunk_info:5s} │ {file_path}"
249
+
250
+ # fzf_input_lines.append(line)
251
+
252
+ # fzf_input = "\n".join(fzf_input_lines)
253
+
254
+ # result = subprocess.run(
255
+ # ["fzf", "--ansi", "--multi", "--reverse", "--header=Select files to open (TAB for multi-select)"],
256
+ # input=fzf_input.encode(),
257
+ # capture_output=True
258
+ # )
259
+
260
+ # if result.returncode != 0:
261
+ # console.print("[yellow]Selection cancelled")
262
+ # return
263
+
264
+ # selected_lines = result.stdout.decode().strip().split("\n")
265
+
266
+ # for line in selected_lines:
267
+ # if not line:
268
+ # continue
269
+
270
+ # parts = line.split("│")
271
+ # if len(parts) < 4:
272
+ # continue
273
+
274
+ # file_path_str = parts[3].strip().split()[0]
275
+
276
+ # idx = int(parts[0].strip()) - 1
277
+ # if idx < len(results):
278
+ # content = str(results[idx]["content"])
279
+
280
+ # console.print(f"\n[bold green]File:[/] {file_path_str}")
281
+ # console.print("[bold cyan]Content:[/]")
282
+
283
+ # syntax = Syntax(content, "python", theme="monokai", line_numbers=True)
284
+ # console.print(syntax)
285
+ # console.print("\n" + "─" * 80 + "\n")
286
+
287
+ # except FileNotFoundError:
288
+ # console.print("[bold red]Error: fzf not found. Install fzf or use --no-fzf flag")
289
+ # _display_results(results, show_content)
290
+
291
+
292
+ # @app.command()
293
+ # def delete(
294
+ # repo_path: Annotated[Path, typer.Argument(help="Path to repository")] = Path.cwd(),
295
+ # db_path: Annotated[Path, typer.Option("--db", help="Database path")] = DEFAULT_DB_PATH,
296
+ # model: Annotated[str, typer.Option("--model", "-m", help="Sentence transformer model name")] = DEFAULT_MODEL,
297
+ # ) -> None:
298
+ # repo_path = repo_path.resolve()
299
+ # rag = RepoRAG(db_path, model)
300
+ # rag.delete_index(repo_path)
301
+
302
+
303
+ # @app.command()
304
+ # def info() -> None:
305
+ # console.print("[bold cyan]Repo RAG - Semantic Code Search[/]\n")
306
+
307
+ # info_table = Table(show_header=False, box=None)
308
+ # info_table.add_column("Key", style="cyan")
309
+ # info_table.add_column("Value", style="white")
310
+
311
+ # info_table.add_row("Embedding Model", DEFAULT_MODEL)
312
+ # info_table.add_row("Vector Store", "ChromaDB (embedded)")
313
+ # info_table.add_row("Default Extensions", ", ".join(DEFAULT_EXTENSIONS))
314
+ # info_table.add_row("Database Path", str(DEFAULT_DB_PATH))
315
+
316
+ # console.print(info_table)
317
+
318
+ # console.print("\n[bold green]Quick Start:[/]")
319
+ # console.print("1. Index your repo: [yellow]repo-rag index[/]")
320
+ # console.print("2. Search semantically: [yellow]repo-rag search 'your query'[/]")
321
+ # console.print("3. Delete index: [yellow]repo-rag delete[/]")
322
+
323
+
324
+ # if __name__ == "__main__":
325
+ # app()
@@ -0,0 +1,79 @@
1
+
2
+
3
+ import typer
4
+ from typing import Annotated, Optional, Literal
5
+
6
+
7
+ def run_py_script(name: Annotated[str, typer.Argument(help="Name of the python script to run, e.g., 'a' for a.py")],
8
+ where: Annotated[Literal["all", "private", "public", "tmp"], typer.Option("--where", "-w", help="Where to look for the script: any, private, public, tmp")] = "all",
9
+ command: Annotated[Optional[bool], typer.Option(..., "--command", "-c", help="Run as command")] = False,
10
+ # use_machineconfig_env: Annotated[bool, typer.Option(..., "--use-machineconfig-env/--no-use-machineconfig-env", "-m/-nm", help="Whether to use the machineconfig python environment")] = False
11
+ ) -> None:
12
+ """
13
+ Run a temporary python script stored in machineconfig/scripts/python/helpers/tmp_py_scripts.
14
+ """
15
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT
16
+ from pathlib import Path
17
+ if command:
18
+ exec(name)
19
+ return
20
+ if Path(name).is_file():
21
+ import machineconfig
22
+ import subprocess
23
+ import sys
24
+ subprocess.run([sys.executable, name], cwd=machineconfig.__path__[0])
25
+ return
26
+
27
+ target_py_file: Optional[Path] = None
28
+ if where in ["all", "private"]:
29
+ result = Path.home().joinpath("dotfiles/scripts/python").joinpath(f"{name}.py")
30
+ if result.exists():
31
+ target_py_file = result
32
+ if target_py_file is None and where in ["all", "public"]:
33
+ result = CONFIG_ROOT.joinpath("scripts_python").joinpath(f"{name}.py")
34
+ if result.exists():
35
+ target_py_file = result
36
+ if target_py_file is None and where in ["all", "tmp"]:
37
+ url = f"""https://raw.githubusercontent.com/thisismygitrepo/machineconfig/refs/heads/main/src/machineconfig/scripts/python/helpers/tmp_py_scripts/{name}.py"""
38
+ print(f"Fetching temporary script from {url} ...")
39
+ import requests
40
+ response = requests.get(url)
41
+ if response.status_code != 200:
42
+ print(f"❌ ERROR: Could not fetch script '{name}.py' from repository. Status Code: {response.status_code}")
43
+ raise RuntimeError(f"Could not fetch script '{name}.py' from repository.")
44
+ script_content = response.text
45
+ from machineconfig.utils.code import get_uv_command_executing_python_script, exit_then_run_shell_script
46
+ shell_script, _shell_script_path = get_uv_command_executing_python_script(python_script=script_content, uv_project_dir=None, uv_with=None, prepend_print=False)
47
+ exit_then_run_shell_script(script=shell_script)
48
+
49
+
50
+
51
+ def copy_script_to_local(name: Annotated[str, typer.Argument(help="Name of the temporary python script to copy, e.g., 'a' for a.py")],
52
+ alias: Annotated[Optional[str], typer.Option("--alias", "-a", help="Whether to create call it a different name locally")] = None
53
+ ) -> None:
54
+ """
55
+ Copy a temporary python script stored in machineconfig/scripts/python/helpers/tmp_py_scripts to the local machine.
56
+ """
57
+ url = f"""https://raw.githubusercontent.com/thisismygitrepo/machineconfig/refs/heads/main/src/machineconfig/scripts/python/helpers/tmp_py_scripts/{name}.py"""
58
+ import requests
59
+ response = requests.get(url)
60
+ if response.status_code != 200:
61
+ print(f"❌ ERROR: Could not fetch script '{name}.py' from repository. Status Code: {response.status_code}")
62
+ raise RuntimeError(f"Could not fetch script '{name}.py' from repository.")
63
+ script_content = response.text
64
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT
65
+ local_path = CONFIG_ROOT.joinpath(f"scripts_python/{alias or name}.py")
66
+ with open(local_path, "w") as f:
67
+ f.write(script_content)
68
+ print(f"✅ Script '{name}.py' has been copied to '{local_path}'.")
69
+
70
+
71
+ def get_app():
72
+ app = typer.Typer(
73
+ name="run-tmp-script",
74
+ help="Helper to run temporary python scripts stored in machineconfig/scripts/python/helpers/tmp_py_scripts",
75
+ no_args_is_help=True,
76
+ )
77
+ from machineconfig.scripts.python.helpers.tmp_py_scripts import a
78
+ app.command()(a.main)
79
+ return app
@@ -0,0 +1,25 @@
1
+ """
2
+ please fully read docs of https://github.com/meilisearch/meilisearch-python
3
+
4
+ then make a cli using typer in this file
5
+
6
+ I want commands to
7
+ create-index (pass name of index)
8
+ command to populate the index with files in folder
9
+ command is add-to-index
10
+ --directory [str] and --extensions .py,.ps1,.sh
11
+
12
+ command to rebuild index
13
+
14
+ coimmand to search
15
+ command show stats and rop index
16
+
17
+ learn from my style of building apps like this #file:msearch.py
18
+
19
+ and add option when building index to say --symantic (means use ai locall embedding to build the index)
20
+
21
+ in all cases we should be able to pass
22
+ MEILI_URL="http://localhost:7700" (default)
23
+ MEILI_MASTER_KEY="YOUR_MASTER_KEY"
24
+
25
+ """
@@ -0,0 +1,26 @@
1
+
2
+ """
3
+ #!/usr/bin/env -S uv run
4
+ # /// script
5
+ # requires-python = ">=3.13"
6
+ # dependencies = [
7
+ # "rich",
8
+ # "polars",
9
+ # "typer>=0.12",
10
+ # "loguru",
11
+ # "numpy",
12
+ # ]
13
+ # ///
14
+
15
+ """
16
+
17
+
18
+ def main():
19
+ """a,b,c"""
20
+ print("This is a helper function in a.py")
21
+ import numpy as np
22
+ print("Numpy version:", np.__version__)
23
+
24
+
25
+ if __name__ == "__main__":
26
+ main()
@@ -0,0 +1,14 @@
1
+ {
2
+ "models": {
3
+ "large": {
4
+ "model": "{model}",
5
+ "provider": "{provider}",
6
+ "max_tokens": 100000
7
+ }
8
+ },
9
+ "providers": {
10
+ "{provider}": {
11
+ "api_key": "{api_key}"
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,39 @@
1
+
2
+ from pathlib import Path
3
+ # import shlex
4
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
5
+
6
+
7
+ def fire_crush(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path) -> str:
8
+ match ai_spec["machine"]:
9
+ case "local":
10
+ cmd = f"""
11
+ crush run {prompt_path}
12
+ """
13
+ case "docker":
14
+ assert ai_spec["api_spec"]["api_key"] is not None, "API key is required for Crush agent in docker mode."
15
+ json_path = Path(__file__).parent / "fire_crush.json"
16
+ json_template = json_path.read_text(encoding="utf-8")
17
+ api_key = ai_spec["api_spec"]["api_key"]
18
+ json_filled = json_template.replace("{api_key}", api_key)
19
+ json_filled = json_filled.replace("{model}", ai_spec["model"])
20
+ if ai_spec["provider"] == "google":
21
+ provider = "gemini" # weird crush way of naming.
22
+ else:
23
+ provider = ai_spec["provider"]
24
+ json_filled = json_filled.replace("{provider}", provider)
25
+ from machineconfig.utils.accessories import randstr
26
+ temp_config_file_local = Path.home().joinpath("tmp_results/tmp_files/crush_" + randstr(8) + ".json")
27
+ temp_config_file_local.parent.mkdir(parents=True, exist_ok=True)
28
+ Path(temp_config_file_local).write_text(json_filled, encoding="utf-8")
29
+ cmd = f"""
30
+
31
+ docker run -it --rm \
32
+ -v "{repo_root}:/workspace/{repo_root.name}" \
33
+ -v "{temp_config_file_local}:/root/.local/share/crush/crush.json" \
34
+ -w "/workspace/{repo_root.name}" \
35
+ statistician/machineconfig-ai:latest \
36
+ bash -i -c "source ~/.bashrc && cd /workspace/{repo_root.name} && cat /root/.local/share/crush/crush.json && crush run 'Please act on contents of this prompt ./{prompt_path.relative_to(repo_root)}'"
37
+
38
+ """
39
+ return cmd