claude-mpm 4.15.0__py3-none-any.whl → 4.15.2__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 claude-mpm might be problematic. Click here for more details.

Files changed (23) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/OUTPUT_STYLE.md +48 -3
  3. claude_mpm/services/diagnostics/__init__.py +2 -2
  4. claude_mpm/services/diagnostics/checks/agent_check.py +25 -24
  5. claude_mpm/services/diagnostics/checks/claude_code_check.py +24 -23
  6. claude_mpm/services/diagnostics/checks/common_issues_check.py +25 -24
  7. claude_mpm/services/diagnostics/checks/configuration_check.py +24 -23
  8. claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
  9. claude_mpm/services/diagnostics/checks/installation_check.py +28 -28
  10. claude_mpm/services/diagnostics/checks/instructions_check.py +20 -19
  11. claude_mpm/services/diagnostics/checks/mcp_check.py +31 -31
  12. claude_mpm/services/diagnostics/checks/mcp_services_check.py +36 -31
  13. claude_mpm/services/diagnostics/checks/monitor_check.py +23 -22
  14. claude_mpm/services/diagnostics/checks/startup_log_check.py +9 -8
  15. claude_mpm/services/diagnostics/diagnostic_runner.py +6 -5
  16. claude_mpm/services/diagnostics/doctor_reporter.py +28 -25
  17. claude_mpm/services/diagnostics/models.py +19 -24
  18. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/METADATA +1 -1
  19. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/RECORD +23 -23
  20. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/WHEEL +0 -0
  21. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/entry_points.txt +0 -0
  22. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/licenses/LICENSE +0 -0
  23. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/top_level.txt +0 -0
@@ -9,6 +9,7 @@ import asyncio
9
9
  from concurrent.futures import ThreadPoolExecutor, as_completed
10
10
  from typing import List, Type
11
11
 
12
+ from claude_mpm.core.enums import ValidationSeverity
12
13
  from claude_mpm.core.logging_utils import get_logger
13
14
 
14
15
  from .checks import (
@@ -25,7 +26,7 @@ from .checks import (
25
26
  MonitorCheck,
26
27
  StartupLogCheck,
27
28
  )
28
- from .models import DiagnosticResult, DiagnosticStatus, DiagnosticSummary
29
+ from .models import DiagnosticResult, DiagnosticSummary
29
30
 
30
31
  logger = get_logger(__name__)
31
32
 
@@ -92,7 +93,7 @@ class DiagnosticRunner:
92
93
  self.logger.error(f"Check {check_class.__name__} failed: {e}")
93
94
  error_result = DiagnosticResult(
94
95
  category=check_class.__name__.replace("Check", ""),
95
- status=DiagnosticStatus.ERROR,
96
+ status=ValidationSeverity.ERROR,
96
97
  message=f"Check failed: {e!s}",
97
98
  details={"error": str(e)},
98
99
  )
@@ -167,7 +168,7 @@ class DiagnosticRunner:
167
168
  results.append(
168
169
  DiagnosticResult(
169
170
  category=check_class.__name__.replace("Check", ""),
170
- status=DiagnosticStatus.ERROR,
171
+ status=ValidationSeverity.ERROR,
171
172
  message=f"Check initialization failed: {e!s}",
172
173
  details={"error": str(e)},
173
174
  )
@@ -183,7 +184,7 @@ class DiagnosticRunner:
183
184
  results.append(
184
185
  DiagnosticResult(
185
186
  category=check_name.replace("Check", ""),
186
- status=DiagnosticStatus.ERROR,
187
+ status=ValidationSeverity.ERROR,
187
188
  message=f"Check execution failed: {e!s}",
188
189
  details={"error": str(e)},
189
190
  )
@@ -238,7 +239,7 @@ class DiagnosticRunner:
238
239
  self.logger.error(f"Check {name} failed: {e}")
239
240
  error_result = DiagnosticResult(
240
241
  category=check_class.__name__.replace("Check", ""),
241
- status=DiagnosticStatus.ERROR,
242
+ status=ValidationSeverity.ERROR,
242
243
  message=f"Check failed: {e!s}",
243
244
  details={"error": str(e)},
244
245
  )
@@ -8,7 +8,9 @@ formatting for terminal display and JSON export.
8
8
  import json
9
9
  import sys
10
10
 
11
- from .models import DiagnosticResult, DiagnosticStatus, DiagnosticSummary
11
+ from claude_mpm.core.enums import OperationResult, ValidationSeverity
12
+
13
+ from .models import DiagnosticResult, DiagnosticSummary
12
14
 
13
15
 
14
16
  class DoctorReporter:
@@ -20,10 +22,10 @@ class DoctorReporter:
20
22
 
21
23
  # Status symbols and colors
22
24
  STATUS_SYMBOLS = {
23
- DiagnosticStatus.OK: "✅",
24
- DiagnosticStatus.WARNING: "⚠️ ",
25
- DiagnosticStatus.ERROR: "❌",
26
- DiagnosticStatus.SKIPPED: "⏭️ ",
25
+ OperationResult.SUCCESS: "✅",
26
+ ValidationSeverity.WARNING: "⚠️ ",
27
+ ValidationSeverity.ERROR: "❌",
28
+ OperationResult.SKIPPED: "⏭️ ",
27
29
  }
28
30
 
29
31
  # ANSI color codes
@@ -94,11 +96,11 @@ class DoctorReporter:
94
96
  # Main result line
95
97
  line = f"{indent_str}{symbol} {result.category}: "
96
98
 
97
- if result.status == DiagnosticStatus.OK:
99
+ if result.status == OperationResult.SUCCESS:
98
100
  line += self._color("OK", color)
99
- elif result.status == DiagnosticStatus.WARNING:
101
+ elif result.status == ValidationSeverity.WARNING:
100
102
  line += self._color("Warning", color)
101
- elif result.status == DiagnosticStatus.ERROR:
103
+ elif result.status == ValidationSeverity.ERROR:
102
104
  line += self._color("Error", color)
103
105
  else:
104
106
  line += self._color("Skipped", color)
@@ -163,9 +165,9 @@ class DoctorReporter:
163
165
 
164
166
  # Overall health
165
167
  overall = summary.overall_status
166
- if overall == DiagnosticStatus.OK:
168
+ if overall == OperationResult.SUCCESS:
167
169
  print(self._color("\n✅ System is healthy!", "green"))
168
- elif overall == DiagnosticStatus.WARNING:
170
+ elif overall == ValidationSeverity.WARNING:
169
171
  print(
170
172
  self._color(
171
173
  "\n⚠️ System has minor issues that should be addressed.", "yellow"
@@ -283,10 +285,10 @@ class DoctorReporter:
283
285
 
284
286
  # Overall Health Status
285
287
  overall = summary.overall_status
286
- if overall == DiagnosticStatus.OK:
288
+ if overall == OperationResult.SUCCESS:
287
289
  print("### 🎉 Overall Status: **Healthy**")
288
290
  print("Your Claude MPM installation is functioning properly.\n")
289
- elif overall == DiagnosticStatus.WARNING:
291
+ elif overall == ValidationSeverity.WARNING:
290
292
  print("### ⚠️ Overall Status: **Needs Attention**")
291
293
  print("Your installation has minor issues that should be addressed.\n")
292
294
  else:
@@ -344,13 +346,13 @@ class DoctorReporter:
344
346
  reset_code = self.COLORS["reset"]
345
347
  return f"{color_code}{text}{reset_code}"
346
348
 
347
- def _get_status_color(self, status: DiagnosticStatus) -> str:
349
+ def _get_status_color(self, status) -> str:
348
350
  """Get color for a status."""
349
351
  color_map = {
350
- DiagnosticStatus.OK: "green",
351
- DiagnosticStatus.WARNING: "yellow",
352
- DiagnosticStatus.ERROR: "red",
353
- DiagnosticStatus.SKIPPED: "gray",
352
+ OperationResult.SUCCESS: "green",
353
+ ValidationSeverity.WARNING: "yellow",
354
+ ValidationSeverity.ERROR: "red",
355
+ OperationResult.SKIPPED: "gray",
354
356
  }
355
357
  return color_map.get(status, "reset")
356
358
 
@@ -475,12 +477,13 @@ class DoctorReporter:
475
477
  print(f"### {symbol} {result.category}\n")
476
478
 
477
479
  # Status badge
478
- status_badge = {
479
- DiagnosticStatus.OK: "![OK](https://img.shields.io/badge/status-OK-green)",
480
- DiagnosticStatus.WARNING: "![Warning](https://img.shields.io/badge/status-Warning-yellow)",
481
- DiagnosticStatus.ERROR: "![Error](https://img.shields.io/badge/status-Error-red)",
482
- DiagnosticStatus.SKIPPED: "![Skipped](https://img.shields.io/badge/status-Skipped-gray)",
483
- }.get(result.status, "")
480
+ status_badge_map = {
481
+ OperationResult.SUCCESS: "![OK](https://img.shields.io/badge/status-OK-green)",
482
+ ValidationSeverity.WARNING: "![Warning](https://img.shields.io/badge/status-Warning-yellow)",
483
+ ValidationSeverity.ERROR: "![Error](https://img.shields.io/badge/status-Error-red)",
484
+ OperationResult.SKIPPED: "![Skipped](https://img.shields.io/badge/status-Skipped-gray)",
485
+ }
486
+ status_badge = status_badge_map.get(result.status, "")
484
487
 
485
488
  print(f"{status_badge}")
486
489
  print(f"\n**Message:** {result.message}\n")
@@ -513,7 +516,7 @@ class DoctorReporter:
513
516
  for result in summary.results:
514
517
  if (
515
518
  result.category == "Installation"
516
- and result.status != DiagnosticStatus.OK
519
+ and result.status != OperationResult.SUCCESS
517
520
  ):
518
521
  if "pipx" not in str(result.details.get("installation_method", "")):
519
522
  recommendations.append(
@@ -532,7 +535,7 @@ class DoctorReporter:
532
535
 
533
536
  if (
534
537
  result.category == "Claude Code"
535
- and result.status == DiagnosticStatus.WARNING
538
+ and result.status == ValidationSeverity.WARNING
536
539
  ):
537
540
  recommendations.append(
538
541
  "Update Claude Code (CLI) to the latest version for best compatibility"
@@ -6,17 +6,9 @@ consistency across all checks and reporting.
6
6
  """
7
7
 
8
8
  from dataclasses import dataclass, field
9
- from enum import Enum
10
- from typing import Any, Dict, List, Optional
9
+ from typing import Any, Dict, List, Optional, Union
11
10
 
12
-
13
- class DiagnosticStatus(Enum):
14
- """Status levels for diagnostic results."""
15
-
16
- OK = "ok"
17
- WARNING = "warning"
18
- ERROR = "error"
19
- SKIPPED = "skipped"
11
+ from ...core.enums import OperationResult, ValidationSeverity
20
12
 
21
13
 
22
14
  @dataclass
@@ -25,10 +17,13 @@ class DiagnosticResult:
25
17
 
26
18
  WHY: Standardized result format ensures consistent reporting
27
19
  and makes it easy to aggregate and display results.
20
+
21
+ Note: status uses Union[OperationResult, ValidationSeverity] to support both
22
+ operation results (SUCCESS, SKIPPED) and validation results (WARNING, ERROR).
28
23
  """
29
24
 
30
25
  category: str # e.g., "Installation", "Agents", "MCP Server"
31
- status: DiagnosticStatus
26
+ status: Union[OperationResult, ValidationSeverity]
32
27
  message: str
33
28
  details: Dict[str, Any] = field(default_factory=dict)
34
29
  fix_command: Optional[str] = None
@@ -50,16 +45,16 @@ class DiagnosticResult:
50
45
  @property
51
46
  def has_issues(self) -> bool:
52
47
  """Check if this result indicates any issues."""
53
- return self.status in (DiagnosticStatus.WARNING, DiagnosticStatus.ERROR)
48
+ return self.status in (ValidationSeverity.WARNING, ValidationSeverity.ERROR)
54
49
 
55
50
  @property
56
51
  def severity_level(self) -> int:
57
52
  """Get numeric severity level for sorting."""
58
53
  severity_map = {
59
- DiagnosticStatus.OK: 0,
60
- DiagnosticStatus.SKIPPED: 1,
61
- DiagnosticStatus.WARNING: 2,
62
- DiagnosticStatus.ERROR: 3,
54
+ OperationResult.SUCCESS: 0,
55
+ OperationResult.SKIPPED: 1,
56
+ ValidationSeverity.WARNING: 2,
57
+ ValidationSeverity.ERROR: 3,
63
58
  }
64
59
  return severity_map.get(self.status, 0)
65
60
 
@@ -84,13 +79,13 @@ class DiagnosticSummary:
84
79
  self.results.append(result)
85
80
  self.total_checks += 1
86
81
 
87
- if result.status == DiagnosticStatus.OK:
82
+ if result.status == OperationResult.SUCCESS:
88
83
  self.ok_count += 1
89
- elif result.status == DiagnosticStatus.WARNING:
84
+ elif result.status == ValidationSeverity.WARNING:
90
85
  self.warning_count += 1
91
- elif result.status == DiagnosticStatus.ERROR:
86
+ elif result.status == ValidationSeverity.ERROR:
92
87
  self.error_count += 1
93
- elif result.status == DiagnosticStatus.SKIPPED:
88
+ elif result.status == OperationResult.SKIPPED:
94
89
  self.skipped_count += 1
95
90
 
96
91
  @property
@@ -99,13 +94,13 @@ class DiagnosticSummary:
99
94
  return self.warning_count > 0 or self.error_count > 0
100
95
 
101
96
  @property
102
- def overall_status(self) -> DiagnosticStatus:
97
+ def overall_status(self) -> Union[OperationResult, ValidationSeverity]:
103
98
  """Get overall system status."""
104
99
  if self.error_count > 0:
105
- return DiagnosticStatus.ERROR
100
+ return ValidationSeverity.ERROR
106
101
  if self.warning_count > 0:
107
- return DiagnosticStatus.WARNING
108
- return DiagnosticStatus.OK
102
+ return ValidationSeverity.WARNING
103
+ return OperationResult.SUCCESS
109
104
 
110
105
  def to_dict(self) -> Dict[str, Any]:
111
106
  """Convert to dictionary for JSON serialization."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 4.15.0
3
+ Version: 4.15.2
4
4
  Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
5
5
  Author-email: Bob Matsuoka <bob@matsuoka.com>
6
6
  Maintainer: Claude MPM Team
@@ -1,5 +1,5 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
2
- claude_mpm/VERSION,sha256=MIMUHAEUZTKPm3oGboOeYvvn2c-zAbYGe46pThj8U2U,7
2
+ claude_mpm/VERSION,sha256=3_LkiVeH6VwGYcZk6ByV2zB8Nb61h10Du0aQVedzFmY,7
3
3
  claude_mpm/__init__.py,sha256=UCw6j9e_tZQ3kJtTqmdfNv7MHyw9nD1jkj80WurwM2g,2064
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
5
  claude_mpm/constants.py,sha256=sLjJF6Kw7H4V9WWeaEYltM-77TgXqzEMX5vx4ukM5-0,5977
@@ -15,7 +15,7 @@ claude_mpm/agents/BASE_QA.md,sha256=YtaYJSjWDfmFS3B6PtNvog4L54_w5K1rvpV0yqLhP20,
15
15
  claude_mpm/agents/BASE_RESEARCH.md,sha256=2DZhDd5XxWWtsyNTBIwvtNWBu1JpFy5R5SAZDHh0otU,1690
16
16
  claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md,sha256=zQZhrhVq9NLCtSjVX-aC0xcgueemSuPhKyv0SjEOyIQ,25852
17
17
  claude_mpm/agents/MEMORY.md,sha256=KbRwY_RYdOvTvFC2DD-ATfwjHkQWJ5PIjlGws_7RmjI,3307
18
- claude_mpm/agents/OUTPUT_STYLE.md,sha256=bBmup61VKuohq19VEJI2EPRRkHKZLjcaGbyMMLwng8Y,12149
18
+ claude_mpm/agents/OUTPUT_STYLE.md,sha256=fF9ydZuOgewDUNmaqJR_O7QV-feKiJ9bgPgk0NNtg_w,14270
19
19
  claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=_E-J-4USZcADyJZ2280gX-AO8mLgPmiO2Cyf-Klt-7k,37024
20
20
  claude_mpm/agents/WORKFLOW.md,sha256=vJ9iXCVqAaeM_yVlXxbcP3bsL210-1BI3ZAanvWv4hI,9085
21
21
  claude_mpm/agents/__init__.py,sha256=jRFxvV_DIZ-NdENa-703Xu3YpwvlQj6yv-mQ6FgmldM,3220
@@ -610,23 +610,23 @@ claude_mpm/services/core/models/process.py,sha256=bqrXUgjDZ8ut3uj6tUTyHTSTJhuxtL
610
610
  claude_mpm/services/core/models/restart.py,sha256=-fSa5LIhnkCKGsPIttT2tB3Gv_n9giwVz_FY-vJxYrE,10032
611
611
  claude_mpm/services/core/models/stability.py,sha256=CFCEXY3VkZNTdvYHinLgQTSJa7kz2apZE-J9IPykqLU,8615
612
612
  claude_mpm/services/core/models/toolchain.py,sha256=wkEnZgF944wq1SMqqmQVa91TtSKeFiZgO_Lg1wrO7KM,12167
613
- claude_mpm/services/diagnostics/__init__.py,sha256=WTRucANR9EwNi53rotjkeE4k75s18RjHJ8s1BfBj7ic,614
614
- claude_mpm/services/diagnostics/diagnostic_runner.py,sha256=PJje2C3_20JAeDBf2LpZ_rfi3rwSWk73EXJmZEkDcvs,9470
615
- claude_mpm/services/diagnostics/doctor_reporter.py,sha256=FR4Qyy60-9pdEQF5fyY_nxOSe57AT9fVBajx1mV4eYU,19576
616
- claude_mpm/services/diagnostics/models.py,sha256=nqOQLllZyZmw3Zt5eFJfE1Al7C3Vrn3REgFlARtT3jQ,3831
613
+ claude_mpm/services/diagnostics/__init__.py,sha256=rBaPAP1C6pXfaK3_61PZUegnIs58f8Gm0fgWvvkD6o8,576
614
+ claude_mpm/services/diagnostics/diagnostic_runner.py,sha256=j4iYVeFJSm4AKwkwqj1w8QK73qJ6TedHoLU2mwAWdBs,9513
615
+ claude_mpm/services/diagnostics/doctor_reporter.py,sha256=UQqlkehrRpeEhF-xqgaE_ChVaCiFYN-Xhom8X0A3cYQ,19702
616
+ claude_mpm/services/diagnostics/models.py,sha256=Sb8qijm0wBD1ovKRYrrAM7a3Ki9oV50NS1Ax-nvLSac,3958
617
617
  claude_mpm/services/diagnostics/checks/__init__.py,sha256=aNdOeJHZVIpEqqzr6xWUOiyZCIrN4vckfRxkW70cqeo,987
618
- claude_mpm/services/diagnostics/checks/agent_check.py,sha256=2GhWyepWS_eJR8YLteFcTMiJZVMqWoz4X8_-u2OSL2M,13957
618
+ claude_mpm/services/diagnostics/checks/agent_check.py,sha256=ye2RrPDSs-P-sedtVo7MxVXH3kuD-pA9wZ4OIuzeAyY,14052
619
619
  claude_mpm/services/diagnostics/checks/base_check.py,sha256=FdCPk4z5wdBVR5Y4bikwVY4P4BIIXBkYCmhr-qu1ChM,1574
620
- claude_mpm/services/diagnostics/checks/claude_code_check.py,sha256=EAaB68OMnvk41TjWdHeaTNXBKA3u4j3nj_ofLF_t9So,10419
621
- claude_mpm/services/diagnostics/checks/common_issues_check.py,sha256=t6KuaVP0nlMfQzzei21Rx9BL2tsir2Mh2v2hlvsV9l4,13356
622
- claude_mpm/services/diagnostics/checks/configuration_check.py,sha256=ixu2UJ-ysNC7mc3Hohfd6u-q2-80XIOHhZ7OCEqhoOk,11178
623
- claude_mpm/services/diagnostics/checks/filesystem_check.py,sha256=V5HoHDYlSuoK2lFv946Jhd81LrA0om71NWugnRxFvSE,8296
624
- claude_mpm/services/diagnostics/checks/installation_check.py,sha256=Eii3QM1kxp-W28rF-BR_xUnzeExFGbIIS9CDuZ85kts,19620
625
- claude_mpm/services/diagnostics/checks/instructions_check.py,sha256=VbgBorl0RpFvxKQ_SC1gibTmGSiXaKSp-vVZt6hbH1g,16290
626
- claude_mpm/services/diagnostics/checks/mcp_check.py,sha256=O9wstiBa9_tA4L3RSn4mXav25IhYJmuFYAhKFQLpN_4,12631
627
- claude_mpm/services/diagnostics/checks/mcp_services_check.py,sha256=y6hpDMl3ZoT9WXIgxgbPaebgPqmgfiFruoed7224xos,43776
628
- claude_mpm/services/diagnostics/checks/monitor_check.py,sha256=hZk301gvM8XAnfcOdtzE-e9XMBW3hgmDwSVxVSmF9CY,10097
629
- claude_mpm/services/diagnostics/checks/startup_log_check.py,sha256=qQQI9Ezk7Sa5NpvJrtDY_0bWhoLPASZJn0hpNR8pEsI,12341
620
+ claude_mpm/services/diagnostics/checks/claude_code_check.py,sha256=gXc8ASRiSFZN4nBG2gP7wNp_DSnBNYtXxip80o0aMvk,10526
621
+ claude_mpm/services/diagnostics/checks/common_issues_check.py,sha256=9ZgnursqBaX-JX7La7qdOCF98UmIyq-nCg7--me4D_A,13465
622
+ claude_mpm/services/diagnostics/checks/configuration_check.py,sha256=nQv0vWNUs_iRl6m1IMNyWK4SoS-V4PprKe_4n2EC3qg,11285
623
+ claude_mpm/services/diagnostics/checks/filesystem_check.py,sha256=oG6BWV7NBfseQ0lK6ENahLW8fejz-vBwr3iuut7sEv4,8381
624
+ claude_mpm/services/diagnostics/checks/installation_check.py,sha256=aSkRSkJML3BjaI_AUEdELR3AokIz_D7fE4ibQnTkgb0,19698
625
+ claude_mpm/services/diagnostics/checks/instructions_check.py,sha256=rlJAtFORtOOSoCan1MxdgSMWVq43OuRNkf-iesgwm9Q,16387
626
+ claude_mpm/services/diagnostics/checks/mcp_check.py,sha256=HVkY_G9UCROZKhQFJXIJBvI9A1sDT1wLOj7l96UTVyQ,12728
627
+ claude_mpm/services/diagnostics/checks/mcp_services_check.py,sha256=j87Sq7FJXZbCjbY0KB6MJzS5hbSUef6i9YAqHPOIsNY,43981
628
+ claude_mpm/services/diagnostics/checks/monitor_check.py,sha256=DG57wv2orB1NH2_cbaxq0-kN0aknKPNSCy5Y7OSRq7Y,10200
629
+ claude_mpm/services/diagnostics/checks/startup_log_check.py,sha256=9qKaVSvpV-pY6Hqf5ywZv-jSFrrYQ7_tWePR5DawfV0,12380
630
630
  claude_mpm/services/event_bus/__init__.py,sha256=ETCo4a6puIeyVWAv55uCDjjhzNyUwbVAHEcAVkVapx8,688
631
631
  claude_mpm/services/event_bus/config.py,sha256=MJdOBK3XgLpW66N81tetThslnKsFIWYtbqRamyTDxlU,4943
632
632
  claude_mpm/services/event_bus/direct_relay.py,sha256=35kwO6S0gOeKGBq-dZ4aUH3NWno_evKfTyHJcMIzS7A,13623
@@ -864,9 +864,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
864
864
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
865
865
  claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
866
866
  claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
867
- claude_mpm-4.15.0.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
868
- claude_mpm-4.15.0.dist-info/METADATA,sha256=BS6wRdsnvxJgPoJVhijox8RvrT7WCyQY14tDVcL75EY,17967
869
- claude_mpm-4.15.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
870
- claude_mpm-4.15.0.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
871
- claude_mpm-4.15.0.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
872
- claude_mpm-4.15.0.dist-info/RECORD,,
867
+ claude_mpm-4.15.2.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
868
+ claude_mpm-4.15.2.dist-info/METADATA,sha256=C8lvyVuhjSuHkqFwlYpblJvFIIHastmA_CXdwTLx-PI,17967
869
+ claude_mpm-4.15.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
870
+ claude_mpm-4.15.2.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
871
+ claude_mpm-4.15.2.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
872
+ claude_mpm-4.15.2.dist-info/RECORD,,