machineconfig 6.85__py3-none-any.whl → 6.86__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.

Files changed (41) hide show
  1. machineconfig/scripts/python/agents.py +18 -7
  2. machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
  3. machineconfig/scripts/python/fire_jobs.py +2 -2
  4. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.py +6 -5
  5. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +1 -1
  6. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_gemini.py +2 -3
  7. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_qwen.py +2 -2
  8. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +4 -4
  9. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_helper_types.py +2 -2
  10. machineconfig/scripts/python/helpers_agents/templates/prompt.txt +6 -0
  11. machineconfig/scripts/python/helpers_agents/templates/template.sh +24 -0
  12. machineconfig/scripts/python/helpers_devops/cli_config.py +1 -1
  13. machineconfig/scripts/python/helpers_devops/cli_self.py +3 -3
  14. machineconfig/scripts/python/helpers_devops/cli_utils.py +17 -0
  15. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +1 -1
  16. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +1 -1
  17. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +1 -1
  18. machineconfig/scripts/python/nw/mount_nfs +1 -1
  19. machineconfig/scripts/python/sessions.py +1 -1
  20. machineconfig/scripts/python/utils.py +9 -22
  21. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
  22. machineconfig/setup_linux/web_shortcuts/interactive.sh +1 -1
  23. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +1 -1
  24. machineconfig/utils/meta.py +4 -3
  25. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  26. machineconfig/utils/ssh.py +1 -1
  27. machineconfig/utils/upgrade_packages.py +28 -24
  28. {machineconfig-6.85.dist-info → machineconfig-6.86.dist-info}/METADATA +1 -1
  29. {machineconfig-6.85.dist-info → machineconfig-6.86.dist-info}/RECORD +39 -39
  30. machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
  31. machineconfig/scripts/python/helpers_fire/template.sh +0 -15
  32. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/__init__.py +0 -0
  33. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/__init__.py +0 -0
  34. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
  35. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
  36. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
  37. /machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
  38. /machineconfig/scripts/python/{helpers_fire/helpers4.py → helpers_fire_command/file_wrangler.py} +0 -0
  39. {machineconfig-6.85.dist-info → machineconfig-6.86.dist-info}/WHEEL +0 -0
  40. {machineconfig-6.85.dist-info → machineconfig-6.86.dist-info}/entry_points.txt +0 -0
  41. {machineconfig-6.85.dist-info → machineconfig-6.86.dist-info}/top_level.txt +0 -0
@@ -5,7 +5,7 @@
5
5
  from pathlib import Path
6
6
  from typing import cast, Optional, get_args, Annotated
7
7
  import typer
8
- from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import AGENTS, HOST, MODEL, PROVIDER
8
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AGENTS, HOST, MODEL, PROVIDER
9
9
 
10
10
 
11
11
  def create(
@@ -24,11 +24,22 @@ def create(
24
24
  agents_dir: Annotated[Optional[Path], typer.Option(..., "--agents-dir", "-ad", help="Directory to store agent files. If not provided, will be constructed automatically.")] = None,
25
25
  ):
26
26
 
27
- from machineconfig.scripts.python.helpers_fire.fire_agents_help_launch import prep_agent_launch, get_agents_launch_layout
28
- from machineconfig.scripts.python.helpers_fire.fire_agents_load_balancer import chunk_prompts
27
+ from machineconfig.scripts.python.helpers_agents.fire_agents_help_launch import prep_agent_launch, get_agents_launch_layout
28
+ from machineconfig.scripts.python.helpers_agents.fire_agents_load_balancer import chunk_prompts
29
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import PROVIDER2MODEL
29
30
  from machineconfig.utils.accessories import get_repo_root, randstr
30
31
  import json
31
32
 
33
+ # validate model is valid for the provider
34
+ valid_models_for_provider = PROVIDER2MODEL.get(provider, [])
35
+ if model not in valid_models_for_provider:
36
+ available_models = "\n ".join(valid_models_for_provider) if valid_models_for_provider else "(none configured)"
37
+ raise typer.BadParameter(
38
+ f"Model '{model}' is not valid for provider '{provider}'.\n"
39
+ f"Valid models for '{provider}':\n {available_models}\n"
40
+ f"All available models: {', '.join(get_args(MODEL))}"
41
+ )
42
+
32
43
  # validate mutual exclusive
33
44
  prompt_options = [prompt, prompt_path]
34
45
  provided_prompt = [opt for opt in prompt_options if opt is not None]
@@ -85,7 +96,7 @@ agents create "{context_path_resolved}" \\
85
96
  --separator "{separator}" \\
86
97
  {"--separate" if separate else ""}
87
98
  """
88
- (agents_dir / "aa_agents_relaunch.py").write_text(data=regenerate_py_code, encoding="utf-8")
99
+ (agents_dir / "aa_agents_relaunch.sh").write_text(data=regenerate_py_code, encoding="utf-8")
89
100
  layout_output_path = output_path if output_path is not None else agents_dir / "layout.json"
90
101
  layout_output_path.parent.mkdir(parents=True, exist_ok=True)
91
102
  layout_output_path.write_text(data=json.dumps(layoutfile, indent=4), encoding="utf-8")
@@ -136,11 +147,11 @@ def collect(
136
147
 
137
148
  def template():
138
149
  from platform import system
139
- import machineconfig.scripts.python.helpers_fire as module
150
+ import machineconfig.scripts.python.helpers_agents as module
140
151
  if system() == "Linux" or system() == "Darwin":
141
- template_path = Path(module.__file__).parent / "template.sh"
152
+ template_path = Path(module.__file__).parent / "templates/template.sh"
142
153
  elif system() == "Windows":
143
- template_path = Path(module.__file__).parent / "template.ps1"
154
+ template_path = Path(module.__file__).parent / "templates/template.ps1"
144
155
  else:
145
156
  raise typer.BadParameter(f"Unsupported OS: {system()}")
146
157
 
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=6.85",
5
+ # "machineconfig>=6.86",
6
6
  # "textual",
7
7
  # "pyperclip",
8
8
  # ]
@@ -26,7 +26,7 @@ def route(args: FireJobArgs, fire_args: str = "") -> None:
26
26
  suffixes = {".py", ".sh", ".ps1"}
27
27
  choice_file = match_file_name(sub_string=args.path, search_root=PathExtended.cwd(), suffixes=suffixes)
28
28
  elif path_obj.is_dir():
29
- from machineconfig.scripts.python.helpers_fire.helpers4 import search_for_files_of_interest
29
+ from machineconfig.scripts.python.helpers_fire_command.file_wrangler import search_for_files_of_interest
30
30
  print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
31
31
  files = search_for_files_of_interest(path_obj)
32
32
  print(f"🔍 Got #{len(files)} results.")
@@ -85,7 +85,7 @@ uv run --project {repo_root} --with marimo marimo edit --host 0.0.0.0 marimo_nb.
85
85
 
86
86
  if args.module or (args.debug and args.choose_function): # because debugging tools do not support choosing functions and don't interplay with fire module. So the only way to have debugging and choose function options is to import the file as a module into a new script and run the function of interest there and debug the new script.
87
87
  assert choice_file.suffix == ".py", f"File must be a python file to be imported as a module. Got {choice_file}"
88
- from machineconfig.scripts.python.helpers_fire.helpers4 import get_import_module_code, wrap_import_in_try_except
88
+ from machineconfig.scripts.python.helpers_fire_command.file_wrangler import get_import_module_code, wrap_import_in_try_except
89
89
  from machineconfig.utils.meta import lambda_to_python_script
90
90
  from machineconfig.utils.code import print_code
91
91
  import_code = get_import_module_code(str(choice_file))
@@ -2,7 +2,7 @@
2
2
  from pathlib import Path
3
3
  # import shlex
4
4
  from typing import Optional
5
- from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import HOST, PROVIDER, MODEL
5
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import HOST, PROVIDER, MODEL
6
6
 
7
7
 
8
8
  def fire_crush(api_key: Optional[str], model: MODEL, provider: PROVIDER, machine: HOST, prompt_path: Path, repo_root: Path) -> str:
@@ -16,21 +16,22 @@ crush run {prompt_path}
16
16
  json_path = Path(__file__).parent / "fire_crush.json"
17
17
  json_template = json_path.read_text(encoding="utf-8")
18
18
  json_filled = json_template.replace("{api_key}", api_key).replace("{model}", model).replace("{provider}", provider)
19
- import tempfile
20
- temp_config_file_local = tempfile.mkstemp(suffix=".json")[1]
19
+ from machineconfig.utils.accessories import randstr
20
+ temp_config_file_local = Path.home().joinpath("tmp_results/tmp_files/crush_" + randstr(8) + ".json")
21
+ temp_config_file_local.parent.mkdir(parents=True, exist_ok=True)
21
22
  Path(temp_config_file_local).write_text(json_filled, encoding="utf-8")
22
23
  cmd = f"""
23
24
 
24
25
  # -e "PATH_PROMPT=$PATH_PROMPT"
25
26
  # opencode --model "{provider}/{model}" run {prompt_path}
26
-
27
+
27
28
 
28
29
  echo "Running prompt @ {prompt_path.relative_to(repo_root)} using Docker with Crush..."
29
30
  docker run -it --rm \
30
31
  -v "{repo_root}:/workspace/{repo_root.name}" \
31
32
  -v "{temp_config_file_local}:/root/.local/share/crush/crush.json" \
32
33
  -w "/workspace/{repo_root.name}" \
33
- statistician/machineconfig:latest \
34
+ statistician/machineconfig-ai:latest \
34
35
  bash -i -c "source ~/.bashrc && cd /workspace/{repo_root.name} && cat /root/.local/share/crush/crush.json && crush run 'Please act on contents of this prompt ./{prompt_path.relative_to(repo_root)}'"
35
36
 
36
37
  """
@@ -2,7 +2,7 @@
2
2
 
3
3
  from pathlib import Path
4
4
  # import shlex
5
- from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import HOST
5
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import HOST
6
6
  from typing import Optional
7
7
 
8
8
  def fire_cursor(api_key: Optional[str], prompt_path: Path, machine: HOST) -> str:
@@ -1,7 +1,7 @@
1
1
 
2
2
  from pathlib import Path
3
3
  import shlex
4
- from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import HOST
4
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import HOST
5
5
  from typing import Optional, Literal
6
6
 
7
7
 
@@ -37,8 +37,7 @@ docker run -it --rm \
37
37
  -e GEMINI_API_KEY="{api_key}" \
38
38
  -v "{repo_root}:/workspace/{repo_root.name}" \
39
39
  -w "/workspace/{repo_root.name}" \
40
- statistician/machineconfig:latest \
40
+ statistician/machineconfig-ai:latest \
41
41
  gemini --prompt "$PATH_PROMPT"
42
42
  """
43
43
  return cmd
44
-
@@ -1,7 +1,7 @@
1
1
 
2
2
  from pathlib import Path
3
3
  import shlex
4
- from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import HOST
4
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import HOST
5
5
  from typing import Optional, Literal
6
6
 
7
7
 
@@ -37,7 +37,7 @@ docker run -it --rm \
37
37
  -v {shlex.quote(str(oauth_creds))}:/root/.qwen/oauth_creds.json \
38
38
  -v {shlex.quote(str(settings))}:/root/.qwen/settings.json \
39
39
  -w "/workspace/{repo_root.name}" \
40
- statistician/machineconfig:latest \
40
+ statistician/machineconfig-ai:latest \
41
41
  qwen --prompt "$PATH_PROMPT"
42
42
  """
43
43
  return cmd
@@ -2,7 +2,7 @@
2
2
  import random
3
3
  import shlex
4
4
  from pathlib import Path
5
- from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import AGENTS, AGENT_NAME_FORMATTER, HOST, PROVIDER, MODEL
5
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AGENTS, AGENT_NAME_FORMATTER, HOST, PROVIDER, MODEL
6
6
 
7
7
 
8
8
  def get_api_keys(provider: PROVIDER) -> list[str]:
@@ -66,14 +66,14 @@ sleep 0.1
66
66
  assert provider == "google", "Gemini agent only works with google provider."
67
67
  api_keys = get_api_keys(provider="google")
68
68
  api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
69
- from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_gemini import fire_gemini
69
+ from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_gemini import fire_gemini
70
70
  cmd = fire_gemini(api_key=api_key, prompt_path=prompt_path, machine=machine, model="gemini-2.5-pro", provider="google", repo_root=repo_root)
71
71
  case "cursor-agent":
72
- from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_cursor_agents import fire_cursor
72
+ from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_cursor_agents import fire_cursor
73
73
  cmd = fire_cursor(prompt_path=prompt_path, machine=machine, api_key=None)
74
74
  raise NotImplementedError("Cursor agent is not implemented yet, api key missing")
75
75
  case "crush":
76
- from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_crush import fire_crush
76
+ from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_crush import fire_crush
77
77
  api_keys = get_api_keys(provider=provider)
78
78
  api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
79
79
  cmd = fire_crush(api_key=api_key, prompt_path=prompt_path, machine=machine, repo_root=repo_root, model=model, provider=provider)
@@ -20,7 +20,7 @@ AGENTS: TypeAlias = Literal["cursor-agent", "gemini", "qwen-code", "copilot", "c
20
20
  HOST: TypeAlias = Literal["local", "docker"]
21
21
  PROVIDER: TypeAlias = Literal["azure", "google", "aws", "openai", "anthropic", "openrouter", "xai"]
22
22
  MODEL: TypeAlias = Literal["zai/glm-4.6", "anthropic/sonnet-4.5", "google/gemini-2.5-pro", "openai/gpt-5-codex",
23
- "openrouter/supernova", "x-ai/grok-4-fast:free",
23
+ "openrouter/supernova", "openrouter/andromeda-alpha", "x-ai/grok-4-fast:free",
24
24
  ]
25
25
  PROVIDER2MODEL: dict[PROVIDER, list[MODEL]] = {
26
26
  "azure": ["zai/glm-4.6"],
@@ -28,7 +28,7 @@ PROVIDER2MODEL: dict[PROVIDER, list[MODEL]] = {
28
28
  "aws": [],
29
29
  "openai": ["openai/gpt-5-codex"],
30
30
  "anthropic": ["anthropic/sonnet-4.5"],
31
- "openrouter": ["openrouter/supernova"],
31
+ "openrouter": ["openrouter/supernova", "openrouter/andromeda-alpha"],
32
32
  "xai": ["x-ai/grok-4-fast:free"]
33
33
  }
34
34
 
@@ -0,0 +1,6 @@
1
+
2
+ please look if it is possible to easily relpace PathExtended with normal Path from pathlib
3
+ if its one or two lines of code, then go ahead and make it standard and stop using the extended library
4
+ you focus ont he methods used,
5
+
6
+ only look at the files below
@@ -0,0 +1,24 @@
1
+
2
+ #!/bin/bash
3
+ # set -e # Exit immediately if a command exits with a non-zero status.
4
+
5
+ JOB_NAME="outpatient_mapping"
6
+ REPO_ROOT="$HOME/code/machineconfig"
7
+ CONTEXT_PATH="$REPO_ROOT/.ai/todo/files.md"
8
+ # agents make-todo --strategy keywords from machineconfig.utils.path_extended import PathExtended
9
+ PROMPT_PATH="$REPO_ROOT/src/machineconfig/scripts/python/helpers_agents/templates/prompt.txt"
10
+ AGENTS_DIR="$REPO_ROOT/.ai/agents/$JOB_NAME"
11
+
12
+ agents create --agents crush \
13
+ --host docker \
14
+ --model x-ai/grok-4-fast:free \
15
+ --provider openrouter \
16
+ --context-path $CONTEXT_PATH \
17
+ --prompt-path $PROMPT_PATH \
18
+ --job-name $JOB_NAME \
19
+ --agents-dir $AGENTS_DIR
20
+ sessions balance-load "$AGENTS_DIR/layout.json" --max-thresh 6 --breaking-method moreLayouts --thresh-type number --output-path "$AGENTS_DIR/layout_balanced.json"
21
+ sessions run "$AGENTS_DIR/layout_balanced.json" --kill-upon-completion
22
+
23
+
24
+ # agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"
@@ -46,7 +46,7 @@ def path():
46
46
  uv_with = ["textual"]
47
47
  uv_project_dir = None
48
48
  if not Path.home().joinpath("code/machineconfig").exists():
49
- uv_with.append("machineconfig>=6.85")
49
+ uv_with.append("machineconfig>=6.86")
50
50
  else:
51
51
  uv_project_dir = str(Path.home().joinpath("code/machineconfig"))
52
52
  run_shell_script(get_uv_command_executing_python_script(python_script=path.read_text(encoding="utf-8"), uv_with=uv_with, uv_project_dir=uv_project_dir)[0])
@@ -41,9 +41,9 @@ def install(no_copy_assets: Annotated[bool, typer.Option("--no-assets-copy", "-n
41
41
  else:
42
42
  import platform
43
43
  if platform.system() == "Windows":
44
- run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=6.85" """)
44
+ run_shell_script(r"""& "$HOME\.local\bin\uv.exe" tool install --upgrade "machineconfig>=6.86" """)
45
45
  else:
46
- run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.85" """)
46
+ run_shell_script("""$HOME/.local/bin/uv tool install --upgrade "machineconfig>=6.86" """)
47
47
  from machineconfig.profile.create_shell_profile import create_default_shell_profile
48
48
  if not no_copy_assets:
49
49
  create_default_shell_profile() # involves copying assets too
@@ -68,7 +68,7 @@ def navigate():
68
68
  path = Path(navigator.__file__).resolve().parent.joinpath("devops_navigator.py")
69
69
  from machineconfig.utils.code import run_shell_script
70
70
  if Path.home().joinpath("code/machineconfig").exists(): executable = f"""--project "{str(Path.home().joinpath("code/machineconfig"))}" --with textual"""
71
- else: executable = """--with "machineconfig>=6.85,textual" """
71
+ else: executable = """--with "machineconfig>=6.86,textual" """
72
72
  run_shell_script(f"""uv run {executable} {path}""")
73
73
 
74
74
 
@@ -219,3 +219,20 @@ uv add --group plot \
219
219
  """
220
220
  from machineconfig.utils.code import run_shell_script
221
221
  run_shell_script(script)
222
+ # def add_dev_packages(repo_dir: Annotated[Optional[str], typer.Option(..., "--repo-dir", "-r", help="Path to the repository root directory")] = None):
223
+ # if repo_dir is None:
224
+ # r_dir = Path.cwd()
225
+ # else:
226
+ # r_dir = Path(repo_dir).resolve()
227
+ # if not r_dir.exists() or not r_dir.is_dir() or not (r_dir / "pyproject.toml").exists():
228
+ # typer.echo(f"❌ The provided repo directory `{r_dir}` is not valid or does not contain a `pyproject.toml` file.")
229
+ # raise typer.Exit(code=1)
230
+ # command = f"""
231
+ # cd "{r_dir}" || exit 1
232
+ # uv add nbformat ipdb ipykernel ipython pylint pyright mypy pyrefly ty pytest
233
+ # """
234
+ # from machineconfig.utils.code import run_shell_script
235
+ # typer.echo(f"➡️ Installing dev packages in repo at `{r_dir}`...")
236
+ # run_shell_script(command)
237
+ # typer.echo(f"✅ Dev packages installed successfully in repo at `{r_dir}`.")
238
+ # # TODO: see upgrade packages.
@@ -22,7 +22,7 @@ def choose_function_or_lines(choice_file: PathExtended, kwargs_dict: dict[str, o
22
22
  choice_function: Optional[str] = None
23
23
 
24
24
  if choice_file.suffix == ".py":
25
- from machineconfig.scripts.python.helpers_fire.helpers4 import parse_pyfile
25
+ from machineconfig.scripts.python.helpers_fire_command.file_wrangler import parse_pyfile
26
26
  options, func_args = parse_pyfile(file_path=str(choice_file))
27
27
  choice_function_tmp = choose_from_options(msg="Choose a function to run", options=options, fzf=True, multi=False)
28
28
  assert isinstance(choice_function_tmp, str), f"choice_function must be a string. Got {type(choice_function_tmp)}"
@@ -80,7 +80,7 @@ git pull originEnc master
80
80
  uv_project_dir = f"""{str(Path.home().joinpath("code/machineconfig"))}"""
81
81
  uv_with = None
82
82
  else:
83
- uv_with = ["machineconfig>=6.85"]
83
+ uv_with = ["machineconfig>=6.86"]
84
84
  uv_project_dir = None
85
85
 
86
86
  import tempfile
@@ -21,7 +21,7 @@ def create_from_function(
21
21
  suffixes = {".py"}
22
22
  choice_file = match_file_name(sub_string=path, search_root=PathExtended.cwd(), suffixes=suffixes)
23
23
  elif path_obj.is_dir():
24
- from machineconfig.scripts.python.helpers_fire.helpers4 import search_for_files_of_interest
24
+ from machineconfig.scripts.python.helpers_fire_command.file_wrangler import search_for_files_of_interest
25
25
  print(f"🔍 Searching recursively for Python, PowerShell and Shell scripts in directory `{path_obj}`")
26
26
  files = search_for_files_of_interest(path_obj)
27
27
  print(f"🔍 Got #{len(files)} results.")
@@ -5,7 +5,7 @@
5
5
  # mkdir ~/data/local
6
6
  # sudo mount -o nolock,noatime,nodiratime,proto=tcp,timeo=600,retrans=2,noac alex-p51s-5:/home/alex/data/local ./data/local
7
7
 
8
- uv run --python 3.14 --with "machineconfig>=6.85" python -m machineconfig.scripts.python.mount_nfs
8
+ uv run --python 3.14 --with "machineconfig>=6.86" python -m machineconfig.scripts.python.mount_nfs
9
9
  # Check if remote server is reachable and share folder exists
10
10
  if ! ping -c 1 "$remote_server" &> /dev/null; then
11
11
  echo "💥 Error: Remote server $remote_server is not reachable."
@@ -51,7 +51,7 @@ def select_layout(layouts_json_file: Path, selected_layouts_names: Optional[list
51
51
 
52
52
  def find_layout_file(layout_path: str, ) -> Path:
53
53
  from machineconfig.utils.path_extended import PathExtended
54
- from machineconfig.scripts.python.helpers_fire.helpers4 import search_for_files_of_interest
54
+ from machineconfig.scripts.python.helpers_fire_command.file_wrangler import search_for_files_of_interest
55
55
  from machineconfig.utils.options import choose_from_options
56
56
  from machineconfig.utils.path_helper import match_file_name, sanitize_path
57
57
  path_obj = sanitize_path(layout_path)
@@ -2,9 +2,7 @@
2
2
 
3
3
  from machineconfig.scripts.python.helpers_devops.cli_utils import download, merge_pdfs, get_machine_specs, init_project, compress_pdf
4
4
  import typer
5
- from typing import Annotated, Optional
6
- from pathlib import Path
7
-
5
+ from typing import Annotated
8
6
 
9
7
  def kill_process(
10
8
  # name: Annotated[Optional[str], typer.Option(..., "--name", "-n", help="Name of the process to kill")],
@@ -21,31 +19,20 @@ def kill_process(
21
19
  # )
22
20
 
23
21
 
24
- def add_dev_packages(repo_dir: Annotated[Optional[str], typer.Option(..., "--repo-dir", "-r", help="Path to the repository root directory")] = None):
25
- if repo_dir is None:
26
- r_dir = Path.cwd()
27
- else:
28
- r_dir = Path(repo_dir).resolve()
29
- if not r_dir.exists() or not r_dir.is_dir() or not (r_dir / "pyproject.toml").exists():
30
- typer.echo(f"❌ The provided repo directory `{r_dir}` is not valid or does not contain a `pyproject.toml` file.")
31
- raise typer.Exit(code=1)
32
- command = f"""
33
- cd "{r_dir}" || exit 1
34
- uv add nbformat ipdb ipykernel ipython pylint pyright mypy pyrefly ty pytest
35
- """
36
- from machineconfig.utils.code import run_shell_script
37
- typer.echo(f"➡️ Installing dev packages in repo at `{r_dir}`...")
38
- run_shell_script(command)
39
- typer.echo(f"✅ Dev packages installed successfully in repo at `{r_dir}`.")
40
- # TODO: see upgrade packages.
41
-
42
-
22
+ def upgrade_packages():
23
+ from machineconfig.utils.upgrade_packages import generate_uv_add_commands
24
+ from pathlib import Path
25
+ generate_uv_add_commands(pyproject_path=Path.cwd() / "pyproject.toml", output_path=Path.cwd() / "pyproject_init.sh")
43
26
 
44
27
 
45
28
  def get_app() -> typer.Typer:
46
29
  app = typer.Typer(help="🛠️ utilities operations", no_args_is_help=True, add_help_option=False, add_completion=False)
47
30
  app.command(name="kill-process", no_args_is_help=False, help="[k] Choose a process to kill")(kill_process)
48
31
  app.command(name="k", no_args_is_help=False, help="Choose a process to kill", hidden=True)(kill_process)
32
+
33
+ app.command(name="upgrade-packages", no_args_is_help=False, help="[up] Upgrade project dependencies.")(upgrade_packages)
34
+ app.command(name="up", no_args_is_help=False, hidden=True)(upgrade_packages)
35
+
49
36
  app.command(name="download", no_args_is_help=True, help="[d] Download a file from a URL and optionally decompress it.")(download)
50
37
  app.command(name="d", no_args_is_help=True, hidden=True)(download)
51
38
  app.command(name="get-machine-specs", no_args_is_help=False, help="[g] Get machine specifications.")(get_machine_specs)
@@ -7,7 +7,7 @@ $user = ''
7
7
  $sharePath = ''
8
8
  $driveLetter = ''
9
9
 
10
- uv run --python 3.14 --with "machineconfig>=6.85" python -m machineconfig.scripts.python.mount_ssh
10
+ uv run --python 3.14 --with "machineconfig>=6.86" python -m machineconfig.scripts.python.mount_ssh
11
11
 
12
12
  net use T: \\sshfs.kr\$user@$host.local
13
13
  # this worked: net use T: \\sshfs\alex@alex-p51s-5.local
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash
2
2
  . <( curl -sSL "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_linux/uv.sh")
3
3
  mcfg() {
4
- "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.85" mcfg "$@"
4
+ "$HOME/.local/bin/uv" run --python 3.14 --with "machineconfig>=6.86" mcfg "$@"
5
5
  }
6
6
  alias d="mcfg devops"
7
7
  alias c="mcfg cloud"
@@ -2,7 +2,7 @@
2
2
 
3
3
  iex (iwr "https://raw.githubusercontent.com/thisismygitrepo/machineconfig/main/src/machineconfig/setup_windows/uv.ps1").Content
4
4
  function mcfg {
5
- & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.85" mcfg $args
5
+ & "$HOME\.local\bin\uv.exe" run --python 3.14 --with "machineconfig>=6.86" mcfg $args
6
6
  }
7
7
  function d { mcfg devops @args }
8
8
  function c { mcfg cloud @args }
@@ -5,7 +5,7 @@ from typing import Any
5
5
 
6
6
 
7
7
  def get_import_module_string(py_file: str) -> str:
8
- from machineconfig.scripts.python.helpers_fire.helpers4 import get_import_module_code
8
+ from machineconfig.scripts.python.helpers_fire_command.file_wrangler import get_import_module_code
9
9
  from machineconfig.utils.accessories import get_repo_root
10
10
  from pathlib import Path
11
11
  repo_root = get_repo_root(Path(py_file))
@@ -230,8 +230,9 @@ def lambda_to_python_script(lmb: Callable[[], Any], in_global: bool, import_modu
230
230
  if lines[-1].startswith("return "):
231
231
  lines[-1] = lines[-1].replace("return ", "# return ", 1)
232
232
  result_text = "\n".join(lines)
233
- if "Optional[" in result_text or "Any" in result_text or "Union[" in result_text or "Literal[" in result_text:
234
- result_text = "from typing import *\n\n" + result_text
233
+
234
+ if "Optional" in result_text or "Any" in result_text or "Union" in result_text or "Literal" in result_text:
235
+ result_text = "from typing import Optional, Any, Union, Literal\n\n" + result_text
235
236
 
236
237
  if import_prefix:
237
238
  result_text = f"{import_prefix}{result_text}"
@@ -6,7 +6,7 @@ capturing all user inputs collected during interactive execution.
6
6
 
7
7
  from pathlib import Path
8
8
  from typing import TypedDict, Literal, NotRequired
9
- from machineconfig.scripts.python.helpers_fire.fire_agents_help_launch import AGENTS
9
+ from machineconfig.scripts.python.helpers_agents.fire_agents_help_launch import AGENTS
10
10
 
11
11
  SEARCH_STRATEGIES = Literal["file_path", "keyword_search", "filename_pattern"]
12
12
 
@@ -8,7 +8,7 @@ from machineconfig.utils.terminal import Response
8
8
  from machineconfig.utils.accessories import pprint, randstr
9
9
  from machineconfig.utils.meta import lambda_to_python_script
10
10
  UV_RUN_CMD = "$HOME/.local/bin/uv run" if platform.system() != "Windows" else """& "$env:USERPROFILE/.local/bin/uv" run"""
11
- MACHINECONFIG_VERSION = "machineconfig>=6.85"
11
+ MACHINECONFIG_VERSION = "machineconfig>=6.86"
12
12
  DEFAULT_PICKLE_SUBDIR = "tmp_results/tmp_scripts/ssh"
13
13
 
14
14
  class SSH:
@@ -25,44 +25,48 @@ def generate_uv_add_commands(pyproject_path: Path, output_path: Path) -> None:
25
25
  pyproject_path: Path to the pyproject.toml file
26
26
  output_path: Path where to write the uv add commands
27
27
  """
28
- # Read pyproject.toml
29
28
  with open(pyproject_path, "rb") as f:
30
29
  pyproject_data: dict[str, Any] = tomllib.load(f)
31
30
 
32
31
  commands: list[str] = []
33
32
 
34
- # Handle main dependencies (no group)
35
33
  if "project" in pyproject_data and "dependencies" in pyproject_data["project"]:
36
- main_deps = pyproject_data["project"]["dependencies"]
34
+ main_deps: list[str] = pyproject_data["project"]["dependencies"]
37
35
  if main_deps:
38
- # Extract package names without version constraints
39
- package_names = [extract_package_name(dep) for dep in main_deps]
40
- commands.append(f"uv add {' '.join(package_names)}")
36
+ package_names: list[str] = [extract_package_name(dep) for dep in main_deps]
37
+ commands.append(f"uv add --no-cache {' '.join(package_names)}")
41
38
 
42
- # Handle optional dependencies as groups
43
39
  if "project" in pyproject_data and "optional-dependencies" in pyproject_data["project"]:
44
- optional_deps = pyproject_data["project"]["optional-dependencies"]
40
+ optional_deps: dict[str, list[str]] = pyproject_data["project"]["optional-dependencies"]
45
41
  for group_name, deps in optional_deps.items():
46
42
  if deps:
47
43
  package_names = [extract_package_name(dep) for dep in deps]
48
- commands.append(f"uv add {' '.join(package_names)} --group {group_name}")
44
+ commands.append(f"uv add --no-cache --group {group_name} {' '.join(package_names)}")
49
45
 
50
- # Handle dependency-groups (like dev)
51
46
  if "dependency-groups" in pyproject_data:
52
- dep_groups = pyproject_data["dependency-groups"]
47
+ dep_groups: dict[str, list[str]] = pyproject_data["dependency-groups"]
53
48
  for group_name, deps in dep_groups.items():
54
49
  if deps:
55
50
  package_names = [extract_package_name(dep) for dep in deps]
56
51
  if group_name == "dev":
57
- commands.append(f"uv add {' '.join(package_names)} --dev")
52
+ commands.append(f"uv add --no-cache --dev {' '.join(package_names)}")
58
53
  else:
59
- commands.append(f"uv add {' '.join(package_names)} --group {group_name}")
60
-
61
- # Write commands to output file
62
- with open(output_path, "w") as f:
63
- for command in commands:
64
- f.write(command + "\n")
65
-
54
+ commands.append(f"uv add --no-cache --group {group_name} {' '.join(package_names)}")
55
+
56
+ # with open(output_path, "w") as f:
57
+ # f.write("#!/bin/bash\n")
58
+ # f.write("set -e\n\n")
59
+ # f.write("uv cache clean --force\n\n")
60
+ # for command in commands:
61
+ # f.write(command + "\n")
62
+ script = f"""
63
+ #!/bin/bash
64
+ set -e
65
+ uv cache clean --force
66
+ rm -rfd .venv
67
+ {"".join(f"{command}\n" for command in commands)}
68
+ """
69
+ output_path.write_text(script.strip() + "\n", encoding="utf-8")
66
70
  print(f"Generated {len(commands)} uv add commands in {output_path}")
67
71
 
68
72
 
@@ -90,12 +94,12 @@ def extract_package_name(dependency_spec: str) -> str:
90
94
 
91
95
 
92
96
  if __name__ == "__main__":
93
- # Example usage
94
- current_dir = Path.cwd()
95
- pyproject_file = current_dir / "pyproject.toml"
96
- output_file = current_dir / "uv_add_commands.txt"
97
-
97
+ current_dir: Path = Path.cwd()
98
+ pyproject_file: Path = current_dir / "pyproject.toml"
99
+ output_file: Path = current_dir / "pyproject_init.sh"
98
100
  if pyproject_file.exists():
99
101
  generate_uv_add_commands(pyproject_file, output_file)
102
+ output_file.chmod(0o755)
103
+ print(f"Script is executable and ready to run: {output_file}")
100
104
  else:
101
105
  print(f"pyproject.toml not found at {pyproject_file}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 6.85
3
+ Version: 6.86
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -118,18 +118,18 @@ machineconfig/scripts/linux/other/share_nfs,sha256=LDQZQ9TV7z2y7RtNHiO4Wb513Mzty
118
118
  machineconfig/scripts/linux/other/start_docker,sha256=_yDN_PPqgzSUnPT7dmniMTpL4IfeeaGy1a2OL3IJlDU,525
119
119
  machineconfig/scripts/linux/other/switch_ip,sha256=NQfeKMBSbFY3eP6M-BadD-TQo5qMP96DTp77KHk2tU8,613
120
120
  machineconfig/scripts/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
- machineconfig/scripts/python/agents.py,sha256=gGeeWCI0AN_DyDJ3G5KR9qSsXv8zkUd5dBRRWqz-dQE,10722
121
+ machineconfig/scripts/python/agents.py,sha256=4wOpvY41oVlE2V3UsdHgjiDPMsiRCiHPKYZDOUoDF88,11383
122
122
  machineconfig/scripts/python/cloud.py,sha256=yAD6ciKiEtv2CH3g2NScDK5cpCZQi7Vu8yyeehw_cU8,1263
123
123
  machineconfig/scripts/python/croshell.py,sha256=QyQbVboNqDQHJkUeSsJvdT212t4TW46yat3GBzneqsQ,8649
124
124
  machineconfig/scripts/python/devops.py,sha256=Lv4d-UlyOREj4VTcu_pxswYo54Mawe3XGeKjreGQDYg,2222
125
125
  machineconfig/scripts/python/devops_navigator.py,sha256=5Cm384D4S8_GsvMzTwr0C16D0ktf8_5Mk5bEJncwDO8,237
126
- machineconfig/scripts/python/fire_jobs.py,sha256=bW2RHIP1qD54d_WZHflNwTej7lrdE8OOuJ7ZKQpiB8I,13897
126
+ machineconfig/scripts/python/fire_jobs.py,sha256=WpidbsAM5O4Z2fUR6Ajo6eq3dArgDqChENzZh-nNOKA,13923
127
127
  machineconfig/scripts/python/ftpx.py,sha256=A13hL_tDYfcsaK9PkshK-0lrUS6KPhPCtwqWtLSo6IM,9764
128
128
  machineconfig/scripts/python/interactive.py,sha256=zt3g6nGKR_Y5A57UnR4Y5-JpLzrpnCOSaqU1bnaikK0,11666
129
129
  machineconfig/scripts/python/mcfg.py,sha256=TB5lZDZDImGqX4_mMSEv4ZoFigIPA0RXn-9H2cmPS6g,2457
130
- machineconfig/scripts/python/sessions.py,sha256=JfN8M7r7f8DkfiGJ4jz2NfXvABm90nOZJmLGxPgw_2M,9518
130
+ machineconfig/scripts/python/sessions.py,sha256=Q_fbprawvW1x_E6jKQ-Z2Z5MRurRaepKUvi5z1G4CUw,9531
131
131
  machineconfig/scripts/python/terminal.py,sha256=5D0RlZkx9ut5WlwjDI8j-t_z6u-H_jJD1eKBnWy_TGU,5191
132
- machineconfig/scripts/python/utils.py,sha256=1960YceYJyjo0UFAiVaxIMIXm031wdYRA8l1U6k6h9s,3282
132
+ machineconfig/scripts/python/utils.py,sha256=9vwF5QRbHphNF154UYg6Ld3W0b3N9uEkfMEeR-nP_sg,2802
133
133
  machineconfig/scripts/python/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
134
  machineconfig/scripts/python/ai/generate_files.py,sha256=VfjKdwgF8O6E4oiRtfWNliibLmmwGe7f9ld6wpOsXTw,14498
135
135
  machineconfig/scripts/python/ai/initai.py,sha256=P4-NCLJPWeNef_k-l4TQ92AB1Xm1k3xzdqSBIjmevnQ,1573
@@ -162,7 +162,21 @@ machineconfig/scripts/python/ai/solutions/opencode/opencode.json,sha256=nahHKRw1
162
162
  machineconfig/scripts/python/ai/solutions/opencode/opencode.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
163
163
  machineconfig/scripts/python/env_manager/__init__.py,sha256=E4LAHbU1wo2dLjE36ntv8U7QNTe8TasujUAYK9SLvWk,6
164
164
  machineconfig/scripts/python/env_manager/path_manager_backend.py,sha256=ZVGlGJALhg7zNABDdwXxL7MFbL2BXPebObipXSLGbic,1552
165
- machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=fu03lfRAzf7NSyMdbKFfA-eqNWtUeyZAF02QAiOxEY8,6932
165
+ machineconfig/scripts/python/env_manager/path_manager_tui.py,sha256=Z6jFnQbERLtYoHeswpeujLIDsqGOfknHkOHwabnb-ok,6932
166
+ machineconfig/scripts/python/helpers_agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
+ machineconfig/scripts/python/helpers_agents/fire_agents_help_launch.py,sha256=o08UNqcKKgpfvxMpXbzo9s7Yw0qiuM_ihLf5iDv-cpg,5627
168
+ machineconfig/scripts/python/helpers_agents/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_lu4cbjlJlYMBw0v52NTGiSrGjk8,2991
169
+ machineconfig/scripts/python/helpers_agents/fire_agents_helper_types.py,sha256=oBm29ZfU4ydNLxCot9uYacsC3fYqolHmYDCV1BsNTQ8,1364
170
+ machineconfig/scripts/python/helpers_agents/fire_agents_load_balancer.py,sha256=mpqx3uaQdBXYieuvhdK-qsvLepf9oIMo3pwPj9mSEDI,1079
171
+ machineconfig/scripts/python/helpers_agents/agentic_frameworks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
+ machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.json,sha256=YGuJF-qlMjhICPf0QnNfQlGNPsYrJJDlNcgmes0TFhM,252
173
+ machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_crush.py,sha256=vJrG_ZCbxwCMa3RsyvkAnSyMJlyHOYvgAxlqkukxCAY,1774
174
+ machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py,sha256=gYU_uHpw7kwhCZGK0Uldf23ZJV_-OdjdNCEElHTsdag,564
175
+ machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py,sha256=7Mf4MKnnYteZ8olShHnqNpubdYAXzjDguhpMVyNdE3k,1559
176
+ machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py,sha256=gG7hsZIwp_f6iWBaAJ8BKsfNdrB4A3RhpLpz1XYidRo,1699
177
+ machineconfig/scripts/python/helpers_agents/templates/prompt.txt,sha256=sX7Fh_hxaazNw-cv9hIw_XdL6WTcsiG53ILwoyZWv5o,257
178
+ machineconfig/scripts/python/helpers_agents/templates/template.ps1,sha256=9F7h9NMIJisunMIii2wETpgonQmiGLHLHfWg9k_QWKo,859
179
+ machineconfig/scripts/python/helpers_agents/templates/template.sh,sha256=RJRw5xZv0-NGJkKeuOiEeXFiaZ07RJJUlttJfs7il90,986
166
180
  machineconfig/scripts/python/helpers_cloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
181
  machineconfig/scripts/python/helpers_cloud/cloud_copy.py,sha256=OV1w3ajFVFs6FJytjIPOntYB_aW2ywGohKi73V4Dm2Y,8691
168
182
  machineconfig/scripts/python/helpers_cloud/cloud_helpers.py,sha256=GA-bxXouUmknk9fyQAsPT-Xl3RG9-yBed71a2tu9Pig,4914
@@ -178,15 +192,15 @@ machineconfig/scripts/python/helpers_croshell/start_slidev.py,sha256=HfJReOusTPh
178
192
  machineconfig/scripts/python/helpers_croshell/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76YjjexWWBM0pM,2041
179
193
  machineconfig/scripts/python/helpers_croshell/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
180
194
  machineconfig/scripts/python/helpers_devops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
- machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=Dt1ePdB8oIz2cBZNKdzhWqEa8Fe9C5gLrh55qoYZmMY,7218
195
+ machineconfig/scripts/python/helpers_devops/cli_config.py,sha256=XPeql-3v0ZN2Oe2h1-MWDNmUCRkZSzXwaDmhbFUg9K4,7218
182
196
  machineconfig/scripts/python/helpers_devops/cli_config_dotfile.py,sha256=fluxRtD6hlbh131_RmeKr2Dy8tZpeC4H9-wp2sYt0dM,2486
183
197
  machineconfig/scripts/python/helpers_devops/cli_data.py,sha256=79Xvx7YnbueruEnl69hrDg2AhVxf_zCUdlVcKfeMGyQ,1774
184
198
  machineconfig/scripts/python/helpers_devops/cli_nw.py,sha256=edeZPhQrm-hvOx80TPt9GNZXlXq9kkTaRSZSpNdku8w,6441
185
199
  machineconfig/scripts/python/helpers_devops/cli_repos.py,sha256=Xwkv1adqHZvTfRSPWiqSK3PZ1XADyx3llw_YkbxaKyE,12505
186
- machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=-XLkpJHc9s-Hi9ZiLPzCIV1gdeQwsbOIlpchxJNV4Gs,6225
200
+ machineconfig/scripts/python/helpers_devops/cli_self.py,sha256=kS7L_o8jju3fCbrmoymOpUUUYtSybVm8CUIxcOwBS78,6225
187
201
  machineconfig/scripts/python/helpers_devops/cli_share_server.py,sha256=q9pFJ6AxPuygMr3onMNOKEuuQHbVE_6Qoyo7xRT5FX0,4196
188
202
  machineconfig/scripts/python/helpers_devops/cli_terminal.py,sha256=k_PzXaiGyE0vXr0Ii1XcJz2A7UvyPJrR31TRWt4RKRI,6019
189
- machineconfig/scripts/python/helpers_devops/cli_utils.py,sha256=P_PoJnY8ltCmhCarh74dxF2cm5cRBeyU95xPrRzJANU,10182
203
+ machineconfig/scripts/python/helpers_devops/cli_utils.py,sha256=B9pnosujOxZLpwzJO4YAqeO-2rvvOFIZgrUwGREZXfM,11118
190
204
  machineconfig/scripts/python/helpers_devops/devops_backup_retrieve.py,sha256=Dn8luB6QJzxKiiFSC-NMqiYddWZoca3A8eOjMYZDzTc,5598
191
205
  machineconfig/scripts/python/helpers_devops/devops_status.py,sha256=PJVPhfhXq8der6Xd-_fjZfnizfM-RGfJApkRGhGBmNo,20525
192
206
  machineconfig/scripts/python/helpers_devops/devops_update_repos.py,sha256=kSln8_-Wn7Qu0NaKdt-QTN_bBVyTIAWHH8xVYKK-vCM,10133
@@ -195,25 +209,11 @@ machineconfig/scripts/python/helpers_devops/themes/choose_pwsh_theme.ps1,sha256=
195
209
  machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.bash,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
196
210
  machineconfig/scripts/python/helpers_devops/themes/choose_starship_theme.ps1,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
197
211
  machineconfig/scripts/python/helpers_devops/themes/choose_wezterm_theme.py,sha256=pRXAGe2IpysYshsaF8CKEwHI8EGPtLcM8PtiAqM7vmM,3425
198
- machineconfig/scripts/python/helpers_fire/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
199
- machineconfig/scripts/python/helpers_fire/fire_agents_help_launch.py,sha256=GBhi9WvmQDwJOcF3sjvge5x5U7TUokcVo4K4CbEm-OI,5619
200
- machineconfig/scripts/python/helpers_fire/fire_agents_help_search.py,sha256=qIfSS_su2YJ1Gb0_lu4cbjlJlYMBw0v52NTGiSrGjk8,2991
201
- machineconfig/scripts/python/helpers_fire/fire_agents_helper_types.py,sha256=umX-Na6W_8kGZX7ccElnvGP8yxJ8prGBiG3-dO9vXJ0,1304
202
- machineconfig/scripts/python/helpers_fire/fire_agents_load_balancer.py,sha256=mpqx3uaQdBXYieuvhdK-qsvLepf9oIMo3pwPj9mSEDI,1079
203
- machineconfig/scripts/python/helpers_fire/helpers4.py,sha256=VCrnv5n42SbDXKDJ8VNu_bA0UruTLWXQBK9SxhflzTY,5477
204
- machineconfig/scripts/python/helpers_fire/prompt.txt,sha256=Ni6r-Dh0Ez2XwfOZl3MOMDhfn6BJ2z4IdK3wFvA3c_o,116
205
- machineconfig/scripts/python/helpers_fire/template.ps1,sha256=9F7h9NMIJisunMIii2wETpgonQmiGLHLHfWg9k_QWKo,859
206
- machineconfig/scripts/python/helpers_fire/template.sh,sha256=rOND8s0-MuymFMn6lUspa0SkDikQkKlnJRl2Kyo57Ho,837
207
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.json,sha256=YGuJF-qlMjhICPf0QnNfQlGNPsYrJJDlNcgmes0TFhM,252
209
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_crush.py,sha256=NRcnjVu4-_6UqWdeRH4A2g79QIAOwnqVtiqOwn7qzlE,1614
210
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_cursor_agents.py,sha256=ujRHjh6yD6r-GrqNRQ_Yw29Lp94Dm5dIFLWxU2rFbaY,562
211
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_gemini.py,sha256=KYJhClOMnuTFOp7VtDQ5ZSOhZYCciOkYyM3T53bxCag,1566
212
- machineconfig/scripts/python/helpers_fire/agentic_frameworks/fire_qwen.py,sha256=uh0Blj_EHnUbLPqmqgc67HwaVuz5CllC3q2ILEtG7sU,1694
213
212
  machineconfig/scripts/python/helpers_fire_command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
213
  machineconfig/scripts/python/helpers_fire_command/cloud_manager.py,sha256=YN0DYLzPKtMBaks-EAVwFmkCu3XeHWMr1D21uqX5dDk,3429
214
+ machineconfig/scripts/python/helpers_fire_command/file_wrangler.py,sha256=VCrnv5n42SbDXKDJ8VNu_bA0UruTLWXQBK9SxhflzTY,5477
215
215
  machineconfig/scripts/python/helpers_fire_command/fire_jobs_args_helper.py,sha256=teioVhLI-skNpbYOJGo7WJEnz_FHzyidHff174CZSg8,4359
216
- machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py,sha256=4MrlCVijbx7GQyAN9s5LDh-7heSjMXYrXdqiP6uC3ug,5378
216
+ machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py,sha256=0aqH_ShEvmrzMC2oyWDds-CwtUqJNniNjp39-0wTpvQ,5391
217
217
  machineconfig/scripts/python/helpers_fire_command/fire_jobs_streamlit_helper.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
218
218
  machineconfig/scripts/python/helpers_navigator/__init__.py,sha256=5qPsu5ztoj0gkrioY0Yg0GTZ9JAn6SG2gAk-6DpuQ00,764
219
219
  machineconfig/scripts/python/helpers_navigator/command_builder.py,sha256=59ipLYdkWvj_l1xqrC6rz2E2GNCP91BVBsX8vqTRnjQ,4618
@@ -225,7 +225,7 @@ machineconfig/scripts/python/helpers_navigator/search_bar.py,sha256=kDi8Jhxap8wd
225
225
  machineconfig/scripts/python/helpers_repos/action.py,sha256=8je051kpGZ7A_GRsQyWKhPZ8xVW7tSm4bnPu6VjxaXk,9755
226
226
  machineconfig/scripts/python/helpers_repos/action_helper.py,sha256=XRCtkGkNrxauqUd9qkxtfJt02Mx2gejSYDLL0jyWn24,6176
227
227
  machineconfig/scripts/python/helpers_repos/clone.py,sha256=UULEG5xJuXlPGU0nqXH6U45jA9DOFqLw8B4iPytCwOQ,5471
228
- machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=ZiQgOHuc0GYGSmIOB833W-5C4Plt75FpgeYcRipraak,10450
228
+ machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py,sha256=4h34KHXAR9OYn5Uko67V2KuHquWh7XkNuvDQHI0805c,10450
229
229
  machineconfig/scripts/python/helpers_repos/count_lines.py,sha256=Q5c7b-DxvTlQmljoic7niTuiAVyFlwYvkVQ7uRJHiTo,16009
230
230
  machineconfig/scripts/python/helpers_repos/count_lines_frontend.py,sha256=vSDtrF4829jziwp6WZmGt9G8MJ9jY4hfXqtf0vhkYSE,607
231
231
  machineconfig/scripts/python/helpers_repos/entrypoint.py,sha256=WYEFGUJp9HWImlFjbs_hiFZrUqM_KEYm5VvSUjWd04I,2810
@@ -235,13 +235,13 @@ machineconfig/scripts/python/helpers_repos/secure_repo.py,sha256=fW_GyHqWrpnf7ne
235
235
  machineconfig/scripts/python/helpers_repos/sync.py,sha256=P0P7Dog2uFDvwxcLP3YHPwm6AtvCm6QOz1BLqw53xOo,3259
236
236
  machineconfig/scripts/python/helpers_repos/update.py,sha256=cUIMUMm-50HrY6fzxSMZnFplhToVjVPZMm1j_otTha4,11060
237
237
  machineconfig/scripts/python/helpers_sessions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
238
- machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py,sha256=zLssrCT3WRReiK0AFwctELN_o_svKypagUwJj0nT6i4,3122
238
+ machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py,sha256=RPJ7cu9IIzjPw9OKEma1HEz7t5TPg1DMvVnFqoAagLE,3135
239
239
  machineconfig/scripts/python/nw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
240
240
  machineconfig/scripts/python/nw/add_ssh_key.py,sha256=9JLmWu8pE7PAL5VuCFd19iVEdCR90LwY6_9P7gKQzEE,9373
241
241
  machineconfig/scripts/python/nw/devops_add_identity.py,sha256=aPjcHbTLhxYwWYcandyAHdwuO15ZBu3fB82u6bI0tMQ,3773
242
242
  machineconfig/scripts/python/nw/devops_add_ssh_key.py,sha256=CkIl85hZLtG9k7yXLSzqi88YrilHV4hIUWHAPBwxWjw,8922
243
243
  machineconfig/scripts/python/nw/mount_drive,sha256=zemKofv7hOmRN_V3qK0q580GkfWw3VdikyVVQyiu8j8,3514
244
- machineconfig/scripts/python/nw/mount_nfs,sha256=YcDHqe9fEnOk01qEd4ItnlHZr2GQce-e-o7V3HHK-pI,1855
244
+ machineconfig/scripts/python/nw/mount_nfs,sha256=toDevRO02ygKFPDtOJcT7C3mJSB2SdJmN1X6n7srTyQ,1855
245
245
  machineconfig/scripts/python/nw/mount_nfs.py,sha256=lOMDY4RS7tx8gsCazVR5tNNwFbaRyO2PJlnwBCDQgCM,3573
246
246
  machineconfig/scripts/python/nw/mount_nw_drive,sha256=BqjGBCbwe5ZAsZDO3L0zHhh_gJfZy1CYOcqXA4Y-WkQ,2262
247
247
  machineconfig/scripts/python/nw/mount_nw_drive.py,sha256=iru6AtnTyvyuk6WxlK5R4lDkuliVpPV5_uBTVVhXtjQ,1550
@@ -260,7 +260,7 @@ machineconfig/scripts/windows/term.ps1,sha256=nme_OWis84qN-zI2c0rdysNcDIdoaEKajX
260
260
  machineconfig/scripts/windows/mounts/mount_nfs.ps1,sha256=XrAdzpxE6a4OccSmWJ7YWHJTnsZK8uXnFE5j9GOPA20,2026
261
261
  machineconfig/scripts/windows/mounts/mount_nw.ps1,sha256=puxcfZc3ZCJerm8pj8OZGVoTYkhzp-h7oV-MrksSqIE,454
262
262
  machineconfig/scripts/windows/mounts/mount_smb.ps1,sha256=PzYWpIO9BpwXjdWlUQL9pnMRnOGNSkxfh4bHukJFme8,69
263
- machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=fK9_qWP_-xCfvM1eexaOgWp32HYZGq257_s448V5I44,322
263
+ machineconfig/scripts/windows/mounts/mount_ssh.ps1,sha256=VsnDsy-SFizmzSPPBTszHQHUr3YIIHXwJY656SWTMsU,322
264
264
  machineconfig/scripts/windows/mounts/share_cloud.cmd,sha256=exD7JCdxw2LqVjw2MKCYHbVZlEqmelXtwnATng-dhJ4,1028
265
265
  machineconfig/scripts/windows/mounts/share_smb.ps1,sha256=U7x8ULYSjbgzTtiHNSKQuTaZ_apilDvkGV5Xm5hXk5M,384
266
266
  machineconfig/scripts/windows/mounts/unlock_bitlocker.ps1,sha256=Wv-SLscdckV-1mG3p82VXKPY9zW3hgkRmcLUXIZ1daE,253
@@ -377,7 +377,7 @@ machineconfig/setup_linux/others/cli_installation.sh,sha256=gVvszYZJgKPRJx2SEaE3
377
377
  machineconfig/setup_linux/others/mint_keyboard_shortcuts.sh,sha256=F5dbg0n9RHsKGPn8fIdZMn3p0RrHEkb8rWBGsdVGbus,1207
378
378
  machineconfig/setup_linux/ssh/openssh_all.sh,sha256=3dg6HEUFbHQOzLfSAtzK_D_GB8rGCCp_aBnxNdnidVc,824
379
379
  machineconfig/setup_linux/ssh/openssh_wsl.sh,sha256=1eeRGrloVB34K5z8yWVUMG5b9pV-WBfHgV9jqXiYgCQ,1398
380
- machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=s1HGck3ZSTz2OhybyA42K-s2mEOjrJouElzmwOwuS9Y,488
380
+ machineconfig/setup_linux/web_shortcuts/interactive.sh,sha256=SBwPZ2qwn-WTsuGm2PP087ETjiEjBLjx8yq2u2Q8m8Q,488
381
381
  machineconfig/setup_mac/__init__.py,sha256=Q1waupi5vCBroLqc8Rtnw69_7jLnm2Cs7_zH_GSZgMs,616
382
382
  machineconfig/setup_mac/apps.sh,sha256=R0N6fBwLCzwy4qAormyMerXXXrHazibSkY6NrNOpTQU,2772
383
383
  machineconfig/setup_mac/uv.sh,sha256=CSN8oCBKS-LK1vJJqYOhAMcrouTf4Q_F3cpplc_ddMA,1157
@@ -391,7 +391,7 @@ machineconfig/setup_windows/others/power_options.ps1,sha256=c7Hn94jBD5GWF29CxMhm
391
391
  machineconfig/setup_windows/ssh/add-sshkey.ps1,sha256=qfPdqCpd9KP3VhH4ifsUm1Xvec7c0QVl4Wt8JIAm9HQ,1653
392
392
  machineconfig/setup_windows/ssh/add_identity.ps1,sha256=b8ZXpmNUSw3IMYvqSY7ClpdWPG39FS7MefoWnRhWN2U,506
393
393
  machineconfig/setup_windows/ssh/openssh-server.ps1,sha256=OMlYQdvuJQNxF5EILLPizB6BZAT3jAmDsv1WcVVxpFQ,2529
394
- machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=Jq0jg6azu1wPPybq2gsxpQoOKlcMdSxXmELKgGCyBsU,616
394
+ machineconfig/setup_windows/web_shortcuts/interactive.ps1,sha256=l0Pw5IJH1c5lqRf_SpzXIJ_HCsfyizQKaVX46RERgzc,616
395
395
  machineconfig/setup_windows/wt_and_pwsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
396
396
  machineconfig/setup_windows/wt_and_pwsh/set_wt_settings.py,sha256=ogxJnwpdcpH7N6dFJu95UCNoGYirZKQho_3X0F_hmXs,6791
397
397
  machineconfig/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -400,7 +400,7 @@ machineconfig/utils/code.py,sha256=yEsBswdx94hZedsb_Gy0-H6_CeivHzOiv8-aK9tGIgg,5
400
400
  machineconfig/utils/installer.py,sha256=m92KwGeep0FrT8V42xJDQdcT74HK9RB-xza0Ii50nHA,10376
401
401
  machineconfig/utils/io.py,sha256=4dSieoqZO8Vvi4vW8lLoITDHBvmFp4dtl3kyeZHQ6Co,2528
402
402
  machineconfig/utils/links.py,sha256=KM6vIn3hag9FYEzLSHP5MAM9tU_RStw2mCq2_OvmmZA,23672
403
- machineconfig/utils/meta.py,sha256=RXbq3_DSFAFNAEt9GjWqP2TjCWUs0v7gAkKCgRpdwO8,9853
403
+ machineconfig/utils/meta.py,sha256=4ocYH3Zi6bVN6FVgXoGIfoasV6oxi67I9rQ8hvyYinc,9892
404
404
  machineconfig/utils/notifications.py,sha256=tuXIudcip0tEioG-bm8BbLr3FMDve4f6BktlznBhKxM,9013
405
405
  machineconfig/utils/options.py,sha256=VWYx3EKJxIp-CJ8gDGYdjclKSc1tMUhyrC8v3seeneo,7447
406
406
  machineconfig/utils/path_extended.py,sha256=WyJwoHnXdvSQQJ-yrxTX78FpqYmgVeKDYpNEB9UsRck,53223
@@ -409,10 +409,10 @@ machineconfig/utils/procs.py,sha256=YPA_vEYQGwPd_o_Lc6nOTBo5BrB1tSs8PJ42XiGpenM,
409
409
  machineconfig/utils/scheduler.py,sha256=fguwvINyaupOxdU5Uadyxalh_jXTXDzt0ioEgjEOKcM,14705
410
410
  machineconfig/utils/scheduling.py,sha256=vcJgajeJPSWkJNlarYJSmLvasdOuCtBM4druOAB1Nwc,11089
411
411
  machineconfig/utils/source_of_truth.py,sha256=ZAnCRltiM07ig--P6g9_6nEAvNFC4X4ERFTVcvpIYsE,764
412
- machineconfig/utils/ssh.py,sha256=QeS0SHvtJzGtXTbC_7Qns--QjQlfk0uIDT--vOKA9OA,39008
412
+ machineconfig/utils/ssh.py,sha256=ERcNJOAzPMGQ3PWcdTUPRCqohZh91dD9vtEVT8xEbEk,39008
413
413
  machineconfig/utils/terminal.py,sha256=VDgsjTjBmMGgZN0YIc0pJ8YksLDrBtiXON1EThy7_is,4264
414
414
  machineconfig/utils/tst.py,sha256=6u1GI49NdcpxH2BYGAusNfY5q9G_ytCGVzFM5b6HYpM,674
415
- machineconfig/utils/upgrade_packages.py,sha256=TCohwiwc0btSsInOloxDVuk5i88yc1vBK8RZcoMWoUw,3425
415
+ machineconfig/utils/upgrade_packages.py,sha256=3H-U-Le0kn7ACYf_RHMSDav2UGnWzZEqgaL9bC0Yn4s,3695
416
416
  machineconfig/utils/ve.py,sha256=L-6PBXnQGXThiwWgheJMQoisAZOZA6SVCbGw2J-GFnI,2414
417
417
  machineconfig/utils/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
418
418
  machineconfig/utils/cloud/onedrive/README.md,sha256=i20oRG110AN0yLF3DARHfWXDJjPBiSgWI8CP2HQAqrk,3774
@@ -433,13 +433,13 @@ machineconfig/utils/installer_utils/github_release_bulk.py,sha256=WJf_qZlF02SmIc
433
433
  machineconfig/utils/installer_utils/installer.py,sha256=aqoAUv2gQoiIrg9ErxLh_kZWyFk3dOL4HEVxXEyAmW4,11178
434
434
  machineconfig/utils/installer_utils/installer_abc.py,sha256=cXNDIhq1itdGUCxososxfJo029eMlVOj6hu8GY22gC4,11672
435
435
  machineconfig/utils/installer_utils/installer_class.py,sha256=t9OlHF3br7zuYuLuO75voedRPrDmo9YOXSDxRNXe3Jk,17188
436
- machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=Xbi59rU35AzR7HZZ8ZQ8aUu_FjSgijNqc8Sme0rCk2Y,2050
436
+ machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=d3pwhmE-EuHPxaIoTTZeUdDUEK9QqtimV8zO3vV-7N4,2052
437
437
  machineconfig/utils/schemas/installer/installer_types.py,sha256=QClRY61QaduBPJoSpdmTIdgS9LS-RvE-QZ-D260tD3o,1214
438
438
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=TcqlZdGVoH8htG5fHn1KWXhRdPueAcoyApppZsPAPto,2020
439
439
  machineconfig/utils/schemas/repos/repos_types.py,sha256=ECVr-3IVIo8yjmYmVXX2mnDDN1SLSwvQIhx4KDDQHBQ,405
440
440
  machineconfig/utils/ssh_utils/utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
441
- machineconfig-6.85.dist-info/METADATA,sha256=1GTj08560el2P_sSeVjfViYjV0ZJoVX5E--oKQiFWRQ,2928
442
- machineconfig-6.85.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
443
- machineconfig-6.85.dist-info/entry_points.txt,sha256=uf_ZPJa02_y3Fw5Z7m22cq7PwxhYd1QV2FfPNZTl_dQ,519
444
- machineconfig-6.85.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
445
- machineconfig-6.85.dist-info/RECORD,,
441
+ machineconfig-6.86.dist-info/METADATA,sha256=3HeFIcWWUIQR4SuI9BhVujs9BwFYTl68lLi6xomn_e0,2928
442
+ machineconfig-6.86.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
443
+ machineconfig-6.86.dist-info/entry_points.txt,sha256=uf_ZPJa02_y3Fw5Z7m22cq7PwxhYd1QV2FfPNZTl_dQ,519
444
+ machineconfig-6.86.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
445
+ machineconfig-6.86.dist-info/RECORD,,
@@ -1,2 +0,0 @@
1
-
2
- please read the code then explain it in English, put your answer in a markdown file with random name at repo root.
@@ -1,15 +0,0 @@
1
-
2
- #!/bin/bash
3
- # set -e # Exit immediately if a command exits with a non-zero status.
4
-
5
- JOB_NAME="outpatient_mapping"
6
- REPO_ROOT="$HOME/code/work/winter_planning/"
7
- CONTEXT_PATH="$REPO_ROOT/data/outpatient_mapping/op_services.csv"
8
- PROMPT_PATH="$REPO_ROOT/data/outpatient_mapping/prompt"
9
- AGENTS_DIR="$REPO_ROOT/.ai/agents/$JOB_NAME"
10
- agents create --agents crush --host docker --model x-ai/grok-4-fast:free --provider openrouter --context-path $CONTEXT_PATH --prompt-path $PROMPT_PATH --job-name $JOB_NAME --agents-dir $AGENTS_DIR
11
- sessions balance-load "$AGENTS_DIR/layout.json" --max-thresh 6 --breaking-method moreLayouts --thresh-type number --output-path "$AGENTS_DIR/layout_balanced.json"
12
- sessions run "$AGENTS_DIR/layout_balanced.json" --kill-upon-completion
13
-
14
-
15
- # agents collect $AGENTS_DIR "$REPO_ROOT/.ai/agents/$JOB_NAME/collected.txt"