claude-mpm 3.9.11__py3-none-any.whl → 4.0.3__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/__init__.py +2 -2
- claude_mpm/__main__.py +3 -2
- claude_mpm/agents/__init__.py +85 -79
- claude_mpm/agents/agent_loader.py +464 -1003
- claude_mpm/agents/agent_loader_integration.py +45 -45
- claude_mpm/agents/agents_metadata.py +29 -30
- claude_mpm/agents/async_agent_loader.py +156 -138
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/base_agent_loader.py +179 -151
- claude_mpm/agents/frontmatter_validator.py +229 -130
- claude_mpm/agents/schema/agent_schema.json +1 -1
- claude_mpm/agents/system_agent_config.py +213 -147
- claude_mpm/agents/templates/__init__.py +13 -13
- claude_mpm/agents/templates/code_analyzer.json +2 -2
- claude_mpm/agents/templates/data_engineer.json +1 -1
- claude_mpm/agents/templates/documentation.json +23 -11
- claude_mpm/agents/templates/engineer.json +22 -6
- claude_mpm/agents/templates/memory_manager.json +1 -1
- claude_mpm/agents/templates/ops.json +2 -2
- claude_mpm/agents/templates/project_organizer.json +1 -1
- claude_mpm/agents/templates/qa.json +1 -1
- claude_mpm/agents/templates/refactoring_engineer.json +222 -0
- claude_mpm/agents/templates/research.json +20 -14
- claude_mpm/agents/templates/security.json +1 -1
- claude_mpm/agents/templates/ticketing.json +1 -1
- claude_mpm/agents/templates/version_control.json +1 -1
- claude_mpm/agents/templates/web_qa.json +3 -1
- claude_mpm/agents/templates/web_ui.json +2 -2
- claude_mpm/cli/__init__.py +79 -51
- claude_mpm/cli/__main__.py +3 -2
- claude_mpm/cli/commands/__init__.py +20 -20
- claude_mpm/cli/commands/agents.py +279 -247
- claude_mpm/cli/commands/aggregate.py +138 -157
- claude_mpm/cli/commands/cleanup.py +147 -147
- claude_mpm/cli/commands/config.py +93 -76
- claude_mpm/cli/commands/info.py +17 -16
- claude_mpm/cli/commands/mcp.py +140 -905
- claude_mpm/cli/commands/mcp_command_router.py +139 -0
- claude_mpm/cli/commands/mcp_config_commands.py +20 -0
- claude_mpm/cli/commands/mcp_install_commands.py +20 -0
- claude_mpm/cli/commands/mcp_server_commands.py +175 -0
- claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
- claude_mpm/cli/commands/memory.py +239 -203
- claude_mpm/cli/commands/monitor.py +203 -81
- claude_mpm/cli/commands/run.py +380 -429
- claude_mpm/cli/commands/run_config_checker.py +160 -0
- claude_mpm/cli/commands/socketio_monitor.py +235 -0
- claude_mpm/cli/commands/tickets.py +305 -197
- claude_mpm/cli/parser.py +24 -1156
- claude_mpm/cli/parsers/__init__.py +29 -0
- claude_mpm/cli/parsers/agents_parser.py +136 -0
- claude_mpm/cli/parsers/base_parser.py +331 -0
- claude_mpm/cli/parsers/config_parser.py +85 -0
- claude_mpm/cli/parsers/mcp_parser.py +152 -0
- claude_mpm/cli/parsers/memory_parser.py +138 -0
- claude_mpm/cli/parsers/monitor_parser.py +104 -0
- claude_mpm/cli/parsers/run_parser.py +147 -0
- claude_mpm/cli/parsers/tickets_parser.py +203 -0
- claude_mpm/cli/ticket_cli.py +7 -3
- claude_mpm/cli/utils.py +55 -37
- claude_mpm/cli_module/__init__.py +6 -6
- claude_mpm/cli_module/args.py +188 -140
- claude_mpm/cli_module/commands.py +79 -70
- claude_mpm/cli_module/migration_example.py +38 -60
- claude_mpm/config/__init__.py +32 -25
- claude_mpm/config/agent_config.py +151 -119
- claude_mpm/config/experimental_features.py +71 -73
- claude_mpm/config/paths.py +94 -208
- claude_mpm/config/socketio_config.py +84 -73
- claude_mpm/constants.py +35 -18
- claude_mpm/core/__init__.py +9 -6
- claude_mpm/core/agent_name_normalizer.py +68 -71
- claude_mpm/core/agent_registry.py +372 -521
- claude_mpm/core/agent_session_manager.py +74 -63
- claude_mpm/core/base_service.py +116 -87
- claude_mpm/core/cache.py +119 -153
- claude_mpm/core/claude_runner.py +425 -1120
- claude_mpm/core/config.py +263 -168
- claude_mpm/core/config_aliases.py +69 -61
- claude_mpm/core/config_constants.py +292 -0
- claude_mpm/core/constants.py +57 -99
- claude_mpm/core/container.py +211 -178
- claude_mpm/core/exceptions.py +233 -89
- claude_mpm/core/factories.py +92 -54
- claude_mpm/core/framework_loader.py +378 -220
- claude_mpm/core/hook_manager.py +198 -83
- claude_mpm/core/hook_performance_config.py +136 -0
- claude_mpm/core/injectable_service.py +61 -55
- claude_mpm/core/interactive_session.py +165 -155
- claude_mpm/core/interfaces.py +221 -195
- claude_mpm/core/lazy.py +96 -96
- claude_mpm/core/logger.py +133 -107
- claude_mpm/core/logging_config.py +185 -157
- claude_mpm/core/minimal_framework_loader.py +20 -15
- claude_mpm/core/mixins.py +30 -29
- claude_mpm/core/oneshot_session.py +215 -181
- claude_mpm/core/optimized_agent_loader.py +134 -138
- claude_mpm/core/optimized_startup.py +159 -157
- claude_mpm/core/pm_hook_interceptor.py +85 -72
- claude_mpm/core/service_registry.py +103 -101
- claude_mpm/core/session_manager.py +97 -87
- claude_mpm/core/socketio_pool.py +212 -158
- claude_mpm/core/tool_access_control.py +58 -51
- claude_mpm/core/types.py +46 -24
- claude_mpm/core/typing_utils.py +166 -82
- claude_mpm/core/unified_agent_registry.py +721 -0
- claude_mpm/core/unified_config.py +550 -0
- claude_mpm/core/unified_paths.py +549 -0
- claude_mpm/dashboard/index.html +1 -1
- claude_mpm/dashboard/open_dashboard.py +51 -17
- claude_mpm/dashboard/static/css/dashboard.css +27 -8
- claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
- claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
- claude_mpm/dashboard/static/dist/dashboard.js +2 -0
- claude_mpm/dashboard/static/dist/socket-client.js +2 -0
- claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
- claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
- claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
- claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
- claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
- claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
- claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
- claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
- claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
- claude_mpm/dashboard/static/js/dashboard.js +178 -453
- claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/js/socket-client.js +120 -54
- claude_mpm/dashboard/templates/index.html +40 -50
- claude_mpm/experimental/cli_enhancements.py +60 -58
- claude_mpm/generators/__init__.py +1 -1
- claude_mpm/generators/agent_profile_generator.py +75 -65
- claude_mpm/hooks/__init__.py +1 -1
- claude_mpm/hooks/base_hook.py +33 -28
- claude_mpm/hooks/claude_hooks/__init__.py +1 -1
- claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
- claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
- claude_mpm/hooks/memory_integration_hook.py +140 -100
- claude_mpm/hooks/tool_call_interceptor.py +89 -76
- claude_mpm/hooks/validation_hooks.py +57 -49
- claude_mpm/init.py +145 -121
- claude_mpm/models/__init__.py +9 -9
- claude_mpm/models/agent_definition.py +33 -23
- claude_mpm/models/agent_session.py +228 -200
- claude_mpm/scripts/__init__.py +1 -1
- claude_mpm/scripts/socketio_daemon.py +192 -75
- claude_mpm/scripts/socketio_server_manager.py +328 -0
- claude_mpm/scripts/start_activity_logging.py +25 -22
- claude_mpm/services/__init__.py +68 -43
- claude_mpm/services/agent_capabilities_service.py +271 -0
- claude_mpm/services/agents/__init__.py +23 -32
- claude_mpm/services/agents/deployment/__init__.py +3 -3
- claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
- claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
- claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
- claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
- claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
- claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
- claude_mpm/services/agents/deployment/agent_validator.py +352 -0
- claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
- claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
- claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
- claude_mpm/services/agents/deployment/config/__init__.py +13 -0
- claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
- claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
- claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
- claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
- claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
- claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
- claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
- claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
- claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
- claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
- claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
- claude_mpm/services/agents/deployment/results/__init__.py +13 -0
- claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
- claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
- claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
- claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
- claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
- claude_mpm/services/agents/loading/__init__.py +2 -2
- claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
- claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
- claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
- claude_mpm/services/agents/management/__init__.py +2 -2
- claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
- claude_mpm/services/agents/management/agent_management_service.py +209 -156
- claude_mpm/services/agents/memory/__init__.py +9 -6
- claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
- claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
- claude_mpm/services/agents/memory/analyzer.py +430 -0
- claude_mpm/services/agents/memory/content_manager.py +376 -0
- claude_mpm/services/agents/memory/template_generator.py +468 -0
- claude_mpm/services/agents/registry/__init__.py +7 -10
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
- claude_mpm/services/agents/registry/modification_tracker.py +351 -285
- claude_mpm/services/async_session_logger.py +187 -153
- claude_mpm/services/claude_session_logger.py +87 -72
- claude_mpm/services/command_handler_service.py +217 -0
- claude_mpm/services/communication/__init__.py +3 -2
- claude_mpm/services/core/__init__.py +50 -97
- claude_mpm/services/core/base.py +60 -53
- claude_mpm/services/core/interfaces/__init__.py +188 -0
- claude_mpm/services/core/interfaces/agent.py +351 -0
- claude_mpm/services/core/interfaces/communication.py +343 -0
- claude_mpm/services/core/interfaces/infrastructure.py +413 -0
- claude_mpm/services/core/interfaces/service.py +434 -0
- claude_mpm/services/core/interfaces.py +19 -944
- claude_mpm/services/event_aggregator.py +208 -170
- claude_mpm/services/exceptions.py +387 -308
- claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
- claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
- claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
- claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
- claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
- claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
- claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
- claude_mpm/services/hook_service.py +106 -114
- claude_mpm/services/infrastructure/__init__.py +7 -5
- claude_mpm/services/infrastructure/context_preservation.py +233 -199
- claude_mpm/services/infrastructure/daemon_manager.py +279 -0
- claude_mpm/services/infrastructure/logging.py +83 -76
- claude_mpm/services/infrastructure/monitoring.py +547 -404
- claude_mpm/services/mcp_gateway/__init__.py +30 -13
- claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
- claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
- claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
- claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
- claude_mpm/services/mcp_gateway/core/base.py +80 -67
- claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
- claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
- claude_mpm/services/mcp_gateway/main.py +287 -137
- claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
- claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
- claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
- claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
- claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
- claude_mpm/services/memory/__init__.py +2 -2
- claude_mpm/services/memory/builder.py +451 -362
- claude_mpm/services/memory/cache/__init__.py +2 -2
- claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
- claude_mpm/services/memory/cache/simple_cache.py +107 -93
- claude_mpm/services/memory/indexed_memory.py +195 -193
- claude_mpm/services/memory/optimizer.py +267 -234
- claude_mpm/services/memory/router.py +571 -263
- claude_mpm/services/memory_hook_service.py +237 -0
- claude_mpm/services/port_manager.py +223 -0
- claude_mpm/services/project/__init__.py +3 -3
- claude_mpm/services/project/analyzer.py +451 -305
- claude_mpm/services/project/registry.py +262 -240
- claude_mpm/services/recovery_manager.py +287 -231
- claude_mpm/services/response_tracker.py +87 -67
- claude_mpm/services/runner_configuration_service.py +587 -0
- claude_mpm/services/session_management_service.py +304 -0
- claude_mpm/services/socketio/__init__.py +4 -4
- claude_mpm/services/socketio/client_proxy.py +174 -0
- claude_mpm/services/socketio/handlers/__init__.py +3 -3
- claude_mpm/services/socketio/handlers/base.py +44 -30
- claude_mpm/services/socketio/handlers/connection.py +145 -65
- claude_mpm/services/socketio/handlers/file.py +123 -108
- claude_mpm/services/socketio/handlers/git.py +607 -373
- claude_mpm/services/socketio/handlers/hook.py +170 -0
- claude_mpm/services/socketio/handlers/memory.py +4 -4
- claude_mpm/services/socketio/handlers/project.py +4 -4
- claude_mpm/services/socketio/handlers/registry.py +53 -38
- claude_mpm/services/socketio/server/__init__.py +18 -0
- claude_mpm/services/socketio/server/broadcaster.py +252 -0
- claude_mpm/services/socketio/server/core.py +399 -0
- claude_mpm/services/socketio/server/main.py +323 -0
- claude_mpm/services/socketio_client_manager.py +160 -133
- claude_mpm/services/socketio_server.py +36 -1885
- claude_mpm/services/subprocess_launcher_service.py +316 -0
- claude_mpm/services/system_instructions_service.py +258 -0
- claude_mpm/services/ticket_manager.py +19 -533
- claude_mpm/services/utility_service.py +285 -0
- claude_mpm/services/version_control/__init__.py +18 -21
- claude_mpm/services/version_control/branch_strategy.py +20 -10
- claude_mpm/services/version_control/conflict_resolution.py +37 -13
- claude_mpm/services/version_control/git_operations.py +52 -21
- claude_mpm/services/version_control/semantic_versioning.py +92 -53
- claude_mpm/services/version_control/version_parser.py +145 -125
- claude_mpm/services/version_service.py +270 -0
- claude_mpm/storage/__init__.py +2 -2
- claude_mpm/storage/state_storage.py +177 -181
- claude_mpm/ticket_wrapper.py +2 -2
- claude_mpm/utils/__init__.py +2 -2
- claude_mpm/utils/agent_dependency_loader.py +453 -243
- claude_mpm/utils/config_manager.py +157 -118
- claude_mpm/utils/console.py +1 -1
- claude_mpm/utils/dependency_cache.py +102 -107
- claude_mpm/utils/dependency_manager.py +52 -47
- claude_mpm/utils/dependency_strategies.py +131 -96
- claude_mpm/utils/environment_context.py +110 -102
- claude_mpm/utils/error_handler.py +75 -55
- claude_mpm/utils/file_utils.py +80 -67
- claude_mpm/utils/framework_detection.py +12 -11
- claude_mpm/utils/import_migration_example.py +12 -60
- claude_mpm/utils/imports.py +48 -45
- claude_mpm/utils/path_operations.py +100 -93
- claude_mpm/utils/robust_installer.py +172 -164
- claude_mpm/utils/session_logging.py +30 -23
- claude_mpm/utils/subprocess_utils.py +99 -61
- claude_mpm/validation/__init__.py +1 -1
- claude_mpm/validation/agent_validator.py +151 -111
- claude_mpm/validation/frontmatter_validator.py +92 -71
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +27 -1
- claude_mpm-4.0.3.dist-info/RECORD +402 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
- claude_mpm/cli/commands/run_guarded.py +0 -511
- claude_mpm/config/memory_guardian_config.py +0 -325
- claude_mpm/config/memory_guardian_yaml.py +0 -335
- claude_mpm/core/config_paths.py +0 -150
- claude_mpm/core/memory_aware_runner.py +0 -353
- claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
- claude_mpm/deployment_paths.py +0 -261
- claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
- claude_mpm/models/state_models.py +0 -433
- claude_mpm/services/agent/__init__.py +0 -24
- claude_mpm/services/agent/deployment.py +0 -2548
- claude_mpm/services/agent/management.py +0 -598
- claude_mpm/services/agent/registry.py +0 -813
- claude_mpm/services/agents/registry/agent_registry.py +0 -813
- claude_mpm/services/communication/socketio.py +0 -1935
- claude_mpm/services/communication/websocket.py +0 -479
- claude_mpm/services/framework_claude_md_generator.py +0 -624
- claude_mpm/services/health_monitor.py +0 -893
- claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
- claude_mpm/services/infrastructure/health_monitor.py +0 -775
- claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
- claude_mpm/services/infrastructure/memory_guardian.py +0 -944
- claude_mpm/services/infrastructure/restart_protection.py +0 -642
- claude_mpm/services/infrastructure/state_manager.py +0 -774
- claude_mpm/services/mcp_gateway/manager.py +0 -334
- claude_mpm/services/optimized_hook_service.py +0 -542
- claude_mpm/services/project_analyzer.py +0 -864
- claude_mpm/services/project_registry.py +0 -608
- claude_mpm/services/standalone_socketio_server.py +0 -1300
- claude_mpm/services/ticket_manager_di.py +0 -318
- claude_mpm/services/ticketing_service_original.py +0 -510
- claude_mpm/utils/paths.py +0 -395
- claude_mpm/utils/platform_memory.py +0 -524
- claude_mpm-3.9.11.dist-info/RECORD +0 -306
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
| @@ -8,33 +8,32 @@ Provides service discovery, registration, and dependency resolution. | |
| 8 8 | 
             
            Part of ISS-0035: MCP Server Implementation - Core Server and Tool Registry
         | 
| 9 9 | 
             
            """
         | 
| 10 10 |  | 
| 11 | 
            -
            from typing import Dict, Any, Optional, Type, TypeVar, List
         | 
| 12 | 
            -
            from threading import RLock
         | 
| 13 11 | 
             
            import logging
         | 
| 12 | 
            +
            from threading import RLock
         | 
| 13 | 
            +
            from typing import Any, Dict, List, Optional, Type, TypeVar
         | 
| 14 14 |  | 
| 15 | 
            +
            from claude_mpm.core.logger import get_logger
         | 
| 16 | 
            +
            from claude_mpm.services.mcp_gateway.core.base import BaseMCPService
         | 
| 15 17 | 
             
            from claude_mpm.services.mcp_gateway.core.interfaces import (
         | 
| 16 | 
            -
                IMCPGateway,
         | 
| 17 | 
            -
                IMCPToolRegistry,
         | 
| 18 18 | 
             
                IMCPCommunication,
         | 
| 19 19 | 
             
                IMCPConfiguration,
         | 
| 20 | 
            +
                IMCPGateway,
         | 
| 21 | 
            +
                IMCPLifecycle,
         | 
| 20 22 | 
             
                IMCPToolAdapter,
         | 
| 21 | 
            -
                 | 
| 23 | 
            +
                IMCPToolRegistry,
         | 
| 22 24 | 
             
            )
         | 
| 23 | 
            -
            from claude_mpm.services.mcp_gateway.core.base import BaseMCPService
         | 
| 24 | 
            -
            from claude_mpm.core.logger import get_logger
         | 
| 25 | 
            -
             | 
| 26 25 |  | 
| 27 | 
            -
            T = TypeVar( | 
| 26 | 
            +
            T = TypeVar("T")
         | 
| 28 27 |  | 
| 29 28 |  | 
| 30 29 | 
             
            class MCPServiceRegistry:
         | 
| 31 30 | 
             
                """
         | 
| 32 31 | 
             
                Service registry for MCP Gateway components.
         | 
| 33 | 
            -
             | 
| 32 | 
            +
             | 
| 34 33 | 
             
                WHY: We need a centralized registry for managing MCP services,
         | 
| 35 34 | 
             
                enabling dependency injection and service discovery patterns.
         | 
| 36 35 | 
             
                This aligns with the claude-mpm service-oriented architecture.
         | 
| 37 | 
            -
             | 
| 36 | 
            +
             | 
| 38 37 | 
             
                DESIGN DECISIONS:
         | 
| 39 38 | 
             
                - Use interface-based registration for loose coupling
         | 
| 40 39 | 
             
                - Support singleton and transient service lifetimes
         | 
| @@ -42,43 +41,43 @@ class MCPServiceRegistry: | |
| 42 41 | 
             
                - Enable service health monitoring
         | 
| 43 42 | 
             
                - Support service dependency chains
         | 
| 44 43 | 
             
                """
         | 
| 45 | 
            -
             | 
| 44 | 
            +
             | 
| 46 45 | 
             
                def __init__(self):
         | 
| 47 46 | 
             
                    """Initialize the service registry."""
         | 
| 48 47 | 
             
                    self.logger = get_logger(self.__class__.__name__)
         | 
| 49 | 
            -
             | 
| 48 | 
            +
             | 
| 50 49 | 
             
                    # Thread safety
         | 
| 51 50 | 
             
                    self._lock = RLock()
         | 
| 52 | 
            -
             | 
| 51 | 
            +
             | 
| 53 52 | 
             
                    # Service storage
         | 
| 54 53 | 
             
                    self._services: Dict[Type, Any] = {}
         | 
| 55 54 | 
             
                    self._singletons: Dict[Type, Any] = {}
         | 
| 56 55 | 
             
                    self._factories: Dict[Type, callable] = {}
         | 
| 57 | 
            -
             | 
| 56 | 
            +
             | 
| 58 57 | 
             
                    # Service metadata
         | 
| 59 58 | 
             
                    self._metadata: Dict[Type, Dict[str, Any]] = {}
         | 
| 60 | 
            -
             | 
| 59 | 
            +
             | 
| 61 60 | 
             
                    # Service health tracking
         | 
| 62 61 | 
             
                    self._health_checks: Dict[Type, callable] = {}
         | 
| 63 | 
            -
             | 
| 62 | 
            +
             | 
| 64 63 | 
             
                def register(
         | 
| 65 64 | 
             
                    self,
         | 
| 66 65 | 
             
                    interface: Type[T],
         | 
| 67 66 | 
             
                    implementation: Optional[Type[T]] = None,
         | 
| 68 67 | 
             
                    factory: Optional[callable] = None,
         | 
| 69 68 | 
             
                    singleton: bool = True,
         | 
| 70 | 
            -
                    metadata: Optional[Dict[str, Any]] = None
         | 
| 69 | 
            +
                    metadata: Optional[Dict[str, Any]] = None,
         | 
| 71 70 | 
             
                ) -> None:
         | 
| 72 71 | 
             
                    """
         | 
| 73 72 | 
             
                    Register a service in the registry.
         | 
| 74 | 
            -
             | 
| 73 | 
            +
             | 
| 75 74 | 
             
                    Args:
         | 
| 76 75 | 
             
                        interface: Service interface type
         | 
| 77 76 | 
             
                        implementation: Service implementation class
         | 
| 78 77 | 
             
                        factory: Factory function to create service instances
         | 
| 79 78 | 
             
                        singleton: Whether to create a single instance
         | 
| 80 79 | 
             
                        metadata: Additional service metadata
         | 
| 81 | 
            -
             | 
| 80 | 
            +
             | 
| 82 81 | 
             
                    WHY: We support both direct implementation and factory patterns
         | 
| 83 82 | 
             
                    to provide flexibility in service instantiation. Singleton support
         | 
| 84 83 | 
             
                    enables efficient resource management.
         | 
| @@ -86,34 +85,34 @@ class MCPServiceRegistry: | |
| 86 85 | 
             
                    with self._lock:
         | 
| 87 86 | 
             
                        if implementation is None and factory is None:
         | 
| 88 87 | 
             
                            raise ValueError("Either implementation or factory must be provided")
         | 
| 89 | 
            -
             | 
| 88 | 
            +
             | 
| 90 89 | 
             
                        if implementation and factory:
         | 
| 91 90 | 
             
                            raise ValueError("Cannot provide both implementation and factory")
         | 
| 92 | 
            -
             | 
| 91 | 
            +
             | 
| 93 92 | 
             
                        self.logger.info(f"Registering service: {interface.__name__}")
         | 
| 94 | 
            -
             | 
| 93 | 
            +
             | 
| 95 94 | 
             
                        # Store service registration
         | 
| 96 95 | 
             
                        if implementation:
         | 
| 97 96 | 
             
                            self._services[interface] = implementation
         | 
| 98 97 | 
             
                        elif factory:
         | 
| 99 98 | 
             
                            self._factories[interface] = factory
         | 
| 100 | 
            -
             | 
| 99 | 
            +
             | 
| 101 100 | 
             
                        # Store metadata
         | 
| 102 101 | 
             
                        if metadata:
         | 
| 103 102 | 
             
                            self._metadata[interface] = metadata
         | 
| 104 103 | 
             
                        else:
         | 
| 105 104 | 
             
                            self._metadata[interface] = {"singleton": singleton}
         | 
| 106 | 
            -
             | 
| 105 | 
            +
             | 
| 107 106 | 
             
                        self._metadata[interface]["singleton"] = singleton
         | 
| 108 | 
            -
             | 
| 107 | 
            +
             | 
| 109 108 | 
             
                def register_instance(self, interface: Type[T], instance: T) -> None:
         | 
| 110 109 | 
             
                    """
         | 
| 111 110 | 
             
                    Register a pre-created service instance.
         | 
| 112 | 
            -
             | 
| 111 | 
            +
             | 
| 113 112 | 
             
                    Args:
         | 
| 114 113 | 
             
                        interface: Service interface type
         | 
| 115 114 | 
             
                        instance: Service instance
         | 
| 116 | 
            -
             | 
| 115 | 
            +
             | 
| 117 116 | 
             
                    WHY: Sometimes we need to register pre-configured instances,
         | 
| 118 117 | 
             
                    especially for services with complex initialization.
         | 
| 119 118 | 
             
                    """
         | 
| @@ -121,17 +120,17 @@ class MCPServiceRegistry: | |
| 121 120 | 
             
                        self.logger.info(f"Registering instance: {interface.__name__}")
         | 
| 122 121 | 
             
                        self._singletons[interface] = instance
         | 
| 123 122 | 
             
                        self._metadata[interface] = {"singleton": True, "instance": True}
         | 
| 124 | 
            -
             | 
| 123 | 
            +
             | 
| 125 124 | 
             
                def resolve(self, interface: Type[T]) -> Optional[T]:
         | 
| 126 125 | 
             
                    """
         | 
| 127 126 | 
             
                    Resolve a service from the registry.
         | 
| 128 | 
            -
             | 
| 127 | 
            +
             | 
| 129 128 | 
             
                    Args:
         | 
| 130 129 | 
             
                        interface: Service interface type
         | 
| 131 | 
            -
             | 
| 130 | 
            +
             | 
| 132 131 | 
             
                    Returns:
         | 
| 133 132 | 
             
                        Service instance or None if not found
         | 
| 134 | 
            -
             | 
| 133 | 
            +
             | 
| 135 134 | 
             
                    WHY: We use lazy instantiation for non-singleton services
         | 
| 136 135 | 
             
                    and cache singletons for performance.
         | 
| 137 136 | 
             
                    """
         | 
| @@ -139,134 +138,139 @@ class MCPServiceRegistry: | |
| 139 138 | 
             
                        # Check for existing singleton
         | 
| 140 139 | 
             
                        if interface in self._singletons:
         | 
| 141 140 | 
             
                            return self._singletons[interface]
         | 
| 142 | 
            -
             | 
| 141 | 
            +
             | 
| 143 142 | 
             
                        # Check for factory
         | 
| 144 143 | 
             
                        if interface in self._factories:
         | 
| 145 144 | 
             
                            factory = self._factories[interface]
         | 
| 146 145 | 
             
                            instance = factory()
         | 
| 147 | 
            -
             | 
| 146 | 
            +
             | 
| 148 147 | 
             
                            # Cache if singleton
         | 
| 149 148 | 
             
                            if self._metadata.get(interface, {}).get("singleton", False):
         | 
| 150 149 | 
             
                                self._singletons[interface] = instance
         | 
| 151 | 
            -
             | 
| 150 | 
            +
             | 
| 152 151 | 
             
                            return instance
         | 
| 153 | 
            -
             | 
| 152 | 
            +
             | 
| 154 153 | 
             
                        # Check for implementation class
         | 
| 155 154 | 
             
                        if interface in self._services:
         | 
| 156 155 | 
             
                            implementation = self._services[interface]
         | 
| 157 | 
            -
             | 
| 156 | 
            +
             | 
| 158 157 | 
             
                            # Create instance
         | 
| 159 158 | 
             
                            try:
         | 
| 160 159 | 
             
                                instance = implementation()
         | 
| 161 | 
            -
             | 
| 160 | 
            +
             | 
| 162 161 | 
             
                                # Cache if singleton
         | 
| 163 162 | 
             
                                if self._metadata.get(interface, {}).get("singleton", True):
         | 
| 164 163 | 
             
                                    self._singletons[interface] = instance
         | 
| 165 | 
            -
             | 
| 164 | 
            +
             | 
| 166 165 | 
             
                                return instance
         | 
| 167 | 
            -
             | 
| 166 | 
            +
             | 
| 168 167 | 
             
                            except Exception as e:
         | 
| 169 | 
            -
                                self.logger.error( | 
| 168 | 
            +
                                self.logger.error(
         | 
| 169 | 
            +
                                    f"Failed to create service {interface.__name__}: {e}"
         | 
| 170 | 
            +
                                )
         | 
| 170 171 | 
             
                                return None
         | 
| 171 | 
            -
             | 
| 172 | 
            +
             | 
| 172 173 | 
             
                        self.logger.warning(f"Service not found: {interface.__name__}")
         | 
| 173 174 | 
             
                        return None
         | 
| 174 | 
            -
             | 
| 175 | 
            +
             | 
| 175 176 | 
             
                def resolve_all(self, interface: Type[T]) -> List[T]:
         | 
| 176 177 | 
             
                    """
         | 
| 177 178 | 
             
                    Resolve all services implementing an interface.
         | 
| 178 | 
            -
             | 
| 179 | 
            +
             | 
| 179 180 | 
             
                    Args:
         | 
| 180 181 | 
             
                        interface: Service interface type
         | 
| 181 | 
            -
             | 
| 182 | 
            +
             | 
| 182 183 | 
             
                    Returns:
         | 
| 183 184 | 
             
                        List of service instances
         | 
| 184 | 
            -
             | 
| 185 | 
            +
             | 
| 185 186 | 
             
                    WHY: Some scenarios require multiple implementations of
         | 
| 186 187 | 
             
                    the same interface (e.g., multiple tool adapters).
         | 
| 187 188 | 
             
                    """
         | 
| 188 189 | 
             
                    with self._lock:
         | 
| 189 190 | 
             
                        instances = []
         | 
| 190 | 
            -
             | 
| 191 | 
            +
             | 
| 191 192 | 
             
                        # Add singleton if exists
         | 
| 192 193 | 
             
                        if interface in self._singletons:
         | 
| 193 194 | 
             
                            instances.append(self._singletons[interface])
         | 
| 194 | 
            -
             | 
| 195 | 
            +
             | 
| 195 196 | 
             
                        # Note: In a full implementation, we'd track multiple
         | 
| 196 197 | 
             
                        # registrations per interface
         | 
| 197 | 
            -
             | 
| 198 | 
            +
             | 
| 198 199 | 
             
                        return instances
         | 
| 199 | 
            -
             | 
| 200 | 
            +
             | 
| 200 201 | 
             
                def unregister(self, interface: Type) -> bool:
         | 
| 201 202 | 
             
                    """
         | 
| 202 203 | 
             
                    Unregister a service from the registry.
         | 
| 203 | 
            -
             | 
| 204 | 
            +
             | 
| 204 205 | 
             
                    Args:
         | 
| 205 206 | 
             
                        interface: Service interface type
         | 
| 206 | 
            -
             | 
| 207 | 
            +
             | 
| 207 208 | 
             
                    Returns:
         | 
| 208 209 | 
             
                        True if unregistration successful
         | 
| 209 210 | 
             
                    """
         | 
| 210 211 | 
             
                    with self._lock:
         | 
| 211 212 | 
             
                        found = False
         | 
| 212 | 
            -
             | 
| 213 | 
            +
             | 
| 213 214 | 
             
                        if interface in self._services:
         | 
| 214 215 | 
             
                            del self._services[interface]
         | 
| 215 216 | 
             
                            found = True
         | 
| 216 | 
            -
             | 
| 217 | 
            +
             | 
| 217 218 | 
             
                        if interface in self._factories:
         | 
| 218 219 | 
             
                            del self._factories[interface]
         | 
| 219 220 | 
             
                            found = True
         | 
| 220 | 
            -
             | 
| 221 | 
            +
             | 
| 221 222 | 
             
                        if interface in self._singletons:
         | 
| 222 223 | 
             
                            # Shutdown if it's a lifecycle service
         | 
| 223 224 | 
             
                            instance = self._singletons[interface]
         | 
| 224 225 | 
             
                            if isinstance(instance, IMCPLifecycle):
         | 
| 225 226 | 
             
                                try:
         | 
| 226 227 | 
             
                                    import asyncio
         | 
| 228 | 
            +
             | 
| 227 229 | 
             
                                    asyncio.create_task(instance.stop())
         | 
| 228 230 | 
             
                                except Exception as e:
         | 
| 229 | 
            -
                                    self.logger.warning( | 
| 230 | 
            -
             | 
| 231 | 
            +
                                    self.logger.warning(
         | 
| 232 | 
            +
                                        f"Error stopping service {interface.__name__}: {e}"
         | 
| 233 | 
            +
                                    )
         | 
| 234 | 
            +
             | 
| 231 235 | 
             
                            del self._singletons[interface]
         | 
| 232 236 | 
             
                            found = True
         | 
| 233 | 
            -
             | 
| 237 | 
            +
             | 
| 234 238 | 
             
                        if interface in self._metadata:
         | 
| 235 239 | 
             
                            del self._metadata[interface]
         | 
| 236 | 
            -
             | 
| 240 | 
            +
             | 
| 237 241 | 
             
                        if interface in self._health_checks:
         | 
| 238 242 | 
             
                            del self._health_checks[interface]
         | 
| 239 | 
            -
             | 
| 243 | 
            +
             | 
| 240 244 | 
             
                        if found:
         | 
| 241 245 | 
             
                            self.logger.info(f"Unregistered service: {interface.__name__}")
         | 
| 242 | 
            -
             | 
| 246 | 
            +
             | 
| 243 247 | 
             
                        return found
         | 
| 244 | 
            -
             | 
| 248 | 
            +
             | 
| 245 249 | 
             
                def register_health_check(self, interface: Type, health_check: callable) -> None:
         | 
| 246 250 | 
             
                    """
         | 
| 247 251 | 
             
                    Register a health check for a service.
         | 
| 248 | 
            -
             | 
| 252 | 
            +
             | 
| 249 253 | 
             
                    Args:
         | 
| 250 254 | 
             
                        interface: Service interface type
         | 
| 251 255 | 
             
                        health_check: Health check function
         | 
| 252 256 | 
             
                    """
         | 
| 253 257 | 
             
                    with self._lock:
         | 
| 254 258 | 
             
                        self._health_checks[interface] = health_check
         | 
| 255 | 
            -
             | 
| 259 | 
            +
             | 
| 256 260 | 
             
                async def check_health(self) -> Dict[str, Any]:
         | 
| 257 261 | 
             
                    """
         | 
| 258 262 | 
             
                    Check health of all registered services.
         | 
| 259 | 
            -
             | 
| 263 | 
            +
             | 
| 260 264 | 
             
                    Returns:
         | 
| 261 265 | 
             
                        Dictionary of service health statuses
         | 
| 262 266 | 
             
                    """
         | 
| 263 267 | 
             
                    health_status = {}
         | 
| 264 | 
            -
             | 
| 268 | 
            +
             | 
| 265 269 | 
             
                    with self._lock:
         | 
| 266 270 | 
             
                        # Check singleton services
         | 
| 267 271 | 
             
                        for interface, instance in self._singletons.items():
         | 
| 268 272 | 
             
                            service_name = interface.__name__
         | 
| 269 | 
            -
             | 
| 273 | 
            +
             | 
| 270 274 | 
             
                            try:
         | 
| 271 275 | 
             
                                # Use custom health check if available
         | 
| 272 276 | 
             
                                if interface in self._health_checks:
         | 
| @@ -276,47 +280,44 @@ class MCPServiceRegistry: | |
| 276 280 | 
             
                                    else:
         | 
| 277 281 | 
             
                                        health = health_check(instance)
         | 
| 278 282 | 
             
                                    health_status[service_name] = health
         | 
| 279 | 
            -
             | 
| 283 | 
            +
             | 
| 280 284 | 
             
                                # Use built-in health check for lifecycle services
         | 
| 281 285 | 
             
                                elif isinstance(instance, IMCPLifecycle):
         | 
| 282 286 | 
             
                                    health_status[service_name] = {
         | 
| 283 287 | 
             
                                        "healthy": instance.is_healthy(),
         | 
| 284 288 | 
             
                                        "state": instance.get_state(),
         | 
| 285 | 
            -
                                        "details": instance.get_health_status()
         | 
| 289 | 
            +
                                        "details": instance.get_health_status(),
         | 
| 286 290 | 
             
                                    }
         | 
| 287 | 
            -
             | 
| 291 | 
            +
             | 
| 288 292 | 
             
                                # Basic health check
         | 
| 289 293 | 
             
                                else:
         | 
| 290 294 | 
             
                                    health_status[service_name] = {
         | 
| 291 295 | 
             
                                        "healthy": True,
         | 
| 292 | 
            -
                                        "state": "unknown"
         | 
| 296 | 
            +
                                        "state": "unknown",
         | 
| 293 297 | 
             
                                    }
         | 
| 294 | 
            -
             | 
| 298 | 
            +
             | 
| 295 299 | 
             
                            except Exception as e:
         | 
| 296 | 
            -
                                health_status[service_name] = {
         | 
| 297 | 
            -
             | 
| 298 | 
            -
                                    "error": str(e)
         | 
| 299 | 
            -
                                }
         | 
| 300 | 
            -
                    
         | 
| 300 | 
            +
                                health_status[service_name] = {"healthy": False, "error": str(e)}
         | 
| 301 | 
            +
             | 
| 301 302 | 
             
                    return health_status
         | 
| 302 | 
            -
             | 
| 303 | 
            +
             | 
| 303 304 | 
             
                def get_metadata(self, interface: Type) -> Optional[Dict[str, Any]]:
         | 
| 304 305 | 
             
                    """
         | 
| 305 306 | 
             
                    Get metadata for a service.
         | 
| 306 | 
            -
             | 
| 307 | 
            +
             | 
| 307 308 | 
             
                    Args:
         | 
| 308 309 | 
             
                        interface: Service interface type
         | 
| 309 | 
            -
             | 
| 310 | 
            +
             | 
| 310 311 | 
             
                    Returns:
         | 
| 311 312 | 
             
                        Service metadata or None
         | 
| 312 313 | 
             
                    """
         | 
| 313 314 | 
             
                    with self._lock:
         | 
| 314 315 | 
             
                        return self._metadata.get(interface)
         | 
| 315 | 
            -
             | 
| 316 | 
            +
             | 
| 316 317 | 
             
                def list_services(self) -> List[str]:
         | 
| 317 318 | 
             
                    """
         | 
| 318 319 | 
             
                    List all registered services.
         | 
| 319 | 
            -
             | 
| 320 | 
            +
             | 
| 320 321 | 
             
                    Returns:
         | 
| 321 322 | 
             
                        List of service interface names
         | 
| 322 323 | 
             
                    """
         | 
| @@ -326,7 +327,7 @@ class MCPServiceRegistry: | |
| 326 327 | 
             
                        services.update(interface.__name__ for interface in self._factories.keys())
         | 
| 327 328 | 
             
                        services.update(interface.__name__ for interface in self._singletons.keys())
         | 
| 328 329 | 
             
                        return sorted(list(services))
         | 
| 329 | 
            -
             | 
| 330 | 
            +
             | 
| 330 331 | 
             
                def clear(self) -> None:
         | 
| 331 332 | 
             
                    """Clear all service registrations."""
         | 
| 332 333 | 
             
                    with self._lock:
         | 
| @@ -335,17 +336,18 @@ class MCPServiceRegistry: | |
| 335 336 | 
             
                            if isinstance(instance, IMCPLifecycle):
         | 
| 336 337 | 
             
                                try:
         | 
| 337 338 | 
             
                                    import asyncio
         | 
| 339 | 
            +
             | 
| 338 340 | 
             
                                    asyncio.create_task(instance.stop())
         | 
| 339 341 | 
             
                                except Exception as e:
         | 
| 340 342 | 
             
                                    self.logger.warning(f"Error stopping service: {e}")
         | 
| 341 | 
            -
             | 
| 343 | 
            +
             | 
| 342 344 | 
             
                        # Clear all registrations
         | 
| 343 345 | 
             
                        self._services.clear()
         | 
| 344 346 | 
             
                        self._factories.clear()
         | 
| 345 347 | 
             
                        self._singletons.clear()
         | 
| 346 348 | 
             
                        self._metadata.clear()
         | 
| 347 349 | 
             
                        self._health_checks.clear()
         | 
| 348 | 
            -
             | 
| 350 | 
            +
             | 
| 349 351 | 
             
                        self.logger.info("Service registry cleared")
         | 
| 350 352 |  | 
| 351 353 |  | 
| @@ -356,7 +358,7 @@ _service_registry: Optional[MCPServiceRegistry] = None | |
| 356 358 | 
             
            def get_service_registry() -> MCPServiceRegistry:
         | 
| 357 359 | 
             
                """
         | 
| 358 360 | 
             
                Get the global MCP service registry instance.
         | 
| 359 | 
            -
             | 
| 361 | 
            +
             | 
| 360 362 | 
             
                Returns:
         | 
| 361 363 | 
             
                    Service registry instance
         | 
| 362 364 | 
             
                """
         | 
| @@ -369,25 +371,26 @@ def get_service_registry() -> MCPServiceRegistry: | |
| 369 371 | 
             
            def register_mcp_services() -> None:
         | 
| 370 372 | 
             
                """
         | 
| 371 373 | 
             
                Register all default MCP services.
         | 
| 372 | 
            -
             | 
| 374 | 
            +
             | 
| 373 375 | 
             
                This function sets up the standard MCP service configuration.
         | 
| 374 376 | 
             
                """
         | 
| 375 377 | 
             
                registry = get_service_registry()
         | 
| 376 | 
            -
             | 
| 378 | 
            +
             | 
| 377 379 | 
             
                # Register core services
         | 
| 378 380 | 
             
                # Use the official MCP gateway implementation
         | 
| 379 381 | 
             
                from claude_mpm.services.mcp_gateway.server.mcp_gateway import MCPGateway
         | 
| 382 | 
            +
             | 
| 380 383 | 
             
                registry.register(IMCPGateway, MCPGateway, singleton=True)
         | 
| 381 | 
            -
             | 
| 382 | 
            -
                from claude_mpm.services.mcp_gateway.server.stdio_handler import StdioHandler
         | 
| 383 | 
            -
                from claude_mpm.services.mcp_gateway.registry.tool_registry import ToolRegistry
         | 
| 384 | 
            +
             | 
| 384 385 | 
             
                from claude_mpm.services.mcp_gateway.config.configuration import MCPConfiguration
         | 
| 385 | 
            -
                
         | 
| 386 | 
            +
                from claude_mpm.services.mcp_gateway.registry.tool_registry import ToolRegistry
         | 
| 387 | 
            +
                from claude_mpm.services.mcp_gateway.server.stdio_handler import StdioHandler
         | 
| 388 | 
            +
             | 
| 386 389 | 
             
                registry.register(IMCPCommunication, StdioHandler, singleton=True)
         | 
| 387 390 | 
             
                registry.register(IMCPToolRegistry, ToolRegistry, singleton=True)
         | 
| 388 391 | 
             
                registry.register(IMCPConfiguration, MCPConfiguration, singleton=True)
         | 
| 389 | 
            -
             | 
| 392 | 
            +
             | 
| 390 393 | 
             
                logging.info("MCP services registered")
         | 
| 391 394 |  | 
| 392 395 |  | 
| 393 | 
            -
            import asyncio
         | 
| 396 | 
            +
            import asyncio
         |