claude-mpm 4.7.4__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_AGENT_TEMPLATE.md +118 -0
- claude_mpm/agents/BASE_ENGINEER.md +286 -0
- claude_mpm/agents/BASE_PM.md +106 -1
- claude_mpm/agents/OUTPUT_STYLE.md +329 -11
- claude_mpm/agents/PM_INSTRUCTIONS.md +397 -459
- claude_mpm/agents/agent_loader.py +17 -5
- claude_mpm/agents/frontmatter_validator.py +284 -253
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/agent-manager.json +4 -1
- claude_mpm/agents/templates/agentic-coder-optimizer.json +13 -3
- claude_mpm/agents/templates/api_qa.json +11 -2
- claude_mpm/agents/templates/circuit_breakers.md +638 -0
- claude_mpm/agents/templates/clerk-ops.json +12 -2
- claude_mpm/agents/templates/code_analyzer.json +8 -2
- claude_mpm/agents/templates/content-agent.json +358 -0
- claude_mpm/agents/templates/dart_engineer.json +15 -2
- claude_mpm/agents/templates/data_engineer.json +15 -2
- claude_mpm/agents/templates/documentation.json +10 -2
- claude_mpm/agents/templates/engineer.json +21 -1
- claude_mpm/agents/templates/gcp_ops_agent.json +12 -2
- claude_mpm/agents/templates/git_file_tracking.md +584 -0
- claude_mpm/agents/templates/golang_engineer.json +270 -0
- claude_mpm/agents/templates/imagemagick.json +4 -1
- claude_mpm/agents/templates/java_engineer.json +346 -0
- claude_mpm/agents/templates/local_ops_agent.json +1227 -6
- claude_mpm/agents/templates/memory_manager.json +4 -1
- claude_mpm/agents/templates/nextjs_engineer.json +141 -133
- claude_mpm/agents/templates/ops.json +12 -2
- claude_mpm/agents/templates/php-engineer.json +270 -174
- claude_mpm/agents/templates/pm_examples.md +474 -0
- claude_mpm/agents/templates/pm_red_flags.md +240 -0
- claude_mpm/agents/templates/product_owner.json +338 -0
- claude_mpm/agents/templates/project_organizer.json +14 -4
- claude_mpm/agents/templates/prompt-engineer.json +13 -2
- claude_mpm/agents/templates/python_engineer.json +174 -81
- claude_mpm/agents/templates/qa.json +11 -2
- claude_mpm/agents/templates/react_engineer.json +16 -3
- claude_mpm/agents/templates/refactoring_engineer.json +12 -2
- claude_mpm/agents/templates/research.json +34 -21
- claude_mpm/agents/templates/response_format.md +583 -0
- claude_mpm/agents/templates/ruby-engineer.json +129 -192
- claude_mpm/agents/templates/rust_engineer.json +270 -0
- claude_mpm/agents/templates/security.json +10 -2
- claude_mpm/agents/templates/svelte-engineer.json +225 -0
- claude_mpm/agents/templates/ticketing.json +10 -2
- claude_mpm/agents/templates/typescript_engineer.json +116 -125
- claude_mpm/agents/templates/validation_templates.md +312 -0
- claude_mpm/agents/templates/vercel_ops_agent.json +12 -2
- claude_mpm/agents/templates/version_control.json +12 -2
- claude_mpm/agents/templates/web_qa.json +11 -2
- claude_mpm/agents/templates/web_ui.json +15 -2
- claude_mpm/cli/__init__.py +34 -614
- 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 +235 -148
- claude_mpm/cli/commands/agents_detect.py +380 -0
- claude_mpm/cli/commands/agents_recommend.py +309 -0
- 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 +570 -0
- claude_mpm/cli/commands/config.py +47 -13
- claude_mpm/cli/commands/configure.py +419 -1571
- 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 +585 -196
- claude_mpm/cli/commands/mpm_init_handler.py +37 -3
- claude_mpm/cli/commands/search.py +170 -4
- claude_mpm/cli/commands/upgrade.py +152 -0
- 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/agents_parser.py +9 -0
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +110 -3
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/parsers/mpm_init_parser.py +65 -5
- 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-agents-detect.md +168 -0
- claude_mpm/commands/mpm-agents-recommend.md +214 -0
- claude_mpm/commands/mpm-agents.md +75 -1
- claude_mpm/commands/mpm-auto-configure.md +217 -0
- claude_mpm/commands/mpm-help.md +163 -0
- claude_mpm/commands/mpm-init.md +148 -3
- 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/constants.py +1 -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/log_manager.py +2 -0
- 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/__init__.py +20 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +4 -2
- claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +23 -2
- claude_mpm/hooks/failure_learning/__init__.py +60 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +235 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +217 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +286 -0
- claude_mpm/hooks/instruction_reinforcement.py +7 -2
- claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
- claude_mpm/hooks/kuzu_memory_hook.py +37 -12
- claude_mpm/hooks/kuzu_response_hook.py +183 -0
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/services/agents/__init__.py +18 -5
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- 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/observers.py +547 -0
- claude_mpm/services/agents/recommender.py +568 -0
- claude_mpm/services/agents/registry/modification_tracker.py +5 -2
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/__init__.py +33 -1
- claude_mpm/services/core/interfaces/__init__.py +90 -3
- claude_mpm/services/core/interfaces/agent.py +184 -0
- 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/project.py +121 -0
- claude_mpm/services/core/interfaces/restart.py +307 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/memory_manager.py +11 -24
- claude_mpm/services/core/models/__init__.py +79 -0
- claude_mpm/services/core/models/agent_config.py +381 -0
- 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/models/toolchain.py +306 -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 +38 -33
- 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/main.py +30 -0
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +206 -32
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +30 -28
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +25 -5
- claude_mpm/services/mcp_service_verifier.py +1 -1
- claude_mpm/services/memory/failure_tracker.py +563 -0
- claude_mpm/services/memory_hook_service.py +165 -4
- 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/project/__init__.py +23 -0
- claude_mpm/services/project/detection_strategies.py +719 -0
- claude_mpm/services/project/toolchain_analyzer.py +581 -0
- claude_mpm/services/self_upgrade_service.py +342 -0
- 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/storage/state_storage.py +15 -15
- 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 +40 -20
- claude_mpm/utils/display_helper.py +260 -0
- claude_mpm/utils/git_analyzer.py +407 -0
- claude_mpm/utils/robust_installer.py +73 -19
- {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/METADATA +129 -12
- {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/RECORD +295 -193
- claude_mpm/dashboard/static/css/code-tree.css +0 -1639
- claude_mpm/dashboard/static/index-hub-backup.html +0 -713
- 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.7.4.dist-info → claude_mpm-4.18.2.dist-info}/WHEEL +0 -0
- {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/top_level.txt +0 -0
|
@@ -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
|
)
|
|
@@ -14,7 +14,8 @@ from typing import Dict, List, Optional, Tuple
|
|
|
14
14
|
|
|
15
15
|
from claude_mpm.core.logger import get_logger
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from ....core.enums import OperationResult, ValidationSeverity
|
|
18
|
+
from ..models import DiagnosticResult
|
|
18
19
|
from .base_check import BaseDiagnosticCheck
|
|
19
20
|
|
|
20
21
|
|
|
@@ -116,7 +117,9 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
116
117
|
fix_result = DiagnosticResult(
|
|
117
118
|
category="MCP Service Fixes",
|
|
118
119
|
status=(
|
|
119
|
-
|
|
120
|
+
OperationResult.SUCCESS
|
|
121
|
+
if fix_success
|
|
122
|
+
else ValidationSeverity.WARNING
|
|
120
123
|
),
|
|
121
124
|
message=fix_message,
|
|
122
125
|
details={"auto_fix_applied": True},
|
|
@@ -134,9 +137,9 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
134
137
|
config_result = DiagnosticResult(
|
|
135
138
|
category="MCP Configuration Update",
|
|
136
139
|
status=(
|
|
137
|
-
|
|
140
|
+
OperationResult.SUCCESS
|
|
138
141
|
if config_success
|
|
139
|
-
else
|
|
142
|
+
else ValidationSeverity.WARNING
|
|
140
143
|
),
|
|
141
144
|
message=config_message,
|
|
142
145
|
details={"auto_config_applied": True},
|
|
@@ -191,32 +194,34 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
191
194
|
details["connected_count"] = connected_count
|
|
192
195
|
details["total_services"] = total_services
|
|
193
196
|
details["total_tools_discovered"] = total_tools
|
|
194
|
-
details["gateway_configured"] =
|
|
197
|
+
details["gateway_configured"] = (
|
|
198
|
+
gateway_result.status == OperationResult.SUCCESS
|
|
199
|
+
)
|
|
195
200
|
|
|
196
201
|
# Determine overall status
|
|
197
|
-
errors = [r for r in sub_results if r.status ==
|
|
198
|
-
[r for r in sub_results if r.status ==
|
|
202
|
+
errors = [r for r in sub_results if r.status == ValidationSeverity.ERROR]
|
|
203
|
+
[r for r in sub_results if r.status == ValidationSeverity.WARNING]
|
|
199
204
|
|
|
200
205
|
if errors:
|
|
201
|
-
status =
|
|
206
|
+
status = ValidationSeverity.ERROR
|
|
202
207
|
message = f"Critical issues with {len(errors)} MCP service(s)"
|
|
203
208
|
elif installed_count == 0:
|
|
204
|
-
status =
|
|
209
|
+
status = ValidationSeverity.WARNING
|
|
205
210
|
message = "No MCP services installed"
|
|
206
211
|
elif connected_count == total_services:
|
|
207
|
-
status =
|
|
212
|
+
status = OperationResult.SUCCESS
|
|
208
213
|
message = f"All {total_services} MCP services connected ({total_tools} tools available)"
|
|
209
214
|
elif connected_count > 0:
|
|
210
|
-
status =
|
|
215
|
+
status = ValidationSeverity.WARNING
|
|
211
216
|
message = f"{connected_count}/{total_services} MCP services connected, {installed_count} installed"
|
|
212
217
|
elif accessible_count < installed_count:
|
|
213
|
-
status =
|
|
218
|
+
status = ValidationSeverity.WARNING
|
|
214
219
|
message = f"{installed_count}/{total_services} services installed, {accessible_count} accessible"
|
|
215
220
|
elif installed_count < total_services:
|
|
216
|
-
status =
|
|
221
|
+
status = ValidationSeverity.WARNING
|
|
217
222
|
message = f"{installed_count}/{total_services} MCP services installed"
|
|
218
223
|
else:
|
|
219
|
-
status =
|
|
224
|
+
status = ValidationSeverity.WARNING
|
|
220
225
|
message = f"All {total_services} MCP services installed but connections not tested"
|
|
221
226
|
|
|
222
227
|
return DiagnosticResult(
|
|
@@ -230,7 +235,7 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
230
235
|
except Exception as e:
|
|
231
236
|
return DiagnosticResult(
|
|
232
237
|
category=self.category,
|
|
233
|
-
status=
|
|
238
|
+
status=ValidationSeverity.ERROR,
|
|
234
239
|
message=f"MCP services check failed: {e!s}",
|
|
235
240
|
details={"error": str(e)},
|
|
236
241
|
)
|
|
@@ -495,7 +500,7 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
495
500
|
base_cmd = config["mcp_command"]
|
|
496
501
|
if len(base_cmd) > 0 and base_cmd[0] == config["package"]:
|
|
497
502
|
# Simple case where first command is the package name
|
|
498
|
-
mcp_command = ["pipx", "run", config["package"]
|
|
503
|
+
mcp_command = ["pipx", "run", config["package"], *base_cmd[1:]]
|
|
499
504
|
else:
|
|
500
505
|
# Complex case - just try running the package with mcp arg
|
|
501
506
|
mcp_command = ["pipx", "run", config["package"], "mcp"]
|
|
@@ -509,7 +514,7 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
509
514
|
base_cmd = config["mcp_command"]
|
|
510
515
|
if service_name == "kuzu-memory":
|
|
511
516
|
# Special case for kuzu-memory with args
|
|
512
|
-
mcp_command = ["pipx", "run", base_cmd[0]
|
|
517
|
+
mcp_command = ["pipx", "run", base_cmd[0], *base_cmd[1:]]
|
|
513
518
|
else:
|
|
514
519
|
mcp_command = ["pipx", "run", *base_cmd]
|
|
515
520
|
else:
|
|
@@ -543,7 +548,7 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
543
548
|
if not (pipx_installed or accessible):
|
|
544
549
|
return DiagnosticResult(
|
|
545
550
|
category=f"MCP Service: {service_name}",
|
|
546
|
-
status=
|
|
551
|
+
status=ValidationSeverity.WARNING,
|
|
547
552
|
message=f"Not installed: {config['description']}",
|
|
548
553
|
details=details,
|
|
549
554
|
fix_command=f"pipx install {config['package']}",
|
|
@@ -565,16 +570,16 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
565
570
|
return DiagnosticResult(
|
|
566
571
|
category=f"MCP Service: {service_name}",
|
|
567
572
|
status=(
|
|
568
|
-
|
|
573
|
+
OperationResult.SUCCESS
|
|
569
574
|
if connection_info.get("connected")
|
|
570
|
-
else
|
|
575
|
+
else ValidationSeverity.WARNING
|
|
571
576
|
),
|
|
572
577
|
message=message,
|
|
573
578
|
details=details,
|
|
574
579
|
)
|
|
575
580
|
return DiagnosticResult(
|
|
576
581
|
category=f"MCP Service: {service_name}",
|
|
577
|
-
status=
|
|
582
|
+
status=ValidationSeverity.WARNING,
|
|
578
583
|
message="Installed via pipx but not in PATH",
|
|
579
584
|
details=details,
|
|
580
585
|
fix_command="pipx ensurepath",
|
|
@@ -588,14 +593,14 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
588
593
|
response_time = connection_info.get("response_time_ms")
|
|
589
594
|
tools_count = connection_info.get("tools_discovered", 0)
|
|
590
595
|
message = f"Installed, accessible, connection OK ({tools_count} tools, {response_time}ms)"
|
|
591
|
-
status =
|
|
596
|
+
status = OperationResult.SUCCESS
|
|
592
597
|
else:
|
|
593
598
|
error = connection_info.get("error", "Unknown error")
|
|
594
599
|
message = f"Installed but connection failed: {error}"
|
|
595
|
-
status =
|
|
600
|
+
status = ValidationSeverity.WARNING
|
|
596
601
|
else:
|
|
597
602
|
message = "Installed and accessible"
|
|
598
|
-
status =
|
|
603
|
+
status = OperationResult.SUCCESS
|
|
599
604
|
|
|
600
605
|
return DiagnosticResult(
|
|
601
606
|
category=f"MCP Service: {service_name}",
|
|
@@ -826,7 +831,7 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
826
831
|
if fixed:
|
|
827
832
|
return DiagnosticResult(
|
|
828
833
|
category="kuzu-memory Configuration Fix",
|
|
829
|
-
status=
|
|
834
|
+
status=OperationResult.SUCCESS,
|
|
830
835
|
message="Fixed kuzu-memory configuration to use correct args",
|
|
831
836
|
details={
|
|
832
837
|
"old_args": args,
|
|
@@ -837,7 +842,7 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
837
842
|
)
|
|
838
843
|
return DiagnosticResult(
|
|
839
844
|
category="kuzu-memory Configuration",
|
|
840
|
-
status=
|
|
845
|
+
status=ValidationSeverity.WARNING,
|
|
841
846
|
message="kuzu-memory has incorrect configuration",
|
|
842
847
|
details={
|
|
843
848
|
"current_args": args,
|
|
@@ -931,7 +936,7 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
931
936
|
if not config_file.exists():
|
|
932
937
|
return DiagnosticResult(
|
|
933
938
|
category="MCP Gateway Configuration",
|
|
934
|
-
status=
|
|
939
|
+
status=ValidationSeverity.WARNING,
|
|
935
940
|
message="Claude configuration file not found",
|
|
936
941
|
details={"config_path": str(config_file), "exists": False},
|
|
937
942
|
fix_command="claude-mpm configure --mcp",
|
|
@@ -951,7 +956,7 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
951
956
|
if current_project not in projects:
|
|
952
957
|
return DiagnosticResult(
|
|
953
958
|
category="MCP Gateway Configuration",
|
|
954
|
-
status=
|
|
959
|
+
status=ValidationSeverity.WARNING,
|
|
955
960
|
message="Current project not configured in Claude",
|
|
956
961
|
details={
|
|
957
962
|
"config_path": str(config_file),
|
|
@@ -982,7 +987,7 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
982
987
|
if not configured_services:
|
|
983
988
|
return DiagnosticResult(
|
|
984
989
|
category="MCP Gateway Configuration",
|
|
985
|
-
status=
|
|
990
|
+
status=ValidationSeverity.WARNING,
|
|
986
991
|
message="No MCP services configured in gateway",
|
|
987
992
|
details=details,
|
|
988
993
|
fix_command="claude-mpm configure --mcp --add-services",
|
|
@@ -992,14 +997,14 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
992
997
|
if missing_services:
|
|
993
998
|
return DiagnosticResult(
|
|
994
999
|
category="MCP Gateway Configuration",
|
|
995
|
-
status=
|
|
1000
|
+
status=ValidationSeverity.WARNING,
|
|
996
1001
|
message=f"{len(configured_services)} services configured, {len(missing_services)} missing",
|
|
997
1002
|
details=details,
|
|
998
1003
|
)
|
|
999
1004
|
|
|
1000
1005
|
return DiagnosticResult(
|
|
1001
1006
|
category="MCP Gateway Configuration",
|
|
1002
|
-
status=
|
|
1007
|
+
status=OperationResult.SUCCESS,
|
|
1003
1008
|
message=f"All {len(configured_services)} services configured",
|
|
1004
1009
|
details=details,
|
|
1005
1010
|
)
|
|
@@ -1007,14 +1012,14 @@ class MCPServicesCheck(BaseDiagnosticCheck):
|
|
|
1007
1012
|
except json.JSONDecodeError as e:
|
|
1008
1013
|
return DiagnosticResult(
|
|
1009
1014
|
category="MCP Gateway Configuration",
|
|
1010
|
-
status=
|
|
1015
|
+
status=ValidationSeverity.ERROR,
|
|
1011
1016
|
message="Invalid JSON in MCP configuration",
|
|
1012
1017
|
details={"error": str(e)},
|
|
1013
1018
|
)
|
|
1014
1019
|
except Exception as e:
|
|
1015
1020
|
return DiagnosticResult(
|
|
1016
1021
|
category="MCP Gateway Configuration",
|
|
1017
|
-
status=
|
|
1022
|
+
status=ValidationSeverity.WARNING,
|
|
1018
1023
|
message=f"Could not check configuration: {e!s}",
|
|
1019
1024
|
details={"error": str(e)},
|
|
1020
1025
|
)
|
|
@@ -7,7 +7,8 @@ properly configured and accessible for real-time updates.
|
|
|
7
7
|
|
|
8
8
|
import socket
|
|
9
9
|
|
|
10
|
-
from
|
|
10
|
+
from ....core.enums import OperationResult, ValidationSeverity
|
|
11
|
+
from ..models import DiagnosticResult
|
|
11
12
|
from .base_check import BaseDiagnosticCheck
|
|
12
13
|
|
|
13
14
|
|
|
@@ -33,7 +34,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
33
34
|
socketio_result = self._check_socketio()
|
|
34
35
|
sub_results.append(socketio_result)
|
|
35
36
|
details["socketio_available"] = (
|
|
36
|
-
socketio_result.status ==
|
|
37
|
+
socketio_result.status == OperationResult.SUCCESS
|
|
37
38
|
)
|
|
38
39
|
|
|
39
40
|
# Check port availability
|
|
@@ -49,17 +50,17 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
49
50
|
# Check hook service
|
|
50
51
|
hook_result = self._check_hook_service()
|
|
51
52
|
sub_results.append(hook_result)
|
|
52
|
-
details["hooks_enabled"] = hook_result.status ==
|
|
53
|
+
details["hooks_enabled"] = hook_result.status == OperationResult.SUCCESS
|
|
53
54
|
|
|
54
55
|
# Determine overall status
|
|
55
|
-
if any(r.status ==
|
|
56
|
-
status =
|
|
56
|
+
if any(r.status == ValidationSeverity.ERROR for r in sub_results):
|
|
57
|
+
status = ValidationSeverity.ERROR
|
|
57
58
|
message = "Monitoring has critical issues"
|
|
58
|
-
elif any(r.status ==
|
|
59
|
-
status =
|
|
59
|
+
elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
|
|
60
|
+
status = ValidationSeverity.WARNING
|
|
60
61
|
message = "Monitoring has minor issues"
|
|
61
62
|
else:
|
|
62
|
-
status =
|
|
63
|
+
status = OperationResult.SUCCESS
|
|
63
64
|
message = "Monitoring properly configured"
|
|
64
65
|
|
|
65
66
|
return DiagnosticResult(
|
|
@@ -73,7 +74,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
73
74
|
except Exception as e:
|
|
74
75
|
return DiagnosticResult(
|
|
75
76
|
category=self.category,
|
|
76
|
-
status=
|
|
77
|
+
status=ValidationSeverity.ERROR,
|
|
77
78
|
message=f"Monitor check failed: {e!s}",
|
|
78
79
|
details={"error": str(e)},
|
|
79
80
|
)
|
|
@@ -85,7 +86,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
85
86
|
|
|
86
87
|
return DiagnosticResult(
|
|
87
88
|
category="SocketIO",
|
|
88
|
-
status=
|
|
89
|
+
status=OperationResult.SUCCESS,
|
|
89
90
|
message="SocketIO library available",
|
|
90
91
|
details={
|
|
91
92
|
"available": True,
|
|
@@ -95,7 +96,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
95
96
|
except ImportError:
|
|
96
97
|
return DiagnosticResult(
|
|
97
98
|
category="SocketIO",
|
|
98
|
-
status=
|
|
99
|
+
status=ValidationSeverity.WARNING,
|
|
99
100
|
message="SocketIO not installed",
|
|
100
101
|
details={"available": False},
|
|
101
102
|
fix_command="pip install python-socketio[asyncio]",
|
|
@@ -122,7 +123,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
122
123
|
if not available_ports:
|
|
123
124
|
return DiagnosticResult(
|
|
124
125
|
category="Port Availability",
|
|
125
|
-
status=
|
|
126
|
+
status=ValidationSeverity.ERROR,
|
|
126
127
|
message="No monitoring ports available (8765-8785)",
|
|
127
128
|
details={
|
|
128
129
|
"available": [],
|
|
@@ -137,7 +138,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
137
138
|
if default_port not in available_ports:
|
|
138
139
|
return DiagnosticResult(
|
|
139
140
|
category="Port Availability",
|
|
140
|
-
status=
|
|
141
|
+
status=ValidationSeverity.WARNING,
|
|
141
142
|
message=f"Default port {default_port} in use, but alternatives available",
|
|
142
143
|
details={
|
|
143
144
|
"available": available_ports,
|
|
@@ -148,7 +149,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
148
149
|
|
|
149
150
|
return DiagnosticResult(
|
|
150
151
|
category="Port Availability",
|
|
151
|
-
status=
|
|
152
|
+
status=OperationResult.SUCCESS,
|
|
152
153
|
message=f"{len(available_ports)} monitoring port(s) available",
|
|
153
154
|
details={
|
|
154
155
|
"available": available_ports,
|
|
@@ -160,7 +161,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
160
161
|
except Exception as e:
|
|
161
162
|
return DiagnosticResult(
|
|
162
163
|
category="Port Availability",
|
|
163
|
-
status=
|
|
164
|
+
status=ValidationSeverity.WARNING,
|
|
164
165
|
message=f"Could not check ports: {e!s}",
|
|
165
166
|
details={"error": str(e)},
|
|
166
167
|
)
|
|
@@ -209,7 +210,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
209
210
|
if not response_logging_enabled:
|
|
210
211
|
return DiagnosticResult(
|
|
211
212
|
category="Response Logging",
|
|
212
|
-
status=
|
|
213
|
+
status=OperationResult.SUCCESS,
|
|
213
214
|
message="Response logging disabled (default)",
|
|
214
215
|
details={"enabled": False},
|
|
215
216
|
)
|
|
@@ -219,7 +220,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
219
220
|
if not log_dir.exists():
|
|
220
221
|
return DiagnosticResult(
|
|
221
222
|
category="Response Logging",
|
|
222
|
-
status=
|
|
223
|
+
status=ValidationSeverity.WARNING,
|
|
223
224
|
message="Response logging enabled but directory missing",
|
|
224
225
|
details={"enabled": True, "path": str(log_dir), "exists": False},
|
|
225
226
|
fix_command=f"mkdir -p {log_dir}",
|
|
@@ -231,7 +232,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
231
232
|
if not os.access(log_dir, os.W_OK):
|
|
232
233
|
return DiagnosticResult(
|
|
233
234
|
category="Response Logging",
|
|
234
|
-
status=
|
|
235
|
+
status=ValidationSeverity.WARNING,
|
|
235
236
|
message="Response logging directory not writable",
|
|
236
237
|
details={"enabled": True, "path": str(log_dir), "writable": False},
|
|
237
238
|
fix_command=f"chmod 755 {log_dir}",
|
|
@@ -240,7 +241,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
240
241
|
|
|
241
242
|
return DiagnosticResult(
|
|
242
243
|
category="Response Logging",
|
|
243
|
-
status=
|
|
244
|
+
status=OperationResult.SUCCESS,
|
|
244
245
|
message="Response logging enabled and configured",
|
|
245
246
|
details={
|
|
246
247
|
"enabled": True,
|
|
@@ -260,7 +261,7 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
260
261
|
|
|
261
262
|
return DiagnosticResult(
|
|
262
263
|
category="Hook Service",
|
|
263
|
-
status=
|
|
264
|
+
status=OperationResult.SUCCESS,
|
|
264
265
|
message="Hook service available",
|
|
265
266
|
details={"available": True},
|
|
266
267
|
)
|
|
@@ -268,14 +269,14 @@ class MonitorCheck(BaseDiagnosticCheck):
|
|
|
268
269
|
except ImportError:
|
|
269
270
|
return DiagnosticResult(
|
|
270
271
|
category="Hook Service",
|
|
271
|
-
status=
|
|
272
|
+
status=ValidationSeverity.WARNING,
|
|
272
273
|
message="Hook service not available",
|
|
273
274
|
details={"available": False},
|
|
274
275
|
)
|
|
275
276
|
except Exception as e:
|
|
276
277
|
return DiagnosticResult(
|
|
277
278
|
category="Hook Service",
|
|
278
|
-
status=
|
|
279
|
+
status=ValidationSeverity.WARNING,
|
|
279
280
|
message=f"Hook service error: {e!s}",
|
|
280
281
|
details={"available": False, "error": str(e)},
|
|
281
282
|
)
|