claude-mpm 3.9.11__py3-none-any.whl → 4.0.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +2 -2
- claude_mpm/__main__.py +3 -2
- claude_mpm/agents/__init__.py +85 -79
- claude_mpm/agents/agent_loader.py +464 -1003
- claude_mpm/agents/agent_loader_integration.py +45 -45
- claude_mpm/agents/agents_metadata.py +29 -30
- claude_mpm/agents/async_agent_loader.py +156 -138
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/base_agent_loader.py +179 -151
- claude_mpm/agents/frontmatter_validator.py +229 -130
- claude_mpm/agents/schema/agent_schema.json +1 -1
- claude_mpm/agents/system_agent_config.py +213 -147
- claude_mpm/agents/templates/__init__.py +13 -13
- claude_mpm/agents/templates/code_analyzer.json +2 -2
- claude_mpm/agents/templates/data_engineer.json +1 -1
- claude_mpm/agents/templates/documentation.json +23 -11
- claude_mpm/agents/templates/engineer.json +22 -6
- claude_mpm/agents/templates/memory_manager.json +1 -1
- claude_mpm/agents/templates/ops.json +2 -2
- claude_mpm/agents/templates/project_organizer.json +1 -1
- claude_mpm/agents/templates/qa.json +1 -1
- claude_mpm/agents/templates/refactoring_engineer.json +222 -0
- claude_mpm/agents/templates/research.json +20 -14
- claude_mpm/agents/templates/security.json +1 -1
- claude_mpm/agents/templates/ticketing.json +1 -1
- claude_mpm/agents/templates/version_control.json +1 -1
- claude_mpm/agents/templates/web_qa.json +3 -1
- claude_mpm/agents/templates/web_ui.json +2 -2
- claude_mpm/cli/__init__.py +79 -51
- claude_mpm/cli/__main__.py +3 -2
- claude_mpm/cli/commands/__init__.py +20 -20
- claude_mpm/cli/commands/agents.py +279 -247
- claude_mpm/cli/commands/aggregate.py +138 -157
- claude_mpm/cli/commands/cleanup.py +147 -147
- claude_mpm/cli/commands/config.py +93 -76
- claude_mpm/cli/commands/info.py +17 -16
- claude_mpm/cli/commands/mcp.py +140 -905
- claude_mpm/cli/commands/mcp_command_router.py +139 -0
- claude_mpm/cli/commands/mcp_config_commands.py +20 -0
- claude_mpm/cli/commands/mcp_install_commands.py +20 -0
- claude_mpm/cli/commands/mcp_server_commands.py +175 -0
- claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
- claude_mpm/cli/commands/memory.py +239 -203
- claude_mpm/cli/commands/monitor.py +203 -81
- claude_mpm/cli/commands/run.py +380 -429
- claude_mpm/cli/commands/run_config_checker.py +160 -0
- claude_mpm/cli/commands/socketio_monitor.py +235 -0
- claude_mpm/cli/commands/tickets.py +305 -197
- claude_mpm/cli/parser.py +24 -1156
- claude_mpm/cli/parsers/__init__.py +29 -0
- claude_mpm/cli/parsers/agents_parser.py +136 -0
- claude_mpm/cli/parsers/base_parser.py +331 -0
- claude_mpm/cli/parsers/config_parser.py +85 -0
- claude_mpm/cli/parsers/mcp_parser.py +152 -0
- claude_mpm/cli/parsers/memory_parser.py +138 -0
- claude_mpm/cli/parsers/monitor_parser.py +104 -0
- claude_mpm/cli/parsers/run_parser.py +147 -0
- claude_mpm/cli/parsers/tickets_parser.py +203 -0
- claude_mpm/cli/ticket_cli.py +7 -3
- claude_mpm/cli/utils.py +55 -37
- claude_mpm/cli_module/__init__.py +6 -6
- claude_mpm/cli_module/args.py +188 -140
- claude_mpm/cli_module/commands.py +79 -70
- claude_mpm/cli_module/migration_example.py +38 -60
- claude_mpm/config/__init__.py +32 -25
- claude_mpm/config/agent_config.py +151 -119
- claude_mpm/config/experimental_features.py +71 -73
- claude_mpm/config/paths.py +94 -208
- claude_mpm/config/socketio_config.py +84 -73
- claude_mpm/constants.py +35 -18
- claude_mpm/core/__init__.py +9 -6
- claude_mpm/core/agent_name_normalizer.py +68 -71
- claude_mpm/core/agent_registry.py +372 -521
- claude_mpm/core/agent_session_manager.py +74 -63
- claude_mpm/core/base_service.py +116 -87
- claude_mpm/core/cache.py +119 -153
- claude_mpm/core/claude_runner.py +425 -1120
- claude_mpm/core/config.py +263 -168
- claude_mpm/core/config_aliases.py +69 -61
- claude_mpm/core/config_constants.py +292 -0
- claude_mpm/core/constants.py +57 -99
- claude_mpm/core/container.py +211 -178
- claude_mpm/core/exceptions.py +233 -89
- claude_mpm/core/factories.py +92 -54
- claude_mpm/core/framework_loader.py +378 -220
- claude_mpm/core/hook_manager.py +198 -83
- claude_mpm/core/hook_performance_config.py +136 -0
- claude_mpm/core/injectable_service.py +61 -55
- claude_mpm/core/interactive_session.py +165 -155
- claude_mpm/core/interfaces.py +221 -195
- claude_mpm/core/lazy.py +96 -96
- claude_mpm/core/logger.py +133 -107
- claude_mpm/core/logging_config.py +185 -157
- claude_mpm/core/minimal_framework_loader.py +20 -15
- claude_mpm/core/mixins.py +30 -29
- claude_mpm/core/oneshot_session.py +215 -181
- claude_mpm/core/optimized_agent_loader.py +134 -138
- claude_mpm/core/optimized_startup.py +159 -157
- claude_mpm/core/pm_hook_interceptor.py +85 -72
- claude_mpm/core/service_registry.py +103 -101
- claude_mpm/core/session_manager.py +97 -87
- claude_mpm/core/socketio_pool.py +212 -158
- claude_mpm/core/tool_access_control.py +58 -51
- claude_mpm/core/types.py +46 -24
- claude_mpm/core/typing_utils.py +166 -82
- claude_mpm/core/unified_agent_registry.py +721 -0
- claude_mpm/core/unified_config.py +550 -0
- claude_mpm/core/unified_paths.py +549 -0
- claude_mpm/dashboard/index.html +1 -1
- claude_mpm/dashboard/open_dashboard.py +51 -17
- claude_mpm/dashboard/static/css/dashboard.css +27 -8
- claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
- claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
- claude_mpm/dashboard/static/dist/dashboard.js +2 -0
- claude_mpm/dashboard/static/dist/socket-client.js +2 -0
- claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
- claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
- claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
- claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
- claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
- claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
- claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
- claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
- claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
- claude_mpm/dashboard/static/js/dashboard.js +178 -453
- claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/js/socket-client.js +120 -54
- claude_mpm/dashboard/templates/index.html +40 -50
- claude_mpm/experimental/cli_enhancements.py +60 -58
- claude_mpm/generators/__init__.py +1 -1
- claude_mpm/generators/agent_profile_generator.py +75 -65
- claude_mpm/hooks/__init__.py +1 -1
- claude_mpm/hooks/base_hook.py +33 -28
- claude_mpm/hooks/claude_hooks/__init__.py +1 -1
- claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
- claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
- claude_mpm/hooks/memory_integration_hook.py +140 -100
- claude_mpm/hooks/tool_call_interceptor.py +89 -76
- claude_mpm/hooks/validation_hooks.py +57 -49
- claude_mpm/init.py +145 -121
- claude_mpm/models/__init__.py +9 -9
- claude_mpm/models/agent_definition.py +33 -23
- claude_mpm/models/agent_session.py +228 -200
- claude_mpm/scripts/__init__.py +1 -1
- claude_mpm/scripts/socketio_daemon.py +192 -75
- claude_mpm/scripts/socketio_server_manager.py +328 -0
- claude_mpm/scripts/start_activity_logging.py +25 -22
- claude_mpm/services/__init__.py +68 -43
- claude_mpm/services/agent_capabilities_service.py +271 -0
- claude_mpm/services/agents/__init__.py +23 -32
- claude_mpm/services/agents/deployment/__init__.py +3 -3
- claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
- claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
- claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
- claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
- claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
- claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
- claude_mpm/services/agents/deployment/agent_validator.py +352 -0
- claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
- claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
- claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
- claude_mpm/services/agents/deployment/config/__init__.py +13 -0
- claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
- claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
- claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
- claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
- claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
- claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
- claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
- claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
- claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
- claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
- claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
- claude_mpm/services/agents/deployment/results/__init__.py +13 -0
- claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
- claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
- claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
- claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
- claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
- claude_mpm/services/agents/loading/__init__.py +2 -2
- claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
- claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
- claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
- claude_mpm/services/agents/management/__init__.py +2 -2
- claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
- claude_mpm/services/agents/management/agent_management_service.py +209 -156
- claude_mpm/services/agents/memory/__init__.py +9 -6
- claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
- claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
- claude_mpm/services/agents/memory/analyzer.py +430 -0
- claude_mpm/services/agents/memory/content_manager.py +376 -0
- claude_mpm/services/agents/memory/template_generator.py +468 -0
- claude_mpm/services/agents/registry/__init__.py +7 -10
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
- claude_mpm/services/agents/registry/modification_tracker.py +351 -285
- claude_mpm/services/async_session_logger.py +187 -153
- claude_mpm/services/claude_session_logger.py +87 -72
- claude_mpm/services/command_handler_service.py +217 -0
- claude_mpm/services/communication/__init__.py +3 -2
- claude_mpm/services/core/__init__.py +50 -97
- claude_mpm/services/core/base.py +60 -53
- claude_mpm/services/core/interfaces/__init__.py +188 -0
- claude_mpm/services/core/interfaces/agent.py +351 -0
- claude_mpm/services/core/interfaces/communication.py +343 -0
- claude_mpm/services/core/interfaces/infrastructure.py +413 -0
- claude_mpm/services/core/interfaces/service.py +434 -0
- claude_mpm/services/core/interfaces.py +19 -944
- claude_mpm/services/event_aggregator.py +208 -170
- claude_mpm/services/exceptions.py +387 -308
- claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
- claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
- claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
- claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
- claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
- claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
- claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
- claude_mpm/services/hook_service.py +106 -114
- claude_mpm/services/infrastructure/__init__.py +7 -5
- claude_mpm/services/infrastructure/context_preservation.py +233 -199
- claude_mpm/services/infrastructure/daemon_manager.py +279 -0
- claude_mpm/services/infrastructure/logging.py +83 -76
- claude_mpm/services/infrastructure/monitoring.py +547 -404
- claude_mpm/services/mcp_gateway/__init__.py +30 -13
- claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
- claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
- claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
- claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
- claude_mpm/services/mcp_gateway/core/base.py +80 -67
- claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
- claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
- claude_mpm/services/mcp_gateway/main.py +287 -137
- claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
- claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
- claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
- claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
- claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
- claude_mpm/services/memory/__init__.py +2 -2
- claude_mpm/services/memory/builder.py +451 -362
- claude_mpm/services/memory/cache/__init__.py +2 -2
- claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
- claude_mpm/services/memory/cache/simple_cache.py +107 -93
- claude_mpm/services/memory/indexed_memory.py +195 -193
- claude_mpm/services/memory/optimizer.py +267 -234
- claude_mpm/services/memory/router.py +571 -263
- claude_mpm/services/memory_hook_service.py +237 -0
- claude_mpm/services/port_manager.py +223 -0
- claude_mpm/services/project/__init__.py +3 -3
- claude_mpm/services/project/analyzer.py +451 -305
- claude_mpm/services/project/registry.py +262 -240
- claude_mpm/services/recovery_manager.py +287 -231
- claude_mpm/services/response_tracker.py +87 -67
- claude_mpm/services/runner_configuration_service.py +587 -0
- claude_mpm/services/session_management_service.py +304 -0
- claude_mpm/services/socketio/__init__.py +4 -4
- claude_mpm/services/socketio/client_proxy.py +174 -0
- claude_mpm/services/socketio/handlers/__init__.py +3 -3
- claude_mpm/services/socketio/handlers/base.py +44 -30
- claude_mpm/services/socketio/handlers/connection.py +145 -65
- claude_mpm/services/socketio/handlers/file.py +123 -108
- claude_mpm/services/socketio/handlers/git.py +607 -373
- claude_mpm/services/socketio/handlers/hook.py +170 -0
- claude_mpm/services/socketio/handlers/memory.py +4 -4
- claude_mpm/services/socketio/handlers/project.py +4 -4
- claude_mpm/services/socketio/handlers/registry.py +53 -38
- claude_mpm/services/socketio/server/__init__.py +18 -0
- claude_mpm/services/socketio/server/broadcaster.py +252 -0
- claude_mpm/services/socketio/server/core.py +399 -0
- claude_mpm/services/socketio/server/main.py +323 -0
- claude_mpm/services/socketio_client_manager.py +160 -133
- claude_mpm/services/socketio_server.py +36 -1885
- claude_mpm/services/subprocess_launcher_service.py +316 -0
- claude_mpm/services/system_instructions_service.py +258 -0
- claude_mpm/services/ticket_manager.py +19 -533
- claude_mpm/services/utility_service.py +285 -0
- claude_mpm/services/version_control/__init__.py +18 -21
- claude_mpm/services/version_control/branch_strategy.py +20 -10
- claude_mpm/services/version_control/conflict_resolution.py +37 -13
- claude_mpm/services/version_control/git_operations.py +52 -21
- claude_mpm/services/version_control/semantic_versioning.py +92 -53
- claude_mpm/services/version_control/version_parser.py +145 -125
- claude_mpm/services/version_service.py +270 -0
- claude_mpm/storage/__init__.py +2 -2
- claude_mpm/storage/state_storage.py +177 -181
- claude_mpm/ticket_wrapper.py +2 -2
- claude_mpm/utils/__init__.py +2 -2
- claude_mpm/utils/agent_dependency_loader.py +453 -243
- claude_mpm/utils/config_manager.py +157 -118
- claude_mpm/utils/console.py +1 -1
- claude_mpm/utils/dependency_cache.py +102 -107
- claude_mpm/utils/dependency_manager.py +52 -47
- claude_mpm/utils/dependency_strategies.py +131 -96
- claude_mpm/utils/environment_context.py +110 -102
- claude_mpm/utils/error_handler.py +75 -55
- claude_mpm/utils/file_utils.py +80 -67
- claude_mpm/utils/framework_detection.py +12 -11
- claude_mpm/utils/import_migration_example.py +12 -60
- claude_mpm/utils/imports.py +48 -45
- claude_mpm/utils/path_operations.py +100 -93
- claude_mpm/utils/robust_installer.py +172 -164
- claude_mpm/utils/session_logging.py +30 -23
- claude_mpm/utils/subprocess_utils.py +99 -61
- claude_mpm/validation/__init__.py +1 -1
- claude_mpm/validation/agent_validator.py +151 -111
- claude_mpm/validation/frontmatter_validator.py +92 -71
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +27 -1
- claude_mpm-4.0.3.dist-info/RECORD +402 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
- claude_mpm/cli/commands/run_guarded.py +0 -511
- claude_mpm/config/memory_guardian_config.py +0 -325
- claude_mpm/config/memory_guardian_yaml.py +0 -335
- claude_mpm/core/config_paths.py +0 -150
- claude_mpm/core/memory_aware_runner.py +0 -353
- claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
- claude_mpm/deployment_paths.py +0 -261
- claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
- claude_mpm/models/state_models.py +0 -433
- claude_mpm/services/agent/__init__.py +0 -24
- claude_mpm/services/agent/deployment.py +0 -2548
- claude_mpm/services/agent/management.py +0 -598
- claude_mpm/services/agent/registry.py +0 -813
- claude_mpm/services/agents/registry/agent_registry.py +0 -813
- claude_mpm/services/communication/socketio.py +0 -1935
- claude_mpm/services/communication/websocket.py +0 -479
- claude_mpm/services/framework_claude_md_generator.py +0 -624
- claude_mpm/services/health_monitor.py +0 -893
- claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
- claude_mpm/services/infrastructure/health_monitor.py +0 -775
- claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
- claude_mpm/services/infrastructure/memory_guardian.py +0 -944
- claude_mpm/services/infrastructure/restart_protection.py +0 -642
- claude_mpm/services/infrastructure/state_manager.py +0 -774
- claude_mpm/services/mcp_gateway/manager.py +0 -334
- claude_mpm/services/optimized_hook_service.py +0 -542
- claude_mpm/services/project_analyzer.py +0 -864
- claude_mpm/services/project_registry.py +0 -608
- claude_mpm/services/standalone_socketio_server.py +0 -1300
- claude_mpm/services/ticket_manager_di.py +0 -318
- claude_mpm/services/ticketing_service_original.py +0 -510
- claude_mpm/utils/paths.py +0 -395
- claude_mpm/utils/platform_memory.py +0 -524
- claude_mpm-3.9.11.dist-info/RECORD +0 -306
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
| @@ -0,0 +1,434 @@ | |
| 1 | 
            +
            """
         | 
| 2 | 
            +
            Service Management Interfaces for Claude MPM Framework
         | 
| 3 | 
            +
            =====================================================
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            WHY: This module contains interfaces for various service operations including
         | 
| 6 | 
            +
            memory management, hooks, WebSocket/SocketIO communication, project analysis,
         | 
| 7 | 
            +
            and ticket management. These are grouped as "services" because they provide
         | 
| 8 | 
            +
            specific business functionality.
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            DESIGN DECISION: Service interfaces are separated from infrastructure and agent
         | 
| 11 | 
            +
            interfaces because they represent higher-level business services that build
         | 
| 12 | 
            +
            upon the infrastructure layer.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            EXTRACTED FROM: services/core/interfaces.py (lines 876-1397)
         | 
| 15 | 
            +
            - Memory service and hooks
         | 
| 16 | 
            +
            - WebSocket/SocketIO communication
         | 
| 17 | 
            +
            - Project analysis and ticket management
         | 
| 18 | 
            +
            """
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            from abc import ABC, abstractmethod
         | 
| 21 | 
            +
            from pathlib import Path
         | 
| 22 | 
            +
            from typing import Any, Dict, List, Optional, Tuple
         | 
| 23 | 
            +
             | 
| 24 | 
            +
             | 
| 25 | 
            +
            # Version service interface
         | 
| 26 | 
            +
            class VersionServiceInterface(ABC):
         | 
| 27 | 
            +
                """Interface for version detection and formatting.
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                WHY: Version detection involves multiple fallback methods and different
         | 
| 30 | 
            +
                formatting requirements. This interface abstracts version logic to enable
         | 
| 31 | 
            +
                different version detection strategies and improve testability.
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                DESIGN DECISION: Provides both raw version and formatted version methods
         | 
| 34 | 
            +
                to support different display contexts and enable caching of version data.
         | 
| 35 | 
            +
                """
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                @abstractmethod
         | 
| 38 | 
            +
                def get_version(self) -> str:
         | 
| 39 | 
            +
                    """Get the current version string.
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    Returns:
         | 
| 42 | 
            +
                        Version string in semantic version format
         | 
| 43 | 
            +
                    """
         | 
| 44 | 
            +
                    pass
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                @abstractmethod
         | 
| 47 | 
            +
                def get_version_info(self) -> Dict[str, Any]:
         | 
| 48 | 
            +
                    """Get detailed version information.
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    Returns:
         | 
| 51 | 
            +
                        Dictionary with version details and metadata
         | 
| 52 | 
            +
                    """
         | 
| 53 | 
            +
                    pass
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                @abstractmethod
         | 
| 56 | 
            +
                def format_version_display(self, include_build: bool = False) -> str:
         | 
| 57 | 
            +
                    """Format version for display purposes.
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                    Args:
         | 
| 60 | 
            +
                        include_build: Whether to include build information
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    Returns:
         | 
| 63 | 
            +
                        Formatted version string for display
         | 
| 64 | 
            +
                    """
         | 
| 65 | 
            +
                    pass
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                @abstractmethod
         | 
| 68 | 
            +
                def check_for_updates(self) -> Dict[str, Any]:
         | 
| 69 | 
            +
                    """Check for available updates.
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                    Returns:
         | 
| 72 | 
            +
                        Dictionary with update information
         | 
| 73 | 
            +
                    """
         | 
| 74 | 
            +
                    pass
         | 
| 75 | 
            +
             | 
| 76 | 
            +
             | 
| 77 | 
            +
            # Command handler interface
         | 
| 78 | 
            +
            class CommandHandlerInterface(ABC):
         | 
| 79 | 
            +
                """Interface for handling MPM commands.
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                WHY: MPM command handling involves parsing, routing, and execution logic
         | 
| 82 | 
            +
                that should be separated from the main runner. This interface abstracts
         | 
| 83 | 
            +
                command handling to enable different command processing strategies.
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                DESIGN DECISION: Commands return structured results to enable consistent
         | 
| 86 | 
            +
                error handling and response formatting across different command types.
         | 
| 87 | 
            +
                """
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                @abstractmethod
         | 
| 90 | 
            +
                def handle_command(self, command: str, args: List[str]) -> Dict[str, Any]:
         | 
| 91 | 
            +
                    """Handle an MPM command.
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                    Args:
         | 
| 94 | 
            +
                        command: Command name to execute
         | 
| 95 | 
            +
                        args: Command arguments
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                    Returns:
         | 
| 98 | 
            +
                        Dictionary with command execution results
         | 
| 99 | 
            +
                    """
         | 
| 100 | 
            +
                    pass
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                @abstractmethod
         | 
| 103 | 
            +
                def get_available_commands(self) -> List[str]:
         | 
| 104 | 
            +
                    """Get list of available commands.
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                    Returns:
         | 
| 107 | 
            +
                        List of available command names
         | 
| 108 | 
            +
                    """
         | 
| 109 | 
            +
                    pass
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                @abstractmethod
         | 
| 112 | 
            +
                def get_command_help(self, command: str) -> str:
         | 
| 113 | 
            +
                    """Get help text for a specific command.
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                    Args:
         | 
| 116 | 
            +
                        command: Command name
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                    Returns:
         | 
| 119 | 
            +
                        Help text for the command
         | 
| 120 | 
            +
                    """
         | 
| 121 | 
            +
                    pass
         | 
| 122 | 
            +
             | 
| 123 | 
            +
             | 
| 124 | 
            +
            # Memory hook interface
         | 
| 125 | 
            +
            class MemoryHookInterface(ABC):
         | 
| 126 | 
            +
                """Interface for memory hook management.
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                WHY: Memory management involves registering hooks at various points in the
         | 
| 129 | 
            +
                Claude interaction lifecycle. This interface abstracts memory hook logic
         | 
| 130 | 
            +
                to enable different memory management strategies.
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                DESIGN DECISION: Provides both hook registration and status methods for
         | 
| 133 | 
            +
                comprehensive memory management integration.
         | 
| 134 | 
            +
                """
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                @abstractmethod
         | 
| 137 | 
            +
                def register_memory_hooks(self):
         | 
| 138 | 
            +
                    """Register memory-related hooks with the hook service."""
         | 
| 139 | 
            +
                    pass
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                @abstractmethod
         | 
| 142 | 
            +
                def unregister_memory_hooks(self):
         | 
| 143 | 
            +
                    """Unregister memory-related hooks from the hook service."""
         | 
| 144 | 
            +
                    pass
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                @abstractmethod
         | 
| 147 | 
            +
                def get_hook_status(self) -> Dict[str, Any]:
         | 
| 148 | 
            +
                    """Get status of registered memory hooks.
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                    Returns:
         | 
| 151 | 
            +
                        Dictionary with hook status information
         | 
| 152 | 
            +
                    """
         | 
| 153 | 
            +
                    pass
         | 
| 154 | 
            +
             | 
| 155 | 
            +
             | 
| 156 | 
            +
            # Session management interface
         | 
| 157 | 
            +
            class SessionManagementInterface(ABC):
         | 
| 158 | 
            +
                """Interface for session management and orchestration.
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                WHY: Session management involves complex orchestration of multiple services
         | 
| 161 | 
            +
                and lifecycle management. This interface abstracts session logic to enable
         | 
| 162 | 
            +
                different session management strategies.
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                DESIGN DECISION: Provides both synchronous and asynchronous session methods
         | 
| 165 | 
            +
                to support different execution contexts and enable proper cleanup.
         | 
| 166 | 
            +
                """
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                @abstractmethod
         | 
| 169 | 
            +
                def start_session(self, session_config: Dict[str, Any]) -> str:
         | 
| 170 | 
            +
                    """Start a new session.
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                    Args:
         | 
| 173 | 
            +
                        session_config: Configuration for the session
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                    Returns:
         | 
| 176 | 
            +
                        Session ID
         | 
| 177 | 
            +
                    """
         | 
| 178 | 
            +
                    pass
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                @abstractmethod
         | 
| 181 | 
            +
                def end_session(self, session_id: str) -> bool:
         | 
| 182 | 
            +
                    """End an active session.
         | 
| 183 | 
            +
             | 
| 184 | 
            +
                    Args:
         | 
| 185 | 
            +
                        session_id: ID of session to end
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                    Returns:
         | 
| 188 | 
            +
                        True if session ended successfully
         | 
| 189 | 
            +
                    """
         | 
| 190 | 
            +
                    pass
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                @abstractmethod
         | 
| 193 | 
            +
                def get_session_status(self, session_id: str) -> Dict[str, Any]:
         | 
| 194 | 
            +
                    """Get status of a session.
         | 
| 195 | 
            +
             | 
| 196 | 
            +
                    Args:
         | 
| 197 | 
            +
                        session_id: ID of session
         | 
| 198 | 
            +
             | 
| 199 | 
            +
                    Returns:
         | 
| 200 | 
            +
                        Dictionary with session status information
         | 
| 201 | 
            +
                    """
         | 
| 202 | 
            +
                    pass
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                @abstractmethod
         | 
| 205 | 
            +
                def list_active_sessions(self) -> List[str]:
         | 
| 206 | 
            +
                    """List all active session IDs.
         | 
| 207 | 
            +
             | 
| 208 | 
            +
                    Returns:
         | 
| 209 | 
            +
                        List of active session IDs
         | 
| 210 | 
            +
                    """
         | 
| 211 | 
            +
                    pass
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                @abstractmethod
         | 
| 214 | 
            +
                async def cleanup_sessions(self) -> int:
         | 
| 215 | 
            +
                    """Clean up inactive or expired sessions.
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                    Returns:
         | 
| 218 | 
            +
                        Number of sessions cleaned up
         | 
| 219 | 
            +
                    """
         | 
| 220 | 
            +
                    pass
         | 
| 221 | 
            +
             | 
| 222 | 
            +
             | 
| 223 | 
            +
            # Utility service interface
         | 
| 224 | 
            +
            class UtilityServiceInterface(ABC):
         | 
| 225 | 
            +
                """Interface for utility functions and helper methods.
         | 
| 226 | 
            +
             | 
| 227 | 
            +
                WHY: Utility functions are often scattered throughout the codebase and
         | 
| 228 | 
            +
                can benefit from centralization. This interface provides a clean way
         | 
| 229 | 
            +
                to access common utility functions.
         | 
| 230 | 
            +
             | 
| 231 | 
            +
                DESIGN DECISION: Groups related utility functions into logical categories
         | 
| 232 | 
            +
                to maintain organization while providing a single access point.
         | 
| 233 | 
            +
                """
         | 
| 234 | 
            +
             | 
| 235 | 
            +
                @abstractmethod
         | 
| 236 | 
            +
                def format_file_size(self, size_bytes: int) -> str:
         | 
| 237 | 
            +
                    """Format file size in human-readable format.
         | 
| 238 | 
            +
             | 
| 239 | 
            +
                    Args:
         | 
| 240 | 
            +
                        size_bytes: Size in bytes
         | 
| 241 | 
            +
             | 
| 242 | 
            +
                    Returns:
         | 
| 243 | 
            +
                        Formatted size string (e.g., "1.5 MB")
         | 
| 244 | 
            +
                    """
         | 
| 245 | 
            +
                    pass
         | 
| 246 | 
            +
             | 
| 247 | 
            +
                @abstractmethod
         | 
| 248 | 
            +
                def format_duration(self, seconds: float) -> str:
         | 
| 249 | 
            +
                    """Format duration in human-readable format.
         | 
| 250 | 
            +
             | 
| 251 | 
            +
                    Args:
         | 
| 252 | 
            +
                        seconds: Duration in seconds
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                    Returns:
         | 
| 255 | 
            +
                        Formatted duration string (e.g., "2m 30s")
         | 
| 256 | 
            +
                    """
         | 
| 257 | 
            +
                    pass
         | 
| 258 | 
            +
             | 
| 259 | 
            +
                @abstractmethod
         | 
| 260 | 
            +
                def sanitize_filename(self, filename: str) -> str:
         | 
| 261 | 
            +
                    """Sanitize filename for safe filesystem usage.
         | 
| 262 | 
            +
             | 
| 263 | 
            +
                    Args:
         | 
| 264 | 
            +
                        filename: Original filename
         | 
| 265 | 
            +
             | 
| 266 | 
            +
                    Returns:
         | 
| 267 | 
            +
                        Sanitized filename
         | 
| 268 | 
            +
                    """
         | 
| 269 | 
            +
                    pass
         | 
| 270 | 
            +
             | 
| 271 | 
            +
                @abstractmethod
         | 
| 272 | 
            +
                def generate_unique_id(self, prefix: str = "") -> str:
         | 
| 273 | 
            +
                    """Generate a unique identifier.
         | 
| 274 | 
            +
             | 
| 275 | 
            +
                    Args:
         | 
| 276 | 
            +
                        prefix: Optional prefix for the ID
         | 
| 277 | 
            +
             | 
| 278 | 
            +
                    Returns:
         | 
| 279 | 
            +
                        Unique identifier string
         | 
| 280 | 
            +
                    """
         | 
| 281 | 
            +
                    pass
         | 
| 282 | 
            +
             | 
| 283 | 
            +
                @abstractmethod
         | 
| 284 | 
            +
                def validate_path(self, path: Path) -> Tuple[bool, Optional[str]]:
         | 
| 285 | 
            +
                    """Validate a filesystem path.
         | 
| 286 | 
            +
             | 
| 287 | 
            +
                    Args:
         | 
| 288 | 
            +
                        path: Path to validate
         | 
| 289 | 
            +
             | 
| 290 | 
            +
                    Returns:
         | 
| 291 | 
            +
                        Tuple of (is_valid, error_message)
         | 
| 292 | 
            +
                    """
         | 
| 293 | 
            +
                    pass
         | 
| 294 | 
            +
             | 
| 295 | 
            +
             | 
| 296 | 
            +
            # Memory service interface
         | 
| 297 | 
            +
            class MemoryServiceInterface(ABC):
         | 
| 298 | 
            +
                """Interface for memory management operations.
         | 
| 299 | 
            +
             | 
| 300 | 
            +
                WHY: Memory management is crucial for agent learning and context retention.
         | 
| 301 | 
            +
                This interface abstracts memory storage, retrieval, and optimization to
         | 
| 302 | 
            +
                enable different backends (file-based, database, distributed cache).
         | 
| 303 | 
            +
             | 
| 304 | 
            +
                DESIGN DECISION: Memory operations return success/failure status to enable
         | 
| 305 | 
            +
                proper error handling and fallback strategies when memory is unavailable.
         | 
| 306 | 
            +
                """
         | 
| 307 | 
            +
             | 
| 308 | 
            +
                @abstractmethod
         | 
| 309 | 
            +
                def load_memory(self, agent_id: str) -> Optional[str]:
         | 
| 310 | 
            +
                    """Load memory for a specific agent.
         | 
| 311 | 
            +
             | 
| 312 | 
            +
                    Args:
         | 
| 313 | 
            +
                        agent_id: Identifier of the agent
         | 
| 314 | 
            +
             | 
| 315 | 
            +
                    Returns:
         | 
| 316 | 
            +
                        Memory content as string or None if not found
         | 
| 317 | 
            +
                    """
         | 
| 318 | 
            +
                    pass
         | 
| 319 | 
            +
             | 
| 320 | 
            +
                @abstractmethod
         | 
| 321 | 
            +
                def save_memory(self, agent_id: str, content: str) -> bool:
         | 
| 322 | 
            +
                    """Save memory for a specific agent.
         | 
| 323 | 
            +
             | 
| 324 | 
            +
                    Args:
         | 
| 325 | 
            +
                        agent_id: Identifier of the agent
         | 
| 326 | 
            +
                        content: Memory content to save
         | 
| 327 | 
            +
             | 
| 328 | 
            +
                    Returns:
         | 
| 329 | 
            +
                        True if save successful
         | 
| 330 | 
            +
                    """
         | 
| 331 | 
            +
                    pass
         | 
| 332 | 
            +
             | 
| 333 | 
            +
                @abstractmethod
         | 
| 334 | 
            +
                def validate_memory_size(self, content: str) -> Tuple[bool, Optional[str]]:
         | 
| 335 | 
            +
                    """Validate memory content size and structure.
         | 
| 336 | 
            +
             | 
| 337 | 
            +
                    Args:
         | 
| 338 | 
            +
                        content: Memory content to validate
         | 
| 339 | 
            +
             | 
| 340 | 
            +
                    Returns:
         | 
| 341 | 
            +
                        Tuple of (is_valid, error_message)
         | 
| 342 | 
            +
                    """
         | 
| 343 | 
            +
                    pass
         | 
| 344 | 
            +
             | 
| 345 | 
            +
                @abstractmethod
         | 
| 346 | 
            +
                def optimize_memory(self, agent_id: str) -> bool:
         | 
| 347 | 
            +
                    """Optimize memory by removing duplicates and consolidating entries.
         | 
| 348 | 
            +
             | 
| 349 | 
            +
                    Args:
         | 
| 350 | 
            +
                        agent_id: Identifier of the agent
         | 
| 351 | 
            +
             | 
| 352 | 
            +
                    Returns:
         | 
| 353 | 
            +
                        True if optimization successful
         | 
| 354 | 
            +
                    """
         | 
| 355 | 
            +
                    pass
         | 
| 356 | 
            +
             | 
| 357 | 
            +
                @abstractmethod
         | 
| 358 | 
            +
                def get_memory_stats(self, agent_id: str) -> Dict[str, Any]:
         | 
| 359 | 
            +
                    """Get memory statistics for an agent.
         | 
| 360 | 
            +
             | 
| 361 | 
            +
                    Args:
         | 
| 362 | 
            +
                        agent_id: Identifier of the agent
         | 
| 363 | 
            +
             | 
| 364 | 
            +
                    Returns:
         | 
| 365 | 
            +
                        Dictionary with memory statistics
         | 
| 366 | 
            +
                    """
         | 
| 367 | 
            +
                    pass
         | 
| 368 | 
            +
             | 
| 369 | 
            +
             | 
| 370 | 
            +
            # Hook service interface
         | 
| 371 | 
            +
            class HookServiceInterface(ABC):
         | 
| 372 | 
            +
                """Interface for hook execution operations.
         | 
| 373 | 
            +
             | 
| 374 | 
            +
                WHY: Hooks provide extensibility points for the framework, allowing plugins
         | 
| 375 | 
            +
                and extensions to modify behavior. This interface ensures consistent hook
         | 
| 376 | 
            +
                registration, priority handling, and execution across different hook systems.
         | 
| 377 | 
            +
             | 
| 378 | 
            +
                DESIGN DECISION: Hooks support priority ordering and conditional execution
         | 
| 379 | 
            +
                to enable complex plugin interactions and performance optimization.
         | 
| 380 | 
            +
                """
         | 
| 381 | 
            +
             | 
| 382 | 
            +
                @abstractmethod
         | 
| 383 | 
            +
                def register_hook(
         | 
| 384 | 
            +
                    self, hook_name: str, callback: callable, priority: int = 0
         | 
| 385 | 
            +
                ) -> str:
         | 
| 386 | 
            +
                    """Register a hook callback.
         | 
| 387 | 
            +
             | 
| 388 | 
            +
                    Args:
         | 
| 389 | 
            +
                        hook_name: Name of the hook point
         | 
| 390 | 
            +
                        callback: Function to call when hook is triggered
         | 
| 391 | 
            +
                        priority: Execution priority (higher = earlier)
         | 
| 392 | 
            +
             | 
| 393 | 
            +
                    Returns:
         | 
| 394 | 
            +
                        Hook registration ID
         | 
| 395 | 
            +
                    """
         | 
| 396 | 
            +
                    pass
         | 
| 397 | 
            +
             | 
| 398 | 
            +
                @abstractmethod
         | 
| 399 | 
            +
                def unregister_hook(self, registration_id: str) -> bool:
         | 
| 400 | 
            +
                    """Unregister a hook callback.
         | 
| 401 | 
            +
             | 
| 402 | 
            +
                    Args:
         | 
| 403 | 
            +
                        registration_id: ID returned from register_hook
         | 
| 404 | 
            +
             | 
| 405 | 
            +
                    Returns:
         | 
| 406 | 
            +
                        True if unregistration successful
         | 
| 407 | 
            +
                    """
         | 
| 408 | 
            +
                    pass
         | 
| 409 | 
            +
             | 
| 410 | 
            +
                @abstractmethod
         | 
| 411 | 
            +
                def execute_hook(self, hook_name: str, *args, **kwargs) -> List[Any]:
         | 
| 412 | 
            +
                    """Execute all callbacks for a hook.
         | 
| 413 | 
            +
             | 
| 414 | 
            +
                    Args:
         | 
| 415 | 
            +
                        hook_name: Name of the hook point
         | 
| 416 | 
            +
                        *args: Positional arguments for callbacks
         | 
| 417 | 
            +
                        **kwargs: Keyword arguments for callbacks
         | 
| 418 | 
            +
             | 
| 419 | 
            +
                    Returns:
         | 
| 420 | 
            +
                        List of callback return values
         | 
| 421 | 
            +
                    """
         | 
| 422 | 
            +
                    pass
         | 
| 423 | 
            +
             | 
| 424 | 
            +
                @abstractmethod
         | 
| 425 | 
            +
                def get_hook_info(self, hook_name: str) -> Dict[str, Any]:
         | 
| 426 | 
            +
                    """Get information about registered hooks.
         | 
| 427 | 
            +
             | 
| 428 | 
            +
                    Args:
         | 
| 429 | 
            +
                        hook_name: Name of the hook point
         | 
| 430 | 
            +
             | 
| 431 | 
            +
                    Returns:
         | 
| 432 | 
            +
                        Dictionary with hook information
         | 
| 433 | 
            +
                    """
         | 
| 434 | 
            +
                    pass
         |