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
    
        claude_mpm/core/exceptions.py
    CHANGED
    
    | @@ -13,36 +13,35 @@ Design Principles: | |
| 13 13 |  | 
| 14 14 | 
             
            Usage:
         | 
| 15 15 | 
             
                from claude_mpm.core.exceptions import ConfigurationError, AgentDeploymentError
         | 
| 16 | 
            -
             | 
| 16 | 
            +
             | 
| 17 17 | 
             
                # With context for debugging
         | 
| 18 18 | 
             
                raise ConfigurationError(
         | 
| 19 19 | 
             
                    "Invalid agent configuration",
         | 
| 20 20 | 
             
                    context={"agent_id": "engineer", "field": "version", "value": "invalid"}
         | 
| 21 21 | 
             
                )
         | 
| 22 | 
            -
             | 
| 22 | 
            +
             | 
| 23 23 | 
             
                # Simple usage
         | 
| 24 24 | 
             
                raise AgentDeploymentError("Failed to deploy agent to .claude/agents directory")
         | 
| 25 25 | 
             
            """
         | 
| 26 26 |  | 
| 27 | 
            -
            from typing import Dict,  | 
| 28 | 
            -
            from pathlib import Path
         | 
| 27 | 
            +
            from typing import Any, Dict, List, Optional
         | 
| 29 28 |  | 
| 30 29 |  | 
| 31 30 | 
             
            class MPMError(Exception):
         | 
| 32 31 | 
             
                """Base exception class for all Claude MPM errors.
         | 
| 33 | 
            -
             | 
| 32 | 
            +
             | 
| 34 33 | 
             
                This base class provides common functionality for all MPM exceptions including
         | 
| 35 34 | 
             
                context storage for debugging and structured error representation.
         | 
| 36 | 
            -
             | 
| 35 | 
            +
             | 
| 37 36 | 
             
                Attributes:
         | 
| 38 37 | 
             
                    message: Human-readable error message
         | 
| 39 38 | 
             
                    context: Optional dictionary with additional debugging context
         | 
| 40 39 | 
             
                    error_code: Machine-readable error code (defaults to class name in lowercase)
         | 
| 41 40 | 
             
                """
         | 
| 42 | 
            -
             | 
| 41 | 
            +
             | 
| 43 42 | 
             
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 44 43 | 
             
                    """Initialize MPM error with message and optional context.
         | 
| 45 | 
            -
             | 
| 44 | 
            +
             | 
| 46 45 | 
             
                    Args:
         | 
| 47 46 | 
             
                        message: Human-readable error message
         | 
| 48 47 | 
             
                        context: Optional dictionary with debugging context
         | 
| @@ -51,24 +50,25 @@ class MPMError(Exception): | |
| 51 50 | 
             
                    self.message = message
         | 
| 52 51 | 
             
                    self.context = context or {}
         | 
| 53 52 | 
             
                    self.error_code = self._generate_error_code()
         | 
| 54 | 
            -
             | 
| 53 | 
            +
             | 
| 55 54 | 
             
                def _generate_error_code(self) -> str:
         | 
| 56 55 | 
             
                    """Generate error code from class name."""
         | 
| 57 56 | 
             
                    # Convert class name from CamelCase to snake_case
         | 
| 58 57 | 
             
                    name = self.__class__.__name__
         | 
| 59 58 | 
             
                    # Remove 'Error' suffix if present
         | 
| 60 | 
            -
                    if name.endswith( | 
| 59 | 
            +
                    if name.endswith("Error"):
         | 
| 61 60 | 
             
                        name = name[:-5]
         | 
| 62 61 | 
             
                    # Special case for MPM acronym
         | 
| 63 | 
            -
                    if name ==  | 
| 64 | 
            -
                        return  | 
| 62 | 
            +
                    if name == "MPM":
         | 
| 63 | 
            +
                        return "mpm"
         | 
| 65 64 | 
             
                    # Convert to snake_case
         | 
| 66 65 | 
             
                    import re
         | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 66 | 
            +
             | 
| 67 | 
            +
                    return re.sub(r"(?<!^)(?=[A-Z])", "_", name).lower()
         | 
| 68 | 
            +
             | 
| 69 69 | 
             
                def to_dict(self) -> Dict[str, Any]:
         | 
| 70 70 | 
             
                    """Convert error to dictionary format for structured logging/handling.
         | 
| 71 | 
            -
             | 
| 71 | 
            +
             | 
| 72 72 | 
             
                    Returns:
         | 
| 73 73 | 
             
                        Dictionary with error type, code, message, and context
         | 
| 74 74 | 
             
                    """
         | 
| @@ -76,9 +76,9 @@ class MPMError(Exception): | |
| 76 76 | 
             
                        "error_type": self.__class__.__name__,
         | 
| 77 77 | 
             
                        "error_code": self.error_code,
         | 
| 78 78 | 
             
                        "message": self.message,
         | 
| 79 | 
            -
                        "context": self.context
         | 
| 79 | 
            +
                        "context": self.context,
         | 
| 80 80 | 
             
                    }
         | 
| 81 | 
            -
             | 
| 81 | 
            +
             | 
| 82 82 | 
             
                def __str__(self) -> str:
         | 
| 83 83 | 
             
                    """String representation with context if available."""
         | 
| 84 84 | 
             
                    if self.context:
         | 
| @@ -89,42 +89,44 @@ class MPMError(Exception): | |
| 89 89 |  | 
| 90 90 | 
             
            class AgentDeploymentError(MPMError):
         | 
| 91 91 | 
             
                """Exception raised when agent deployment fails.
         | 
| 92 | 
            -
             | 
| 92 | 
            +
             | 
| 93 93 | 
             
                This error occurs during agent deployment to .claude/agents directory,
         | 
| 94 94 | 
             
                including template building, version checking, and file operations.
         | 
| 95 | 
            -
             | 
| 95 | 
            +
             | 
| 96 96 | 
             
                Common causes:
         | 
| 97 97 | 
             
                - Template file not found or invalid
         | 
| 98 98 | 
             
                - Permission issues with .claude/agents directory
         | 
| 99 99 | 
             
                - Version conflicts or migration failures
         | 
| 100 100 | 
             
                - YAML generation errors
         | 
| 101 101 | 
             
                """
         | 
| 102 | 
            -
             | 
| 102 | 
            +
             | 
| 103 103 | 
             
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 104 104 | 
             
                    """Initialize agent deployment error.
         | 
| 105 | 
            -
             | 
| 105 | 
            +
             | 
| 106 106 | 
             
                    Args:
         | 
| 107 107 | 
             
                        message: Error message describing deployment failure
         | 
| 108 108 | 
             
                        context: Optional context with agent_id, template_path, deployment_path, etc.
         | 
| 109 109 | 
             
                    """
         | 
| 110 110 | 
             
                    super().__init__(message, context)
         | 
| 111 | 
            -
             | 
| 111 | 
            +
             | 
| 112 112 | 
             
                    # Add helpful guidance based on context
         | 
| 113 113 | 
             
                    if context:
         | 
| 114 | 
            -
                        if  | 
| 114 | 
            +
                        if "agent_id" in context:
         | 
| 115 115 | 
             
                            self.message = f"[Agent: {context['agent_id']}] {message}"
         | 
| 116 | 
            -
                        if  | 
| 117 | 
            -
                            self.message +=  | 
| 118 | 
            -
             | 
| 116 | 
            +
                        if "template_path" in context and "not found" in message.lower():
         | 
| 117 | 
            +
                            self.message += (
         | 
| 118 | 
            +
                                f"\nEnsure template exists at: {context['template_path']}"
         | 
| 119 | 
            +
                            )
         | 
| 120 | 
            +
                        if "permission" in message.lower():
         | 
| 119 121 | 
             
                            self.message += "\nCheck directory permissions for .claude/agents"
         | 
| 120 122 |  | 
| 121 123 |  | 
| 122 124 | 
             
            class ConfigurationError(MPMError):
         | 
| 123 125 | 
             
                """Exception raised when configuration validation fails.
         | 
| 124 | 
            -
             | 
| 126 | 
            +
             | 
| 125 127 | 
             
                This error occurs when configuration files are invalid, missing required
         | 
| 126 128 | 
             
                fields, or contain incompatible values.
         | 
| 127 | 
            -
             | 
| 129 | 
            +
             | 
| 128 130 | 
             
                Common causes:
         | 
| 129 131 | 
             
                - Missing required configuration fields
         | 
| 130 132 | 
             
                - Invalid data types or formats
         | 
| @@ -132,34 +134,34 @@ class ConfigurationError(MPMError): | |
| 132 134 | 
             
                - Schema validation failures
         | 
| 133 135 | 
             
                - Incompatible configuration versions
         | 
| 134 136 | 
             
                """
         | 
| 135 | 
            -
             | 
| 137 | 
            +
             | 
| 136 138 | 
             
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 137 139 | 
             
                    """Initialize configuration error.
         | 
| 138 | 
            -
             | 
| 140 | 
            +
             | 
| 139 141 | 
             
                    Args:
         | 
| 140 142 | 
             
                        message: Error message describing configuration issue
         | 
| 141 143 | 
             
                        context: Optional context with config_file, field, expected_type, actual_value, etc.
         | 
| 142 144 | 
             
                    """
         | 
| 143 145 | 
             
                    super().__init__(message, context)
         | 
| 144 | 
            -
             | 
| 146 | 
            +
             | 
| 145 147 | 
             
                    # Add helpful guidance based on context
         | 
| 146 148 | 
             
                    if context:
         | 
| 147 | 
            -
                        if  | 
| 149 | 
            +
                        if "config_file" in context:
         | 
| 148 150 | 
             
                            self.message = f"[Config: {context['config_file']}] {message}"
         | 
| 149 | 
            -
                        if  | 
| 151 | 
            +
                        if "field" in context:
         | 
| 150 152 | 
             
                            self.message += f"\nField: {context['field']}"
         | 
| 151 | 
            -
                            if  | 
| 153 | 
            +
                            if "expected_type" in context:
         | 
| 152 154 | 
             
                                self.message += f" (expected: {context['expected_type']})"
         | 
| 153 | 
            -
                            if  | 
| 155 | 
            +
                            if "actual_value" in context:
         | 
| 154 156 | 
             
                                self.message += f" (got: {context['actual_value']})"
         | 
| 155 157 |  | 
| 156 158 |  | 
| 157 159 | 
             
            class ConnectionError(MPMError):
         | 
| 158 160 | 
             
                """Exception raised when network or SocketIO connection fails.
         | 
| 159 | 
            -
             | 
| 161 | 
            +
             | 
| 160 162 | 
             
                This error occurs during network operations, including SocketIO server
         | 
| 161 163 | 
             
                connections, port binding, and inter-process communication.
         | 
| 162 | 
            -
             | 
| 164 | 
            +
             | 
| 163 165 | 
             
                Common causes:
         | 
| 164 166 | 
             
                - Port already in use
         | 
| 165 167 | 
             
                - Network interface unavailable
         | 
| @@ -167,32 +169,32 @@ class ConnectionError(MPMError): | |
| 167 169 | 
             
                - Connection timeout
         | 
| 168 170 | 
             
                - Authentication failures
         | 
| 169 171 | 
             
                """
         | 
| 170 | 
            -
             | 
| 172 | 
            +
             | 
| 171 173 | 
             
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 172 174 | 
             
                    """Initialize connection error.
         | 
| 173 | 
            -
             | 
| 175 | 
            +
             | 
| 174 176 | 
             
                    Args:
         | 
| 175 177 | 
             
                        message: Error message describing connection failure
         | 
| 176 178 | 
             
                        context: Optional context with host, port, timeout, retry_count, etc.
         | 
| 177 179 | 
             
                    """
         | 
| 178 180 | 
             
                    super().__init__(message, context)
         | 
| 179 | 
            -
             | 
| 181 | 
            +
             | 
| 180 182 | 
             
                    # Add helpful guidance based on context
         | 
| 181 183 | 
             
                    if context:
         | 
| 182 | 
            -
                        if  | 
| 184 | 
            +
                        if "host" in context and "port" in context:
         | 
| 183 185 | 
             
                            self.message = f"[{context['host']}:{context['port']}] {message}"
         | 
| 184 | 
            -
                        if  | 
| 186 | 
            +
                        if "timeout" in context:
         | 
| 185 187 | 
             
                            self.message += f"\nConnection timeout: {context['timeout']}s"
         | 
| 186 | 
            -
                        if  | 
| 188 | 
            +
                        if "retry_count" in context:
         | 
| 187 189 | 
             
                            self.message += f"\nRetry attempts: {context['retry_count']}"
         | 
| 188 190 |  | 
| 189 191 |  | 
| 190 192 | 
             
            class ValidationError(MPMError):
         | 
| 191 193 | 
             
                """Exception raised when input validation fails.
         | 
| 192 | 
            -
             | 
| 194 | 
            +
             | 
| 193 195 | 
             
                This error occurs when user input, agent definitions, or data structures
         | 
| 194 196 | 
             
                fail validation against expected schemas or constraints.
         | 
| 195 | 
            -
             | 
| 197 | 
            +
             | 
| 196 198 | 
             
                Common causes:
         | 
| 197 199 | 
             
                - Invalid agent schema
         | 
| 198 200 | 
             
                - Missing required fields
         | 
| @@ -200,34 +202,34 @@ class ValidationError(MPMError): | |
| 200 202 | 
             
                - Value out of allowed range
         | 
| 201 203 | 
             
                - Format violations (e.g., invalid JSON/YAML)
         | 
| 202 204 | 
             
                """
         | 
| 203 | 
            -
             | 
| 205 | 
            +
             | 
| 204 206 | 
             
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 205 207 | 
             
                    """Initialize validation error.
         | 
| 206 | 
            -
             | 
| 208 | 
            +
             | 
| 207 209 | 
             
                    Args:
         | 
| 208 210 | 
             
                        message: Error message describing validation failure
         | 
| 209 211 | 
             
                        context: Optional context with field, value, constraint, schema_path, etc.
         | 
| 210 212 | 
             
                    """
         | 
| 211 213 | 
             
                    super().__init__(message, context)
         | 
| 212 | 
            -
             | 
| 214 | 
            +
             | 
| 213 215 | 
             
                    # Add helpful guidance based on context
         | 
| 214 216 | 
             
                    if context:
         | 
| 215 | 
            -
                        if  | 
| 217 | 
            +
                        if "field" in context:
         | 
| 216 218 | 
             
                            self.message = f"[Field: {context['field']}] {message}"
         | 
| 217 | 
            -
                        if  | 
| 219 | 
            +
                        if "constraint" in context:
         | 
| 218 220 | 
             
                            self.message += f"\nConstraint: {context['constraint']}"
         | 
| 219 | 
            -
                        if  | 
| 221 | 
            +
                        if "value" in context:
         | 
| 220 222 | 
             
                            self.message += f"\nProvided value: {context['value']}"
         | 
| 221 | 
            -
                        if  | 
| 223 | 
            +
                        if "schema_path" in context:
         | 
| 222 224 | 
             
                            self.message += f"\nSchema: {context['schema_path']}"
         | 
| 223 225 |  | 
| 224 226 |  | 
| 225 227 | 
             
            class ServiceNotFoundError(MPMError):
         | 
| 226 228 | 
             
                """Exception raised when DI container cannot find requested service.
         | 
| 227 | 
            -
             | 
| 229 | 
            +
             | 
| 228 230 | 
             
                This error occurs when the dependency injection container cannot locate
         | 
| 229 231 | 
             
                or instantiate a requested service.
         | 
| 230 | 
            -
             | 
| 232 | 
            +
             | 
| 231 233 | 
             
                Common causes:
         | 
| 232 234 | 
             
                - Service not registered in container
         | 
| 233 235 | 
             
                - Circular dependencies
         | 
| @@ -235,22 +237,22 @@ class ServiceNotFoundError(MPMError): | |
| 235 237 | 
             
                - Service initialization failure
         | 
| 236 238 | 
             
                - Incorrect service name or type
         | 
| 237 239 | 
             
                """
         | 
| 238 | 
            -
             | 
| 240 | 
            +
             | 
| 239 241 | 
             
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 240 242 | 
             
                    """Initialize service not found error.
         | 
| 241 | 
            -
             | 
| 243 | 
            +
             | 
| 242 244 | 
             
                    Args:
         | 
| 243 245 | 
             
                        message: Error message describing missing service
         | 
| 244 246 | 
             
                        context: Optional context with service_name, service_type, available_services, etc.
         | 
| 245 247 | 
             
                    """
         | 
| 246 248 | 
             
                    super().__init__(message, context)
         | 
| 247 | 
            -
             | 
| 249 | 
            +
             | 
| 248 250 | 
             
                    # Add helpful guidance based on context
         | 
| 249 251 | 
             
                    if context:
         | 
| 250 | 
            -
                        if  | 
| 252 | 
            +
                        if "service_name" in context:
         | 
| 251 253 | 
             
                            self.message = f"[Service: {context['service_name']}] {message}"
         | 
| 252 | 
            -
                        if  | 
| 253 | 
            -
                            services = context[ | 
| 254 | 
            +
                        if "available_services" in context:
         | 
| 255 | 
            +
                            services = context["available_services"]
         | 
| 254 256 | 
             
                            if isinstance(services, list) and services:
         | 
| 255 257 | 
             
                                self.message += f"\nAvailable services: {', '.join(services[:5])}"
         | 
| 256 258 | 
             
                                if len(services) > 5:
         | 
| @@ -259,48 +261,48 @@ class ServiceNotFoundError(MPMError): | |
| 259 261 |  | 
| 260 262 | 
             
            class MemoryError(MPMError):
         | 
| 261 263 | 
             
                """Exception raised when memory service operations fail.
         | 
| 262 | 
            -
             | 
| 264 | 
            +
             | 
| 263 265 | 
             
                This error occurs during agent memory operations including storage,
         | 
| 264 266 | 
             
                retrieval, optimization, and routing.
         | 
| 265 | 
            -
             | 
| 267 | 
            +
             | 
| 266 268 | 
             
                Common causes:
         | 
| 267 269 | 
             
                - Memory storage failure
         | 
| 268 270 | 
             
                - Corrupted memory data
         | 
| 269 271 | 
             
                - Memory quota exceeded
         | 
| 270 272 | 
             
                - Routing configuration errors
         | 
| 271 273 | 
             
                - Serialization/deserialization failures
         | 
| 272 | 
            -
             | 
| 274 | 
            +
             | 
| 273 275 | 
             
                Note: This shadows Python's built-in MemoryError but is scoped to
         | 
| 274 276 | 
             
                claude_mpm.core.exceptions.MemoryError for clarity.
         | 
| 275 277 | 
             
                """
         | 
| 276 | 
            -
             | 
| 278 | 
            +
             | 
| 277 279 | 
             
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 278 280 | 
             
                    """Initialize memory error.
         | 
| 279 | 
            -
             | 
| 281 | 
            +
             | 
| 280 282 | 
             
                    Args:
         | 
| 281 283 | 
             
                        message: Error message describing memory operation failure
         | 
| 282 284 | 
             
                        context: Optional context with agent_id, memory_type, operation, storage_path, etc.
         | 
| 283 285 | 
             
                    """
         | 
| 284 286 | 
             
                    super().__init__(message, context)
         | 
| 285 | 
            -
             | 
| 287 | 
            +
             | 
| 286 288 | 
             
                    # Add helpful guidance based on context
         | 
| 287 289 | 
             
                    if context:
         | 
| 288 | 
            -
                        if  | 
| 290 | 
            +
                        if "agent_id" in context:
         | 
| 289 291 | 
             
                            self.message = f"[Agent: {context['agent_id']}] {message}"
         | 
| 290 | 
            -
                        if  | 
| 292 | 
            +
                        if "memory_type" in context:
         | 
| 291 293 | 
             
                            self.message += f"\nMemory type: {context['memory_type']}"
         | 
| 292 | 
            -
                        if  | 
| 294 | 
            +
                        if "operation" in context:
         | 
| 293 295 | 
             
                            self.message += f"\nOperation: {context['operation']}"
         | 
| 294 | 
            -
                        if  | 
| 296 | 
            +
                        if "storage_path" in context:
         | 
| 295 297 | 
             
                            self.message += f"\nStorage: {context['storage_path']}"
         | 
| 296 298 |  | 
| 297 299 |  | 
| 298 300 | 
             
            class HookError(MPMError):
         | 
| 299 301 | 
             
                """Exception raised when hook execution fails.
         | 
| 300 | 
            -
             | 
| 302 | 
            +
             | 
| 301 303 | 
             
                This error occurs during pre/post hook execution in the hook system,
         | 
| 302 304 | 
             
                including hook registration, invocation, and cleanup.
         | 
| 303 | 
            -
             | 
| 305 | 
            +
             | 
| 304 306 | 
             
                Common causes:
         | 
| 305 307 | 
             
                - Hook handler exceptions
         | 
| 306 308 | 
             
                - Hook timeout
         | 
| @@ -308,34 +310,34 @@ class HookError(MPMError): | |
| 308 310 | 
             
                - Hook configuration errors
         | 
| 309 311 | 
             
                - Incompatible hook versions
         | 
| 310 312 | 
             
                """
         | 
| 311 | 
            -
             | 
| 313 | 
            +
             | 
| 312 314 | 
             
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 313 315 | 
             
                    """Initialize hook error.
         | 
| 314 | 
            -
             | 
| 316 | 
            +
             | 
| 315 317 | 
             
                    Args:
         | 
| 316 318 | 
             
                        message: Error message describing hook failure
         | 
| 317 319 | 
             
                        context: Optional context with hook_name, hook_type, event, error_details, etc.
         | 
| 318 320 | 
             
                    """
         | 
| 319 321 | 
             
                    super().__init__(message, context)
         | 
| 320 | 
            -
             | 
| 322 | 
            +
             | 
| 321 323 | 
             
                    # Add helpful guidance based on context
         | 
| 322 324 | 
             
                    if context:
         | 
| 323 | 
            -
                        if  | 
| 325 | 
            +
                        if "hook_name" in context:
         | 
| 324 326 | 
             
                            self.message = f"[Hook: {context['hook_name']}] {message}"
         | 
| 325 | 
            -
                        if  | 
| 327 | 
            +
                        if "hook_type" in context:
         | 
| 326 328 | 
             
                            self.message += f"\nType: {context['hook_type']}"
         | 
| 327 | 
            -
                        if  | 
| 329 | 
            +
                        if "event" in context:
         | 
| 328 330 | 
             
                            self.message += f"\nEvent: {context['event']}"
         | 
| 329 | 
            -
                        if  | 
| 331 | 
            +
                        if "error_details" in context:
         | 
| 330 332 | 
             
                            self.message += f"\nDetails: {context['error_details']}"
         | 
| 331 333 |  | 
| 332 334 |  | 
| 333 335 | 
             
            class SessionError(MPMError):
         | 
| 334 336 | 
             
                """Exception raised when session management fails.
         | 
| 335 | 
            -
             | 
| 337 | 
            +
             | 
| 336 338 | 
             
                This error occurs during Claude session lifecycle management including
         | 
| 337 339 | 
             
                session creation, state management, and cleanup.
         | 
| 338 | 
            -
             | 
| 340 | 
            +
             | 
| 339 341 | 
             
                Common causes:
         | 
| 340 342 | 
             
                - Session initialization failure
         | 
| 341 343 | 
             
                - Invalid session state
         | 
| @@ -343,42 +345,180 @@ class SessionError(MPMError): | |
| 343 345 | 
             
                - Resource allocation failure
         | 
| 344 346 | 
             
                - Session persistence errors
         | 
| 345 347 | 
             
                """
         | 
| 346 | 
            -
             | 
| 348 | 
            +
             | 
| 347 349 | 
             
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 348 350 | 
             
                    """Initialize session error.
         | 
| 349 | 
            -
             | 
| 351 | 
            +
             | 
| 350 352 | 
             
                    Args:
         | 
| 351 353 | 
             
                        message: Error message describing session failure
         | 
| 352 354 | 
             
                        context: Optional context with session_id, session_type, state, operation, etc.
         | 
| 353 355 | 
             
                    """
         | 
| 354 356 | 
             
                    super().__init__(message, context)
         | 
| 355 | 
            -
             | 
| 357 | 
            +
             | 
| 356 358 | 
             
                    # Add helpful guidance based on context
         | 
| 357 359 | 
             
                    if context:
         | 
| 358 | 
            -
                        if  | 
| 360 | 
            +
                        if "session_id" in context:
         | 
| 359 361 | 
             
                            self.message = f"[Session: {context['session_id']}] {message}"
         | 
| 360 | 
            -
                        if  | 
| 362 | 
            +
                        if "session_type" in context:
         | 
| 361 363 | 
             
                            self.message += f"\nType: {context['session_type']}"
         | 
| 362 | 
            -
                        if  | 
| 364 | 
            +
                        if "state" in context:
         | 
| 363 365 | 
             
                            self.message += f"\nState: {context['state']}"
         | 
| 364 | 
            -
                        if  | 
| 366 | 
            +
                        if "operation" in context:
         | 
| 365 367 | 
             
                            self.message += f"\nOperation: {context['operation']}"
         | 
| 366 368 |  | 
| 367 369 |  | 
| 370 | 
            +
            class FileOperationError(MPMError):
         | 
| 371 | 
            +
                """Exception raised when file system operations fail.
         | 
| 372 | 
            +
             | 
| 373 | 
            +
                This error occurs during file I/O operations including reading, writing,
         | 
| 374 | 
            +
                copying, moving, and permission changes.
         | 
| 375 | 
            +
             | 
| 376 | 
            +
                Common causes:
         | 
| 377 | 
            +
                - File not found
         | 
| 378 | 
            +
                - Permission denied
         | 
| 379 | 
            +
                - Disk space exhausted
         | 
| 380 | 
            +
                - Path too long
         | 
| 381 | 
            +
                - File locked by another process
         | 
| 382 | 
            +
                """
         | 
| 383 | 
            +
             | 
| 384 | 
            +
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 385 | 
            +
                    """Initialize file operation error.
         | 
| 386 | 
            +
             | 
| 387 | 
            +
                    Args:
         | 
| 388 | 
            +
                        message: Error message describing file operation failure
         | 
| 389 | 
            +
                        context: Optional context with file_path, operation, permissions, etc.
         | 
| 390 | 
            +
                    """
         | 
| 391 | 
            +
                    super().__init__(message, context)
         | 
| 392 | 
            +
             | 
| 393 | 
            +
                    # Add helpful guidance based on context
         | 
| 394 | 
            +
                    if context:
         | 
| 395 | 
            +
                        if "file_path" in context:
         | 
| 396 | 
            +
                            self.message = f"[File: {context['file_path']}] {message}"
         | 
| 397 | 
            +
                        if "operation" in context:
         | 
| 398 | 
            +
                            self.message += f"\nOperation: {context['operation']}"
         | 
| 399 | 
            +
                        if "permissions" in context:
         | 
| 400 | 
            +
                            self.message += f"\nRequired permissions: {context['permissions']}"
         | 
| 401 | 
            +
             | 
| 402 | 
            +
             | 
| 403 | 
            +
            class ProcessError(MPMError):
         | 
| 404 | 
            +
                """Exception raised when subprocess operations fail.
         | 
| 405 | 
            +
             | 
| 406 | 
            +
                This error occurs during subprocess execution including command launching,
         | 
| 407 | 
            +
                process monitoring, and cleanup.
         | 
| 408 | 
            +
             | 
| 409 | 
            +
                Common causes:
         | 
| 410 | 
            +
                - Command not found
         | 
| 411 | 
            +
                - Process timeout
         | 
| 412 | 
            +
                - Non-zero exit code
         | 
| 413 | 
            +
                - Permission denied
         | 
| 414 | 
            +
                - Resource limits exceeded
         | 
| 415 | 
            +
                """
         | 
| 416 | 
            +
             | 
| 417 | 
            +
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 418 | 
            +
                    """Initialize process error.
         | 
| 419 | 
            +
             | 
| 420 | 
            +
                    Args:
         | 
| 421 | 
            +
                        message: Error message describing process failure
         | 
| 422 | 
            +
                        context: Optional context with command, exit_code, stdout, stderr, etc.
         | 
| 423 | 
            +
                    """
         | 
| 424 | 
            +
                    super().__init__(message, context)
         | 
| 425 | 
            +
             | 
| 426 | 
            +
                    # Add helpful guidance based on context
         | 
| 427 | 
            +
                    if context:
         | 
| 428 | 
            +
                        if "command" in context:
         | 
| 429 | 
            +
                            self.message = f"[Command: {context['command']}] {message}"
         | 
| 430 | 
            +
                        if "exit_code" in context:
         | 
| 431 | 
            +
                            self.message += f"\nExit code: {context['exit_code']}"
         | 
| 432 | 
            +
                        if "stderr" in context and context["stderr"]:
         | 
| 433 | 
            +
                            stderr_preview = str(context["stderr"])[:200]
         | 
| 434 | 
            +
                            self.message += f"\nError output: {stderr_preview}"
         | 
| 435 | 
            +
                            if len(str(context["stderr"])) > 200:
         | 
| 436 | 
            +
                                self.message += "..."
         | 
| 437 | 
            +
             | 
| 438 | 
            +
             | 
| 439 | 
            +
            class RegistryError(MPMError):
         | 
| 440 | 
            +
                """Exception raised when registry operations fail.
         | 
| 441 | 
            +
             | 
| 442 | 
            +
                This error occurs during agent registry operations including registration,
         | 
| 443 | 
            +
                lookup, modification tracking, and discovery.
         | 
| 444 | 
            +
             | 
| 445 | 
            +
                Common causes:
         | 
| 446 | 
            +
                - Agent not found in registry
         | 
| 447 | 
            +
                - Registry corruption
         | 
| 448 | 
            +
                - Concurrent modification conflicts
         | 
| 449 | 
            +
                - Invalid registry state
         | 
| 450 | 
            +
                - Registry initialization failure
         | 
| 451 | 
            +
                """
         | 
| 452 | 
            +
             | 
| 453 | 
            +
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 454 | 
            +
                    """Initialize registry error.
         | 
| 455 | 
            +
             | 
| 456 | 
            +
                    Args:
         | 
| 457 | 
            +
                        message: Error message describing registry failure
         | 
| 458 | 
            +
                        context: Optional context with agent_id, registry_type, operation, etc.
         | 
| 459 | 
            +
                    """
         | 
| 460 | 
            +
                    super().__init__(message, context)
         | 
| 461 | 
            +
             | 
| 462 | 
            +
                    # Add helpful guidance based on context
         | 
| 463 | 
            +
                    if context:
         | 
| 464 | 
            +
                        if "agent_id" in context:
         | 
| 465 | 
            +
                            self.message = f"[Agent: {context['agent_id']}] {message}"
         | 
| 466 | 
            +
                        if "registry_type" in context:
         | 
| 467 | 
            +
                            self.message += f"\nRegistry: {context['registry_type']}"
         | 
| 468 | 
            +
                        if "operation" in context:
         | 
| 469 | 
            +
                            self.message += f"\nOperation: {context['operation']}"
         | 
| 470 | 
            +
             | 
| 471 | 
            +
             | 
| 472 | 
            +
            class SerializationError(MPMError):
         | 
| 473 | 
            +
                """Exception raised when serialization/deserialization fails.
         | 
| 474 | 
            +
             | 
| 475 | 
            +
                This error occurs during JSON/YAML/pickle operations including encoding,
         | 
| 476 | 
            +
                decoding, and format validation.
         | 
| 477 | 
            +
             | 
| 478 | 
            +
                Common causes:
         | 
| 479 | 
            +
                - Invalid JSON/YAML syntax
         | 
| 480 | 
            +
                - Unsupported data types
         | 
| 481 | 
            +
                - Encoding/decoding errors
         | 
| 482 | 
            +
                - Corrupted data
         | 
| 483 | 
            +
                - Schema validation failures
         | 
| 484 | 
            +
                """
         | 
| 485 | 
            +
             | 
| 486 | 
            +
                def __init__(self, message: str, context: Optional[Dict[str, Any]] = None):
         | 
| 487 | 
            +
                    """Initialize serialization error.
         | 
| 488 | 
            +
             | 
| 489 | 
            +
                    Args:
         | 
| 490 | 
            +
                        message: Error message describing serialization failure
         | 
| 491 | 
            +
                        context: Optional context with format, data_type, file_path, etc.
         | 
| 492 | 
            +
                    """
         | 
| 493 | 
            +
                    super().__init__(message, context)
         | 
| 494 | 
            +
             | 
| 495 | 
            +
                    # Add helpful guidance based on context
         | 
| 496 | 
            +
                    if context:
         | 
| 497 | 
            +
                        if "format" in context:
         | 
| 498 | 
            +
                            self.message = f"[Format: {context['format']}] {message}"
         | 
| 499 | 
            +
                        if "data_type" in context:
         | 
| 500 | 
            +
                            self.message += f"\nData type: {context['data_type']}"
         | 
| 501 | 
            +
                        if "file_path" in context:
         | 
| 502 | 
            +
                            self.message += f"\nFile: {context['file_path']}"
         | 
| 503 | 
            +
             | 
| 504 | 
            +
             | 
| 368 505 | 
             
            # Backward compatibility imports
         | 
| 369 506 | 
             
            # These allow existing code to continue working while migrating to new exceptions
         | 
| 370 507 | 
             
            def create_agent_deployment_error(message: str, **kwargs) -> AgentDeploymentError:
         | 
| 371 508 | 
             
                """Factory function for creating agent deployment errors with context."""
         | 
| 372 509 | 
             
                return AgentDeploymentError(message, context=kwargs if kwargs else None)
         | 
| 373 510 |  | 
| 511 | 
            +
             | 
| 374 512 | 
             
            def create_configuration_error(message: str, **kwargs) -> ConfigurationError:
         | 
| 375 513 | 
             
                """Factory function for creating configuration errors with context."""
         | 
| 376 514 | 
             
                return ConfigurationError(message, context=kwargs if kwargs else None)
         | 
| 377 515 |  | 
| 516 | 
            +
             | 
| 378 517 | 
             
            def create_connection_error(message: str, **kwargs) -> ConnectionError:
         | 
| 379 518 | 
             
                """Factory function for creating connection errors with context."""
         | 
| 380 519 | 
             
                return ConnectionError(message, context=kwargs if kwargs else None)
         | 
| 381 520 |  | 
| 521 | 
            +
             | 
| 382 522 | 
             
            def create_validation_error(message: str, **kwargs) -> ValidationError:
         | 
| 383 523 | 
             
                """Factory function for creating validation errors with context."""
         | 
| 384 524 | 
             
                return ValidationError(message, context=kwargs if kwargs else None)
         | 
| @@ -389,4 +529,8 @@ DEPLOYMENT_ERRORS = (AgentDeploymentError,) | |
| 389 529 | 
             
            CONFIGURATION_ERRORS = (ConfigurationError, ValidationError)
         | 
| 390 530 | 
             
            NETWORK_ERRORS = (ConnectionError,)
         | 
| 391 531 | 
             
            SERVICE_ERRORS = (ServiceNotFoundError, MemoryError, HookError, SessionError)
         | 
| 392 | 
            -
             | 
| 532 | 
            +
            FILE_ERRORS = (FileOperationError,)
         | 
| 533 | 
            +
            PROCESS_ERRORS = (ProcessError,)
         | 
| 534 | 
            +
            REGISTRY_ERRORS = (RegistryError,)
         | 
| 535 | 
            +
            SERIALIZATION_ERRORS = (SerializationError,)
         | 
| 536 | 
            +
            ALL_MPM_ERRORS = (MPMError,)  # Catches all MPM-specific exceptions
         |