claude-mpm 4.1.0__py3-none-any.whl → 4.1.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/BUILD_NUMBER +1 -1
- claude_mpm/VERSION +1 -1
- claude_mpm/__main__.py +1 -1
- claude_mpm/agents/BASE_PM.md +74 -46
- claude_mpm/agents/INSTRUCTIONS.md +11 -153
- claude_mpm/agents/WORKFLOW.md +61 -321
- claude_mpm/agents/__init__.py +11 -11
- claude_mpm/agents/agent_loader.py +23 -20
- claude_mpm/agents/agent_loader_integration.py +1 -1
- claude_mpm/agents/agents_metadata.py +27 -0
- claude_mpm/agents/async_agent_loader.py +5 -8
- claude_mpm/agents/base_agent_loader.py +36 -25
- claude_mpm/agents/frontmatter_validator.py +6 -6
- claude_mpm/agents/schema/agent_schema.json +1 -1
- claude_mpm/agents/system_agent_config.py +9 -9
- claude_mpm/agents/templates/api_qa.json +47 -2
- claude_mpm/agents/templates/imagemagick.json +256 -0
- claude_mpm/agents/templates/qa.json +41 -2
- claude_mpm/agents/templates/ticketing.json +5 -5
- claude_mpm/agents/templates/web_qa.json +133 -58
- claude_mpm/agents/templates/web_ui.json +3 -3
- claude_mpm/cli/__init__.py +51 -46
- claude_mpm/cli/__main__.py +1 -1
- claude_mpm/cli/commands/__init__.py +10 -12
- claude_mpm/cli/commands/agent_manager.py +186 -181
- claude_mpm/cli/commands/agents.py +271 -268
- claude_mpm/cli/commands/aggregate.py +30 -29
- claude_mpm/cli/commands/cleanup.py +50 -44
- claude_mpm/cli/commands/cleanup_orphaned_agents.py +25 -25
- claude_mpm/cli/commands/config.py +162 -127
- claude_mpm/cli/commands/doctor.py +52 -62
- claude_mpm/cli/commands/info.py +37 -25
- claude_mpm/cli/commands/mcp.py +3 -7
- claude_mpm/cli/commands/mcp_command_router.py +14 -18
- claude_mpm/cli/commands/mcp_install_commands.py +28 -23
- claude_mpm/cli/commands/mcp_pipx_config.py +58 -49
- claude_mpm/cli/commands/mcp_server_commands.py +23 -17
- claude_mpm/cli/commands/memory.py +192 -141
- claude_mpm/cli/commands/monitor.py +117 -88
- claude_mpm/cli/commands/run.py +120 -84
- claude_mpm/cli/commands/run_config_checker.py +4 -5
- claude_mpm/cli/commands/socketio_monitor.py +17 -19
- claude_mpm/cli/commands/tickets.py +92 -92
- claude_mpm/cli/parser.py +1 -5
- claude_mpm/cli/parsers/__init__.py +1 -1
- claude_mpm/cli/parsers/agent_manager_parser.py +50 -98
- claude_mpm/cli/parsers/agents_parser.py +2 -3
- claude_mpm/cli/parsers/base_parser.py +7 -5
- claude_mpm/cli/parsers/mcp_parser.py +4 -2
- claude_mpm/cli/parsers/monitor_parser.py +26 -18
- claude_mpm/cli/shared/__init__.py +10 -10
- claude_mpm/cli/shared/argument_patterns.py +57 -71
- claude_mpm/cli/shared/base_command.py +61 -53
- claude_mpm/cli/shared/error_handling.py +62 -58
- claude_mpm/cli/shared/output_formatters.py +78 -77
- claude_mpm/cli/startup_logging.py +204 -172
- claude_mpm/cli/utils.py +10 -11
- claude_mpm/cli_module/__init__.py +1 -1
- claude_mpm/cli_module/args.py +1 -1
- claude_mpm/cli_module/migration_example.py +5 -5
- claude_mpm/config/__init__.py +9 -9
- claude_mpm/config/agent_config.py +15 -14
- claude_mpm/config/experimental_features.py +4 -4
- claude_mpm/config/paths.py +0 -1
- claude_mpm/config/socketio_config.py +5 -6
- claude_mpm/constants.py +1 -2
- claude_mpm/core/__init__.py +8 -8
- claude_mpm/core/agent_name_normalizer.py +1 -1
- claude_mpm/core/agent_registry.py +20 -23
- claude_mpm/core/agent_session_manager.py +3 -3
- claude_mpm/core/base_service.py +7 -15
- claude_mpm/core/cache.py +4 -6
- claude_mpm/core/claude_runner.py +85 -113
- claude_mpm/core/config.py +43 -28
- claude_mpm/core/config_aliases.py +0 -9
- claude_mpm/core/config_constants.py +52 -30
- claude_mpm/core/constants.py +0 -1
- claude_mpm/core/container.py +18 -27
- claude_mpm/core/exceptions.py +2 -2
- claude_mpm/core/factories.py +10 -12
- claude_mpm/core/framework_loader.py +581 -280
- claude_mpm/core/hook_manager.py +26 -22
- claude_mpm/core/hook_performance_config.py +58 -47
- claude_mpm/core/injectable_service.py +1 -1
- claude_mpm/core/interactive_session.py +61 -152
- claude_mpm/core/interfaces.py +1 -100
- claude_mpm/core/lazy.py +5 -5
- claude_mpm/core/log_manager.py +587 -0
- claude_mpm/core/logger.py +125 -8
- claude_mpm/core/logging_config.py +15 -15
- claude_mpm/core/minimal_framework_loader.py +5 -8
- claude_mpm/core/oneshot_session.py +15 -33
- claude_mpm/core/optimized_agent_loader.py +4 -6
- claude_mpm/core/optimized_startup.py +2 -1
- claude_mpm/core/output_style_manager.py +147 -106
- claude_mpm/core/pm_hook_interceptor.py +0 -1
- claude_mpm/core/service_registry.py +11 -8
- claude_mpm/core/session_manager.py +1 -2
- claude_mpm/core/shared/__init__.py +1 -1
- claude_mpm/core/shared/config_loader.py +101 -97
- claude_mpm/core/shared/path_resolver.py +72 -68
- claude_mpm/core/shared/singleton_manager.py +56 -50
- claude_mpm/core/socketio_pool.py +26 -6
- claude_mpm/core/tool_access_control.py +4 -5
- claude_mpm/core/typing_utils.py +50 -59
- claude_mpm/core/unified_agent_registry.py +14 -19
- claude_mpm/core/unified_config.py +4 -6
- claude_mpm/core/unified_paths.py +197 -109
- claude_mpm/dashboard/open_dashboard.py +2 -4
- claude_mpm/experimental/cli_enhancements.py +51 -36
- claude_mpm/generators/agent_profile_generator.py +2 -4
- claude_mpm/hooks/base_hook.py +1 -2
- claude_mpm/hooks/claude_hooks/connection_pool.py +72 -26
- claude_mpm/hooks/claude_hooks/event_handlers.py +93 -38
- claude_mpm/hooks/claude_hooks/hook_handler.py +130 -76
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +104 -77
- claude_mpm/hooks/claude_hooks/memory_integration.py +2 -4
- claude_mpm/hooks/claude_hooks/response_tracking.py +15 -11
- claude_mpm/hooks/claude_hooks/tool_analysis.py +12 -18
- claude_mpm/hooks/memory_integration_hook.py +5 -5
- claude_mpm/hooks/tool_call_interceptor.py +1 -1
- claude_mpm/hooks/validation_hooks.py +4 -4
- claude_mpm/init.py +4 -9
- claude_mpm/models/__init__.py +2 -2
- claude_mpm/models/agent_session.py +11 -14
- claude_mpm/scripts/mcp_server.py +20 -11
- claude_mpm/scripts/mcp_wrapper.py +5 -5
- claude_mpm/scripts/mpm_doctor.py +321 -0
- claude_mpm/scripts/socketio_daemon.py +28 -25
- claude_mpm/scripts/socketio_daemon_hardened.py +298 -258
- claude_mpm/scripts/socketio_server_manager.py +116 -95
- claude_mpm/services/__init__.py +49 -49
- claude_mpm/services/agent_capabilities_service.py +12 -18
- claude_mpm/services/agents/__init__.py +22 -22
- claude_mpm/services/agents/agent_builder.py +140 -119
- claude_mpm/services/agents/deployment/__init__.py +3 -3
- claude_mpm/services/agents/deployment/agent_config_provider.py +9 -9
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +19 -20
- claude_mpm/services/agents/deployment/agent_definition_factory.py +1 -5
- claude_mpm/services/agents/deployment/agent_deployment.py +136 -106
- claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -8
- claude_mpm/services/agents/deployment/agent_environment_manager.py +2 -7
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +6 -10
- claude_mpm/services/agents/deployment/agent_format_converter.py +11 -15
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +2 -3
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -5
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +13 -19
- claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -1
- claude_mpm/services/agents/deployment/agent_template_builder.py +26 -35
- claude_mpm/services/agents/deployment/agent_validator.py +0 -1
- claude_mpm/services/agents/deployment/agent_version_manager.py +7 -9
- claude_mpm/services/agents/deployment/agent_versioning.py +3 -3
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +6 -7
- claude_mpm/services/agents/deployment/async_agent_deployment.py +51 -38
- claude_mpm/services/agents/deployment/config/__init__.py +1 -1
- claude_mpm/services/agents/deployment/config/deployment_config.py +7 -8
- claude_mpm/services/agents/deployment/deployment_type_detector.py +1 -1
- claude_mpm/services/agents/deployment/deployment_wrapper.py +18 -18
- claude_mpm/services/agents/deployment/facade/__init__.py +1 -1
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -3
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -4
- claude_mpm/services/agents/deployment/interface_adapter.py +5 -7
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +345 -276
- claude_mpm/services/agents/deployment/pipeline/__init__.py +2 -2
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +1 -1
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +6 -4
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +3 -3
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +2 -2
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +14 -13
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -1
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +1 -1
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +8 -9
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +1 -1
- claude_mpm/services/agents/deployment/processors/__init__.py +1 -1
- claude_mpm/services/agents/deployment/processors/agent_processor.py +20 -16
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +5 -12
- claude_mpm/services/agents/deployment/results/__init__.py +1 -1
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +1 -1
- claude_mpm/services/agents/deployment/strategies/__init__.py +2 -2
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +1 -7
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +1 -4
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +2 -3
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +3 -7
- claude_mpm/services/agents/deployment/validation/__init__.py +1 -1
- claude_mpm/services/agents/deployment/validation/agent_validator.py +1 -1
- claude_mpm/services/agents/deployment/validation/template_validator.py +2 -2
- claude_mpm/services/agents/deployment/validation/validation_result.py +2 -6
- claude_mpm/services/agents/loading/__init__.py +1 -1
- claude_mpm/services/agents/loading/agent_profile_loader.py +6 -12
- claude_mpm/services/agents/loading/base_agent_manager.py +5 -5
- claude_mpm/services/agents/loading/framework_agent_loader.py +2 -4
- claude_mpm/services/agents/management/__init__.py +1 -1
- claude_mpm/services/agents/management/agent_capabilities_generator.py +1 -3
- claude_mpm/services/agents/management/agent_management_service.py +5 -9
- claude_mpm/services/agents/memory/__init__.py +4 -4
- claude_mpm/services/agents/memory/agent_memory_manager.py +280 -160
- claude_mpm/services/agents/memory/agent_persistence_service.py +0 -2
- claude_mpm/services/agents/memory/content_manager.py +44 -38
- claude_mpm/services/agents/memory/template_generator.py +4 -6
- claude_mpm/services/agents/registry/__init__.py +10 -6
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +30 -27
- claude_mpm/services/agents/registry/modification_tracker.py +3 -6
- claude_mpm/services/async_session_logger.py +1 -2
- claude_mpm/services/claude_session_logger.py +1 -2
- claude_mpm/services/command_deployment_service.py +173 -0
- claude_mpm/services/command_handler_service.py +20 -22
- claude_mpm/services/core/__init__.py +25 -25
- claude_mpm/services/core/base.py +0 -5
- claude_mpm/services/core/interfaces/__init__.py +32 -32
- claude_mpm/services/core/interfaces/agent.py +0 -21
- claude_mpm/services/core/interfaces/communication.py +0 -27
- claude_mpm/services/core/interfaces/infrastructure.py +0 -56
- claude_mpm/services/core/interfaces/service.py +0 -29
- claude_mpm/services/diagnostics/__init__.py +1 -1
- claude_mpm/services/diagnostics/checks/__init__.py +6 -6
- claude_mpm/services/diagnostics/checks/agent_check.py +89 -80
- claude_mpm/services/diagnostics/checks/base_check.py +12 -16
- claude_mpm/services/diagnostics/checks/claude_desktop_check.py +84 -81
- claude_mpm/services/diagnostics/checks/common_issues_check.py +99 -91
- claude_mpm/services/diagnostics/checks/configuration_check.py +82 -77
- claude_mpm/services/diagnostics/checks/filesystem_check.py +67 -68
- claude_mpm/services/diagnostics/checks/installation_check.py +254 -94
- claude_mpm/services/diagnostics/checks/mcp_check.py +90 -88
- claude_mpm/services/diagnostics/checks/monitor_check.py +75 -76
- claude_mpm/services/diagnostics/checks/startup_log_check.py +67 -73
- claude_mpm/services/diagnostics/diagnostic_runner.py +67 -59
- claude_mpm/services/diagnostics/doctor_reporter.py +107 -70
- claude_mpm/services/diagnostics/models.py +21 -19
- claude_mpm/services/event_aggregator.py +10 -17
- claude_mpm/services/event_bus/__init__.py +1 -1
- claude_mpm/services/event_bus/config.py +54 -35
- claude_mpm/services/event_bus/event_bus.py +76 -71
- claude_mpm/services/event_bus/relay.py +74 -64
- claude_mpm/services/events/__init__.py +11 -11
- claude_mpm/services/events/consumers/__init__.py +3 -3
- claude_mpm/services/events/consumers/dead_letter.py +71 -63
- claude_mpm/services/events/consumers/logging.py +39 -37
- claude_mpm/services/events/consumers/metrics.py +56 -57
- claude_mpm/services/events/consumers/socketio.py +82 -81
- claude_mpm/services/events/core.py +110 -99
- claude_mpm/services/events/interfaces.py +56 -72
- claude_mpm/services/events/producers/__init__.py +1 -1
- claude_mpm/services/events/producers/hook.py +38 -38
- claude_mpm/services/events/producers/system.py +46 -44
- claude_mpm/services/exceptions.py +81 -80
- claude_mpm/services/framework_claude_md_generator/__init__.py +2 -4
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +3 -5
- claude_mpm/services/framework_claude_md_generator/content_validator.py +1 -1
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +4 -4
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -1
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -2
- claude_mpm/services/framework_claude_md_generator/version_manager.py +4 -5
- claude_mpm/services/hook_service.py +6 -9
- claude_mpm/services/infrastructure/__init__.py +1 -1
- claude_mpm/services/infrastructure/context_preservation.py +8 -12
- claude_mpm/services/infrastructure/monitoring.py +21 -23
- claude_mpm/services/mcp_gateway/__init__.py +37 -37
- claude_mpm/services/mcp_gateway/auto_configure.py +95 -103
- claude_mpm/services/mcp_gateway/config/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/config/config_loader.py +23 -25
- claude_mpm/services/mcp_gateway/config/config_schema.py +5 -5
- claude_mpm/services/mcp_gateway/config/configuration.py +9 -6
- claude_mpm/services/mcp_gateway/core/__init__.py +10 -10
- claude_mpm/services/mcp_gateway/core/base.py +0 -3
- claude_mpm/services/mcp_gateway/core/interfaces.py +1 -38
- claude_mpm/services/mcp_gateway/core/process_pool.py +99 -93
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +65 -62
- claude_mpm/services/mcp_gateway/core/startup_verification.py +75 -74
- claude_mpm/services/mcp_gateway/main.py +2 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +5 -8
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +1 -1
- claude_mpm/services/mcp_gateway/server/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +12 -19
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +4 -3
- claude_mpm/services/mcp_gateway/server/stdio_server.py +79 -71
- claude_mpm/services/mcp_gateway/tools/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +5 -6
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +13 -22
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +79 -78
- claude_mpm/services/mcp_gateway/tools/hello_world.py +12 -14
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +42 -49
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +51 -55
- claude_mpm/services/memory/__init__.py +3 -3
- claude_mpm/services/memory/builder.py +3 -6
- claude_mpm/services/memory/cache/__init__.py +1 -1
- claude_mpm/services/memory/cache/shared_prompt_cache.py +3 -5
- claude_mpm/services/memory/cache/simple_cache.py +1 -1
- claude_mpm/services/memory/indexed_memory.py +5 -7
- claude_mpm/services/memory/optimizer.py +7 -10
- claude_mpm/services/memory/router.py +8 -9
- claude_mpm/services/memory_hook_service.py +48 -34
- claude_mpm/services/monitor_build_service.py +77 -73
- claude_mpm/services/port_manager.py +130 -108
- claude_mpm/services/project/analyzer.py +12 -10
- claude_mpm/services/project/registry.py +11 -11
- claude_mpm/services/recovery_manager.py +10 -19
- claude_mpm/services/response_tracker.py +0 -1
- claude_mpm/services/runner_configuration_service.py +19 -20
- claude_mpm/services/session_management_service.py +7 -11
- claude_mpm/services/shared/__init__.py +1 -1
- claude_mpm/services/shared/async_service_base.py +58 -50
- claude_mpm/services/shared/config_service_base.py +73 -67
- claude_mpm/services/shared/lifecycle_service_base.py +82 -78
- claude_mpm/services/shared/manager_base.py +94 -82
- claude_mpm/services/shared/service_factory.py +96 -98
- claude_mpm/services/socketio/__init__.py +3 -3
- claude_mpm/services/socketio/client_proxy.py +5 -5
- claude_mpm/services/socketio/event_normalizer.py +199 -181
- claude_mpm/services/socketio/handlers/__init__.py +3 -3
- claude_mpm/services/socketio/handlers/base.py +5 -4
- claude_mpm/services/socketio/handlers/connection.py +163 -136
- claude_mpm/services/socketio/handlers/file.py +13 -14
- claude_mpm/services/socketio/handlers/git.py +12 -7
- claude_mpm/services/socketio/handlers/hook.py +49 -44
- claude_mpm/services/socketio/handlers/memory.py +0 -1
- claude_mpm/services/socketio/handlers/project.py +0 -1
- claude_mpm/services/socketio/handlers/registry.py +37 -19
- claude_mpm/services/socketio/migration_utils.py +98 -84
- claude_mpm/services/socketio/server/__init__.py +1 -1
- claude_mpm/services/socketio/server/broadcaster.py +81 -87
- claude_mpm/services/socketio/server/core.py +65 -54
- claude_mpm/services/socketio/server/eventbus_integration.py +95 -56
- claude_mpm/services/socketio/server/main.py +64 -38
- claude_mpm/services/socketio_client_manager.py +10 -12
- claude_mpm/services/subprocess_launcher_service.py +4 -7
- claude_mpm/services/system_instructions_service.py +13 -14
- claude_mpm/services/ticket_manager.py +2 -2
- claude_mpm/services/utility_service.py +5 -13
- claude_mpm/services/version_control/__init__.py +16 -16
- claude_mpm/services/version_control/branch_strategy.py +5 -8
- claude_mpm/services/version_control/conflict_resolution.py +9 -23
- claude_mpm/services/version_control/git_operations.py +5 -7
- claude_mpm/services/version_control/semantic_versioning.py +16 -17
- claude_mpm/services/version_control/version_parser.py +13 -18
- claude_mpm/services/version_service.py +10 -11
- claude_mpm/storage/__init__.py +1 -1
- claude_mpm/storage/state_storage.py +22 -28
- claude_mpm/utils/__init__.py +6 -6
- claude_mpm/utils/agent_dependency_loader.py +47 -33
- claude_mpm/utils/config_manager.py +11 -14
- claude_mpm/utils/dependency_cache.py +1 -1
- claude_mpm/utils/dependency_manager.py +13 -17
- claude_mpm/utils/dependency_strategies.py +8 -10
- claude_mpm/utils/environment_context.py +3 -9
- claude_mpm/utils/error_handler.py +3 -13
- claude_mpm/utils/file_utils.py +1 -1
- claude_mpm/utils/path_operations.py +8 -12
- claude_mpm/utils/robust_installer.py +110 -33
- claude_mpm/utils/subprocess_utils.py +5 -6
- claude_mpm/validation/agent_validator.py +3 -6
- claude_mpm/validation/frontmatter_validator.py +1 -1
- {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/METADATA +1 -1
- claude_mpm-4.1.2.dist-info/RECORD +498 -0
- claude_mpm-4.1.0.dist-info/RECORD +0 -494
- {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/top_level.txt +0 -0
|
@@ -8,7 +8,6 @@ and integrated with claude-mpm.
|
|
|
8
8
|
import json
|
|
9
9
|
import subprocess
|
|
10
10
|
from pathlib import Path
|
|
11
|
-
from typing import Dict, Any, Optional
|
|
12
11
|
|
|
13
12
|
from ..models import DiagnosticResult, DiagnosticStatus
|
|
14
13
|
from .base_check import BaseDiagnosticCheck
|
|
@@ -16,42 +15,42 @@ from .base_check import BaseDiagnosticCheck
|
|
|
16
15
|
|
|
17
16
|
class ClaudeDesktopCheck(BaseDiagnosticCheck):
|
|
18
17
|
"""Check Claude Desktop installation and integration."""
|
|
19
|
-
|
|
18
|
+
|
|
20
19
|
@property
|
|
21
20
|
def name(self) -> str:
|
|
22
21
|
return "claude_desktop_check"
|
|
23
|
-
|
|
22
|
+
|
|
24
23
|
@property
|
|
25
24
|
def category(self) -> str:
|
|
26
25
|
return "Claude Desktop"
|
|
27
|
-
|
|
26
|
+
|
|
28
27
|
def run(self) -> DiagnosticResult:
|
|
29
28
|
"""Run Claude Desktop diagnostics."""
|
|
30
29
|
try:
|
|
31
30
|
sub_results = []
|
|
32
31
|
details = {}
|
|
33
|
-
|
|
32
|
+
|
|
34
33
|
# Check if Claude Desktop is installed
|
|
35
34
|
install_result = self._check_installation()
|
|
36
35
|
sub_results.append(install_result)
|
|
37
36
|
details["installed"] = install_result.status == DiagnosticStatus.OK
|
|
38
|
-
|
|
37
|
+
|
|
39
38
|
if install_result.status == DiagnosticStatus.OK:
|
|
40
39
|
# Check version compatibility
|
|
41
40
|
version_result = self._check_version()
|
|
42
41
|
sub_results.append(version_result)
|
|
43
42
|
details["version"] = version_result.details.get("version")
|
|
44
|
-
|
|
43
|
+
|
|
45
44
|
# Check output style deployment
|
|
46
45
|
style_result = self._check_output_style()
|
|
47
46
|
sub_results.append(style_result)
|
|
48
47
|
details["output_style"] = style_result.details.get("deployed")
|
|
49
|
-
|
|
48
|
+
|
|
50
49
|
# Check MCP integration
|
|
51
50
|
mcp_result = self._check_mcp_integration()
|
|
52
51
|
sub_results.append(mcp_result)
|
|
53
52
|
details["mcp_configured"] = mcp_result.status == DiagnosticStatus.OK
|
|
54
|
-
|
|
53
|
+
|
|
55
54
|
# Determine overall status
|
|
56
55
|
if any(r.status == DiagnosticStatus.ERROR for r in sub_results):
|
|
57
56
|
status = DiagnosticStatus.ERROR
|
|
@@ -62,23 +61,23 @@ class ClaudeDesktopCheck(BaseDiagnosticCheck):
|
|
|
62
61
|
else:
|
|
63
62
|
status = DiagnosticStatus.OK
|
|
64
63
|
message = "Claude Desktop properly configured"
|
|
65
|
-
|
|
64
|
+
|
|
66
65
|
return DiagnosticResult(
|
|
67
66
|
category=self.category,
|
|
68
67
|
status=status,
|
|
69
68
|
message=message,
|
|
70
69
|
details=details,
|
|
71
|
-
sub_results=sub_results if self.verbose else []
|
|
70
|
+
sub_results=sub_results if self.verbose else [],
|
|
72
71
|
)
|
|
73
|
-
|
|
72
|
+
|
|
74
73
|
except Exception as e:
|
|
75
74
|
return DiagnosticResult(
|
|
76
75
|
category=self.category,
|
|
77
76
|
status=DiagnosticStatus.ERROR,
|
|
78
|
-
message=f"Claude Desktop check failed: {
|
|
79
|
-
details={"error": str(e)}
|
|
77
|
+
message=f"Claude Desktop check failed: {e!s}",
|
|
78
|
+
details={"error": str(e)},
|
|
80
79
|
)
|
|
81
|
-
|
|
80
|
+
|
|
82
81
|
def _check_installation(self) -> DiagnosticResult:
|
|
83
82
|
"""Check if Claude Desktop is installed."""
|
|
84
83
|
# Check common installation paths
|
|
@@ -86,102 +85,103 @@ class ClaudeDesktopCheck(BaseDiagnosticCheck):
|
|
|
86
85
|
linux_paths = [
|
|
87
86
|
Path.home() / ".local/share/applications/claude.desktop",
|
|
88
87
|
Path("/usr/share/applications/claude.desktop"),
|
|
89
|
-
Path("/opt/Claude")
|
|
88
|
+
Path("/opt/Claude"),
|
|
90
89
|
]
|
|
91
90
|
windows_paths = [
|
|
92
91
|
Path("C:/Program Files/Claude/Claude.exe"),
|
|
93
|
-
Path.home() / "AppData/Local/Claude/Claude.exe"
|
|
92
|
+
Path.home() / "AppData/Local/Claude/Claude.exe",
|
|
94
93
|
]
|
|
95
|
-
|
|
94
|
+
|
|
96
95
|
# Check for Claude process
|
|
97
96
|
try:
|
|
98
97
|
result = subprocess.run(
|
|
99
|
-
["pgrep", "-f", "Claude"],
|
|
100
|
-
capture_output=True,
|
|
101
|
-
timeout=2
|
|
98
|
+
["pgrep", "-f", "Claude"], capture_output=True, timeout=2, check=False
|
|
102
99
|
)
|
|
103
100
|
if result.returncode == 0:
|
|
104
101
|
return DiagnosticResult(
|
|
105
102
|
category="Claude Desktop Installation",
|
|
106
103
|
status=DiagnosticStatus.OK,
|
|
107
104
|
message="Claude Desktop is running",
|
|
108
|
-
details={"running": True}
|
|
105
|
+
details={"running": True},
|
|
109
106
|
)
|
|
110
107
|
except (subprocess.SubprocessError, FileNotFoundError):
|
|
111
108
|
pass
|
|
112
|
-
|
|
109
|
+
|
|
113
110
|
# Check installation paths
|
|
114
111
|
if mac_path.exists():
|
|
115
112
|
return DiagnosticResult(
|
|
116
113
|
category="Claude Desktop Installation",
|
|
117
114
|
status=DiagnosticStatus.OK,
|
|
118
115
|
message="Claude Desktop installed (macOS)",
|
|
119
|
-
details={"path": str(mac_path), "platform": "macos"}
|
|
116
|
+
details={"path": str(mac_path), "platform": "macos"},
|
|
120
117
|
)
|
|
121
|
-
|
|
118
|
+
|
|
122
119
|
for path in linux_paths:
|
|
123
120
|
if path.exists():
|
|
124
121
|
return DiagnosticResult(
|
|
125
122
|
category="Claude Desktop Installation",
|
|
126
123
|
status=DiagnosticStatus.OK,
|
|
127
124
|
message="Claude Desktop installed (Linux)",
|
|
128
|
-
details={"path": str(path), "platform": "linux"}
|
|
125
|
+
details={"path": str(path), "platform": "linux"},
|
|
129
126
|
)
|
|
130
|
-
|
|
127
|
+
|
|
131
128
|
for path in windows_paths:
|
|
132
129
|
if path.exists():
|
|
133
130
|
return DiagnosticResult(
|
|
134
131
|
category="Claude Desktop Installation",
|
|
135
132
|
status=DiagnosticStatus.OK,
|
|
136
133
|
message="Claude Desktop installed (Windows)",
|
|
137
|
-
details={"path": str(path), "platform": "windows"}
|
|
134
|
+
details={"path": str(path), "platform": "windows"},
|
|
138
135
|
)
|
|
139
|
-
|
|
136
|
+
|
|
140
137
|
return DiagnosticResult(
|
|
141
138
|
category="Claude Desktop Installation",
|
|
142
139
|
status=DiagnosticStatus.WARNING,
|
|
143
140
|
message="Claude Desktop not found",
|
|
144
141
|
details={"installed": False},
|
|
145
|
-
fix_description="Install Claude Desktop from https://claude.ai/download"
|
|
142
|
+
fix_description="Install Claude Desktop from https://claude.ai/download",
|
|
146
143
|
)
|
|
147
|
-
|
|
144
|
+
|
|
148
145
|
def _check_version(self) -> DiagnosticResult:
|
|
149
146
|
"""Check Claude Desktop version compatibility."""
|
|
150
147
|
# Try to get version from config file
|
|
151
148
|
config_paths = [
|
|
152
149
|
Path.home() / "Library/Application Support/Claude/config.json", # macOS
|
|
153
150
|
Path.home() / ".config/Claude/config.json", # Linux
|
|
154
|
-
Path.home() / "AppData/Roaming/Claude/config.json" # Windows
|
|
151
|
+
Path.home() / "AppData/Roaming/Claude/config.json", # Windows
|
|
155
152
|
]
|
|
156
|
-
|
|
153
|
+
|
|
157
154
|
for config_path in config_paths:
|
|
158
155
|
if config_path.exists():
|
|
159
156
|
try:
|
|
160
|
-
with open(config_path
|
|
157
|
+
with open(config_path) as f:
|
|
161
158
|
config = json.load(f)
|
|
162
159
|
version = config.get("version", "unknown")
|
|
163
|
-
|
|
160
|
+
|
|
164
161
|
# Simple version check (would need real version comparison logic)
|
|
165
162
|
return DiagnosticResult(
|
|
166
163
|
category="Claude Desktop Version",
|
|
167
164
|
status=DiagnosticStatus.OK,
|
|
168
165
|
message=f"Version: {version}",
|
|
169
|
-
details={
|
|
166
|
+
details={
|
|
167
|
+
"version": version,
|
|
168
|
+
"config_path": str(config_path),
|
|
169
|
+
},
|
|
170
170
|
)
|
|
171
171
|
except Exception:
|
|
172
172
|
pass
|
|
173
|
-
|
|
173
|
+
|
|
174
174
|
return DiagnosticResult(
|
|
175
175
|
category="Claude Desktop Version",
|
|
176
176
|
status=DiagnosticStatus.WARNING,
|
|
177
177
|
message="Could not determine version",
|
|
178
|
-
details={"version": "unknown"}
|
|
178
|
+
details={"version": "unknown"},
|
|
179
179
|
)
|
|
180
|
-
|
|
180
|
+
|
|
181
181
|
def _check_output_style(self) -> DiagnosticResult:
|
|
182
182
|
"""Check if output style is deployed."""
|
|
183
183
|
style_path = Path.home() / ".claude/responses/OUTPUT_STYLE.md"
|
|
184
|
-
|
|
184
|
+
|
|
185
185
|
if not style_path.exists():
|
|
186
186
|
return DiagnosticResult(
|
|
187
187
|
category="Output Style",
|
|
@@ -189,46 +189,50 @@ class ClaudeDesktopCheck(BaseDiagnosticCheck):
|
|
|
189
189
|
message="Output style not deployed",
|
|
190
190
|
details={"deployed": False, "path": str(style_path)},
|
|
191
191
|
fix_command="claude-mpm deploy-style",
|
|
192
|
-
fix_description="Deploy claude-mpm output style for better formatting"
|
|
192
|
+
fix_description="Deploy claude-mpm output style for better formatting",
|
|
193
193
|
)
|
|
194
|
-
|
|
194
|
+
|
|
195
195
|
# Check if it's up to date
|
|
196
196
|
try:
|
|
197
|
-
with open(style_path
|
|
197
|
+
with open(style_path) as f:
|
|
198
198
|
content = f.read()
|
|
199
199
|
if "Claude MPM Output Style" in content:
|
|
200
200
|
return DiagnosticResult(
|
|
201
201
|
category="Output Style",
|
|
202
202
|
status=DiagnosticStatus.OK,
|
|
203
203
|
message="Output style deployed",
|
|
204
|
-
details={"deployed": True, "path": str(style_path)}
|
|
205
|
-
)
|
|
206
|
-
else:
|
|
207
|
-
return DiagnosticResult(
|
|
208
|
-
category="Output Style",
|
|
209
|
-
status=DiagnosticStatus.WARNING,
|
|
210
|
-
message="Output style outdated",
|
|
211
|
-
details={"deployed": True, "outdated": True, "path": str(style_path)},
|
|
212
|
-
fix_command="claude-mpm deploy-style --force",
|
|
213
|
-
fix_description="Update output style to latest version"
|
|
204
|
+
details={"deployed": True, "path": str(style_path)},
|
|
214
205
|
)
|
|
206
|
+
return DiagnosticResult(
|
|
207
|
+
category="Output Style",
|
|
208
|
+
status=DiagnosticStatus.WARNING,
|
|
209
|
+
message="Output style outdated",
|
|
210
|
+
details={
|
|
211
|
+
"deployed": True,
|
|
212
|
+
"outdated": True,
|
|
213
|
+
"path": str(style_path),
|
|
214
|
+
},
|
|
215
|
+
fix_command="claude-mpm deploy-style --force",
|
|
216
|
+
fix_description="Update output style to latest version",
|
|
217
|
+
)
|
|
215
218
|
except Exception as e:
|
|
216
219
|
return DiagnosticResult(
|
|
217
220
|
category="Output Style",
|
|
218
221
|
status=DiagnosticStatus.WARNING,
|
|
219
|
-
message=f"Could not check output style: {
|
|
220
|
-
details={"error": str(e)}
|
|
222
|
+
message=f"Could not check output style: {e!s}",
|
|
223
|
+
details={"error": str(e)},
|
|
221
224
|
)
|
|
222
|
-
|
|
225
|
+
|
|
223
226
|
def _check_mcp_integration(self) -> DiagnosticResult:
|
|
224
227
|
"""Check MCP server integration with Claude Desktop."""
|
|
225
228
|
config_path = Path.home() / ".config/claude/claude_desktop_config.json"
|
|
226
|
-
|
|
229
|
+
|
|
227
230
|
if not config_path.exists():
|
|
228
231
|
# Try alternate paths
|
|
229
232
|
alt_paths = [
|
|
230
|
-
Path.home()
|
|
231
|
-
|
|
233
|
+
Path.home()
|
|
234
|
+
/ "Library/Application Support/Claude/claude_desktop_config.json",
|
|
235
|
+
Path.home() / "AppData/Roaming/Claude/claude_desktop_config.json",
|
|
232
236
|
]
|
|
233
237
|
for alt_path in alt_paths:
|
|
234
238
|
if alt_path.exists():
|
|
@@ -241,13 +245,13 @@ class ClaudeDesktopCheck(BaseDiagnosticCheck):
|
|
|
241
245
|
message="Claude Desktop config not found",
|
|
242
246
|
details={"configured": False},
|
|
243
247
|
fix_command="claude-mpm mcp install",
|
|
244
|
-
fix_description="Install MCP server integration"
|
|
248
|
+
fix_description="Install MCP server integration",
|
|
245
249
|
)
|
|
246
|
-
|
|
250
|
+
|
|
247
251
|
try:
|
|
248
|
-
with open(config_path
|
|
252
|
+
with open(config_path) as f:
|
|
249
253
|
config = json.load(f)
|
|
250
|
-
|
|
254
|
+
|
|
251
255
|
mcp_servers = config.get("mcpServers", {})
|
|
252
256
|
if "claude-mpm-gateway" in mcp_servers:
|
|
253
257
|
return DiagnosticResult(
|
|
@@ -257,27 +261,26 @@ class ClaudeDesktopCheck(BaseDiagnosticCheck):
|
|
|
257
261
|
details={
|
|
258
262
|
"configured": True,
|
|
259
263
|
"server_count": len(mcp_servers),
|
|
260
|
-
"config_path": str(config_path)
|
|
261
|
-
}
|
|
262
|
-
)
|
|
263
|
-
else:
|
|
264
|
-
return DiagnosticResult(
|
|
265
|
-
category="MCP Integration",
|
|
266
|
-
status=DiagnosticStatus.WARNING,
|
|
267
|
-
message="MCP server not configured",
|
|
268
|
-
details={
|
|
269
|
-
"configured": False,
|
|
270
|
-
"server_count": len(mcp_servers),
|
|
271
|
-
"config_path": str(config_path)
|
|
264
|
+
"config_path": str(config_path),
|
|
272
265
|
},
|
|
273
|
-
fix_command="claude-mpm mcp install",
|
|
274
|
-
fix_description="Configure MCP server for Claude Desktop"
|
|
275
266
|
)
|
|
276
|
-
|
|
267
|
+
return DiagnosticResult(
|
|
268
|
+
category="MCP Integration",
|
|
269
|
+
status=DiagnosticStatus.WARNING,
|
|
270
|
+
message="MCP server not configured",
|
|
271
|
+
details={
|
|
272
|
+
"configured": False,
|
|
273
|
+
"server_count": len(mcp_servers),
|
|
274
|
+
"config_path": str(config_path),
|
|
275
|
+
},
|
|
276
|
+
fix_command="claude-mpm mcp install",
|
|
277
|
+
fix_description="Configure MCP server for Claude Desktop",
|
|
278
|
+
)
|
|
279
|
+
|
|
277
280
|
except Exception as e:
|
|
278
281
|
return DiagnosticResult(
|
|
279
282
|
category="MCP Integration",
|
|
280
283
|
status=DiagnosticStatus.WARNING,
|
|
281
|
-
message=f"Could not check MCP configuration: {
|
|
282
|
-
details={"error": str(e)}
|
|
283
|
-
)
|
|
284
|
+
message=f"Could not check MCP configuration: {e!s}",
|
|
285
|
+
details={"error": str(e)},
|
|
286
|
+
)
|