claude-mpm 4.1.1__py3-none-any.whl → 4.1.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/BUILD_NUMBER +1 -1
- claude_mpm/VERSION +1 -1
- claude_mpm/__main__.py +1 -1
- claude_mpm/agents/BASE_PM.md +74 -46
- claude_mpm/agents/INSTRUCTIONS.md +11 -153
- claude_mpm/agents/WORKFLOW.md +61 -321
- claude_mpm/agents/__init__.py +11 -11
- claude_mpm/agents/agent_loader.py +23 -20
- claude_mpm/agents/agent_loader_integration.py +1 -1
- claude_mpm/agents/agents_metadata.py +27 -0
- claude_mpm/agents/async_agent_loader.py +5 -8
- claude_mpm/agents/base_agent_loader.py +36 -25
- claude_mpm/agents/frontmatter_validator.py +6 -6
- claude_mpm/agents/schema/agent_schema.json +1 -1
- claude_mpm/agents/system_agent_config.py +9 -9
- claude_mpm/agents/templates/api_qa.json +47 -2
- claude_mpm/agents/templates/engineer.json +33 -11
- claude_mpm/agents/templates/imagemagick.json +256 -0
- claude_mpm/agents/templates/qa.json +41 -2
- claude_mpm/agents/templates/ticketing.json +5 -5
- claude_mpm/agents/templates/web_qa.json +50 -2
- claude_mpm/cli/__init__.py +51 -46
- claude_mpm/cli/__main__.py +1 -1
- claude_mpm/cli/commands/__init__.py +10 -12
- claude_mpm/cli/commands/agent_manager.py +186 -181
- claude_mpm/cli/commands/agents.py +648 -1098
- claude_mpm/cli/commands/aggregate.py +30 -29
- claude_mpm/cli/commands/cleanup.py +50 -44
- claude_mpm/cli/commands/cleanup_orphaned_agents.py +25 -25
- claude_mpm/cli/commands/config.py +162 -127
- claude_mpm/cli/commands/doctor.py +52 -62
- claude_mpm/cli/commands/info.py +37 -25
- claude_mpm/cli/commands/mcp.py +3 -7
- claude_mpm/cli/commands/mcp_command_router.py +14 -18
- claude_mpm/cli/commands/mcp_install_commands.py +28 -23
- claude_mpm/cli/commands/mcp_pipx_config.py +58 -49
- claude_mpm/cli/commands/mcp_server_commands.py +23 -17
- claude_mpm/cli/commands/memory.py +339 -967
- claude_mpm/cli/commands/monitor.py +117 -88
- claude_mpm/cli/commands/run.py +233 -542
- claude_mpm/cli/commands/socketio_monitor.py +17 -19
- claude_mpm/cli/commands/tickets.py +92 -92
- claude_mpm/cli/parser.py +1 -5
- claude_mpm/cli/parsers/__init__.py +1 -1
- claude_mpm/cli/parsers/agent_manager_parser.py +50 -98
- claude_mpm/cli/parsers/agents_parser.py +2 -3
- claude_mpm/cli/parsers/base_parser.py +7 -5
- claude_mpm/cli/parsers/mcp_parser.py +4 -2
- claude_mpm/cli/parsers/monitor_parser.py +26 -18
- claude_mpm/cli/shared/__init__.py +10 -10
- claude_mpm/cli/shared/argument_patterns.py +57 -71
- claude_mpm/cli/shared/base_command.py +61 -53
- claude_mpm/cli/shared/error_handling.py +62 -58
- claude_mpm/cli/shared/output_formatters.py +78 -77
- claude_mpm/cli/startup_logging.py +280 -172
- claude_mpm/cli/utils.py +10 -11
- claude_mpm/cli_module/__init__.py +1 -1
- claude_mpm/cli_module/args.py +1 -1
- claude_mpm/cli_module/migration_example.py +5 -5
- claude_mpm/config/__init__.py +9 -9
- claude_mpm/config/agent_config.py +15 -14
- claude_mpm/config/experimental_features.py +4 -4
- claude_mpm/config/paths.py +0 -1
- claude_mpm/config/socketio_config.py +5 -6
- claude_mpm/constants.py +1 -2
- claude_mpm/core/__init__.py +8 -8
- claude_mpm/core/agent_name_normalizer.py +1 -1
- claude_mpm/core/agent_registry.py +22 -29
- claude_mpm/core/agent_session_manager.py +3 -3
- claude_mpm/core/base_service.py +7 -15
- claude_mpm/core/cache.py +4 -6
- claude_mpm/core/claude_runner.py +85 -113
- claude_mpm/core/config.py +43 -28
- claude_mpm/core/config_aliases.py +0 -9
- claude_mpm/core/config_constants.py +52 -30
- claude_mpm/core/constants.py +0 -1
- claude_mpm/core/container.py +18 -27
- claude_mpm/core/exceptions.py +2 -2
- claude_mpm/core/factories.py +10 -12
- claude_mpm/core/framework_loader.py +500 -680
- claude_mpm/core/hook_manager.py +26 -22
- claude_mpm/core/hook_performance_config.py +58 -47
- claude_mpm/core/injectable_service.py +1 -1
- claude_mpm/core/interactive_session.py +61 -152
- claude_mpm/core/interfaces.py +1 -100
- claude_mpm/core/lazy.py +5 -5
- claude_mpm/core/log_manager.py +587 -0
- claude_mpm/core/logger.py +125 -8
- claude_mpm/core/logging_config.py +15 -17
- claude_mpm/core/minimal_framework_loader.py +5 -8
- claude_mpm/core/oneshot_session.py +15 -33
- claude_mpm/core/optimized_agent_loader.py +4 -6
- claude_mpm/core/optimized_startup.py +2 -1
- claude_mpm/core/output_style_manager.py +147 -106
- claude_mpm/core/pm_hook_interceptor.py +0 -1
- claude_mpm/core/service_registry.py +11 -8
- claude_mpm/core/session_manager.py +1 -2
- claude_mpm/core/shared/__init__.py +1 -1
- claude_mpm/core/shared/config_loader.py +101 -97
- claude_mpm/core/shared/path_resolver.py +72 -68
- claude_mpm/core/shared/singleton_manager.py +56 -50
- claude_mpm/core/socketio_pool.py +26 -6
- claude_mpm/core/tool_access_control.py +4 -5
- claude_mpm/core/typing_utils.py +50 -59
- claude_mpm/core/unified_agent_registry.py +14 -19
- claude_mpm/core/unified_config.py +4 -6
- claude_mpm/core/unified_paths.py +197 -109
- claude_mpm/dashboard/open_dashboard.py +2 -4
- claude_mpm/experimental/cli_enhancements.py +51 -36
- claude_mpm/generators/agent_profile_generator.py +2 -4
- claude_mpm/hooks/base_hook.py +1 -2
- claude_mpm/hooks/claude_hooks/connection_pool.py +72 -26
- claude_mpm/hooks/claude_hooks/event_handlers.py +99 -154
- claude_mpm/hooks/claude_hooks/hook_handler.py +110 -720
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +104 -77
- claude_mpm/hooks/claude_hooks/hook_handler_original.py +1040 -0
- claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +347 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +2 -4
- claude_mpm/hooks/claude_hooks/response_tracking.py +15 -11
- claude_mpm/hooks/claude_hooks/services/__init__.py +13 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +190 -0
- claude_mpm/hooks/claude_hooks/services/duplicate_detector.py +106 -0
- claude_mpm/hooks/claude_hooks/services/state_manager.py +282 -0
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +374 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +12 -18
- claude_mpm/hooks/memory_integration_hook.py +5 -5
- claude_mpm/hooks/tool_call_interceptor.py +1 -1
- claude_mpm/hooks/validation_hooks.py +4 -4
- claude_mpm/init.py +4 -9
- claude_mpm/models/__init__.py +2 -2
- claude_mpm/models/agent_session.py +11 -14
- claude_mpm/scripts/mcp_server.py +20 -11
- claude_mpm/scripts/mcp_wrapper.py +5 -5
- claude_mpm/scripts/mpm_doctor.py +321 -0
- claude_mpm/scripts/socketio_daemon.py +28 -25
- claude_mpm/scripts/socketio_daemon_hardened.py +298 -258
- claude_mpm/scripts/socketio_server_manager.py +116 -95
- claude_mpm/services/__init__.py +49 -49
- claude_mpm/services/agent_capabilities_service.py +12 -18
- claude_mpm/services/agents/__init__.py +22 -22
- claude_mpm/services/agents/agent_builder.py +140 -119
- claude_mpm/services/agents/deployment/__init__.py +3 -3
- claude_mpm/services/agents/deployment/agent_config_provider.py +9 -9
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +19 -20
- claude_mpm/services/agents/deployment/agent_definition_factory.py +1 -5
- claude_mpm/services/agents/deployment/agent_deployment.py +129 -511
- claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -8
- claude_mpm/services/agents/deployment/agent_environment_manager.py +2 -7
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +6 -10
- claude_mpm/services/agents/deployment/agent_format_converter.py +11 -15
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +2 -3
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -5
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +13 -19
- claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -1
- claude_mpm/services/agents/deployment/agent_template_builder.py +26 -35
- claude_mpm/services/agents/deployment/agent_validator.py +0 -1
- claude_mpm/services/agents/deployment/agent_version_manager.py +7 -9
- claude_mpm/services/agents/deployment/agent_versioning.py +3 -3
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +6 -7
- claude_mpm/services/agents/deployment/async_agent_deployment.py +51 -38
- claude_mpm/services/agents/deployment/base_agent_locator.py +132 -0
- claude_mpm/services/agents/deployment/config/__init__.py +1 -1
- claude_mpm/services/agents/deployment/config/deployment_config.py +7 -8
- claude_mpm/services/agents/deployment/deployment_results_manager.py +185 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +1 -1
- claude_mpm/services/agents/deployment/deployment_wrapper.py +18 -18
- claude_mpm/services/agents/deployment/facade/__init__.py +1 -1
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -3
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -4
- claude_mpm/services/agents/deployment/interface_adapter.py +5 -7
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +345 -276
- claude_mpm/services/agents/deployment/pipeline/__init__.py +2 -2
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +1 -1
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +6 -4
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +3 -3
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +2 -2
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +14 -13
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -1
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +1 -1
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +8 -9
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +1 -1
- claude_mpm/services/agents/deployment/processors/__init__.py +1 -1
- claude_mpm/services/agents/deployment/processors/agent_processor.py +20 -16
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +5 -12
- claude_mpm/services/agents/deployment/results/__init__.py +1 -1
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +1 -1
- claude_mpm/services/agents/deployment/single_agent_deployer.py +315 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +2 -2
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +1 -7
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +1 -4
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +2 -3
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +3 -7
- claude_mpm/services/agents/deployment/validation/__init__.py +1 -1
- claude_mpm/services/agents/deployment/validation/agent_validator.py +1 -1
- claude_mpm/services/agents/deployment/validation/template_validator.py +2 -2
- claude_mpm/services/agents/deployment/validation/validation_result.py +2 -6
- claude_mpm/services/agents/loading/__init__.py +1 -1
- claude_mpm/services/agents/loading/agent_profile_loader.py +6 -12
- claude_mpm/services/agents/loading/base_agent_manager.py +5 -5
- claude_mpm/services/agents/loading/framework_agent_loader.py +2 -4
- claude_mpm/services/agents/management/__init__.py +1 -1
- claude_mpm/services/agents/management/agent_capabilities_generator.py +1 -3
- claude_mpm/services/agents/management/agent_management_service.py +5 -9
- claude_mpm/services/agents/memory/__init__.py +4 -4
- claude_mpm/services/agents/memory/agent_memory_manager.py +157 -503
- claude_mpm/services/agents/memory/agent_persistence_service.py +0 -2
- claude_mpm/services/agents/memory/content_manager.py +44 -38
- claude_mpm/services/agents/memory/memory_categorization_service.py +165 -0
- claude_mpm/services/agents/memory/memory_file_service.py +103 -0
- claude_mpm/services/agents/memory/memory_format_service.py +201 -0
- claude_mpm/services/agents/memory/memory_limits_service.py +99 -0
- claude_mpm/services/agents/memory/template_generator.py +4 -6
- claude_mpm/services/agents/registry/__init__.py +11 -7
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +30 -27
- claude_mpm/services/agents/registry/modification_tracker.py +3 -6
- claude_mpm/services/async_session_logger.py +1 -2
- claude_mpm/services/claude_session_logger.py +1 -2
- claude_mpm/services/cli/__init__.py +18 -0
- claude_mpm/services/cli/agent_cleanup_service.py +407 -0
- claude_mpm/services/cli/agent_dependency_service.py +395 -0
- claude_mpm/services/cli/agent_listing_service.py +463 -0
- claude_mpm/services/cli/agent_output_formatter.py +605 -0
- claude_mpm/services/cli/agent_validation_service.py +589 -0
- claude_mpm/services/cli/dashboard_launcher.py +424 -0
- claude_mpm/services/cli/memory_crud_service.py +617 -0
- claude_mpm/services/cli/memory_output_formatter.py +604 -0
- claude_mpm/services/cli/session_manager.py +513 -0
- claude_mpm/services/cli/socketio_manager.py +498 -0
- claude_mpm/services/cli/startup_checker.py +370 -0
- claude_mpm/services/command_deployment_service.py +173 -0
- claude_mpm/services/command_handler_service.py +20 -22
- claude_mpm/services/core/__init__.py +25 -25
- claude_mpm/services/core/base.py +0 -5
- claude_mpm/services/core/cache_manager.py +311 -0
- claude_mpm/services/core/interfaces/__init__.py +32 -32
- claude_mpm/services/core/interfaces/agent.py +0 -21
- claude_mpm/services/core/interfaces/communication.py +0 -27
- claude_mpm/services/core/interfaces/infrastructure.py +0 -56
- claude_mpm/services/core/interfaces/service.py +0 -29
- claude_mpm/services/core/memory_manager.py +637 -0
- claude_mpm/services/core/path_resolver.py +498 -0
- claude_mpm/services/core/service_container.py +520 -0
- claude_mpm/services/core/service_interfaces.py +436 -0
- claude_mpm/services/diagnostics/__init__.py +1 -1
- claude_mpm/services/diagnostics/checks/__init__.py +6 -6
- claude_mpm/services/diagnostics/checks/agent_check.py +152 -97
- claude_mpm/services/diagnostics/checks/base_check.py +12 -16
- claude_mpm/services/diagnostics/checks/claude_desktop_check.py +84 -81
- claude_mpm/services/diagnostics/checks/common_issues_check.py +99 -91
- claude_mpm/services/diagnostics/checks/configuration_check.py +82 -77
- claude_mpm/services/diagnostics/checks/filesystem_check.py +67 -68
- claude_mpm/services/diagnostics/checks/installation_check.py +254 -94
- claude_mpm/services/diagnostics/checks/mcp_check.py +90 -88
- claude_mpm/services/diagnostics/checks/monitor_check.py +75 -76
- claude_mpm/services/diagnostics/checks/startup_log_check.py +67 -73
- claude_mpm/services/diagnostics/diagnostic_runner.py +67 -59
- claude_mpm/services/diagnostics/doctor_reporter.py +107 -70
- claude_mpm/services/diagnostics/models.py +21 -19
- claude_mpm/services/event_aggregator.py +10 -17
- claude_mpm/services/event_bus/__init__.py +1 -1
- claude_mpm/services/event_bus/config.py +54 -35
- claude_mpm/services/event_bus/event_bus.py +76 -71
- claude_mpm/services/event_bus/relay.py +74 -64
- claude_mpm/services/events/__init__.py +11 -11
- claude_mpm/services/events/consumers/__init__.py +3 -3
- claude_mpm/services/events/consumers/dead_letter.py +71 -63
- claude_mpm/services/events/consumers/logging.py +39 -37
- claude_mpm/services/events/consumers/metrics.py +56 -57
- claude_mpm/services/events/consumers/socketio.py +82 -81
- claude_mpm/services/events/core.py +110 -99
- claude_mpm/services/events/interfaces.py +56 -72
- claude_mpm/services/events/producers/__init__.py +1 -1
- claude_mpm/services/events/producers/hook.py +38 -38
- claude_mpm/services/events/producers/system.py +46 -44
- claude_mpm/services/exceptions.py +81 -80
- claude_mpm/services/framework_claude_md_generator/__init__.py +2 -4
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +3 -5
- claude_mpm/services/framework_claude_md_generator/content_validator.py +1 -1
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +4 -4
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -1
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -2
- claude_mpm/services/framework_claude_md_generator/version_manager.py +4 -5
- claude_mpm/services/hook_service.py +6 -9
- claude_mpm/services/infrastructure/__init__.py +1 -1
- claude_mpm/services/infrastructure/context_preservation.py +8 -12
- claude_mpm/services/infrastructure/monitoring.py +21 -23
- claude_mpm/services/mcp_gateway/__init__.py +37 -37
- claude_mpm/services/mcp_gateway/auto_configure.py +95 -103
- claude_mpm/services/mcp_gateway/config/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/config/config_loader.py +23 -25
- claude_mpm/services/mcp_gateway/config/config_schema.py +5 -5
- claude_mpm/services/mcp_gateway/config/configuration.py +9 -6
- claude_mpm/services/mcp_gateway/core/__init__.py +10 -10
- claude_mpm/services/mcp_gateway/core/base.py +0 -3
- claude_mpm/services/mcp_gateway/core/interfaces.py +1 -38
- claude_mpm/services/mcp_gateway/core/process_pool.py +99 -93
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +65 -62
- claude_mpm/services/mcp_gateway/core/startup_verification.py +75 -74
- claude_mpm/services/mcp_gateway/main.py +2 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +5 -8
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +1 -1
- claude_mpm/services/mcp_gateway/server/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +12 -19
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +4 -3
- claude_mpm/services/mcp_gateway/server/stdio_server.py +79 -71
- claude_mpm/services/mcp_gateway/tools/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +5 -6
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +13 -22
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +79 -78
- claude_mpm/services/mcp_gateway/tools/hello_world.py +12 -14
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +42 -49
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +51 -55
- claude_mpm/services/memory/__init__.py +3 -3
- claude_mpm/services/memory/builder.py +3 -6
- claude_mpm/services/memory/cache/__init__.py +1 -1
- claude_mpm/services/memory/cache/shared_prompt_cache.py +3 -5
- claude_mpm/services/memory/cache/simple_cache.py +1 -1
- claude_mpm/services/memory/indexed_memory.py +5 -7
- claude_mpm/services/memory/optimizer.py +7 -10
- claude_mpm/services/memory/router.py +8 -9
- claude_mpm/services/memory_hook_service.py +48 -34
- claude_mpm/services/monitor_build_service.py +77 -73
- claude_mpm/services/port_manager.py +130 -108
- claude_mpm/services/project/analyzer.py +12 -10
- claude_mpm/services/project/registry.py +11 -11
- claude_mpm/services/recovery_manager.py +10 -19
- claude_mpm/services/response_tracker.py +0 -1
- claude_mpm/services/runner_configuration_service.py +19 -20
- claude_mpm/services/session_management_service.py +7 -11
- claude_mpm/services/shared/__init__.py +1 -1
- claude_mpm/services/shared/async_service_base.py +58 -50
- claude_mpm/services/shared/config_service_base.py +73 -67
- claude_mpm/services/shared/lifecycle_service_base.py +82 -78
- claude_mpm/services/shared/manager_base.py +94 -82
- claude_mpm/services/shared/service_factory.py +96 -98
- claude_mpm/services/socketio/__init__.py +3 -3
- claude_mpm/services/socketio/client_proxy.py +5 -5
- claude_mpm/services/socketio/event_normalizer.py +199 -181
- claude_mpm/services/socketio/handlers/__init__.py +3 -3
- claude_mpm/services/socketio/handlers/base.py +5 -4
- claude_mpm/services/socketio/handlers/connection.py +163 -136
- claude_mpm/services/socketio/handlers/file.py +13 -14
- claude_mpm/services/socketio/handlers/git.py +12 -7
- claude_mpm/services/socketio/handlers/hook.py +49 -44
- claude_mpm/services/socketio/handlers/memory.py +0 -1
- claude_mpm/services/socketio/handlers/project.py +0 -1
- claude_mpm/services/socketio/handlers/registry.py +37 -19
- claude_mpm/services/socketio/migration_utils.py +98 -84
- claude_mpm/services/socketio/server/__init__.py +1 -1
- claude_mpm/services/socketio/server/broadcaster.py +81 -87
- claude_mpm/services/socketio/server/core.py +65 -54
- claude_mpm/services/socketio/server/eventbus_integration.py +95 -56
- claude_mpm/services/socketio/server/main.py +64 -38
- claude_mpm/services/socketio_client_manager.py +10 -12
- claude_mpm/services/subprocess_launcher_service.py +4 -7
- claude_mpm/services/system_instructions_service.py +13 -14
- claude_mpm/services/ticket_manager.py +2 -2
- claude_mpm/services/utility_service.py +5 -13
- claude_mpm/services/version_control/__init__.py +16 -16
- claude_mpm/services/version_control/branch_strategy.py +5 -8
- claude_mpm/services/version_control/conflict_resolution.py +9 -23
- claude_mpm/services/version_control/git_operations.py +5 -7
- claude_mpm/services/version_control/semantic_versioning.py +16 -17
- claude_mpm/services/version_control/version_parser.py +13 -18
- claude_mpm/services/version_service.py +10 -11
- claude_mpm/storage/__init__.py +1 -1
- claude_mpm/storage/state_storage.py +22 -28
- claude_mpm/utils/__init__.py +6 -6
- claude_mpm/utils/agent_dependency_loader.py +47 -33
- claude_mpm/utils/config_manager.py +11 -14
- claude_mpm/utils/dependency_cache.py +1 -1
- claude_mpm/utils/dependency_manager.py +13 -17
- claude_mpm/utils/dependency_strategies.py +8 -10
- claude_mpm/utils/environment_context.py +3 -9
- claude_mpm/utils/error_handler.py +3 -13
- claude_mpm/utils/file_utils.py +1 -1
- claude_mpm/utils/path_operations.py +8 -12
- claude_mpm/utils/robust_installer.py +110 -33
- claude_mpm/utils/subprocess_utils.py +5 -6
- claude_mpm/validation/agent_validator.py +3 -6
- claude_mpm/validation/frontmatter_validator.py +1 -1
- {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/METADATA +1 -1
- claude_mpm-4.1.3.dist-info/RECORD +528 -0
- claude_mpm/cli/commands/run_config_checker.py +0 -160
- claude_mpm-4.1.1.dist-info/RECORD +0 -494
- {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/top_level.txt +0 -0
|
@@ -36,12 +36,10 @@ class SocketIOServiceInterface(ABC):
|
|
|
36
36
|
@abstractmethod
|
|
37
37
|
def start_sync(self) -> None:
|
|
38
38
|
"""Start the WebSocket server synchronously."""
|
|
39
|
-
pass
|
|
40
39
|
|
|
41
40
|
@abstractmethod
|
|
42
41
|
def stop_sync(self) -> None:
|
|
43
42
|
"""Stop the WebSocket server synchronously."""
|
|
44
|
-
pass
|
|
45
43
|
|
|
46
44
|
@abstractmethod
|
|
47
45
|
def broadcast_event(self, event_type: str, data: Dict[str, Any]) -> None:
|
|
@@ -51,7 +49,6 @@ class SocketIOServiceInterface(ABC):
|
|
|
51
49
|
event_type: Type of event to broadcast
|
|
52
50
|
data: Event data to send
|
|
53
51
|
"""
|
|
54
|
-
pass
|
|
55
52
|
|
|
56
53
|
@abstractmethod
|
|
57
54
|
def send_to_client(
|
|
@@ -67,7 +64,6 @@ class SocketIOServiceInterface(ABC):
|
|
|
67
64
|
Returns:
|
|
68
65
|
True if message sent successfully
|
|
69
66
|
"""
|
|
70
|
-
pass
|
|
71
67
|
|
|
72
68
|
@abstractmethod
|
|
73
69
|
def get_connection_count(self) -> int:
|
|
@@ -76,7 +72,6 @@ class SocketIOServiceInterface(ABC):
|
|
|
76
72
|
Returns:
|
|
77
73
|
Number of connected clients
|
|
78
74
|
"""
|
|
79
|
-
pass
|
|
80
75
|
|
|
81
76
|
@abstractmethod
|
|
82
77
|
def is_running(self) -> bool:
|
|
@@ -85,7 +80,6 @@ class SocketIOServiceInterface(ABC):
|
|
|
85
80
|
Returns:
|
|
86
81
|
True if server is active
|
|
87
82
|
"""
|
|
88
|
-
pass
|
|
89
83
|
|
|
90
84
|
@abstractmethod
|
|
91
85
|
def session_started(
|
|
@@ -98,12 +92,10 @@ class SocketIOServiceInterface(ABC):
|
|
|
98
92
|
launch_method: Method used to launch the session
|
|
99
93
|
working_dir: Working directory of the session
|
|
100
94
|
"""
|
|
101
|
-
pass
|
|
102
95
|
|
|
103
96
|
@abstractmethod
|
|
104
97
|
def session_ended(self) -> None:
|
|
105
98
|
"""Notify that a session has ended."""
|
|
106
|
-
pass
|
|
107
99
|
|
|
108
100
|
@abstractmethod
|
|
109
101
|
def claude_status_changed(
|
|
@@ -116,7 +108,6 @@ class SocketIOServiceInterface(ABC):
|
|
|
116
108
|
pid: Process ID if applicable
|
|
117
109
|
message: Optional status message
|
|
118
110
|
"""
|
|
119
|
-
pass
|
|
120
111
|
|
|
121
112
|
@abstractmethod
|
|
122
113
|
def agent_delegated(self, agent: str, task: str, status: str = "started") -> None:
|
|
@@ -127,7 +118,6 @@ class SocketIOServiceInterface(ABC):
|
|
|
127
118
|
task: Task assigned to the agent
|
|
128
119
|
status: Status of the delegation
|
|
129
120
|
"""
|
|
130
|
-
pass
|
|
131
121
|
|
|
132
122
|
@abstractmethod
|
|
133
123
|
def todo_updated(self, todos: List[Dict[str, Any]]) -> None:
|
|
@@ -136,7 +126,6 @@ class SocketIOServiceInterface(ABC):
|
|
|
136
126
|
Args:
|
|
137
127
|
todos: Updated list of todo items
|
|
138
128
|
"""
|
|
139
|
-
pass
|
|
140
129
|
|
|
141
130
|
|
|
142
131
|
# Project analyzer interface
|
|
@@ -161,7 +150,6 @@ class ProjectAnalyzerInterface(ABC):
|
|
|
161
150
|
Returns:
|
|
162
151
|
Dictionary with project analysis results
|
|
163
152
|
"""
|
|
164
|
-
pass
|
|
165
153
|
|
|
166
154
|
@abstractmethod
|
|
167
155
|
def detect_technology_stack(self) -> List[str]:
|
|
@@ -170,7 +158,6 @@ class ProjectAnalyzerInterface(ABC):
|
|
|
170
158
|
Returns:
|
|
171
159
|
List of detected technologies
|
|
172
160
|
"""
|
|
173
|
-
pass
|
|
174
161
|
|
|
175
162
|
@abstractmethod
|
|
176
163
|
def analyze_code_patterns(self) -> Dict[str, Any]:
|
|
@@ -179,7 +166,6 @@ class ProjectAnalyzerInterface(ABC):
|
|
|
179
166
|
Returns:
|
|
180
167
|
Dictionary of pattern analysis results
|
|
181
168
|
"""
|
|
182
|
-
pass
|
|
183
169
|
|
|
184
170
|
@abstractmethod
|
|
185
171
|
def get_project_structure(self) -> Dict[str, Any]:
|
|
@@ -188,7 +174,6 @@ class ProjectAnalyzerInterface(ABC):
|
|
|
188
174
|
Returns:
|
|
189
175
|
Dictionary representing project structure
|
|
190
176
|
"""
|
|
191
|
-
pass
|
|
192
177
|
|
|
193
178
|
@abstractmethod
|
|
194
179
|
def identify_entry_points(self) -> List[Path]:
|
|
@@ -197,7 +182,6 @@ class ProjectAnalyzerInterface(ABC):
|
|
|
197
182
|
Returns:
|
|
198
183
|
List of entry point paths
|
|
199
184
|
"""
|
|
200
|
-
pass
|
|
201
185
|
|
|
202
186
|
@abstractmethod
|
|
203
187
|
def get_dependencies(self) -> Dict[str, List[str]]:
|
|
@@ -206,7 +190,6 @@ class ProjectAnalyzerInterface(ABC):
|
|
|
206
190
|
Returns:
|
|
207
191
|
Dictionary mapping dependency types to lists of dependencies
|
|
208
192
|
"""
|
|
209
|
-
pass
|
|
210
193
|
|
|
211
194
|
@abstractmethod
|
|
212
195
|
def analyze_test_coverage(self) -> Dict[str, Any]:
|
|
@@ -215,7 +198,6 @@ class ProjectAnalyzerInterface(ABC):
|
|
|
215
198
|
Returns:
|
|
216
199
|
Dictionary with test coverage information
|
|
217
200
|
"""
|
|
218
|
-
pass
|
|
219
201
|
|
|
220
202
|
@abstractmethod
|
|
221
203
|
def get_build_configuration(self) -> Dict[str, Any]:
|
|
@@ -224,7 +206,6 @@ class ProjectAnalyzerInterface(ABC):
|
|
|
224
206
|
Returns:
|
|
225
207
|
Dictionary with build configuration details
|
|
226
208
|
"""
|
|
227
|
-
pass
|
|
228
209
|
|
|
229
210
|
|
|
230
211
|
# Ticket manager interface
|
|
@@ -253,7 +234,6 @@ class TicketManagerInterface(ABC):
|
|
|
253
234
|
Returns:
|
|
254
235
|
Ticket ID
|
|
255
236
|
"""
|
|
256
|
-
pass
|
|
257
237
|
|
|
258
238
|
@abstractmethod
|
|
259
239
|
def get_ticket(self, ticket_id: str) -> Optional[Dict[str, Any]]:
|
|
@@ -265,7 +245,6 @@ class TicketManagerInterface(ABC):
|
|
|
265
245
|
Returns:
|
|
266
246
|
Ticket data or None if not found
|
|
267
247
|
"""
|
|
268
|
-
pass
|
|
269
248
|
|
|
270
249
|
@abstractmethod
|
|
271
250
|
def update_ticket(self, ticket_id: str, updates: Dict[str, Any]) -> bool:
|
|
@@ -278,7 +257,6 @@ class TicketManagerInterface(ABC):
|
|
|
278
257
|
Returns:
|
|
279
258
|
True if update successful
|
|
280
259
|
"""
|
|
281
|
-
pass
|
|
282
260
|
|
|
283
261
|
@abstractmethod
|
|
284
262
|
def list_tickets(
|
|
@@ -293,7 +271,6 @@ class TicketManagerInterface(ABC):
|
|
|
293
271
|
Returns:
|
|
294
272
|
List of ticket data
|
|
295
273
|
"""
|
|
296
|
-
pass
|
|
297
274
|
|
|
298
275
|
@abstractmethod
|
|
299
276
|
def assign_ticket(self, ticket_id: str, assignee: str) -> bool:
|
|
@@ -306,7 +283,6 @@ class TicketManagerInterface(ABC):
|
|
|
306
283
|
Returns:
|
|
307
284
|
True if assignment successful
|
|
308
285
|
"""
|
|
309
|
-
pass
|
|
310
286
|
|
|
311
287
|
@abstractmethod
|
|
312
288
|
def close_ticket(self, ticket_id: str, resolution: Optional[str] = None) -> bool:
|
|
@@ -319,7 +295,6 @@ class TicketManagerInterface(ABC):
|
|
|
319
295
|
Returns:
|
|
320
296
|
True if close successful
|
|
321
297
|
"""
|
|
322
|
-
pass
|
|
323
298
|
|
|
324
299
|
@abstractmethod
|
|
325
300
|
def search_tickets(self, query: str) -> List[Dict[str, Any]]:
|
|
@@ -331,7 +306,6 @@ class TicketManagerInterface(ABC):
|
|
|
331
306
|
Returns:
|
|
332
307
|
List of matching ticket data
|
|
333
308
|
"""
|
|
334
|
-
pass
|
|
335
309
|
|
|
336
310
|
@abstractmethod
|
|
337
311
|
def get_ticket_statistics(self) -> Dict[str, Any]:
|
|
@@ -340,4 +314,3 @@ class TicketManagerInterface(ABC):
|
|
|
340
314
|
Returns:
|
|
341
315
|
Dictionary with ticket statistics
|
|
342
316
|
"""
|
|
343
|
-
pass
|
|
@@ -35,27 +35,22 @@ class IServiceContainer(ABC):
|
|
|
35
35
|
self, service_type: type, implementation: type, singleton: bool = True
|
|
36
36
|
) -> None:
|
|
37
37
|
"""Register a service implementation"""
|
|
38
|
-
pass
|
|
39
38
|
|
|
40
39
|
@abstractmethod
|
|
41
40
|
def register_instance(self, service_type: type, instance: Any) -> None:
|
|
42
41
|
"""Register a service instance"""
|
|
43
|
-
pass
|
|
44
42
|
|
|
45
43
|
@abstractmethod
|
|
46
44
|
def resolve(self, service_type: type) -> Any:
|
|
47
45
|
"""Resolve a service by type"""
|
|
48
|
-
pass
|
|
49
46
|
|
|
50
47
|
@abstractmethod
|
|
51
48
|
def resolve_all(self, service_type: type) -> List[Any]:
|
|
52
49
|
"""Resolve all implementations of a service type"""
|
|
53
|
-
pass
|
|
54
50
|
|
|
55
51
|
@abstractmethod
|
|
56
52
|
def is_registered(self, service_type: type) -> bool:
|
|
57
53
|
"""Check if a service type is registered"""
|
|
58
|
-
pass
|
|
59
54
|
|
|
60
55
|
|
|
61
56
|
# Configuration management interfaces
|
|
@@ -65,22 +60,18 @@ class IConfigurationService(ABC):
|
|
|
65
60
|
@abstractmethod
|
|
66
61
|
def get(self, key: str, default: Any = None) -> Any:
|
|
67
62
|
"""Get configuration value by key"""
|
|
68
|
-
pass
|
|
69
63
|
|
|
70
64
|
@abstractmethod
|
|
71
65
|
def set(self, key: str, value: Any) -> None:
|
|
72
66
|
"""Set configuration value"""
|
|
73
|
-
pass
|
|
74
67
|
|
|
75
68
|
@abstractmethod
|
|
76
69
|
def reload(self) -> None:
|
|
77
70
|
"""Reload configuration from source"""
|
|
78
|
-
pass
|
|
79
71
|
|
|
80
72
|
@abstractmethod
|
|
81
73
|
def shutdown(self) -> None:
|
|
82
74
|
"""Shutdown configuration service"""
|
|
83
|
-
pass
|
|
84
75
|
|
|
85
76
|
|
|
86
77
|
class IConfigurationManager(ABC):
|
|
@@ -89,32 +80,26 @@ class IConfigurationManager(ABC):
|
|
|
89
80
|
@abstractmethod
|
|
90
81
|
def get(self, key: str, default: Any = None) -> Any:
|
|
91
82
|
"""Get configuration value by key"""
|
|
92
|
-
pass
|
|
93
83
|
|
|
94
84
|
@abstractmethod
|
|
95
85
|
def set(self, key: str, value: Any) -> None:
|
|
96
86
|
"""Set configuration value"""
|
|
97
|
-
pass
|
|
98
87
|
|
|
99
88
|
@abstractmethod
|
|
100
89
|
def validate_config(self, config: Dict[str, Any]) -> Tuple[bool, List[str]]:
|
|
101
90
|
"""Validate configuration structure and values"""
|
|
102
|
-
pass
|
|
103
91
|
|
|
104
92
|
@abstractmethod
|
|
105
93
|
def load_from_file(self, config_path: Path) -> None:
|
|
106
94
|
"""Load configuration from file"""
|
|
107
|
-
pass
|
|
108
95
|
|
|
109
96
|
@abstractmethod
|
|
110
97
|
def save_to_file(self, config_path: Path) -> None:
|
|
111
98
|
"""Save configuration to file"""
|
|
112
|
-
pass
|
|
113
99
|
|
|
114
100
|
@abstractmethod
|
|
115
101
|
def watch_changes(self, callback: callable) -> None:
|
|
116
102
|
"""Watch for configuration changes"""
|
|
117
|
-
pass
|
|
118
103
|
|
|
119
104
|
|
|
120
105
|
# Cache service interface
|
|
@@ -124,32 +109,26 @@ class ICacheService(ABC):
|
|
|
124
109
|
@abstractmethod
|
|
125
110
|
def get(self, key: str) -> Any:
|
|
126
111
|
"""Get value from cache"""
|
|
127
|
-
pass
|
|
128
112
|
|
|
129
113
|
@abstractmethod
|
|
130
114
|
def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
|
|
131
115
|
"""Set value in cache with optional TTL"""
|
|
132
|
-
pass
|
|
133
116
|
|
|
134
117
|
@abstractmethod
|
|
135
118
|
def delete(self, key: str) -> bool:
|
|
136
119
|
"""Delete key from cache"""
|
|
137
|
-
pass
|
|
138
120
|
|
|
139
121
|
@abstractmethod
|
|
140
122
|
def invalidate(self, pattern: str) -> int:
|
|
141
123
|
"""Invalidate keys matching pattern"""
|
|
142
|
-
pass
|
|
143
124
|
|
|
144
125
|
@abstractmethod
|
|
145
126
|
def clear(self) -> None:
|
|
146
127
|
"""Clear all cache entries"""
|
|
147
|
-
pass
|
|
148
128
|
|
|
149
129
|
@abstractmethod
|
|
150
130
|
def get_cache_metrics(self) -> Dict[str, Any]:
|
|
151
131
|
"""Get cache performance metrics"""
|
|
152
|
-
pass
|
|
153
132
|
|
|
154
133
|
|
|
155
134
|
# Health monitoring interface
|
|
@@ -170,22 +149,18 @@ class IHealthMonitor(ABC):
|
|
|
170
149
|
@abstractmethod
|
|
171
150
|
async def check_health(self, service_name: str) -> HealthStatus:
|
|
172
151
|
"""Check health of a specific service"""
|
|
173
|
-
pass
|
|
174
152
|
|
|
175
153
|
@abstractmethod
|
|
176
154
|
async def check_all_services(self) -> Dict[str, HealthStatus]:
|
|
177
155
|
"""Check health of all registered services"""
|
|
178
|
-
pass
|
|
179
156
|
|
|
180
157
|
@abstractmethod
|
|
181
158
|
def register_health_check(self, service_name: str, check_func: callable) -> None:
|
|
182
159
|
"""Register a health check function for a service"""
|
|
183
|
-
pass
|
|
184
160
|
|
|
185
161
|
@abstractmethod
|
|
186
162
|
def get_health_summary(self) -> Dict[str, Any]:
|
|
187
163
|
"""Get overall health summary"""
|
|
188
|
-
pass
|
|
189
164
|
|
|
190
165
|
|
|
191
166
|
# Prompt cache interface
|
|
@@ -211,27 +186,22 @@ class IPromptCache(ABC):
|
|
|
211
186
|
@abstractmethod
|
|
212
187
|
def get(self, key: str) -> Optional[Any]:
|
|
213
188
|
"""Get cached value by key"""
|
|
214
|
-
pass
|
|
215
189
|
|
|
216
190
|
@abstractmethod
|
|
217
191
|
def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
|
|
218
192
|
"""Set cached value with optional TTL"""
|
|
219
|
-
pass
|
|
220
193
|
|
|
221
194
|
@abstractmethod
|
|
222
195
|
def invalidate(self, pattern: str) -> int:
|
|
223
196
|
"""Invalidate cache entries matching pattern"""
|
|
224
|
-
pass
|
|
225
197
|
|
|
226
198
|
@abstractmethod
|
|
227
199
|
def get_stats(self) -> Dict[str, Any]:
|
|
228
200
|
"""Get cache statistics"""
|
|
229
|
-
pass
|
|
230
201
|
|
|
231
202
|
@abstractmethod
|
|
232
203
|
def clear(self) -> None:
|
|
233
204
|
"""Clear all cache entries"""
|
|
234
|
-
pass
|
|
235
205
|
|
|
236
206
|
|
|
237
207
|
# Template management interface
|
|
@@ -253,17 +223,14 @@ class ITemplateManager(ABC):
|
|
|
253
223
|
self, template_content: str, context: TemplateRenderContext
|
|
254
224
|
) -> str:
|
|
255
225
|
"""Render template with given context"""
|
|
256
|
-
pass
|
|
257
226
|
|
|
258
227
|
@abstractmethod
|
|
259
228
|
async def load_template(self, template_path: Path) -> str:
|
|
260
229
|
"""Load template from file"""
|
|
261
|
-
pass
|
|
262
230
|
|
|
263
231
|
@abstractmethod
|
|
264
232
|
def register_function(self, name: str, func: callable) -> None:
|
|
265
233
|
"""Register custom template function"""
|
|
266
|
-
pass
|
|
267
234
|
|
|
268
235
|
|
|
269
236
|
# Service factory interface
|
|
@@ -273,17 +240,14 @@ class IServiceFactory(Generic[ServiceType], ABC):
|
|
|
273
240
|
@abstractmethod
|
|
274
241
|
def create(self, **kwargs) -> ServiceType:
|
|
275
242
|
"""Create service instance"""
|
|
276
|
-
pass
|
|
277
243
|
|
|
278
244
|
@abstractmethod
|
|
279
245
|
def get_service_type(self) -> type:
|
|
280
246
|
"""Get the service type this factory creates"""
|
|
281
|
-
pass
|
|
282
247
|
|
|
283
248
|
@abstractmethod
|
|
284
249
|
def supports(self, service_type: type) -> bool:
|
|
285
250
|
"""Check if factory supports service type"""
|
|
286
|
-
pass
|
|
287
251
|
|
|
288
252
|
|
|
289
253
|
# Logging interface
|
|
@@ -293,27 +257,22 @@ class IStructuredLogger(ABC):
|
|
|
293
257
|
@abstractmethod
|
|
294
258
|
def debug(self, message: str, **kwargs) -> None:
|
|
295
259
|
"""Log debug message with structured data"""
|
|
296
|
-
pass
|
|
297
260
|
|
|
298
261
|
@abstractmethod
|
|
299
262
|
def info(self, message: str, **kwargs) -> None:
|
|
300
263
|
"""Log info message with structured data"""
|
|
301
|
-
pass
|
|
302
264
|
|
|
303
265
|
@abstractmethod
|
|
304
266
|
def warning(self, message: str, **kwargs) -> None:
|
|
305
267
|
"""Log warning message with structured data"""
|
|
306
|
-
pass
|
|
307
268
|
|
|
308
269
|
@abstractmethod
|
|
309
270
|
def error(self, message: str, **kwargs) -> None:
|
|
310
271
|
"""Log error message with structured data"""
|
|
311
|
-
pass
|
|
312
272
|
|
|
313
273
|
@abstractmethod
|
|
314
274
|
def set_context(self, **kwargs) -> None:
|
|
315
275
|
"""Set logging context for all subsequent messages"""
|
|
316
|
-
pass
|
|
317
276
|
|
|
318
277
|
|
|
319
278
|
# Service lifecycle interface
|
|
@@ -323,27 +282,22 @@ class IServiceLifecycle(ABC):
|
|
|
323
282
|
@abstractmethod
|
|
324
283
|
async def initialize(self) -> None:
|
|
325
284
|
"""Initialize the service"""
|
|
326
|
-
pass
|
|
327
285
|
|
|
328
286
|
@abstractmethod
|
|
329
287
|
async def start(self) -> None:
|
|
330
288
|
"""Start the service"""
|
|
331
|
-
pass
|
|
332
289
|
|
|
333
290
|
@abstractmethod
|
|
334
291
|
async def stop(self) -> None:
|
|
335
292
|
"""Stop the service"""
|
|
336
|
-
pass
|
|
337
293
|
|
|
338
294
|
@abstractmethod
|
|
339
295
|
async def restart(self) -> None:
|
|
340
296
|
"""Restart the service"""
|
|
341
|
-
pass
|
|
342
297
|
|
|
343
298
|
@abstractmethod
|
|
344
299
|
def is_running(self) -> bool:
|
|
345
300
|
"""Check if service is running"""
|
|
346
|
-
pass
|
|
347
301
|
|
|
348
302
|
|
|
349
303
|
# Error handling interface
|
|
@@ -353,12 +307,10 @@ class IErrorHandler(ABC):
|
|
|
353
307
|
@abstractmethod
|
|
354
308
|
def handle_error(self, error: Exception, context: Dict[str, Any]) -> None:
|
|
355
309
|
"""Handle error with context"""
|
|
356
|
-
pass
|
|
357
310
|
|
|
358
311
|
@abstractmethod
|
|
359
312
|
def get_error_stats(self) -> Dict[str, Any]:
|
|
360
313
|
"""Get error statistics"""
|
|
361
|
-
pass
|
|
362
314
|
|
|
363
315
|
|
|
364
316
|
# Performance monitoring interface
|
|
@@ -368,24 +320,20 @@ class IPerformanceMonitor(ABC):
|
|
|
368
320
|
@abstractmethod
|
|
369
321
|
def start_timer(self, operation: str) -> str:
|
|
370
322
|
"""Start timing an operation"""
|
|
371
|
-
pass
|
|
372
323
|
|
|
373
324
|
@abstractmethod
|
|
374
325
|
def end_timer(self, timer_id: str) -> float:
|
|
375
326
|
"""End timing and return duration"""
|
|
376
|
-
pass
|
|
377
327
|
|
|
378
328
|
@abstractmethod
|
|
379
329
|
def record_metric(
|
|
380
330
|
self, name: str, value: float, tags: Optional[Dict[str, str]] = None
|
|
381
331
|
) -> None:
|
|
382
332
|
"""Record a performance metric"""
|
|
383
|
-
pass
|
|
384
333
|
|
|
385
334
|
@abstractmethod
|
|
386
335
|
def get_metrics(self) -> Dict[str, Any]:
|
|
387
336
|
"""Get performance metrics"""
|
|
388
|
-
pass
|
|
389
337
|
|
|
390
338
|
|
|
391
339
|
# Event system interface
|
|
@@ -395,19 +343,15 @@ class IEventBus(ABC):
|
|
|
395
343
|
@abstractmethod
|
|
396
344
|
def publish(self, event_type: str, data: Any) -> None:
|
|
397
345
|
"""Publish an event"""
|
|
398
|
-
pass
|
|
399
346
|
|
|
400
347
|
@abstractmethod
|
|
401
348
|
def subscribe(self, event_type: str, handler: callable) -> str:
|
|
402
349
|
"""Subscribe to an event type"""
|
|
403
|
-
pass
|
|
404
350
|
|
|
405
351
|
@abstractmethod
|
|
406
352
|
def unsubscribe(self, subscription_id: str) -> None:
|
|
407
353
|
"""Unsubscribe from events"""
|
|
408
|
-
pass
|
|
409
354
|
|
|
410
355
|
@abstractmethod
|
|
411
356
|
async def publish_async(self, event_type: str, data: Any) -> None:
|
|
412
357
|
"""Publish an event asynchronously"""
|
|
413
|
-
pass
|