machineconfig 8.14__py3-none-any.whl → 8.50__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/cluster/remote/run_cluster.py +1 -1
- machineconfig/cluster/remote/run_remote.py +1 -1
- machineconfig/cluster/sessions_managers/utils/maker.py +10 -8
- machineconfig/cluster/sessions_managers/wt_local.py +1 -1
- machineconfig/cluster/sessions_managers/wt_local_manager.py +1 -1
- machineconfig/cluster/sessions_managers/zellij_local.py +1 -1
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +1 -1
- machineconfig/jobs/installer/checks/check_installations.py +133 -0
- machineconfig/jobs/installer/checks/install_utils.py +132 -0
- machineconfig/jobs/installer/checks/report_utils.py +39 -0
- machineconfig/jobs/installer/checks/vt_utils.py +89 -0
- machineconfig/jobs/installer/installer_data.json +225 -140
- machineconfig/jobs/installer/linux_scripts/docker.sh +6 -9
- machineconfig/jobs/installer/package_groups.py +10 -9
- machineconfig/jobs/installer/python_scripts/boxes.py +1 -2
- machineconfig/jobs/installer/python_scripts/code.py +10 -8
- machineconfig/jobs/installer/python_scripts/hx.py +30 -13
- machineconfig/jobs/installer/python_scripts/nerfont_windows_helper.py +6 -5
- machineconfig/jobs/installer/python_scripts/sysabc.py +25 -19
- machineconfig/jobs/installer/python_scripts/yazi.py +33 -17
- machineconfig/jobs/scripts/powershell_scripts/cmatrix.ps1 +52 -0
- machineconfig/jobs/scripts/powershell_scripts/mount_ssh.ps1 +1 -1
- machineconfig/jobs/scripts_dynamic/a.py +413 -10
- machineconfig/profile/create_links.py +77 -20
- machineconfig/profile/create_links_export.py +63 -58
- machineconfig/profile/mapper_data.toml +30 -0
- machineconfig/profile/mapper_dotfiles.toml +253 -0
- machineconfig/scripts/python/agents.py +70 -172
- machineconfig/scripts/python/ai/initai.py +3 -1
- machineconfig/scripts/python/ai/scripts/__init__.py +1 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.ps1 +2 -0
- machineconfig/scripts/python/ai/scripts/lint_and_type_check.sh +7 -5
- machineconfig/scripts/python/ai/solutions/claude/claude.py +1 -1
- machineconfig/scripts/python/ai/solutions/cline/cline.py +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/github_copilot.py +1 -1
- machineconfig/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +29 -0
- machineconfig/scripts/python/ai/solutions/crush/crush.py +1 -1
- machineconfig/scripts/python/ai/solutions/cursor/cursors.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/gemini.py +1 -1
- machineconfig/scripts/python/ai/solutions/gemini/settings.json +3 -0
- machineconfig/scripts/python/ai/{solutions → utils}/generic.py +2 -15
- machineconfig/scripts/python/ai/utils/vscode_tasks.py +6 -3
- machineconfig/scripts/python/cloud.py +58 -11
- machineconfig/scripts/python/croshell.py +4 -156
- machineconfig/scripts/python/devops.py +57 -40
- machineconfig/scripts/python/devops_navigator.py +17 -3
- machineconfig/scripts/python/fire_jobs.py +8 -207
- machineconfig/scripts/python/ftpx.py +5 -225
- machineconfig/scripts/python/graph/cli_graph.json +8743 -0
- machineconfig/scripts/python/{env_manager → helper_env}/path_manager_tui.py +2 -2
- machineconfig/scripts/python/{env_manager → helpers/helper_env}/env_manager_tui.py +1 -1
- machineconfig/scripts/python/helpers/helper_env/path_manager_tui.py +228 -0
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.py +1 -1
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_gemini.py +1 -1
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_qwen.py +1 -1
- machineconfig/scripts/python/helpers/helpers_agents/agents_impl.py +168 -0
- machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py +5 -5
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_copy.py +6 -6
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_mount.py +10 -5
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_sync.py +3 -3
- machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers2.py +1 -1
- machineconfig/scripts/python/helpers/helpers_croshell/croshell_impl.py +225 -0
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/scheduler.py +4 -4
- machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/start_slidev.py +7 -6
- machineconfig/scripts/python/helpers/helpers_devops/backup_config.py +149 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +267 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config.py +98 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +274 -0
- machineconfig/scripts/python/helpers/helpers_devops/cli_data.py +76 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_nw.py +52 -72
- machineconfig/scripts/python/helpers/helpers_devops/cli_repos.py +274 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +40 -23
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_file.py +44 -30
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_server.py +26 -43
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_share_terminal.py +12 -6
- machineconfig/scripts/python/helpers/helpers_devops/cli_ssh.py +167 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_status.py +12 -6
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/devops_update_repos.py +1 -1
- machineconfig/scripts/python/{interactive.py → helpers/helpers_devops/interactive.py} +68 -52
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/run_script.py +75 -58
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +41 -0
- machineconfig/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +48 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_wezterm_theme.py +3 -3
- machineconfig/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +233 -0
- machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_route_helper.py +3 -3
- machineconfig/scripts/python/helpers/helpers_msearch/msearch_impl.py +248 -0
- machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_linux/fzfg +4 -3
- machineconfig/scripts/python/helpers/helpers_msearch/scripts_linux/search_with_context.sh +48 -0
- machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/scripts_windows/fzfg.ps1 +1 -1
- machineconfig/scripts/python/helpers/helpers_navigator/__init__.py +20 -0
- machineconfig/scripts/python/helpers/helpers_navigator/cli_graph_loader.py +234 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/command_builder.py +61 -13
- machineconfig/scripts/python/helpers/helpers_navigator/command_detail.py +153 -0
- machineconfig/scripts/python/helpers/helpers_navigator/command_tree.py +45 -0
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/data_models.py +18 -11
- machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/main_app.py +5 -5
- machineconfig/scripts/python/helpers/helpers_network/__init__.py +0 -0
- machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address.py +15 -17
- machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/address_switch.py +1 -1
- machineconfig/scripts/python/helpers/helpers_network/ftpx_impl.py +276 -0
- machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_ssh.py +2 -2
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_identity.py +73 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_add_ssh_key.py +175 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_linux.py +319 -0
- machineconfig/scripts/python/helpers/helpers_network/ssh_debug_windows.py +275 -0
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/action_helper.py +3 -3
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/cloud_repo_sync.py +117 -33
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/grource.py +3 -2
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/record.py +33 -13
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_2.py +63 -19
- machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/update.py +0 -6
- machineconfig/scripts/python/helpers/helpers_search/script_help.py +81 -0
- machineconfig/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_sessions/sessions_impl.py +186 -0
- machineconfig/scripts/python/{helpers_sessions → helpers/helpers_sessions}/sessions_multiprocess.py +1 -1
- machineconfig/scripts/python/helpers/helpers_terminal/__init__.py +0 -0
- machineconfig/scripts/python/helpers/helpers_terminal/terminal_impl.py +96 -0
- machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/download.py +1 -1
- machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/python.py +47 -26
- machineconfig/scripts/python/helpers/helpers_utils/specs.py +246 -0
- machineconfig/scripts/python/mcfg_entry.py +133 -48
- machineconfig/scripts/python/msearch.py +15 -61
- machineconfig/scripts/python/sessions.py +59 -194
- machineconfig/scripts/python/terminal.py +18 -96
- machineconfig/scripts/python/utils.py +101 -20
- machineconfig/settings/atuin/config.toml +294 -0
- machineconfig/settings/atuin/themes/catppuccin-mocha-mauve.toml +12 -0
- machineconfig/settings/linters/.ruff.toml +1 -0
- machineconfig/settings/mprocs/windows/mprocs.yaml +2 -2
- machineconfig/settings/shells/bash/init.sh +6 -3
- machineconfig/settings/shells/pwsh/init.ps1 +69 -1
- machineconfig/settings/shells/pwsh/search_pwsh_history.ps1 +99 -0
- machineconfig/settings/shells/wezterm/wezterm.lua +4 -1
- machineconfig/settings/shells/wt/settings.json +20 -7
- machineconfig/settings/shells/zsh/init.sh +25 -4
- machineconfig/settings/television/cable_unix/bash-history.toml +1 -1
- machineconfig/settings/television/cable_windows/pwsh-history.toml +1 -1
- machineconfig/settings/tv/config.toml +234 -0
- machineconfig/settings/tv/themes/catppuccin-mocha-sky.toml +22 -0
- machineconfig/settings/wsl/.wslconfig +5 -30
- machineconfig/settings/yazi/yazi_linux.toml +18 -8
- machineconfig/settings/zellij/layouts/st.kdl +2 -2
- machineconfig/settings/zellij/layouts/st2.kdl +1 -1
- machineconfig/setup_linux/web_shortcuts/interactive.sh +10 -10
- machineconfig/setup_linux/web_shortcuts/live_from_github.sh +3 -0
- machineconfig/setup_mac/__init__.py +0 -2
- machineconfig/setup_windows/__init__.py +0 -1
- machineconfig/setup_windows/web_shortcuts/interactive.ps1 +14 -13
- machineconfig/setup_windows/web_shortcuts/live_from_github.ps1 +4 -3
- machineconfig/setup_windows/web_shortcuts/quick_init.ps1 +3 -3
- machineconfig/type_hinting/sql/__init__.py +1 -0
- machineconfig/type_hinting/sql/base.py +216 -0
- machineconfig/type_hinting/sql/core_schema.py +64 -0
- machineconfig/type_hinting/sql/core_schema_typeddict.py +41 -0
- machineconfig/type_hinting/sql/typeddict_codegen.py +222 -0
- machineconfig/type_hinting/typedict/__init__.py +1 -0
- machineconfig/type_hinting/typedict/ast_utils.py +130 -0
- machineconfig/type_hinting/typedict/generator_helpers.py +319 -0
- machineconfig/type_hinting/typedict/generators.py +231 -0
- machineconfig/type_hinting/typedict/polars_schema.py +24 -0
- machineconfig/type_hinting/typedict/polars_schema_typeddict.py +63 -0
- machineconfig/utils/accessories.py +24 -0
- machineconfig/utils/code.py +41 -13
- machineconfig/utils/files/ascii_art.py +10 -14
- machineconfig/utils/files/headers.py +3 -5
- machineconfig/utils/files/read.py +8 -1
- machineconfig/utils/installer_utils/github_release_bulk.py +11 -91
- machineconfig/utils/installer_utils/github_release_scraper.py +99 -0
- machineconfig/utils/installer_utils/install_from_url.py +1 -1
- machineconfig/utils/installer_utils/installer_class.py +12 -4
- machineconfig/utils/installer_utils/installer_cli.py +1 -15
- machineconfig/utils/installer_utils/installer_helper.py +2 -2
- machineconfig/utils/installer_utils/installer_locator_utils.py +13 -13
- machineconfig/utils/installer_utils/installer_runner.py +4 -4
- machineconfig/utils/io.py +25 -8
- machineconfig/utils/meta.py +6 -4
- machineconfig/utils/options.py +49 -19
- machineconfig/utils/options_utils/__init__.py +0 -0
- machineconfig/utils/options_utils/options_tv_linux.py +211 -0
- machineconfig/utils/options_utils/options_tv_windows.py +88 -0
- machineconfig/utils/options_utils/tv_options.py +37 -0
- machineconfig/utils/path_extended.py +6 -6
- machineconfig/utils/scheduler.py +8 -2
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
- machineconfig/utils/source_of_truth.py +6 -1
- machineconfig/utils/ssh.py +69 -18
- machineconfig/utils/ssh_utils/abc.py +1 -1
- machineconfig/utils/ssh_utils/copy_from_here.py +17 -12
- machineconfig/utils/ssh_utils/utils.py +21 -5
- machineconfig/utils/ssh_utils/wsl.py +107 -170
- machineconfig/utils/ssh_utils/wsl_helper.py +217 -0
- machineconfig/utils/upgrade_packages.py +4 -8
- {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/METADATA +29 -22
- {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/RECORD +251 -211
- machineconfig/jobs/installer/check_installations.py +0 -248
- machineconfig/profile/backup.toml +0 -49
- machineconfig/profile/mapper.toml +0 -263
- machineconfig/scripts/python/helpers_devops/cli_config.py +0 -105
- machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py +0 -89
- machineconfig/scripts/python/helpers_devops/cli_data.py +0 -25
- machineconfig/scripts/python/helpers_devops/cli_repos.py +0 -208
- machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py +0 -80
- machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash +0 -3
- machineconfig/scripts/python/helpers_navigator/__init__.py +0 -20
- machineconfig/scripts/python/helpers_navigator/command_detail.py +0 -44
- machineconfig/scripts/python/helpers_navigator/command_tree.py +0 -620
- machineconfig/scripts/python/helpers_network/ssh_add_identity.py +0 -116
- machineconfig/scripts/python/helpers_network/ssh_add_ssh_key.py +0 -153
- machineconfig/scripts/python/helpers_network/ssh_debug_linux.py +0 -391
- machineconfig/scripts/python/helpers_network/ssh_debug_windows.py +0 -338
- machineconfig/scripts/python/helpers_repos/entrypoint.py +0 -77
- machineconfig/setup_mac/ssh/openssh_setup.sh +0 -114
- machineconfig/setup_windows/ssh/add-sshkey.ps1 +0 -29
- machineconfig/setup_windows/ssh/openssh-server.ps1 +0 -37
- machineconfig/utils/options_tv.py +0 -119
- machineconfig/utils/tst.py +0 -20
- /machineconfig/{scripts/python/helpers_agents → jobs/installer/checks}/__init__.py +0 -0
- /machineconfig/scripts/python/ai/{solutions/_shared.py → utils/shared.py} +0 -0
- /machineconfig/scripts/python/{helpers_agents/agentic_frameworks → graph}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_cloud → helpers}/__init__.py +0 -0
- /machineconfig/scripts/python/{env_manager → helpers/helper_env}/__init__.py +0 -0
- /machineconfig/scripts/python/{env_manager → helpers/helper_env}/path_manager_backend.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_agents}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops → helpers/helpers_agents/agentic_frameworks}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_search.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_helper_types.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_load_balancer.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aichat/config.yaml +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/aider/.aider.conf.yml +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/copilot/config.yml +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/crush/crush.json +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/configs/gemini/settings.json +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/privacy/privacy.py +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/prompt.txt +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/templates/template.sh +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes → helpers/helpers_cloud}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/cloud_helpers.py +0 -0
- /machineconfig/scripts/python/{helpers_cloud → helpers/helpers_cloud}/helpers5.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_croshell}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/crosh.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/pomodoro.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer.py +0 -0
- /machineconfig/scripts/python/{helpers_croshell → helpers/helpers_croshell}/viewer_template.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_devops}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_sessions → helpers/helpers_devops/themes}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/themes/choose_pwsh_theme.ps1 +0 -0
- /machineconfig/scripts/python/{helpers_devops/themes/choose_starship_theme.ps1 → helpers/helpers_fire_command/__init__.py} +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/cloud_manager.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/f.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/file_wrangler.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_args_helper.py +0 -0
- /machineconfig/scripts/python/{helpers_fire_command → helpers/helpers_fire_command}/fire_jobs_streamlit_helper.py +0 -0
- /machineconfig/scripts/python/{helpers_msearch → helpers/helpers_msearch}/__init__.py +0 -0
- /machineconfig/scripts/python/{helpers_navigator → helpers/helpers_navigator}/search_bar.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nfs.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/mount_nw_drive.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/onetimeshare.py +0 -0
- /machineconfig/scripts/python/{helpers_network → helpers/helpers_network}/wifi_conn.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/clone.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/repo_analyzer_1.py +0 -0
- /machineconfig/scripts/python/{helpers_repos → helpers/helpers_repos}/sync.py +0 -0
- /machineconfig/scripts/python/helpers/{ast_search.py → helpers_search/ast_search.py} +0 -0
- /machineconfig/scripts/python/helpers/{qr_code.py → helpers_search/qr_code.py} +0 -0
- /machineconfig/scripts/python/helpers/{repo_rag.py → helpers_search/repo_rag.py} +0 -0
- /machineconfig/scripts/python/helpers/{symantic_search.py → helpers_search/symantic_search.py} +0 -0
- /machineconfig/scripts/python/{helpers_utils → helpers/helpers_utils}/pdf.py +0 -0
- {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/WHEEL +0 -0
- {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/entry_points.txt +0 -0
- {machineconfig-8.14.dist-info → machineconfig-8.50.dist-info}/top_level.txt +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# /// script
|
|
3
3
|
# requires-python = ">=3.13"
|
|
4
4
|
# dependencies = [
|
|
5
|
-
# "machineconfig>=8.
|
|
5
|
+
# "machineconfig>=8.50",
|
|
6
6
|
# "textual",
|
|
7
7
|
# "pyperclip",
|
|
8
8
|
# ]
|
|
@@ -18,7 +18,7 @@ from textual.binding import Binding
|
|
|
18
18
|
from textual.containers import Horizontal, Vertical
|
|
19
19
|
from textual.widgets import Footer, Header, Label, ListItem, ListView, Static
|
|
20
20
|
|
|
21
|
-
from machineconfig.scripts.python.
|
|
21
|
+
from machineconfig.scripts.python.helpers.helper_env.path_manager_backend import get_directory_contents, get_path_entries, get_platform
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class DirectoryPreview(Static):
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
#!/usr/bin/env -S uv run --script
|
|
2
|
+
# /// script
|
|
3
|
+
# requires-python = ">=3.13"
|
|
4
|
+
# dependencies = [
|
|
5
|
+
# "machineconfig>=8.50",
|
|
6
|
+
# "textual",
|
|
7
|
+
# "pyperclip",
|
|
8
|
+
# ]
|
|
9
|
+
# ///
|
|
10
|
+
|
|
11
|
+
"""Cross-platform PATH explorer with Textual TUI."""
|
|
12
|
+
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
|
|
15
|
+
from textual import on
|
|
16
|
+
from textual.app import App, ComposeResult
|
|
17
|
+
from textual.binding import Binding
|
|
18
|
+
from textual.containers import Horizontal, Vertical
|
|
19
|
+
from textual.widgets import Footer, Header, Label, ListItem, ListView, Static
|
|
20
|
+
|
|
21
|
+
from machineconfig.scripts.python.helpers.helper_env.path_manager_backend import get_directory_contents, get_path_entries, get_platform
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class DirectoryPreview(Static):
|
|
25
|
+
"""Widget to display directory contents."""
|
|
26
|
+
|
|
27
|
+
def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
|
|
28
|
+
super().__init__(*args, **kwargs)
|
|
29
|
+
self.border_title = "📂 Directory Preview"
|
|
30
|
+
|
|
31
|
+
def update_preview(self, directory: str) -> None:
|
|
32
|
+
"""Update the preview with directory contents."""
|
|
33
|
+
if not directory:
|
|
34
|
+
self.update("Select a PATH entry to preview its contents")
|
|
35
|
+
return
|
|
36
|
+
|
|
37
|
+
contents = get_directory_contents(directory, max_items=30)
|
|
38
|
+
preview_text = f"[bold cyan]{directory}[/bold cyan]\n\n"
|
|
39
|
+
preview_text += "\n".join(contents)
|
|
40
|
+
self.update(preview_text)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class StatusBar(Static):
|
|
44
|
+
"""Status bar to show messages."""
|
|
45
|
+
|
|
46
|
+
def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
|
|
47
|
+
super().__init__(*args, **kwargs)
|
|
48
|
+
self.border_title = "ℹ️ Status"
|
|
49
|
+
|
|
50
|
+
def show_message(self, message: str, message_type: str = "info") -> None:
|
|
51
|
+
"""Display a status message."""
|
|
52
|
+
color = {"info": "cyan", "success": "green", "error": "red", "warning": "yellow"}.get(message_type, "white")
|
|
53
|
+
self.update(f"[{color}]{message}[/{color}]")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class PathExplorerApp(App[None]):
|
|
57
|
+
"""A Textual app to explore PATH entries."""
|
|
58
|
+
|
|
59
|
+
CSS = """
|
|
60
|
+
Screen {
|
|
61
|
+
background: $surface;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
Header {
|
|
65
|
+
background: $primary;
|
|
66
|
+
color: $text;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
Footer {
|
|
70
|
+
background: $panel;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
#main-container {
|
|
74
|
+
height: 100%;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
#left-panel {
|
|
78
|
+
width: 50%;
|
|
79
|
+
height: 100%;
|
|
80
|
+
border: solid $primary;
|
|
81
|
+
padding: 1;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
#right-panel {
|
|
85
|
+
width: 50%;
|
|
86
|
+
height: 100%;
|
|
87
|
+
border: solid $accent;
|
|
88
|
+
padding: 1;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
ListView {
|
|
92
|
+
height: 1fr;
|
|
93
|
+
border: solid $accent;
|
|
94
|
+
background: $surface;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
ListView > ListItem {
|
|
98
|
+
padding: 0 1;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
ListView > ListItem.--highlight {
|
|
102
|
+
background: $accent 20%;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
DirectoryPreview {
|
|
106
|
+
height: 1fr;
|
|
107
|
+
border: solid $primary;
|
|
108
|
+
background: $surface;
|
|
109
|
+
padding: 1;
|
|
110
|
+
overflow-y: auto;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
StatusBar {
|
|
114
|
+
height: 3;
|
|
115
|
+
border: solid $success;
|
|
116
|
+
background: $surface;
|
|
117
|
+
padding: 1;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
Label {
|
|
121
|
+
padding: 0 1;
|
|
122
|
+
height: auto;
|
|
123
|
+
}
|
|
124
|
+
"""
|
|
125
|
+
|
|
126
|
+
BINDINGS = [
|
|
127
|
+
Binding("q", "quit", "Quit", show=True),
|
|
128
|
+
Binding("r", "refresh", "Refresh", show=True),
|
|
129
|
+
Binding("c", "copy_path", "Copy Path", show=True),
|
|
130
|
+
]
|
|
131
|
+
|
|
132
|
+
def __init__(self) -> None:
|
|
133
|
+
super().__init__()
|
|
134
|
+
self.selected_path: str = ""
|
|
135
|
+
|
|
136
|
+
def compose(self) -> ComposeResult:
|
|
137
|
+
"""Create child widgets for the app."""
|
|
138
|
+
platform_name = get_platform()
|
|
139
|
+
yield Header(show_clock=True)
|
|
140
|
+
|
|
141
|
+
with Horizontal(id="main-container"):
|
|
142
|
+
with Vertical(id="left-panel"):
|
|
143
|
+
yield Label(f"🔧 PATH Entries ({platform_name})")
|
|
144
|
+
yield ListView(id="path-list")
|
|
145
|
+
|
|
146
|
+
with Vertical(id="right-panel"):
|
|
147
|
+
yield DirectoryPreview(id="preview")
|
|
148
|
+
yield StatusBar(id="status")
|
|
149
|
+
|
|
150
|
+
yield Footer()
|
|
151
|
+
|
|
152
|
+
def on_mount(self) -> None:
|
|
153
|
+
"""Initialize the app when mounted."""
|
|
154
|
+
self.title = "PATH Explorer"
|
|
155
|
+
self.sub_title = f"Platform: {get_platform()}"
|
|
156
|
+
self.refresh_path_list()
|
|
157
|
+
self.query_one("#status", StatusBar).show_message("Ready. Select a PATH entry to preview its contents.", "info")
|
|
158
|
+
|
|
159
|
+
def refresh_path_list(self) -> None:
|
|
160
|
+
"""Refresh the list of PATH entries."""
|
|
161
|
+
list_view = self.query_one("#path-list", ListView)
|
|
162
|
+
list_view.clear()
|
|
163
|
+
|
|
164
|
+
entries = get_path_entries()
|
|
165
|
+
for entry in entries:
|
|
166
|
+
path = Path(entry)
|
|
167
|
+
exists = path.exists()
|
|
168
|
+
icon = "✅" if exists else "❌"
|
|
169
|
+
item = ListItem(Label(f"{icon} {entry}"))
|
|
170
|
+
item.set_class(exists, "--valid")
|
|
171
|
+
list_view.append(item)
|
|
172
|
+
|
|
173
|
+
self.query_one("#status", StatusBar).show_message(f"Loaded {len(entries)} PATH entries", "success")
|
|
174
|
+
|
|
175
|
+
@on(ListView.Highlighted)
|
|
176
|
+
def handle_highlight(self, event: ListView.Highlighted) -> None:
|
|
177
|
+
"""Handle highlighting of a PATH entry (scroll preview)."""
|
|
178
|
+
if event.item is None:
|
|
179
|
+
return
|
|
180
|
+
label = event.item.query_one(Label)
|
|
181
|
+
text = label.render()
|
|
182
|
+
# Remove the icon prefix
|
|
183
|
+
highlighted_path = str(text).split(" ", 1)[1] if " " in str(text) else str(text)
|
|
184
|
+
|
|
185
|
+
preview = self.query_one("#preview", DirectoryPreview)
|
|
186
|
+
preview.update_preview(highlighted_path)
|
|
187
|
+
|
|
188
|
+
self.query_one("#status", StatusBar).show_message(f"Previewing: {highlighted_path}", "info")
|
|
189
|
+
|
|
190
|
+
@on(ListView.Selected)
|
|
191
|
+
def handle_selection(self, event: ListView.Selected) -> None:
|
|
192
|
+
"""Handle selection of a PATH entry (Enter key)."""
|
|
193
|
+
label = event.item.query_one(Label)
|
|
194
|
+
text = label.render()
|
|
195
|
+
# Remove the icon prefix
|
|
196
|
+
self.selected_path = str(text).split(" ", 1)[1] if " " in str(text) else str(text)
|
|
197
|
+
|
|
198
|
+
preview = self.query_one("#preview", DirectoryPreview)
|
|
199
|
+
preview.update_preview(self.selected_path)
|
|
200
|
+
|
|
201
|
+
self.query_one("#status", StatusBar).show_message(f"Selected: {self.selected_path}", "success")
|
|
202
|
+
|
|
203
|
+
def action_refresh(self) -> None:
|
|
204
|
+
"""Refresh the PATH list."""
|
|
205
|
+
self.refresh_path_list()
|
|
206
|
+
|
|
207
|
+
def action_copy_path(self) -> None:
|
|
208
|
+
"""Copy selected path to clipboard."""
|
|
209
|
+
if not self.selected_path:
|
|
210
|
+
self.query_one("#status", StatusBar).show_message("No PATH entry selected", "warning")
|
|
211
|
+
return
|
|
212
|
+
# # Try to copy to clipboard
|
|
213
|
+
# try:
|
|
214
|
+
# import pyperclip
|
|
215
|
+
# pyperclip.copy(self.selected_path)
|
|
216
|
+
# self.query_one("#status", StatusBar).show_message(f"Copied to clipboard: {self.selected_path}", "success")
|
|
217
|
+
# except ImportError:
|
|
218
|
+
# self.query_one("#status", StatusBar).show_message("pyperclip not available. Install it to enable clipboard support.", "warning")
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def main() -> None:
|
|
222
|
+
"""Run the PATH Explorer TUI."""
|
|
223
|
+
app = PathExplorerApp()
|
|
224
|
+
app.run()
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
if __name__ == "__main__":
|
|
228
|
+
main()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
# import shlex
|
|
4
|
-
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
4
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
def fire_crush(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path) -> str:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
# import shlex
|
|
5
|
-
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
5
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
6
6
|
|
|
7
7
|
def fire_cursor(ai_spec: AI_SPEC, prompt_path: Path) -> str:
|
|
8
8
|
match ai_spec["machine"]:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
import shlex
|
|
4
|
-
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
4
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
def fire_gemini(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path) -> str:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
import shlex
|
|
4
|
-
from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
4
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import AI_SPEC
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
def fire_qwen(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path, config_dir: str | None) -> str:
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"""Pure Python implementations for agents commands - no typer dependencies."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional, cast
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def agents_create(
|
|
8
|
+
agent: str,
|
|
9
|
+
host: str,
|
|
10
|
+
model: str,
|
|
11
|
+
provider: str,
|
|
12
|
+
context_path: Optional[str],
|
|
13
|
+
separator: str,
|
|
14
|
+
agent_load: int,
|
|
15
|
+
prompt: Optional[str],
|
|
16
|
+
prompt_path: Optional[str],
|
|
17
|
+
job_name: str,
|
|
18
|
+
separate: bool,
|
|
19
|
+
output_path: Optional[str],
|
|
20
|
+
agents_dir: Optional[str],
|
|
21
|
+
) -> None:
|
|
22
|
+
"""Create agents layout file, ready to run."""
|
|
23
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_help_launch import prep_agent_launch, get_agents_launch_layout
|
|
24
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_load_balancer import chunk_prompts
|
|
25
|
+
from machineconfig.utils.accessories import get_repo_root, randstr
|
|
26
|
+
import json
|
|
27
|
+
|
|
28
|
+
prompt_options = [prompt, prompt_path]
|
|
29
|
+
provided_prompt = [opt for opt in prompt_options if opt is not None]
|
|
30
|
+
if len(provided_prompt) != 1:
|
|
31
|
+
raise ValueError("Exactly one of --prompt or --prompt-path must be provided")
|
|
32
|
+
|
|
33
|
+
repo_root = get_repo_root(Path.cwd())
|
|
34
|
+
if repo_root is None:
|
|
35
|
+
raise RuntimeError("💥 Could not determine the repository root. Please run this script from within a git repository.")
|
|
36
|
+
|
|
37
|
+
print(f"Operating @ {repo_root}")
|
|
38
|
+
|
|
39
|
+
if context_path is None:
|
|
40
|
+
context_path_resolved = Path(repo_root) / ".ai" / "todo"
|
|
41
|
+
else:
|
|
42
|
+
context_path_resolved = Path(context_path).expanduser().resolve()
|
|
43
|
+
|
|
44
|
+
if not context_path_resolved.exists():
|
|
45
|
+
raise ValueError(f"Path does not exist: {context_path_resolved}")
|
|
46
|
+
|
|
47
|
+
if context_path_resolved.is_file():
|
|
48
|
+
prompt_material_re_splitted = chunk_prompts(context_path_resolved, tasks_per_prompt=agent_load, joiner=separator)
|
|
49
|
+
elif context_path_resolved.is_dir():
|
|
50
|
+
files = [f for f in context_path_resolved.rglob("*") if f.is_file()]
|
|
51
|
+
if not files:
|
|
52
|
+
raise ValueError(f"No files found in directory: {context_path_resolved}")
|
|
53
|
+
concatenated = separator.join(f.read_text(encoding="utf-8") for f in files)
|
|
54
|
+
prompt_material_re_splitted = [concatenated]
|
|
55
|
+
else:
|
|
56
|
+
raise ValueError(f"Path is neither file nor directory: {context_path_resolved}")
|
|
57
|
+
|
|
58
|
+
if prompt_path is not None:
|
|
59
|
+
prompt_prefix = Path(prompt_path).read_text(encoding="utf-8")
|
|
60
|
+
else:
|
|
61
|
+
prompt_prefix = cast(str, prompt)
|
|
62
|
+
|
|
63
|
+
agent_selected = agent
|
|
64
|
+
if agents_dir is None:
|
|
65
|
+
agents_dir_obj = Path(repo_root) / ".ai" / f"tmp_prompts/{job_name}_{randstr()}"
|
|
66
|
+
else:
|
|
67
|
+
import shutil
|
|
68
|
+
if Path(agents_dir).exists():
|
|
69
|
+
shutil.rmtree(agents_dir)
|
|
70
|
+
agents_dir_obj = Path(agents_dir)
|
|
71
|
+
|
|
72
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import HOST, AGENTS, PROVIDER
|
|
73
|
+
prep_agent_launch(
|
|
74
|
+
repo_root=repo_root,
|
|
75
|
+
agents_dir=agents_dir_obj,
|
|
76
|
+
prompts_material=prompt_material_re_splitted,
|
|
77
|
+
keep_material_in_separate_file=separate,
|
|
78
|
+
prompt_prefix=prompt_prefix,
|
|
79
|
+
machine=cast(HOST, host),
|
|
80
|
+
agent=cast(AGENTS, agent_selected),
|
|
81
|
+
model=model,
|
|
82
|
+
provider=cast(PROVIDER, provider),
|
|
83
|
+
job_name=job_name,
|
|
84
|
+
)
|
|
85
|
+
layoutfile = get_agents_launch_layout(session_root=agents_dir_obj)
|
|
86
|
+
|
|
87
|
+
layout_output_path = Path(output_path) if output_path is not None else agents_dir_obj / "layout.json"
|
|
88
|
+
layout_output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
89
|
+
layout_output_path.write_text(data=json.dumps(layoutfile, indent=4), encoding="utf-8")
|
|
90
|
+
print(f"Created agents in {agents_dir_obj}")
|
|
91
|
+
print(f"Created layout in {layout_output_path}")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def collect(agent_dir: str, output_path: str, separator: str) -> None:
|
|
95
|
+
"""Collect all material files from an agent directory and concatenate them."""
|
|
96
|
+
if not Path(agent_dir).exists() or not Path(agent_dir).is_dir():
|
|
97
|
+
raise ValueError(f"Agent directory does not exist or is not a directory: {agent_dir}")
|
|
98
|
+
|
|
99
|
+
prompts_dir = Path(agent_dir) / "prompts"
|
|
100
|
+
if not prompts_dir.exists():
|
|
101
|
+
raise ValueError(f"Prompts directory not found: {prompts_dir}")
|
|
102
|
+
|
|
103
|
+
material_files: list[Path] = []
|
|
104
|
+
for agent_subdir in prompts_dir.iterdir():
|
|
105
|
+
if agent_subdir.is_dir() and agent_subdir.name.startswith("agent_"):
|
|
106
|
+
material_file = agent_subdir / f"{agent_subdir.name}_material.txt"
|
|
107
|
+
if material_file.exists():
|
|
108
|
+
material_files.append(material_file)
|
|
109
|
+
|
|
110
|
+
if not material_files:
|
|
111
|
+
print("No material files found in the agent directory.")
|
|
112
|
+
return
|
|
113
|
+
|
|
114
|
+
material_files.sort(key=lambda x: int(x.parent.name.split("_")[-1]))
|
|
115
|
+
|
|
116
|
+
concatenated_content: list[str] = []
|
|
117
|
+
for material_file in material_files:
|
|
118
|
+
content = material_file.read_text(encoding="utf-8")
|
|
119
|
+
concatenated_content.append(content)
|
|
120
|
+
|
|
121
|
+
result = separator.join(concatenated_content)
|
|
122
|
+
|
|
123
|
+
Path(output_path).parent.mkdir(parents=True, exist_ok=True)
|
|
124
|
+
Path(output_path).write_text(result, encoding="utf-8")
|
|
125
|
+
print(f"Concatenated material written to {output_path}")
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def make_agents_command_template() -> None:
|
|
129
|
+
"""Create a template for fire agents."""
|
|
130
|
+
from platform import system
|
|
131
|
+
import machineconfig.scripts.python.helpers.helpers_agents as module
|
|
132
|
+
|
|
133
|
+
if system() == "Linux" or system() == "Darwin":
|
|
134
|
+
template_path = Path(module.__file__).parent / "templates/template.sh"
|
|
135
|
+
elif system() == "Windows":
|
|
136
|
+
template_path = Path(module.__file__).parent / "templates/template.ps1"
|
|
137
|
+
else:
|
|
138
|
+
raise ValueError(f"Unsupported OS: {system()}")
|
|
139
|
+
|
|
140
|
+
from machineconfig.utils.accessories import get_repo_root
|
|
141
|
+
repo_root = get_repo_root(Path.cwd())
|
|
142
|
+
if repo_root is None:
|
|
143
|
+
raise RuntimeError("💥 Could not determine the repository root. Please run this script from within a git repository.")
|
|
144
|
+
|
|
145
|
+
save_path_root = repo_root / ".ai" / "agents"
|
|
146
|
+
|
|
147
|
+
save_path_root.mkdir(parents=True, exist_ok=True)
|
|
148
|
+
save_path_root.joinpath("template_fire_agents.sh").write_text(template_path.read_text(encoding="utf-8"), encoding="utf-8")
|
|
149
|
+
print(f"Template bash script written to {save_path_root}")
|
|
150
|
+
|
|
151
|
+
from machineconfig.scripts.python.ai.utils.generate_files import make_todo_files
|
|
152
|
+
make_todo_files(
|
|
153
|
+
pattern=".py", repo=str(repo_root), strategy="name", output_path=str(save_path_root / "files.md"), split_every=None, split_to=None
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
prompt_path = Path(module.__file__).parent / "templates/prompt.txt"
|
|
157
|
+
save_path_root.joinpath("prompt.txt").write_text(prompt_path.read_text(encoding="utf-8"), encoding="utf-8")
|
|
158
|
+
print(f"Prompt template written to {save_path_root}")
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def init_config(root: Optional[str]) -> None:
|
|
162
|
+
"""Initialize AI configurations in the current repository."""
|
|
163
|
+
from machineconfig.scripts.python.ai.initai import add_ai_configs
|
|
164
|
+
if root is None:
|
|
165
|
+
repo_root = Path.cwd()
|
|
166
|
+
else:
|
|
167
|
+
repo_root = Path(root).expanduser().resolve()
|
|
168
|
+
add_ai_configs(repo_root=repo_root)
|
machineconfig/scripts/python/{helpers_agents → helpers/helpers_agents}/fire_agents_help_launch.py
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import random
|
|
3
3
|
import shlex
|
|
4
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, API_SPEC
|
|
5
|
+
from machineconfig.scripts.python.helpers.helpers_agents.fire_agents_helper_types import AGENTS, AGENT_NAME_FORMATTER, HOST, PROVIDER, AI_SPEC, API_SPEC
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
def get_api_keys(provider: PROVIDER) -> list[API_SPEC]:
|
|
@@ -75,12 +75,12 @@ sleep 0.1
|
|
|
75
75
|
if api_spec is None:
|
|
76
76
|
raise ValueError("No API keys found for Google Gemini. Please configure them in dotfiles/creds/llm/google/api_keys.ini")
|
|
77
77
|
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model="gemini-2.5-pro", agent=agent, machine=machine, api_spec=api_spec)
|
|
78
|
-
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_gemini import fire_gemini
|
|
78
|
+
from machineconfig.scripts.python.helpers.helpers_agents.agentic_frameworks.fire_gemini import fire_gemini
|
|
79
79
|
cmd = fire_gemini(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
|
|
80
80
|
case "cursor-agent":
|
|
81
81
|
api_spec = API_SPEC(api_key=None, api_name="", api_label="", api_account="")
|
|
82
82
|
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_spec=api_spec)
|
|
83
|
-
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_cursor_agents import fire_cursor
|
|
83
|
+
from machineconfig.scripts.python.helpers.helpers_agents.agentic_frameworks.fire_cursor_agents import fire_cursor
|
|
84
84
|
cmd = fire_cursor(ai_spec=ai_spec, prompt_path=prompt_path)
|
|
85
85
|
raise NotImplementedError("Cursor agent is not implemented yet, api key missing")
|
|
86
86
|
case "crush":
|
|
@@ -89,10 +89,10 @@ sleep 0.1
|
|
|
89
89
|
if api_spec is None:
|
|
90
90
|
raise ValueError("No API keys found for Crush. Please configure them in dotfiles/creds/llm/crush/api_keys.ini")
|
|
91
91
|
ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_spec=api_spec)
|
|
92
|
-
from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_crush import fire_crush
|
|
92
|
+
from machineconfig.scripts.python.helpers.helpers_agents.agentic_frameworks.fire_crush import fire_crush
|
|
93
93
|
cmd = fire_crush(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
|
|
94
94
|
# case "q":
|
|
95
|
-
# from machineconfig.scripts.python.helpers_fire.fire_q import fire_q
|
|
95
|
+
# from machineconfig.scripts.python.helpers.helpers_fire.fire_q import fire_q
|
|
96
96
|
# cmd = fire_q(api_key="", prompt_path=prompt_path, machine=machine)
|
|
97
97
|
case _:
|
|
98
98
|
raise ValueError(f"Unsupported agent type: {agent}")
|
|
@@ -52,7 +52,7 @@ def get_securely_shared_file(url: Optional[str] = None, folder: Optional[str] =
|
|
|
52
52
|
tmp_folder = PathExtended.tmpdir(prefix="tmp_unzip")
|
|
53
53
|
try:
|
|
54
54
|
res = url_obj.decrypt(pwd=pwd, inplace=True).unzip(inplace=True, folder=tmp_folder)
|
|
55
|
-
for x in res.
|
|
55
|
+
for x in res.glob("*"):
|
|
56
56
|
x.move(folder=folder_obj, overwrite=True)
|
|
57
57
|
finally:
|
|
58
58
|
# Clean up temporary folder
|
|
@@ -79,8 +79,8 @@ def main(
|
|
|
79
79
|
from rich.console import Console
|
|
80
80
|
from rich.panel import Panel
|
|
81
81
|
from machineconfig.utils.path_extended import PathExtended
|
|
82
|
-
from machineconfig.scripts.python.helpers_cloud.helpers2 import parse_cloud_source_target
|
|
83
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args
|
|
82
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.helpers2 import parse_cloud_source_target
|
|
83
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.cloud_helpers import Args
|
|
84
84
|
from machineconfig.utils.accessories import pprint
|
|
85
85
|
|
|
86
86
|
console = Console()
|
|
@@ -107,7 +107,7 @@ def main(
|
|
|
107
107
|
print("🔄 Converting Google Drive link to direct download URL")
|
|
108
108
|
else:
|
|
109
109
|
console.print(Panel("❌ Invalid Google Drive link format", title="[bold red]Error[/bold red]", border_style="red"))
|
|
110
|
-
raise
|
|
110
|
+
raise typer.Exit(code=1)
|
|
111
111
|
return get_securely_shared_file(url=source, folder=target)
|
|
112
112
|
|
|
113
113
|
if args_obj.rel2home is True and args_obj.root is None:
|
|
@@ -122,7 +122,7 @@ def main(
|
|
|
122
122
|
|
|
123
123
|
if args_obj.key is not None:
|
|
124
124
|
console.print(Panel("❌ Key-based encryption is not supported yet", title="[bold red]Error[/bold red]", border_style="red"))
|
|
125
|
-
raise
|
|
125
|
+
raise typer.Exit(code=1)
|
|
126
126
|
|
|
127
127
|
if cloud in source:
|
|
128
128
|
console.print(Panel(f"📥 DOWNLOADING FROM CLOUD\n☁️ Cloud: {cloud}\n📂 Source: {source.replace(cloud + ':', '')}\n🎯 Target: {target}", title="[bold blue]Download[/bold blue]", border_style="blue", width=152))
|
|
@@ -159,7 +159,7 @@ def main(
|
|
|
159
159
|
console.print(Panel(f"🔗 SHARE URL GENERATED\n📝 URL file: {share_url_path}\n🌍 {res.as_url_str()}", title="[bold blue]Share[/bold blue]", border_style="blue", width=152))
|
|
160
160
|
else:
|
|
161
161
|
console.print(Panel(f"❌ ERROR: Cloud '{cloud}' not found in source or target", title="[bold red]Error[/bold red]", border_style="red", width=152))
|
|
162
|
-
raise
|
|
162
|
+
raise typer.Exit(code=1)
|
|
163
163
|
|
|
164
164
|
|
|
165
165
|
def arg_parser() -> None:
|
|
@@ -19,12 +19,13 @@ def get_rclone_config():
|
|
|
19
19
|
|
|
20
20
|
def get_mprocs_mount_txt(cloud: str, rclone_cmd: str, cloud_brand: str): # cloud_brand = config[cloud]["type"]
|
|
21
21
|
from machineconfig.utils.path_extended import PathExtended
|
|
22
|
+
from machineconfig.utils.accessories import randstr
|
|
22
23
|
import platform
|
|
23
24
|
DEFAULT_MOUNT = "~/data/rclone"
|
|
24
25
|
|
|
25
26
|
header = f"{' ' + cloud + ' | ' + cloud_brand + ' '}".center(50, "=")
|
|
26
27
|
if platform.system() == "Windows":
|
|
27
|
-
sub_text_path = PathExtended.
|
|
28
|
+
sub_text_path = PathExtended("~/tmp_results/tmp_files").expanduser().joinpath(f"{randstr()}.ps1")
|
|
28
29
|
sub_text_path.parent.mkdir(parents=True, exist_ok=True)
|
|
29
30
|
sub_text_path.write_text(
|
|
30
31
|
f"""
|
|
@@ -70,7 +71,8 @@ def mount(
|
|
|
70
71
|
if type(res) is str:
|
|
71
72
|
cloud = res
|
|
72
73
|
else:
|
|
73
|
-
|
|
74
|
+
print("❌ Error: No cloud selected")
|
|
75
|
+
raise typer.Exit(code=1)
|
|
74
76
|
print(f"🌩️ Selected cloud: {cloud}")
|
|
75
77
|
|
|
76
78
|
if network is None:
|
|
@@ -97,13 +99,15 @@ def mount(
|
|
|
97
99
|
console.print(Panel(f"{warning_line}\n{err_line}", title="Warning", border_style="yellow"))
|
|
98
100
|
pass
|
|
99
101
|
else:
|
|
100
|
-
|
|
102
|
+
print("❌ Error: Unsupported platform")
|
|
103
|
+
raise typer.Exit(code=1)
|
|
101
104
|
|
|
102
105
|
elif network and platform.system() == "Windows":
|
|
103
106
|
mount_loc = "X: --network-mode"
|
|
104
107
|
print(f"🔌 Setting up network mount at {mount_loc}")
|
|
105
108
|
else:
|
|
106
|
-
|
|
109
|
+
print("❌ Error: Network mount only supported on Windows")
|
|
110
|
+
raise typer.Exit(code=1)
|
|
107
111
|
|
|
108
112
|
mount_cmd = f"rclone mount {cloud}: {mount_loc} --vfs-cache-mode full --file-perms=0777"
|
|
109
113
|
console.print(Panel(f"🚀 Preparing mount command:\n{mount_cmd}", border_style="blue"))
|
|
@@ -148,7 +152,8 @@ zellij run --in-place --cwd $HOME/data/rclone/{cloud} -- bash
|
|
|
148
152
|
zellij action move-focus up
|
|
149
153
|
"""
|
|
150
154
|
else:
|
|
151
|
-
|
|
155
|
+
print("❌ Error: Unsupported platform")
|
|
156
|
+
raise typer.Exit(code=1)
|
|
152
157
|
# print(f"running command: \n{txt}")
|
|
153
158
|
# PROGRAM_PATH.write_text(txt, encoding="utf-8")
|
|
154
159
|
import subprocess
|
|
@@ -21,9 +21,9 @@ def main(
|
|
|
21
21
|
verbose: Annotated[bool, typer.Option("--verbose", "-v", help="Verbosity of mprocs to show details of syncing.")] = False,
|
|
22
22
|
) -> None:
|
|
23
23
|
|
|
24
|
-
from machineconfig.scripts.python.helpers_cloud.helpers2 import parse_cloud_source_target
|
|
25
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args
|
|
26
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_mount import get_mprocs_mount_txt
|
|
24
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.helpers2 import parse_cloud_source_target
|
|
25
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.cloud_helpers import Args
|
|
26
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.cloud_mount import get_mprocs_mount_txt
|
|
27
27
|
from rich.console import Console
|
|
28
28
|
from rich.panel import Panel
|
|
29
29
|
console = Console()
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from machineconfig.scripts.python.helpers_cloud.cloud_helpers import Args, ArgsDefaults, absolute, find_cloud_config, get_secure_share_cloud_config
|
|
1
|
+
from machineconfig.scripts.python.helpers.helpers_cloud.cloud_helpers import Args, ArgsDefaults, absolute, find_cloud_config, get_secure_share_cloud_config
|
|
2
2
|
from machineconfig.utils.io import read_ini
|
|
3
3
|
from machineconfig.utils.source_of_truth import DEFAULTS_PATH
|
|
4
4
|
from machineconfig.utils.accessories import pprint
|