machineconfig 8.12__py3-none-any.whl → 8.45__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 +40 -51
- 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 +265 -0
- machineconfig/scripts/python/{helpers_devops → helpers/helpers_devops}/cli_self.py +45 -21
- 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} +69 -45
- machineconfig/scripts/python/helpers/helpers_devops/run_script.py +197 -0
- 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 +116 -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 +177 -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 +49 -29
- 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 +34 -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 +79 -37
- 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 +1 -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/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 +73 -22
- machineconfig/utils/ssh_utils/abc.py +1 -1
- machineconfig/utils/ssh_utils/copy_from_here.py +2 -2
- machineconfig/utils/ssh_utils/utils.py +2 -2
- 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.12.dist-info → machineconfig-8.45.dist-info}/METADATA +29 -22
- {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/RECORD +249 -211
- machineconfig/jobs/installer/check_installations.py +0 -248
- machineconfig/jobs/scripts/bash_scripts/mint_keyboard_shortcuts.sh +0 -30
- 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/run_script.py +0 -168
- 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.12.dist-info → machineconfig-8.45.dist-info}/WHEEL +0 -0
- {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/entry_points.txt +0 -0
- {machineconfig-8.12.dist-info → machineconfig-8.45.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CPU Specification Helper.
|
|
3
|
+
|
|
4
|
+
This module provides utilities to detect the CPU model and fetch Geekbench scores
|
|
5
|
+
using the geekbench-browser-python tool.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import platform
|
|
9
|
+
import re
|
|
10
|
+
import subprocess
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def get_cpu_name() -> str:
|
|
14
|
+
"""
|
|
15
|
+
Detect the CPU model name across different operating systems.
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
str: The detected CPU model name or 'Unknown CPU'.
|
|
19
|
+
"""
|
|
20
|
+
system = platform.system()
|
|
21
|
+
|
|
22
|
+
if system == "Linux":
|
|
23
|
+
try:
|
|
24
|
+
with open("/proc/cpuinfo") as f:
|
|
25
|
+
for line in f:
|
|
26
|
+
if "model name" in line:
|
|
27
|
+
return line.split(":", 1)[1].strip()
|
|
28
|
+
except FileNotFoundError:
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
elif system == "Windows":
|
|
32
|
+
try:
|
|
33
|
+
# shell=True might be needed for wmic depending on environment,
|
|
34
|
+
# but usually check_output with string list is safer if executable is in path.
|
|
35
|
+
# User provided: wmic cpu get name
|
|
36
|
+
output = subprocess.check_output("wmic cpu get name", shell=True).decode()
|
|
37
|
+
lines = output.strip().split("\n")
|
|
38
|
+
if len(lines) > 1:
|
|
39
|
+
return lines[1].strip()
|
|
40
|
+
except (subprocess.CalledProcessError, IndexError):
|
|
41
|
+
pass
|
|
42
|
+
|
|
43
|
+
elif system == "Darwin":
|
|
44
|
+
try:
|
|
45
|
+
return subprocess.check_output(
|
|
46
|
+
["sysctl", "-n", "machdep.cpu.brand_string"]
|
|
47
|
+
).decode().strip()
|
|
48
|
+
except subprocess.CalledProcessError:
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
return "Unknown CPU"
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def clean_cpu_name(cpu_name: str) -> str:
|
|
55
|
+
"""
|
|
56
|
+
Clean the CPU name to improve Geekbench search results.
|
|
57
|
+
|
|
58
|
+
Removes extra details like 'w/ Radeon Graphics', frequency, etc.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
cpu_name (str): The raw CPU name string.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
str: A cleaned CPU name suitable for searching.
|
|
65
|
+
"""
|
|
66
|
+
# Remove "w/ ..." or "with ..."
|
|
67
|
+
# Example: AMD Ryzen 7 8745HS w/ Radeon 780M Graphics -> AMD Ryzen 7 8745HS
|
|
68
|
+
cleaned = re.split(r"\s+(w/|with)\s+", cpu_name, flags=re.IGNORECASE)[0]
|
|
69
|
+
|
|
70
|
+
# Remove (R) and (TM) symbols which confuse regex search and are often noisy
|
|
71
|
+
cleaned = re.sub(r"\([RT]M?\)", "", cleaned, flags=re.IGNORECASE)
|
|
72
|
+
|
|
73
|
+
# Remove clock speed like " @ 3.00GHz", " 3.00GHz", " 3.2GHz"
|
|
74
|
+
cleaned = re.sub(r"\s+@?\s*\d+(\.\d+)?\s*GHz", "", cleaned, flags=re.IGNORECASE)
|
|
75
|
+
|
|
76
|
+
# Remove "12-Core Processor" etc if present (some linux distros add this)
|
|
77
|
+
cleaned = re.sub(r"\s+\d+-Core\s+Processor", "", cleaned, flags=re.IGNORECASE)
|
|
78
|
+
|
|
79
|
+
# Remove trailing "Processor" word if it's there
|
|
80
|
+
cleaned = re.sub(r"\s+Processor", "", cleaned, flags=re.IGNORECASE)
|
|
81
|
+
|
|
82
|
+
# Collapse multiple spaces
|
|
83
|
+
cleaned = re.sub(r"\s+", " ", cleaned)
|
|
84
|
+
|
|
85
|
+
return cleaned.strip()
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def run_geekbench_lookup(search_term: str) -> bool:
|
|
89
|
+
"""
|
|
90
|
+
Run the geekbench search using uvx.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
search_term (str): The CPU name to search for (supports Regex).
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
bool: True if results were found, False otherwise.
|
|
97
|
+
"""
|
|
98
|
+
# Note: uvx caches the tool so subsequent runs are fast.
|
|
99
|
+
# The 'gbr' tool uses pandas.str.contains(regex=True), so we can use regex patterns.
|
|
100
|
+
# We quote the search term to ensure it's treated as a single pattern containing spaces.
|
|
101
|
+
cmd = [
|
|
102
|
+
"uvx",
|
|
103
|
+
"--from",
|
|
104
|
+
"geekbench-browser-python",
|
|
105
|
+
"gbr",
|
|
106
|
+
search_term,
|
|
107
|
+
"--verbose",
|
|
108
|
+
]
|
|
109
|
+
printable_cmd = " ".join(f'"{x}"' if " " in x else x for x in cmd)
|
|
110
|
+
print(f"Running: {printable_cmd}")
|
|
111
|
+
try:
|
|
112
|
+
# Capture output to check for results
|
|
113
|
+
# We enforce utf-8 encoding because 'geekbench-browser-python' likely outputs
|
|
114
|
+
# Unicode characters (Rich tables, box drawing) which can fail to decode or
|
|
115
|
+
# appear as garbage on Windows (default cp1252) if not handled.
|
|
116
|
+
result = subprocess.run(
|
|
117
|
+
cmd,
|
|
118
|
+
check=True,
|
|
119
|
+
stdout=subprocess.PIPE,
|
|
120
|
+
stderr=subprocess.PIPE,
|
|
121
|
+
text=True,
|
|
122
|
+
encoding="utf-8",
|
|
123
|
+
errors="replace",
|
|
124
|
+
)
|
|
125
|
+
output = result.stdout
|
|
126
|
+
|
|
127
|
+
# Check if we have data rows.
|
|
128
|
+
# Check iteratively for lines that look like data rows (Unicode or ASCII).
|
|
129
|
+
lines = output.splitlines()
|
|
130
|
+
has_data = False
|
|
131
|
+
for line in lines:
|
|
132
|
+
line_stripped = line.strip()
|
|
133
|
+
# Unicode table data row start (Light Vertical)
|
|
134
|
+
if "│" in line:
|
|
135
|
+
has_data = True
|
|
136
|
+
break
|
|
137
|
+
# ASCII table data row start (Pipe)
|
|
138
|
+
# Must exclude headers and separators which also start with pipe in ASCII mode.
|
|
139
|
+
if line_stripped.startswith("|"):
|
|
140
|
+
lower_line = line.lower()
|
|
141
|
+
# Skip header/separator lines
|
|
142
|
+
if "description" in lower_line or "single" in lower_line or "---" in line:
|
|
143
|
+
continue
|
|
144
|
+
has_data = True
|
|
145
|
+
break
|
|
146
|
+
|
|
147
|
+
if has_data:
|
|
148
|
+
print(output)
|
|
149
|
+
return True
|
|
150
|
+
else:
|
|
151
|
+
# If verbose debugging is needed, we could print output here.
|
|
152
|
+
# But normally if no table is found, the tool might have just printed log info to stderr.
|
|
153
|
+
# If it did print something to stdout that isn't a table, we probably shouldn't show it
|
|
154
|
+
# as a "result", but it might be helpful for debugging why it failed.
|
|
155
|
+
if output.strip():
|
|
156
|
+
# Only print debug info if it's NOT just an empty table structure to avoid noise
|
|
157
|
+
if not ("description" in output.lower() and ("---" in output or "│" in output)):
|
|
158
|
+
print(f"Debug output from tool:\n{output}")
|
|
159
|
+
|
|
160
|
+
print(f"No results found for '{search_term}'.")
|
|
161
|
+
return False
|
|
162
|
+
|
|
163
|
+
except subprocess.CalledProcessError:
|
|
164
|
+
print("Failed to retrieve Geekbench scores (command failed).")
|
|
165
|
+
return False
|
|
166
|
+
except FileNotFoundError:
|
|
167
|
+
print("Error: 'uvx' command not found. Please ensure 'uv' is installed.")
|
|
168
|
+
return False
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def main() -> None:
|
|
172
|
+
"""Main entry point."""
|
|
173
|
+
cpu_name = get_cpu_name()
|
|
174
|
+
print(f"Detected CPU: {cpu_name}")
|
|
175
|
+
|
|
176
|
+
if cpu_name == "Unknown CPU":
|
|
177
|
+
print("Could not detect CPU name. Exiting.")
|
|
178
|
+
return
|
|
179
|
+
|
|
180
|
+
full_search_term = clean_cpu_name(cpu_name)
|
|
181
|
+
|
|
182
|
+
# Retry logic: remove last word until we find something or run out of words
|
|
183
|
+
# We escape each word to ensure regex special characters (like +, (), etc) in the name
|
|
184
|
+
# are treated as literals, while preserving our ability to use regex wildcards later.
|
|
185
|
+
words = [re.escape(w) for w in full_search_term.split()]
|
|
186
|
+
|
|
187
|
+
while words:
|
|
188
|
+
current_term = " ".join(words)
|
|
189
|
+
|
|
190
|
+
# Heuristic: Don't search for extremely short generic terms if possible,
|
|
191
|
+
# but "AMD" or "Intel" might be what we end up with if nothing else works.
|
|
192
|
+
# Let's try at least length 2 words unless it's just 1 word left.
|
|
193
|
+
if len(words) > 1 and len(current_term) < 4:
|
|
194
|
+
words.pop()
|
|
195
|
+
continue
|
|
196
|
+
|
|
197
|
+
print(f"Search Term: {current_term}")
|
|
198
|
+
if run_geekbench_lookup(current_term):
|
|
199
|
+
return
|
|
200
|
+
|
|
201
|
+
last_word = words[-1]
|
|
202
|
+
numeric_part = None
|
|
203
|
+
|
|
204
|
+
# Check if the last word starts with digits (e.g. 8745HS or 8745)
|
|
205
|
+
# We want to both strip suffix AND try wildcards.
|
|
206
|
+
match_digits = re.match(r"^(\d+)([a-zA-Z].*)?$", last_word)
|
|
207
|
+
|
|
208
|
+
if match_digits:
|
|
209
|
+
numeric_part = match_digits.group(1)
|
|
210
|
+
suffix_part = match_digits.group(2) # May be None
|
|
211
|
+
|
|
212
|
+
# Intermediate Try 1: Strip suffix (e.g. 8745HS -> 8745)
|
|
213
|
+
if suffix_part and len(numeric_part) >= 3:
|
|
214
|
+
intermediate_term = " ".join(words[:-1] + [numeric_part])
|
|
215
|
+
if intermediate_term != current_term:
|
|
216
|
+
print(f"Search Term: {intermediate_term} (stripped suffix)")
|
|
217
|
+
if run_geekbench_lookup(intermediate_term):
|
|
218
|
+
return
|
|
219
|
+
|
|
220
|
+
# Intermediate Try 2: Wildcard/Regex search (e.g. 8745 -> 87..)
|
|
221
|
+
# The tool uses Regex, so we use dots '.' to match any character instead of '?'
|
|
222
|
+
if numeric_part and len(numeric_part) >= 3:
|
|
223
|
+
# If 4+ digits (e.g. 8745), replace last 2 with .. -> 87..
|
|
224
|
+
# If 3 digits (e.g. 780), replace last 1 with . -> 78.
|
|
225
|
+
if len(numeric_part) >= 4:
|
|
226
|
+
wildcard_model = numeric_part[:-2] + ".."
|
|
227
|
+
else:
|
|
228
|
+
wildcard_model = numeric_part[:-1] + "."
|
|
229
|
+
|
|
230
|
+
wildcard_term = " ".join(words[:-1] + [wildcard_model])
|
|
231
|
+
|
|
232
|
+
# Check duplication against current_term and the stripped version
|
|
233
|
+
stripped_term = " ".join(words[:-1] + [numeric_part])
|
|
234
|
+
if wildcard_term != current_term and wildcard_term != stripped_term:
|
|
235
|
+
print(f"Search Term: {wildcard_term} (regex wildcard)")
|
|
236
|
+
if run_geekbench_lookup(wildcard_term):
|
|
237
|
+
return
|
|
238
|
+
|
|
239
|
+
# Remove last word for next iteration
|
|
240
|
+
words.pop()
|
|
241
|
+
|
|
242
|
+
print("Could not find any matching Geekbench scores.")
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
if __name__ == "__main__":
|
|
246
|
+
main()
|
|
@@ -1,55 +1,140 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
from
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
1
|
+
"""Fast-loading CLI entry point using lazy imports.
|
|
2
|
+
|
|
3
|
+
Submodules are only imported when their commands are actually invoked, not at startup.
|
|
4
|
+
This makes `mcfg --help` much faster by avoiding loading heavy dependencies.
|
|
5
|
+
"""
|
|
6
|
+
from typing import Optional, Annotated
|
|
7
|
+
import typer
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def fire(
|
|
11
|
+
ctx: typer.Context,
|
|
12
|
+
path: Annotated[str, typer.Argument(help="Path to the Python file to run")] = ".",
|
|
13
|
+
function: Annotated[Optional[str], typer.Argument(help="Function to run")] = None,
|
|
14
|
+
ve: Annotated[str, typer.Option("--ve", "-v", help="Virtual environment name")] = "",
|
|
15
|
+
cmd: Annotated[bool, typer.Option("--cmd", "-B", help="Create a cmd fire command to launch the job asynchronously")] = False,
|
|
16
|
+
interactive: Annotated[bool, typer.Option("--interactive", "-i", help="Whether to run the job interactively using IPython")] = False,
|
|
17
|
+
debug: Annotated[bool, typer.Option("--debug", "-d", help="Enable debug mode")] = False,
|
|
18
|
+
choose_function: Annotated[bool, typer.Option("--choose-function", "-c", help="Choose function interactively")] = False,
|
|
19
|
+
loop: Annotated[bool, typer.Option("--loop", "-l", help="Infinite recursion (runs again after completion/interruption)")] = False,
|
|
20
|
+
jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="Open in a jupyter notebook")] = False,
|
|
21
|
+
marimo: Annotated[bool, typer.Option("--marimo", "-M", help="Open in a marimo notebook")] = False,
|
|
22
|
+
module: Annotated[bool, typer.Option("--module", "-m", help="Launch the main file")] = False,
|
|
23
|
+
script: Annotated[bool, typer.Option("--script", "-s", help="Launch as a script without fire")] = False,
|
|
24
|
+
optimized: Annotated[bool, typer.Option("--optimized", "-O", help="Run the optimized version of the function")] = False,
|
|
25
|
+
zellij_tab: Annotated[Optional[str], typer.Option("--zellij-tab", "-z", help="Open in a new zellij tab")] = None,
|
|
26
|
+
submit_to_cloud: Annotated[bool, typer.Option("--submit-to-cloud", "-C", help="Submit to cloud compute")] = False,
|
|
27
|
+
remote: Annotated[bool, typer.Option("--remote", "-r", help="Launch on a remote machine")] = False,
|
|
28
|
+
streamlit: Annotated[bool, typer.Option("--streamlit", "-S", help="Run as streamlit app")] = False,
|
|
29
|
+
environment: Annotated[str, typer.Option("--environment", "-E", help="Choose ip, localhost, hostname or arbitrary url")] = "",
|
|
30
|
+
holdDirectory: Annotated[bool, typer.Option("--holdDirectory", "-D", help="Hold current directory and avoid cd'ing to the script directory")] = False,
|
|
31
|
+
PathExport: Annotated[bool, typer.Option("--PathExport", "-P", help="Augment the PYTHONPATH with repo root")] = False,
|
|
32
|
+
git_pull: Annotated[bool, typer.Option("--git-pull", "-g", help="Start by pulling the git repo")] = False,
|
|
33
|
+
watch: Annotated[bool, typer.Option("--watch", "-w", help="Watch the file for changes")] = False,
|
|
34
|
+
) -> None:
|
|
35
|
+
"""Fire and manage jobs."""
|
|
36
|
+
from machineconfig.scripts.python.fire_jobs import fire as fire_impl
|
|
37
|
+
fire_impl(ctx=ctx, path=path, function=function, ve=ve, cmd=cmd, interactive=interactive, debug=debug,
|
|
38
|
+
choose_function=choose_function, loop=loop, jupyter=jupyter, marimo=marimo, module=module,
|
|
39
|
+
script=script, optimized=optimized, zellij_tab=zellij_tab, submit_to_cloud=submit_to_cloud,
|
|
40
|
+
remote=remote, streamlit=streamlit, environment=environment, holdDirectory=holdDirectory,
|
|
41
|
+
PathExport=PathExport, git_pull=git_pull, watch=watch)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def ftpx(
|
|
45
|
+
source: Annotated[str, typer.Argument(help="Source path (machine:path)")],
|
|
46
|
+
target: Annotated[str, typer.Argument(help="Target path (machine:path)")],
|
|
47
|
+
recursive: Annotated[bool, typer.Option("--recursive", "-r", help="Send recursively.")] = False,
|
|
48
|
+
zipFirst: Annotated[bool, typer.Option("--zipFirst", "-z", help="Zip before sending.")] = False,
|
|
49
|
+
cloud: Annotated[bool, typer.Option("--cloud", "-c", help="Transfer through the cloud.")] = False,
|
|
50
|
+
overwrite_existing: Annotated[bool, typer.Option("--overwrite-existing", "-o", help="Overwrite existing files on remote when sending from local to remote.")] = False,
|
|
51
|
+
) -> None:
|
|
52
|
+
"""File transfer utility though SSH."""
|
|
53
|
+
from machineconfig.scripts.python.ftpx import ftpx as ftpx_impl
|
|
54
|
+
ftpx_impl(source=source, target=target, recursive=recursive, zipFirst=zipFirst, cloud=cloud, overwrite_existing=overwrite_existing)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def croshell(
|
|
58
|
+
path: Annotated[Optional[str], typer.Argument(help="path of file to read.")] = None,
|
|
59
|
+
project_path: Annotated[Optional[str], typer.Option("--project", "-p", help="specify uv project to use")] = None,
|
|
60
|
+
uv_with: Annotated[Optional[str], typer.Option("--uv-with", "-w", help="specify uv with packages to use")] = None,
|
|
61
|
+
marimo: Annotated[bool, typer.Option("--marimo", "-m", help="open the notebook using marimo if available")] = False,
|
|
62
|
+
jupyter: Annotated[bool, typer.Option("--jupyter", "-j", help="run in jupyter interactive console")] = False,
|
|
63
|
+
vscode: Annotated[bool, typer.Option("--vscode", "-c", help="open the script in vscode")] = False,
|
|
64
|
+
visidata: Annotated[bool, typer.Option("--visidata", "-v", help="open data file in visidata")] = False,
|
|
65
|
+
python: Annotated[bool, typer.Option("--python", "-P", help="flag to use python over IPython.")] = False,
|
|
66
|
+
profile: Annotated[Optional[str], typer.Option("--profile", "-r", help="ipython profile to use, defaults to default profile.")] = None,
|
|
67
|
+
) -> None:
|
|
68
|
+
"""Cross-shell command execution."""
|
|
69
|
+
from machineconfig.scripts.python.croshell import croshell as croshell_impl
|
|
70
|
+
croshell_impl(path=path, project_path=project_path, uv_with=uv_with, marimo=marimo, jupyter=jupyter, vscode=vscode, visidata=visidata, python=python, profile=profile)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def devops(ctx: typer.Context) -> None:
|
|
74
|
+
"""[d] DevOps related commands."""
|
|
75
|
+
from machineconfig.scripts.python.devops import get_app
|
|
76
|
+
get_app()(ctx.args, standalone_mode=not ctx.args)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def cloud(ctx: typer.Context) -> None:
|
|
80
|
+
"""[c] Cloud management commands."""
|
|
81
|
+
from machineconfig.scripts.python.cloud import get_app
|
|
82
|
+
get_app()(ctx.args, standalone_mode=not ctx.args)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def sessions(ctx: typer.Context) -> None:
|
|
86
|
+
"""[s] Session and layout management."""
|
|
87
|
+
from machineconfig.scripts.python.sessions import get_app
|
|
88
|
+
get_app()(ctx.args, standalone_mode=not ctx.args)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def agents(ctx: typer.Context) -> None:
|
|
92
|
+
"""[a] 🤖 AI Agents management commands."""
|
|
93
|
+
from machineconfig.scripts.python.agents import get_app
|
|
94
|
+
get_app()(ctx.args, standalone_mode=not ctx.args)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def utils(ctx: typer.Context) -> None:
|
|
98
|
+
"""[u] Utility commands."""
|
|
99
|
+
from machineconfig.scripts.python.utils import get_app
|
|
100
|
+
get_app()(ctx.args, standalone_mode=not ctx.args)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def terminal(ctx: typer.Context) -> None:
|
|
104
|
+
"""[t] Terminal management commands."""
|
|
105
|
+
from machineconfig.scripts.python.terminal import get_app
|
|
106
|
+
get_app()(ctx.args, standalone_mode=not ctx.args)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def get_app() -> typer.Typer:
|
|
110
|
+
app = typer.Typer(help="MachineConfig CLI - Manage your machine configurations and workflows", no_args_is_help=True, add_help_option=True, add_completion=False)
|
|
111
|
+
|
|
112
|
+
ctx_settings: dict[str, object] = {"allow_extra_args": True, "allow_interspersed_args": True, "ignore_unknown_options": True, "help_option_names": []}
|
|
113
|
+
|
|
114
|
+
app.command(name="devops", help="[d] DevOps related commands", context_settings=ctx_settings)(devops)
|
|
115
|
+
app.command(name="d", hidden=True, context_settings=ctx_settings)(devops)
|
|
116
|
+
app.command(name="cloud", help="[c] Cloud management commands", context_settings=ctx_settings)(cloud)
|
|
117
|
+
app.command(name="c", hidden=True, context_settings=ctx_settings)(cloud)
|
|
118
|
+
app.command(name="sessions", help="[s] Session and layout management", context_settings=ctx_settings)(sessions)
|
|
119
|
+
app.command(name="s", hidden=True, context_settings=ctx_settings)(sessions)
|
|
120
|
+
app.command(name="agents", help="[a] 🤖 AI Agents management commands", context_settings=ctx_settings)(agents)
|
|
121
|
+
app.command(name="a", hidden=True, context_settings=ctx_settings)(agents)
|
|
122
|
+
app.command(name="utils", help="[u] Utility commands", context_settings=ctx_settings)(utils)
|
|
123
|
+
app.command(name="u", hidden=True, context_settings=ctx_settings)(utils)
|
|
124
|
+
app.command(name="terminal", help="[t] Terminal management commands", context_settings=ctx_settings)(terminal)
|
|
125
|
+
app.command(name="t", hidden=True, context_settings=ctx_settings)(terminal)
|
|
126
|
+
|
|
127
|
+
app.command(name="fire", help="[f] Fire and manage jobs", no_args_is_help=False, context_settings={"allow_extra_args": True, "allow_interspersed_args": False})(fire)
|
|
128
|
+
app.command(name="f", hidden=True, no_args_is_help=False, context_settings={"allow_extra_args": True, "allow_interspersed_args": False})(fire)
|
|
129
|
+
app.command("ftpx", no_args_is_help=True, help="[ff] File transfer utility though SSH")(ftpx)
|
|
130
|
+
app.command("ff", no_args_is_help=True, hidden=True)(ftpx)
|
|
131
|
+
app.command("croshell", no_args_is_help=False, help="[r] Cross-shell command execution")(croshell)
|
|
132
|
+
app.command("r", no_args_is_help=False, hidden=True)(croshell)
|
|
48
133
|
|
|
49
134
|
return app
|
|
50
135
|
|
|
51
136
|
|
|
52
|
-
def main():
|
|
137
|
+
def main() -> None:
|
|
53
138
|
app = get_app()
|
|
54
139
|
app()
|
|
55
140
|
|
|
@@ -1,72 +1,26 @@
|
|
|
1
|
+
"""msearch - Machineconfig search helper."""
|
|
1
2
|
|
|
2
3
|
import typer
|
|
3
4
|
from typing import Annotated
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
def machineconfig_search(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
install_if_missing("tv")
|
|
21
|
-
install_if_missing("bat")
|
|
22
|
-
install_if_missing("fd")
|
|
23
|
-
install_if_missing("rg") # ripgrep
|
|
24
|
-
install_if_missing("rga") # ripgrep-all
|
|
25
|
-
# install_if_missing("tree-sitter-cli")
|
|
26
|
-
return
|
|
27
|
-
if symantic:
|
|
28
|
-
script = ""
|
|
29
|
-
for an_ex in extension.split(","):
|
|
30
|
-
script = script + f"""\nparse *.{an_ex} """
|
|
31
|
-
from machineconfig.utils.code import run_shell_script
|
|
32
|
-
run_shell_script(script=script)
|
|
33
|
-
return
|
|
34
|
-
if ast:
|
|
35
|
-
from machineconfig.scripts.python.helpers.ast_search import get_repo_symbols
|
|
36
|
-
symbols = get_repo_symbols(directory)
|
|
37
|
-
from machineconfig.utils.options import choose_from_options
|
|
38
|
-
try:
|
|
39
|
-
res = choose_from_options(options=symbols, msg="Select a symbol to search for:", tv=True, multi=False)
|
|
40
|
-
from rich import print_json
|
|
41
|
-
import json
|
|
42
|
-
res_json = json.dumps(res, indent=4)
|
|
43
|
-
print_json(res_json)
|
|
44
|
-
return None
|
|
45
|
-
except Exception as e:
|
|
46
|
-
print(f"❌ Error during selection: {e}")
|
|
47
|
-
return None
|
|
48
|
-
if file:
|
|
49
|
-
script = """fzf --ansi --preview-window 'right:60%' --preview 'bat --color=always --style=numbers,grid,header --line-range :300 {}' """
|
|
50
|
-
if no_dotfiles:
|
|
51
|
-
script = "fd | " + script
|
|
52
|
-
from machineconfig.utils.code import run_shell_script
|
|
53
|
-
run_shell_script(script=script)
|
|
54
|
-
return
|
|
55
|
-
from machineconfig.scripts.python.helpers_msearch import FZFG_LINUX_PATH, FZFG_WINDOWS_PATH
|
|
56
|
-
import platform
|
|
57
|
-
if platform.system() == "Linux" or platform.system() == "Darwin":
|
|
58
|
-
script = FZFG_LINUX_PATH.read_text(encoding="utf-8")
|
|
59
|
-
elif platform.system() == "Windows":
|
|
60
|
-
script = FZFG_WINDOWS_PATH.read_text(encoding="utf-8")
|
|
61
|
-
else:
|
|
62
|
-
raise RuntimeError("Unsupported platform")
|
|
63
|
-
if rga:
|
|
64
|
-
script = script.replace("rg ", "rga ").replace("ripgrep", "ripgrep-all")
|
|
65
|
-
from machineconfig.utils.code import exit_then_run_shell_script
|
|
66
|
-
exit_then_run_shell_script(script=script, strict=False)
|
|
8
|
+
path: Annotated[str, typer.Argument(help="The directory/file to search")] = ".",
|
|
9
|
+
ast: Annotated[bool, typer.Option(..., "--ast", "-a", help="The abstract syntax tree search/ tree sitter search of symbols")] = False,
|
|
10
|
+
symantic: Annotated[bool, typer.Option(..., "--symantic", "-s", help="The symantic search of symbols")] = False,
|
|
11
|
+
extension: Annotated[str, typer.Option(..., "--extension", "-E", help="File extension to filter by (e.g., .py, .js)")] = "",
|
|
12
|
+
file: Annotated[bool, typer.Option(..., "--file", "-f", help="File search using fzf")] = False,
|
|
13
|
+
no_dotfiles: Annotated[bool, typer.Option(..., "--no-dotfiles", "-D", help="Exclude dotfiles from search")] = False,
|
|
14
|
+
rga: Annotated[bool, typer.Option(..., "--rga", "-A", help="Use ripgrep-all for searching all (non text files) instead of ripgrep")] = False,
|
|
15
|
+
edit: Annotated[bool, typer.Option(..., "--edit", "-e", help="Open selection in editor (helix)")] = False,
|
|
16
|
+
install_dependencies: Annotated[bool, typer.Option(..., "--install-req", "-i", help="Install required dependencies if missing")] = False,
|
|
17
|
+
) -> None:
|
|
18
|
+
"""Machineconfig search helper."""
|
|
19
|
+
from machineconfig.scripts.python.helpers.helpers_msearch.msearch_impl import machineconfig_search as impl
|
|
20
|
+
impl(path=path, ast=ast, symantic=symantic, extension=extension, file=file, no_dotfiles=no_dotfiles, rga=rga, edit=edit, install_dependencies=install_dependencies)
|
|
67
21
|
|
|
68
22
|
|
|
69
|
-
def main():
|
|
23
|
+
def main() -> None:
|
|
70
24
|
app = typer.Typer(add_completion=False, no_args_is_help=True)
|
|
71
25
|
app.command(name="msearch", help=machineconfig_search.__doc__, short_help="machineconfig search helper", no_args_is_help=False)(machineconfig_search)
|
|
72
26
|
app()
|