claude-mpm 3.9.9__py3-none-any.whl → 4.0.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +2 -2
- claude_mpm/__main__.py +3 -2
- claude_mpm/agents/__init__.py +85 -79
- claude_mpm/agents/agent_loader.py +464 -1003
- claude_mpm/agents/agent_loader_integration.py +45 -45
- claude_mpm/agents/agents_metadata.py +29 -30
- claude_mpm/agents/async_agent_loader.py +156 -138
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/base_agent_loader.py +179 -151
- claude_mpm/agents/frontmatter_validator.py +229 -130
- claude_mpm/agents/schema/agent_schema.json +1 -1
- claude_mpm/agents/system_agent_config.py +213 -147
- claude_mpm/agents/templates/__init__.py +13 -13
- claude_mpm/agents/templates/code_analyzer.json +2 -2
- claude_mpm/agents/templates/data_engineer.json +1 -1
- claude_mpm/agents/templates/documentation.json +23 -11
- claude_mpm/agents/templates/engineer.json +22 -6
- claude_mpm/agents/templates/memory_manager.json +155 -0
- claude_mpm/agents/templates/ops.json +2 -2
- claude_mpm/agents/templates/project_organizer.json +1 -1
- claude_mpm/agents/templates/qa.json +1 -1
- claude_mpm/agents/templates/refactoring_engineer.json +222 -0
- claude_mpm/agents/templates/research.json +20 -14
- claude_mpm/agents/templates/security.json +1 -1
- claude_mpm/agents/templates/ticketing.json +1 -1
- claude_mpm/agents/templates/version_control.json +1 -1
- claude_mpm/agents/templates/web_qa.json +3 -1
- claude_mpm/agents/templates/web_ui.json +2 -2
- claude_mpm/cli/__init__.py +90 -49
- claude_mpm/cli/__main__.py +3 -2
- claude_mpm/cli/commands/__init__.py +21 -18
- claude_mpm/cli/commands/agents.py +279 -247
- claude_mpm/cli/commands/aggregate.py +138 -157
- claude_mpm/cli/commands/cleanup.py +147 -147
- claude_mpm/cli/commands/config.py +93 -76
- claude_mpm/cli/commands/info.py +17 -16
- claude_mpm/cli/commands/mcp.py +143 -762
- claude_mpm/cli/commands/mcp_command_router.py +139 -0
- claude_mpm/cli/commands/mcp_config_commands.py +20 -0
- claude_mpm/cli/commands/mcp_install_commands.py +20 -0
- claude_mpm/cli/commands/mcp_server_commands.py +175 -0
- claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
- claude_mpm/cli/commands/memory.py +239 -203
- claude_mpm/cli/commands/monitor.py +203 -81
- claude_mpm/cli/commands/run.py +380 -429
- claude_mpm/cli/commands/run_config_checker.py +160 -0
- claude_mpm/cli/commands/socketio_monitor.py +235 -0
- claude_mpm/cli/commands/tickets.py +305 -197
- claude_mpm/cli/parser.py +24 -1150
- claude_mpm/cli/parsers/__init__.py +29 -0
- claude_mpm/cli/parsers/agents_parser.py +136 -0
- claude_mpm/cli/parsers/base_parser.py +331 -0
- claude_mpm/cli/parsers/config_parser.py +85 -0
- claude_mpm/cli/parsers/mcp_parser.py +152 -0
- claude_mpm/cli/parsers/memory_parser.py +138 -0
- claude_mpm/cli/parsers/monitor_parser.py +104 -0
- claude_mpm/cli/parsers/run_parser.py +147 -0
- claude_mpm/cli/parsers/tickets_parser.py +203 -0
- claude_mpm/cli/ticket_cli.py +7 -3
- claude_mpm/cli/utils.py +55 -37
- claude_mpm/cli_module/__init__.py +6 -6
- claude_mpm/cli_module/args.py +188 -140
- claude_mpm/cli_module/commands.py +79 -70
- claude_mpm/cli_module/migration_example.py +38 -60
- claude_mpm/config/__init__.py +32 -25
- claude_mpm/config/agent_config.py +151 -119
- claude_mpm/config/experimental_features.py +217 -0
- claude_mpm/config/paths.py +94 -208
- claude_mpm/config/socketio_config.py +84 -73
- claude_mpm/constants.py +36 -18
- claude_mpm/core/__init__.py +9 -6
- claude_mpm/core/agent_name_normalizer.py +68 -71
- claude_mpm/core/agent_registry.py +372 -521
- claude_mpm/core/agent_session_manager.py +74 -63
- claude_mpm/core/base_service.py +116 -87
- claude_mpm/core/cache.py +119 -153
- claude_mpm/core/claude_runner.py +425 -1120
- claude_mpm/core/config.py +263 -168
- claude_mpm/core/config_aliases.py +69 -61
- claude_mpm/core/config_constants.py +292 -0
- claude_mpm/core/constants.py +57 -99
- claude_mpm/core/container.py +211 -178
- claude_mpm/core/exceptions.py +233 -89
- claude_mpm/core/factories.py +92 -54
- claude_mpm/core/framework_loader.py +378 -220
- claude_mpm/core/hook_manager.py +198 -83
- claude_mpm/core/hook_performance_config.py +136 -0
- claude_mpm/core/injectable_service.py +61 -55
- claude_mpm/core/interactive_session.py +165 -155
- claude_mpm/core/interfaces.py +221 -195
- claude_mpm/core/lazy.py +96 -96
- claude_mpm/core/logger.py +133 -107
- claude_mpm/core/logging_config.py +185 -157
- claude_mpm/core/minimal_framework_loader.py +20 -15
- claude_mpm/core/mixins.py +30 -29
- claude_mpm/core/oneshot_session.py +215 -181
- claude_mpm/core/optimized_agent_loader.py +134 -138
- claude_mpm/core/optimized_startup.py +159 -157
- claude_mpm/core/pm_hook_interceptor.py +85 -72
- claude_mpm/core/service_registry.py +103 -101
- claude_mpm/core/session_manager.py +97 -87
- claude_mpm/core/socketio_pool.py +212 -158
- claude_mpm/core/tool_access_control.py +58 -51
- claude_mpm/core/types.py +46 -24
- claude_mpm/core/typing_utils.py +166 -82
- claude_mpm/core/unified_agent_registry.py +721 -0
- claude_mpm/core/unified_config.py +550 -0
- claude_mpm/core/unified_paths.py +549 -0
- claude_mpm/dashboard/index.html +1 -1
- claude_mpm/dashboard/open_dashboard.py +51 -17
- claude_mpm/dashboard/static/css/dashboard.css +27 -8
- claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
- claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
- claude_mpm/dashboard/static/dist/dashboard.js +2 -0
- claude_mpm/dashboard/static/dist/socket-client.js +2 -0
- claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
- claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
- claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
- claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
- claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
- claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
- claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
- claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
- claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
- claude_mpm/dashboard/static/js/dashboard.js +178 -453
- claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/js/socket-client.js +120 -54
- claude_mpm/dashboard/templates/index.html +40 -50
- claude_mpm/experimental/cli_enhancements.py +60 -58
- claude_mpm/generators/__init__.py +1 -1
- claude_mpm/generators/agent_profile_generator.py +75 -65
- claude_mpm/hooks/__init__.py +1 -1
- claude_mpm/hooks/base_hook.py +33 -28
- claude_mpm/hooks/claude_hooks/__init__.py +1 -1
- claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
- claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
- claude_mpm/hooks/memory_integration_hook.py +140 -100
- claude_mpm/hooks/tool_call_interceptor.py +89 -76
- claude_mpm/hooks/validation_hooks.py +57 -49
- claude_mpm/init.py +145 -121
- claude_mpm/models/__init__.py +9 -9
- claude_mpm/models/agent_definition.py +33 -23
- claude_mpm/models/agent_session.py +228 -200
- claude_mpm/scripts/__init__.py +1 -1
- claude_mpm/scripts/socketio_daemon.py +192 -75
- claude_mpm/scripts/socketio_server_manager.py +328 -0
- claude_mpm/scripts/start_activity_logging.py +25 -22
- claude_mpm/services/__init__.py +68 -43
- claude_mpm/services/agent_capabilities_service.py +271 -0
- claude_mpm/services/agents/__init__.py +23 -32
- claude_mpm/services/agents/deployment/__init__.py +3 -3
- claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
- claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
- claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
- claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
- claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
- claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
- claude_mpm/services/agents/deployment/agent_validator.py +352 -0
- claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
- claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
- claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
- claude_mpm/services/agents/deployment/config/__init__.py +13 -0
- claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
- claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
- claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
- claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
- claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
- claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
- claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
- claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
- claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
- claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
- claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
- claude_mpm/services/agents/deployment/results/__init__.py +13 -0
- claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
- claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
- claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
- claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
- claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
- claude_mpm/services/agents/loading/__init__.py +2 -2
- claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
- claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
- claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
- claude_mpm/services/agents/management/__init__.py +2 -2
- claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
- claude_mpm/services/agents/management/agent_management_service.py +209 -156
- claude_mpm/services/agents/memory/__init__.py +9 -6
- claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
- claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
- claude_mpm/services/agents/memory/analyzer.py +430 -0
- claude_mpm/services/agents/memory/content_manager.py +376 -0
- claude_mpm/services/agents/memory/template_generator.py +468 -0
- claude_mpm/services/agents/registry/__init__.py +7 -10
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
- claude_mpm/services/agents/registry/modification_tracker.py +351 -285
- claude_mpm/services/async_session_logger.py +187 -153
- claude_mpm/services/claude_session_logger.py +87 -72
- claude_mpm/services/command_handler_service.py +217 -0
- claude_mpm/services/communication/__init__.py +3 -2
- claude_mpm/services/core/__init__.py +50 -97
- claude_mpm/services/core/base.py +60 -53
- claude_mpm/services/core/interfaces/__init__.py +188 -0
- claude_mpm/services/core/interfaces/agent.py +351 -0
- claude_mpm/services/core/interfaces/communication.py +343 -0
- claude_mpm/services/core/interfaces/infrastructure.py +413 -0
- claude_mpm/services/core/interfaces/service.py +434 -0
- claude_mpm/services/core/interfaces.py +19 -944
- claude_mpm/services/event_aggregator.py +208 -170
- claude_mpm/services/exceptions.py +387 -308
- claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
- claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
- claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
- claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
- claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
- claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
- claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
- claude_mpm/services/hook_service.py +106 -114
- claude_mpm/services/infrastructure/__init__.py +7 -5
- claude_mpm/services/infrastructure/context_preservation.py +571 -0
- claude_mpm/services/infrastructure/daemon_manager.py +279 -0
- claude_mpm/services/infrastructure/logging.py +83 -76
- claude_mpm/services/infrastructure/monitoring.py +547 -404
- claude_mpm/services/mcp_gateway/__init__.py +40 -23
- claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
- claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
- claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
- claude_mpm/services/mcp_gateway/core/__init__.py +14 -21
- claude_mpm/services/mcp_gateway/core/base.py +80 -67
- claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
- claude_mpm/services/mcp_gateway/core/interfaces.py +97 -93
- claude_mpm/services/mcp_gateway/main.py +307 -127
- claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +100 -101
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
- claude_mpm/services/mcp_gateway/server/__init__.py +4 -4
- claude_mpm/services/mcp_gateway/server/{mcp_server.py → mcp_gateway.py} +149 -153
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
- claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
- claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +110 -121
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
- claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
- claude_mpm/services/memory/__init__.py +2 -2
- claude_mpm/services/memory/builder.py +451 -362
- claude_mpm/services/memory/cache/__init__.py +2 -2
- claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
- claude_mpm/services/memory/cache/simple_cache.py +107 -93
- claude_mpm/services/memory/indexed_memory.py +195 -193
- claude_mpm/services/memory/optimizer.py +267 -234
- claude_mpm/services/memory/router.py +571 -263
- claude_mpm/services/memory_hook_service.py +237 -0
- claude_mpm/services/port_manager.py +223 -0
- claude_mpm/services/project/__init__.py +3 -3
- claude_mpm/services/project/analyzer.py +451 -305
- claude_mpm/services/project/registry.py +262 -240
- claude_mpm/services/recovery_manager.py +287 -231
- claude_mpm/services/response_tracker.py +87 -67
- claude_mpm/services/runner_configuration_service.py +587 -0
- claude_mpm/services/session_management_service.py +304 -0
- claude_mpm/services/socketio/__init__.py +4 -4
- claude_mpm/services/socketio/client_proxy.py +174 -0
- claude_mpm/services/socketio/handlers/__init__.py +3 -3
- claude_mpm/services/socketio/handlers/base.py +44 -30
- claude_mpm/services/socketio/handlers/connection.py +145 -65
- claude_mpm/services/socketio/handlers/file.py +123 -108
- claude_mpm/services/socketio/handlers/git.py +607 -373
- claude_mpm/services/socketio/handlers/hook.py +170 -0
- claude_mpm/services/socketio/handlers/memory.py +4 -4
- claude_mpm/services/socketio/handlers/project.py +4 -4
- claude_mpm/services/socketio/handlers/registry.py +53 -38
- claude_mpm/services/socketio/server/__init__.py +18 -0
- claude_mpm/services/socketio/server/broadcaster.py +252 -0
- claude_mpm/services/socketio/server/core.py +399 -0
- claude_mpm/services/socketio/server/main.py +323 -0
- claude_mpm/services/socketio_client_manager.py +160 -133
- claude_mpm/services/socketio_server.py +36 -1885
- claude_mpm/services/subprocess_launcher_service.py +316 -0
- claude_mpm/services/system_instructions_service.py +258 -0
- claude_mpm/services/ticket_manager.py +20 -534
- claude_mpm/services/utility_service.py +285 -0
- claude_mpm/services/version_control/__init__.py +18 -21
- claude_mpm/services/version_control/branch_strategy.py +20 -10
- claude_mpm/services/version_control/conflict_resolution.py +37 -13
- claude_mpm/services/version_control/git_operations.py +52 -21
- claude_mpm/services/version_control/semantic_versioning.py +92 -53
- claude_mpm/services/version_control/version_parser.py +145 -125
- claude_mpm/services/version_service.py +270 -0
- claude_mpm/storage/__init__.py +9 -0
- claude_mpm/storage/state_storage.py +552 -0
- claude_mpm/ticket_wrapper.py +2 -2
- claude_mpm/utils/__init__.py +2 -2
- claude_mpm/utils/agent_dependency_loader.py +453 -243
- claude_mpm/utils/config_manager.py +157 -118
- claude_mpm/utils/console.py +1 -1
- claude_mpm/utils/dependency_cache.py +102 -107
- claude_mpm/utils/dependency_manager.py +52 -47
- claude_mpm/utils/dependency_strategies.py +131 -96
- claude_mpm/utils/environment_context.py +110 -102
- claude_mpm/utils/error_handler.py +75 -55
- claude_mpm/utils/file_utils.py +80 -67
- claude_mpm/utils/framework_detection.py +12 -11
- claude_mpm/utils/import_migration_example.py +12 -60
- claude_mpm/utils/imports.py +48 -45
- claude_mpm/utils/path_operations.py +100 -93
- claude_mpm/utils/robust_installer.py +172 -164
- claude_mpm/utils/session_logging.py +30 -23
- claude_mpm/utils/subprocess_utils.py +99 -61
- claude_mpm/validation/__init__.py +1 -1
- claude_mpm/validation/agent_validator.py +151 -111
- claude_mpm/validation/frontmatter_validator.py +92 -71
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +51 -2
- claude_mpm-4.0.3.dist-info/RECORD +402 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
- claude_mpm/config/memory_guardian_config.py +0 -325
- claude_mpm/core/config_paths.py +0 -150
- claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
- claude_mpm/deployment_paths.py +0 -261
- claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
- claude_mpm/models/state_models.py +0 -433
- claude_mpm/services/agent/__init__.py +0 -24
- claude_mpm/services/agent/deployment.py +0 -2548
- claude_mpm/services/agent/management.py +0 -598
- claude_mpm/services/agent/registry.py +0 -813
- claude_mpm/services/agents/registry/agent_registry.py +0 -813
- claude_mpm/services/communication/socketio.py +0 -1935
- claude_mpm/services/communication/websocket.py +0 -479
- claude_mpm/services/framework_claude_md_generator.py +0 -624
- claude_mpm/services/health_monitor.py +0 -893
- claude_mpm/services/infrastructure/memory_guardian.py +0 -770
- claude_mpm/services/mcp_gateway/server/mcp_server_simple.py +0 -444
- claude_mpm/services/optimized_hook_service.py +0 -542
- claude_mpm/services/project_analyzer.py +0 -864
- claude_mpm/services/project_registry.py +0 -608
- claude_mpm/services/standalone_socketio_server.py +0 -1300
- claude_mpm/services/ticket_manager_di.py +0 -318
- claude_mpm/services/ticketing_service_original.py +0 -510
- claude_mpm/utils/paths.py +0 -395
- claude_mpm/utils/platform_memory.py +0 -524
- claude_mpm-3.9.9.dist-info/RECORD +0 -293
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
| @@ -9,11 +9,10 @@ DESIGN DECISION: We use subprocess to install packages in the same environment | |
| 9 9 | 
             
            that's running claude-mpm, respecting virtual environments and user setups.
         | 
| 10 10 | 
             
            """
         | 
| 11 11 |  | 
| 12 | 
            +
            import importlib
         | 
| 12 13 | 
             
            import subprocess
         | 
| 13 14 | 
             
            import sys
         | 
| 14 | 
            -
            import  | 
| 15 | 
            -
            from typing import List, Tuple, Optional
         | 
| 16 | 
            -
            from pathlib import Path
         | 
| 15 | 
            +
            from typing import List, Optional, Tuple
         | 
| 17 16 |  | 
| 18 17 | 
             
            from ..core.logger import get_logger
         | 
| 19 18 |  | 
| @@ -21,25 +20,26 @@ from ..core.logger import get_logger | |
| 21 20 | 
             
            def check_dependency(package_name: str, import_name: Optional[str] = None) -> bool:
         | 
| 22 21 | 
             
                """
         | 
| 23 22 | 
             
                Check if a Python package is installed and importable.
         | 
| 24 | 
            -
             | 
| 23 | 
            +
             | 
| 25 24 | 
             
                WHY: We need to verify if optional dependencies are available before
         | 
| 26 25 | 
             
                attempting to use them. This prevents ImportError crashes.
         | 
| 27 | 
            -
             | 
| 26 | 
            +
             | 
| 28 27 | 
             
                DESIGN DECISION: We use importlib.util.find_spec() which is more reliable
         | 
| 29 28 | 
             
                than try/except import because it doesn't execute module code.
         | 
| 30 | 
            -
             | 
| 29 | 
            +
             | 
| 31 30 | 
             
                Args:
         | 
| 32 31 | 
             
                    package_name: Name of the package (e.g., 'python-socketio')
         | 
| 33 32 | 
             
                    import_name: Name to import (e.g., 'socketio'). Defaults to package_name.
         | 
| 34 | 
            -
             | 
| 33 | 
            +
             | 
| 35 34 | 
             
                Returns:
         | 
| 36 35 | 
             
                    bool: True if package is available, False otherwise
         | 
| 37 36 | 
             
                """
         | 
| 38 37 | 
             
                if import_name is None:
         | 
| 39 | 
            -
                    import_name = package_name.replace( | 
| 40 | 
            -
             | 
| 38 | 
            +
                    import_name = package_name.replace("-", "_")
         | 
| 39 | 
            +
             | 
| 41 40 | 
             
                try:
         | 
| 42 41 | 
             
                    import importlib.util
         | 
| 42 | 
            +
             | 
| 43 43 | 
             
                    spec = importlib.util.find_spec(import_name)
         | 
| 44 44 | 
             
                    return spec is not None
         | 
| 45 45 | 
             
                except (ImportError, ModuleNotFoundError, ValueError):
         | 
| @@ -49,40 +49,40 @@ def check_dependency(package_name: str, import_name: Optional[str] = None) -> bo | |
| 49 49 | 
             
            def install_packages(packages: List[str], logger=None) -> Tuple[bool, str]:
         | 
| 50 50 | 
             
                """
         | 
| 51 51 | 
             
                Install Python packages using pip in the current environment.
         | 
| 52 | 
            -
             | 
| 52 | 
            +
             | 
| 53 53 | 
             
                WHY: Users should not need to manually install optional dependencies.
         | 
| 54 54 | 
             
                This function handles automatic installation while respecting the current
         | 
| 55 55 | 
             
                Python environment (including virtual environments).
         | 
| 56 | 
            -
             | 
| 56 | 
            +
             | 
| 57 57 | 
             
                DESIGN DECISION: We use subprocess to call pip instead of importlib
         | 
| 58 58 | 
             
                because pip installation needs to be done in the same environment
         | 
| 59 59 | 
             
                that's running the application.
         | 
| 60 | 
            -
             | 
| 60 | 
            +
             | 
| 61 61 | 
             
                Args:
         | 
| 62 62 | 
             
                    packages: List of package names to install
         | 
| 63 63 | 
             
                    logger: Optional logger for output
         | 
| 64 | 
            -
             | 
| 64 | 
            +
             | 
| 65 65 | 
             
                Returns:
         | 
| 66 66 | 
             
                    Tuple[bool, str]: (success, error_message_if_failed)
         | 
| 67 67 | 
             
                """
         | 
| 68 68 | 
             
                if logger is None:
         | 
| 69 69 | 
             
                    logger = get_logger("dependency_manager")
         | 
| 70 | 
            -
             | 
| 70 | 
            +
             | 
| 71 71 | 
             
                try:
         | 
| 72 72 | 
             
                    # Use the same Python executable that's running this script
         | 
| 73 73 | 
             
                    cmd = [sys.executable, "-m", "pip", "install"] + packages
         | 
| 74 | 
            -
             | 
| 74 | 
            +
             | 
| 75 75 | 
             
                    logger.info(f"Installing packages: {packages}")
         | 
| 76 76 | 
             
                    logger.debug(f"Running command: {' '.join(cmd)}")
         | 
| 77 | 
            -
             | 
| 77 | 
            +
             | 
| 78 78 | 
             
                    # Run pip install with proper error handling
         | 
| 79 79 | 
             
                    result = subprocess.run(
         | 
| 80 80 | 
             
                        cmd,
         | 
| 81 81 | 
             
                        capture_output=True,
         | 
| 82 82 | 
             
                        text=True,
         | 
| 83 | 
            -
                        timeout=300  # 5 minute timeout for installation
         | 
| 83 | 
            +
                        timeout=300,  # 5 minute timeout for installation
         | 
| 84 84 | 
             
                    )
         | 
| 85 | 
            -
             | 
| 85 | 
            +
             | 
| 86 86 | 
             
                    if result.returncode == 0:
         | 
| 87 87 | 
             
                        logger.info(f"Successfully installed packages: {packages}")
         | 
| 88 88 | 
             
                        return True, ""
         | 
| @@ -92,7 +92,7 @@ def install_packages(packages: List[str], logger=None) -> Tuple[bool, str]: | |
| 92 92 | 
             
                            error_msg += f": {result.stderr.strip()}"
         | 
| 93 93 | 
             
                        logger.error(error_msg)
         | 
| 94 94 | 
             
                        return False, error_msg
         | 
| 95 | 
            -
             | 
| 95 | 
            +
             | 
| 96 96 | 
             
                except subprocess.TimeoutExpired:
         | 
| 97 97 | 
             
                    error_msg = "Package installation timed out after 5 minutes"
         | 
| 98 98 | 
             
                    logger.error(error_msg)
         | 
| @@ -106,57 +106,61 @@ def install_packages(packages: List[str], logger=None) -> Tuple[bool, str]: | |
| 106 106 | 
             
            def ensure_socketio_dependencies(logger=None) -> Tuple[bool, str]:
         | 
| 107 107 | 
             
                """
         | 
| 108 108 | 
             
                Ensure Socket.IO dependencies are installed for monitoring features.
         | 
| 109 | 
            -
             | 
| 109 | 
            +
             | 
| 110 110 | 
             
                WHY: Socket.IO dependencies (python-socketio, aiohttp, python-engineio) are now
         | 
| 111 111 | 
             
                core dependencies and should be installed automatically with claude-mpm.
         | 
| 112 112 | 
             
                This function verifies they are available and provides helpful error messages
         | 
| 113 113 | 
             
                if something went wrong during installation.
         | 
| 114 | 
            -
             | 
| 114 | 
            +
             | 
| 115 115 | 
             
                DESIGN DECISION: We still check each dependency individually to provide
         | 
| 116 116 | 
             
                specific error messages if any are missing, which helps with troubleshooting
         | 
| 117 117 | 
             
                installation issues.
         | 
| 118 | 
            -
             | 
| 118 | 
            +
             | 
| 119 119 | 
             
                Args:
         | 
| 120 120 | 
             
                    logger: Optional logger for output
         | 
| 121 | 
            -
             | 
| 121 | 
            +
             | 
| 122 122 | 
             
                Returns:
         | 
| 123 123 | 
             
                    Tuple[bool, str]: (success, error_message_if_failed)
         | 
| 124 124 | 
             
                """
         | 
| 125 125 | 
             
                if logger is None:
         | 
| 126 126 | 
             
                    logger = get_logger("dependency_manager")
         | 
| 127 | 
            -
             | 
| 127 | 
            +
             | 
| 128 128 | 
             
                # Define required packages for Socket.IO monitoring
         | 
| 129 129 | 
             
                required_packages = [
         | 
| 130 130 | 
             
                    ("python-socketio", "socketio"),
         | 
| 131 131 | 
             
                    ("aiohttp", "aiohttp"),
         | 
| 132 | 
            -
                    ("python-engineio", "engineio")
         | 
| 132 | 
            +
                    ("python-engineio", "engineio"),
         | 
| 133 133 | 
             
                ]
         | 
| 134 | 
            -
             | 
| 134 | 
            +
             | 
| 135 135 | 
             
                missing_packages = []
         | 
| 136 | 
            -
             | 
| 136 | 
            +
             | 
| 137 137 | 
             
                # Check which packages are missing
         | 
| 138 138 | 
             
                for package_name, import_name in required_packages:
         | 
| 139 139 | 
             
                    if not check_dependency(package_name, import_name):
         | 
| 140 140 | 
             
                        missing_packages.append(package_name)
         | 
| 141 141 | 
             
                        logger.debug(f"Missing dependency: {package_name}")
         | 
| 142 | 
            -
             | 
| 142 | 
            +
             | 
| 143 143 | 
             
                if not missing_packages:
         | 
| 144 144 | 
             
                    logger.debug("All Socket.IO dependencies are already installed")
         | 
| 145 145 | 
             
                    return True, ""
         | 
| 146 | 
            -
             | 
| 146 | 
            +
             | 
| 147 147 | 
             
                # Install missing packages (should be rare since they're now core dependencies)
         | 
| 148 | 
            -
                logger.warning( | 
| 148 | 
            +
                logger.warning(
         | 
| 149 | 
            +
                    f"Socket.IO dependencies are missing despite being core dependencies: {missing_packages}"
         | 
| 150 | 
            +
                )
         | 
| 149 151 | 
             
                logger.info(f"Attempting to install missing dependencies: {missing_packages}")
         | 
| 150 152 | 
             
                success, error_msg = install_packages(missing_packages, logger)
         | 
| 151 | 
            -
             | 
| 153 | 
            +
             | 
| 152 154 | 
             
                if success:
         | 
| 153 155 | 
             
                    # Verify installation worked
         | 
| 154 156 | 
             
                    for package_name, import_name in required_packages:
         | 
| 155 157 | 
             
                        if not check_dependency(package_name, import_name):
         | 
| 156 | 
            -
                            error_msg =  | 
| 158 | 
            +
                            error_msg = (
         | 
| 159 | 
            +
                                f"Package {package_name} was installed but is not importable"
         | 
| 160 | 
            +
                            )
         | 
| 157 161 | 
             
                            logger.error(error_msg)
         | 
| 158 162 | 
             
                            return False, error_msg
         | 
| 159 | 
            -
             | 
| 163 | 
            +
             | 
| 160 164 | 
             
                    logger.info("Socket.IO dependencies installed and verified successfully")
         | 
| 161 165 | 
             
                    return True, ""
         | 
| 162 166 | 
             
                else:
         | 
| @@ -166,10 +170,10 @@ def ensure_socketio_dependencies(logger=None) -> Tuple[bool, str]: | |
| 166 170 | 
             
            def get_pip_freeze_output() -> List[str]:
         | 
| 167 171 | 
             
                """
         | 
| 168 172 | 
             
                Get the output of 'pip freeze' for debugging dependency issues.
         | 
| 169 | 
            -
             | 
| 173 | 
            +
             | 
| 170 174 | 
             
                WHY: When dependency installation fails, we need to help users
         | 
| 171 175 | 
             
                understand what packages are installed and what might be conflicting.
         | 
| 172 | 
            -
             | 
| 176 | 
            +
             | 
| 173 177 | 
             
                Returns:
         | 
| 174 178 | 
             
                    List[str]: List of installed packages from pip freeze
         | 
| 175 179 | 
             
                """
         | 
| @@ -178,14 +182,14 @@ def get_pip_freeze_output() -> List[str]: | |
| 178 182 | 
             
                        [sys.executable, "-m", "pip", "freeze"],
         | 
| 179 183 | 
             
                        capture_output=True,
         | 
| 180 184 | 
             
                        text=True,
         | 
| 181 | 
            -
                        timeout=30
         | 
| 185 | 
            +
                        timeout=30,
         | 
| 182 186 | 
             
                    )
         | 
| 183 | 
            -
             | 
| 187 | 
            +
             | 
| 184 188 | 
             
                    if result.returncode == 0:
         | 
| 185 | 
            -
                        return result.stdout.strip().split( | 
| 189 | 
            +
                        return result.stdout.strip().split("\n")
         | 
| 186 190 | 
             
                    else:
         | 
| 187 191 | 
             
                        return [f"pip freeze failed: {result.stderr}"]
         | 
| 188 | 
            -
             | 
| 192 | 
            +
             | 
| 189 193 | 
             
                except Exception as e:
         | 
| 190 194 | 
             
                    return [f"Failed to get pip freeze output: {e}"]
         | 
| 191 195 |  | 
| @@ -193,22 +197,23 @@ def get_pip_freeze_output() -> List[str]: | |
| 193 197 | 
             
            def check_virtual_environment() -> Tuple[bool, str]:
         | 
| 194 198 | 
             
                """
         | 
| 195 199 | 
             
                Check if we're running in a virtual environment.
         | 
| 196 | 
            -
             | 
| 200 | 
            +
             | 
| 197 201 | 
             
                WHY: Installation behavior might differ between virtual environments
         | 
| 198 202 | 
             
                and system Python. This helps with debugging and user guidance.
         | 
| 199 | 
            -
             | 
| 203 | 
            +
             | 
| 200 204 | 
             
                Returns:
         | 
| 201 205 | 
             
                    Tuple[bool, str]: (is_virtual_env, environment_info)
         | 
| 202 206 | 
             
                """
         | 
| 203 207 | 
             
                # Check for virtual environment indicators
         | 
| 204 208 | 
             
                in_venv = (
         | 
| 205 | 
            -
                    hasattr(sys,  | 
| 206 | 
            -
                     | 
| 207 | 
            -
                    or  | 
| 209 | 
            +
                    hasattr(sys, "base_prefix")
         | 
| 210 | 
            +
                    and sys.base_prefix != sys.prefix
         | 
| 211 | 
            +
                    or hasattr(sys, "real_prefix")
         | 
| 212 | 
            +
                    or (hasattr(sys, "prefix") and "conda" in sys.prefix.lower())
         | 
| 208 213 | 
             
                )
         | 
| 209 | 
            -
             | 
| 214 | 
            +
             | 
| 210 215 | 
             
                if in_venv:
         | 
| 211 | 
            -
                    venv_path = getattr(sys,  | 
| 216 | 
            +
                    venv_path = getattr(sys, "prefix", "unknown")
         | 
| 212 217 | 
             
                    return True, f"Virtual environment: {venv_path}"
         | 
| 213 218 | 
             
                else:
         | 
| 214 | 
            -
                    return False, f"System Python: {sys.prefix}"
         | 
| 219 | 
            +
                    return False, f"System Python: {sys.prefix}"
         |