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
|
@@ -26,6 +26,7 @@ from typing import Any, Dict
|
|
|
26
26
|
import psutil
|
|
27
27
|
|
|
28
28
|
from claude_mpm.config.paths import paths
|
|
29
|
+
from claude_mpm.core.enums import HealthStatus, OperationResult, ServiceState
|
|
29
30
|
from claude_mpm.core.logger import get_logger
|
|
30
31
|
from claude_mpm.services.mcp_gateway.core.interfaces import (
|
|
31
32
|
MCPToolDefinition,
|
|
@@ -168,20 +169,20 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
168
169
|
if i < len(check_results):
|
|
169
170
|
if isinstance(check_results[i], Exception):
|
|
170
171
|
results["checks"][check_name] = {
|
|
171
|
-
"status":
|
|
172
|
+
"status": OperationResult.ERROR,
|
|
172
173
|
"error": str(check_results[i]),
|
|
173
174
|
}
|
|
174
175
|
else:
|
|
175
176
|
results["checks"][check_name] = check_results[i]
|
|
176
177
|
else:
|
|
177
178
|
results["checks"][check_name] = {
|
|
178
|
-
"status":
|
|
179
|
+
"status": OperationResult.TIMEOUT,
|
|
179
180
|
"error": "Check timed out",
|
|
180
181
|
}
|
|
181
182
|
|
|
182
183
|
except asyncio.TimeoutError:
|
|
183
184
|
results["checks"]["timeout"] = {
|
|
184
|
-
"status":
|
|
185
|
+
"status": OperationResult.ERROR,
|
|
185
186
|
"error": f"Health checks timed out after {timeout} seconds",
|
|
186
187
|
}
|
|
187
188
|
|
|
@@ -194,7 +195,7 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
194
195
|
async def _check_system_health(self, detailed: bool) -> Dict[str, Any]:
|
|
195
196
|
"""Check system health (CPU, memory, disk, etc.)."""
|
|
196
197
|
check_result = {
|
|
197
|
-
"status":
|
|
198
|
+
"status": ServiceState.RUNNING,
|
|
198
199
|
"checks": {},
|
|
199
200
|
"warnings": [],
|
|
200
201
|
"errors": [],
|
|
@@ -219,7 +220,7 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
219
220
|
|
|
220
221
|
if memory_usage > 90:
|
|
221
222
|
check_result["errors"].append("High memory usage detected")
|
|
222
|
-
check_result["status"] =
|
|
223
|
+
check_result["status"] = HealthStatus.UNHEALTHY
|
|
223
224
|
elif memory_usage > 80:
|
|
224
225
|
check_result["warnings"].append("Elevated memory usage")
|
|
225
226
|
|
|
@@ -232,7 +233,7 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
232
233
|
|
|
233
234
|
if cpu_usage > 95:
|
|
234
235
|
check_result["errors"].append("High CPU usage detected")
|
|
235
|
-
check_result["status"] =
|
|
236
|
+
check_result["status"] = HealthStatus.UNHEALTHY
|
|
236
237
|
elif cpu_usage > 80:
|
|
237
238
|
check_result["warnings"].append("Elevated CPU usage")
|
|
238
239
|
|
|
@@ -248,7 +249,7 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
248
249
|
|
|
249
250
|
if disk_usage_percent > 95:
|
|
250
251
|
check_result["errors"].append("Disk space critically low")
|
|
251
|
-
check_result["status"] =
|
|
252
|
+
check_result["status"] = HealthStatus.UNHEALTHY
|
|
252
253
|
elif disk_usage_percent > 85:
|
|
253
254
|
check_result["warnings"].append("Disk space running low")
|
|
254
255
|
|
|
@@ -262,7 +263,7 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
262
263
|
}
|
|
263
264
|
|
|
264
265
|
except Exception as e:
|
|
265
|
-
check_result["status"] =
|
|
266
|
+
check_result["status"] = HealthStatus.UNHEALTHY
|
|
266
267
|
check_result["errors"].append(f"System health check failed: {e}")
|
|
267
268
|
|
|
268
269
|
return check_result
|
|
@@ -270,7 +271,7 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
270
271
|
async def _check_gateway_health(self, detailed: bool) -> Dict[str, Any]:
|
|
271
272
|
"""Check MCP Gateway health."""
|
|
272
273
|
check_result = {
|
|
273
|
-
"status":
|
|
274
|
+
"status": ServiceState.RUNNING,
|
|
274
275
|
"checks": {},
|
|
275
276
|
"warnings": [],
|
|
276
277
|
"errors": [],
|
|
@@ -302,10 +303,10 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
302
303
|
|
|
303
304
|
if not mcp_dir.exists():
|
|
304
305
|
check_result["errors"].append("MCP directory does not exist")
|
|
305
|
-
check_result["status"] =
|
|
306
|
+
check_result["status"] = HealthStatus.UNHEALTHY
|
|
306
307
|
|
|
307
308
|
except Exception as e:
|
|
308
|
-
check_result["status"] =
|
|
309
|
+
check_result["status"] = HealthStatus.UNHEALTHY
|
|
309
310
|
check_result["errors"].append(f"Gateway health check failed: {e}")
|
|
310
311
|
|
|
311
312
|
return check_result
|
|
@@ -313,7 +314,7 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
313
314
|
async def _check_tools_health(self, detailed: bool) -> Dict[str, Any]:
|
|
314
315
|
"""Check MCP tools health."""
|
|
315
316
|
check_result = {
|
|
316
|
-
"status":
|
|
317
|
+
"status": ServiceState.RUNNING,
|
|
317
318
|
"checks": {},
|
|
318
319
|
"warnings": [],
|
|
319
320
|
"errors": [],
|
|
@@ -353,11 +354,11 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
353
354
|
)
|
|
354
355
|
|
|
355
356
|
if len(available_essential) == 0:
|
|
356
|
-
check_result["status"] =
|
|
357
|
+
check_result["status"] = HealthStatus.UNHEALTHY
|
|
357
358
|
check_result["errors"].append("No essential tools available")
|
|
358
359
|
|
|
359
360
|
except Exception as e:
|
|
360
|
-
check_result["status"] =
|
|
361
|
+
check_result["status"] = HealthStatus.UNHEALTHY
|
|
361
362
|
check_result["errors"].append(f"Tools health check failed: {e}")
|
|
362
363
|
|
|
363
364
|
return check_result
|
|
@@ -365,7 +366,7 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
365
366
|
async def _check_config_health(self, detailed: bool) -> Dict[str, Any]:
|
|
366
367
|
"""Check configuration health."""
|
|
367
368
|
check_result = {
|
|
368
|
-
"status":
|
|
369
|
+
"status": ServiceState.RUNNING,
|
|
369
370
|
"checks": {},
|
|
370
371
|
"warnings": [],
|
|
371
372
|
"errors": [],
|
|
@@ -401,7 +402,7 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
401
402
|
}
|
|
402
403
|
|
|
403
404
|
except Exception as e:
|
|
404
|
-
check_result["status"] =
|
|
405
|
+
check_result["status"] = HealthStatus.UNHEALTHY
|
|
405
406
|
check_result["errors"].append(f"Config health check failed: {e}")
|
|
406
407
|
|
|
407
408
|
return check_result
|
|
@@ -413,13 +414,13 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
413
414
|
|
|
414
415
|
statuses = [check.get("status", "unknown") for check in checks.values()]
|
|
415
416
|
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
if "unhealthy" in statuses:
|
|
417
|
+
# Check for unhealthy (handle both string and enum)
|
|
418
|
+
if HealthStatus.UNHEALTHY in statuses or "unhealthy" in statuses:
|
|
419
419
|
return "unhealthy"
|
|
420
420
|
if "warning" in statuses:
|
|
421
421
|
return "warning"
|
|
422
|
-
|
|
422
|
+
# Check for healthy (handle both string and enum)
|
|
423
|
+
if all(status in (HealthStatus.HEALTHY, "healthy") for status in statuses):
|
|
423
424
|
return "healthy"
|
|
424
425
|
return "unknown"
|
|
425
426
|
|
|
@@ -436,19 +437,20 @@ class HealthCheckTool(BaseToolAdapter):
|
|
|
436
437
|
for check_name, check_result in checks.items():
|
|
437
438
|
status = check_result.get("status", "unknown")
|
|
438
439
|
|
|
439
|
-
|
|
440
|
+
# Check for healthy (handle both string and enum)
|
|
441
|
+
if status in (HealthStatus.HEALTHY, "healthy"):
|
|
440
442
|
summary["healthy"] += 1
|
|
441
|
-
elif status in ["warning", "unhealthy"]:
|
|
443
|
+
elif status in ["warning", HealthStatus.UNHEALTHY, "unhealthy"]:
|
|
442
444
|
summary["warnings"] += 1
|
|
443
445
|
# Collect warning messages
|
|
444
446
|
warnings = check_result.get("warnings", [])
|
|
445
447
|
for warning in warnings:
|
|
446
448
|
summary["issues"].append(f"{check_name}: {warning}")
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
449
|
+
# Collect error messages if status is unhealthy
|
|
450
|
+
if status in (HealthStatus.UNHEALTHY, "unhealthy"):
|
|
451
|
+
summary["errors"] += 1
|
|
452
|
+
errors = check_result.get("errors", [])
|
|
453
|
+
for error in errors:
|
|
454
|
+
summary["issues"].append(f"{check_name}: {error}")
|
|
453
455
|
|
|
454
456
|
return summary
|
|
@@ -13,6 +13,7 @@ DESIGN DECISIONS:
|
|
|
13
13
|
- Provides high-level tools that abstract kuzu-memory complexity
|
|
14
14
|
- Includes context enrichment for better memory retrieval
|
|
15
15
|
- Supports tagging for organized knowledge management
|
|
16
|
+
- kuzu-memory>=1.1.5 is now a REQUIRED dependency (moved from optional in v4.8.6)
|
|
16
17
|
"""
|
|
17
18
|
|
|
18
19
|
import json
|
|
@@ -111,7 +112,13 @@ class KuzuMemoryService(BaseToolAdapter):
|
|
|
111
112
|
return False
|
|
112
113
|
|
|
113
114
|
async def _install_package(self) -> bool:
|
|
114
|
-
"""
|
|
115
|
+
"""
|
|
116
|
+
Install kuzu-memory using pipx (preferred over pip).
|
|
117
|
+
|
|
118
|
+
NOTE: As of v4.8.6, kuzu-memory is a required dependency and should be
|
|
119
|
+
installed via pip along with claude-mpm. This method is kept for backward
|
|
120
|
+
compatibility and edge cases where the package may be missing.
|
|
121
|
+
"""
|
|
115
122
|
try:
|
|
116
123
|
# Check if pipx is available
|
|
117
124
|
import shutil
|
|
@@ -120,6 +127,9 @@ class KuzuMemoryService(BaseToolAdapter):
|
|
|
120
127
|
self.log_warning(
|
|
121
128
|
"pipx not found. Install it first: python -m pip install --user pipx"
|
|
122
129
|
)
|
|
130
|
+
self.log_info(
|
|
131
|
+
"Alternatively, kuzu-memory should be installed via pip with claude-mpm dependencies"
|
|
132
|
+
)
|
|
123
133
|
return False
|
|
124
134
|
|
|
125
135
|
self.log_info("Installing kuzu-memory via pipx...")
|
|
@@ -143,23 +153,33 @@ class KuzuMemoryService(BaseToolAdapter):
|
|
|
143
153
|
return False
|
|
144
154
|
|
|
145
155
|
async def initialize(self) -> bool:
|
|
146
|
-
"""
|
|
156
|
+
"""
|
|
157
|
+
Initialize the kuzu-memory service.
|
|
158
|
+
|
|
159
|
+
NOTE: As of v4.8.6, kuzu-memory is a required dependency. This method
|
|
160
|
+
checks for installation and provides helpful messages if missing.
|
|
161
|
+
"""
|
|
147
162
|
try:
|
|
148
163
|
# Check if package is installed
|
|
149
164
|
self._is_installed = await self._check_installation()
|
|
150
165
|
|
|
151
166
|
if not self._is_installed:
|
|
152
167
|
self.log_warning(
|
|
153
|
-
f"{self.package_name} not
|
|
168
|
+
f"{self.package_name} not found in PATH. "
|
|
169
|
+
f"Since v4.8.6, it's a required dependency."
|
|
154
170
|
)
|
|
171
|
+
self.log_info("Attempting installation via pipx as fallback...")
|
|
155
172
|
await self._install_package()
|
|
156
173
|
self._is_installed = await self._check_installation()
|
|
157
174
|
|
|
158
175
|
if not self._is_installed:
|
|
159
|
-
self.log_error(
|
|
176
|
+
self.log_error(
|
|
177
|
+
f"Failed to initialize {self.package_name}. "
|
|
178
|
+
f"Please install manually: pip install kuzu-memory>=1.1.5"
|
|
179
|
+
)
|
|
160
180
|
return False
|
|
161
181
|
|
|
162
|
-
self.log_info(f"{self.package_name} is available")
|
|
182
|
+
self.log_info(f"{self.package_name} is available and ready")
|
|
163
183
|
self._initialized = True
|
|
164
184
|
return True
|
|
165
185
|
|
|
@@ -550,7 +550,7 @@ class MCPServiceVerifier:
|
|
|
550
550
|
|
|
551
551
|
try:
|
|
552
552
|
# Build test command - add --help to test without side effects
|
|
553
|
-
test_cmd = [command
|
|
553
|
+
test_cmd = [command, *args[:2]] if args else [command] # Include base args
|
|
554
554
|
test_cmd.append("--help")
|
|
555
555
|
|
|
556
556
|
result = subprocess.run(
|