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
| @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            from pathlib import Path
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            """Socket.IO server configuration for different deployment scenarios.
         | 
| 2 4 |  | 
| 3 5 | 
             
            This module provides configuration management for Socket.IO servers
         | 
| @@ -12,66 +14,69 @@ WHY configuration management: | |
| 12 14 |  | 
| 13 15 | 
             
            import os
         | 
| 14 16 | 
             
            from dataclasses import dataclass
         | 
| 15 | 
            -
            from  | 
| 16 | 
            -
            from typing import Dict, Any, List, Optional
         | 
| 17 | 
            +
            from typing import Any, Dict, List, Optional
         | 
| 17 18 |  | 
| 18 19 | 
             
            # Import constants for default values
         | 
| 19 | 
            -
            from claude_mpm.core.constants import NetworkConfig,  | 
| 20 | 
            +
            from claude_mpm.core.constants import NetworkConfig, RetryConfig, SystemLimits
         | 
| 20 21 |  | 
| 21 22 |  | 
| 22 23 | 
             
            @dataclass
         | 
| 23 24 | 
             
            class SocketIOConfig:
         | 
| 24 25 | 
             
                """Configuration for Socket.IO server instances."""
         | 
| 25 | 
            -
             | 
| 26 | 
            +
             | 
| 26 27 | 
             
                # Server settings
         | 
| 27 28 | 
             
                host: str = "localhost"
         | 
| 28 29 | 
             
                port: int = NetworkConfig.DEFAULT_DASHBOARD_PORT
         | 
| 29 30 | 
             
                server_id: Optional[str] = None
         | 
| 30 | 
            -
             | 
| 31 | 
            +
             | 
| 31 32 | 
             
                # Connection settings
         | 
| 32 33 | 
             
                cors_allowed_origins: str = "*"  # Configure properly for production
         | 
| 33 34 | 
             
                ping_timeout: int = NetworkConfig.PING_TIMEOUT_STANDARD
         | 
| 34 35 | 
             
                ping_interval: int = NetworkConfig.PING_INTERVAL_STANDARD
         | 
| 35 36 | 
             
                max_http_buffer_size: int = 1000000
         | 
| 36 | 
            -
             | 
| 37 | 
            +
             | 
| 37 38 | 
             
                # Compatibility settings
         | 
| 38 39 | 
             
                min_client_version: str = "0.7.0"
         | 
| 39 40 | 
             
                max_history_size: int = SystemLimits.MAX_EVENT_HISTORY
         | 
| 40 | 
            -
             | 
| 41 | 
            +
             | 
| 41 42 | 
             
                # Deployment settings
         | 
| 42 43 | 
             
                deployment_mode: str = "auto"  # auto, standalone, embedded, client
         | 
| 43 44 | 
             
                auto_start: bool = True
         | 
| 44 45 | 
             
                persistent: bool = True
         | 
| 45 | 
            -
             | 
| 46 | 
            +
             | 
| 46 47 | 
             
                # Logging settings
         | 
| 47 48 | 
             
                log_level: str = "INFO"
         | 
| 48 49 | 
             
                log_to_file: bool = False
         | 
| 49 50 | 
             
                log_file_path: Optional[str] = None
         | 
| 50 | 
            -
             | 
| 51 | 
            +
             | 
| 51 52 | 
             
                # Health monitoring
         | 
| 52 53 | 
             
                health_check_interval: int = 30
         | 
| 53 54 | 
             
                max_connection_attempts: int = RetryConfig.MAX_CONNECTION_RETRIES
         | 
| 54 55 | 
             
                reconnection_delay: int = 1
         | 
| 55 | 
            -
             | 
| 56 | 
            +
             | 
| 56 57 | 
             
                @classmethod
         | 
| 57 | 
            -
                def from_env(cls) ->  | 
| 58 | 
            +
                def from_env(cls) -> "SocketIOConfig":
         | 
| 58 59 | 
             
                    """Create configuration from environment variables."""
         | 
| 59 60 | 
             
                    return cls(
         | 
| 60 | 
            -
                        host=os.getenv( | 
| 61 | 
            -
                        port=int(os.getenv( | 
| 62 | 
            -
                        server_id=os.getenv( | 
| 63 | 
            -
                        cors_allowed_origins=os.getenv( | 
| 64 | 
            -
                        ping_timeout=int(os.getenv( | 
| 65 | 
            -
                        ping_interval=int(os.getenv( | 
| 66 | 
            -
                        deployment_mode=os.getenv( | 
| 67 | 
            -
                        auto_start=os.getenv( | 
| 68 | 
            -
                         | 
| 69 | 
            -
                         | 
| 70 | 
            -
                         | 
| 61 | 
            +
                        host=os.getenv("CLAUDE_MPM_SOCKETIO_HOST", "localhost"),
         | 
| 62 | 
            +
                        port=int(os.getenv("CLAUDE_MPM_SOCKETIO_PORT", "8765")),
         | 
| 63 | 
            +
                        server_id=os.getenv("CLAUDE_MPM_SOCKETIO_SERVER_ID"),
         | 
| 64 | 
            +
                        cors_allowed_origins=os.getenv("CLAUDE_MPM_SOCKETIO_CORS", "*"),
         | 
| 65 | 
            +
                        ping_timeout=int(os.getenv("CLAUDE_MPM_SOCKETIO_PING_TIMEOUT", "60")),
         | 
| 66 | 
            +
                        ping_interval=int(os.getenv("CLAUDE_MPM_SOCKETIO_PING_INTERVAL", "25")),
         | 
| 67 | 
            +
                        deployment_mode=os.getenv("CLAUDE_MPM_SOCKETIO_MODE", "auto"),
         | 
| 68 | 
            +
                        auto_start=os.getenv("CLAUDE_MPM_SOCKETIO_AUTO_START", "true").lower()
         | 
| 69 | 
            +
                        == "true",
         | 
| 70 | 
            +
                        persistent=os.getenv("CLAUDE_MPM_SOCKETIO_PERSISTENT", "true").lower()
         | 
| 71 | 
            +
                        == "true",
         | 
| 72 | 
            +
                        log_level=os.getenv("CLAUDE_MPM_SOCKETIO_LOG_LEVEL", "INFO"),
         | 
| 73 | 
            +
                        max_history_size=int(
         | 
| 74 | 
            +
                            os.getenv("CLAUDE_MPM_SOCKETIO_HISTORY_SIZE", "10000")
         | 
| 75 | 
            +
                        ),
         | 
| 71 76 | 
             
                    )
         | 
| 72 | 
            -
             | 
| 77 | 
            +
             | 
| 73 78 | 
             
                @classmethod
         | 
| 74 | 
            -
                def for_development(cls) ->  | 
| 79 | 
            +
                def for_development(cls) -> "SocketIOConfig":
         | 
| 75 80 | 
             
                    """Configuration optimized for development."""
         | 
| 76 81 | 
             
                    return cls(
         | 
| 77 82 | 
             
                        host="localhost",
         | 
| @@ -80,11 +85,11 @@ class SocketIOConfig: | |
| 80 85 | 
             
                        log_level="DEBUG",
         | 
| 81 86 | 
             
                        ping_timeout=30,
         | 
| 82 87 | 
             
                        ping_interval=10,
         | 
| 83 | 
            -
                        max_history_size=5000
         | 
| 88 | 
            +
                        max_history_size=5000,
         | 
| 84 89 | 
             
                    )
         | 
| 85 | 
            -
             | 
| 90 | 
            +
             | 
| 86 91 | 
             
                @classmethod
         | 
| 87 | 
            -
                def for_production(cls) ->  | 
| 92 | 
            +
                def for_production(cls) -> "SocketIOConfig":
         | 
| 88 93 | 
             
                    """Configuration optimized for production."""
         | 
| 89 94 | 
             
                    return cls(
         | 
| 90 95 | 
             
                        host="0.0.0.0",  # Bind to all interfaces in production
         | 
| @@ -97,11 +102,11 @@ class SocketIOConfig: | |
| 97 102 | 
             
                        log_file_path="/var/log/claude-mpm-socketio.log",
         | 
| 98 103 | 
             
                        ping_timeout=120,
         | 
| 99 104 | 
             
                        ping_interval=30,
         | 
| 100 | 
            -
                        max_history_size=20000
         | 
| 105 | 
            +
                        max_history_size=20000,
         | 
| 101 106 | 
             
                    )
         | 
| 102 | 
            -
             | 
| 107 | 
            +
             | 
| 103 108 | 
             
                @classmethod
         | 
| 104 | 
            -
                def for_docker(cls) ->  | 
| 109 | 
            +
                def for_docker(cls) -> "SocketIOConfig":
         | 
| 105 110 | 
             
                    """Configuration optimized for Docker deployment."""
         | 
| 106 111 | 
             
                    return cls(
         | 
| 107 112 | 
             
                        host="0.0.0.0",
         | 
| @@ -111,36 +116,36 @@ class SocketIOConfig: | |
| 111 116 | 
             
                        log_level="INFO",
         | 
| 112 117 | 
             
                        ping_timeout=90,
         | 
| 113 118 | 
             
                        ping_interval=25,
         | 
| 114 | 
            -
                        max_history_size=15000
         | 
| 119 | 
            +
                        max_history_size=15000,
         | 
| 115 120 | 
             
                    )
         | 
| 116 | 
            -
             | 
| 121 | 
            +
             | 
| 117 122 | 
             
                def to_dict(self) -> Dict[str, Any]:
         | 
| 118 123 | 
             
                    """Convert configuration to dictionary."""
         | 
| 119 124 | 
             
                    return {
         | 
| 120 | 
            -
                         | 
| 121 | 
            -
                         | 
| 122 | 
            -
                         | 
| 123 | 
            -
                         | 
| 124 | 
            -
                         | 
| 125 | 
            -
                         | 
| 126 | 
            -
                         | 
| 127 | 
            -
                         | 
| 128 | 
            -
                         | 
| 129 | 
            -
                         | 
| 130 | 
            -
                         | 
| 131 | 
            -
                         | 
| 132 | 
            -
                         | 
| 133 | 
            -
                         | 
| 134 | 
            -
                         | 
| 135 | 
            -
                         | 
| 136 | 
            -
                         | 
| 137 | 
            -
                         | 
| 125 | 
            +
                        "host": self.host,
         | 
| 126 | 
            +
                        "port": self.port,
         | 
| 127 | 
            +
                        "server_id": self.server_id,
         | 
| 128 | 
            +
                        "cors_allowed_origins": self.cors_allowed_origins,
         | 
| 129 | 
            +
                        "ping_timeout": self.ping_timeout,
         | 
| 130 | 
            +
                        "ping_interval": self.ping_interval,
         | 
| 131 | 
            +
                        "max_http_buffer_size": self.max_http_buffer_size,
         | 
| 132 | 
            +
                        "min_client_version": self.min_client_version,
         | 
| 133 | 
            +
                        "max_history_size": self.max_history_size,
         | 
| 134 | 
            +
                        "deployment_mode": self.deployment_mode,
         | 
| 135 | 
            +
                        "auto_start": self.auto_start,
         | 
| 136 | 
            +
                        "persistent": self.persistent,
         | 
| 137 | 
            +
                        "log_level": self.log_level,
         | 
| 138 | 
            +
                        "log_to_file": self.log_to_file,
         | 
| 139 | 
            +
                        "log_file_path": self.log_file_path,
         | 
| 140 | 
            +
                        "health_check_interval": self.health_check_interval,
         | 
| 141 | 
            +
                        "max_connection_attempts": self.max_connection_attempts,
         | 
| 142 | 
            +
                        "reconnection_delay": self.reconnection_delay,
         | 
| 138 143 | 
             
                    }
         | 
| 139 144 |  | 
| 140 145 |  | 
| 141 146 | 
             
            class ConfigManager:
         | 
| 142 147 | 
             
                """Manages Socket.IO configuration across different environments."""
         | 
| 143 | 
            -
             | 
| 148 | 
            +
             | 
| 144 149 | 
             
                def __init__(self):
         | 
| 145 150 | 
             
                    self.config_file_name = "socketio_config.json"
         | 
| 146 151 | 
             
                    self.config_search_paths = [
         | 
| @@ -148,34 +153,38 @@ class ConfigManager: | |
| 148 153 | 
             
                        Path.home() / ".claude-mpm" / self.config_file_name,  # User home
         | 
| 149 154 | 
             
                        Path("/etc/claude-mpm") / self.config_file_name,  # System config
         | 
| 150 155 | 
             
                    ]
         | 
| 151 | 
            -
             | 
| 156 | 
            +
             | 
| 152 157 | 
             
                def detect_environment(self) -> str:
         | 
| 153 158 | 
             
                    """Detect the current deployment environment."""
         | 
| 154 159 | 
             
                    # Check for Docker
         | 
| 155 | 
            -
                    if os.path.exists( | 
| 160 | 
            +
                    if os.path.exists("/.dockerenv") or os.getenv("DOCKER_CONTAINER"):
         | 
| 156 161 | 
             
                        return "docker"
         | 
| 157 | 
            -
             | 
| 162 | 
            +
             | 
| 158 163 | 
             
                    # Check for production indicators
         | 
| 159 | 
            -
                    if  | 
| 164 | 
            +
                    if (
         | 
| 165 | 
            +
                        os.getenv("ENVIRONMENT") == "production"
         | 
| 166 | 
            +
                        or os.getenv("NODE_ENV") == "production"
         | 
| 167 | 
            +
                    ):
         | 
| 160 168 | 
             
                        return "production"
         | 
| 161 | 
            -
             | 
| 169 | 
            +
             | 
| 162 170 | 
             
                    # Check if running from installed package
         | 
| 163 171 | 
             
                    try:
         | 
| 164 172 | 
             
                        import claude_mpm
         | 
| 173 | 
            +
             | 
| 165 174 | 
             
                        pkg_path = Path(claude_mpm.__file__).parent
         | 
| 166 | 
            -
                        if  | 
| 175 | 
            +
                        if "site-packages" in str(pkg_path) or "dist-packages" in str(pkg_path):
         | 
| 167 176 | 
             
                            return "installed"
         | 
| 168 177 | 
             
                    except ImportError:
         | 
| 169 178 | 
             
                        pass
         | 
| 170 | 
            -
             | 
| 179 | 
            +
             | 
| 171 180 | 
             
                    # Default to development
         | 
| 172 181 | 
             
                    return "development"
         | 
| 173 | 
            -
             | 
| 182 | 
            +
             | 
| 174 183 | 
             
                def get_config(self, environment: str = None) -> SocketIOConfig:
         | 
| 175 184 | 
             
                    """Get configuration for the specified environment."""
         | 
| 176 185 | 
             
                    if environment is None:
         | 
| 177 186 | 
             
                        environment = self.detect_environment()
         | 
| 178 | 
            -
             | 
| 187 | 
            +
             | 
| 179 188 | 
             
                    # Start with environment-specific defaults
         | 
| 180 189 | 
             
                    if environment == "production":
         | 
| 181 190 | 
             
                        config = SocketIOConfig.for_production()
         | 
| @@ -185,49 +194,51 @@ class ConfigManager: | |
| 185 194 | 
             
                        config = SocketIOConfig.for_development()
         | 
| 186 195 | 
             
                    else:
         | 
| 187 196 | 
             
                        config = SocketIOConfig()
         | 
| 188 | 
            -
             | 
| 197 | 
            +
             | 
| 189 198 | 
             
                    # Override with environment variables
         | 
| 190 199 | 
             
                    env_config = SocketIOConfig.from_env()
         | 
| 191 200 | 
             
                    for field in config.__dataclass_fields__:
         | 
| 192 201 | 
             
                        env_value = getattr(env_config, field)
         | 
| 193 | 
            -
                        if env_value != getattr( | 
| 202 | 
            +
                        if env_value != getattr(
         | 
| 203 | 
            +
                            SocketIOConfig(), field
         | 
| 204 | 
            +
                        ):  # Only if different from default
         | 
| 194 205 | 
             
                            setattr(config, field, env_value)
         | 
| 195 | 
            -
             | 
| 206 | 
            +
             | 
| 196 207 | 
             
                    # Override with config file if available
         | 
| 197 208 | 
             
                    config_file_data = self._load_config_file()
         | 
| 198 209 | 
             
                    if config_file_data:
         | 
| 199 210 | 
             
                        for key, value in config_file_data.items():
         | 
| 200 211 | 
             
                            if hasattr(config, key):
         | 
| 201 212 | 
             
                                setattr(config, key, value)
         | 
| 202 | 
            -
             | 
| 213 | 
            +
             | 
| 203 214 | 
             
                    return config
         | 
| 204 | 
            -
             | 
| 215 | 
            +
             | 
| 205 216 | 
             
                def _load_config_file(self) -> Optional[Dict[str, Any]]:
         | 
| 206 217 | 
             
                    """Load configuration from file if available."""
         | 
| 207 218 | 
             
                    import json
         | 
| 208 | 
            -
             | 
| 219 | 
            +
             | 
| 209 220 | 
             
                    for config_path in self.config_search_paths:
         | 
| 210 221 | 
             
                        if config_path.exists():
         | 
| 211 222 | 
             
                            try:
         | 
| 212 | 
            -
                                with open(config_path,  | 
| 223 | 
            +
                                with open(config_path, "r") as f:
         | 
| 213 224 | 
             
                                    return json.load(f)
         | 
| 214 225 | 
             
                            except Exception as e:
         | 
| 215 226 | 
             
                                print(f"Warning: Failed to load config from {config_path}: {e}")
         | 
| 216 | 
            -
             | 
| 227 | 
            +
             | 
| 217 228 | 
             
                    return None
         | 
| 218 | 
            -
             | 
| 229 | 
            +
             | 
| 219 230 | 
             
                def save_config(self, config: SocketIOConfig, path: str = None) -> bool:
         | 
| 220 231 | 
             
                    """Save configuration to file."""
         | 
| 221 232 | 
             
                    import json
         | 
| 222 | 
            -
             | 
| 233 | 
            +
             | 
| 223 234 | 
             
                    if path is None:
         | 
| 224 235 | 
             
                        # Use user config directory
         | 
| 225 236 | 
             
                        config_dir = Path.home() / ".claude-mpm"
         | 
| 226 237 | 
             
                        config_dir.mkdir(exist_ok=True)
         | 
| 227 238 | 
             
                        path = config_dir / self.config_file_name
         | 
| 228 | 
            -
             | 
| 239 | 
            +
             | 
| 229 240 | 
             
                    try:
         | 
| 230 | 
            -
                        with open(path,  | 
| 241 | 
            +
                        with open(path, "w") as f:
         | 
| 231 242 | 
             
                            json.dump(config.to_dict(), f, indent=2)
         | 
| 232 243 | 
             
                        return True
         | 
| 233 244 | 
             
                    except Exception as e:
         | 
| @@ -256,4 +267,4 @@ def get_discovery_hosts(config: SocketIOConfig) -> List[str]: | |
| 256 267 | 
             
                    # If server binds to all interfaces, try localhost and 127.0.0.1 for discovery
         | 
| 257 268 | 
             
                    return ["localhost", "127.0.0.1"]
         | 
| 258 269 | 
             
                else:
         | 
| 259 | 
            -
                    return [config.host, "localhost", "127.0.0.1"]
         | 
| 270 | 
            +
                    return [config.host, "localhost", "127.0.0.1"]
         | 
    
        claude_mpm/constants.py
    CHANGED
    
    | @@ -1,16 +1,18 @@ | |
| 1 1 | 
             
            """Constants for Claude MPM."""
         | 
| 2 2 |  | 
| 3 3 | 
             
            from enum import Enum
         | 
| 4 | 
            +
            from pathlib import Path
         | 
| 4 5 |  | 
| 5 6 |  | 
| 6 7 | 
             
            class CLIPrefix(str, Enum):
         | 
| 7 8 | 
             
                """CLI command prefix constants."""
         | 
| 9 | 
            +
             | 
| 8 10 | 
             
                MPM = "--mpm:"
         | 
| 9 | 
            -
             | 
| 11 | 
            +
             | 
| 10 12 | 
             
                def __add__(self, other: str) -> str:
         | 
| 11 13 | 
             
                    """Allow prefix + command concatenation."""
         | 
| 12 14 | 
             
                    return self.value + other
         | 
| 13 | 
            -
             | 
| 15 | 
            +
             | 
| 14 16 | 
             
                def wrap(self, flag: str) -> str:
         | 
| 15 17 | 
             
                    """Wrap a flag with the prefix."""
         | 
| 16 18 | 
             
                    if flag.startswith("--"):
         | 
| @@ -22,6 +24,7 @@ class CLIPrefix(str, Enum): | |
| 22 24 |  | 
| 23 25 | 
             
            class CLICommands(str, Enum):
         | 
| 24 26 | 
             
                """CLI command constants."""
         | 
| 27 | 
            +
             | 
| 25 28 | 
             
                RUN = "run"
         | 
| 26 29 | 
             
                RUN_GUARDED = "run-guarded"
         | 
| 27 30 | 
             
                TICKETS = "tickets"
         | 
| @@ -33,28 +36,29 @@ class CLICommands(str, Enum): | |
| 33 36 | 
             
                AGGREGATE = "aggregate"
         | 
| 34 37 | 
             
                CLEANUP = "cleanup-memory"
         | 
| 35 38 | 
             
                MCP = "mcp"
         | 
| 36 | 
            -
             | 
| 39 | 
            +
             | 
| 37 40 | 
             
                def with_prefix(self, prefix: CLIPrefix = CLIPrefix.MPM) -> str:
         | 
| 38 41 | 
             
                    """Get command with prefix."""
         | 
| 39 42 | 
             
                    return prefix + self.value
         | 
| 40 | 
            -
             | 
| 43 | 
            +
             | 
| 41 44 | 
             
                @classmethod
         | 
| 42 45 | 
             
                def get_mpm_commands(cls) -> list[str]:
         | 
| 43 46 | 
             
                    """Get list of MPM-specific commands with prefix."""
         | 
| 44 47 | 
             
                    return [cmd.with_prefix() for cmd in cls]
         | 
| 45 | 
            -
             | 
| 48 | 
            +
             | 
| 46 49 | 
             
                @classmethod
         | 
| 47 50 | 
             
                def is_mpm_command(cls, command: str) -> bool:
         | 
| 48 51 | 
             
                    """Check if a command is an MPM command."""
         | 
| 49 52 | 
             
                    # Check both with and without prefix
         | 
| 50 53 | 
             
                    if command.startswith(CLIPrefix.MPM.value):
         | 
| 51 | 
            -
                        base_command = command[len(CLIPrefix.MPM.value):]
         | 
| 54 | 
            +
                        base_command = command[len(CLIPrefix.MPM.value) :]
         | 
| 52 55 | 
             
                        return base_command in [cmd.value for cmd in cls]
         | 
| 53 56 | 
             
                    return command in [cmd.value for cmd in cls]
         | 
| 54 57 |  | 
| 55 58 |  | 
| 56 59 | 
             
            class AgentCommands(str, Enum):
         | 
| 57 60 | 
             
                """Agent subcommand constants."""
         | 
| 61 | 
            +
             | 
| 58 62 | 
             
                LIST = "list"
         | 
| 59 63 | 
             
                VIEW = "view"
         | 
| 60 64 | 
             
                FIX = "fix"
         | 
| @@ -65,6 +69,7 @@ class AgentCommands(str, Enum): | |
| 65 69 |  | 
| 66 70 | 
             
            class MemoryCommands(str, Enum):
         | 
| 67 71 | 
             
                """Memory subcommand constants."""
         | 
| 72 | 
            +
             | 
| 68 73 | 
             
                INIT = "init"
         | 
| 69 74 | 
             
                STATUS = "status"
         | 
| 70 75 | 
             
                VIEW = "view"
         | 
| @@ -79,14 +84,17 @@ class MemoryCommands(str, Enum): | |
| 79 84 |  | 
| 80 85 | 
             
            class MonitorCommands(str, Enum):
         | 
| 81 86 | 
             
                """Monitor subcommand constants."""
         | 
| 87 | 
            +
             | 
| 82 88 | 
             
                START = "start"
         | 
| 83 89 | 
             
                STOP = "stop"
         | 
| 84 90 | 
             
                RESTART = "restart"
         | 
| 91 | 
            +
                STATUS = "status"
         | 
| 85 92 | 
             
                PORT = "port"
         | 
| 86 93 |  | 
| 87 94 |  | 
| 88 95 | 
             
            class ConfigCommands(str, Enum):
         | 
| 89 96 | 
             
                """Config subcommand constants."""
         | 
| 97 | 
            +
             | 
| 90 98 | 
             
                VALIDATE = "validate"
         | 
| 91 99 | 
             
                VIEW = "view"
         | 
| 92 100 | 
             
                STATUS = "status"
         | 
| @@ -94,6 +102,7 @@ class ConfigCommands(str, Enum): | |
| 94 102 |  | 
| 95 103 | 
             
            class AggregateCommands(str, Enum):
         | 
| 96 104 | 
             
                """Event aggregator subcommand constants."""
         | 
| 105 | 
            +
             | 
| 97 106 | 
             
                START = "start"
         | 
| 98 107 | 
             
                STOP = "stop"
         | 
| 99 108 | 
             
                STATUS = "status"
         | 
| @@ -104,6 +113,7 @@ class AggregateCommands(str, Enum): | |
| 104 113 |  | 
| 105 114 | 
             
            class MCPCommands(str, Enum):
         | 
| 106 115 | 
             
                """MCP Gateway subcommand constants."""
         | 
| 116 | 
            +
             | 
| 107 117 | 
             
                INSTALL = "install"
         | 
| 108 118 | 
             
                START = "start"
         | 
| 109 119 | 
             
                STOP = "stop"
         | 
| @@ -116,6 +126,7 @@ class MCPCommands(str, Enum): | |
| 116 126 |  | 
| 117 127 | 
             
            class TicketCommands(str, Enum):
         | 
| 118 128 | 
             
                """Ticket subcommand constants."""
         | 
| 129 | 
            +
             | 
| 119 130 | 
             
                CREATE = "create"
         | 
| 120 131 | 
             
                LIST = "list"
         | 
| 121 132 | 
             
                VIEW = "view"
         | 
| @@ -129,33 +140,34 @@ class TicketCommands(str, Enum): | |
| 129 140 |  | 
| 130 141 | 
             
            class CLIFlags(str, Enum):
         | 
| 131 142 | 
             
                """CLI flag constants (without prefix)."""
         | 
| 143 | 
            +
             | 
| 132 144 | 
             
                # Logging flags
         | 
| 133 145 | 
             
                DEBUG = "debug"
         | 
| 134 146 | 
             
                LOGGING = "logging"
         | 
| 135 147 | 
             
                LOG_DIR = "log-dir"
         | 
| 136 | 
            -
             | 
| 148 | 
            +
             | 
| 137 149 | 
             
                # Framework flags
         | 
| 138 150 | 
             
                FRAMEWORK_PATH = "framework-path"
         | 
| 139 151 | 
             
                AGENTS_DIR = "agents-dir"
         | 
| 140 | 
            -
             | 
| 152 | 
            +
             | 
| 141 153 | 
             
                # Hook flags
         | 
| 142 154 | 
             
                NO_HOOKS = "no-hooks"
         | 
| 143 | 
            -
             | 
| 155 | 
            +
             | 
| 144 156 | 
             
                # Ticket flags
         | 
| 145 157 | 
             
                NO_TICKETS = "no-tickets"
         | 
| 146 | 
            -
             | 
| 158 | 
            +
             | 
| 147 159 | 
             
                # Input/output flags
         | 
| 148 160 | 
             
                INPUT = "input"
         | 
| 149 161 | 
             
                NON_INTERACTIVE = "non-interactive"
         | 
| 150 | 
            -
             | 
| 162 | 
            +
             | 
| 151 163 | 
             
                # Orchestration flags
         | 
| 152 164 | 
             
                SUBPROCESS = "subprocess"
         | 
| 153 165 | 
             
                INTERACTIVE_SUBPROCESS = "interactive-subprocess"
         | 
| 154 166 | 
             
                TODO_HIJACK = "todo-hijack"
         | 
| 155 | 
            -
             | 
| 167 | 
            +
             | 
| 156 168 | 
             
                # Agent flags
         | 
| 157 169 | 
             
                NO_NATIVE_AGENTS = "no-native-agents"
         | 
| 158 | 
            -
             | 
| 170 | 
            +
             | 
| 159 171 | 
             
                def with_prefix(self, short: bool = False) -> str:
         | 
| 160 172 | 
             
                    """Get flag with MPM prefix."""
         | 
| 161 173 | 
             
                    prefix = CLIPrefix.MPM.value
         | 
| @@ -167,6 +179,7 @@ class CLIFlags(str, Enum): | |
| 167 179 |  | 
| 168 180 | 
             
            class LogLevel(str, Enum):
         | 
| 169 181 | 
             
                """Logging level constants."""
         | 
| 182 | 
            +
             | 
| 170 183 | 
             
                OFF = "OFF"
         | 
| 171 184 | 
             
                INFO = "INFO"
         | 
| 172 185 | 
             
                DEBUG = "DEBUG"
         | 
| @@ -174,6 +187,7 @@ class LogLevel(str, Enum): | |
| 174 187 |  | 
| 175 188 | 
             
            class OrchestratorMode(str, Enum):
         | 
| 176 189 | 
             
                """Orchestrator mode constants."""
         | 
| 190 | 
            +
             | 
| 177 191 | 
             
                SYSTEM_PROMPT = "system_prompt"
         | 
| 178 192 | 
             
                SUBPROCESS = "subprocess"
         | 
| 179 193 | 
             
                INTERACTIVE_SUBPROCESS = "interactive_subprocess"
         | 
| @@ -181,11 +195,12 @@ class OrchestratorMode(str, Enum): | |
| 181 195 |  | 
| 182 196 | 
             
            class EnvironmentVars(str, Enum):
         | 
| 183 197 | 
             
                """Environment variable constants."""
         | 
| 198 | 
            +
             | 
| 184 199 | 
             
                CLAUDE_CONFIG_DIR = "CLAUDE_CONFIG_DIR"
         | 
| 185 200 | 
             
                CLAUDE_MAX_PARALLEL_SUBAGENTS = "CLAUDE_MAX_PARALLEL_SUBAGENTS"
         | 
| 186 201 | 
             
                CLAUDE_TIMEOUT = "CLAUDE_TIMEOUT"
         | 
| 187 202 | 
             
                CLAUDE_MPM_DEBUG = "CLAUDE_MPM_DEBUG"
         | 
| 188 | 
            -
             | 
| 203 | 
            +
             | 
| 189 204 | 
             
                # Default values
         | 
| 190 205 | 
             
                DEFAULT_MAX_AGENTS = "10"
         | 
| 191 206 | 
             
                DEFAULT_TIMEOUT = "600000"  # 10 minutes in milliseconds
         | 
| @@ -193,15 +208,17 @@ class EnvironmentVars(str, Enum): | |
| 193 208 |  | 
| 194 209 | 
             
            class Paths(str, Enum):
         | 
| 195 210 | 
             
                """Path constants."""
         | 
| 211 | 
            +
             | 
| 196 212 | 
             
                CLAUDE_AGENTS_DIR = ".claude/agents"
         | 
| 197 213 | 
             
                CLAUDE_CONFIG_DIR = ".claude"
         | 
| 198 214 | 
             
                MPM_LOG_DIR = ".claude-mpm/logs"
         | 
| 199 215 | 
             
                MPM_SESSION_DIR = ".claude-mpm/session"
         | 
| 200 216 | 
             
                MPM_PROMPTS_DIR = ".claude-mpm/prompts"
         | 
| 201 | 
            -
             | 
| 202 | 
            -
             | 
| 217 | 
            +
             | 
| 218 | 
            +
             | 
| 203 219 | 
             
            class AgentMetadata(str, Enum):
         | 
| 204 220 | 
             
                """Agent metadata field constants."""
         | 
| 221 | 
            +
             | 
| 205 222 | 
             
                NAME = "name"
         | 
| 206 223 | 
             
                DESCRIPTION = "description"
         | 
| 207 224 | 
             
                VERSION = "version"
         | 
| @@ -212,11 +229,11 @@ class AgentMetadata(str, Enum): | |
| 212 229 | 
             
                TIMEOUT = "timeout"
         | 
| 213 230 | 
             
                MAX_TOKENS = "max_tokens"
         | 
| 214 231 | 
             
                TEMPERATURE = "temperature"
         | 
| 215 | 
            -
             | 
| 232 | 
            +
             | 
| 216 233 | 
             
                # Default values
         | 
| 217 234 | 
             
                DEFAULT_AUTHOR = "claude-mpm"
         | 
| 218 235 | 
             
                DEFAULT_VERSION = "1.0.0"
         | 
| 219 236 | 
             
                DEFAULT_PRIORITY = "medium"
         | 
| 220 237 | 
             
                DEFAULT_TIMEOUT = 600
         | 
| 221 238 | 
             
                DEFAULT_MAX_TOKENS = 8192
         | 
| 222 | 
            -
                DEFAULT_TEMPERATURE = 0.5
         | 
| 239 | 
            +
                DEFAULT_TEMPERATURE = 0.5
         | 
    
        claude_mpm/core/__init__.py
    CHANGED
    
    | @@ -1,17 +1,20 @@ | |
| 1 1 | 
             
            """Core components for Claude MPM."""
         | 
| 2 2 |  | 
| 3 3 | 
             
            from .claude_runner import ClaudeRunner
         | 
| 4 | 
            -
            from .mixins import LoggerMixin
         | 
| 5 4 | 
             
            from .config import Config
         | 
| 6 5 |  | 
| 7 6 | 
             
            # Import DI components
         | 
| 8 7 | 
             
            from .container import DIContainer, ServiceLifetime, get_container
         | 
| 9 | 
            -
            from .service_registry import ServiceRegistry, get_service_registry, initialize_services
         | 
| 10 | 
            -
            from .injectable_service import InjectableService
         | 
| 11 8 | 
             
            from .factories import (
         | 
| 12 | 
            -
                 | 
| 13 | 
            -
                ConfigurationFactory, | 
| 9 | 
            +
                AgentServiceFactory,
         | 
| 10 | 
            +
                ConfigurationFactory,
         | 
| 11 | 
            +
                ServiceFactory,
         | 
| 12 | 
            +
                SessionManagerFactory,
         | 
| 13 | 
            +
                get_factory_registry,
         | 
| 14 14 | 
             
            )
         | 
| 15 | 
            +
            from .injectable_service import InjectableService
         | 
| 16 | 
            +
            from .mixins import LoggerMixin
         | 
| 17 | 
            +
            from .service_registry import ServiceRegistry, get_service_registry, initialize_services
         | 
| 15 18 |  | 
| 16 19 | 
             
            __all__ = [
         | 
| 17 20 | 
             
                "ClaudeRunner",
         | 
| @@ -29,4 +32,4 @@ __all__ = [ | |
| 29 32 | 
             
                "SessionManagerFactory",
         | 
| 30 33 | 
             
                "ConfigurationFactory",
         | 
| 31 34 | 
             
                "get_factory_registry",
         | 
| 32 | 
            -
            ]
         | 
| 35 | 
            +
            ]
         |