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
|
@@ -11,7 +11,8 @@ from typing import Any, Dict
|
|
|
11
11
|
|
|
12
12
|
import yaml
|
|
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
|
|
|
@@ -52,14 +53,14 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
52
53
|
sub_results.append(perm_result)
|
|
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 = "Configuration 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 = "Configuration has minor issues"
|
|
61
62
|
else:
|
|
62
|
-
status =
|
|
63
|
+
status = OperationResult.SUCCESS
|
|
63
64
|
message = "Configuration is valid"
|
|
64
65
|
|
|
65
66
|
return DiagnosticResult(
|
|
@@ -73,7 +74,7 @@ class ConfigurationCheck(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"Configuration check failed: {e!s}",
|
|
78
79
|
details={"error": str(e)},
|
|
79
80
|
)
|
|
@@ -85,7 +86,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
85
86
|
if not config_path.exists():
|
|
86
87
|
return DiagnosticResult(
|
|
87
88
|
category="User Config",
|
|
88
|
-
status=
|
|
89
|
+
status=OperationResult.SUCCESS,
|
|
89
90
|
message="No user configuration (using defaults)",
|
|
90
91
|
details={"path": str(config_path), "exists": False},
|
|
91
92
|
)
|
|
@@ -98,14 +99,14 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
98
99
|
if issues:
|
|
99
100
|
return DiagnosticResult(
|
|
100
101
|
category="User Config",
|
|
101
|
-
status=
|
|
102
|
+
status=ValidationSeverity.WARNING,
|
|
102
103
|
message=f"User config has issues: {', '.join(issues)}",
|
|
103
104
|
details={"path": str(config_path), "issues": issues},
|
|
104
105
|
)
|
|
105
106
|
|
|
106
107
|
return DiagnosticResult(
|
|
107
108
|
category="User Config",
|
|
108
|
-
status=
|
|
109
|
+
status=OperationResult.SUCCESS,
|
|
109
110
|
message="User configuration valid",
|
|
110
111
|
details={
|
|
111
112
|
"path": str(config_path),
|
|
@@ -117,7 +118,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
117
118
|
except yaml.YAMLError as e:
|
|
118
119
|
return DiagnosticResult(
|
|
119
120
|
category="User Config",
|
|
120
|
-
status=
|
|
121
|
+
status=ValidationSeverity.ERROR,
|
|
121
122
|
message="User config has invalid YAML",
|
|
122
123
|
details={"path": str(config_path), "error": str(e)},
|
|
123
124
|
fix_description="Fix YAML syntax errors in the configuration file",
|
|
@@ -125,7 +126,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
125
126
|
except Exception as e:
|
|
126
127
|
return DiagnosticResult(
|
|
127
128
|
category="User Config",
|
|
128
|
-
status=
|
|
129
|
+
status=ValidationSeverity.WARNING,
|
|
129
130
|
message=f"Could not read user config: {e!s}",
|
|
130
131
|
details={"path": str(config_path), "error": str(e)},
|
|
131
132
|
)
|
|
@@ -137,7 +138,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
137
138
|
if not config_path.exists():
|
|
138
139
|
return DiagnosticResult(
|
|
139
140
|
category="Project Config",
|
|
140
|
-
status=
|
|
141
|
+
status=OperationResult.SUCCESS,
|
|
141
142
|
message="No project configuration (using defaults)",
|
|
142
143
|
details={"path": str(config_path), "exists": False},
|
|
143
144
|
)
|
|
@@ -150,7 +151,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
150
151
|
if issues:
|
|
151
152
|
return DiagnosticResult(
|
|
152
153
|
category="Project Config",
|
|
153
|
-
status=
|
|
154
|
+
status=ValidationSeverity.WARNING,
|
|
154
155
|
message=f"Project config has issues: {', '.join(issues)}",
|
|
155
156
|
details={"path": str(config_path), "issues": issues},
|
|
156
157
|
)
|
|
@@ -160,7 +161,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
160
161
|
if deprecated:
|
|
161
162
|
return DiagnosticResult(
|
|
162
163
|
category="Project Config",
|
|
163
|
-
status=
|
|
164
|
+
status=ValidationSeverity.WARNING,
|
|
164
165
|
message=f"Using deprecated config keys: {', '.join(deprecated)}",
|
|
165
166
|
details={"path": str(config_path), "deprecated_keys": deprecated},
|
|
166
167
|
fix_description="Remove deprecated configuration keys",
|
|
@@ -168,7 +169,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
168
169
|
|
|
169
170
|
return DiagnosticResult(
|
|
170
171
|
category="Project Config",
|
|
171
|
-
status=
|
|
172
|
+
status=OperationResult.SUCCESS,
|
|
172
173
|
message="Project configuration valid",
|
|
173
174
|
details={
|
|
174
175
|
"path": str(config_path),
|
|
@@ -180,7 +181,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
180
181
|
except yaml.YAMLError as e:
|
|
181
182
|
return DiagnosticResult(
|
|
182
183
|
category="Project Config",
|
|
183
|
-
status=
|
|
184
|
+
status=ValidationSeverity.ERROR,
|
|
184
185
|
message="Project config has invalid YAML",
|
|
185
186
|
details={"path": str(config_path), "error": str(e)},
|
|
186
187
|
fix_description="Fix YAML syntax errors in the configuration file",
|
|
@@ -188,7 +189,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
188
189
|
except Exception as e:
|
|
189
190
|
return DiagnosticResult(
|
|
190
191
|
category="Project Config",
|
|
191
|
-
status=
|
|
192
|
+
status=ValidationSeverity.WARNING,
|
|
192
193
|
message=f"Could not read project config: {e!s}",
|
|
193
194
|
details={"path": str(config_path), "error": str(e)},
|
|
194
195
|
)
|
|
@@ -207,14 +208,14 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
207
208
|
if not set_vars:
|
|
208
209
|
return DiagnosticResult(
|
|
209
210
|
category="Environment Variables",
|
|
210
|
-
status=
|
|
211
|
+
status=OperationResult.SUCCESS,
|
|
211
212
|
message="No claude-mpm environment variables set",
|
|
212
213
|
details={"variables": {}},
|
|
213
214
|
)
|
|
214
215
|
|
|
215
216
|
return DiagnosticResult(
|
|
216
217
|
category="Environment Variables",
|
|
217
|
-
status=
|
|
218
|
+
status=OperationResult.SUCCESS,
|
|
218
219
|
message=f"{len(set_vars)} environment variable(s) configured",
|
|
219
220
|
details={"variables": set_vars},
|
|
220
221
|
)
|
|
@@ -245,7 +246,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
245
246
|
if not paths_checked:
|
|
246
247
|
return DiagnosticResult(
|
|
247
248
|
category="Config Permissions",
|
|
248
|
-
status=
|
|
249
|
+
status=OperationResult.SUCCESS,
|
|
249
250
|
message="No configuration files to check",
|
|
250
251
|
details={"paths_checked": []},
|
|
251
252
|
)
|
|
@@ -253,7 +254,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
253
254
|
if issues:
|
|
254
255
|
return DiagnosticResult(
|
|
255
256
|
category="Config Permissions",
|
|
256
|
-
status=
|
|
257
|
+
status=ValidationSeverity.WARNING,
|
|
257
258
|
message=f"Permission issues: {', '.join(issues)}",
|
|
258
259
|
details={"issues": issues, "paths_checked": paths_checked},
|
|
259
260
|
fix_command="chmod 644 ~/.claude/claude-mpm.yaml",
|
|
@@ -262,7 +263,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
|
|
|
262
263
|
|
|
263
264
|
return DiagnosticResult(
|
|
264
265
|
category="Config Permissions",
|
|
265
|
-
status=
|
|
266
|
+
status=OperationResult.SUCCESS,
|
|
266
267
|
message="Configuration file permissions are correct",
|
|
267
268
|
details={"paths_checked": paths_checked},
|
|
268
269
|
)
|
|
@@ -9,7 +9,8 @@ import os
|
|
|
9
9
|
import shutil
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
|
|
12
|
-
from
|
|
12
|
+
from ....core.enums import OperationResult, ValidationSeverity
|
|
13
|
+
from ..models import DiagnosticResult
|
|
13
14
|
from .base_check import BaseDiagnosticCheck
|
|
14
15
|
|
|
15
16
|
|
|
@@ -46,14 +47,14 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
46
47
|
details["structure"] = structure_result.details
|
|
47
48
|
|
|
48
49
|
# Determine overall status
|
|
49
|
-
if any(r.status ==
|
|
50
|
-
status =
|
|
50
|
+
if any(r.status == ValidationSeverity.ERROR for r in sub_results):
|
|
51
|
+
status = ValidationSeverity.ERROR
|
|
51
52
|
message = "File system has critical issues"
|
|
52
|
-
elif any(r.status ==
|
|
53
|
-
status =
|
|
53
|
+
elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
|
|
54
|
+
status = ValidationSeverity.WARNING
|
|
54
55
|
message = "File system has minor issues"
|
|
55
56
|
else:
|
|
56
|
-
status =
|
|
57
|
+
status = OperationResult.SUCCESS
|
|
57
58
|
message = "File system healthy"
|
|
58
59
|
|
|
59
60
|
return DiagnosticResult(
|
|
@@ -67,7 +68,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
67
68
|
except Exception as e:
|
|
68
69
|
return DiagnosticResult(
|
|
69
70
|
category=self.category,
|
|
70
|
-
status=
|
|
71
|
+
status=ValidationSeverity.ERROR,
|
|
71
72
|
message=f"Filesystem check failed: {e!s}",
|
|
72
73
|
details={"error": str(e)},
|
|
73
74
|
)
|
|
@@ -106,7 +107,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
106
107
|
if issues:
|
|
107
108
|
return DiagnosticResult(
|
|
108
109
|
category="Permissions",
|
|
109
|
-
status=
|
|
110
|
+
status=ValidationSeverity.ERROR,
|
|
110
111
|
message=f"{len(issues)} permission issue(s)",
|
|
111
112
|
details={"issues": issues, "checked": checked},
|
|
112
113
|
fix_command="chmod -R 755 .claude",
|
|
@@ -116,14 +117,14 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
116
117
|
if not checked:
|
|
117
118
|
return DiagnosticResult(
|
|
118
119
|
category="Permissions",
|
|
119
|
-
status=
|
|
120
|
+
status=ValidationSeverity.WARNING,
|
|
120
121
|
message="No project .claude directories found",
|
|
121
122
|
details={"checked": [], "missing": [str(d) for d in critical_dirs]},
|
|
122
123
|
)
|
|
123
124
|
|
|
124
125
|
return DiagnosticResult(
|
|
125
126
|
category="Permissions",
|
|
126
|
-
status=
|
|
127
|
+
status=OperationResult.SUCCESS,
|
|
127
128
|
message="All permissions valid",
|
|
128
129
|
details={"checked": checked},
|
|
129
130
|
)
|
|
@@ -150,7 +151,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
150
151
|
if free_gb < 0.1: # Less than 100MB
|
|
151
152
|
return DiagnosticResult(
|
|
152
153
|
category="Disk Space",
|
|
153
|
-
status=
|
|
154
|
+
status=ValidationSeverity.ERROR,
|
|
154
155
|
message=f"Critical: Only {free_gb:.2f}GB free",
|
|
155
156
|
details=details,
|
|
156
157
|
fix_description="Free up disk space immediately",
|
|
@@ -158,7 +159,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
158
159
|
if free_gb < 1: # Less than 1GB
|
|
159
160
|
return DiagnosticResult(
|
|
160
161
|
category="Disk Space",
|
|
161
|
-
status=
|
|
162
|
+
status=ValidationSeverity.WARNING,
|
|
162
163
|
message=f"Low disk space: {free_gb:.2f}GB free",
|
|
163
164
|
details=details,
|
|
164
165
|
fix_description="Consider freeing up disk space",
|
|
@@ -166,7 +167,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
166
167
|
|
|
167
168
|
return DiagnosticResult(
|
|
168
169
|
category="Disk Space",
|
|
169
|
-
status=
|
|
170
|
+
status=OperationResult.SUCCESS,
|
|
170
171
|
message=f"{free_gb:.1f}GB available",
|
|
171
172
|
details=details,
|
|
172
173
|
)
|
|
@@ -174,7 +175,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
174
175
|
except Exception as e:
|
|
175
176
|
return DiagnosticResult(
|
|
176
177
|
category="Disk Space",
|
|
177
|
-
status=
|
|
178
|
+
status=ValidationSeverity.WARNING,
|
|
178
179
|
message=f"Could not check disk space: {e!s}",
|
|
179
180
|
details={"error": str(e)},
|
|
180
181
|
)
|
|
@@ -196,7 +197,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
196
197
|
if not base_dir.exists():
|
|
197
198
|
return DiagnosticResult(
|
|
198
199
|
category="Directory Structure",
|
|
199
|
-
status=
|
|
200
|
+
status=ValidationSeverity.WARNING,
|
|
200
201
|
message="Project .claude directory missing",
|
|
201
202
|
details={"base_dir": str(base_dir), "exists": False},
|
|
202
203
|
fix_command="mkdir -p .claude/{agents,responses,memory,logs}",
|
|
@@ -213,7 +214,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
213
214
|
if missing:
|
|
214
215
|
return DiagnosticResult(
|
|
215
216
|
category="Directory Structure",
|
|
216
|
-
status=
|
|
217
|
+
status=ValidationSeverity.WARNING,
|
|
217
218
|
message=f"Missing {len(missing)} subdirectory(s)",
|
|
218
219
|
details={
|
|
219
220
|
"base_dir": str(base_dir),
|
|
@@ -226,7 +227,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
|
|
|
226
227
|
|
|
227
228
|
return DiagnosticResult(
|
|
228
229
|
category="Directory Structure",
|
|
229
|
-
status=
|
|
230
|
+
status=OperationResult.SUCCESS,
|
|
230
231
|
message="Directory structure complete",
|
|
231
232
|
details={"base_dir": str(base_dir), "directories": present},
|
|
232
233
|
)
|
|
@@ -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
|
)
|