claude-mpm 4.13.2__py3-none-any.whl → 4.18.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.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_ENGINEER.md +286 -0
- claude_mpm/agents/BASE_PM.md +48 -17
- claude_mpm/agents/OUTPUT_STYLE.md +329 -11
- claude_mpm/agents/PM_INSTRUCTIONS.md +227 -8
- claude_mpm/agents/agent_loader.py +17 -5
- claude_mpm/agents/frontmatter_validator.py +284 -253
- claude_mpm/agents/templates/agentic-coder-optimizer.json +9 -2
- claude_mpm/agents/templates/api_qa.json +7 -1
- claude_mpm/agents/templates/clerk-ops.json +8 -1
- claude_mpm/agents/templates/code_analyzer.json +4 -1
- claude_mpm/agents/templates/dart_engineer.json +11 -1
- claude_mpm/agents/templates/data_engineer.json +11 -1
- claude_mpm/agents/templates/documentation.json +6 -1
- claude_mpm/agents/templates/engineer.json +18 -1
- claude_mpm/agents/templates/gcp_ops_agent.json +8 -1
- claude_mpm/agents/templates/golang_engineer.json +11 -1
- claude_mpm/agents/templates/java_engineer.json +12 -2
- claude_mpm/agents/templates/local_ops_agent.json +1217 -6
- claude_mpm/agents/templates/nextjs_engineer.json +11 -1
- claude_mpm/agents/templates/ops.json +8 -1
- claude_mpm/agents/templates/php-engineer.json +11 -1
- claude_mpm/agents/templates/project_organizer.json +10 -3
- claude_mpm/agents/templates/prompt-engineer.json +5 -1
- claude_mpm/agents/templates/python_engineer.json +11 -1
- claude_mpm/agents/templates/qa.json +7 -1
- claude_mpm/agents/templates/react_engineer.json +11 -1
- claude_mpm/agents/templates/refactoring_engineer.json +8 -1
- claude_mpm/agents/templates/research.json +4 -1
- claude_mpm/agents/templates/ruby-engineer.json +11 -1
- claude_mpm/agents/templates/rust_engineer.json +11 -1
- claude_mpm/agents/templates/security.json +6 -1
- claude_mpm/agents/templates/svelte-engineer.json +225 -0
- claude_mpm/agents/templates/ticketing.json +6 -1
- claude_mpm/agents/templates/typescript_engineer.json +11 -1
- claude_mpm/agents/templates/vercel_ops_agent.json +8 -1
- claude_mpm/agents/templates/version_control.json +8 -1
- claude_mpm/agents/templates/web_qa.json +7 -1
- claude_mpm/agents/templates/web_ui.json +11 -1
- claude_mpm/cli/__init__.py +34 -706
- claude_mpm/cli/commands/agent_manager.py +25 -12
- claude_mpm/cli/commands/agent_state_manager.py +186 -0
- claude_mpm/cli/commands/agents.py +204 -148
- claude_mpm/cli/commands/aggregate.py +7 -3
- claude_mpm/cli/commands/analyze.py +9 -4
- claude_mpm/cli/commands/analyze_code.py +7 -2
- claude_mpm/cli/commands/auto_configure.py +7 -9
- claude_mpm/cli/commands/config.py +47 -13
- claude_mpm/cli/commands/configure.py +294 -1788
- claude_mpm/cli/commands/configure_agent_display.py +261 -0
- claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
- claude_mpm/cli/commands/configure_hook_manager.py +225 -0
- claude_mpm/cli/commands/configure_models.py +18 -0
- claude_mpm/cli/commands/configure_navigation.py +167 -0
- claude_mpm/cli/commands/configure_paths.py +104 -0
- claude_mpm/cli/commands/configure_persistence.py +254 -0
- claude_mpm/cli/commands/configure_startup_manager.py +646 -0
- claude_mpm/cli/commands/configure_template_editor.py +497 -0
- claude_mpm/cli/commands/configure_validators.py +73 -0
- claude_mpm/cli/commands/local_deploy.py +537 -0
- claude_mpm/cli/commands/memory.py +54 -20
- claude_mpm/cli/commands/mpm_init.py +39 -25
- claude_mpm/cli/commands/mpm_init_handler.py +8 -3
- claude_mpm/cli/executor.py +202 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +3 -0
- claude_mpm/cli/interactive/skills_wizard.py +491 -0
- claude_mpm/cli/parsers/__init__.py +7 -1
- claude_mpm/cli/parsers/base_parser.py +98 -3
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/shared/output_formatters.py +28 -19
- claude_mpm/cli/startup.py +481 -0
- claude_mpm/cli/utils.py +52 -1
- claude_mpm/commands/mpm-help.md +3 -0
- claude_mpm/commands/mpm-version.md +113 -0
- claude_mpm/commands/mpm.md +1 -0
- claude_mpm/config/agent_config.py +2 -2
- claude_mpm/config/model_config.py +428 -0
- claude_mpm/core/base_service.py +13 -12
- claude_mpm/core/enums.py +452 -0
- claude_mpm/core/factories.py +1 -1
- claude_mpm/core/instruction_reinforcement_hook.py +2 -1
- claude_mpm/core/interactive_session.py +9 -3
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/oneshot_session.py +8 -4
- claude_mpm/core/optimized_agent_loader.py +3 -3
- claude_mpm/core/output_style_manager.py +12 -192
- claude_mpm/core/service_registry.py +5 -1
- claude_mpm/core/types.py +2 -9
- claude_mpm/core/typing_utils.py +7 -6
- claude_mpm/dashboard/static/js/dashboard.js +0 -14
- claude_mpm/dashboard/templates/index.html +3 -41
- claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
- claude_mpm/hooks/instruction_reinforcement.py +7 -2
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/services/agents/auto_config_manager.py +10 -11
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
- claude_mpm/services/agents/deployment/agent_validator.py +17 -1
- claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
- claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
- claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +7 -6
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +5 -3
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +9 -6
- claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
- claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
- claude_mpm/services/agents/local_template_manager.py +1 -1
- claude_mpm/services/agents/memory/agent_memory_manager.py +5 -2
- claude_mpm/services/agents/registry/modification_tracker.py +5 -2
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/interfaces/__init__.py +74 -2
- claude_mpm/services/core/interfaces/health.py +172 -0
- claude_mpm/services/core/interfaces/model.py +281 -0
- claude_mpm/services/core/interfaces/process.py +372 -0
- claude_mpm/services/core/interfaces/restart.py +307 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/models/__init__.py +33 -0
- claude_mpm/services/core/models/agent_config.py +12 -28
- claude_mpm/services/core/models/health.py +162 -0
- claude_mpm/services/core/models/process.py +235 -0
- claude_mpm/services/core/models/restart.py +302 -0
- claude_mpm/services/core/models/stability.py +264 -0
- claude_mpm/services/core/path_resolver.py +23 -7
- claude_mpm/services/diagnostics/__init__.py +2 -2
- claude_mpm/services/diagnostics/checks/agent_check.py +25 -24
- claude_mpm/services/diagnostics/checks/claude_code_check.py +24 -23
- claude_mpm/services/diagnostics/checks/common_issues_check.py +25 -24
- claude_mpm/services/diagnostics/checks/configuration_check.py +24 -23
- claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
- claude_mpm/services/diagnostics/checks/installation_check.py +30 -29
- claude_mpm/services/diagnostics/checks/instructions_check.py +20 -19
- claude_mpm/services/diagnostics/checks/mcp_check.py +50 -36
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +36 -31
- claude_mpm/services/diagnostics/checks/monitor_check.py +23 -22
- claude_mpm/services/diagnostics/checks/startup_log_check.py +9 -8
- claude_mpm/services/diagnostics/diagnostic_runner.py +6 -5
- claude_mpm/services/diagnostics/doctor_reporter.py +28 -25
- claude_mpm/services/diagnostics/models.py +19 -24
- claude_mpm/services/infrastructure/monitoring/__init__.py +1 -1
- claude_mpm/services/infrastructure/monitoring/aggregator.py +12 -12
- claude_mpm/services/infrastructure/monitoring/base.py +5 -13
- claude_mpm/services/infrastructure/monitoring/network.py +7 -6
- claude_mpm/services/infrastructure/monitoring/process.py +13 -12
- claude_mpm/services/infrastructure/monitoring/resources.py +7 -6
- claude_mpm/services/infrastructure/monitoring/service.py +16 -15
- claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
- claude_mpm/services/local_ops/__init__.py +163 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +28 -0
- claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
- claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
- claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
- claude_mpm/services/local_ops/health_manager.py +430 -0
- claude_mpm/services/local_ops/log_monitor.py +396 -0
- claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
- claude_mpm/services/local_ops/process_manager.py +595 -0
- claude_mpm/services/local_ops/resource_monitor.py +331 -0
- claude_mpm/services/local_ops/restart_manager.py +401 -0
- claude_mpm/services/local_ops/restart_policy.py +387 -0
- claude_mpm/services/local_ops/state_manager.py +372 -0
- claude_mpm/services/local_ops/unified_manager.py +600 -0
- claude_mpm/services/mcp_config_manager.py +9 -4
- claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
- claude_mpm/services/mcp_gateway/core/base.py +18 -31
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +71 -24
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +30 -28
- claude_mpm/services/memory_hook_service.py +4 -1
- claude_mpm/services/model/__init__.py +147 -0
- claude_mpm/services/model/base_provider.py +365 -0
- claude_mpm/services/model/claude_provider.py +412 -0
- claude_mpm/services/model/model_router.py +453 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/daemon_manager.py +3 -2
- claude_mpm/services/monitor/handlers/dashboard.py +2 -1
- claude_mpm/services/monitor/handlers/hooks.py +2 -1
- claude_mpm/services/monitor/management/lifecycle.py +3 -2
- claude_mpm/services/monitor/server.py +2 -1
- claude_mpm/services/session_management_service.py +3 -2
- claude_mpm/services/session_manager.py +205 -1
- claude_mpm/services/shared/async_service_base.py +16 -27
- claude_mpm/services/shared/lifecycle_service_base.py +1 -14
- claude_mpm/services/socketio/handlers/__init__.py +5 -2
- claude_mpm/services/socketio/handlers/hook.py +13 -2
- claude_mpm/services/socketio/handlers/registry.py +4 -2
- claude_mpm/services/socketio/server/main.py +10 -8
- claude_mpm/services/subprocess_launcher_service.py +14 -5
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +8 -7
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +6 -5
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +8 -7
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +7 -6
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +5 -4
- claude_mpm/services/unified/config_strategies/validation_strategy.py +13 -9
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +10 -3
- claude_mpm/services/unified/deployment_strategies/local.py +6 -5
- claude_mpm/services/unified/deployment_strategies/utils.py +6 -5
- claude_mpm/services/unified/deployment_strategies/vercel.py +7 -6
- claude_mpm/services/unified/interfaces.py +3 -1
- claude_mpm/services/unified/unified_analyzer.py +14 -10
- claude_mpm/services/unified/unified_config.py +2 -1
- claude_mpm/services/unified/unified_deployment.py +9 -4
- claude_mpm/services/version_service.py +104 -1
- claude_mpm/skills/__init__.py +21 -0
- claude_mpm/skills/bundled/__init__.py +6 -0
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +567 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/security-scanning.md +327 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +286 -0
- claude_mpm/skills/skill_manager.py +310 -0
- claude_mpm/tools/code_tree_analyzer.py +177 -141
- claude_mpm/tools/code_tree_events.py +4 -2
- claude_mpm/utils/agent_dependency_loader.py +2 -2
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/METADATA +117 -8
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/RECORD +238 -174
- claude_mpm/dashboard/static/css/code-tree.css +0 -1639
- claude_mpm/dashboard/static/js/components/code-tree/tree-breadcrumb.js +0 -353
- claude_mpm/dashboard/static/js/components/code-tree/tree-constants.js +0 -235
- claude_mpm/dashboard/static/js/components/code-tree/tree-search.js +0 -409
- claude_mpm/dashboard/static/js/components/code-tree/tree-utils.js +0 -435
- claude_mpm/dashboard/static/js/components/code-tree.js +0 -5869
- claude_mpm/dashboard/static/js/components/code-viewer.js +0 -1386
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
- claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1041
- claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
- claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
- claude_mpm/services/project/analyzer_refactored.py +0 -450
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/WHEEL +0 -0
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/top_level.txt +0 -0
|
@@ -11,7 +11,8 @@ import sys
|
|
|
11
11
|
from pathlib import Path
|
|
12
12
|
from typing import Optional
|
|
13
13
|
|
|
14
|
-
from
|
|
14
|
+
from ....core.enums import OperationResult, ValidationSeverity
|
|
15
|
+
from ..models import DiagnosticResult
|
|
15
16
|
from .base_check import BaseDiagnosticCheck
|
|
16
17
|
|
|
17
18
|
|
|
@@ -54,14 +55,14 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
54
55
|
details["dependencies"] = deps_result.details.get("status")
|
|
55
56
|
|
|
56
57
|
# Determine overall status
|
|
57
|
-
if any(r.status ==
|
|
58
|
-
status =
|
|
58
|
+
if any(r.status == ValidationSeverity.ERROR for r in sub_results):
|
|
59
|
+
status = ValidationSeverity.ERROR
|
|
59
60
|
message = "Installation has critical issues"
|
|
60
|
-
elif any(r.status ==
|
|
61
|
-
status =
|
|
61
|
+
elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
|
|
62
|
+
status = ValidationSeverity.WARNING
|
|
62
63
|
message = "Installation has minor issues"
|
|
63
64
|
else:
|
|
64
|
-
status =
|
|
65
|
+
status = OperationResult.SUCCESS
|
|
65
66
|
message = "Installation is healthy"
|
|
66
67
|
|
|
67
68
|
return DiagnosticResult(
|
|
@@ -75,7 +76,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
75
76
|
except Exception as e:
|
|
76
77
|
return DiagnosticResult(
|
|
77
78
|
category=self.category,
|
|
78
|
-
status=
|
|
79
|
+
status=ValidationSeverity.ERROR,
|
|
79
80
|
message=f"Installation check failed: {e!s}",
|
|
80
81
|
details={"error": str(e)},
|
|
81
82
|
)
|
|
@@ -91,7 +92,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
91
92
|
if version_info < min_version:
|
|
92
93
|
return DiagnosticResult(
|
|
93
94
|
category="Python Version",
|
|
94
|
-
status=
|
|
95
|
+
status=ValidationSeverity.ERROR,
|
|
95
96
|
message=f"Python {version_info.major}.{version_info.minor} is below minimum required {min_version[0]}.{min_version[1]}",
|
|
96
97
|
details={"version": version},
|
|
97
98
|
fix_description="Upgrade Python to 3.9 or higher",
|
|
@@ -99,13 +100,13 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
99
100
|
if version_info < recommended_version:
|
|
100
101
|
return DiagnosticResult(
|
|
101
102
|
category="Python Version",
|
|
102
|
-
status=
|
|
103
|
+
status=ValidationSeverity.WARNING,
|
|
103
104
|
message=f"Python {version_info.major}.{version_info.minor} works but {recommended_version[0]}.{recommended_version[1]}+ is recommended",
|
|
104
105
|
details={"version": version},
|
|
105
106
|
)
|
|
106
107
|
return DiagnosticResult(
|
|
107
108
|
category="Python Version",
|
|
108
|
-
status=
|
|
109
|
+
status=OperationResult.SUCCESS,
|
|
109
110
|
message=f"Python {version_info.major}.{version_info.minor}.{version_info.micro}",
|
|
110
111
|
details={"version": version},
|
|
111
112
|
)
|
|
@@ -122,7 +123,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
122
123
|
|
|
123
124
|
return DiagnosticResult(
|
|
124
125
|
category="Claude MPM Version",
|
|
125
|
-
status=
|
|
126
|
+
status=OperationResult.SUCCESS,
|
|
126
127
|
message=f"Version: {version}",
|
|
127
128
|
details={
|
|
128
129
|
"version": semantic_version,
|
|
@@ -133,7 +134,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
133
134
|
except Exception as e:
|
|
134
135
|
return DiagnosticResult(
|
|
135
136
|
category="Claude MPM Version",
|
|
136
|
-
status=
|
|
137
|
+
status=ValidationSeverity.WARNING,
|
|
137
138
|
message="Could not determine version",
|
|
138
139
|
details={"error": str(e)},
|
|
139
140
|
)
|
|
@@ -243,7 +244,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
243
244
|
if not methods_found:
|
|
244
245
|
return DiagnosticResult(
|
|
245
246
|
category="Installation Method",
|
|
246
|
-
status=
|
|
247
|
+
status=ValidationSeverity.WARNING,
|
|
247
248
|
message="Installation method unknown",
|
|
248
249
|
details=details,
|
|
249
250
|
)
|
|
@@ -259,7 +260,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
259
260
|
container_msg += " with virtual environment"
|
|
260
261
|
return DiagnosticResult(
|
|
261
262
|
category="Installation Method",
|
|
262
|
-
status=
|
|
263
|
+
status=OperationResult.SUCCESS,
|
|
263
264
|
message=container_msg,
|
|
264
265
|
details=details,
|
|
265
266
|
)
|
|
@@ -268,7 +269,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
268
269
|
if "pipx" in methods_found:
|
|
269
270
|
return DiagnosticResult(
|
|
270
271
|
category="Installation Method",
|
|
271
|
-
status=
|
|
272
|
+
status=OperationResult.SUCCESS,
|
|
272
273
|
message="Running from pipx environment (recommended)",
|
|
273
274
|
details=details,
|
|
274
275
|
)
|
|
@@ -278,7 +279,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
278
279
|
venv_name = Path(sys.prefix).name
|
|
279
280
|
return DiagnosticResult(
|
|
280
281
|
category="Installation Method",
|
|
281
|
-
status=
|
|
282
|
+
status=OperationResult.SUCCESS,
|
|
282
283
|
message=f"Development mode in virtual environment '{venv_name}'",
|
|
283
284
|
details=details,
|
|
284
285
|
)
|
|
@@ -288,7 +289,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
288
289
|
venv_name = Path(sys.prefix).name
|
|
289
290
|
return DiagnosticResult(
|
|
290
291
|
category="Installation Method",
|
|
291
|
-
status=
|
|
292
|
+
status=OperationResult.SUCCESS,
|
|
292
293
|
message=f"Virtual environment '{venv_name}'",
|
|
293
294
|
details=details,
|
|
294
295
|
)
|
|
@@ -297,7 +298,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
297
298
|
if "development" in methods_found and "homebrew" in methods_found:
|
|
298
299
|
return DiagnosticResult(
|
|
299
300
|
category="Installation Method",
|
|
300
|
-
status=
|
|
301
|
+
status=OperationResult.SUCCESS,
|
|
301
302
|
message="Development mode with Homebrew Python",
|
|
302
303
|
details=details,
|
|
303
304
|
)
|
|
@@ -305,7 +306,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
305
306
|
if "development" in methods_found:
|
|
306
307
|
return DiagnosticResult(
|
|
307
308
|
category="Installation Method",
|
|
308
|
-
status=
|
|
309
|
+
status=OperationResult.SUCCESS,
|
|
309
310
|
message="Development mode",
|
|
310
311
|
details=details,
|
|
311
312
|
)
|
|
@@ -315,9 +316,9 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
315
316
|
msg = "Homebrew Python"
|
|
316
317
|
if details.get("pipx_installed"):
|
|
317
318
|
msg += " (pipx is installed but not active - consider using 'pipx run claude-mpm')"
|
|
318
|
-
status =
|
|
319
|
+
status = ValidationSeverity.WARNING
|
|
319
320
|
else:
|
|
320
|
-
status =
|
|
321
|
+
status = OperationResult.SUCCESS
|
|
321
322
|
return DiagnosticResult(
|
|
322
323
|
category="Installation Method",
|
|
323
324
|
status=status,
|
|
@@ -329,7 +330,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
329
330
|
if "pip" in methods_found:
|
|
330
331
|
return DiagnosticResult(
|
|
331
332
|
category="Installation Method",
|
|
332
|
-
status=
|
|
333
|
+
status=ValidationSeverity.WARNING,
|
|
333
334
|
message="System pip installation (consider using pipx or venv instead)",
|
|
334
335
|
details=details,
|
|
335
336
|
fix_description="Consider reinstalling with pipx for isolated environment",
|
|
@@ -339,7 +340,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
339
340
|
if "system" in methods_found:
|
|
340
341
|
return DiagnosticResult(
|
|
341
342
|
category="Installation Method",
|
|
342
|
-
status=
|
|
343
|
+
status=ValidationSeverity.WARNING,
|
|
343
344
|
message="System Python (consider using pipx or venv)",
|
|
344
345
|
details=details,
|
|
345
346
|
)
|
|
@@ -347,7 +348,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
347
348
|
# Fallback for any other combination
|
|
348
349
|
return DiagnosticResult(
|
|
349
350
|
category="Installation Method",
|
|
350
|
-
status=
|
|
351
|
+
status=OperationResult.SUCCESS,
|
|
351
352
|
message=f"Installed via {', '.join(methods_found)}",
|
|
352
353
|
details=details,
|
|
353
354
|
)
|
|
@@ -399,7 +400,7 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
399
400
|
|
|
400
401
|
return DiagnosticResult(
|
|
401
402
|
category="Dependencies",
|
|
402
|
-
status=
|
|
403
|
+
status=ValidationSeverity.ERROR,
|
|
403
404
|
message=f"Missing critical dependencies: {', '.join(missing)}",
|
|
404
405
|
details={
|
|
405
406
|
"missing": missing,
|
|
@@ -414,11 +415,11 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
414
415
|
if warnings:
|
|
415
416
|
return DiagnosticResult(
|
|
416
417
|
category="Dependencies",
|
|
417
|
-
status=
|
|
418
|
+
status=ValidationSeverity.WARNING,
|
|
418
419
|
message=f"Missing optional dependencies: {', '.join(warnings)}",
|
|
419
420
|
details={
|
|
420
421
|
"optional_missing": warnings,
|
|
421
|
-
"status":
|
|
422
|
+
"status": OperationResult.PARTIAL,
|
|
422
423
|
"installed": installed,
|
|
423
424
|
"python_executable": sys.executable,
|
|
424
425
|
"in_venv": in_venv,
|
|
@@ -426,10 +427,10 @@ class InstallationCheck(BaseDiagnosticCheck):
|
|
|
426
427
|
)
|
|
427
428
|
return DiagnosticResult(
|
|
428
429
|
category="Dependencies",
|
|
429
|
-
status=
|
|
430
|
+
status=OperationResult.SUCCESS,
|
|
430
431
|
message="All dependencies installed",
|
|
431
432
|
details={
|
|
432
|
-
"status":
|
|
433
|
+
"status": OperationResult.COMPLETED,
|
|
433
434
|
"installed": installed,
|
|
434
435
|
"python_executable": sys.executable,
|
|
435
436
|
"in_venv": in_venv,
|
|
@@ -11,7 +11,8 @@ from collections import defaultdict
|
|
|
11
11
|
from pathlib import Path
|
|
12
12
|
from typing import Dict
|
|
13
13
|
|
|
14
|
-
from
|
|
14
|
+
from ....core.enums import OperationResult, ValidationSeverity
|
|
15
|
+
from ..models import DiagnosticResult
|
|
15
16
|
from .base_check import BaseDiagnosticCheck
|
|
16
17
|
|
|
17
18
|
|
|
@@ -77,14 +78,14 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
77
78
|
sub_results.append(separation_result)
|
|
78
79
|
|
|
79
80
|
# Determine overall status
|
|
80
|
-
if any(r.status ==
|
|
81
|
-
status =
|
|
81
|
+
if any(r.status == ValidationSeverity.ERROR for r in sub_results):
|
|
82
|
+
status = ValidationSeverity.ERROR
|
|
82
83
|
message = "Found critical issues with instruction files"
|
|
83
|
-
elif any(r.status ==
|
|
84
|
-
status =
|
|
84
|
+
elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
|
|
85
|
+
status = ValidationSeverity.WARNING
|
|
85
86
|
message = "Found minor issues with instruction files"
|
|
86
87
|
else:
|
|
87
|
-
status =
|
|
88
|
+
status = OperationResult.SUCCESS
|
|
88
89
|
message = "Instruction files are properly configured"
|
|
89
90
|
|
|
90
91
|
return DiagnosticResult(
|
|
@@ -98,7 +99,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
98
99
|
except Exception as e:
|
|
99
100
|
return DiagnosticResult(
|
|
100
101
|
category=self.category,
|
|
101
|
-
status=
|
|
102
|
+
status=ValidationSeverity.ERROR,
|
|
102
103
|
message=f"Instructions check failed: {e!s}",
|
|
103
104
|
details={"error": str(e)},
|
|
104
105
|
)
|
|
@@ -146,7 +147,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
146
147
|
if not claude_files:
|
|
147
148
|
return DiagnosticResult(
|
|
148
149
|
category="CLAUDE.md Placement",
|
|
149
|
-
status=
|
|
150
|
+
status=OperationResult.SUCCESS,
|
|
150
151
|
message="No CLAUDE.md files found",
|
|
151
152
|
details={},
|
|
152
153
|
)
|
|
@@ -170,7 +171,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
170
171
|
if issues:
|
|
171
172
|
return DiagnosticResult(
|
|
172
173
|
category="CLAUDE.md Placement",
|
|
173
|
-
status=
|
|
174
|
+
status=ValidationSeverity.WARNING,
|
|
174
175
|
message=f"Found {len(issues)} misplaced CLAUDE.md file(s)",
|
|
175
176
|
details={"issues": issues},
|
|
176
177
|
fix_description=(
|
|
@@ -181,7 +182,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
181
182
|
|
|
182
183
|
return DiagnosticResult(
|
|
183
184
|
category="CLAUDE.md Placement",
|
|
184
|
-
status=
|
|
185
|
+
status=OperationResult.SUCCESS,
|
|
185
186
|
message="CLAUDE.md properly placed in project root",
|
|
186
187
|
details={"count": len(claude_files)},
|
|
187
188
|
)
|
|
@@ -191,7 +192,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
191
192
|
if len(files) < 2:
|
|
192
193
|
return DiagnosticResult(
|
|
193
194
|
category="Duplicate Content",
|
|
194
|
-
status=
|
|
195
|
+
status=OperationResult.SUCCESS,
|
|
195
196
|
message="No duplicate content detected",
|
|
196
197
|
details={},
|
|
197
198
|
)
|
|
@@ -226,7 +227,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
226
227
|
if duplicates:
|
|
227
228
|
return DiagnosticResult(
|
|
228
229
|
category="Duplicate Content",
|
|
229
|
-
status=
|
|
230
|
+
status=ValidationSeverity.WARNING,
|
|
230
231
|
message=f"Found {len(duplicates)} duplicate content block(s)",
|
|
231
232
|
details={"duplicates": duplicates[:5]}, # Limit to first 5
|
|
232
233
|
fix_description=(
|
|
@@ -238,7 +239,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
238
239
|
|
|
239
240
|
return DiagnosticResult(
|
|
240
241
|
category="Duplicate Content",
|
|
241
|
-
status=
|
|
242
|
+
status=OperationResult.SUCCESS,
|
|
242
243
|
message="No significant duplicate content found",
|
|
243
244
|
details={},
|
|
244
245
|
)
|
|
@@ -280,7 +281,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
280
281
|
if conflicts:
|
|
281
282
|
return DiagnosticResult(
|
|
282
283
|
category="Conflicting Directives",
|
|
283
|
-
status=
|
|
284
|
+
status=ValidationSeverity.ERROR,
|
|
284
285
|
message=f"Found {len(conflicts)} potential conflict(s)",
|
|
285
286
|
details={"conflicts": conflicts},
|
|
286
287
|
fix_description=(
|
|
@@ -292,7 +293,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
292
293
|
|
|
293
294
|
return DiagnosticResult(
|
|
294
295
|
category="Conflicting Directives",
|
|
295
|
-
status=
|
|
296
|
+
status=OperationResult.SUCCESS,
|
|
296
297
|
message="No conflicting directives detected",
|
|
297
298
|
details={},
|
|
298
299
|
)
|
|
@@ -330,7 +331,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
330
331
|
if duplicates:
|
|
331
332
|
return DiagnosticResult(
|
|
332
333
|
category="Agent Definitions",
|
|
333
|
-
status=
|
|
334
|
+
status=ValidationSeverity.WARNING,
|
|
334
335
|
message=f"Found {len(duplicates)} duplicate agent definition(s)",
|
|
335
336
|
details={"duplicates": duplicates},
|
|
336
337
|
fix_description=(
|
|
@@ -341,7 +342,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
341
342
|
|
|
342
343
|
return DiagnosticResult(
|
|
343
344
|
category="Agent Definitions",
|
|
344
|
-
status=
|
|
345
|
+
status=OperationResult.SUCCESS,
|
|
345
346
|
message="Agent definitions are unique",
|
|
346
347
|
details={"total_agents": len(agent_definitions)},
|
|
347
348
|
)
|
|
@@ -396,7 +397,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
396
397
|
if issues:
|
|
397
398
|
return DiagnosticResult(
|
|
398
399
|
category="Separation of Concerns",
|
|
399
|
-
status=
|
|
400
|
+
status=ValidationSeverity.WARNING,
|
|
400
401
|
message=f"Found {len(issues)} separation of concerns issue(s)",
|
|
401
402
|
details={"issues": issues},
|
|
402
403
|
fix_description=(
|
|
@@ -409,7 +410,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
|
|
|
409
410
|
|
|
410
411
|
return DiagnosticResult(
|
|
411
412
|
category="Separation of Concerns",
|
|
412
|
-
status=
|
|
413
|
+
status=OperationResult.SUCCESS,
|
|
413
414
|
message="Instruction files properly separated",
|
|
414
415
|
details={},
|
|
415
416
|
)
|
|
@@ -9,7 +9,9 @@ import json
|
|
|
9
9
|
import subprocess
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
|
|
12
|
-
from
|
|
12
|
+
from claude_mpm.core.enums import OperationResult, ServiceState, ValidationSeverity
|
|
13
|
+
|
|
14
|
+
from ..models import DiagnosticResult
|
|
13
15
|
from .base_check import BaseDiagnosticCheck
|
|
14
16
|
|
|
15
17
|
|
|
@@ -34,13 +36,13 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
34
36
|
# Check if MCP is installed
|
|
35
37
|
install_result = self._check_installation()
|
|
36
38
|
sub_results.append(install_result)
|
|
37
|
-
details["installed"] = install_result.status ==
|
|
39
|
+
details["installed"] = install_result.status == OperationResult.SUCCESS
|
|
38
40
|
|
|
39
|
-
if install_result.status ==
|
|
41
|
+
if install_result.status == OperationResult.SUCCESS:
|
|
40
42
|
# Check MCP configuration
|
|
41
43
|
config_result = self._check_configuration()
|
|
42
44
|
sub_results.append(config_result)
|
|
43
|
-
details["configured"] = config_result.status ==
|
|
45
|
+
details["configured"] = config_result.status == OperationResult.SUCCESS
|
|
44
46
|
|
|
45
47
|
# Check MCP server status
|
|
46
48
|
status_result = self._check_server_status()
|
|
@@ -52,17 +54,17 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
52
54
|
sub_results.append(startup_result)
|
|
53
55
|
|
|
54
56
|
# Determine overall status
|
|
55
|
-
if any(r.status ==
|
|
56
|
-
status =
|
|
57
|
+
if any(r.status == ValidationSeverity.ERROR for r in sub_results):
|
|
58
|
+
status = ValidationSeverity.ERROR
|
|
57
59
|
message = "MCP server has critical issues"
|
|
58
60
|
elif not details.get("installed", False):
|
|
59
|
-
status =
|
|
61
|
+
status = ValidationSeverity.WARNING
|
|
60
62
|
message = "MCP server not installed"
|
|
61
|
-
elif any(r.status ==
|
|
62
|
-
status =
|
|
63
|
+
elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
|
|
64
|
+
status = ValidationSeverity.WARNING
|
|
63
65
|
message = "MCP server needs configuration"
|
|
64
66
|
else:
|
|
65
|
-
status =
|
|
67
|
+
status = OperationResult.SUCCESS
|
|
66
68
|
message = "MCP server properly configured"
|
|
67
69
|
|
|
68
70
|
return DiagnosticResult(
|
|
@@ -76,7 +78,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
76
78
|
except Exception as e:
|
|
77
79
|
return DiagnosticResult(
|
|
78
80
|
category=self.category,
|
|
79
|
-
status=
|
|
81
|
+
status=ValidationSeverity.ERROR,
|
|
80
82
|
message=f"MCP check failed: {e!s}",
|
|
81
83
|
details={"error": str(e)},
|
|
82
84
|
)
|
|
@@ -94,7 +96,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
94
96
|
if mcp_path.exists():
|
|
95
97
|
return DiagnosticResult(
|
|
96
98
|
category="MCP Installation",
|
|
97
|
-
status=
|
|
99
|
+
status=OperationResult.SUCCESS,
|
|
98
100
|
message="MCP server installed",
|
|
99
101
|
details={"path": str(mcp_path), "installed": True},
|
|
100
102
|
)
|
|
@@ -112,7 +114,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
112
114
|
path = result.stdout.strip()
|
|
113
115
|
return DiagnosticResult(
|
|
114
116
|
category="MCP Installation",
|
|
115
|
-
status=
|
|
117
|
+
status=OperationResult.SUCCESS,
|
|
116
118
|
message="MCP server installed",
|
|
117
119
|
details={"path": path, "installed": True},
|
|
118
120
|
)
|
|
@@ -121,7 +123,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
121
123
|
|
|
122
124
|
return DiagnosticResult(
|
|
123
125
|
category="MCP Installation",
|
|
124
|
-
status=
|
|
126
|
+
status=ValidationSeverity.WARNING,
|
|
125
127
|
message="MCP server not installed",
|
|
126
128
|
details={"installed": False},
|
|
127
129
|
fix_command="claude-mpm mcp install",
|
|
@@ -146,7 +148,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
146
148
|
if not config_path:
|
|
147
149
|
return DiagnosticResult(
|
|
148
150
|
category="MCP Configuration",
|
|
149
|
-
status=
|
|
151
|
+
status=ValidationSeverity.WARNING,
|
|
150
152
|
message="Claude Code config not found",
|
|
151
153
|
details={"configured": False},
|
|
152
154
|
fix_command="claude-mpm mcp config",
|
|
@@ -163,7 +165,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
163
165
|
if not gateway:
|
|
164
166
|
return DiagnosticResult(
|
|
165
167
|
category="MCP Configuration",
|
|
166
|
-
status=
|
|
168
|
+
status=ValidationSeverity.WARNING,
|
|
167
169
|
message="MCP gateway not configured",
|
|
168
170
|
details={"configured": False, "config_path": str(config_path)},
|
|
169
171
|
fix_command="claude-mpm mcp config",
|
|
@@ -175,7 +177,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
175
177
|
if not command:
|
|
176
178
|
return DiagnosticResult(
|
|
177
179
|
category="MCP Configuration",
|
|
178
|
-
status=
|
|
180
|
+
status=ValidationSeverity.ERROR,
|
|
179
181
|
message="MCP gateway misconfigured (no command)",
|
|
180
182
|
details={
|
|
181
183
|
"configured": True,
|
|
@@ -188,7 +190,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
188
190
|
|
|
189
191
|
return DiagnosticResult(
|
|
190
192
|
category="MCP Configuration",
|
|
191
|
-
status=
|
|
193
|
+
status=OperationResult.SUCCESS,
|
|
192
194
|
message="MCP gateway configured",
|
|
193
195
|
details={
|
|
194
196
|
"configured": True,
|
|
@@ -200,7 +202,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
200
202
|
except json.JSONDecodeError as e:
|
|
201
203
|
return DiagnosticResult(
|
|
202
204
|
category="MCP Configuration",
|
|
203
|
-
status=
|
|
205
|
+
status=ValidationSeverity.ERROR,
|
|
204
206
|
message="Invalid JSON in config file",
|
|
205
207
|
details={"error": str(e), "config_path": str(config_path)},
|
|
206
208
|
fix_description="Fix JSON syntax in Claude Code config",
|
|
@@ -208,7 +210,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
208
210
|
except Exception as e:
|
|
209
211
|
return DiagnosticResult(
|
|
210
212
|
category="MCP Configuration",
|
|
211
|
-
status=
|
|
213
|
+
status=ValidationSeverity.WARNING,
|
|
212
214
|
message=f"Could not check configuration: {e!s}",
|
|
213
215
|
details={"error": str(e)},
|
|
214
216
|
)
|
|
@@ -226,41 +228,53 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
226
228
|
)
|
|
227
229
|
|
|
228
230
|
if result.returncode == 0:
|
|
229
|
-
if
|
|
231
|
+
if ServiceState.RUNNING.value in result.stdout.lower():
|
|
230
232
|
return DiagnosticResult(
|
|
231
233
|
category="MCP Server Status",
|
|
232
|
-
status=
|
|
234
|
+
status=OperationResult.SUCCESS,
|
|
233
235
|
message="MCP server is running",
|
|
234
|
-
details={"running": True},
|
|
236
|
+
details={"running": True, "state": ServiceState.RUNNING},
|
|
235
237
|
)
|
|
236
238
|
return DiagnosticResult(
|
|
237
239
|
category="MCP Server Status",
|
|
238
|
-
status=
|
|
240
|
+
status=ValidationSeverity.WARNING,
|
|
239
241
|
message="MCP server not running",
|
|
240
|
-
details={"running": False},
|
|
242
|
+
details={"running": False, "state": ServiceState.STOPPED},
|
|
241
243
|
fix_command="claude-mpm mcp start",
|
|
242
244
|
fix_description="Start the MCP server",
|
|
243
245
|
)
|
|
244
246
|
return DiagnosticResult(
|
|
245
247
|
category="MCP Server Status",
|
|
246
|
-
status=
|
|
248
|
+
status=ValidationSeverity.WARNING,
|
|
247
249
|
message="Could not determine server status",
|
|
248
|
-
details={
|
|
250
|
+
details={
|
|
251
|
+
"running": "unknown",
|
|
252
|
+
"state": ServiceState.UNKNOWN,
|
|
253
|
+
"error": result.stderr,
|
|
254
|
+
},
|
|
249
255
|
)
|
|
250
256
|
|
|
251
257
|
except subprocess.TimeoutExpired:
|
|
252
258
|
return DiagnosticResult(
|
|
253
259
|
category="MCP Server Status",
|
|
254
|
-
status=
|
|
260
|
+
status=ValidationSeverity.WARNING,
|
|
255
261
|
message="Server status check timed out",
|
|
256
|
-
details={
|
|
262
|
+
details={
|
|
263
|
+
"running": "unknown",
|
|
264
|
+
"state": ServiceState.UNKNOWN,
|
|
265
|
+
"error": "timeout",
|
|
266
|
+
},
|
|
257
267
|
)
|
|
258
268
|
except Exception as e:
|
|
259
269
|
return DiagnosticResult(
|
|
260
270
|
category="MCP Server Status",
|
|
261
|
-
status=
|
|
271
|
+
status=ValidationSeverity.WARNING,
|
|
262
272
|
message=f"Could not check server status: {e!s}",
|
|
263
|
-
details={
|
|
273
|
+
details={
|
|
274
|
+
"running": "unknown",
|
|
275
|
+
"state": ServiceState.UNKNOWN,
|
|
276
|
+
"error": str(e),
|
|
277
|
+
},
|
|
264
278
|
)
|
|
265
279
|
|
|
266
280
|
def _check_startup_verification(self) -> DiagnosticResult:
|
|
@@ -276,7 +290,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
276
290
|
if not issues:
|
|
277
291
|
return DiagnosticResult(
|
|
278
292
|
category="MCP Startup Verification",
|
|
279
|
-
status=
|
|
293
|
+
status=OperationResult.SUCCESS,
|
|
280
294
|
message="Startup verification passed",
|
|
281
295
|
details={"issues": []},
|
|
282
296
|
)
|
|
@@ -290,20 +304,20 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
290
304
|
if errors:
|
|
291
305
|
return DiagnosticResult(
|
|
292
306
|
category="MCP Startup Verification",
|
|
293
|
-
status=
|
|
307
|
+
status=ValidationSeverity.ERROR,
|
|
294
308
|
message=f"{len(errors)} critical issue(s) found",
|
|
295
309
|
details={"errors": errors, "warnings": warnings},
|
|
296
310
|
)
|
|
297
311
|
if warnings:
|
|
298
312
|
return DiagnosticResult(
|
|
299
313
|
category="MCP Startup Verification",
|
|
300
|
-
status=
|
|
314
|
+
status=ValidationSeverity.WARNING,
|
|
301
315
|
message=f"{len(warnings)} warning(s) found",
|
|
302
316
|
details={"warnings": warnings},
|
|
303
317
|
)
|
|
304
318
|
return DiagnosticResult(
|
|
305
319
|
category="MCP Startup Verification",
|
|
306
|
-
status=
|
|
320
|
+
status=OperationResult.SUCCESS,
|
|
307
321
|
message="Startup verification passed",
|
|
308
322
|
details={"issues": []},
|
|
309
323
|
)
|
|
@@ -311,7 +325,7 @@ class MCPCheck(BaseDiagnosticCheck):
|
|
|
311
325
|
except Exception as e:
|
|
312
326
|
return DiagnosticResult(
|
|
313
327
|
category="MCP Startup Verification",
|
|
314
|
-
status=
|
|
328
|
+
status=ValidationSeverity.WARNING,
|
|
315
329
|
message=f"Could not verify startup: {e!s}",
|
|
316
330
|
details={"error": str(e)},
|
|
317
331
|
)
|