machineconfig 6.85__py3-none-any.whl → 6.87__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 +8 -10
  2. machineconfig/scripts/python/env_manager/path_manager_tui.py +1 -1
  3. machineconfig/scripts/python/fire_jobs.py +9 -12
  4. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.py +11 -11
  5. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_cursor_agents.py +3 -4
  6. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_gemini.py +10 -12
  7. machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_qwen.py +5 -6
  8. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_launch.py +11 -8
  9. machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_helper_types.py +4 -14
  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/helpers4.py → helpers_fire_command/file_wrangler.py} +40 -1
  16. machineconfig/scripts/python/helpers_fire_command/fire_jobs_route_helper.py +1 -1
  17. machineconfig/scripts/python/helpers_repos/cloud_repo_sync.py +1 -1
  18. machineconfig/scripts/python/helpers_sessions/sessions_multiprocess.py +1 -1
  19. machineconfig/scripts/python/nw/mount_nfs +1 -1
  20. machineconfig/scripts/python/sessions.py +1 -1
  21. machineconfig/scripts/python/utils.py +9 -22
  22. machineconfig/scripts/windows/mounts/mount_ssh.ps1 +1 -1
  23. machineconfig/setup_linux/web_shortcuts/interactive.sh +1 -1
  24. machineconfig/setup_windows/web_shortcuts/interactive.ps1 +1 -1
  25. machineconfig/utils/meta.py +4 -3
  26. machineconfig/utils/schemas/fire_agents/fire_agents_input.py +1 -1
  27. machineconfig/utils/ssh.py +1 -1
  28. machineconfig/utils/upgrade_packages.py +28 -24
  29. {machineconfig-6.85.dist-info → machineconfig-6.87.dist-info}/METADATA +1 -1
  30. {machineconfig-6.85.dist-info → machineconfig-6.87.dist-info}/RECORD +39 -39
  31. machineconfig/scripts/python/helpers_fire/prompt.txt +0 -2
  32. machineconfig/scripts/python/helpers_fire/template.sh +0 -15
  33. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/__init__.py +0 -0
  34. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/__init__.py +0 -0
  35. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/agentic_frameworks/fire_crush.json +0 -0
  36. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_help_search.py +0 -0
  37. /machineconfig/scripts/python/{helpers_fire → helpers_agents}/fire_agents_load_balancer.py +0 -0
  38. /machineconfig/scripts/python/{helpers_fire → helpers_agents/templates}/template.ps1 +0 -0
  39. {machineconfig-6.85.dist-info → machineconfig-6.87.dist-info}/WHEEL +0 -0
  40. {machineconfig-6.85.dist-info → machineconfig-6.87.dist-info}/entry_points.txt +0 -0
  41. {machineconfig-6.85.dist-info → machineconfig-6.87.dist-info}/top_level.txt +0 -0
@@ -5,13 +5,13 @@
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, PROVIDER
9
9
 
10
10
 
11
11
  def create(
12
12
  agent: Annotated[AGENTS, typer.Option(..., "--agents", "-a", help=f"Agent type. One of {', '.join(get_args(AGENTS)[:3])}")],
13
13
  host: Annotated[HOST, typer.Option(..., "--host", "-h", help=f"Machine to run agents on. One of {', '.join(get_args(HOST))}")],
14
- model: Annotated[MODEL, typer.Option(..., "--model", "-m", help=f"Model to use (for crush agent). One of {', '.join(get_args(MODEL)[:3])}")],
14
+ model: Annotated[str, typer.Option(..., "--model", "-m", help="Model to use (for crush agent).")],
15
15
  provider: Annotated[PROVIDER, typer.Option(..., "--provider", "-p", help=f"Provider to use (for crush agent). One of {', '.join(get_args(PROVIDER)[:3])}")],
16
16
  context_path: Annotated[Optional[Path], typer.Option(..., "--context-path", "-c", help="Path to the context file/folder, defaults to .ai/todo/")] = None,
17
17
  separator: Annotated[str, typer.Option(..., "--separator", "-s", help="Separator for context")] = "\n",
@@ -24,8 +24,8 @@ 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
29
  from machineconfig.utils.accessories import get_repo_root, randstr
30
30
  import json
31
31
 
@@ -85,7 +85,7 @@ agents create "{context_path_resolved}" \\
85
85
  --separator "{separator}" \\
86
86
  {"--separate" if separate else ""}
87
87
  """
88
- (agents_dir / "aa_agents_relaunch.py").write_text(data=regenerate_py_code, encoding="utf-8")
88
+ (agents_dir / "aa_agents_relaunch.sh").write_text(data=regenerate_py_code, encoding="utf-8")
89
89
  layout_output_path = output_path if output_path is not None else agents_dir / "layout.json"
90
90
  layout_output_path.parent.mkdir(parents=True, exist_ok=True)
91
91
  layout_output_path.write_text(data=json.dumps(layoutfile, indent=4), encoding="utf-8")
@@ -136,11 +136,11 @@ def collect(
136
136
 
137
137
  def template():
138
138
  from platform import system
139
- import machineconfig.scripts.python.helpers_fire as module
139
+ import machineconfig.scripts.python.helpers_agents as module
140
140
  if system() == "Linux" or system() == "Darwin":
141
- template_path = Path(module.__file__).parent / "template.sh"
141
+ template_path = Path(module.__file__).parent / "templates/template.sh"
142
142
  elif system() == "Windows":
143
- template_path = Path(module.__file__).parent / "template.ps1"
143
+ template_path = Path(module.__file__).parent / "templates/template.ps1"
144
144
  else:
145
145
  raise typer.BadParameter(f"Unsupported OS: {system()}")
146
146
 
@@ -168,8 +168,6 @@ def get_app():
168
168
  PROVIDER options: {', '.join(get_args(PROVIDER))}
169
169
  {sep}
170
170
  AGENT options: {', '.join(get_args(AGENTS))}
171
- {sep}
172
- MODEL options: {sep.join(get_args(MODEL))}
173
171
  """
174
172
  agents_app.command("create", no_args_is_help=True, help=agents_full_help)(create)
175
173
  agents_app.command("c", no_args_is_help=True, help="Create agents layout file, ready to run.", hidden=True)(create)
@@ -2,7 +2,7 @@
2
2
  # /// script
3
3
  # requires-python = ">=3.13"
4
4
  # dependencies = [
5
- # "machineconfig>=6.85",
5
+ # "machineconfig>=6.87",
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.")
@@ -67,25 +67,26 @@ uv run --project {repo_root} --with marimo marimo edit --host 0.0.0.0 marimo_nb.
67
67
 
68
68
  if choice_file.suffix == ".py":
69
69
  from machineconfig.scripts.python.helpers_fire_command.fire_jobs_route_helper import get_command_streamlit
70
+ with_project = f"--project {repo_root} " if repo_root is not None else ""
70
71
  if args.streamlit:
71
72
  exe = get_command_streamlit(choice_file=choice_file, environment=args.environment, repo_root=repo_root)
72
- exe = f"uv run {exe} "
73
- elif args.jupyter: exe = "uv run jupyter-lab"
73
+ exe = f"uv run {with_project} {exe} "
74
+ elif args.jupyter: exe = f"uv run {with_project} jupyter-lab"
74
75
  else:
75
76
  if args.interactive:
76
77
  _ve_root_from_file, ipy_profile = get_ve_path_and_ipython_profile(choice_file)
77
78
  if ipy_profile is None:
78
79
  ipy_profile = "default"
79
- exe = f"uv run ipython -i --no-banner --profile {ipy_profile} "
80
+ exe = f"uv run {with_project} ipython -i --no-banner --profile {ipy_profile} "
80
81
  else:
81
- exe = "uv run python "
82
+ exe = f"uv run {with_project} python "
82
83
  elif choice_file.suffix == ".ps1" or choice_file.suffix == ".sh": exe = "."
83
84
  elif choice_file.suffix == "": exe = ""
84
85
  else: raise NotImplementedError(f"File type {choice_file.suffix} not supported, in the sense that I don't know how to fire it.")
85
86
 
86
87
  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
88
  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
89
+ from machineconfig.scripts.python.helpers_fire_command.file_wrangler import get_import_module_code, wrap_import_in_try_except
89
90
  from machineconfig.utils.meta import lambda_to_python_script
90
91
  from machineconfig.utils.code import print_code
91
92
  import_code = get_import_module_code(str(choice_file))
@@ -155,12 +156,8 @@ uv run --project {repo_root} --with marimo marimo edit --host 0.0.0.0 marimo_nb.
155
156
  if args.git_pull:
156
157
  command = f"\ngit -C {choice_file.parent} pull\n" + command
157
158
  if args.PathExport:
158
- if platform.system() in ["Linux", "Darwin"]:
159
- export_line = f"""export PYTHONPATH="{repo_root}""" + """:${PYTHONPATH}" """
160
- elif platform.system() == "Windows":
161
- export_line = f"""$env:PYTHONPATH="{repo_root}""" + """:$env:PYTHONPATH" """
162
- else:
163
- raise NotImplementedError(f"Platform {platform.system()} not supported.")
159
+ from machineconfig.scripts.python.helpers_fire_command.file_wrangler import add_to_path
160
+ export_line = add_to_path(path_variable="PYTHONPATH", directory=str(repo_root))
164
161
  command = export_line + "\n" + command
165
162
  if args.loop:
166
163
  if platform.system() in ["Linux", "Darwin"]:
@@ -1,36 +1,36 @@
1
1
 
2
2
  from pathlib import Path
3
3
  # import shlex
4
- from typing import Optional
5
- from machineconfig.scripts.python.helpers_fire.fire_agents_helper_types import HOST, PROVIDER, MODEL
4
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
6
5
 
7
6
 
8
- def fire_crush(api_key: Optional[str], model: MODEL, provider: PROVIDER, machine: HOST, prompt_path: Path, repo_root: Path) -> str:
9
- match machine:
7
+ def fire_crush(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path) -> str:
8
+ match ai_spec["machine"]:
10
9
  case "local":
11
10
  cmd = f"""
12
11
  crush run {prompt_path}
13
12
  """
14
13
  case "docker":
15
- assert api_key is not None, "API key is required for Crush agent in docker mode."
14
+ assert ai_spec["api_key"] is not None, "API key is required for Crush agent in docker mode."
16
15
  json_path = Path(__file__).parent / "fire_crush.json"
17
16
  json_template = json_path.read_text(encoding="utf-8")
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]
17
+ json_filled = json_template.replace("{api_key}", ai_spec["api_key"]).replace("{model}", ai_spec["model"]).replace("{provider}", ai_spec["provider"])
18
+ from machineconfig.utils.accessories import randstr
19
+ temp_config_file_local = Path.home().joinpath("tmp_results/tmp_files/crush_" + randstr(8) + ".json")
20
+ temp_config_file_local.parent.mkdir(parents=True, exist_ok=True)
21
21
  Path(temp_config_file_local).write_text(json_filled, encoding="utf-8")
22
22
  cmd = f"""
23
23
 
24
24
  # -e "PATH_PROMPT=$PATH_PROMPT"
25
- # opencode --model "{provider}/{model}" run {prompt_path}
26
-
25
+ # opencode --model "{ai_spec["provider"]}/{ai_spec["model"]}" run {prompt_path}
26
+
27
27
 
28
28
  echo "Running prompt @ {prompt_path.relative_to(repo_root)} using Docker with Crush..."
29
29
  docker run -it --rm \
30
30
  -v "{repo_root}:/workspace/{repo_root.name}" \
31
31
  -v "{temp_config_file_local}:/root/.local/share/crush/crush.json" \
32
32
  -w "/workspace/{repo_root.name}" \
33
- statistician/machineconfig:latest \
33
+ statistician/machineconfig-ai:latest \
34
34
  bash -i -c "source ~/.bashrc && cd /workspace/{repo_root.name} && cat /root/.local/share/crush/crush.json && crush run 'Please act on contents of this prompt ./{prompt_path.relative_to(repo_root)}'"
35
35
 
36
36
  """
@@ -2,11 +2,10 @@
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
6
- from typing import Optional
5
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
7
6
 
8
- def fire_cursor(api_key: Optional[str], prompt_path: Path, machine: HOST) -> str:
9
- match machine:
7
+ def fire_cursor(ai_spec: AI_SPEC, prompt_path: Path) -> str:
8
+ match ai_spec["machine"]:
10
9
  case "local":
11
10
  # Export the environment variable so it's available to subshells
12
11
  cmd = f"""
@@ -1,26 +1,25 @@
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
5
- from typing import Optional, Literal
4
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
6
5
 
7
6
 
8
- def fire_gemini(api_key: Optional[str], model: Literal["gemini-2.5-pro"], provider: Literal["google"], machine: HOST, prompt_path: Path, repo_root: Path) -> str:
9
- _ = provider
7
+ def fire_gemini(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path) -> str:
8
+ _ = ai_spec["provider"]
10
9
  # model = "gemini-2.5-flash-lite"
11
10
  # model = None # auto-select
12
11
  # if model is None:
13
12
  # model_arg = ""
14
13
  # else:
15
- model_arg = f"--model {shlex.quote(model)}"
14
+ model_arg = f"--model {shlex.quote(ai_spec['model'])}"
16
15
  # Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
17
16
  safe_path = shlex.quote(str(prompt_path))
18
17
 
19
- match machine:
18
+ match ai_spec["machine"]:
20
19
  case "local":
21
20
  # Export the environment variable so it's available to subshells
22
- if api_key is not None:
23
- define_api_key = f"""export GEMINI_API_KEY="{shlex.quote(api_key)}" """
21
+ if ai_spec["api_key"] is not None:
22
+ define_api_key = f"""export GEMINI_API_KEY="{shlex.quote(ai_spec['api_key'])}" """
24
23
  else:
25
24
  define_api_key = "echo 'Warning: No GEMINI_API_KEY provided, hoping it is set in the environment.'"
26
25
  cmd = f"""
@@ -31,14 +30,13 @@ gemini {model_arg} --yolo --prompt {safe_path}
31
30
 
32
31
 
33
32
  case "docker":
34
- assert api_key is not None, "When using docker, api_key must be provided."
33
+ assert ai_spec["api_key"] is not None, "When using docker, api_key must be provided."
35
34
  cmd = f"""
36
35
  docker run -it --rm \
37
- -e GEMINI_API_KEY="{api_key}" \
36
+ -e GEMINI_API_KEY="{ai_spec['api_key']}" \
38
37
  -v "{repo_root}:/workspace/{repo_root.name}" \
39
38
  -w "/workspace/{repo_root.name}" \
40
- statistician/machineconfig:latest \
39
+ statistician/machineconfig-ai:latest \
41
40
  gemini --prompt "$PATH_PROMPT"
42
41
  """
43
42
  return cmd
44
-
@@ -1,11 +1,10 @@
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
5
- from typing import Optional, Literal
4
+ from machineconfig.scripts.python.helpers_agents.fire_agents_helper_types import AI_SPEC
6
5
 
7
6
 
8
- def fire_qwen(config_dir: Optional[str], model: Literal["qwen"], provider: Literal["qwen"], machine: HOST, prompt_path: Path, repo_root: Path) -> str:
7
+ def fire_qwen(ai_spec: AI_SPEC, prompt_path: Path, repo_root: Path, config_dir: str | None) -> str:
9
8
  # assert model == "qwen", "Only qwen is supported currently."
10
9
  # assert provider == "qwen", "Only qwen is supported currently."
11
10
  # model = "qwen"
@@ -14,12 +13,12 @@ def fire_qwen(config_dir: Optional[str], model: Literal["qwen"], provider: Liter
14
13
  # if model is None:
15
14
  # model_arg = ""
16
15
  # else:
17
- _ = provider
16
+ _ = ai_spec["provider"]
18
17
  # model_arg = f"--model {shlex.quote(model)}"
19
18
  # Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
20
19
  safe_path = shlex.quote(str(prompt_path))
21
20
 
22
- match machine:
21
+ match ai_spec["machine"]:
23
22
  case "local":
24
23
  # Export the environment variable so it's available to subshells
25
24
  cmd = f"""
@@ -37,7 +36,7 @@ docker run -it --rm \
37
36
  -v {shlex.quote(str(oauth_creds))}:/root/.qwen/oauth_creds.json \
38
37
  -v {shlex.quote(str(settings))}:/root/.qwen/settings.json \
39
38
  -w "/workspace/{repo_root.name}" \
40
- statistician/machineconfig:latest \
39
+ statistician/machineconfig-ai:latest \
41
40
  qwen --prompt "$PATH_PROMPT"
42
41
  """
43
42
  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, AI_SPEC
6
6
 
7
7
 
8
8
  def get_api_keys(provider: PROVIDER) -> list[str]:
@@ -20,7 +20,7 @@ def get_api_keys(provider: PROVIDER) -> list[str]:
20
20
 
21
21
 
22
22
  def prep_agent_launch(repo_root: Path, agents_dir: Path, prompts_material: list[str], prompt_prefix: str, keep_material_in_separate_file: bool,
23
- machine: HOST, model: MODEL, provider: PROVIDER, agent: AGENTS, *, job_name: str) -> None:
23
+ machine: HOST, model: str, provider: PROVIDER, agent: AGENTS, *, job_name: str) -> None:
24
24
  agents_dir.mkdir(parents=True, exist_ok=True)
25
25
  prompt_folder = agents_dir / "prompts"
26
26
  prompt_folder.mkdir(parents=True, exist_ok=True)
@@ -66,17 +66,20 @@ 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
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)
69
+ ai_spec: AI_SPEC = AI_SPEC(provider=provider, model="gemini-2.5-pro", agent=agent, machine=machine, api_key=api_key, api_name="gemini")
70
+ from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_gemini import fire_gemini
71
+ cmd = fire_gemini(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
71
72
  case "cursor-agent":
72
- from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_cursor_agents import fire_cursor
73
- cmd = fire_cursor(prompt_path=prompt_path, machine=machine, api_key=None)
73
+ ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_key=None, api_name="cursor")
74
+ from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_cursor_agents import fire_cursor
75
+ cmd = fire_cursor(ai_spec=ai_spec, prompt_path=prompt_path)
74
76
  raise NotImplementedError("Cursor agent is not implemented yet, api key missing")
75
77
  case "crush":
76
- from machineconfig.scripts.python.helpers_fire.agentic_frameworks.fire_crush import fire_crush
77
78
  api_keys = get_api_keys(provider=provider)
78
79
  api_key = api_keys[idx % len(api_keys)] if len(api_keys) > 0 else None
79
- cmd = fire_crush(api_key=api_key, prompt_path=prompt_path, machine=machine, repo_root=repo_root, model=model, provider=provider)
80
+ ai_spec: AI_SPEC = AI_SPEC(provider=provider, model=model, agent=agent, machine=machine, api_key=api_key, api_name="crush")
81
+ from machineconfig.scripts.python.helpers_agents.agentic_frameworks.fire_crush import fire_crush
82
+ cmd = fire_crush(ai_spec=ai_spec, prompt_path=prompt_path, repo_root=repo_root)
80
83
  # case "q":
81
84
  # from machineconfig.scripts.python.helpers_fire.fire_q import fire_q
82
85
  # cmd = fire_q(api_key="", prompt_path=prompt_path, machine=machine)
@@ -19,24 +19,14 @@ from typing import Literal, TypeAlias, TypedDict
19
19
  AGENTS: TypeAlias = Literal["cursor-agent", "gemini", "qwen-code", "copilot", "crush", "q", "opencode", "kilocode", "cline", "auggie", "warp", "droid"]
20
20
  HOST: TypeAlias = Literal["local", "docker"]
21
21
  PROVIDER: TypeAlias = Literal["azure", "google", "aws", "openai", "anthropic", "openrouter", "xai"]
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",
24
- ]
25
- PROVIDER2MODEL: dict[PROVIDER, list[MODEL]] = {
26
- "azure": ["zai/glm-4.6"],
27
- "google": ["google/gemini-2.5-pro"],
28
- "aws": [],
29
- "openai": ["openai/gpt-5-codex"],
30
- "anthropic": ["anthropic/sonnet-4.5"],
31
- "openrouter": ["openrouter/supernova"],
32
- "xai": ["x-ai/grok-4-fast:free"]
33
- }
34
22
 
35
23
  class AI_SPEC(TypedDict):
36
24
  provider: PROVIDER
37
- model: MODEL
25
+ model: str
38
26
  agent: AGENTS
39
- machine: HOST
27
+ machine: HOST
28
+ api_key: str | None
29
+ api_name: str
40
30
 
41
31
 
42
32
  AGENT_NAME_FORMATTER = "agent_{idx}_cmd.sh" # e.g., agent_0_cmd.sh
@@ -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.87")
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.87" """)
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.87" """)
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.87,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.
@@ -1,7 +1,7 @@
1
-
2
1
  from typing import Optional
3
2
  import os
4
3
  from machineconfig.utils.path_extended import PathExtended
4
+ import platform
5
5
 
6
6
 
7
7
  def search_for_files_of_interest(path_obj: PathExtended):
@@ -125,3 +125,42 @@ def wrap_import_in_try_except(import_line: str, pyfile: str, repo_root: Optional
125
125
  sys.path.append(repo_root)
126
126
  exec(f"from {Path(pyfile).stem} import *")
127
127
  print(fr"✅ Successfully imported `{pyfile}`")
128
+
129
+
130
+ def add_to_path(path_variable: str, directory: str) -> str:
131
+ """
132
+ Generate shell script to add directory to path_variable.
133
+ Handles both Windows (cmd) and Unix-like systems (bash/zsh).
134
+ Checks if variable exists before appending, otherwise creates it.
135
+ """
136
+ system = platform.system()
137
+
138
+ if system == "Windows":
139
+ script = f"""# Check if {path_variable} is defined
140
+ if (Test-Path env:{path_variable}) {{
141
+ Write-Host "Adding {directory} to existing {path_variable}"
142
+ $currentValue = [Environment]::GetEnvironmentVariable("{path_variable}", "User")
143
+ $newValue = "$currentValue;{directory}"
144
+ [Environment]::SetEnvironmentVariable("{path_variable}", $newValue, "User")
145
+ $env:{path_variable} = $newValue
146
+ }} else {{
147
+ Write-Host "Creating new {path_variable} variable"
148
+ [Environment]::SetEnvironmentVariable("{path_variable}", "{directory}", "User")
149
+ $env:{path_variable} = "{directory}"
150
+ }}
151
+ Write-Host "{path_variable} is now: $env:{path_variable}\""""
152
+ return script
153
+ else:
154
+ script = f"""#!/bin/bash
155
+ # Check if {path_variable} is defined and not empty
156
+ if [ -z "${{{path_variable}}}" ]; then
157
+ echo "Creating new {path_variable} variable"
158
+ export {path_variable}="{directory}"
159
+ else
160
+ echo "Adding {directory} to existing {path_variable}"
161
+ export {path_variable}="${{{path_variable}}}:{directory}"
162
+ fi
163
+ echo "{path_variable} is now: ${{{path_variable}}}"
164
+ """
165
+ return script
166
+
@@ -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.87"]
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.87" 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.87" 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.87" 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.87" 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.87"
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.87
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=aVbLQDgpngXZm4taHcED4sAxyHvV2_Dz5VW3apPcQcY,10651
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=t_ciW_Uu9L6fzgrFianT6_mUHCJQeFV21VWsrYJRPRw,13875
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=ItVcsmF6EFYSo_MoR7b1XEfydu1Hw91muE2k88SpXv8,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=YD6-rtudHNip8tx85amSmOZZIHBP9khq4az3dF41j6U,5934
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=yLES5EVu-NNJ6_scZ22jvI8O9cDb3-tpNN606h4LctA,824
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=QcHVXodLRqso1Y71AhN06hfOckCQfDZfiCkaipOJyA8,1754
174
+ machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_cursor_agents.py,sha256=4LD841Qk9PRP6I97oNlV_twixoERg4IVdZjvy49mGVk,529
175
+ machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_gemini.py,sha256=6FHDONsdvEjA97ZIB7sWP6w2TgjzheW7YEF95xDnc_A,1518
176
+ machineconfig/scripts/python/helpers_agents/agentic_frameworks/fire_qwen.py,sha256=BIb3hdT4YQB931rhqKmTNz_qbHfurF1wimzrGeUCSRA,1636
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=rj8Y60RvpGfa7OhZQbrZisRDgeEDXx7Vc_DOWGLTF2I,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=vP0FBM1f7qT8A0AtYDdnzOTtcGoJJXbsKFjC41awmMg,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=tZS9qXOXiHltiZ9JHEs2serGEFm0uLbz7xh6ZBAa2l0,6946
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=pWZ11gkxRfN6PPOhPIgyZexA4jBZqMMzQjdT8mBL6OY,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=alchs6FVme2HpAIa316HvyO29ypnKsCEy64eZ09aEa0,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=HiOurQAeM8XLj1LG398K4p7QLa1ItV3GMkxzL9yo8VI,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=Q8fQ5Jgw2f_BVEhZjjLXcS2NQh1SBQzKbKB2kb720Ec,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=XEjrxJXFDjTPORszOVX-Iijd3OL4NFww4NVGyCLmIoQ,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=zsGHp4SOkFIGbqAwBzNRXKT-4JU9pWfDmCy_Q33FNAQ,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.87.dist-info/METADATA,sha256=6qopnVYk46jmfz3hkQF7hsHUy9wItdGY4OImaXalFLA,2928
442
+ machineconfig-6.87.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
443
+ machineconfig-6.87.dist-info/entry_points.txt,sha256=uf_ZPJa02_y3Fw5Z7m22cq7PwxhYd1QV2FfPNZTl_dQ,519
444
+ machineconfig-6.87.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
445
+ machineconfig-6.87.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"