claude-mpm 3.9.9__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 +155 -0
- 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 +90 -49
- claude_mpm/cli/__main__.py +3 -2
- claude_mpm/cli/commands/__init__.py +21 -18
- 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 +143 -762
- 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 -1150
- 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 +217 -0
- claude_mpm/config/paths.py +94 -208
- claude_mpm/config/socketio_config.py +84 -73
- claude_mpm/constants.py +36 -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 +571 -0
- 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 +40 -23
- 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 +14 -21
- 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 +97 -93
- claude_mpm/services/mcp_gateway/main.py +307 -127
- claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +100 -101
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
- claude_mpm/services/mcp_gateway/server/__init__.py +4 -4
- claude_mpm/services/mcp_gateway/server/{mcp_server.py → mcp_gateway.py} +149 -153
- 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 +110 -121
- 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 +20 -534
- 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 +9 -0
- claude_mpm/storage/state_storage.py +552 -0
- 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.9.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +51 -2
- claude_mpm-4.0.3.dist-info/RECORD +402 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
- claude_mpm/config/memory_guardian_config.py +0 -325
- claude_mpm/core/config_paths.py +0 -150
- 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/memory_guardian.py +0 -770
- claude_mpm/services/mcp_gateway/server/mcp_server_simple.py +0 -444
- 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.9.dist-info/RECORD +0 -293
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
| @@ -8,18 +8,19 @@ establishing contracts for dependency injection and service orchestration. | |
| 8 8 | 
             
            Part of ISS-0034: Infrastructure Setup - MCP Gateway Project Foundation
         | 
| 9 9 | 
             
            """
         | 
| 10 10 |  | 
| 11 | 
            +
            import asyncio
         | 
| 11 12 | 
             
            from abc import ABC, abstractmethod
         | 
| 12 | 
            -
            from typing import Any, Dict, List, Optional, Callable, Union
         | 
| 13 13 | 
             
            from dataclasses import dataclass
         | 
| 14 14 | 
             
            from datetime import datetime
         | 
| 15 15 | 
             
            from pathlib import Path
         | 
| 16 | 
            -
            import  | 
| 16 | 
            +
            from typing import Any, Callable, Dict, List, Optional, Union
         | 
| 17 17 |  | 
| 18 18 |  | 
| 19 19 | 
             
            # Tool-related data structures
         | 
| 20 20 | 
             
            @dataclass
         | 
| 21 21 | 
             
            class MCPToolDefinition:
         | 
| 22 22 | 
             
                """Definition of an MCP tool."""
         | 
| 23 | 
            +
             | 
| 23 24 | 
             
                name: str
         | 
| 24 25 | 
             
                description: str
         | 
| 25 26 | 
             
                input_schema: Dict[str, Any]
         | 
| @@ -31,6 +32,7 @@ class MCPToolDefinition: | |
| 31 32 | 
             
            @dataclass
         | 
| 32 33 | 
             
            class MCPToolInvocation:
         | 
| 33 34 | 
             
                """Represents a tool invocation request."""
         | 
| 35 | 
            +
             | 
| 34 36 | 
             
                tool_name: str
         | 
| 35 37 | 
             
                parameters: Dict[str, Any]
         | 
| 36 38 | 
             
                context: Optional[Dict[str, Any]] = None
         | 
| @@ -41,6 +43,7 @@ class MCPToolInvocation: | |
| 41 43 | 
             
            @dataclass
         | 
| 42 44 | 
             
            class MCPToolResult:
         | 
| 43 45 | 
             
                """Result from a tool invocation."""
         | 
| 46 | 
            +
             | 
| 44 47 | 
             
                success: bool
         | 
| 45 48 | 
             
                data: Optional[Any] = None
         | 
| 46 49 | 
             
                error: Optional[str] = None
         | 
| @@ -52,73 +55,73 @@ class MCPToolResult: | |
| 52 55 | 
             
            class IMCPConfiguration(ABC):
         | 
| 53 56 | 
             
                """
         | 
| 54 57 | 
             
                Interface for MCP configuration management.
         | 
| 55 | 
            -
             | 
| 58 | 
            +
             | 
| 56 59 | 
             
                Handles loading, validation, and access to MCP Gateway configuration.
         | 
| 57 60 | 
             
                """
         | 
| 58 | 
            -
             | 
| 61 | 
            +
             | 
| 59 62 | 
             
                @abstractmethod
         | 
| 60 63 | 
             
                def load_config(self, config_path: Path) -> bool:
         | 
| 61 64 | 
             
                    """
         | 
| 62 65 | 
             
                    Load configuration from a file.
         | 
| 63 | 
            -
             | 
| 66 | 
            +
             | 
| 64 67 | 
             
                    Args:
         | 
| 65 68 | 
             
                        config_path: Path to configuration file
         | 
| 66 | 
            -
             | 
| 69 | 
            +
             | 
| 67 70 | 
             
                    Returns:
         | 
| 68 71 | 
             
                        True if configuration loaded successfully
         | 
| 69 72 | 
             
                    """
         | 
| 70 73 | 
             
                    pass
         | 
| 71 | 
            -
             | 
| 74 | 
            +
             | 
| 72 75 | 
             
                @abstractmethod
         | 
| 73 76 | 
             
                def get(self, key: str, default: Any = None) -> Any:
         | 
| 74 77 | 
             
                    """
         | 
| 75 78 | 
             
                    Get configuration value by key.
         | 
| 76 | 
            -
             | 
| 79 | 
            +
             | 
| 77 80 | 
             
                    Args:
         | 
| 78 81 | 
             
                        key: Configuration key (supports dot notation)
         | 
| 79 82 | 
             
                        default: Default value if key not found
         | 
| 80 | 
            -
             | 
| 83 | 
            +
             | 
| 81 84 | 
             
                    Returns:
         | 
| 82 85 | 
             
                        Configuration value or default
         | 
| 83 86 | 
             
                    """
         | 
| 84 87 | 
             
                    pass
         | 
| 85 | 
            -
             | 
| 88 | 
            +
             | 
| 86 89 | 
             
                @abstractmethod
         | 
| 87 90 | 
             
                def set(self, key: str, value: Any) -> None:
         | 
| 88 91 | 
             
                    """
         | 
| 89 92 | 
             
                    Set configuration value.
         | 
| 90 | 
            -
             | 
| 93 | 
            +
             | 
| 91 94 | 
             
                    Args:
         | 
| 92 95 | 
             
                        key: Configuration key (supports dot notation)
         | 
| 93 96 | 
             
                        value: Configuration value
         | 
| 94 97 | 
             
                    """
         | 
| 95 98 | 
             
                    pass
         | 
| 96 | 
            -
             | 
| 99 | 
            +
             | 
| 97 100 | 
             
                @abstractmethod
         | 
| 98 101 | 
             
                def validate(self) -> bool:
         | 
| 99 102 | 
             
                    """
         | 
| 100 103 | 
             
                    Validate the current configuration.
         | 
| 101 | 
            -
             | 
| 104 | 
            +
             | 
| 102 105 | 
             
                    Returns:
         | 
| 103 106 | 
             
                        True if configuration is valid
         | 
| 104 107 | 
             
                    """
         | 
| 105 108 | 
             
                    pass
         | 
| 106 | 
            -
             | 
| 109 | 
            +
             | 
| 107 110 | 
             
                @abstractmethod
         | 
| 108 111 | 
             
                def get_server_config(self) -> Dict[str, Any]:
         | 
| 109 112 | 
             
                    """
         | 
| 110 113 | 
             
                    Get MCP server configuration.
         | 
| 111 | 
            -
             | 
| 114 | 
            +
             | 
| 112 115 | 
             
                    Returns:
         | 
| 113 116 | 
             
                        Server configuration dictionary
         | 
| 114 117 | 
             
                    """
         | 
| 115 118 | 
             
                    pass
         | 
| 116 | 
            -
             | 
| 119 | 
            +
             | 
| 117 120 | 
             
                @abstractmethod
         | 
| 118 121 | 
             
                def get_tools_config(self) -> Dict[str, Any]:
         | 
| 119 122 | 
             
                    """
         | 
| 120 123 | 
             
                    Get tools configuration.
         | 
| 121 | 
            -
             | 
| 124 | 
            +
             | 
| 122 125 | 
             
                    Returns:
         | 
| 123 126 | 
             
                        Tools configuration dictionary
         | 
| 124 127 | 
             
                    """
         | 
| @@ -128,56 +131,56 @@ class IMCPConfiguration(ABC): | |
| 128 131 | 
             
            class IMCPToolAdapter(ABC):
         | 
| 129 132 | 
             
                """
         | 
| 130 133 | 
             
                Interface for MCP tool adapters.
         | 
| 131 | 
            -
             | 
| 134 | 
            +
             | 
| 132 135 | 
             
                Tool adapters wrap external tools to make them MCP-compatible.
         | 
| 133 136 | 
             
                """
         | 
| 134 | 
            -
             | 
| 137 | 
            +
             | 
| 135 138 | 
             
                @abstractmethod
         | 
| 136 139 | 
             
                def get_definition(self) -> MCPToolDefinition:
         | 
| 137 140 | 
             
                    """
         | 
| 138 141 | 
             
                    Get the tool definition.
         | 
| 139 | 
            -
             | 
| 142 | 
            +
             | 
| 140 143 | 
             
                    Returns:
         | 
| 141 144 | 
             
                        Tool definition with schema and metadata
         | 
| 142 145 | 
             
                    """
         | 
| 143 146 | 
             
                    pass
         | 
| 144 | 
            -
             | 
| 147 | 
            +
             | 
| 145 148 | 
             
                @abstractmethod
         | 
| 146 149 | 
             
                async def invoke(self, invocation: MCPToolInvocation) -> MCPToolResult:
         | 
| 147 150 | 
             
                    """
         | 
| 148 151 | 
             
                    Invoke the tool with given parameters.
         | 
| 149 | 
            -
             | 
| 152 | 
            +
             | 
| 150 153 | 
             
                    Args:
         | 
| 151 154 | 
             
                        invocation: Tool invocation request
         | 
| 152 | 
            -
             | 
| 155 | 
            +
             | 
| 153 156 | 
             
                    Returns:
         | 
| 154 157 | 
             
                        Tool execution result
         | 
| 155 158 | 
             
                    """
         | 
| 156 159 | 
             
                    pass
         | 
| 157 | 
            -
             | 
| 160 | 
            +
             | 
| 158 161 | 
             
                @abstractmethod
         | 
| 159 162 | 
             
                def validate_parameters(self, parameters: Dict[str, Any]) -> bool:
         | 
| 160 163 | 
             
                    """
         | 
| 161 164 | 
             
                    Validate tool parameters against schema.
         | 
| 162 | 
            -
             | 
| 165 | 
            +
             | 
| 163 166 | 
             
                    Args:
         | 
| 164 167 | 
             
                        parameters: Parameters to validate
         | 
| 165 | 
            -
             | 
| 168 | 
            +
             | 
| 166 169 | 
             
                    Returns:
         | 
| 167 170 | 
             
                        True if parameters are valid
         | 
| 168 171 | 
             
                    """
         | 
| 169 172 | 
             
                    pass
         | 
| 170 | 
            -
             | 
| 173 | 
            +
             | 
| 171 174 | 
             
                @abstractmethod
         | 
| 172 175 | 
             
                async def initialize(self) -> bool:
         | 
| 173 176 | 
             
                    """
         | 
| 174 177 | 
             
                    Initialize the tool adapter.
         | 
| 175 | 
            -
             | 
| 178 | 
            +
             | 
| 176 179 | 
             
                    Returns:
         | 
| 177 180 | 
             
                        True if initialization successful
         | 
| 178 181 | 
             
                    """
         | 
| 179 182 | 
             
                    pass
         | 
| 180 | 
            -
             | 
| 183 | 
            +
             | 
| 181 184 | 
             
                @abstractmethod
         | 
| 182 185 | 
             
                async def shutdown(self) -> None:
         | 
| 183 186 | 
             
                    """
         | 
| @@ -189,80 +192,80 @@ class IMCPToolAdapter(ABC): | |
| 189 192 | 
             
            class IMCPToolRegistry(ABC):
         | 
| 190 193 | 
             
                """
         | 
| 191 194 | 
             
                Interface for MCP tool registry.
         | 
| 192 | 
            -
             | 
| 195 | 
            +
             | 
| 193 196 | 
             
                Manages registration, discovery, and invocation of MCP tools.
         | 
| 194 197 | 
             
                """
         | 
| 195 | 
            -
             | 
| 198 | 
            +
             | 
| 196 199 | 
             
                @abstractmethod
         | 
| 197 200 | 
             
                def register_tool(self, adapter: IMCPToolAdapter) -> bool:
         | 
| 198 201 | 
             
                    """
         | 
| 199 202 | 
             
                    Register a tool adapter.
         | 
| 200 | 
            -
             | 
| 203 | 
            +
             | 
| 201 204 | 
             
                    Args:
         | 
| 202 205 | 
             
                        adapter: Tool adapter to register
         | 
| 203 | 
            -
             | 
| 206 | 
            +
             | 
| 204 207 | 
             
                    Returns:
         | 
| 205 208 | 
             
                        True if registration successful
         | 
| 206 209 | 
             
                    """
         | 
| 207 210 | 
             
                    pass
         | 
| 208 | 
            -
             | 
| 211 | 
            +
             | 
| 209 212 | 
             
                @abstractmethod
         | 
| 210 213 | 
             
                def unregister_tool(self, tool_name: str) -> bool:
         | 
| 211 214 | 
             
                    """
         | 
| 212 215 | 
             
                    Unregister a tool by name.
         | 
| 213 | 
            -
             | 
| 216 | 
            +
             | 
| 214 217 | 
             
                    Args:
         | 
| 215 218 | 
             
                        tool_name: Name of tool to unregister
         | 
| 216 | 
            -
             | 
| 219 | 
            +
             | 
| 217 220 | 
             
                    Returns:
         | 
| 218 221 | 
             
                        True if unregistration successful
         | 
| 219 222 | 
             
                    """
         | 
| 220 223 | 
             
                    pass
         | 
| 221 | 
            -
             | 
| 224 | 
            +
             | 
| 222 225 | 
             
                @abstractmethod
         | 
| 223 226 | 
             
                def get_tool(self, tool_name: str) -> Optional[IMCPToolAdapter]:
         | 
| 224 227 | 
             
                    """
         | 
| 225 228 | 
             
                    Get a tool adapter by name.
         | 
| 226 | 
            -
             | 
| 229 | 
            +
             | 
| 227 230 | 
             
                    Args:
         | 
| 228 231 | 
             
                        tool_name: Name of the tool
         | 
| 229 | 
            -
             | 
| 232 | 
            +
             | 
| 230 233 | 
             
                    Returns:
         | 
| 231 234 | 
             
                        Tool adapter if found, None otherwise
         | 
| 232 235 | 
             
                    """
         | 
| 233 236 | 
             
                    pass
         | 
| 234 | 
            -
             | 
| 237 | 
            +
             | 
| 235 238 | 
             
                @abstractmethod
         | 
| 236 239 | 
             
                def list_tools(self) -> List[MCPToolDefinition]:
         | 
| 237 240 | 
             
                    """
         | 
| 238 241 | 
             
                    List all registered tools.
         | 
| 239 | 
            -
             | 
| 242 | 
            +
             | 
| 240 243 | 
             
                    Returns:
         | 
| 241 244 | 
             
                        List of tool definitions
         | 
| 242 245 | 
             
                    """
         | 
| 243 246 | 
             
                    pass
         | 
| 244 | 
            -
             | 
| 247 | 
            +
             | 
| 245 248 | 
             
                @abstractmethod
         | 
| 246 249 | 
             
                async def invoke_tool(self, invocation: MCPToolInvocation) -> MCPToolResult:
         | 
| 247 250 | 
             
                    """
         | 
| 248 251 | 
             
                    Invoke a tool through the registry.
         | 
| 249 | 
            -
             | 
| 252 | 
            +
             | 
| 250 253 | 
             
                    Args:
         | 
| 251 254 | 
             
                        invocation: Tool invocation request
         | 
| 252 | 
            -
             | 
| 255 | 
            +
             | 
| 253 256 | 
             
                    Returns:
         | 
| 254 257 | 
             
                        Tool execution result
         | 
| 255 258 | 
             
                    """
         | 
| 256 259 | 
             
                    pass
         | 
| 257 | 
            -
             | 
| 260 | 
            +
             | 
| 258 261 | 
             
                @abstractmethod
         | 
| 259 262 | 
             
                def search_tools(self, query: str) -> List[MCPToolDefinition]:
         | 
| 260 263 | 
             
                    """
         | 
| 261 264 | 
             
                    Search for tools by query.
         | 
| 262 | 
            -
             | 
| 265 | 
            +
             | 
| 263 266 | 
             
                    Args:
         | 
| 264 267 | 
             
                        query: Search query
         | 
| 265 | 
            -
             | 
| 268 | 
            +
             | 
| 266 269 | 
             
                    Returns:
         | 
| 267 270 | 
             
                        List of matching tool definitions
         | 
| 268 271 | 
             
                    """
         | 
| @@ -272,58 +275,58 @@ class IMCPToolRegistry(ABC): | |
| 272 275 | 
             
            class IMCPCommunication(ABC):
         | 
| 273 276 | 
             
                """
         | 
| 274 277 | 
             
                Interface for MCP communication handling.
         | 
| 275 | 
            -
             | 
| 278 | 
            +
             | 
| 276 279 | 
             
                Manages stdio-based communication with MCP clients.
         | 
| 277 280 | 
             
                """
         | 
| 278 | 
            -
             | 
| 281 | 
            +
             | 
| 279 282 | 
             
                @abstractmethod
         | 
| 280 283 | 
             
                async def send_message(self, message: Dict[str, Any]) -> None:
         | 
| 281 284 | 
             
                    """
         | 
| 282 285 | 
             
                    Send a message to the MCP client.
         | 
| 283 | 
            -
             | 
| 286 | 
            +
             | 
| 284 287 | 
             
                    Args:
         | 
| 285 288 | 
             
                        message: Message to send
         | 
| 286 289 | 
             
                    """
         | 
| 287 290 | 
             
                    pass
         | 
| 288 | 
            -
             | 
| 291 | 
            +
             | 
| 289 292 | 
             
                @abstractmethod
         | 
| 290 293 | 
             
                async def receive_message(self) -> Optional[Dict[str, Any]]:
         | 
| 291 294 | 
             
                    """
         | 
| 292 295 | 
             
                    Receive a message from the MCP client.
         | 
| 293 | 
            -
             | 
| 296 | 
            +
             | 
| 294 297 | 
             
                    Returns:
         | 
| 295 298 | 
             
                        Received message or None if no message available
         | 
| 296 299 | 
             
                    """
         | 
| 297 300 | 
             
                    pass
         | 
| 298 | 
            -
             | 
| 301 | 
            +
             | 
| 299 302 | 
             
                @abstractmethod
         | 
| 300 303 | 
             
                async def send_response(self, request_id: str, result: Any) -> None:
         | 
| 301 304 | 
             
                    """
         | 
| 302 305 | 
             
                    Send a response to a request.
         | 
| 303 | 
            -
             | 
| 306 | 
            +
             | 
| 304 307 | 
             
                    Args:
         | 
| 305 308 | 
             
                        request_id: ID of the request being responded to
         | 
| 306 309 | 
             
                        result: Result data
         | 
| 307 310 | 
             
                    """
         | 
| 308 311 | 
             
                    pass
         | 
| 309 | 
            -
             | 
| 312 | 
            +
             | 
| 310 313 | 
             
                @abstractmethod
         | 
| 311 314 | 
             
                async def send_error(self, request_id: str, error: str, code: int = -1) -> None:
         | 
| 312 315 | 
             
                    """
         | 
| 313 316 | 
             
                    Send an error response.
         | 
| 314 | 
            -
             | 
| 317 | 
            +
             | 
| 315 318 | 
             
                    Args:
         | 
| 316 319 | 
             
                        request_id: ID of the request that caused the error
         | 
| 317 320 | 
             
                        error: Error message
         | 
| 318 321 | 
             
                        code: Error code
         | 
| 319 322 | 
             
                    """
         | 
| 320 323 | 
             
                    pass
         | 
| 321 | 
            -
             | 
| 324 | 
            +
             | 
| 322 325 | 
             
                @abstractmethod
         | 
| 323 326 | 
             
                def is_connected(self) -> bool:
         | 
| 324 327 | 
             
                    """
         | 
| 325 328 | 
             
                    Check if communication channel is connected.
         | 
| 326 | 
            -
             | 
| 329 | 
            +
             | 
| 327 330 | 
             
                    Returns:
         | 
| 328 331 | 
             
                        True if connected
         | 
| 329 332 | 
             
                    """
         | 
| @@ -333,144 +336,145 @@ class IMCPCommunication(ABC): | |
| 333 336 | 
             
            class IMCPLifecycle(ABC):
         | 
| 334 337 | 
             
                """
         | 
| 335 338 | 
             
                Interface for MCP service lifecycle management.
         | 
| 336 | 
            -
             | 
| 339 | 
            +
             | 
| 337 340 | 
             
                Manages initialization, startup, shutdown, and health monitoring.
         | 
| 338 341 | 
             
                """
         | 
| 339 | 
            -
             | 
| 342 | 
            +
             | 
| 340 343 | 
             
                @abstractmethod
         | 
| 341 344 | 
             
                async def initialize(self) -> bool:
         | 
| 342 345 | 
             
                    """
         | 
| 343 346 | 
             
                    Initialize the MCP service.
         | 
| 344 | 
            -
             | 
| 347 | 
            +
             | 
| 345 348 | 
             
                    Returns:
         | 
| 346 349 | 
             
                        True if initialization successful
         | 
| 347 350 | 
             
                    """
         | 
| 348 351 | 
             
                    pass
         | 
| 349 | 
            -
             | 
| 352 | 
            +
             | 
| 350 353 | 
             
                @abstractmethod
         | 
| 351 354 | 
             
                async def start(self) -> bool:
         | 
| 352 355 | 
             
                    """
         | 
| 353 356 | 
             
                    Start the MCP service.
         | 
| 354 | 
            -
             | 
| 357 | 
            +
             | 
| 355 358 | 
             
                    Returns:
         | 
| 356 359 | 
             
                        True if startup successful
         | 
| 357 360 | 
             
                    """
         | 
| 358 361 | 
             
                    pass
         | 
| 359 | 
            -
             | 
| 362 | 
            +
             | 
| 360 363 | 
             
                @abstractmethod
         | 
| 361 364 | 
             
                async def stop(self) -> None:
         | 
| 362 365 | 
             
                    """
         | 
| 363 366 | 
             
                    Stop the MCP service gracefully.
         | 
| 364 367 | 
             
                    """
         | 
| 365 368 | 
             
                    pass
         | 
| 366 | 
            -
             | 
| 369 | 
            +
             | 
| 367 370 | 
             
                @abstractmethod
         | 
| 368 371 | 
             
                async def restart(self) -> bool:
         | 
| 369 372 | 
             
                    """
         | 
| 370 373 | 
             
                    Restart the MCP service.
         | 
| 371 | 
            -
             | 
| 374 | 
            +
             | 
| 372 375 | 
             
                    Returns:
         | 
| 373 376 | 
             
                        True if restart successful
         | 
| 374 377 | 
             
                    """
         | 
| 375 378 | 
             
                    pass
         | 
| 376 | 
            -
             | 
| 379 | 
            +
             | 
| 377 380 | 
             
                @abstractmethod
         | 
| 378 381 | 
             
                def get_state(self) -> str:
         | 
| 379 382 | 
             
                    """
         | 
| 380 383 | 
             
                    Get current service state.
         | 
| 381 | 
            -
             | 
| 384 | 
            +
             | 
| 382 385 | 
             
                    Returns:
         | 
| 383 386 | 
             
                        Service state (e.g., "initialized", "running", "stopped")
         | 
| 384 387 | 
             
                    """
         | 
| 385 388 | 
             
                    pass
         | 
| 386 | 
            -
             | 
| 389 | 
            +
             | 
| 387 390 | 
             
                @abstractmethod
         | 
| 388 391 | 
             
                def is_healthy(self) -> bool:
         | 
| 389 392 | 
             
                    """
         | 
| 390 393 | 
             
                    Check if service is healthy.
         | 
| 391 | 
            -
             | 
| 394 | 
            +
             | 
| 392 395 | 
             
                    Returns:
         | 
| 393 396 | 
             
                        True if service is healthy
         | 
| 394 397 | 
             
                    """
         | 
| 395 398 | 
             
                    pass
         | 
| 396 | 
            -
             | 
| 399 | 
            +
             | 
| 397 400 | 
             
                @abstractmethod
         | 
| 398 401 | 
             
                def get_health_status(self) -> Dict[str, Any]:
         | 
| 399 402 | 
             
                    """
         | 
| 400 403 | 
             
                    Get detailed health status.
         | 
| 401 | 
            -
             | 
| 404 | 
            +
             | 
| 402 405 | 
             
                    Returns:
         | 
| 403 406 | 
             
                        Health status information
         | 
| 404 407 | 
             
                    """
         | 
| 405 408 | 
             
                    pass
         | 
| 406 409 |  | 
| 407 410 |  | 
| 408 | 
            -
            class  | 
| 411 | 
            +
            class IMCPGateway(IMCPLifecycle):
         | 
| 409 412 | 
             
                """
         | 
| 410 | 
            -
                Main interface for MCP  | 
| 411 | 
            -
             | 
| 413 | 
            +
                Main interface for MCP gateway implementation.
         | 
| 414 | 
            +
             | 
| 412 415 | 
             
                Orchestrates tool registry, communication, and request handling.
         | 
| 416 | 
            +
                Acts as a protocol bridge between Claude Desktop and internal tools.
         | 
| 413 417 | 
             
                """
         | 
| 414 | 
            -
             | 
| 418 | 
            +
             | 
| 415 419 | 
             
                @abstractmethod
         | 
| 416 420 | 
             
                def set_tool_registry(self, registry: IMCPToolRegistry) -> None:
         | 
| 417 421 | 
             
                    """
         | 
| 418 422 | 
             
                    Set the tool registry for the server.
         | 
| 419 | 
            -
             | 
| 423 | 
            +
             | 
| 420 424 | 
             
                    Args:
         | 
| 421 425 | 
             
                        registry: Tool registry to use
         | 
| 422 426 | 
             
                    """
         | 
| 423 427 | 
             
                    pass
         | 
| 424 | 
            -
             | 
| 428 | 
            +
             | 
| 425 429 | 
             
                @abstractmethod
         | 
| 426 430 | 
             
                def set_communication(self, communication: IMCPCommunication) -> None:
         | 
| 427 431 | 
             
                    """
         | 
| 428 432 | 
             
                    Set the communication handler.
         | 
| 429 | 
            -
             | 
| 433 | 
            +
             | 
| 430 434 | 
             
                    Args:
         | 
| 431 435 | 
             
                        communication: Communication handler to use
         | 
| 432 436 | 
             
                    """
         | 
| 433 437 | 
             
                    pass
         | 
| 434 | 
            -
             | 
| 438 | 
            +
             | 
| 435 439 | 
             
                @abstractmethod
         | 
| 436 440 | 
             
                async def handle_request(self, request: Dict[str, Any]) -> Dict[str, Any]:
         | 
| 437 441 | 
             
                    """
         | 
| 438 442 | 
             
                    Handle an MCP request.
         | 
| 439 | 
            -
             | 
| 443 | 
            +
             | 
| 440 444 | 
             
                    Args:
         | 
| 441 445 | 
             
                        request: MCP request message
         | 
| 442 | 
            -
             | 
| 446 | 
            +
             | 
| 443 447 | 
             
                    Returns:
         | 
| 444 448 | 
             
                        Response message
         | 
| 445 449 | 
             
                    """
         | 
| 446 450 | 
             
                    pass
         | 
| 447 | 
            -
             | 
| 451 | 
            +
             | 
| 448 452 | 
             
                @abstractmethod
         | 
| 449 453 | 
             
                async def run(self) -> None:
         | 
| 450 454 | 
             
                    """
         | 
| 451 | 
            -
                    Run the MCP  | 
| 452 | 
            -
             | 
| 453 | 
            -
                    This method should handle incoming requests and manage the  | 
| 455 | 
            +
                    Run the MCP gateway main loop.
         | 
| 456 | 
            +
             | 
| 457 | 
            +
                    This method should handle incoming requests and manage the gateway lifecycle.
         | 
| 454 458 | 
             
                    """
         | 
| 455 459 | 
             
                    pass
         | 
| 456 | 
            -
             | 
| 460 | 
            +
             | 
| 457 461 | 
             
                @abstractmethod
         | 
| 458 462 | 
             
                def register_handler(self, method: str, handler: Callable) -> None:
         | 
| 459 463 | 
             
                    """
         | 
| 460 464 | 
             
                    Register a custom request handler.
         | 
| 461 | 
            -
             | 
| 465 | 
            +
             | 
| 462 466 | 
             
                    Args:
         | 
| 463 467 | 
             
                        method: Method name to handle
         | 
| 464 468 | 
             
                        handler: Handler function
         | 
| 465 469 | 
             
                    """
         | 
| 466 470 | 
             
                    pass
         | 
| 467 | 
            -
             | 
| 471 | 
            +
             | 
| 468 472 | 
             
                @abstractmethod
         | 
| 469 473 | 
             
                def get_capabilities(self) -> Dict[str, Any]:
         | 
| 470 474 | 
             
                    """
         | 
| 471 | 
            -
                    Get  | 
| 472 | 
            -
             | 
| 475 | 
            +
                    Get gateway capabilities.
         | 
| 476 | 
            +
             | 
| 473 477 | 
             
                    Returns:
         | 
| 474 | 
            -
                        Dictionary of  | 
| 478 | 
            +
                        Dictionary of gateway capabilities
         | 
| 475 479 | 
             
                    """
         | 
| 476 | 
            -
                    pass
         | 
| 480 | 
            +
                    pass
         |