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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. machineconfig/cluster/remote/cloud_manager.py +1 -1
  2. machineconfig/cluster/remote/run_cluster.py +1 -1
  3. machineconfig/cluster/remote/run_remote.py +1 -1
  4. machineconfig/cluster/sessions_managers/utils/maker.py +29 -15
  5. machineconfig/cluster/sessions_managers/wt_local.py +17 -222
  6. machineconfig/cluster/sessions_managers/wt_local_manager.py +56 -194
  7. machineconfig/cluster/sessions_managers/wt_remote_manager.py +42 -198
  8. machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
  9. machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
  10. machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
  11. machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
  12. machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
  13. machineconfig/cluster/sessions_managers/zellij_local_manager.py +4 -2
  14. machineconfig/cluster/sessions_managers/zellij_remote_manager.py +3 -2
  15. machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +2 -2
  16. machineconfig/jobs/installer/checks/check_installations.py +133 -0
  17. machineconfig/jobs/installer/checks/install_utils.py +132 -0
  18. machineconfig/jobs/installer/checks/report_utils.py +39 -0
  19. machineconfig/jobs/installer/checks/vt_utils.py +89 -0
  20. machineconfig/jobs/installer/installer_data.json +1500 -310
  21. machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
  22. machineconfig/jobs/installer/linux_scripts/q.sh +10 -7
  23. machineconfig/jobs/installer/linux_scripts/redis.sh +1 -0
  24. machineconfig/jobs/installer/package_groups.py +62 -91
  25. machineconfig/jobs/installer/powershell_scripts/install_fonts.ps1 +129 -34
  26. machineconfig/jobs/installer/{custom → python_scripts}/boxes.py +2 -3
  27. machineconfig/jobs/installer/{custom_dev → python_scripts}/brave.py +5 -3
  28. machineconfig/jobs/installer/python_scripts/cloudflare_warp_cli.py +23 -0
  29. machineconfig/jobs/installer/{custom_dev → python_scripts}/code.py +14 -9
  30. machineconfig/jobs/installer/{custom_dev → python_scripts}/dubdb_adbc.py +1 -1
  31. machineconfig/jobs/installer/python_scripts/hx.py +214 -0
  32. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerdfont.py +2 -2
  33. machineconfig/jobs/installer/{custom_dev → python_scripts}/nerfont_windows_helper.py +32 -26
  34. machineconfig/jobs/installer/python_scripts/sysabc.py +145 -0
  35. machineconfig/jobs/installer/{custom_dev → python_scripts}/wezterm.py +2 -19
  36. machineconfig/jobs/installer/{custom_dev → python_scripts}/winget.py +10 -14
  37. machineconfig/jobs/installer/python_scripts/yazi.py +139 -0
  38. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nfs +0 -1
  39. machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
  40. machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +13 -0
  41. machineconfig/jobs/scripts/powershell_scripts/obs.ps1 +4 -0
  42. machineconfig/jobs/scripts_dynamic/a.py +428 -0
  43. machineconfig/logger.py +1 -2
  44. machineconfig/profile/create_helper.py +56 -18
  45. machineconfig/profile/create_links.py +79 -21
  46. machineconfig/profile/create_links_export.py +87 -36
  47. machineconfig/profile/create_shell_profile.py +92 -127
  48. machineconfig/profile/mapper_data.toml +45 -0
  49. machineconfig/profile/mapper_dotfiles.toml +249 -0
  50. machineconfig/scripts/__init__.py +0 -4
  51. machineconfig/scripts/linux/wrap_mcfg +46 -0
  52. machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
  53. machineconfig/scripts/python/agents.py +85 -165
  54. machineconfig/scripts/python/ai/initai.py +4 -2
  55. machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
  56. machineconfig/scripts/python/ai/scripts/command_runner.ps1 +33 -0
  57. machineconfig/scripts/python/ai/{command_runner → scripts}/command_runner.sh +1 -1
  58. machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
  59. machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +8 -6
  60. machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
  61. machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
  62. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Thinking-Beast-Mode.chatmode.md → agents/Thinking-Beast-Mode.agent.md} +0 -1
  63. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md → agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md} +0 -1
  64. machineconfig/scripts/python/ai/solutions/copilot/{chatmodes/deepResearch.chatmode.md → agents/deepResearch.agent.md} +2 -2
  65. machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +6 -6
  66. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +33 -0
  67. machineconfig/scripts/python/ai/solutions/copilot/instructions/python/watch_exec.prompt.md +20 -0
  68. machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
  69. machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
  70. machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
  71. machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
  72. machineconfig/scripts/python/ai/{generate_files.py → utils/generate_files.py} +2 -2
  73. machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
  74. machineconfig/scripts/python/ai/{vscode_tasks.py → utils/vscode_tasks.py} +13 -5
  75. machineconfig/scripts/python/cloud.py +58 -11
  76. machineconfig/scripts/python/croshell.py +10 -162
  77. machineconfig/scripts/python/devops.py +73 -36
  78. machineconfig/scripts/python/devops_navigator.py +16 -6
  79. machineconfig/scripts/python/fire_jobs.py +8 -222
  80. machineconfig/scripts/python/ftpx.py +7 -200
  81. machineconfig/scripts/python/graph/cli_graph.json +8743 -0
  82. machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
  83. machineconfig/scripts/python/helpers/helper_env/env_manager_tui.py +204 -0
  84. machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
  85. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +1 -1
  86. machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.py +39 -0
  87. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
  88. machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_gemini.py +55 -0
  89. machineconfig/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
  90. machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
  91. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_launch.py +38 -16
  92. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_helper_types.py +11 -14
  93. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +5 -0
  94. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +2 -0
  95. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +1 -0
  96. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +10 -0
  97. machineconfig/scripts/python/helpers/helpers_agents/privacy/configs/gemini/settings.json +12 -0
  98. machineconfig/scripts/python/helpers/helpers_agents/privacy/privacy.py +109 -0
  99. machineconfig/scripts/python/helpers/helpers_agents/templates/prompt.txt +10 -0
  100. machineconfig/scripts/python/helpers/helpers_agents/templates/template.sh +34 -0
  101. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +32 -25
  102. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +29 -22
  103. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +9 -8
  104. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
  105. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +3 -3
  106. machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
  107. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
  108. machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +12 -12
  109. machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
  110. machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +262 -0
  111. machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
  112. machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
  113. machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +67 -0
  114. machineconfig/scripts/python/helpers/helpers_devops/cli_nw.py +201 -0
  115. machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
  116. machineconfig/scripts/python/helpers/helpers_devops/cli_self.py +197 -0
  117. machineconfig/scripts/python/helpers/helpers_devops/cli_share_file.py +151 -0
  118. machineconfig/scripts/python/helpers/helpers_devops/cli_share_server.py +125 -0
  119. machineconfig/scripts/python/{helpers_devops/cli_terminal.py → helpers/helpers_devops/cli_share_terminal.py} +26 -22
  120. machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
  121. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +17 -23
  122. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
  123. machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +78 -71
  124. machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
  125. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
  126. machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
  127. machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +4 -4
  128. machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers/helpers_fire_command/file_wrangler.py} +57 -20
  129. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +1 -0
  130. machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
  131. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +26 -16
  132. machineconfig/scripts/python/helpers/helpers_msearch/__init__.py +5 -0
  133. machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
  134. machineconfig/scripts/{linux → python/helpers/helpers_msearch/scripts_linux}/fzfg +6 -5
  135. machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
  136. machineconfig/scripts/python/helpers/helpers_msearch/scripts_windows/fzfg.ps1 +59 -0
  137. machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
  138. machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
  139. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
  140. machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
  141. machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
  142. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
  143. machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
  144. machineconfig/scripts/python/helpers/helpers_network/address.py +174 -0
  145. machineconfig/scripts/python/helpers/helpers_network/address_switch.py +78 -0
  146. machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
  147. machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nfs.py +2 -2
  148. machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_ssh.py +3 -3
  149. machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
  150. machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
  151. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
  152. machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
  153. machineconfig/scripts/python/{nw → helpers/helpers_network}/wifi_conn.py +1 -53
  154. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
  155. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
  156. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -1
  157. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +159 -48
  158. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +4 -3
  159. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -12
  160. machineconfig/scripts/python/helpers/helpers_repos/repo_analyzer_1.py +160 -0
  161. machineconfig/scripts/python/{helpers_repos/count_lines.py → helpers/helpers_repos/repo_analyzer_2.py} +156 -191
  162. machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
  163. machineconfig/scripts/python/helpers/helpers_search/ast_search.py +74 -0
  164. machineconfig/scripts/python/helpers/helpers_search/qr_code.py +166 -0
  165. machineconfig/scripts/python/helpers/helpers_search/repo_rag.py +325 -0
  166. machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
  167. machineconfig/scripts/python/helpers/helpers_search/symantic_search.py +25 -0
  168. machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  169. machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
  170. machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +20 -14
  171. machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
  172. machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
  173. machineconfig/scripts/python/helpers/helpers_utils/download.py +150 -0
  174. machineconfig/scripts/python/helpers/helpers_utils/pdf.py +96 -0
  175. machineconfig/scripts/python/helpers/helpers_utils/python.py +210 -0
  176. machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
  177. machineconfig/scripts/python/mcfg_entry.py +143 -0
  178. machineconfig/scripts/python/msearch.py +26 -0
  179. machineconfig/scripts/python/sessions.py +69 -135
  180. machineconfig/scripts/python/terminal.py +58 -0
  181. machineconfig/scripts/python/utils.py +115 -38
  182. machineconfig/scripts/windows/wrap_mcfg.ps1 +63 -0
  183. machineconfig/settings/atuin/config.toml +294 -0
  184. machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
  185. machineconfig/settings/broot/conf.toml +1 -1
  186. machineconfig/settings/helix/config.toml +16 -0
  187. machineconfig/settings/helix/languages.toml +13 -4
  188. machineconfig/settings/helix/yazi-picker.sh +12 -0
  189. machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
  190. machineconfig/settings/lf/linux/exe/previewer.sh +3 -2
  191. machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
  192. machineconfig/settings/lf/windows/lfrc +14 -16
  193. machineconfig/settings/linters/.ruff.toml +2 -1
  194. machineconfig/settings/marimo/marimo.toml +1 -1
  195. machineconfig/settings/marimo/snippets/globalize.py +34 -0
  196. machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
  197. machineconfig/settings/shells/bash/init.sh +47 -12
  198. machineconfig/settings/shells/ipy/profiles/default/startup/playext.py +1 -1
  199. machineconfig/settings/shells/nushell/config.nu +25 -33
  200. machineconfig/settings/shells/nushell/env.nu +21 -8
  201. machineconfig/settings/shells/nushell/init.nu +138 -0
  202. machineconfig/settings/shells/pwsh/init.ps1 +111 -17
  203. machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
  204. machineconfig/settings/shells/starship/starship.toml +16 -0
  205. machineconfig/settings/shells/wezterm/wezterm.lua +6 -1
  206. machineconfig/settings/shells/wt/settings.json +27 -18
  207. machineconfig/settings/shells/zsh/init.sh +42 -23
  208. machineconfig/settings/television/cable_unix/alias.toml +8 -0
  209. machineconfig/settings/television/cable_unix/aws-buckets.toml +14 -0
  210. machineconfig/settings/television/cable_unix/aws-instances.toml +13 -0
  211. machineconfig/settings/television/cable_unix/bash-history.toml +8 -0
  212. machineconfig/settings/television/cable_unix/channels.toml +19 -0
  213. machineconfig/settings/television/cable_unix/dirs.toml +13 -0
  214. machineconfig/settings/television/cable_unix/distrobox-list.toml +42 -0
  215. machineconfig/settings/television/cable_unix/docker-images.toml +13 -0
  216. machineconfig/settings/television/cable_unix/dotfiles.toml +11 -0
  217. machineconfig/settings/television/cable_unix/env.toml +17 -0
  218. machineconfig/settings/television/cable_unix/files.toml +11 -0
  219. machineconfig/settings/television/cable_unix/fish-history.toml +8 -0
  220. machineconfig/settings/television/cable_unix/git-branch.toml +11 -0
  221. machineconfig/settings/television/cable_unix/git-diff.toml +10 -0
  222. machineconfig/settings/television/cable_unix/git-log.toml +12 -0
  223. machineconfig/settings/television/cable_unix/git-reflog.toml +12 -0
  224. machineconfig/settings/television/cable_unix/git-repos.toml +16 -0
  225. machineconfig/settings/television/cable_unix/guix.toml +20 -0
  226. machineconfig/settings/television/cable_unix/just-recipes.toml +18 -0
  227. machineconfig/settings/television/cable_unix/k8s-deployments.toml +36 -0
  228. machineconfig/settings/television/cable_unix/k8s-pods.toml +50 -0
  229. machineconfig/settings/television/cable_unix/k8s-services.toml +36 -0
  230. machineconfig/settings/television/cable_unix/man-pages.toml +24 -0
  231. machineconfig/settings/television/cable_unix/nu-history.toml +7 -0
  232. machineconfig/settings/television/cable_unix/procs.toml +20 -0
  233. machineconfig/settings/television/cable_unix/text.toml +17 -0
  234. machineconfig/settings/television/cable_unix/tldr.toml +18 -0
  235. machineconfig/settings/television/cable_unix/zsh-history.toml +9 -0
  236. machineconfig/settings/television/cable_windows/alias.toml +7 -0
  237. machineconfig/settings/television/cable_windows/dirs.toml +13 -0
  238. machineconfig/settings/television/cable_windows/docker-images.toml +13 -0
  239. machineconfig/settings/television/cable_windows/dotfiles.toml +11 -0
  240. machineconfig/settings/television/cable_windows/env.toml +17 -0
  241. machineconfig/settings/television/cable_windows/files.toml +14 -0
  242. machineconfig/settings/television/cable_windows/git-branch.toml +11 -0
  243. machineconfig/settings/television/cable_windows/git-diff.toml +10 -0
  244. machineconfig/settings/television/cable_windows/git-log.toml +11 -0
  245. machineconfig/settings/television/cable_windows/git-reflog.toml +11 -0
  246. machineconfig/settings/television/cable_windows/git-repos.toml +15 -0
  247. machineconfig/settings/television/cable_windows/nu-history.toml +7 -0
  248. machineconfig/settings/television/cable_windows/pwsh-history.toml +6 -0
  249. machineconfig/settings/television/cable_windows/text.toml +17 -0
  250. machineconfig/settings/tv/config.toml +234 -0
  251. machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
  252. machineconfig/settings/wsl/.wslconfig +5 -30
  253. machineconfig/settings/wt/__init__.py +0 -0
  254. machineconfig/settings/yazi/init.lua +61 -0
  255. machineconfig/settings/yazi/keymap_linux.toml +94 -0
  256. machineconfig/settings/yazi/keymap_windows.toml +78 -0
  257. machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
  258. machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
  259. machineconfig/settings/yazi/theme.toml +4 -0
  260. machineconfig/settings/yazi/yazi_linux.toml +94 -0
  261. machineconfig/settings/yazi/yazi_windows.toml +58 -0
  262. machineconfig/settings/zellij/layouts/st.kdl +40 -9
  263. machineconfig/settings/zellij/layouts/st2.kdl +1 -1
  264. machineconfig/setup_linux/__init__.py +2 -2
  265. machineconfig/setup_linux/apps_desktop.sh +8 -27
  266. machineconfig/setup_linux/web_shortcuts/interactive.sh +27 -12
  267. machineconfig/setup_linux/web_shortcuts/live_from_github.sh +34 -0
  268. machineconfig/setup_mac/__init__.py +1 -4
  269. machineconfig/setup_mac/apps_gui.sh +248 -0
  270. machineconfig/setup_windows/__init__.py +2 -5
  271. machineconfig/setup_windows/uv.ps1 +8 -1
  272. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -12
  273. machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +31 -0
  274. machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
  275. machineconfig/type_hinting/sql/__init__.py +1 -0
  276. machineconfig/type_hinting/sql/base.py +216 -0
  277. machineconfig/type_hinting/sql/core_schema.py +64 -0
  278. machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
  279. machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
  280. machineconfig/type_hinting/typedict/__init__.py +1 -0
  281. machineconfig/type_hinting/typedict/ast_utils.py +130 -0
  282. machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
  283. machineconfig/type_hinting/typedict/generators.py +231 -0
  284. machineconfig/type_hinting/typedict/polars_schema.py +24 -0
  285. machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
  286. machineconfig/utils/accessories.py +31 -4
  287. machineconfig/utils/code.py +163 -51
  288. machineconfig/utils/files/ascii_art.py +11 -15
  289. machineconfig/utils/files/headers.py +6 -7
  290. machineconfig/utils/files/read.py +8 -1
  291. machineconfig/utils/installer_utils/github_release_bulk.py +95 -138
  292. machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
  293. machineconfig/utils/installer_utils/install_from_url.py +183 -0
  294. machineconfig/utils/installer_utils/installer_class.py +53 -102
  295. machineconfig/utils/installer_utils/installer_cli.py +161 -0
  296. machineconfig/utils/installer_utils/installer_helper.py +129 -0
  297. machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +42 -91
  298. machineconfig/utils/{installer.py → installer_utils/installer_runner.py} +20 -65
  299. machineconfig/utils/io.py +94 -9
  300. machineconfig/utils/links.py +56 -38
  301. machineconfig/utils/meta.py +38 -21
  302. machineconfig/utils/options.py +81 -23
  303. machineconfig/utils/options_utils/__init__.py +0 -0
  304. machineconfig/utils/options_utils/options_tv_linux.py +211 -0
  305. machineconfig/utils/options_utils/options_tv_windows.py +88 -0
  306. machineconfig/utils/options_utils/tv_options.py +37 -0
  307. machineconfig/utils/path_extended.py +52 -102
  308. machineconfig/utils/path_helper.py +76 -23
  309. machineconfig/utils/procs.py +1 -1
  310. machineconfig/utils/scheduler.py +26 -53
  311. machineconfig/utils/scheduling.py +0 -2
  312. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  313. machineconfig/utils/schemas/layouts/layout_types.py +1 -1
  314. machineconfig/utils/source_of_truth.py +6 -1
  315. machineconfig/utils/ssh.py +216 -419
  316. machineconfig/utils/ssh_utils/abc.py +5 -0
  317. machineconfig/utils/ssh_utils/copy_from_here.py +116 -0
  318. machineconfig/utils/ssh_utils/copy_to_here.py +303 -0
  319. machineconfig/utils/ssh_utils/utils.py +158 -0
  320. machineconfig/utils/ssh_utils/wsl.py +147 -0
  321. machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
  322. machineconfig/utils/terminal.py +1 -0
  323. machineconfig/utils/upgrade_packages.py +107 -35
  324. machineconfig/utils/ve.py +12 -4
  325. machineconfig-8.51.dist-info/METADATA +140 -0
  326. machineconfig-8.51.dist-info/RECORD +543 -0
  327. {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/entry_points.txt +4 -1
  328. machineconfig/jobs/installer/check_installations.py +0 -248
  329. machineconfig/jobs/installer/custom/hx.py +0 -140
  330. machineconfig/jobs/installer/linux_scripts/pgsql.sh +0 -41
  331. machineconfig/jobs/installer/linux_scripts/timescaledb.sh +0 -71
  332. machineconfig/jobs/installer/powershell_scripts/archive_pygraphviz.ps1 +0 -12
  333. machineconfig/jobs/installer/powershell_scripts/openssh-server_add_key.ps1 +0 -7
  334. machineconfig/jobs/installer/powershell_scripts/openssh-server_copy-ssh-id.ps1 +0 -14
  335. machineconfig/profile/backup.toml +0 -49
  336. machineconfig/profile/mapper.toml +0 -256
  337. machineconfig/scripts/linux/fzf2g +0 -21
  338. machineconfig/scripts/linux/fzfag +0 -17
  339. machineconfig/scripts/linux/fzffg +0 -25
  340. machineconfig/scripts/linux/fzfrga +0 -21
  341. machineconfig/scripts/linux/mcfgs +0 -38
  342. machineconfig/scripts/linux/other/share_smb +0 -1
  343. machineconfig/scripts/linux/other/switch_ip +0 -20
  344. machineconfig/scripts/linux/skrg +0 -4
  345. machineconfig/scripts/linux/warp-cli.sh +0 -122
  346. machineconfig/scripts/linux/z_ls +0 -104
  347. machineconfig/scripts/python/ai/command_runner/prompt.txt +0 -9
  348. machineconfig/scripts/python/helpers_devops/cli_config.py +0 -120
  349. machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -77
  350. machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
  351. machineconfig/scripts/python/helpers_devops/cli_nw.py +0 -73
  352. machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -181
  353. machineconfig/scripts/python/helpers_devops/cli_self.py +0 -122
  354. machineconfig/scripts/python/helpers_devops/cli_share_server.py +0 -104
  355. machineconfig/scripts/python/helpers_devops/cli_utils.py +0 -221
  356. machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
  357. machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
  358. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py +0 -37
  359. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py +0 -44
  360. machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py +0 -43
  361. machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
  362. machineconfig/scripts/python/helpers_fire/template.sh +0 -15
  363. machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
  364. machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
  365. machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -588
  366. machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +0 -17
  367. machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -76
  368. machineconfig/scripts/python/helpers_repos/secure_repo.py +0 -15
  369. machineconfig/scripts/python/mcfg.py +0 -48
  370. machineconfig/scripts/python/nw/add_ssh_key.py +0 -148
  371. machineconfig/scripts/python/nw/devops_add_identity.py +0 -82
  372. machineconfig/scripts/python/nw/devops_add_ssh_key.py +0 -134
  373. machineconfig/scripts/python/nw/ssh_debug_linux.py +0 -391
  374. machineconfig/scripts/python/nw/ssh_debug_windows.py +0 -338
  375. machineconfig/scripts/python/nw/wsl_windows_transfer.py +0 -66
  376. machineconfig/scripts/windows/fzfb.ps1 +0 -3
  377. machineconfig/scripts/windows/fzfg.ps1 +0 -2
  378. machineconfig/scripts/windows/fzfrga.bat +0 -20
  379. machineconfig/scripts/windows/mcfgs.ps1 +0 -17
  380. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +0 -13
  381. machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
  382. machineconfig/settings/lf/windows/fzf_edit.ps1 +0 -6
  383. machineconfig/settings/lf/windows/tst.ps1 +0 -1
  384. machineconfig/settings/yazi/yazi.toml +0 -4
  385. machineconfig/setup_linux/apps.sh +0 -66
  386. machineconfig/setup_linux/others/cli_installation.sh +0 -137
  387. machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh +0 -30
  388. machineconfig/setup_linux/ssh/openssh_all.sh +0 -25
  389. machineconfig/setup_linux/ssh/openssh_wsl.sh +0 -38
  390. machineconfig/setup_mac/apps.sh +0 -73
  391. machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
  392. machineconfig/setup_windows/apps.ps1 +0 -62
  393. machineconfig/setup_windows/others/obs.ps1 +0 -4
  394. machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
  395. machineconfig/setup_windows/ssh/add_identity.ps1 +0 -11
  396. machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
  397. machineconfig/utils/installer_utils/installer.py +0 -225
  398. machineconfig/utils/tst.py +0 -20
  399. machineconfig-6.82.dist-info/METADATA +0 -82
  400. machineconfig-6.82.dist-info/RECORD +0 -441
  401. machineconfig/jobs/installer/{custom_dev → checks}/__init__.py +0 -0
  402. machineconfig/jobs/installer/linux_scripts/{warp-cli.sh → cloudflare_warp_cli.sh} +0 -0
  403. machineconfig/{scripts/python/helpers_cloud → jobs/installer/python_scripts}/__init__.py +0 -0
  404. machineconfig/jobs/installer/{custom_dev → python_scripts}/alacritty.py +0 -0
  405. machineconfig/jobs/installer/{custom_dev → python_scripts}/bypass_paywall.py +0 -0
  406. machineconfig/jobs/installer/{custom_dev → python_scripts}/cursor.py +0 -0
  407. machineconfig/jobs/installer/{custom_dev → python_scripts}/espanso.py +0 -0
  408. machineconfig/jobs/installer/{custom → python_scripts}/gh.py +0 -0
  409. machineconfig/jobs/installer/{custom_dev → python_scripts}/goes.py +0 -0
  410. machineconfig/jobs/installer/{custom_dev → python_scripts}/lvim.py +0 -0
  411. machineconfig/jobs/installer/{custom_dev → python_scripts}/redis.py +0 -0
  412. machineconfig/{setup_linux/others → jobs/scripts/bash_scripts}/android.sh +0 -0
  413. machineconfig/jobs/{installer/linux_scripts → scripts/bash_scripts}/lid.sh +0 -0
  414. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_drive +0 -0
  415. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_nw_drive +0 -0
  416. machineconfig/{scripts/python/nw → jobs/scripts/bash_scripts}/mount_smb +0 -0
  417. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_cloud.sh +0 -0
  418. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/share_nfs +0 -0
  419. machineconfig/{scripts/linux/other → jobs/scripts/bash_scripts}/start_docker +0 -0
  420. machineconfig/{scripts → jobs/scripts/powershell_scripts}/Restore-ThunderbirdProfile.ps1 +0 -0
  421. machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/docker.ps1 +0 -0
  422. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nfs.ps1 +0 -0
  423. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_nw.ps1 +0 -0
  424. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/mount_smb.ps1 +0 -0
  425. machineconfig/{setup_windows/others → jobs/scripts/powershell_scripts}/power_options.ps1 +0 -0
  426. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_cloud.cmd +0 -0
  427. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/share_smb.ps1 +0 -0
  428. machineconfig/{scripts/windows/mounts → jobs/scripts/powershell_scripts}/unlock_bitlocker.ps1 +0 -0
  429. machineconfig/scripts/python/{helpers_croshell → ai/utils}/__init__.py +0 -0
  430. machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
  431. machineconfig/scripts/python/{helpers_devops → graph}/__init__.py +0 -0
  432. machineconfig/scripts/python/{helpers_devops/themes → helpers}/__init__.py +0 -0
  433. machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
  434. machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
  435. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/__init__.py +0 -0
  436. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/agentic_frameworks/__init__.py +0 -0
  437. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
  438. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
  439. machineconfig/scripts/python/{helpers_fire → helpers/helpers_agents/templates}/template.ps1 +0 -0
  440. machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_cloud}/__init__.py +0 -0
  441. machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +1 -1
  442. /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
  443. /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_croshell}/__init__.py +0 -0
  444. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
  445. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
  446. /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
  447. /machineconfig/scripts/python/{nw → helpers/helpers_devops}/__init__.py +0 -0
  448. /machineconfig/{setup_windows/wt_and_pwsh → scripts/python/helpers/helpers_devops/themes}/__init__.py +0 -0
  449. /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
  450. /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
  451. /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
  452. /machineconfig/scripts/python/{helpers_fire_command/fire_jobs_streamlit_helper.py → helpers/helpers_fire_command/f.py} +0 -0
  453. /machineconfig/{settings/shells/pwsh/profile.ps1 → scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
  454. /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
  455. /machineconfig/{settings/yazi/keymap.toml → scripts/python/helpers/helpers_network/__init__.py} +0 -0
  456. /machineconfig/scripts/python/{nw → helpers/helpers_network}/mount_nw_drive.py +0 -0
  457. /machineconfig/scripts/python/{nw → helpers/helpers_network}/onetimeshare.py +0 -0
  458. /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
  459. /machineconfig/{setup_windows/wt_and_pwsh → settings/wt}/set_wt_settings.py +0 -0
  460. {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/WHEEL +0 -0
  461. {machineconfig-6.82.dist-info → machineconfig-8.51.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,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,81 @@
1
+
2
+ from typing import Literal
3
+
4
+
5
+ def list_available_scripts(where: Literal["all", "a", "private", "p", "public", "b", "library", "l", "dynamic", "d", "custom", "c"]) -> None:
6
+ from pathlib import Path
7
+ from machineconfig.utils.source_of_truth import CONFIG_ROOT, LIBRARY_ROOT, DEFAULTS_PATH
8
+
9
+ private_root = Path.home().joinpath("dotfiles/scripts")
10
+ public_root = CONFIG_ROOT.joinpath("scripts")
11
+ library_root = LIBRARY_ROOT.joinpath("jobs", "scripts")
12
+
13
+ def get_custom_roots() -> list[Path]:
14
+ custom_roots: list[Path] = []
15
+ if DEFAULTS_PATH.is_file():
16
+ from configparser import ConfigParser
17
+ config = ConfigParser()
18
+ config.read(DEFAULTS_PATH)
19
+ if config.has_section("general") and config.has_option("general", "scripts"):
20
+ custom_dirs = config.get("general", "scripts").split(",")
21
+ for custom_dir in custom_dirs:
22
+ custom_path = Path(custom_dir.strip()).expanduser().resolve()
23
+ if custom_path.is_dir():
24
+ custom_roots.append(custom_path)
25
+ return custom_roots
26
+
27
+ locations: dict[str, Path | str] = {}
28
+ match where:
29
+ case "all" | "a":
30
+ locations = {"private": private_root, "public": public_root, "library": library_root}
31
+ for idx, custom in enumerate(get_custom_roots()): locations[f"custom_{idx}"] = custom
32
+ locations["dynamic"] = "https://github.com/thisismygitrepo/machineconfig/tree/main/src/machineconfig/jobs/scripts_dynamic"
33
+ case "private" | "p":
34
+ locations = {"private": private_root}
35
+ case "public" | "b":
36
+ locations = {"public": public_root}
37
+ case "library" | "l":
38
+ locations = {"library": library_root}
39
+ case "dynamic" | "d":
40
+ locations = {"dynamic": "https://github.com/thisismygitrepo/machineconfig/tree/main/src/machineconfig/jobs/scripts_dynamic"}
41
+ case "custom" | "c":
42
+ for idx, custom in enumerate(get_custom_roots()): locations[f"custom_{idx}"] = custom
43
+
44
+ def _print_files_by_type(files: list[str]) -> None:
45
+ categories: dict[str, list[str]] = {".py": [], ".sh": [], ".ps1": [], ".cmd": [], ".bat": [], "other": []}
46
+ for f in files:
47
+ ext = Path(f).suffix.lower() if "." in str(f) else ""
48
+ if ext in categories: categories[ext].append(str(f))
49
+ else: categories["other"].append(str(f))
50
+ for ext, cat_files in categories.items():
51
+ if cat_files:
52
+ label = ext if ext else "other"
53
+ print(f" [{label}]")
54
+ for cf in sorted(cat_files): print(f" • {cf}")
55
+
56
+ for loc_name, loc_path in locations.items():
57
+ print(f"\n📁 {loc_name.upper()} ({loc_path}):")
58
+ print("-" * 60)
59
+ if isinstance(loc_path, Path):
60
+ if loc_path.is_dir():
61
+ files = [f for f in loc_path.rglob("*") if f.is_file() and f.suffix in (".py", ".sh", ".ps1", ".bat", ".cmd", "")]
62
+ if files:
63
+ relative_files = [str(f.relative_to(loc_path)) for f in files]
64
+ _print_files_by_type(relative_files)
65
+ else:
66
+ print(" (empty)")
67
+ else:
68
+ print(" ⚠️ Directory does not exist")
69
+ else:
70
+ api_url = "https://api.github.com/repos/thisismygitrepo/machineconfig/contents/src/machineconfig/jobs/scripts_dynamic"
71
+ try:
72
+ import requests
73
+ response = requests.get(api_url, timeout=10)
74
+ if response.status_code == 200:
75
+ items = response.json()
76
+ files = [item["name"] for item in items if item["type"] == "file"]
77
+ _print_files_by_type(files)
78
+ else:
79
+ print(f" ⚠️ Could not fetch from GitHub (status: {response.status_code})")
80
+ except Exception as e:
81
+ print(f" ⚠️ Could not fetch from GitHub: {e}")
@@ -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,186 @@
1
+ """Pure Python implementations for sessions commands - no typer dependencies."""
2
+
3
+ from typing import Optional, Literal
4
+ from pathlib import Path
5
+
6
+
7
+ def balance_load(
8
+ layout_path: str,
9
+ max_thresh: int,
10
+ thresh_type: Literal["number", "n", "weight", "w"],
11
+ breaking_method: Literal["moreLayouts", "ml", "combineTabs", "ct"],
12
+ output_path: Optional[str],
13
+ ) -> None:
14
+ """Adjust layout file to limit max tabs per layout, etc."""
15
+ thresh_type_resolved: dict[str, Literal["number", "weight"]] = {"number": "number", "n": "number", "weight": "weight", "w": "weight"}
16
+ breaking_method_resolved: dict[str, Literal["moreLayouts", "combineTabs"]] = {"moreLayouts": "moreLayouts", "ml": "moreLayouts", "combineTabs": "combineTabs", "ct": "combineTabs"}
17
+
18
+ layout_path_obj = Path(layout_path).expanduser().absolute()
19
+
20
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile
21
+ import json
22
+ layoutfile: LayoutsFile = json.loads(layout_path_obj.read_text())
23
+ layout_configs = layoutfile["layouts"]
24
+ from machineconfig.cluster.sessions_managers.utils.load_balancer import limit_tab_num
25
+ new_layouts = limit_tab_num(layout_configs=layout_configs, max_thresh=max_thresh, threshold_type=thresh_type_resolved[thresh_type], breaking_method=breaking_method_resolved[breaking_method])
26
+ layoutfile["layouts"] = new_layouts
27
+ target_file = Path(output_path) if output_path is not None else layout_path_obj.parent / f"{layout_path_obj.stem}_adjusted_{max_thresh}_{thresh_type}_{breaking_method}.json"
28
+ target_file.parent.mkdir(parents=True, exist_ok=True)
29
+ target_file.write_text(data=json.dumps(layoutfile, indent=4), encoding="utf-8")
30
+ print(f"Adjusted layout saved to {target_file}")
31
+
32
+
33
+ def select_layout(layouts_json_file: str, selected_layouts_names: Optional[list[str]], select_interactively: bool, subsitute_home: bool) -> list["LayoutConfig"]: # type: ignore[name-defined]
34
+ """Select layout(s) from a layout file."""
35
+ import json
36
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile, LayoutConfig
37
+ json_str = Path(layouts_json_file).read_text(encoding="utf-8")
38
+ if subsitute_home:
39
+ json_str = json_str.replace("~", str(Path.home())).replace("$HOME", str(Path.home()))
40
+ json_str = json_str.replace("""Command": "f """, """Command": "~/.config/machineconfig/scripts/wrap_mcfg fire """)
41
+ json_str = json_str.replace("""Command": "s """, """Command": "~/.config/machineconfig/scripts/wrap_mcfg sessions """)
42
+
43
+ try:
44
+ # src/machineconfig/utils/io.py
45
+ layout_file: LayoutsFile = json.loads(json_str)
46
+ except Exception:
47
+ print(f"Failed to parse the json file {layouts_json_file}, trying to clean the comments and giving it another shot ... ")
48
+ from machineconfig.utils.io import remove_c_style_comments
49
+ json_str = remove_c_style_comments(json_str)
50
+ # print(json_str)
51
+ layout_file: LayoutsFile = json.loads(json_str)
52
+
53
+ if len(layout_file["layouts"]) == 0:
54
+ raise ValueError(f"No layouts found in {layouts_json_file}")
55
+ if selected_layouts_names is None:
56
+ if not select_interactively:
57
+ return layout_file["layouts"]
58
+ options = [layout["layoutName"] for layout in layout_file["layouts"]]
59
+ from machineconfig.utils.options import choose_from_options
60
+ selected_layouts_names = choose_from_options(multi=True, options=options, prompt="Choose a layout configuration:", tv=True, msg="Choose one option")
61
+ print(f"Selected layout(s): {selected_layouts_names}")
62
+ layouts_chosen: list[LayoutConfig] = []
63
+ for name in selected_layouts_names:
64
+ layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"] == name), None)
65
+ if layout_chosen is None:
66
+ layout_chosen = next((layout for layout in layout_file["layouts"] if layout["layoutName"].lower() == name.lower()), None)
67
+ if layout_chosen is None:
68
+ available_layouts = [layout["layoutName"] for layout in layout_file["layouts"]]
69
+ raise ValueError(f"Layout '{name}' not found. Available layouts: {available_layouts}")
70
+ layouts_chosen.append(layout_chosen)
71
+ return layouts_chosen
72
+
73
+
74
+ def find_layout_file(layout_path: str) -> str:
75
+ """Find layout file from a path."""
76
+ from machineconfig.utils.path_helper import search_for_files_of_interest, match_file_name, sanitize_path
77
+ from machineconfig.utils.options import choose_from_options
78
+ path_obj = sanitize_path(layout_path)
79
+ if not path_obj.exists():
80
+ choice_file = match_file_name(sub_string=layout_path, search_root=Path.cwd(), suffixes={".json"})
81
+ elif path_obj.is_dir():
82
+ print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
83
+ files = search_for_files_of_interest(path_obj, suffixes={".py", ".sh", ".ps1"})
84
+ print(f"🔍 Got #{len(files)} results.")
85
+ choice_file = choose_from_options(multi=False, options=files, tv=True, msg="Choose one option")
86
+ choice_file = Path(choice_file).expanduser().absolute()
87
+ else:
88
+ choice_file = path_obj
89
+ return str(choice_file)
90
+
91
+
92
+ def run_layouts(
93
+ layout_path: Optional[str],
94
+ max_tabs: int,
95
+ max_layouts: int,
96
+ sleep_inbetween: float,
97
+ monitor: bool,
98
+ parallel: bool,
99
+ kill_upon_completion: bool,
100
+ choose: Optional[str],
101
+ choose_interactively: bool,
102
+ subsitute_home: bool,
103
+ ) -> None:
104
+ """Launch terminal sessions based on a layout configuration file."""
105
+ if layout_path is None:
106
+ raise ValueError("layout_path is required")
107
+
108
+ layout_path_resolved = find_layout_file(layout_path=layout_path)
109
+ layouts_selected = select_layout(layouts_json_file=layout_path_resolved, selected_layouts_names=choose.split(",") if choose else None, select_interactively=choose_interactively, subsitute_home=subsitute_home)
110
+
111
+ if parallel and len(layouts_selected) > max_layouts:
112
+ raise ValueError(f"Number of layouts {len(layouts_selected)} exceeds the maximum allowed {max_layouts}. Please adjust your layout file.")
113
+ for a_layout in layouts_selected:
114
+ if len(a_layout["layoutTabs"]) > max_tabs:
115
+ raise ValueError(f"Layout '{a_layout.get('layoutName', 'Unnamed')}' has {len(a_layout['layoutTabs'])} tabs which exceeds the max of {max_tabs}.")
116
+
117
+ import time
118
+ import platform
119
+ if platform.system() == "Linux" or platform.system() == "Darwin":
120
+ from machineconfig.cluster.sessions_managers.zellij_local_manager import ZellijLocalManager
121
+ if not parallel:
122
+ iterable = [[item] for item in layouts_selected]
123
+ else:
124
+ iterable = [layouts_selected]
125
+ for i, a_layouts in enumerate(iterable):
126
+ manager = ZellijLocalManager(session_layouts=a_layouts)
127
+ manager.start_all_sessions(poll_interval=2, poll_seconds=2)
128
+ if monitor:
129
+ manager.run_monitoring_routine(wait_ms=2000)
130
+ if kill_upon_completion:
131
+ manager.kill_all_sessions()
132
+ if i < len(layouts_selected) - 1:
133
+ time.sleep(sleep_inbetween)
134
+ elif platform.system() == "Windows":
135
+ from machineconfig.cluster.sessions_managers.wt_local_manager import WTLocalManager
136
+ if not parallel:
137
+ iterable = [[item] for item in layouts_selected]
138
+ else:
139
+ iterable = [layouts_selected]
140
+ for i, a_layouts in enumerate(iterable):
141
+ manager = WTLocalManager(session_layouts=a_layouts)
142
+ manager.start_all_sessions()
143
+ if monitor:
144
+ manager.run_monitoring_routine(wait_ms=2000)
145
+ if kill_upon_completion:
146
+ manager.kill_all_sessions()
147
+ if i < len(layouts_selected) - 1:
148
+ time.sleep(sleep_inbetween)
149
+ else:
150
+ print(f"❌ Unsupported platform: {platform.system()}")
151
+
152
+
153
+ def create_template(name: Optional[str], num_tabs: int) -> None:
154
+ """Create a layout template file."""
155
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutsFile, TabConfig, LayoutConfig
156
+ tabs: list[TabConfig] = []
157
+ for i in range(1, num_tabs + 1):
158
+ tab: TabConfig = {
159
+ "tabName": f"Tab{i}",
160
+ "startDir": "~/" + str(Path.cwd().relative_to(Path.home())),
161
+ "command": "bash",
162
+ }
163
+ tabs.append(tab)
164
+ layouts: list[LayoutConfig] = [
165
+ {
166
+ "layoutName": f"{Path.cwd().name}Layout",
167
+ "layoutTabs": tabs,
168
+ }
169
+ ]
170
+ file: LayoutsFile = {
171
+ "$schema": "https://bit.ly/cfglayout", # type: ignore
172
+ "version": "0.1",
173
+ "layouts": layouts,
174
+ }
175
+ import json
176
+ json_string = json.dumps(file, indent=4)
177
+ if name is None:
178
+ layout_path = Path.cwd() / "layout.json"
179
+ else:
180
+ layout_path = Path.cwd() / (name.replace(".json", "") + ".json")
181
+ layout_path.parent.mkdir(parents=True, exist_ok=True)
182
+ if layout_path.exists():
183
+ print(f"❌ File {layout_path} already exists. Aborting to avoid overwriting.")
184
+ return
185
+ layout_path.write_text(json_string, encoding="utf-8")
186
+ print(f"✅ Created layout template at {layout_path}")