machineconfig 2.97__py3-none-any.whl → 2.98__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of machineconfig might be problematic. Click here for more details.
- machineconfig/cluster/sessions_managers/zellij_local.py +86 -23
- machineconfig/cluster/sessions_managers/zellij_local_manager.py +17 -13
- machineconfig/cluster/sessions_managers/zellij_utils/monitoring_types.py +121 -0
- machineconfig/scripts/python/fire_agents_help_launch.py +4 -4
- {machineconfig-2.97.dist-info → machineconfig-2.98.dist-info}/METADATA +1 -1
- {machineconfig-2.97.dist-info → machineconfig-2.98.dist-info}/RECORD +9 -8
- {machineconfig-2.97.dist-info → machineconfig-2.98.dist-info}/WHEEL +0 -0
- {machineconfig-2.97.dist-info → machineconfig-2.98.dist-info}/entry_points.txt +0 -0
- {machineconfig-2.97.dist-info → machineconfig-2.98.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
|
|
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) ->
|
|
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, "
|
|
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,
|
|
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
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
|
185
|
-
return {"status": "running", "running": True, "processes":
|
|
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) ->
|
|
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) ->
|
|
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, "
|
|
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"
|
|
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"
|
|
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, "
|
|
287
|
+
return {"zellij_running": False, "session_name": session_name, "all_sessions": [], "error": str(e)}
|
|
225
288
|
|
|
226
|
-
def get_comprehensive_status(self) ->
|
|
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,
|
|
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
|
-
|
|
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) ->
|
|
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:
|
|
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) ->
|
|
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) ->
|
|
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) ->
|
|
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
|
-
|
|
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) ->
|
|
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
|
|
@@ -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
|
-
|
|
79
|
-
else:
|
|
80
|
-
|
|
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()
|
|
@@ -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=
|
|
20
|
-
machineconfig/cluster/sessions_managers/zellij_local_manager.py,sha256=
|
|
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
|
|
@@ -173,7 +174,7 @@ machineconfig/scripts/python/devops_devapps_install.py,sha256=xQaOHlr6ziHxrx7e5R
|
|
|
173
174
|
machineconfig/scripts/python/devops_update_repos.py,sha256=sqtkpQ2InUz-TFLhejN8EZqjZC1aBanAhohL6aHxPf0,8213
|
|
174
175
|
machineconfig/scripts/python/dotfile.py,sha256=miL8mQH2AqPdnHSz0Cxa7qQavaOmzTD9DAF66H2PRzA,2259
|
|
175
176
|
machineconfig/scripts/python/fire_agents.py,sha256=HoT2NjNDB3lmmGjcsvFVf8dTtCAQKBh_DtdhLClL_Bw,8202
|
|
176
|
-
machineconfig/scripts/python/fire_agents_help_launch.py,sha256=
|
|
177
|
+
machineconfig/scripts/python/fire_agents_help_launch.py,sha256=B3Pl2uLIk3EMttT1eRaJeBMoH1u_05PsMqEBYKyYogU,6127
|
|
177
178
|
machineconfig/scripts/python/fire_agents_help_search.py,sha256=jEgPFMHL4s1VHQ1AJO1YdV2pyGdxdaCY5XxDUvC55nU,2991
|
|
178
179
|
machineconfig/scripts/python/fire_agents_load_balancer.py,sha256=FeTfbp7n6jHHwMp4L6KVYO5HgenP57XpCyaab_vCwc0,2135
|
|
179
180
|
machineconfig/scripts/python/fire_jobs.py,sha256=IRs0_KY8WvYdF4Zr9fF-wWyqZYTx-zfhAx5ExYbwpOg,16642
|
|
@@ -419,8 +420,8 @@ machineconfig/utils/installer_utils/installer_class.py,sha256=3jknokPmaN4LuBR5n6
|
|
|
419
420
|
machineconfig/utils/schemas/fire_agents/fire_agents_input.py,sha256=Pkp5nzmzuFOKhVHhaAcue7gmCOKrm7m0ft_FSdDn6X8,2350
|
|
420
421
|
machineconfig/utils/schemas/layouts/layout_types.py,sha256=9l8c02MVX_e-OOvGTlfM_Ef6wWw6_Wqru1g7HxWnhgU,615
|
|
421
422
|
machineconfig/utils/schemas/repos/repos_types.py,sha256=beWlwPRNDBABmlzxHBYkAsMXS1MgFFdDZf4G2ge8J-I,408
|
|
422
|
-
machineconfig-2.
|
|
423
|
-
machineconfig-2.
|
|
424
|
-
machineconfig-2.
|
|
425
|
-
machineconfig-2.
|
|
426
|
-
machineconfig-2.
|
|
423
|
+
machineconfig-2.98.dist-info/METADATA,sha256=4Vf7Rgil9VfPA1EYFpD30HClPoxIsQNerPqI3tP6Jpw,7049
|
|
424
|
+
machineconfig-2.98.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
425
|
+
machineconfig-2.98.dist-info/entry_points.txt,sha256=71EzS7_2LTIigVxC1YXNxHXhC9mu5Me2Feyq2KocXBI,977
|
|
426
|
+
machineconfig-2.98.dist-info/top_level.txt,sha256=porRtB8qms8fOIUJgK-tO83_FeH6Bpe12oUVC670teA,14
|
|
427
|
+
machineconfig-2.98.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|