machineconfig 3.7__py3-none-any.whl → 7.69__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/__init__.py +0 -28
- machineconfig/cluster/remote/distribute.py +0 -1
- machineconfig/cluster/remote/file_manager.py +0 -2
- machineconfig/cluster/remote/script_execution.py +1 -2
- machineconfig/cluster/sessions_managers/{enhanced_command_runner.py → helpers/enhanced_command_runner.py} +4 -6
- machineconfig/cluster/sessions_managers/helpers/load_balancer_helper.py +145 -0
- machineconfig/cluster/sessions_managers/utils/load_balancer.py +53 -0
- machineconfig/cluster/sessions_managers/utils/maker.py +69 -0
- machineconfig/cluster/sessions_managers/wt_local.py +128 -330
- machineconfig/cluster/sessions_managers/wt_local_manager.py +53 -187
- machineconfig/cluster/sessions_managers/wt_remote.py +51 -43
- machineconfig/cluster/sessions_managers/wt_remote_manager.py +49 -197
- machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py +6 -19
- machineconfig/cluster/sessions_managers/wt_utils/manager_persistence.py +52 -0
- machineconfig/cluster/sessions_managers/wt_utils/monitoring_helpers.py +50 -0
- machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py +4 -2
- machineconfig/cluster/sessions_managers/wt_utils/status_reporting.py +76 -0
- machineconfig/cluster/sessions_managers/wt_utils/wt_helpers.py +199 -0
- machineconfig/cluster/sessions_managers/zellij_local.py +81 -375
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +22 -172
- machineconfig/cluster/sessions_managers/zellij_remote.py +40 -41
- machineconfig/cluster/sessions_managers/zellij_remote_manager.py +13 -10
- machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py +4 -8
- machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py +5 -20
- machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py +3 -9
- machineconfig/cluster/sessions_managers/zellij_utils/status_reporter.py +3 -1
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper.py +298 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_restart.py +77 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_helper_with_panes.py +228 -0
- machineconfig/cluster/sessions_managers/zellij_utils/zellij_local_manager_helper.py +165 -0
- machineconfig/jobs/{python → installer}/check_installations.py +7 -21
- machineconfig/jobs/installer/custom/boxes.py +61 -0
- machineconfig/jobs/installer/custom/gh.py +128 -0
- machineconfig/jobs/{python_custom_installers → installer/custom}/hx.py +84 -18
- machineconfig/jobs/installer/custom_dev/alacritty.py +86 -0
- machineconfig/jobs/installer/custom_dev/brave.py +82 -0
- machineconfig/jobs/installer/custom_dev/bypass_paywall.py +59 -0
- machineconfig/jobs/installer/custom_dev/cloudflare_warp_cli.py +23 -0
- machineconfig/jobs/installer/custom_dev/code.py +63 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/cursor.py +7 -7
- machineconfig/jobs/installer/custom_dev/dubdb_adbc.py +30 -0
- machineconfig/jobs/installer/custom_dev/espanso.py +117 -0
- machineconfig/jobs/installer/custom_dev/goes.py +68 -0
- machineconfig/jobs/installer/custom_dev/lvim.py +89 -0
- machineconfig/jobs/installer/custom_dev/nerdfont.py +111 -0
- machineconfig/jobs/installer/custom_dev/nerfont_windows_helper.py +149 -0
- machineconfig/jobs/installer/custom_dev/redis.py +88 -0
- machineconfig/jobs/installer/custom_dev/sysabc.py +145 -0
- machineconfig/jobs/installer/custom_dev/wezterm.py +92 -0
- machineconfig/jobs/{python_custom_installers/dev → installer/custom_dev}/winget.py +2 -3
- machineconfig/jobs/installer/installer_data.json +3440 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/brave.sh +4 -14
- machineconfig/jobs/{python_custom_installers/scripts/linux/warp-cli.sh → installer/linux_scripts/cloudflare_warp_cli.sh} +5 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/docker.sh +6 -18
- machineconfig/jobs/installer/linux_scripts/docker_start.sh +37 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/edge.sh +3 -11
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/lid.sh +2 -8
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/nerdfont.sh +5 -17
- machineconfig/jobs/{linux/msc → installer/linux_scripts}/network.sh +2 -8
- machineconfig/jobs/installer/linux_scripts/ngrok.sh +6 -0
- machineconfig/jobs/installer/linux_scripts/q.sh +9 -0
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/redis.sh +6 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/vscode.sh +5 -17
- machineconfig/jobs/{python_custom_installers/scripts/linux → installer/linux_scripts}/wezterm.sh +4 -12
- machineconfig/jobs/installer/package_groups.py +255 -0
- machineconfig/logger.py +0 -1
- machineconfig/profile/backup.toml +49 -0
- machineconfig/profile/bash_shell_profiles.md +11 -0
- machineconfig/profile/create_helper.py +74 -0
- machineconfig/profile/create_links.py +288 -0
- machineconfig/profile/create_links_export.py +100 -0
- machineconfig/profile/create_shell_profile.py +136 -0
- machineconfig/profile/mapper.toml +258 -0
- machineconfig/scripts/__init__.py +0 -4
- machineconfig/scripts/linux/{share_cloud.sh → other/share_cloud.sh} +14 -25
- machineconfig/scripts/linux/wrap_mcfg +47 -0
- machineconfig/scripts/nu/wrap_mcfg.nu +69 -0
- machineconfig/scripts/python/agents.py +198 -0
- machineconfig/scripts/python/ai/command_runner/command_runner.sh +9 -0
- machineconfig/scripts/python/ai/command_runner/prompt.txt +9 -0
- machineconfig/scripts/python/ai/generate_files.py +307 -42
- machineconfig/scripts/python/ai/{mcinit.py → initai.py} +3 -38
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +114 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +88 -22
- machineconfig/scripts/python/ai/solutions/_shared.py +9 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +4 -1
- machineconfig/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +16 -0
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +1 -1
- machineconfig/scripts/python/ai/solutions/generic.py +27 -4
- machineconfig/scripts/python/ai/vscode_tasks.py +37 -0
- machineconfig/scripts/python/cloud.py +29 -0
- machineconfig/scripts/python/croshell.py +129 -198
- machineconfig/scripts/python/define.py +31 -0
- machineconfig/scripts/python/devops.py +45 -131
- machineconfig/scripts/python/devops_navigator.py +6 -0
- machineconfig/scripts/python/env_manager/__init__.py +1 -0
- machineconfig/scripts/python/env_manager/path_manager_backend.py +47 -0
- machineconfig/scripts/python/env_manager/path_manager_tui.py +228 -0
- machineconfig/scripts/python/fire_jobs.py +166 -235
- machineconfig/scripts/python/ftpx.py +164 -100
- machineconfig/scripts/python/helpers/ast_search.py +74 -0
- machineconfig/scripts/python/helpers/repo_rag.py +325 -0
- machineconfig/scripts/python/helpers/symantic_search.py +25 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json +14 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py +37 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py +22 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py +42 -0
- machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py +30 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py +110 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py +34 -0
- machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py +22 -0
- machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
- machineconfig/scripts/python/helpers_agents/templates/template.ps1 +14 -0
- machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
- machineconfig/scripts/python/{cloud_copy.py → helpers_cloud/cloud_copy.py} +52 -39
- machineconfig/scripts/python/{cloud_mount.py → helpers_cloud/cloud_mount.py} +13 -18
- machineconfig/scripts/python/helpers_cloud/cloud_sync.py +81 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/helpers2.py +3 -3
- machineconfig/scripts/python/helpers_croshell/crosh.py +39 -0
- machineconfig/scripts/python/{scheduler.py → helpers_croshell/scheduler.py} +0 -1
- machineconfig/scripts/python/{start_slidev.py → helpers_croshell/start_slidev.py} +32 -20
- machineconfig/scripts/python/helpers_devops/cli_config.py +95 -0
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +89 -0
- machineconfig/scripts/python/helpers_devops/cli_data.py +25 -0
- machineconfig/scripts/python/helpers_devops/cli_nw.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_repos.py +182 -0
- machineconfig/scripts/python/helpers_devops/cli_self.py +134 -0
- machineconfig/scripts/python/helpers_devops/cli_share_file.py +137 -0
- machineconfig/scripts/python/helpers_devops/cli_share_server.py +141 -0
- machineconfig/scripts/python/helpers_devops/cli_terminal.py +156 -0
- machineconfig/scripts/python/helpers_devops/cli_utils.py +96 -0
- machineconfig/scripts/python/{devops_backup_retrieve.py → helpers_devops/devops_backup_retrieve.py} +7 -10
- machineconfig/scripts/python/helpers_devops/devops_status.py +511 -0
- machineconfig/scripts/python/helpers_devops/devops_update_repos.py +269 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1 +81 -0
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +3 -0
- machineconfig/scripts/python/{choose_wezterm_theme.py → helpers_devops/themes/choose_wezterm_theme.py} +2 -2
- machineconfig/scripts/python/{cloud_manager.py → helpers_fire_command/cloud_manager.py} +0 -2
- machineconfig/scripts/python/{helpers/helpers4.py → helpers_fire_command/file_wrangler.py} +57 -89
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py +145 -0
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +110 -0
- machineconfig/scripts/python/helpers_msearch/__init__.py +5 -0
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfag +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfg +1 -1
- machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/fzfrga +1 -1
- machineconfig/scripts/python/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers_navigator/command_builder.py +111 -0
- machineconfig/scripts/python/helpers_navigator/command_detail.py +44 -0
- machineconfig/scripts/python/helpers_navigator/command_tree.py +620 -0
- machineconfig/scripts/python/helpers_navigator/data_models.py +28 -0
- machineconfig/scripts/python/helpers_navigator/main_app.py +272 -0
- machineconfig/scripts/python/helpers_navigator/search_bar.py +15 -0
- machineconfig/scripts/python/helpers_repos/action.py +209 -0
- machineconfig/scripts/python/helpers_repos/action_helper.py +150 -0
- machineconfig/scripts/python/{repos_helper_clone.py → helpers_repos/clone.py} +6 -7
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +218 -0
- machineconfig/scripts/python/helpers_repos/count_lines.py +348 -0
- machineconfig/scripts/python/helpers_repos/count_lines_frontend.py +17 -0
- machineconfig/scripts/python/helpers_repos/entrypoint.py +77 -0
- machineconfig/scripts/python/helpers_repos/grource.py +340 -0
- machineconfig/scripts/python/{repos_helper_record.py → helpers_repos/record.py} +7 -4
- machineconfig/scripts/python/helpers_repos/sync.py +66 -0
- machineconfig/scripts/python/{repos_helper_update.py → helpers_repos/update.py} +3 -3
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +58 -0
- machineconfig/scripts/python/helpers_utils/download.py +152 -0
- machineconfig/scripts/python/helpers_utils/path.py +108 -0
- machineconfig/scripts/python/interactive.py +187 -0
- machineconfig/scripts/python/mcfg_entry.py +63 -0
- machineconfig/scripts/python/msearch.py +40 -0
- machineconfig/scripts/python/{devops_add_identity.py → nw/devops_add_identity.py} +1 -3
- machineconfig/scripts/python/{devops_add_ssh_key.py → nw/devops_add_ssh_key.py} +74 -44
- machineconfig/scripts/{linux → python/nw}/mount_nfs +1 -1
- machineconfig/scripts/python/{mount_nfs.py → nw/mount_nfs.py} +19 -16
- machineconfig/scripts/{linux → python/nw}/mount_nw_drive +1 -2
- machineconfig/scripts/python/{mount_ssh.py → nw/mount_ssh.py} +7 -8
- machineconfig/scripts/python/{onetimeshare.py → nw/onetimeshare.py} +0 -1
- machineconfig/scripts/python/nw/ssh_debug_linux.py +391 -0
- machineconfig/scripts/python/nw/ssh_debug_windows.py +338 -0
- machineconfig/scripts/python/{wifi_conn.py → nw/wifi_conn.py} +1 -51
- machineconfig/scripts/python/nw/wsl_windows_transfer.py +67 -0
- machineconfig/scripts/python/sessions.py +167 -0
- machineconfig/scripts/python/terminal.py +127 -0
- machineconfig/scripts/python/utils.py +66 -0
- machineconfig/scripts/windows/mounts/Restore-ThunderbirdProfile.ps1 +92 -0
- machineconfig/scripts/windows/{mount_nfs.ps1 → mounts/mount_nfs.ps1} +1 -3
- machineconfig/scripts/windows/{mount_ssh.ps1 → mounts/mount_ssh.ps1} +1 -1
- machineconfig/scripts/windows/{share_smb.ps1 → mounts/share_smb.ps1} +0 -6
- machineconfig/scripts/windows/wrap_mcfg.ps1 +60 -0
- machineconfig/settings/broot/br.sh +0 -4
- machineconfig/settings/broot/conf.toml +1 -1
- machineconfig/settings/helix/config.toml +16 -0
- machineconfig/settings/helix/languages.toml +13 -4
- machineconfig/settings/helix/yazi-picker.sh +12 -0
- machineconfig/settings/lf/linux/exe/lfcd.sh +1 -0
- machineconfig/settings/lf/linux/exe/previewer.sh +9 -3
- machineconfig/settings/lf/linux/lfrc +10 -12
- machineconfig/settings/lf/windows/fzf_edit.ps1 +2 -2
- machineconfig/settings/lf/windows/lfcd.ps1 +1 -1
- machineconfig/settings/lf/windows/lfrc +18 -38
- machineconfig/settings/lf/windows/mkfile.ps1 +1 -1
- machineconfig/settings/linters/.ruff.toml +1 -1
- machineconfig/settings/lvim/windows/archive/config_additional.lua +0 -6
- machineconfig/settings/marimo/marimo.toml +80 -0
- machineconfig/settings/marimo/snippets/globalize.py +34 -0
- machineconfig/settings/pistol/pistol.conf +1 -1
- machineconfig/settings/shells/bash/init.sh +55 -31
- machineconfig/settings/shells/nushell/config.nu +1 -34
- machineconfig/settings/shells/nushell/init.nu +127 -0
- machineconfig/settings/shells/pwsh/init.ps1 +61 -43
- machineconfig/settings/shells/starship/starship.toml +16 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +2 -0
- machineconfig/settings/shells/wt/settings.json +32 -17
- machineconfig/settings/shells/zsh/init.sh +89 -0
- machineconfig/settings/svim/linux/init.toml +0 -4
- machineconfig/settings/svim/windows/init.toml +0 -3
- machineconfig/settings/yazi/init.lua +57 -0
- machineconfig/settings/yazi/keymap_linux.toml +79 -0
- machineconfig/settings/yazi/keymap_windows.toml +78 -0
- machineconfig/settings/yazi/shell/yazi_cd.ps1 +33 -0
- machineconfig/settings/yazi/shell/yazi_cd.sh +8 -0
- machineconfig/settings/yazi/yazi.toml +14 -1
- machineconfig/setup_linux/__init__.py +10 -0
- machineconfig/setup_linux/apps_desktop.sh +89 -0
- machineconfig/setup_linux/apps_gui.sh +64 -0
- machineconfig/setup_linux/{nix → others}/cli_installation.sh +9 -29
- machineconfig/setup_linux/ssh/openssh_all.sh +25 -0
- machineconfig/setup_linux/ssh/openssh_wsl.sh +38 -0
- machineconfig/setup_linux/uv.sh +15 -0
- machineconfig/setup_linux/web_shortcuts/interactive.sh +28 -203
- machineconfig/setup_mac/__init__.py +16 -0
- machineconfig/setup_mac/apps_gui.sh +248 -0
- machineconfig/setup_mac/ssh/openssh_setup.sh +114 -0
- machineconfig/setup_mac/uv.sh +36 -0
- machineconfig/setup_windows/__init__.py +8 -0
- machineconfig/setup_windows/others/power_options.ps1 +7 -0
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +29 -0
- machineconfig/setup_windows/ssh/add_identity.ps1 +11 -0
- machineconfig/setup_windows/ssh/openssh-server.ps1 +37 -0
- machineconfig/setup_windows/uv.ps1 +17 -0
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +28 -189
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +17 -0
- machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py +37 -23
- machineconfig/utils/accessories.py +52 -12
- machineconfig/utils/cloud/onedrive/README.md +139 -0
- machineconfig/utils/code.py +140 -93
- machineconfig/utils/files/art/fat_croco.txt +10 -0
- machineconfig/utils/files/art/halfwit_croco.txt +9 -0
- machineconfig/utils/files/art/happy_croco.txt +22 -0
- machineconfig/utils/files/art/water_croco.txt +11 -0
- machineconfig/utils/files/ascii_art.py +118 -0
- machineconfig/utils/files/dbms.py +257 -0
- machineconfig/utils/files/headers.py +68 -0
- machineconfig/utils/files/ouch/decompress.py +45 -0
- machineconfig/utils/files/read.py +95 -0
- machineconfig/utils/installer_utils/github_release_bulk.py +188 -0
- machineconfig/utils/installer_utils/install_from_url.py +180 -0
- machineconfig/utils/installer_utils/installer_class.py +239 -316
- machineconfig/utils/installer_utils/installer_cli.py +186 -0
- machineconfig/utils/installer_utils/{installer_abc.py → installer_locator_utils.py} +90 -5
- machineconfig/utils/installer_utils/installer_runner.py +191 -0
- machineconfig/utils/io.py +77 -24
- machineconfig/utils/links.py +309 -100
- machineconfig/utils/meta.py +255 -0
- machineconfig/utils/notifications.py +1 -1
- machineconfig/utils/options.py +19 -47
- machineconfig/utils/path_extended.py +111 -121
- machineconfig/utils/path_helper.py +75 -22
- machineconfig/utils/procs.py +50 -74
- machineconfig/utils/scheduler.py +94 -97
- machineconfig/utils/scheduling.py +0 -3
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +5 -17
- machineconfig/utils/schemas/installer/installer_types.py +28 -6
- machineconfig/utils/schemas/layouts/layout_types.py +34 -1
- machineconfig/utils/source_of_truth.py +3 -6
- machineconfig/utils/ssh.py +742 -254
- machineconfig/utils/ssh_utils/utils.py +0 -0
- machineconfig/utils/terminal.py +3 -140
- machineconfig/utils/tst.py +20 -0
- machineconfig/utils/upgrade_packages.py +109 -28
- machineconfig/utils/ve.py +13 -5
- machineconfig-7.69.dist-info/METADATA +124 -0
- machineconfig-7.69.dist-info/RECORD +454 -0
- machineconfig-7.69.dist-info/entry_points.txt +15 -0
- machineconfig/cluster/templates/cli_click.py +0 -102
- machineconfig/cluster/templates/cli_gooey.py +0 -115
- machineconfig/cluster/templates/utils.py +0 -51
- machineconfig/jobs/linux/msc/cli_agents.sh +0 -32
- machineconfig/jobs/python/create_bootable_media.py +0 -16
- machineconfig/jobs/python/python_cargo_build_share.py +0 -59
- machineconfig/jobs/python/python_ve_symlink.py +0 -29
- machineconfig/jobs/python/tasks.py +0 -3
- machineconfig/jobs/python/vscode/api.py +0 -48
- machineconfig/jobs/python/vscode/link_ve.py +0 -63
- machineconfig/jobs/python/vscode/select_interpreter.py +0 -87
- machineconfig/jobs/python/vscode/sync_code.py +0 -58
- machineconfig/jobs/python_custom_installers/archive/ngrok.py +0 -63
- machineconfig/jobs/python_custom_installers/dev/aider.py +0 -37
- machineconfig/jobs/python_custom_installers/dev/alacritty.py +0 -65
- machineconfig/jobs/python_custom_installers/dev/brave.py +0 -71
- machineconfig/jobs/python_custom_installers/dev/bypass_paywall.py +0 -50
- machineconfig/jobs/python_custom_installers/dev/code.py +0 -51
- machineconfig/jobs/python_custom_installers/dev/docker_desktop.py +0 -78
- machineconfig/jobs/python_custom_installers/dev/espanso.py +0 -90
- machineconfig/jobs/python_custom_installers/dev/goes.py +0 -55
- machineconfig/jobs/python_custom_installers/dev/lvim.py +0 -77
- machineconfig/jobs/python_custom_installers/dev/nerdfont.py +0 -68
- machineconfig/jobs/python_custom_installers/dev/redis.py +0 -65
- machineconfig/jobs/python_custom_installers/dev/reverse_proxy.md +0 -31
- machineconfig/jobs/python_custom_installers/dev/wezterm.py +0 -70
- machineconfig/jobs/python_custom_installers/docker.py +0 -74
- machineconfig/jobs/python_custom_installers/gh.py +0 -97
- machineconfig/jobs/python_custom_installers/scripts/linux/docker_start.sh +0 -45
- machineconfig/jobs/python_custom_installers/scripts/linux/pgsql.sh +0 -49
- machineconfig/jobs/python_custom_installers/scripts/linux/timescaledb.sh +0 -85
- machineconfig/jobs/python_custom_installers/warp-cli.py +0 -71
- machineconfig/jobs/python_generic_installers/config.json +0 -603
- machineconfig/jobs/python_generic_installers/config.json.bak +0 -414
- machineconfig/jobs/python_generic_installers/dev/config.archive.json +0 -18
- machineconfig/jobs/python_generic_installers/dev/config.json +0 -825
- machineconfig/jobs/python_generic_installers/dev/config.json.bak +0 -565
- machineconfig/jobs/python_linux_installers/archive/config.json +0 -18
- machineconfig/jobs/python_linux_installers/archive/config.json.bak +0 -10
- machineconfig/jobs/python_linux_installers/config.json +0 -145
- machineconfig/jobs/python_linux_installers/config.json.bak +0 -110
- machineconfig/jobs/python_linux_installers/dev/config.json +0 -276
- machineconfig/jobs/python_linux_installers/dev/config.json.bak +0 -206
- machineconfig/jobs/python_windows_installers/archive/file.json +0 -11
- machineconfig/jobs/python_windows_installers/config.json +0 -82
- machineconfig/jobs/python_windows_installers/config.json.bak +0 -56
- machineconfig/jobs/python_windows_installers/dev/config.json +0 -4
- machineconfig/jobs/python_windows_installers/dev/config.json.bak +0 -3
- machineconfig/jobs/windows/archive/archive_pygraphviz.ps1 +0 -14
- machineconfig/jobs/windows/start_terminal.ps1 +0 -6
- machineconfig/jobs/windows/startup_file.cmd +0 -2
- machineconfig/profile/create.py +0 -169
- machineconfig/profile/shell.py +0 -176
- machineconfig/scripts/cloud/init.sh +0 -119
- machineconfig/scripts/linux/choose_wezterm_theme +0 -3
- machineconfig/scripts/linux/cloud_copy +0 -2
- machineconfig/scripts/linux/cloud_mount +0 -2
- machineconfig/scripts/linux/cloud_repo_sync +0 -2
- machineconfig/scripts/linux/cloud_sync +0 -2
- machineconfig/scripts/linux/croshell +0 -3
- machineconfig/scripts/linux/devops +0 -2
- machineconfig/scripts/linux/fire +0 -2
- machineconfig/scripts/linux/fire_agents +0 -2
- machineconfig/scripts/linux/ftpx +0 -2
- machineconfig/scripts/linux/fzf2g +0 -21
- machineconfig/scripts/linux/fzffg +0 -25
- machineconfig/scripts/linux/gh_models +0 -2
- machineconfig/scripts/linux/kill_process +0 -2
- machineconfig/scripts/linux/mcinit +0 -2
- machineconfig/scripts/linux/programs +0 -21
- machineconfig/scripts/linux/repos +0 -2
- machineconfig/scripts/linux/scheduler +0 -2
- machineconfig/scripts/linux/share_smb +0 -1
- machineconfig/scripts/linux/start_slidev +0 -2
- machineconfig/scripts/linux/start_terminals +0 -3
- machineconfig/scripts/linux/warp-cli.sh +0 -122
- machineconfig/scripts/linux/wifi_conn +0 -2
- machineconfig/scripts/linux/z_ls +0 -104
- machineconfig/scripts/python/ai/solutions/copilot/prompts/allLintersAndTypeCheckers.prompt.md +0 -5
- machineconfig/scripts/python/archive/im2text.py +0 -34
- machineconfig/scripts/python/archive/tmate_conn.py +0 -41
- machineconfig/scripts/python/archive/tmate_start.py +0 -44
- machineconfig/scripts/python/cloud_repo_sync.py +0 -192
- machineconfig/scripts/python/cloud_sync.py +0 -85
- machineconfig/scripts/python/devops_devapps_install.py +0 -202
- machineconfig/scripts/python/devops_update_repos.py +0 -180
- machineconfig/scripts/python/dotfile.py +0 -52
- machineconfig/scripts/python/fire_agents.py +0 -176
- machineconfig/scripts/python/fire_agents_help_launch.py +0 -143
- machineconfig/scripts/python/fire_agents_load_balancer.py +0 -50
- machineconfig/scripts/python/fire_jobs_args_helper.py +0 -84
- machineconfig/scripts/python/fire_jobs_layout_helper.py +0 -66
- machineconfig/scripts/python/get_zellij_cmd.py +0 -15
- machineconfig/scripts/python/gh_models.py +0 -104
- machineconfig/scripts/python/helpers/repo_sync_helpers.py +0 -114
- machineconfig/scripts/python/repos.py +0 -160
- machineconfig/scripts/python/snapshot.py +0 -25
- machineconfig/scripts/python/start_terminals.py +0 -121
- machineconfig/scripts/python/wsl_windows_transfer.py +0 -72
- machineconfig/scripts/windows/choose_wezterm_theme.ps1 +0 -1
- machineconfig/scripts/windows/cloud_copy.ps1 +0 -1
- machineconfig/scripts/windows/cloud_mount.ps1 +0 -1
- machineconfig/scripts/windows/cloud_repo_sync.ps1 +0 -1
- machineconfig/scripts/windows/cloud_sync.ps1 +0 -1
- machineconfig/scripts/windows/croshell.ps1 +0 -1
- machineconfig/scripts/windows/devops.ps1 +0 -1
- machineconfig/scripts/windows/dotfile.ps1 +0 -1
- machineconfig/scripts/windows/fire.ps1 +0 -1
- machineconfig/scripts/windows/ftpx.ps1 +0 -1
- machineconfig/scripts/windows/gpt.ps1 +0 -1
- machineconfig/scripts/windows/grep.ps1 +0 -2
- machineconfig/scripts/windows/kill_process.ps1 +0 -1
- machineconfig/scripts/windows/mcinit.ps1 +0 -1
- machineconfig/scripts/windows/nano.ps1 +0 -3
- machineconfig/scripts/windows/pomodoro.ps1 +0 -1
- machineconfig/scripts/windows/reload_path.ps1 +0 -3
- machineconfig/scripts/windows/repos.ps1 +0 -1
- machineconfig/scripts/windows/scheduler.ps1 +0 -1
- machineconfig/scripts/windows/snapshot.ps1 +0 -1
- machineconfig/scripts/windows/start_slidev.ps1 +0 -1
- machineconfig/scripts/windows/start_terminals.ps1 +0 -1
- machineconfig/scripts/windows/wifi_conn.ps1 +0 -2
- machineconfig/scripts/windows/wsl_rdp_windows_port_forwarding.ps1 +0 -46
- machineconfig/scripts/windows/wsl_ssh_windows_port_forwarding.ps1 +0 -76
- machineconfig/settings/lf/linux/exe/fzf_nano.sh +0 -16
- machineconfig/setup_linux/others/openssh-server_add_pub_key.sh +0 -57
- machineconfig/setup_linux/web_shortcuts/ascii_art.sh +0 -93
- machineconfig/setup_linux/web_shortcuts/croshell.sh +0 -11
- machineconfig/setup_linux/web_shortcuts/ssh.sh +0 -52
- machineconfig/setup_windows/web_shortcuts/all.ps1 +0 -18
- machineconfig/setup_windows/web_shortcuts/ascii_art.ps1 +0 -36
- machineconfig/setup_windows/web_shortcuts/croshell.ps1 +0 -16
- machineconfig/setup_windows/web_shortcuts/ssh.ps1 +0 -11
- machineconfig/setup_windows/wt_and_pwsh/install_nerd_fonts.py +0 -100
- machineconfig/utils/ai/generate_file_checklist.py +0 -68
- machineconfig/utils/installer.py +0 -255
- machineconfig-3.7.dist-info/METADATA +0 -165
- machineconfig-3.7.dist-info/RECORD +0 -432
- machineconfig-3.7.dist-info/entry_points.txt +0 -18
- machineconfig/cluster/{templates → remote}/run_cloud.py +0 -0
- machineconfig/cluster/{templates → remote}/run_cluster.py +0 -0
- machineconfig/cluster/{templates → remote}/run_remote.py +0 -0
- machineconfig/jobs/{python → installer}/__init__.py +0 -0
- machineconfig/jobs/{python_custom_installers → installer/custom_dev}/__init__.py +0 -0
- machineconfig/{setup_windows/wt_and_pwsh → jobs/installer/powershell_scripts}/install_fonts.ps1 +0 -0
- machineconfig/scripts/linux/{share_nfs → other/share_nfs} +0 -0
- machineconfig/scripts/linux/{start_docker → other/start_docker} +0 -0
- machineconfig/scripts/linux/{switch_ip → other/switch_ip} +0 -0
- machineconfig/{jobs/python_generic_installers → scripts/python/helpers_agents}/__init__.py +0 -0
- machineconfig/{jobs/python_linux_installers → scripts/python/helpers_agents/agentic_frameworks}/__init__.py +0 -0
- machineconfig/scripts/python/{fire_agents_help_search.py → helpers_agents/fire_agents_help_search.py} +0 -0
- machineconfig/{jobs/python_linux_installers/dev → scripts/python/helpers_cloud}/__init__.py +0 -0
- machineconfig/scripts/python/{helpers → helpers_cloud}/cloud_helpers.py +1 -1
- /machineconfig/scripts/python/{helpers → helpers_cloud}/helpers5.py +0 -0
- /machineconfig/{jobs/python_windows_installers → scripts/python/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{pomodoro.py → helpers_croshell/pomodoro.py} +0 -0
- /machineconfig/scripts/python/{viewer.py → helpers_croshell/viewer.py} +0 -0
- /machineconfig/scripts/python/{viewer_template.py → helpers_croshell/viewer_template.py} +0 -0
- /machineconfig/{jobs/python_windows_installers/archive → scripts/python/helpers_devops}/__init__.py +0 -0
- /machineconfig/{jobs/python_windows_installers/dev → scripts/python/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.bat → scripts/python/helpers_devops/themes/choose_starship_theme.ps1} +0 -0
- /machineconfig/scripts/python/{helpers → helpers_fire_command}/__init__.py +0 -0
- /machineconfig/scripts/python/{fire_jobs_streamlit_helper.py → helpers_fire_command/fire_jobs_streamlit_helper.py} +0 -0
- /machineconfig/scripts/{linux → python/helpers_msearch/scripts_linux}/skrg +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfb.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfg.ps1 +0 -0
- /machineconfig/scripts/{windows → python/helpers_msearch/scripts_windows}/fzfrga.bat +0 -0
- /machineconfig/{jobs/windows/msc/cli_agents.ps1 → scripts/python/helpers_sessions/__init__.py} +0 -0
- /machineconfig/scripts/{windows/share_nfs.ps1 → python/nw/__init__.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_drive +0 -0
- /machineconfig/scripts/python/{mount_nw_drive.py → nw/mount_nw_drive.py} +0 -0
- /machineconfig/scripts/{linux → python/nw}/mount_smb +0 -0
- /machineconfig/scripts/windows/{mount_nw.ps1 → mounts/mount_nw.ps1} +0 -0
- /machineconfig/scripts/windows/{mount_smb.ps1 → mounts/mount_smb.ps1} +0 -0
- /machineconfig/scripts/windows/{share_cloud.cmd → mounts/share_cloud.cmd} +0 -0
- /machineconfig/scripts/windows/{unlock_bitlocker.ps1 → mounts/unlock_bitlocker.ps1} +0 -0
- /machineconfig/setup_linux/{web_shortcuts → others}/android.sh +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_add_key.ps1 +0 -0
- /machineconfig/{jobs/windows/archive → setup_windows/ssh}/openssh-server_copy-ssh-id.ps1 +0 -0
- /machineconfig/{settings/yazi/keymap.toml → utils/files/ouch/__init__.py} +0 -0
- {machineconfig-3.7.dist-info → machineconfig-7.69.dist-info}/WHEEL +0 -0
- {machineconfig-3.7.dist-info → machineconfig-7.69.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,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,37 @@
|
|
|
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_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
|
+
json_filled = json_template.replace("{api_key}", ai_spec["api_key"]).replace("{model}", ai_spec["model"]).replace("{provider}", ai_spec["provider"])
|
|
18
|
+
from machineconfig.utils.accessories import randstr
|
|
19
|
+
temp_config_file_local = Path.home().joinpath("tmp_results/tmp_files/crush_" + randstr(8) + ".json")
|
|
20
|
+
temp_config_file_local.parent.mkdir(parents=True, exist_ok=True)
|
|
21
|
+
Path(temp_config_file_local).write_text(json_filled, encoding="utf-8")
|
|
22
|
+
cmd = f"""
|
|
23
|
+
|
|
24
|
+
# -e "PATH_PROMPT=$PATH_PROMPT"
|
|
25
|
+
# opencode --model "{ai_spec["provider"]}/{ai_spec["model"]}" run {prompt_path}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
echo "Running prompt @ {prompt_path.relative_to(repo_root)} using Docker with Crush..."
|
|
29
|
+
docker run -it --rm \
|
|
30
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
31
|
+
-v "{temp_config_file_local}:/root/.local/share/crush/crush.json" \
|
|
32
|
+
-w "/workspace/{repo_root.name}" \
|
|
33
|
+
statistician/machineconfig-ai:latest \
|
|
34
|
+
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)}'"
|
|
35
|
+
|
|
36
|
+
"""
|
|
37
|
+
return cmd
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
# import shlex
|
|
5
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
6
|
+
|
|
7
|
+
def fire_cursor(ai_spec: AI_SPEC, prompt_path: Path) -> str:
|
|
8
|
+
match ai_spec["machine"]:
|
|
9
|
+
case "local":
|
|
10
|
+
# Export the environment variable so it's available to subshells
|
|
11
|
+
cmd = f"""
|
|
12
|
+
|
|
13
|
+
cursor-agent --print --output-format text {prompt_path}
|
|
14
|
+
|
|
15
|
+
"""
|
|
16
|
+
case "docker":
|
|
17
|
+
cmd = f"""
|
|
18
|
+
|
|
19
|
+
cursor-agent --print --output-format text {prompt_path}
|
|
20
|
+
|
|
21
|
+
"""
|
|
22
|
+
return cmd
|
|
@@ -0,0 +1,42 @@
|
|
|
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_gemini(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path) -> str:
|
|
8
|
+
_ = ai_spec["provider"]
|
|
9
|
+
# model = "gemini-2.5-flash-lite"
|
|
10
|
+
# model = None # auto-select
|
|
11
|
+
# if model is None:
|
|
12
|
+
# model_arg = ""
|
|
13
|
+
# else:
|
|
14
|
+
model_arg = f"--model {shlex.quote(ai_spec['model'])}"
|
|
15
|
+
# Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
|
|
16
|
+
safe_path = shlex.quote(str(prompt_path))
|
|
17
|
+
|
|
18
|
+
match ai_spec["machine"]:
|
|
19
|
+
case "local":
|
|
20
|
+
# Export the environment variable so it's available to subshells
|
|
21
|
+
if ai_spec["api_key"] is not None:
|
|
22
|
+
define_api_key = f"""export GEMINI_API_KEY="{shlex.quote(ai_spec['api_key'])}" """
|
|
23
|
+
else:
|
|
24
|
+
define_api_key = "echo 'Warning: No GEMINI_API_KEY provided, hoping it is set in the environment.'"
|
|
25
|
+
cmd = f"""
|
|
26
|
+
{define_api_key}
|
|
27
|
+
echo "Using Gemini API key $GEMINI_API_KEY"
|
|
28
|
+
gemini {model_arg} --yolo --prompt {safe_path}
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
case "docker":
|
|
33
|
+
assert ai_spec["api_key"] is not None, "When using docker, api_key must be provided."
|
|
34
|
+
cmd = f"""
|
|
35
|
+
docker run -it --rm \
|
|
36
|
+
-e GEMINI_API_KEY="{ai_spec['api_key']}" \
|
|
37
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
38
|
+
-w "/workspace/{repo_root.name}" \
|
|
39
|
+
statistician/machineconfig-ai:latest \
|
|
40
|
+
gemini --prompt "$PATH_PROMPT"
|
|
41
|
+
"""
|
|
42
|
+
return cmd
|
|
@@ -0,0 +1,30 @@
|
|
|
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_qwen(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path, config_dir: str | None) -> str:
|
|
8
|
+
_ = ai_spec["provider"]
|
|
9
|
+
safe_path = shlex.quote(str(prompt_path))
|
|
10
|
+
match ai_spec["machine"]:
|
|
11
|
+
case "local":
|
|
12
|
+
cmd = f"""
|
|
13
|
+
qwen --yolo --prompt {safe_path}
|
|
14
|
+
"""
|
|
15
|
+
case "docker":
|
|
16
|
+
assert config_dir is not None, "When using docker, config_dir must be provided."
|
|
17
|
+
assert Path(config_dir).exists(), f"Provided config_dir {config_dir} does not exist."
|
|
18
|
+
oauth_creds = Path(config_dir).joinpath("oauth_creds.json")
|
|
19
|
+
settings = Path(config_dir).joinpath("settings.json")
|
|
20
|
+
|
|
21
|
+
cmd = f"""
|
|
22
|
+
docker run -it --rm \
|
|
23
|
+
-v "{repo_root}:/workspace/{repo_root.name}" \
|
|
24
|
+
-v {shlex.quote(str(oauth_creds))}:/root/.qwen/oauth_creds.json \
|
|
25
|
+
-v {shlex.quote(str(settings))}:/root/.qwen/settings.json \
|
|
26
|
+
-w "/workspace/{repo_root.name}" \
|
|
27
|
+
statistician/machineconfig-ai:latest \
|
|
28
|
+
qwen --prompt "$PATH_PROMPT"
|
|
29
|
+
"""
|
|
30
|
+
return cmd
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
|
|
2
|
+
import random
|
|
3
|
+
import shlex
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AGENTS, AGENT_NAME_FORMATTER, HOST, PROVIDER, AI_SPEC
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def get_api_keys(provider: PROVIDER) -> list[str]:
|
|
9
|
+
from machineconfig.utils.io import read_ini
|
|
10
|
+
config = read_ini(Path.home().joinpath(f"dotfiles/creds/llm/{provider}/api_keys.ini"))
|
|
11
|
+
res: list[str] = []
|
|
12
|
+
for a_section_name in list(config.sections()):
|
|
13
|
+
a_section = config[a_section_name]
|
|
14
|
+
if "api_key" in a_section:
|
|
15
|
+
api_key = a_section["api_key"].strip()
|
|
16
|
+
if api_key:
|
|
17
|
+
res.append(api_key)
|
|
18
|
+
print(f"Found {len(res)} {provider} API keys configured.")
|
|
19
|
+
return res
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def prep_agent_launch(repo_root: Path, agents_dir: Path, prompts_material: list[str], prompt_prefix: str, keep_material_in_separate_file: bool,
|
|
23
|
+
machine: HOST, model: str, provider: PROVIDER, agent: AGENTS, *, job_name: str) -> None:
|
|
24
|
+
agents_dir.mkdir(parents=True, exist_ok=True)
|
|
25
|
+
prompt_folder = agents_dir / "prompts"
|
|
26
|
+
prompt_folder.mkdir(parents=True, exist_ok=True)
|
|
27
|
+
|
|
28
|
+
for idx, a_prompt_material in enumerate(prompts_material):
|
|
29
|
+
prompt_root = prompt_folder / f"agent_{idx}"
|
|
30
|
+
prompt_root.mkdir(parents=True, exist_ok=True)
|
|
31
|
+
prompt_path = prompt_root / f"agent_{idx}_prompt.txt"
|
|
32
|
+
if keep_material_in_separate_file:
|
|
33
|
+
prompt_material_path = prompt_root / f"agent_{idx}_material.txt"
|
|
34
|
+
prompt_material_path.write_text(a_prompt_material, encoding="utf-8")
|
|
35
|
+
prompt_path.write_text(prompt_prefix + f"""\nPlease only look @ {prompt_material_path.relative_to(repo_root)}. You don't need to do any other work beside the content of this material file.""", encoding="utf-8")
|
|
36
|
+
else:
|
|
37
|
+
prompt_material_path = prompt_path
|
|
38
|
+
prompt_path.write_text(prompt_prefix + """\nPlease only look @ the following:\n""" + a_prompt_material, encoding="utf-8")
|
|
39
|
+
|
|
40
|
+
agent_cmd_launch_path = prompt_root / AGENT_NAME_FORMATTER.format(idx=idx) # e.g., agent_0_cmd.sh
|
|
41
|
+
random_sleep_time = random.uniform(0, 5)
|
|
42
|
+
cmd_prefix = f"""#!/usr/bin/env bash
|
|
43
|
+
|
|
44
|
+
echo "Using machine: {machine}, model: {model}, provider: {provider}, and agent: {agent}"
|
|
45
|
+
echo "{job_name}-{idx} CMD {agent_cmd_launch_path}"
|
|
46
|
+
echo "{job_name}-{idx} PROMPT {prompt_path}"
|
|
47
|
+
echo "{job_name}-{idx} CONTEXT {prompt_material_path}"
|
|
48
|
+
echo "Starting agent {agent} in 5 seconds... Press Ctrl+C to cancel."
|
|
49
|
+
# sleep 5
|
|
50
|
+
# timeout 3 copilot --banner
|
|
51
|
+
|
|
52
|
+
export FIRE_AGENTS_AGENT_NAME="{agent}"
|
|
53
|
+
export FIRE_AGENTS_JOB_NAME="{job_name}"
|
|
54
|
+
export FIRE_AGENTS_PROMPT_FILE="{prompt_path}"
|
|
55
|
+
export FIRE_AGENTS_MATERIAL_FILE="{prompt_material_path}"
|
|
56
|
+
export FIRE_AGENTS_AGENT_LAUNCHER="{agent_cmd_launch_path}"
|
|
57
|
+
|
|
58
|
+
echo "Sleeping for {random_sleep_time:.2f} seconds to stagger agent startups..."
|
|
59
|
+
sleep {random_sleep_time:.2f}
|
|
60
|
+
echo "--------START OF AGENT OUTPUT--------"
|
|
61
|
+
sleep 0.1
|
|
62
|
+
|
|
63
|
+
"""
|
|
64
|
+
match agent:
|
|
65
|
+
case "gemini":
|
|
66
|
+
assert provider == "google", "Gemini agent only works with google provider."
|
|
67
|
+
api_keys = get_api_keys(provider="google")
|
|
68
|
+
api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
|
|
69
|
+
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model="gemini-2.5-pro", agent=agent, machine=machine, api_key=api_key, api_name="gemini")
|
|
70
|
+
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_gemini import fire_gemini
|
|
71
|
+
cmd = fire_gemini(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
|
|
72
|
+
case "cursor-agent":
|
|
73
|
+
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_key=None, api_name="cursor")
|
|
74
|
+
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_cursor_agents import fire_cursor
|
|
75
|
+
cmd = fire_cursor(ai_spec=ai_spec, prompt_path=prompt_path)
|
|
76
|
+
raise NotImplementedError("Cursor agent is not implemented yet, api key missing")
|
|
77
|
+
case "crush":
|
|
78
|
+
api_keys = get_api_keys(provider=provider)
|
|
79
|
+
api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
|
|
80
|
+
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_key=api_key, api_name="crush")
|
|
81
|
+
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_crush import fire_crush
|
|
82
|
+
cmd = fire_crush(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
|
|
83
|
+
# case "q":
|
|
84
|
+
# from machineconfig.scripts.python.helpers_fire.fire_q import fire_q
|
|
85
|
+
# cmd = fire_q(api_key="", prompt_path=prompt_path, machine=machine)
|
|
86
|
+
case _:
|
|
87
|
+
raise ValueError(f"Unsupported agent type: {agent}")
|
|
88
|
+
|
|
89
|
+
cmd_postfix = """
|
|
90
|
+
sleep 0.1
|
|
91
|
+
echo "---------END OF AGENT OUTPUT---------"
|
|
92
|
+
"""
|
|
93
|
+
agent_cmd_launch_path.write_text(cmd_prefix + cmd + cmd_postfix, encoding="utf-8")
|
|
94
|
+
return None
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def get_agents_launch_layout(session_root: Path):
|
|
98
|
+
from machineconfig.utils.schemas.layouts.layout_types import TabConfig, LayoutConfig, LayoutsFile
|
|
99
|
+
|
|
100
|
+
tab_config: list[TabConfig] = []
|
|
101
|
+
prompt_root = session_root / "prompts"
|
|
102
|
+
all_dirs_under_prompts = [d for d in prompt_root.iterdir() if d.is_dir()]
|
|
103
|
+
for a_prompt_dir in all_dirs_under_prompts:
|
|
104
|
+
idx = a_prompt_dir.name.split("_")[-1] # e.g., agent_0 -> 0
|
|
105
|
+
agent_cmd_path = a_prompt_dir / AGENT_NAME_FORMATTER.format(idx=idx)
|
|
106
|
+
fire_cmd = f"bash {shlex.quote(str(agent_cmd_path))}"
|
|
107
|
+
tab_config.append(TabConfig(tabName=f"Agent{idx}", startDir=str(session_root.parent.parent.parent), command=fire_cmd))
|
|
108
|
+
layout = LayoutConfig(layoutName="Agents", layoutTabs=tab_config)
|
|
109
|
+
layouts_file: LayoutsFile = LayoutsFile(version="1.0", layouts=[layout])
|
|
110
|
+
return layouts_file
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
from typing import Literal, TypeAlias, TypedDict
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# Vscode extensions for AI-assisted coding.
|
|
6
|
+
# Github copilot
|
|
7
|
+
# Roo
|
|
8
|
+
# Cline
|
|
9
|
+
# Kilocode
|
|
10
|
+
# Continue
|
|
11
|
+
# CodeGPT
|
|
12
|
+
# qodo (and cli)
|
|
13
|
+
|
|
14
|
+
# Editors based on AI
|
|
15
|
+
# Kiro
|
|
16
|
+
# Cursor
|
|
17
|
+
# Warp
|
|
18
|
+
|
|
19
|
+
AGENTS: TypeAlias = Literal["cursor-agent", "gemini", "qwen-code", "copilot", "crush", "q", "opencode", "kilocode", "cline", "auggie", "warp", "droid"]
|
|
20
|
+
HOST: TypeAlias = Literal["local", "docker"]
|
|
21
|
+
PROVIDER: TypeAlias = Literal["azure", "google", "aws", "openai", "anthropic", "openrouter", "xai"]
|
|
22
|
+
|
|
23
|
+
class AI_SPEC(TypedDict):
|
|
24
|
+
provider: PROVIDER
|
|
25
|
+
model: str
|
|
26
|
+
agent: AGENTS
|
|
27
|
+
machine: HOST
|
|
28
|
+
api_key: str | None
|
|
29
|
+
api_name: str
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
AGENT_NAME_FORMATTER = "agent_{idx}_cmd.sh" # e.g., agent_0_cmd.sh
|
|
33
|
+
SEARCH_STRATEGIES: TypeAlias = Literal["file_path", "keyword_search", "filename_pattern"]
|
|
34
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# from math import ceil
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def chunk_prompts(prompt_material_path: Path, joiner: str, *, tasks_per_prompt: int) -> list[str]:
|
|
6
|
+
"""Chunk prompts based on splitting strategy.
|
|
7
|
+
|
|
8
|
+
Args:
|
|
9
|
+
prompts: List of prompts to chunk
|
|
10
|
+
strategy: Either 'agent_cap' or 'task_rows'
|
|
11
|
+
agent_cap: Maximum number of agents (used with 'agent_cap' strategy)
|
|
12
|
+
task_rows: Number of rows/tasks per agent (used with 'task_rows' strategy)
|
|
13
|
+
"""
|
|
14
|
+
prompts = [p for p in prompt_material_path.read_text(encoding="utf-8", errors="ignore").split(joiner) if p.strip() != ""] # drop blank entries
|
|
15
|
+
if tasks_per_prompt >= len(prompts):
|
|
16
|
+
print("No need to chunk prompts, as tasks_per_prompt >= total prompts.", f"({tasks_per_prompt} >= {len(prompts)})")
|
|
17
|
+
return prompts
|
|
18
|
+
print(f"Chunking {len(prompts)} prompts into groups of {tasks_per_prompt} rows/tasks each.")
|
|
19
|
+
grouped: list[str] = []
|
|
20
|
+
for i in range(0, len(prompts), tasks_per_prompt):
|
|
21
|
+
grouped.append(joiner.join(prompts[i : i + tasks_per_prompt]))
|
|
22
|
+
return grouped
|