machineconfig 2.97__py3-none-any.whl → 3.0__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 (29) hide show
  1. machineconfig/cluster/sessions_managers/zellij_local.py +86 -23
  2. machineconfig/cluster/sessions_managers/zellij_local_manager.py +17 -13
  3. machineconfig/cluster/sessions_managers/zellij_utils/monitoring_types.py +121 -0
  4. machineconfig/scripts/python/ai/mcinit.py +1 -1
  5. machineconfig/scripts/python/fire_agents_help_launch.py +4 -4
  6. {machineconfig-2.97.dist-info → machineconfig-3.0.dist-info}/METADATA +1 -1
  7. {machineconfig-2.97.dist-info → machineconfig-3.0.dist-info}/RECORD +10 -28
  8. machineconfig/jobs/__pycache__/__init__.cpython-313.pyc +0 -0
  9. machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-313.pyc +0 -0
  10. machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-313.pyc +0 -0
  11. machineconfig/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
  12. machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc +0 -0
  13. machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-313.pyc +0 -0
  14. machineconfig/scripts/python/__pycache__/devops.cpython-313.pyc +0 -0
  15. machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-313.pyc +0 -0
  16. machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-313.pyc +0 -0
  17. machineconfig/scripts/python/__pycache__/fire_agents.cpython-313.pyc +0 -0
  18. machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-313.pyc +0 -0
  19. machineconfig/scripts/python/__pycache__/repos.cpython-313.pyc +0 -0
  20. machineconfig/scripts/python/__pycache__/repos_helper_record.cpython-313.pyc +0 -0
  21. machineconfig/scripts/python/__pycache__/repos_helper_update.cpython-313.pyc +0 -0
  22. machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc +0 -0
  23. machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-313.pyc +0 -0
  24. machineconfig/settings/linters/.ruff_cache/.gitignore +0 -2
  25. machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG +0 -1
  26. machineconfig/settings/shells/bash/.inputrc +0 -3
  27. {machineconfig-2.97.dist-info → machineconfig-3.0.dist-info}/WHEEL +0 -0
  28. {machineconfig-2.97.dist-info → machineconfig-3.0.dist-info}/entry_points.txt +0 -0
  29. {machineconfig-2.97.dist-info → machineconfig-3.0.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python3
2
2
  import shlex
3
3
  import subprocess
4
+ from machineconfig.cluster.sessions_managers.zellij_utils.monitoring_types import CommandStatusResult, ZellijSessionStatus, ComprehensiveStatus, ProcessInfo
4
5
  import psutil
5
6
  import random
6
7
  import string
7
- from typing import Dict, List, Optional, Any
8
+ from typing import List, Optional
8
9
  from pathlib import Path
9
10
  import logging
10
11
 
@@ -12,6 +13,8 @@ from rich.console import Console
12
13
 
13
14
  from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig, TabConfig
14
15
 
16
+
17
+
15
18
  logging.basicConfig(level=logging.INFO)
16
19
  logger = logging.getLogger(__name__)
17
20
  console = Console()
@@ -154,7 +157,7 @@ class ZellijLayoutGenerator:
154
157
  return layout_content + "\n}\n"
155
158
 
156
159
  @staticmethod
157
- def check_command_status(tab_name: str, layout_config: LayoutConfig) -> Dict[str, Any]:
160
+ def check_command_status(tab_name: str, layout_config: LayoutConfig) -> CommandStatusResult:
158
161
  # Find the tab with the given name
159
162
  tab_config = None
160
163
  for tab in layout_config["layoutTabs"]:
@@ -163,39 +166,99 @@ class ZellijLayoutGenerator:
163
166
  break
164
167
 
165
168
  if tab_config is None:
166
- return {"status": "unknown", "error": f"Tab '{tab_name}' not found in layout config", "running": False, "pid": None, "command": None, "cwd": None}
169
+ return {"status": "unknown", "error": f"Tab '{tab_name}' not found in layout config", "running": False, "command": "", "cwd": "", "tab_name": tab_name, "processes": []}
167
170
 
168
171
  command = tab_config["command"]
169
172
  cwd = tab_config["startDir"]
170
- cmd, _ = ZellijLayoutGenerator._parse_command(command)
173
+ cmd, args = ZellijLayoutGenerator._parse_command(command)
171
174
 
172
175
  try:
173
- # Look for processes matching the command
174
- matching_processes = []
175
- for proc in psutil.process_iter(["pid", "name", "cmdline", "status"]):
176
+ # Look for processes matching the command more accurately
177
+ matching_processes: list[ProcessInfo] = []
178
+ for proc in psutil.process_iter(["pid", "name", "cmdline", "status", "ppid"]):
179
+ try:
180
+ if not proc.info["cmdline"] or len(proc.info["cmdline"]) == 0:
181
+ continue
182
+
183
+ # Skip processes that are already dead/zombie/stopped
184
+ if proc.info["status"] in ["zombie", "dead", "stopped"]:
185
+ continue
186
+
187
+ # Get the actual command from cmdline
188
+ proc_cmdline = proc.info["cmdline"]
189
+ proc_name = proc.info["name"]
190
+
191
+ # More precise matching logic
192
+ is_match = False
193
+
194
+ # Check if this is the exact command we're looking for
195
+ if proc_name == cmd:
196
+ # For exact name matches, also check if arguments match or if it's a reasonable match
197
+ if len(args) == 0 or any(arg in " ".join(proc_cmdline) for arg in args):
198
+ is_match = True
199
+
200
+ # Check if the command appears in the command line
201
+ elif cmd in proc_cmdline[0]:
202
+ is_match = True
203
+
204
+ # For script-based commands, check if the script name appears
205
+ elif any(cmd in arg for arg in proc_cmdline):
206
+ is_match = True
207
+
208
+ # Skip shell processes that are just wrappers unless they're running our specific command
209
+ if is_match and proc_name in ["bash", "sh", "zsh", "fish"]:
210
+ # Only count shell processes if they contain our specific command
211
+ full_cmdline = " ".join(proc_cmdline)
212
+ if cmd not in full_cmdline and not any(arg in full_cmdline for arg in args):
213
+ is_match = False
214
+
215
+ if is_match:
216
+ # Additional check: make sure the process is actually running something meaningful
217
+ try:
218
+ # Check if process has been running for a reasonable time and is active
219
+ proc_obj = psutil.Process(proc.info["pid"])
220
+ if proc_obj.status() not in ["running", "sleeping"]:
221
+ continue # Skip inactive processes
222
+
223
+ matching_processes.append({
224
+ "pid": proc.info["pid"],
225
+ "name": proc.info["name"],
226
+ "cmdline": proc.info["cmdline"],
227
+ "status": proc.info["status"]
228
+ })
229
+ except (psutil.NoSuchProcess, psutil.AccessDenied):
230
+ continue
231
+
232
+ except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
233
+ continue
234
+
235
+ # Filter out clearly finished processes or parent shells
236
+ active_processes = []
237
+ for proc_info in matching_processes:
176
238
  try:
177
- if proc.info["cmdline"] and len(proc.info["cmdline"]) > 0:
178
- # Check if the command matches
179
- if proc.info["name"] == cmd or cmd in proc.info["cmdline"][0] or any(cmd in arg for arg in proc.info["cmdline"]):
180
- matching_processes.append({"pid": proc.info["pid"], "name": proc.info["name"], "cmdline": proc.info["cmdline"], "status": proc.info["status"]})
181
- except (psutil.NoSuchProcess, psutil.AccessDenied):
239
+ proc = psutil.Process(proc_info["pid"])
240
+ # Double-check the process is still active
241
+ if proc.status() in ["running", "sleeping"] and proc.is_running():
242
+ active_processes.append(proc_info)
243
+ except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
244
+ # Process is gone, don't count it
182
245
  continue
183
246
 
184
- if matching_processes:
185
- return {"status": "running", "running": True, "processes": matching_processes, "command": command, "cwd": cwd, "tab_name": tab_name}
247
+ if active_processes:
248
+ return {"status": "running", "running": True, "processes": active_processes, "command": command, "cwd": cwd, "tab_name": tab_name}
186
249
  else:
187
250
  return {"status": "not_running", "running": False, "processes": [], "command": command, "cwd": cwd, "tab_name": tab_name}
188
251
 
189
252
  except Exception as e:
190
253
  logger.error(f"Error checking command status for tab '{tab_name}': {e}")
191
- return {"status": "error", "error": str(e), "running": False, "command": command, "cwd": cwd, "tab_name": tab_name}
254
+ return {"status": "error", "error": str(e), "running": False, "command": command, "cwd": cwd, "tab_name": tab_name, "processes": []}
192
255
 
193
- def check_all_commands_status(self) -> Dict[str, Dict[str, Any]]:
256
+ def check_all_commands_status(self) -> dict[str, CommandStatusResult]:
194
257
  if not self.layout_config:
195
258
  logger.warning("No layout config tracked. Make sure to create a layout first.")
196
259
  return {}
197
260
 
198
- status_report = {}
261
+ status_report: dict[str, CommandStatusResult] = {}
199
262
  for tab in self.layout_config["layoutTabs"]:
200
263
  tab_name = tab["tabName"]
201
264
  status_report[tab_name] = ZellijLayoutGenerator.check_command_status(tab_name, self.layout_config)
@@ -203,7 +266,7 @@ class ZellijLayoutGenerator:
203
266
  return status_report
204
267
 
205
268
  @staticmethod
206
- def check_zellij_session_status(session_name: str) -> Dict[str, Any]:
269
+ def check_zellij_session_status(session_name: str) -> ZellijSessionStatus:
207
270
  try:
208
271
  # Run zellij list-sessions command
209
272
  result = subprocess.run(["zellij", "list-sessions"], capture_output=True, text=True, timeout=10)
@@ -214,16 +277,16 @@ class ZellijLayoutGenerator:
214
277
 
215
278
  return {"zellij_running": True, "session_exists": session_running, "session_name": session_name, "all_sessions": sessions}
216
279
  else:
217
- return {"zellij_running": False, "error": result.stderr, "session_name": session_name}
280
+ return {"zellij_running": False, "session_name": session_name, "all_sessions": [], "error": result.stderr}
218
281
 
219
282
  except subprocess.TimeoutExpired:
220
- return {"zellij_running": False, "error": "Timeout while checking Zellij sessions", "session_name": session_name}
283
+ return {"zellij_running": False, "session_name": session_name, "all_sessions": [], "error": "Timeout while checking Zellij sessions"}
221
284
  except FileNotFoundError:
222
- return {"zellij_running": False, "error": "Zellij not found in PATH", "session_name": session_name}
285
+ return {"zellij_running": False, "session_name": session_name, "all_sessions": [], "error": "Zellij not found in PATH"}
223
286
  except Exception as e:
224
- return {"zellij_running": False, "error": str(e), "session_name": session_name}
287
+ return {"zellij_running": False, "session_name": session_name, "all_sessions": [], "error": str(e)}
225
288
 
226
- def get_comprehensive_status(self) -> Dict[str, Any]:
289
+ def get_comprehensive_status(self) -> ComprehensiveStatus:
227
290
  zellij_status = ZellijLayoutGenerator.check_zellij_session_status(self.session_name or "default")
228
291
  commands_status = self.check_all_commands_status()
229
292
 
@@ -6,14 +6,16 @@ import logging
6
6
  import subprocess
7
7
  import time
8
8
  from pathlib import Path
9
- from typing import Optional, Dict, List, Any
9
+ from typing import Optional, List
10
10
 
11
11
  from rich.console import Console
12
12
 
13
+ from machineconfig.cluster.sessions_managers.zellij_utils.monitoring_types import SessionReport, GlobalSummary, StartResult, ActiveSessionInfo
13
14
  from machineconfig.utils.utils5 import Scheduler
14
15
  from machineconfig.cluster.sessions_managers.zellij_local import ZellijLayoutGenerator
15
16
  from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
16
17
 
18
+
17
19
  logging.basicConfig(level=logging.INFO)
18
20
  logger = logging.getLogger(__name__)
19
21
  console = Console()
@@ -23,7 +25,8 @@ TMP_SERIALIZATION_DIR = Path.home().joinpath("tmp_results", "session_manager", "
23
25
 
24
26
  class ZellijLocalManager:
25
27
  """Manages multiple local zellij sessions and monitors their tabs and processes."""
26
- def __init__(self, session_layouts: list[LayoutConfig], ):
28
+
29
+ def __init__(self, session_layouts: list[LayoutConfig]):
27
30
  self.session_name_prefix = "LocalJobMgr"
28
31
  self.session_layouts = session_layouts # Store the original config
29
32
  self.managers: List[ZellijLayoutGenerator] = []
@@ -43,7 +46,7 @@ class ZellijLocalManager:
43
46
  """Get all managed session names."""
44
47
  return [manager.session_name for manager in self.managers if manager.session_name is not None]
45
48
 
46
- def start_all_sessions(self, poll_seconds: float = 5.0, poll_interval: float = 0.25) -> Dict[str, Any]:
49
+ def start_all_sessions(self, poll_seconds: float = 5.0, poll_interval: float = 0.25) -> dict[str, StartResult]:
47
50
  """Start all zellij sessions with their layouts without blocking on the interactive TUI.
48
51
 
49
52
  Rationale:
@@ -59,7 +62,7 @@ class ZellijLocalManager:
59
62
  Returns:
60
63
  Dict mapping session name to success metadata.
61
64
  """
62
- results: Dict[str, Any] = {}
65
+ results: dict[str, StartResult] = {}
63
66
  for manager in self.managers:
64
67
  session_name = manager.session_name
65
68
  try:
@@ -109,9 +112,9 @@ class ZellijLocalManager:
109
112
  logger.error(f"❌ Exception starting session '{key}': {e}")
110
113
  return results
111
114
 
112
- def kill_all_sessions(self) -> Dict[str, Any]:
115
+ def kill_all_sessions(self) -> dict[str, StartResult]:
113
116
  """Kill all managed zellij sessions."""
114
- results = {}
117
+ results: dict[str, StartResult] = {}
115
118
  for manager in self.managers:
116
119
  try:
117
120
  session_name = manager.session_name
@@ -157,9 +160,9 @@ class ZellijLocalManager:
157
160
  commands.append("")
158
161
  return "\n".join(commands)
159
162
 
160
- def check_all_sessions_status(self) -> Dict[str, Dict[str, Any]]:
163
+ def check_all_sessions_status(self) -> dict[str, SessionReport]:
161
164
  """Check the status of all sessions and their commands."""
162
- status_report = {}
165
+ status_report: dict[str, SessionReport] = {}
163
166
 
164
167
  for manager in self.managers:
165
168
  session_name = manager.session_name
@@ -184,7 +187,7 @@ class ZellijLocalManager:
184
187
 
185
188
  return status_report
186
189
 
187
- def get_global_summary(self) -> Dict[str, Any]:
190
+ def get_global_summary(self) -> GlobalSummary:
188
191
  """Get a global summary across all sessions."""
189
192
  all_status = self.check_all_sessions_status()
190
193
 
@@ -297,7 +300,8 @@ class ZellijLocalManager:
297
300
  running_count = sum(1 for row in status_data if row.get("running", False))
298
301
  if running_count == 0:
299
302
  print("\n⚠️ All commands have stopped. Stopping monitoring.")
300
- scheduler.max_cycles = scheduler.cycle
303
+ # Set max_cycles to current cycle + 1 to exit after this cycle
304
+ scheduler.max_cycles = scheduler.cycle + 1
301
305
  return
302
306
  else:
303
307
  print("No status data available")
@@ -419,9 +423,9 @@ class ZellijLocalManager:
419
423
  logger.error(f"Failed to delete session {session_id}: {e}")
420
424
  return False
421
425
 
422
- def list_active_sessions(self) -> List[Dict[str, Any]]:
426
+ def list_active_sessions(self) -> list[ActiveSessionInfo]:
423
427
  """List currently active zellij sessions managed by this instance."""
424
- active_sessions = []
428
+ active_sessions: list[ActiveSessionInfo] = []
425
429
 
426
430
  try:
427
431
  # Get all running zellij sessions
@@ -481,7 +485,7 @@ if __name__ == "__main__":
481
485
  ]
482
486
  try:
483
487
  # Create the local manager
484
- manager = ZellijLocalManager(sample_sessions,)
488
+ manager = ZellijLocalManager(sample_sessions)
485
489
  print(f"✅ Local manager created with {len(manager.managers)} sessions")
486
490
 
487
491
  # Show session names
@@ -0,0 +1,121 @@
1
+ # TypedDict definitions for better type safety
2
+ from typing import NotRequired, TypedDict, Optional
3
+
4
+ # Import concrete types to replace Any usage
5
+ from machineconfig.utils.schemas.layouts.layout_types import LayoutConfig
6
+
7
+
8
+ class ProcessInfo(TypedDict):
9
+ pid: int
10
+ name: str
11
+ cmdline: list[str]
12
+ status: str
13
+
14
+ class CommandStatus(TypedDict):
15
+ status: str
16
+ running: bool
17
+ processes: list[ProcessInfo]
18
+ command: str
19
+ cwd: str
20
+ tab_name: str
21
+ error: NotRequired[str]
22
+ pid: NotRequired[int]
23
+
24
+
25
+ class SessionStatus(TypedDict):
26
+ session_exists: bool
27
+ zellij_running: bool
28
+ session_name: str
29
+ all_sessions: list[str]
30
+ error: NotRequired[str]
31
+
32
+
33
+ class CommandSummary(TypedDict):
34
+ total_commands: int
35
+ running_commands: int
36
+ stopped_commands: int
37
+ session_healthy: bool
38
+
39
+
40
+ class CommandStatusResult(TypedDict):
41
+ status: str
42
+ running: bool
43
+ processes: list[ProcessInfo]
44
+ command: str
45
+ cwd: str
46
+ tab_name: str
47
+ error: NotRequired[str]
48
+ pid: NotRequired[int]
49
+
50
+
51
+ class ZellijSessionStatus(TypedDict):
52
+ zellij_running: bool
53
+ session_exists: NotRequired[bool]
54
+ session_name: str
55
+ all_sessions: list[str]
56
+ error: NotRequired[str]
57
+
58
+
59
+ class SessionReport(TypedDict):
60
+ session_status: ZellijSessionStatus # ZellijSessionStatus from zellij_local
61
+ commands_status: dict[str, CommandStatusResult] # dict[str, CommandStatusResult from zellij_local]
62
+ summary: CommandSummary
63
+
64
+
65
+ class GlobalSummary(TypedDict):
66
+ total_sessions: int
67
+ healthy_sessions: int
68
+ unhealthy_sessions: int
69
+ total_commands: int
70
+ running_commands: int
71
+ stopped_commands: int
72
+ all_sessions_healthy: bool
73
+ all_commands_running: bool
74
+
75
+
76
+ class StartResult(TypedDict):
77
+ success: bool
78
+ message: NotRequired[str]
79
+ error: NotRequired[str]
80
+
81
+
82
+ class StatusRow(TypedDict):
83
+ session: str
84
+ tab: str
85
+ running: bool
86
+ command: str
87
+ processes: int
88
+
89
+
90
+ class SessionMetadata(TypedDict):
91
+ session_name_prefix: str
92
+ created_at: str
93
+ num_managers: int
94
+ sessions: list[str]
95
+ manager_type: str
96
+
97
+
98
+ class ManagerData(TypedDict):
99
+ session_name: Optional[str]
100
+ layout_config: Optional[LayoutConfig] # Will be LayoutConfig from layout_types
101
+ layout_path: Optional[str]
102
+
103
+
104
+ class ActiveSessionInfo(TypedDict):
105
+ session_name: str
106
+ is_active: bool
107
+ tab_count: int
108
+ tabs: list[str]
109
+
110
+
111
+ class StatusSummary(TypedDict):
112
+ total_commands: int
113
+ running_commands: int
114
+ stopped_commands: int
115
+ session_healthy: bool
116
+
117
+
118
+ class ComprehensiveStatus(TypedDict):
119
+ zellij_session: ZellijSessionStatus
120
+ commands: dict[str, CommandStatusResult]
121
+ summary: StatusSummary
@@ -85,7 +85,7 @@ uv venv
85
85
  if dot_git_ignore_path.exists():
86
86
  dot_git_ignore_content = dot_git_ignore_path.read_text(encoding="utf-8")
87
87
  to_add: list[str] = []
88
- to_check_for: list[str] = [".links", "notebooks", ".ai", ".scripts", "GEMINI.md", "CLAUDE.md", ".cursor", ".github"]
88
+ to_check_for: list[str] = [".links", "notebooks", ".ai", ".scripts", "GEMINI.md", "CLAUDE.md", ".cursor", ".github/instructions", ".github/chatmodes", ".github/prompts"]
89
89
  for item in to_check_for:
90
90
  if item not in dot_git_ignore_content:
91
91
  to_add.append(item)
@@ -74,10 +74,10 @@ sleep 0.1
74
74
  model = "gemini-2.5-pro"
75
75
  # model = "gemini-2.5-flash-lite"
76
76
  # model = None # auto-select
77
- if model is None:
78
- model_arg = ""
79
- else:
80
- model_arg = f"--model {shlex.quote(model)}"
77
+ # if model is None:
78
+ # model_arg = ""
79
+ # else:
80
+ model_arg = f"--model {shlex.quote(model)}"
81
81
  # Need a real shell for the pipeline; otherwise '| gemini ...' is passed as args to 'cat'
82
82
  safe_path = shlex.quote(str(prompt_path))
83
83
  api_keys = get_gemini_api_keys()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machineconfig
3
- Version: 2.97
3
+ Version: 3.0
4
4
  Summary: Dotfiles management package
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -16,8 +16,8 @@ machineconfig/cluster/sessions_managers/wt_local.py,sha256=5tBgiWf-gsAvg1PrSEF7Z
16
16
  machineconfig/cluster/sessions_managers/wt_local_manager.py,sha256=EqSdzHx5VLkaxKXLfHXigpaGB3dXS5RS-04d-BiTgzI,24192
17
17
  machineconfig/cluster/sessions_managers/wt_remote.py,sha256=7KT5D0FM9wwY8N3Mp9uO9rv3z29n6HIDJfPSLWXOIIs,8755
18
18
  machineconfig/cluster/sessions_managers/wt_remote_manager.py,sha256=V7Z_1sLGfCjyGh2rxbtnDCzrzlMYrdY_6uG3Gljp20o,19758
19
- machineconfig/cluster/sessions_managers/zellij_local.py,sha256=I2iQAS7G13lxQa0KCfHHXYMo9_54dDUwOYNKW_AWlek,17081
20
- machineconfig/cluster/sessions_managers/zellij_local_manager.py,sha256=U9UW6ybeMwPOqYRJafShAKqpXyQyUy1ybwDcNvhpGLg,23463
19
+ machineconfig/cluster/sessions_managers/zellij_local.py,sha256=dPrnSvRlzhs8tWY1pI3qOqKYexUKsRp5S3nPqAx5LfE,20557
20
+ machineconfig/cluster/sessions_managers/zellij_local_manager.py,sha256=AoUnXIL-K31HcO-Xto-eTcuvy3u5G0Y0VG4aRvlUzj8,23785
21
21
  machineconfig/cluster/sessions_managers/zellij_remote.py,sha256=G1SdycIHuCBMOnO5kfxDNN-boNxZ6PSh0xsZsDK8H1s,11039
22
22
  machineconfig/cluster/sessions_managers/zellij_remote_manager.py,sha256=2ZoSPrlsYJbugH8f8doNIDhmbv2M61DN9KIQNVUqE1k,8116
23
23
  machineconfig/cluster/sessions_managers/wt_utils/layout_generator.py,sha256=CFGcZPFTZQJtFf0OvMUHhadZ0qbImCP3wxvbWYVcVYo,7445
@@ -27,6 +27,7 @@ machineconfig/cluster/sessions_managers/wt_utils/session_manager.py,sha256=-PNcY
27
27
  machineconfig/cluster/sessions_managers/wt_utils/status_reporter.py,sha256=EEscow4hsvLJ1roXEXxXg0QUEwetJmTq0VRm_1Vg6L0,9499
28
28
  machineconfig/cluster/sessions_managers/zellij_utils/example_usage.py,sha256=lxeZVYIelUEf7pFSmg1F5jPbWfzuxQmZ2IBZsHMwFVk,2852
29
29
  machineconfig/cluster/sessions_managers/zellij_utils/layout_generator.py,sha256=OfMhdqDR43r8vEnTNSrV9hvMHG3cNl7EmJKB_ChJBJ8,5263
30
+ machineconfig/cluster/sessions_managers/zellij_utils/monitoring_types.py,sha256=v0bHlnxYVVvsDX-s_2W7UYAGZFNuIRD7VAPL5VejZ9o,2667
30
31
  machineconfig/cluster/sessions_managers/zellij_utils/process_monitor.py,sha256=8ilY7ntXWTsFy6-G-j2GZvakK4C43s5y5RFw_feOnDk,13298
31
32
  machineconfig/cluster/sessions_managers/zellij_utils/remote_executor.py,sha256=Nkd5QFw5yG2qD2-WLioqi-e3WKuOqGA8C35epGmB49g,2602
32
33
  machineconfig/cluster/sessions_managers/zellij_utils/session_manager.py,sha256=U_Gvhf-uPwY8jFoxg4aOWsIQbYjd8ueRsfPim1Wv0Pc,4936
@@ -40,7 +41,6 @@ machineconfig/cluster/templates/run_cluster.py,sha256=ZFNl4EDybicedWKX5qBwSSeKKf
40
41
  machineconfig/cluster/templates/run_remote.py,sha256=vCc56t8BUAUJp7tyb0PFfwy5hlmIdRdzcjlpP9gcLdc,3247
41
42
  machineconfig/cluster/templates/utils.py,sha256=hrtaDkGxl9p9SAdPz46ppTtbrIW2OonsO42DEA-qoS8,1646
42
43
  machineconfig/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
- machineconfig/jobs/__pycache__/__init__.cpython-313.pyc,sha256=XCpGeTOsCIrHvdkU0hZ-ISJF86afNZ4mr5dY9n0K8Gg,161
44
44
  machineconfig/jobs/linux/msc/cli_agents.sh,sha256=X94rDsNHokIWQyHUQu0n2d0AbR39ak-nw4PbrUsJr7w,377
45
45
  machineconfig/jobs/linux/msc/lid.sh,sha256=09LeoSaXCGjCn7YxPcIFQpHroYdglJlEtFU2agarh3I,1302
46
46
  machineconfig/jobs/linux/msc/network.sh,sha256=dmISsh0hioDheinqee3qHfo2k7ClFx6G_GfGDxuflmc,1796
@@ -88,12 +88,10 @@ machineconfig/jobs/python_custom_installers/scripts/linux/warp-cli.sh,sha256=PVN
88
88
  machineconfig/jobs/python_custom_installers/scripts/linux/wezterm.sh,sha256=m697rRoIIVk-f8JdI1YQmphk-JWpMc5IYbD5YaQ3SeQ,1874
89
89
  machineconfig/jobs/python_generic_installers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
90
  machineconfig/jobs/python_generic_installers/config.json,sha256=dkrLpAs-xJ1gvpFd42yuWGoRkkE1MG-8fAhrMNrxt34,20678
91
- machineconfig/jobs/python_generic_installers/__pycache__/__init__.cpython-313.pyc,sha256=knHc0czISCOGlMdoXh0vJGcyr0TTsRAzNIk8iYo26VM,187
92
91
  machineconfig/jobs/python_generic_installers/dev/config.archive.json,sha256=1rZO1-5lxtbVGuXXoTTuvWjs54xlHHIAIIZYDAy8FSA,823
93
92
  machineconfig/jobs/python_generic_installers/dev/config.json,sha256=dKzCQNuQigcuTGw1uvhHkhG-kvp2UPHpv0X6XOTYtBE,29760
94
93
  machineconfig/jobs/python_linux_installers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
94
  machineconfig/jobs/python_linux_installers/config.json,sha256=rn2mss51IgiAKKmhPdQ0nmTC_aPFm-6rIfHdCBlEFBE,5324
96
- machineconfig/jobs/python_linux_installers/__pycache__/__init__.cpython-313.pyc,sha256=VPZBY1nwCPNRdlftZPBK6pJb-b44HTw7qG6ce-AvLuM,185
97
95
  machineconfig/jobs/python_linux_installers/archive/config.json,sha256=haf6H05bW2AC-CptfZBeNeMoQK60w8iWmCZ2aDiL4O0,302
98
96
  machineconfig/jobs/python_linux_installers/dev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
97
  machineconfig/jobs/python_linux_installers/dev/config.json,sha256=IxlCuMfWX-SWCnQxQN5JBlxDIAHPvZRlSFbszqERj2w,9951
@@ -119,7 +117,6 @@ machineconfig/profile/records/linux/apps_summary_report.md,sha256=l77oofA6Rliql0
119
117
  machineconfig/profile/records/windows/apps_summary_report.csv,sha256=nN5BoACBqXgKNczm2t5KaCLdDnxFCIscX8iRkWBm0a4,47
120
118
  machineconfig/profile/records/windows/apps_summary_report.md,sha256=O5hmAcpObaLmOjYLvHg9kkPJryqFwFaP8OsmfPwfR1o,137
121
119
  machineconfig/scripts/__init__.py,sha256=v0cMjnaIo39C3ltLiTf1S0fCTMAqWtEU7zrVenUj4PQ,71
122
- machineconfig/scripts/__pycache__/__init__.cpython-313.pyc,sha256=ygO0oHmMcx06IQQo4uYMnTHHtjOckjootiTk2z-6s0c,244
123
120
  machineconfig/scripts/cloud/init.sh,sha256=yNsseCLMceO50Eg72ra6_NIJCxkGZmpmos1EXe-mvzY,4649
124
121
  machineconfig/scripts/linux/choose_wezterm_theme,sha256=T7_vS-XvIZErRkfqtlyoZuHEVKFQQwhIeQMFIVTjtxg,145
125
122
  machineconfig/scripts/linux/cloud_copy,sha256=IU5TO7roSUYB-U4Km9bhAZOvlUr4nRJtJf4tqCPIPAs,100
@@ -173,7 +170,7 @@ machineconfig/scripts/python/devops_devapps_install.py,sha256=xQaOHlr6ziHxrx7e5R
173
170
  machineconfig/scripts/python/devops_update_repos.py,sha256=sqtkpQ2InUz-TFLhejN8EZqjZC1aBanAhohL6aHxPf0,8213
174
171
  machineconfig/scripts/python/dotfile.py,sha256=miL8mQH2AqPdnHSz0Cxa7qQavaOmzTD9DAF66H2PRzA,2259
175
172
  machineconfig/scripts/python/fire_agents.py,sha256=HoT2NjNDB3lmmGjcsvFVf8dTtCAQKBh_DtdhLClL_Bw,8202
176
- machineconfig/scripts/python/fire_agents_help_launch.py,sha256=70iFF0wmFYKvaPsUy35_bIw5ivn5EdonahjSw1GTMIs,6125
173
+ machineconfig/scripts/python/fire_agents_help_launch.py,sha256=B3Pl2uLIk3EMttT1eRaJeBMoH1u_05PsMqEBYKyYogU,6127
177
174
  machineconfig/scripts/python/fire_agents_help_search.py,sha256=jEgPFMHL4s1VHQ1AJO1YdV2pyGdxdaCY5XxDUvC55nU,2991
178
175
  machineconfig/scripts/python/fire_agents_load_balancer.py,sha256=FeTfbp7n6jHHwMp4L6KVYO5HgenP57XpCyaab_vCwc0,2135
179
176
  machineconfig/scripts/python/fire_jobs.py,sha256=IRs0_KY8WvYdF4Zr9fF-wWyqZYTx-zfhAx5ExYbwpOg,16642
@@ -199,19 +196,9 @@ machineconfig/scripts/python/viewer.py,sha256=heQNjB9fwn3xxbPgMofhv1Lp6Vtkl76Yjj
199
196
  machineconfig/scripts/python/viewer_template.py,sha256=ve3Q1-iKhCLc0VJijKvAeOYp2xaFOeIOC_XW956GWCc,3944
200
197
  machineconfig/scripts/python/wifi_conn.py,sha256=2FJ4srVthGHsy3KSXpvndAyVkNO8n_XeSgVRnd_PjZA,15576
201
198
  machineconfig/scripts/python/wsl_windows_transfer.py,sha256=RfSf5SJejnqrg36YfXSwu52ceEW77uNP4WC6QQUyRTA,3650
202
- machineconfig/scripts/python/__pycache__/__init__.cpython-313.pyc,sha256=IppPGJ6Wk5Ma5oPWfJpN5QDW6-NvCk29la5JGbgAJ6E,171
203
- machineconfig/scripts/python/__pycache__/cloud_repo_sync.cpython-313.pyc,sha256=sWCevZgeQxIHoQ5Ea7a0OpjgJpkcKMoZylwCyizXYqA,10555
204
- machineconfig/scripts/python/__pycache__/devops.cpython-313.pyc,sha256=Rs6A-GpFrTXuXAn0tO3cGvilciJMHk0ujt_JPlsxaJ4,8216
205
- machineconfig/scripts/python/__pycache__/devops_devapps_install.cpython-313.pyc,sha256=BrMh1Rzca_iY0EvlPsSXBqpwOZw-De6I3y8blXJZCuc,8616
206
- machineconfig/scripts/python/__pycache__/devops_update_repos.cpython-313.pyc,sha256=M9trjuribG312W-mwFaY7GJqlDf0tEGC1UzqWFiRBKc,11054
207
- machineconfig/scripts/python/__pycache__/fire_agents.cpython-313.pyc,sha256=61OZTwltoquxWzQPwHue4SehHuiaDExcl57aN07Cpww,15829
208
- machineconfig/scripts/python/__pycache__/get_zellij_cmd.cpython-313.pyc,sha256=jx8_Gyx1kkqCwIe8W51h9hO89yuzTdd4Vh5oPRBOLio,826
209
- machineconfig/scripts/python/__pycache__/repos.cpython-313.pyc,sha256=CoqJX-Oc-7suZ03dIkNqWscKXsuiswHHoGPM_VaZzS8,9642
210
- machineconfig/scripts/python/__pycache__/repos_helper_record.cpython-313.pyc,sha256=VWsAX_sFJxVD0MUiZ1d9Bj9p4kw5gquukGLoJlID-lQ,13573
211
- machineconfig/scripts/python/__pycache__/repos_helper_update.cpython-313.pyc,sha256=bo6zyGOBgrOVDJx7MGdGQ6pF00xXqa1UyCDcwtWNAc4,11852
212
199
  machineconfig/scripts/python/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
213
200
  machineconfig/scripts/python/ai/generate_files.py,sha256=Vfjgd0skJu-WTgqUxmOVFzaNMfSFBaFmY5oGGVY7MZY,2860
214
- machineconfig/scripts/python/ai/mcinit.py,sha256=dQKrnrH-HzT7bIyOpio2ikh02ierrpBM0JHm3dGT9wM,5437
201
+ machineconfig/scripts/python/ai/mcinit.py,sha256=4MFbkCriWtm0FdR9DZAcLuhkE2Y6_JcYH4WEptrDIdM,5490
215
202
  machineconfig/scripts/python/ai/chatmodes/Thinking-Beast-Mode.chatmode.md,sha256=Tu-fWxX_FLiIBRdgOndMhewK41kIHDoYxuGZ1kF6dYA,17947
216
203
  machineconfig/scripts/python/ai/chatmodes/Ultimate-Transparent-Thinking-Beast-Mode.chatmode.md,sha256=kB8u_QAZar9StuywXcbPTUCbAVHKin0s0brssOroK5o,29019
217
204
  machineconfig/scripts/python/ai/chatmodes/deepResearch.chatmode.md,sha256=WRbZXkdOPw5pVAFjR51n9IRTtqw3TE7jUt4BNyN5Z8k,5165
@@ -229,8 +216,6 @@ machineconfig/scripts/python/helpers/helpers2.py,sha256=TU1sA0GKNXHXT1_0y8piBLT_
229
216
  machineconfig/scripts/python/helpers/helpers4.py,sha256=SFYfxRleEq3gIbffIxFM8d1Ra5zNheUuTIOi2iBsqlE,7708
230
217
  machineconfig/scripts/python/helpers/helpers5.py,sha256=dPBvA9Tcyx9TMgM6On49A1CueGMhBdRzikDnlJGf3J0,1123
231
218
  machineconfig/scripts/python/helpers/repo_sync_helpers.py,sha256=c4IkoVQMGkO-D00-q2YE6Jvte39jDHsOBr2sr0c7y5Q,5331
232
- machineconfig/scripts/python/helpers/__pycache__/__init__.cpython-313.pyc,sha256=CwoU1mAubvFjStsgxFBHH_zI0LfY3k3Xy4IechpqH7A,179
233
- machineconfig/scripts/python/helpers/__pycache__/repo_sync_helpers.cpython-313.pyc,sha256=3vqpKthkVqxfxpsB4WHft-HocLsjsCWao_n5axoad8o,7953
234
219
  machineconfig/scripts/windows/choose_wezterm_theme.ps1,sha256=LiXJ0a4LKjb6E-oH_bAg6DjegV4SqDUdiMp_svGCFlI,95
235
220
  machineconfig/scripts/windows/cloud_copy.ps1,sha256=llTFhN2uInZTcoZYZuuhJcf5Ifo5MF226I5MpOzvc3A,82
236
221
  machineconfig/scripts/windows/cloud_mount.ps1,sha256=wSQO5II8DbqktexRIuI-RUn8kVCEk-SWT7imZqd7Qdk,82
@@ -319,8 +304,6 @@ machineconfig/settings/linters/.flake8,sha256=1By04Qwy5saCudYKOw2bKHSNQg4N128SJu
319
304
  machineconfig/settings/linters/.mypy.ini,sha256=BNxVtNuliJZVeFpCRRIQpSWFDQYuKqKtcVKYcZ-sApc,811
320
305
  machineconfig/settings/linters/.pylintrc,sha256=_hYrPgtMvQc877u5NTU_HlkJMZwuDrmB6Yt3u5zg3-c,3593
321
306
  machineconfig/settings/linters/.ruff.toml,sha256=CiLFhFLJzQc1UvJF2ecRjO4hjmC_xx9j0JCKHKi-po8,1655
322
- machineconfig/settings/linters/.ruff_cache/.gitignore,sha256=njpg8ebsSuYCFcEdVLFxOSdF7CXp3e1DPVvZITY68xY,35
323
- machineconfig/settings/linters/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
324
307
  machineconfig/settings/lvim/linux/config.lua,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
325
308
  machineconfig/settings/lvim/windows/config.lua,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
326
309
  machineconfig/settings/lvim/windows/archive/config_additional.lua,sha256=zj-VDn-Av4IomJ3EqM1gf_6VsZ9ieG815O9QK1slyPI,792
@@ -335,7 +318,6 @@ machineconfig/settings/rofi/config.rasi,sha256=nDX5B8wdXQYF1fwiOTBRJUI4l_gQbYaLa
335
318
  machineconfig/settings/rofi/config_default.rasi,sha256=rTfKnC-bZuWX1l-lWQACCUOE1ShhkfykAxtXX9PlQHE,4694
336
319
  machineconfig/settings/shells/alacritty/alacritty.toml,sha256=EbL-2Y4QunW1pvRWB2yuLCw8MMPONheJr5LFoWRieUQ,871
337
320
  machineconfig/settings/shells/alacritty/alacritty.yml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
338
- machineconfig/settings/shells/bash/.inputrc,sha256=KUPj9Rj1_5quvDmB7vZORN43TIv7KLYBsMOXc4lze1c,157
339
321
  machineconfig/settings/shells/bash/init.sh,sha256=EOCNg7h4roNDTappkddwy7U_0R_NKiLzbuZZ4gnmTPc,2352
340
322
  machineconfig/settings/shells/hyper/.hyper.js,sha256=h-HqeYlvPvPD4Ee7828Cxo87uVkzbMGJFqXTZIWoegw,8884
341
323
  machineconfig/settings/shells/ipy/profiles/default/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -419,8 +401,8 @@ machineconfig/utils/installer_utils/installer_class.py,sha256=3jknokPmaN4LuBR5n6
419
401
  machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=Pkp5nzmzuFOKhVHhaAcue7gmCOKrm7m0ft_FSdDn6X8,2350
420
402
  machineconfig/utils/schemas/layouts/layout_types.py,sha256=9l8c02MVX_e-OOvGTlfM_Ef6wWw6_Wqru1g7HxWnhgU,615
421
403
  machineconfig/utils/schemas/repos/repos_types.py,sha256=beWlwPRNDBABmlzxHBYkAsMXS1MgFFdDZf4G2ge8J-I,408
422
- machineconfig-2.97.dist-info/METADATA,sha256=l_UGz0o_tZJSeBW9AoTg8Ib3dwBvVVmRNTDZzWXJ4Us,7049
423
- machineconfig-2.97.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
424
- machineconfig-2.97.dist-info/entry_points.txt,sha256=71EzS7_2LTIigVxC1YXNxHXhC9mu5Me2Feyq2KocXBI,977
425
- machineconfig-2.97.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
426
- machineconfig-2.97.dist-info/RECORD,,
404
+ machineconfig-3.0.dist-info/METADATA,sha256=Hm3irbjZeFf2BxHM16SHgwKkmczU16phtOwgcM5B0KE,7048
405
+ machineconfig-3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
406
+ machineconfig-3.0.dist-info/entry_points.txt,sha256=71EzS7_2LTIigVxC1YXNxHXhC9mu5Me2Feyq2KocXBI,977
407
+ machineconfig-3.0.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
408
+ machineconfig-3.0.dist-info/RECORD,,
@@ -1,2 +0,0 @@
1
- # Automatically created by ruff.
2
- *
@@ -1 +0,0 @@
1
- Signature: 8a477f597d28d172789f06886806bc55
@@ -1,3 +0,0 @@
1
- #!/usr/bin/bash
2
- set enable-bracketed-paste off
3
- # cat >> ~/.inputrc <<'EOF'