claude-mpm 4.2.2__py3-none-any.whl → 4.2.4__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.
- claude_mpm/VERSION +1 -1
- claude_mpm/cli/commands/monitor.py +1 -1
- claude_mpm/core/config.py +2 -2
- claude_mpm/dashboard/static/css/code-tree.css +220 -1
- claude_mpm/dashboard/static/css/dashboard.css +286 -0
- claude_mpm/dashboard/static/js/components/code-tree.js +1833 -89
- claude_mpm/dashboard/static/js/socket-client.js +11 -8
- claude_mpm/dashboard/templates/index.html +41 -40
- claude_mpm/services/agents/deployment/agent_template_builder.py +17 -4
- claude_mpm/services/dashboard/stable_server.py +482 -0
- claude_mpm/services/socketio/client_proxy.py +16 -0
- claude_mpm/services/socketio/handlers/code_analysis.py +27 -5
- claude_mpm/services/socketio/monitor_server.py +2 -2
- claude_mpm/services/socketio/server/core.py +62 -0
- claude_mpm/tools/code_tree_analyzer.py +95 -17
- {claude_mpm-4.2.2.dist-info → claude_mpm-4.2.4.dist-info}/METADATA +1 -1
- {claude_mpm-4.2.2.dist-info → claude_mpm-4.2.4.dist-info}/RECORD +21 -20
- {claude_mpm-4.2.2.dist-info → claude_mpm-4.2.4.dist-info}/WHEEL +0 -0
- {claude_mpm-4.2.2.dist-info → claude_mpm-4.2.4.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.2.2.dist-info → claude_mpm-4.2.4.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.2.2.dist-info → claude_mpm-4.2.4.dist-info}/top_level.txt +0 -0
|
@@ -45,6 +45,22 @@ class SocketIOClientProxy:
|
|
|
45
45
|
self._client_thread = None
|
|
46
46
|
self._client_loop = None
|
|
47
47
|
|
|
48
|
+
def start(self):
|
|
49
|
+
"""Start the Socket.IO client connection (compatibility wrapper).
|
|
50
|
+
|
|
51
|
+
This method exists for backward compatibility with code that expects
|
|
52
|
+
a start() method. It simply calls start_sync().
|
|
53
|
+
"""
|
|
54
|
+
return self.start_sync()
|
|
55
|
+
|
|
56
|
+
def stop(self):
|
|
57
|
+
"""Stop the Socket.IO client connection (compatibility wrapper).
|
|
58
|
+
|
|
59
|
+
This method exists for backward compatibility with code that expects
|
|
60
|
+
a stop() method. It simply calls stop_sync().
|
|
61
|
+
"""
|
|
62
|
+
return self.stop_sync()
|
|
63
|
+
|
|
48
64
|
def start_sync(self):
|
|
49
65
|
"""Start the Socket.IO client connection to the persistent server."""
|
|
50
66
|
self.logger.debug(
|
|
@@ -591,8 +591,11 @@ class CodeAnalysisEventHandler(BaseEventHandler):
|
|
|
591
591
|
return
|
|
592
592
|
|
|
593
593
|
try:
|
|
594
|
+
self.logger.info(f"Starting file analysis for: {path}")
|
|
595
|
+
|
|
594
596
|
# Ensure analyzer exists
|
|
595
597
|
if not self.code_analyzer:
|
|
598
|
+
self.logger.info("Creating new CodeTreeAnalyzer instance")
|
|
596
599
|
emitter = CodeTreeEventEmitter(use_stdout=False)
|
|
597
600
|
# Override emit method to send to Socket.IO
|
|
598
601
|
original_emit = emitter.emit
|
|
@@ -630,23 +633,42 @@ class CodeAnalysisEventHandler(BaseEventHandler):
|
|
|
630
633
|
self.code_analyzer = CodeTreeAnalyzer(
|
|
631
634
|
emit_events=False, emitter=emitter
|
|
632
635
|
)
|
|
636
|
+
self.logger.info("CodeTreeAnalyzer created successfully")
|
|
633
637
|
|
|
634
638
|
# Analyze file
|
|
639
|
+
self.logger.info(f"Calling analyze_file for: {path}")
|
|
635
640
|
result = self.code_analyzer.analyze_file(path)
|
|
641
|
+
self.logger.info(
|
|
642
|
+
f"Analysis complete. Result keys: {list(result.keys()) if result else 'None'}"
|
|
643
|
+
)
|
|
644
|
+
|
|
645
|
+
if result:
|
|
646
|
+
self.logger.info(
|
|
647
|
+
f"Analysis result: elements={len(result.get('elements', []))}, nodes={len(result.get('nodes', []))}"
|
|
648
|
+
)
|
|
649
|
+
else:
|
|
650
|
+
self.logger.warning("Analysis returned None or empty result")
|
|
636
651
|
|
|
637
652
|
# Send result with correct event name (using colons, not dots!)
|
|
653
|
+
response_data = {
|
|
654
|
+
"request_id": request_id,
|
|
655
|
+
"path": path,
|
|
656
|
+
**result,
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
self.logger.info(f"Emitting code:file:analyzed event to {sid}")
|
|
638
660
|
await self.server.core.sio.emit(
|
|
639
661
|
"code:file:analyzed",
|
|
640
|
-
|
|
641
|
-
"request_id": request_id,
|
|
642
|
-
"path": path,
|
|
643
|
-
**result,
|
|
644
|
-
},
|
|
662
|
+
response_data,
|
|
645
663
|
room=sid,
|
|
646
664
|
)
|
|
665
|
+
self.logger.info("Event emitted successfully")
|
|
647
666
|
|
|
648
667
|
except Exception as e:
|
|
649
668
|
self.logger.error(f"Error analyzing file {path}: {e}")
|
|
669
|
+
import traceback
|
|
670
|
+
|
|
671
|
+
self.logger.error(f"Full traceback: {traceback.format_exc()}")
|
|
650
672
|
await self.server.core.sio.emit(
|
|
651
673
|
"code:analysis:error",
|
|
652
674
|
{
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Lightweight MonitorServer for claude-mpm.
|
|
3
3
|
|
|
4
4
|
WHY: This module provides a minimal, independent monitoring service that:
|
|
5
|
-
- Runs as a stable background service on port
|
|
5
|
+
- Runs as a stable background service on port 8765
|
|
6
6
|
- Only handles event collection and relay (no UI components)
|
|
7
7
|
- Has minimal dependencies and resource usage
|
|
8
8
|
- Can run as always-on background service
|
|
@@ -60,7 +60,7 @@ class MonitorServer(SocketIOServiceInterface):
|
|
|
60
60
|
monitor_config = config.get("monitor_server", {})
|
|
61
61
|
|
|
62
62
|
self.host = host or monitor_config.get("host", "localhost")
|
|
63
|
-
self.port = port or monitor_config.get("port",
|
|
63
|
+
self.port = port or monitor_config.get("port", 8765)
|
|
64
64
|
self.logger = get_logger(__name__ + ".MonitorServer")
|
|
65
65
|
|
|
66
66
|
# Configuration-based settings
|
|
@@ -393,6 +393,68 @@ class SocketIOServerCore:
|
|
|
393
393
|
self.app.router.add_post("/api/events", api_events_handler)
|
|
394
394
|
self.logger.info("✅ HTTP API endpoint registered at /api/events")
|
|
395
395
|
|
|
396
|
+
# Add file reading endpoint for source viewer
|
|
397
|
+
async def file_read_handler(request):
|
|
398
|
+
"""Handle GET /api/file/read for reading source files."""
|
|
399
|
+
import os
|
|
400
|
+
|
|
401
|
+
file_path = request.query.get("path", "")
|
|
402
|
+
|
|
403
|
+
if not file_path:
|
|
404
|
+
return web.json_response({"error": "No path provided"}, status=400)
|
|
405
|
+
|
|
406
|
+
abs_path = os.path.abspath(os.path.expanduser(file_path))
|
|
407
|
+
|
|
408
|
+
# Security check - ensure file is within the project
|
|
409
|
+
try:
|
|
410
|
+
project_root = os.getcwd()
|
|
411
|
+
if not abs_path.startswith(project_root):
|
|
412
|
+
return web.json_response({"error": "Access denied"}, status=403)
|
|
413
|
+
except Exception:
|
|
414
|
+
pass
|
|
415
|
+
|
|
416
|
+
if not os.path.exists(abs_path):
|
|
417
|
+
return web.json_response({"error": "File not found"}, status=404)
|
|
418
|
+
|
|
419
|
+
if not os.path.isfile(abs_path):
|
|
420
|
+
return web.json_response({"error": "Not a file"}, status=400)
|
|
421
|
+
|
|
422
|
+
try:
|
|
423
|
+
# Read file with appropriate encoding
|
|
424
|
+
encodings = ["utf-8", "latin-1", "cp1252"]
|
|
425
|
+
content = None
|
|
426
|
+
|
|
427
|
+
for encoding in encodings:
|
|
428
|
+
try:
|
|
429
|
+
with open(abs_path, encoding=encoding) as f:
|
|
430
|
+
content = f.read()
|
|
431
|
+
break
|
|
432
|
+
except UnicodeDecodeError:
|
|
433
|
+
continue
|
|
434
|
+
|
|
435
|
+
if content is None:
|
|
436
|
+
return web.json_response(
|
|
437
|
+
{"error": "Could not decode file"}, status=400
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
return web.json_response(
|
|
441
|
+
{
|
|
442
|
+
"path": abs_path,
|
|
443
|
+
"name": os.path.basename(abs_path),
|
|
444
|
+
"content": content,
|
|
445
|
+
"lines": len(content.splitlines()),
|
|
446
|
+
"size": os.path.getsize(abs_path),
|
|
447
|
+
}
|
|
448
|
+
)
|
|
449
|
+
|
|
450
|
+
except PermissionError:
|
|
451
|
+
return web.json_response({"error": "Permission denied"}, status=403)
|
|
452
|
+
except Exception as e:
|
|
453
|
+
return web.json_response({"error": str(e)}, status=500)
|
|
454
|
+
|
|
455
|
+
self.app.router.add_get("/api/file/read", file_read_handler)
|
|
456
|
+
self.logger.info("✅ File reading API registered at /api/file/read")
|
|
457
|
+
|
|
396
458
|
def _setup_directory_api(self):
|
|
397
459
|
"""Setup simple directory listing API.
|
|
398
460
|
|
|
@@ -500,6 +500,36 @@ class PythonAnalyzer:
|
|
|
500
500
|
)
|
|
501
501
|
)
|
|
502
502
|
|
|
503
|
+
def visit_Assign(self, node):
|
|
504
|
+
# Handle module-level variable assignments
|
|
505
|
+
if self.current_class is None: # Only module-level assignments
|
|
506
|
+
for target in node.targets:
|
|
507
|
+
if isinstance(target, ast.Name):
|
|
508
|
+
var_node = CodeNode(
|
|
509
|
+
file_path=str(file_path),
|
|
510
|
+
node_type="variable",
|
|
511
|
+
name=target.id,
|
|
512
|
+
line_start=node.lineno,
|
|
513
|
+
line_end=node.end_lineno or node.lineno,
|
|
514
|
+
parent=self.parent_name,
|
|
515
|
+
complexity=0,
|
|
516
|
+
signature=f"{target.id} = ...",
|
|
517
|
+
)
|
|
518
|
+
nodes.append(var_node)
|
|
519
|
+
|
|
520
|
+
# Emit event if emitter is available
|
|
521
|
+
if self.emitter:
|
|
522
|
+
self.emitter.emit_node(
|
|
523
|
+
CodeNodeEvent(
|
|
524
|
+
file_path=str(file_path),
|
|
525
|
+
node_type="variable",
|
|
526
|
+
name=target.id,
|
|
527
|
+
line_start=node.lineno,
|
|
528
|
+
line_end=node.end_lineno or node.lineno,
|
|
529
|
+
parent=self.parent_name,
|
|
530
|
+
)
|
|
531
|
+
)
|
|
532
|
+
|
|
503
533
|
def visit_AsyncFunctionDef(self, node):
|
|
504
534
|
self.visit_FunctionDef(node)
|
|
505
535
|
|
|
@@ -578,6 +608,24 @@ class PythonAnalyzer:
|
|
|
578
608
|
|
|
579
609
|
return nodes
|
|
580
610
|
|
|
611
|
+
def _get_assignment_signature(self, node: ast.Assign, var_name: str) -> str:
|
|
612
|
+
"""Get assignment signature string."""
|
|
613
|
+
try:
|
|
614
|
+
# Try to get a simple representation of the value
|
|
615
|
+
if isinstance(node.value, ast.Constant):
|
|
616
|
+
if isinstance(node.value.value, str):
|
|
617
|
+
return f'{var_name} = "{node.value.value}"'
|
|
618
|
+
return f"{var_name} = {node.value.value}"
|
|
619
|
+
if isinstance(node.value, ast.Name):
|
|
620
|
+
return f"{var_name} = {node.value.id}"
|
|
621
|
+
if isinstance(node.value, ast.List):
|
|
622
|
+
return f"{var_name} = [...]"
|
|
623
|
+
if isinstance(node.value, ast.Dict):
|
|
624
|
+
return f"{var_name} = {{...}}"
|
|
625
|
+
return f"{var_name} = ..."
|
|
626
|
+
except:
|
|
627
|
+
return f"{var_name} = ..."
|
|
628
|
+
|
|
581
629
|
|
|
582
630
|
class MultiLanguageAnalyzer:
|
|
583
631
|
"""Analyzes multiple programming languages using tree-sitter.
|
|
@@ -1625,26 +1673,56 @@ class CodeTreeAnalyzer:
|
|
|
1625
1673
|
|
|
1626
1674
|
self.emitter.emit_file_analyzed(file_path, filtered_nodes, duration)
|
|
1627
1675
|
|
|
1676
|
+
# Prepare the nodes data
|
|
1677
|
+
final_nodes = (
|
|
1678
|
+
filtered_nodes
|
|
1679
|
+
if "filtered_nodes" in locals()
|
|
1680
|
+
else [
|
|
1681
|
+
{
|
|
1682
|
+
"name": n.name,
|
|
1683
|
+
"type": n.node_type,
|
|
1684
|
+
"line_start": n.line_start,
|
|
1685
|
+
"line_end": n.line_end,
|
|
1686
|
+
"complexity": n.complexity,
|
|
1687
|
+
"has_docstring": n.has_docstring,
|
|
1688
|
+
"signature": n.signature,
|
|
1689
|
+
}
|
|
1690
|
+
for n in nodes
|
|
1691
|
+
if not self._is_internal_node(n)
|
|
1692
|
+
]
|
|
1693
|
+
)
|
|
1694
|
+
|
|
1695
|
+
# Convert nodes to elements format for dashboard compatibility
|
|
1696
|
+
elements = []
|
|
1697
|
+
for node in final_nodes:
|
|
1698
|
+
element = {
|
|
1699
|
+
"name": node["name"],
|
|
1700
|
+
"type": node["type"],
|
|
1701
|
+
"line": node["line_start"], # Dashboard expects 'line' not 'line_start'
|
|
1702
|
+
"complexity": node["complexity"],
|
|
1703
|
+
"signature": node.get("signature", ""),
|
|
1704
|
+
"has_docstring": node.get("has_docstring", False),
|
|
1705
|
+
}
|
|
1706
|
+
# Add methods if it's a class (for expandable tree)
|
|
1707
|
+
if node["type"] == "class":
|
|
1708
|
+
element["methods"] = [] # Could be populated with class methods
|
|
1709
|
+
elements.append(element)
|
|
1710
|
+
|
|
1628
1711
|
return {
|
|
1629
1712
|
"path": file_path,
|
|
1630
1713
|
"language": language,
|
|
1631
|
-
"nodes":
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
}
|
|
1644
|
-
for n in nodes
|
|
1645
|
-
if not self._is_internal_node(n)
|
|
1646
|
-
]
|
|
1647
|
-
),
|
|
1714
|
+
"nodes": final_nodes, # Keep for backward compatibility
|
|
1715
|
+
"elements": elements, # Add for dashboard compatibility
|
|
1716
|
+
"complexity": sum(e["complexity"] for e in elements),
|
|
1717
|
+
"lines": len(elements), # Simple line count approximation
|
|
1718
|
+
"stats": {
|
|
1719
|
+
"classes": len([e for e in elements if e["type"] == "class"]),
|
|
1720
|
+
"functions": len([e for e in elements if e["type"] == "function"]),
|
|
1721
|
+
"methods": len([e for e in elements if e["type"] == "method"]),
|
|
1722
|
+
"variables": len([e for e in elements if e["type"] == "variable"]),
|
|
1723
|
+
"imports": len([e for e in elements if e["type"] == "import"]),
|
|
1724
|
+
"total": len(elements),
|
|
1725
|
+
},
|
|
1648
1726
|
}
|
|
1649
1727
|
|
|
1650
1728
|
def _is_internal_node(self, node: CodeNode) -> bool:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
|
|
2
|
-
claude_mpm/VERSION,sha256=
|
|
2
|
+
claude_mpm/VERSION,sha256=dPUXoIIYBmj14F2_TcFo1SPovVV5VXVNLYgBHQoDYt8,6
|
|
3
3
|
claude_mpm/__init__.py,sha256=lyTZAYGH4DTaFGLRNWJKk5Q5oTjzN5I6AXmfVX-Jff0,1512
|
|
4
4
|
claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
|
|
5
5
|
claude_mpm/constants.py,sha256=I946iCQzIIPRZVVJ8aO7lA4euiyDnNw2IX7EelAOkIE,5915
|
|
@@ -83,7 +83,7 @@ claude_mpm/cli/commands/mcp_pipx_config.py,sha256=sE62VD6Q1CcO2k1nlbIhHMfAJFQTZf
|
|
|
83
83
|
claude_mpm/cli/commands/mcp_server_commands.py,sha256=-1G_2Y5ScTvzDd-kY8fTAao2H6FH7DnsLimleF1rVqQ,6197
|
|
84
84
|
claude_mpm/cli/commands/mcp_tool_commands.py,sha256=q17GzlFT3JiLTrDqwPO2tz1-fKmPO5QU449syTnKTz4,1283
|
|
85
85
|
claude_mpm/cli/commands/memory.py,sha256=Yzfs3_oiKciv3sfOoDm2lJL4M9idG7ARV3-sNw1ge_g,26186
|
|
86
|
-
claude_mpm/cli/commands/monitor.py,sha256=
|
|
86
|
+
claude_mpm/cli/commands/monitor.py,sha256=knr5uCaKwpqwsTmsW24rZobWJaVU40HJHSAfsmDXP2o,12059
|
|
87
87
|
claude_mpm/cli/commands/mpm_init.py,sha256=lO7N91ZHn_n18XbchUUcYoyme7L5NLcXVnhWm5F_Gq8,22367
|
|
88
88
|
claude_mpm/cli/commands/mpm_init_handler.py,sha256=-pCB0XL3KipqGtnta8CC7Lg5TPMwstEhMFBcgF4aaa4,2919
|
|
89
89
|
claude_mpm/cli/commands/run.py,sha256=HrqRWCxmtCKcOxygXRM4KYlN1FDxBXrt4lxz0WunPTs,43390
|
|
@@ -135,7 +135,7 @@ claude_mpm/core/agent_session_manager.py,sha256=JmhP67tZuJhGaXOriWeYdl69edxB8szV
|
|
|
135
135
|
claude_mpm/core/base_service.py,sha256=OGFg2IrvkSVhDUoN12y9HD6L6YGka0pc6Wj3AmHKxYk,29182
|
|
136
136
|
claude_mpm/core/cache.py,sha256=aCvZg08gT8uMFSDp-s0-xqRYSgcfBTDGM3MlJTTboMY,17170
|
|
137
137
|
claude_mpm/core/claude_runner.py,sha256=e6ob7FwcBzvhw9gnPvmL8Zw_BasdfzuV8b1dvqtvGKk,34787
|
|
138
|
-
claude_mpm/core/config.py,sha256=
|
|
138
|
+
claude_mpm/core/config.py,sha256=3TrDkcraWdij6LZ3Vermg3CadLy8XqxkAJ3k5qYAniw,39356
|
|
139
139
|
claude_mpm/core/config_aliases.py,sha256=asgAgMGlZSv-5PXPBH8e__QfwJQy_Or9ldPD9yzCrM0,9643
|
|
140
140
|
claude_mpm/core/config_constants.py,sha256=MEF35Y2Lj5FMzRdhgSgZrZeTzHfCzistPGZVY8INta4,10073
|
|
141
141
|
claude_mpm/core/constants.py,sha256=88J9bGT05Fbr3lzHLWtLQbBYRuJuLBjK3Bfq_qyWcIo,9539
|
|
@@ -202,9 +202,9 @@ claude_mpm/dashboard/static/built/components/ui-state-manager.js,sha256=PtZs6sxN
|
|
|
202
202
|
claude_mpm/dashboard/static/built/components/unified-data-viewer.js,sha256=awSWdzpGgg4ovVVR4E5TfIr-K2UhLCSuxeFIXWSUo3A,34675
|
|
203
203
|
claude_mpm/dashboard/static/built/components/working-directory.js,sha256=xE1ydpKDzRWrzHzfjrCiq5wbf3vDhmgQTGKS7myQcPM,15790
|
|
204
204
|
claude_mpm/dashboard/static/css/activity.css,sha256=0SJUwGB6fr4OlVqMwhvVKrPndg2R3QTZPnN6DkAo4aU,37987
|
|
205
|
-
claude_mpm/dashboard/static/css/code-tree.css,sha256=
|
|
205
|
+
claude_mpm/dashboard/static/css/code-tree.css,sha256=Za8G7hOL1mEO2Ktlu8MAeNRjum9zdoYWmchyrzy6ZLU,30391
|
|
206
206
|
claude_mpm/dashboard/static/css/connection-status.css,sha256=nQiMLxIFjY5MDgrVCG58VR5H1PpE1vLlgXmnn01-P64,6729
|
|
207
|
-
claude_mpm/dashboard/static/css/dashboard.css,sha256=
|
|
207
|
+
claude_mpm/dashboard/static/css/dashboard.css,sha256=_wobeVpKGa_pDgjup0q9MyXR-FEMPPHfJLbGhM4W9Sw,85514
|
|
208
208
|
claude_mpm/dashboard/static/dist/dashboard.js,sha256=Fm2v_pxM_jISp--n9XasrcL2nHYlfC1wcVZW4zGekw4,44966
|
|
209
209
|
claude_mpm/dashboard/static/dist/socket-client.js,sha256=z9HU1HePow8Yvh-7QMcjChwMYsR_p-ZvJVu8HU6d5Xg,29110
|
|
210
210
|
claude_mpm/dashboard/static/dist/components/activity-tree.js,sha256=c7vYmCvMgq7irVrX-EFbNqVMgVuDJ_cwcvsZ4LSO3bU,29594
|
|
@@ -227,13 +227,13 @@ claude_mpm/dashboard/static/dist/components/working-directory.js,sha256=xE1ydpKD
|
|
|
227
227
|
claude_mpm/dashboard/static/js/connection-manager.js,sha256=nn7x1jmwEnBClcChbFk1uMhRPu5U1xmXz3sjuo0LNm4,17981
|
|
228
228
|
claude_mpm/dashboard/static/js/dashboard.js,sha256=RYzzhNr1pPAHZ12pgWjTpe15Nzaqrm-S9vzTRfqob5A,64712
|
|
229
229
|
claude_mpm/dashboard/static/js/extension-error-handler.js,sha256=DZHrJ3gbfv4nsjmZpNMj-Sc3GKjVJ5ds8lgoaLRnq5I,6274
|
|
230
|
-
claude_mpm/dashboard/static/js/socket-client.js,sha256=
|
|
230
|
+
claude_mpm/dashboard/static/js/socket-client.js,sha256=E6CmETHYwS4kPnk9gTnfoWO4FObWYvz0muosFS-zffs,56239
|
|
231
231
|
claude_mpm/dashboard/static/js/components/activity-tree.js,sha256=1j46X0qjYReP6gwv0WGRpJSJNuBwuj6bKmumWrCZKUo,72740
|
|
232
232
|
claude_mpm/dashboard/static/js/components/agent-hierarchy.js,sha256=Xihxog_vJrk8VBEkDogV_wbye2GIFWmH71VQ1lETOHk,28243
|
|
233
233
|
claude_mpm/dashboard/static/js/components/agent-inference.js,sha256=RUVZ_fLOyDkHYjrROen_Pzzay79Bh29eXp_GRIPbIRg,37493
|
|
234
234
|
claude_mpm/dashboard/static/js/components/build-tracker.js,sha256=iouv35tNhnyx9UKtD7X1eakJkpCnvZVCrAJ_VdzsKUY,11251
|
|
235
235
|
claude_mpm/dashboard/static/js/components/code-simple.js,sha256=3A3VIvHMpYRjuDKGMaQYoVjf-zuUa4Q6pdBHWDJ0ygM,32050
|
|
236
|
-
claude_mpm/dashboard/static/js/components/code-tree.js,sha256=
|
|
236
|
+
claude_mpm/dashboard/static/js/components/code-tree.js,sha256=cnnnH_IdRy6Q-DaRPtPZfe5f5XMgyv2hVzLrMp3nwII,196135
|
|
237
237
|
claude_mpm/dashboard/static/js/components/code-viewer.js,sha256=vhesEPYOM6MggweaYvYsv7ufVbuVpIcyJPXpJXyJwpM,14453
|
|
238
238
|
claude_mpm/dashboard/static/js/components/connection-debug.js,sha256=Qxr_ofDNkxDlZAwbLnhZkXVMyuO9jOe-NMWC9VHxNnA,22196
|
|
239
239
|
claude_mpm/dashboard/static/js/components/event-processor.js,sha256=pP15JIf2yEh7gqEdam42m_B1B4hDlfKbkDcGmQhyjM8,20567
|
|
@@ -250,7 +250,7 @@ claude_mpm/dashboard/static/js/components/ui-state-manager.js,sha256=EWm0HpPI9TS
|
|
|
250
250
|
claude_mpm/dashboard/static/js/components/unified-data-viewer.js,sha256=iKI_AaVX36o2JssBs0C1KR8AFb4qse47-JwfBsd9tBo,58625
|
|
251
251
|
claude_mpm/dashboard/static/js/components/working-directory.js,sha256=BRsPYwVnhbhFl0mC0Gvb-Ev1zxAu6yZpZcl1T1aJWWA,33558
|
|
252
252
|
claude_mpm/dashboard/templates/code_simple.html,sha256=xrmTLFow0M5NWFlk4ci1eLWML-IHr35i5pqIVaEg2TU,4329
|
|
253
|
-
claude_mpm/dashboard/templates/index.html,sha256=
|
|
253
|
+
claude_mpm/dashboard/templates/index.html,sha256=8tmzUqDRHbdI2Ts8TsVxlk1c6DX4vgDuU6T5HzBm7gY,30562
|
|
254
254
|
claude_mpm/experimental/__init__.py,sha256=R_aclOvWpvSTHWAx9QXyg9OIPVK2dXT5tQJhxLQN11Y,369
|
|
255
255
|
claude_mpm/experimental/cli_enhancements.py,sha256=rlYOMVlj8vQzuyCkHWQ7TtjcsDeFq3y1Ng5qty2fyY8,11486
|
|
256
256
|
claude_mpm/generators/__init__.py,sha256=rG8vwF_BjPmeMKvyMXpUA8uJ-7mtW2HTNfalZzgRlNk,153
|
|
@@ -334,7 +334,7 @@ claude_mpm/services/agents/deployment/agent_operation_service.py,sha256=wPoGYf3F
|
|
|
334
334
|
claude_mpm/services/agents/deployment/agent_record_service.py,sha256=0v-tWJV-AczLXPet1oqlY_fepIj4qa3l_aZMjpDXSN8,14040
|
|
335
335
|
claude_mpm/services/agents/deployment/agent_restore_handler.py,sha256=YDPVY4m_4l5wSFq9fxsTqm0ixX8AeTyzERh-PtabuUY,3101
|
|
336
336
|
claude_mpm/services/agents/deployment/agent_state_service.py,sha256=yjuVG-rwyXBS0T8yKfrx1QTOSmfB_Ejvm-0QLjBNDDI,11772
|
|
337
|
-
claude_mpm/services/agents/deployment/agent_template_builder.py,sha256=
|
|
337
|
+
claude_mpm/services/agents/deployment/agent_template_builder.py,sha256=BdH_dEe7qa0VgbwxFPy_3CtHPI-LDy-f-dqTzyDRO_A,34847
|
|
338
338
|
claude_mpm/services/agents/deployment/agent_validator.py,sha256=Yyf5zG8pFYIvmRzghPZSr8Ka2p_uVe9MVN8bmtucNSc,12737
|
|
339
339
|
claude_mpm/services/agents/deployment/agent_version_manager.py,sha256=Q2COYmnWDvDxsBh_ikN9Govk3o8Dy1T0X-rioMpUsis,11189
|
|
340
340
|
claude_mpm/services/agents/deployment/agent_versioning.py,sha256=cDkSv12m6_XjhhD6Tr_tmcnvx4RrXhMAKpjm6E_fKyQ,989
|
|
@@ -433,6 +433,7 @@ claude_mpm/services/core/interfaces/agent.py,sha256=EaPYn6k9HjB2DRTiZIMJwEIBABZF
|
|
|
433
433
|
claude_mpm/services/core/interfaces/communication.py,sha256=evwtLbYCFa3Zb8kEfL10LOBVdwP4-n3a3wa7NqIHmKQ,8887
|
|
434
434
|
claude_mpm/services/core/interfaces/infrastructure.py,sha256=eLtr_dFhA3Ux3mPOV_4DbWhGjHpfpGnj6xOhfQcgZGk,10037
|
|
435
435
|
claude_mpm/services/core/interfaces/service.py,sha256=hNfHXe45LcPCp_dToOmZCfnUZBF5axMf_TdxqCSm2-I,11536
|
|
436
|
+
claude_mpm/services/dashboard/stable_server.py,sha256=vUiWXutYX5kMkSB3_FBuCp9qnlSAT0bnXjNlI9ybe3Q,17752
|
|
436
437
|
claude_mpm/services/diagnostics/__init__.py,sha256=WTRucANR9EwNi53rotjkeE4k75s18RjHJ8s1BfBj7ic,614
|
|
437
438
|
claude_mpm/services/diagnostics/diagnostic_runner.py,sha256=cpCZ7JBvRIpGEchiwYsojmiGaI99Wf-hGxk8eem7xXQ,9164
|
|
438
439
|
claude_mpm/services/diagnostics/doctor_reporter.py,sha256=Z8hYLqUbGC02gL7nX9kZKbLWRzOmTORRINfCr7EHbBI,10537
|
|
@@ -549,15 +550,15 @@ claude_mpm/services/shared/lifecycle_service_base.py,sha256=WiAUJ5_k-2dYkDRMbJl7
|
|
|
549
550
|
claude_mpm/services/shared/manager_base.py,sha256=kmjhpVqgfYC1N4YQnPAilCfdrSpAh9Qz7wcQ602L4x4,9296
|
|
550
551
|
claude_mpm/services/shared/service_factory.py,sha256=blNkIowhIxykrn-a1qsD8Rtkjlky615nAT2nc8m18QI,9718
|
|
551
552
|
claude_mpm/services/socketio/__init__.py,sha256=PS-2twllga-2mhSfKdu4MgpikfKp_730gMLAqU_9YX4,556
|
|
552
|
-
claude_mpm/services/socketio/client_proxy.py,sha256=
|
|
553
|
+
claude_mpm/services/socketio/client_proxy.py,sha256=7e2oiRCBYhSyq3_iA7R48CbzHQS_dXC9eYHnYAN-r_Q,7182
|
|
553
554
|
claude_mpm/services/socketio/dashboard_server.py,sha256=QMQyRvKxfy692A1oStxmY05BeUpVzQZzKHiplw9YgrU,13655
|
|
554
555
|
claude_mpm/services/socketio/event_normalizer.py,sha256=TlhZbLgb6fSFNXNAZEEbGxHOqgTIB2S9WtEGJEV7Olw,28402
|
|
555
556
|
claude_mpm/services/socketio/migration_utils.py,sha256=1pK_zGZ8Pd57pCg1O-3gKT8i7_fjEKZ377hxOMGUPQQ,11963
|
|
556
557
|
claude_mpm/services/socketio/monitor_client.py,sha256=2k9cP4e3GrdNFbiMGtcKJm0aoLxd5SgS60DObMjAtlY,12714
|
|
557
|
-
claude_mpm/services/socketio/monitor_server.py,sha256=
|
|
558
|
+
claude_mpm/services/socketio/monitor_server.py,sha256=dBUWTFF0C94HrFP5fZonw_yh42NPaKz6D9_lV9DcZzE,17746
|
|
558
559
|
claude_mpm/services/socketio/handlers/__init__.py,sha256=lGYFfn5P1eB6ri3HAPuDJMfdCfHIw6mQEbweAihNuHY,873
|
|
559
560
|
claude_mpm/services/socketio/handlers/base.py,sha256=DjUODCOLTQSsC_-NP9yr-8g77arawmsRrM5KC06aDmw,4845
|
|
560
|
-
claude_mpm/services/socketio/handlers/code_analysis.py,sha256=
|
|
561
|
+
claude_mpm/services/socketio/handlers/code_analysis.py,sha256=BmcJiygXaCVjVJndE-GFi4eN7_b8v7mqScddMTj5DUk,26271
|
|
561
562
|
claude_mpm/services/socketio/handlers/connection.py,sha256=sa6Rg5Y9tcf-e4PEb6f4fNhFQcpZ9WbwdiGXmkzlFTs,26781
|
|
562
563
|
claude_mpm/services/socketio/handlers/connection_handler.py,sha256=DTY0pa--HQu4C6-WCgE1zskvHm3gVuEKWwaSFNBAoec,13287
|
|
563
564
|
claude_mpm/services/socketio/handlers/file.py,sha256=itpPa5OAow5_OXrTOXk0vsyuEYm4iVmxwN9xowy7jiY,8341
|
|
@@ -569,7 +570,7 @@ claude_mpm/services/socketio/handlers/registry.py,sha256=0f-8zBz-iXCbdPPG8iaMpam
|
|
|
569
570
|
claude_mpm/services/socketio/server/__init__.py,sha256=S486w-i-hBo3rNW_AtzxbasEgP32By-uI9zz7hzKz-o,640
|
|
570
571
|
claude_mpm/services/socketio/server/broadcaster.py,sha256=y_D-fDhSD2NZI0cP9wuoB2nlI7VkKjzW_EjVmP-xd5Y,21375
|
|
571
572
|
claude_mpm/services/socketio/server/connection_manager.py,sha256=lf1rurOvUej0FWLWXn2u1q0xz2rlzSWKb818Le-LkFM,21234
|
|
572
|
-
claude_mpm/services/socketio/server/core.py,sha256
|
|
573
|
+
claude_mpm/services/socketio/server/core.py,sha256=eBM_CkXDqwwIZ8UjsMiWN2qrnIQYb4S1aGOjOSwqCIM,31356
|
|
573
574
|
claude_mpm/services/socketio/server/eventbus_integration.py,sha256=6LkK8W9wTiNd8d9KoAH2IY1b4osyGGgGaJ0DmwIwnVM,7790
|
|
574
575
|
claude_mpm/services/socketio/server/main.py,sha256=JvaH4vHz1AgdBsyB7qSG-BZmak9E2FA02Ij2jYKMvqs,19535
|
|
575
576
|
claude_mpm/services/ticket_services/__init__.py,sha256=I01W25n-tBWwZ0TD-dPA63nqzCU2KnpOvbqeysmaa2E,798
|
|
@@ -590,7 +591,7 @@ claude_mpm/storage/__init__.py,sha256=DXnmee6iGqC6ctFLW7_Ty1cVCjYDFuCMkwO4EV0i25
|
|
|
590
591
|
claude_mpm/storage/state_storage.py,sha256=1fFqkFy63T32JQvhUdVBNhaLQyUlkq4unjeyl0Z6j8I,16865
|
|
591
592
|
claude_mpm/tools/__init__.py,sha256=T3GuCYNAHtjVcKCeivY674PaDm48WX96AriQfTKUknY,347
|
|
592
593
|
claude_mpm/tools/__main__.py,sha256=MKDuxFuujqD5FZcLTqniDNQ2BI8yg5fDSLU3ElV6m6U,5709
|
|
593
|
-
claude_mpm/tools/code_tree_analyzer.py,sha256=
|
|
594
|
+
claude_mpm/tools/code_tree_analyzer.py,sha256=iht5BATmZeUXkykfSI1YSvnr2fzFPZP17LC-A10DXn0,63910
|
|
594
595
|
claude_mpm/tools/code_tree_builder.py,sha256=gwnsFO5ajs55UzX3SU34OMZBwhjouruQhGdQ3fJHjeA,18126
|
|
595
596
|
claude_mpm/tools/code_tree_events.py,sha256=ypUmxQRUpxQt2LQfXV_qpdL42KNvLO-K5XstxZIj9-w,13277
|
|
596
597
|
claude_mpm/tools/socketio_debug.py,sha256=H0mKHO6EIYqCVm4YU-SJ4Cw8ssA7VqJ3vU7y6eF7brk,22212
|
|
@@ -614,9 +615,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=zgiwLqh_17WxHpySvUPH65pb4bzIeUGOAYUJ
|
|
|
614
615
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
|
615
616
|
claude_mpm/validation/agent_validator.py,sha256=3Lo6LK-Mw9IdnL_bd3zl_R6FkgSVDYKUUM7EeVVD3jc,20865
|
|
616
617
|
claude_mpm/validation/frontmatter_validator.py,sha256=u8g4Eyd_9O6ugj7Un47oSGh3kqv4wMkuks2i_CtWRvM,7028
|
|
617
|
-
claude_mpm-4.2.
|
|
618
|
-
claude_mpm-4.2.
|
|
619
|
-
claude_mpm-4.2.
|
|
620
|
-
claude_mpm-4.2.
|
|
621
|
-
claude_mpm-4.2.
|
|
622
|
-
claude_mpm-4.2.
|
|
618
|
+
claude_mpm-4.2.4.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
|
|
619
|
+
claude_mpm-4.2.4.dist-info/METADATA,sha256=FOy6xE2x-Udc0_-Vmnnc19YAZp9Vsyj26wyf3iuSrUQ,13776
|
|
620
|
+
claude_mpm-4.2.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
621
|
+
claude_mpm-4.2.4.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
|
|
622
|
+
claude_mpm-4.2.4.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
623
|
+
claude_mpm-4.2.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|