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
    
        claude_mpm/cli/__init__.py
    CHANGED
    
    | @@ -1,3 +1,6 @@ | |
| 1 | 
            +
            from pathlib import Path
         | 
| 2 | 
            +
            from typing import Optional
         | 
| 3 | 
            +
             | 
| 1 4 | 
             
            """
         | 
| 2 5 | 
             
            Claude MPM Command-Line Interface.
         | 
| 3 6 |  | 
| @@ -11,25 +14,24 @@ remains the primary entry point for both direct execution and package imports. | |
| 11 14 | 
             
            """
         | 
| 12 15 |  | 
| 13 16 | 
             
            import sys
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            from  | 
| 17 | 
            +
             | 
| 18 | 
            +
            from claude_mpm.config.paths import paths
         | 
| 16 19 |  | 
| 17 20 | 
             
            from ..constants import CLICommands, LogLevel
         | 
| 18 | 
            -
            from . | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
                run_session,
         | 
| 22 | 
            -
                manage_tickets,
         | 
| 23 | 
            -
                show_info,
         | 
| 21 | 
            +
            from .commands import (  # run_guarded_session is imported lazily to avoid loading experimental code
         | 
| 22 | 
            +
                aggregate_command,
         | 
| 23 | 
            +
                cleanup_memory,
         | 
| 24 24 | 
             
                manage_agents,
         | 
| 25 | 
            +
                manage_config,
         | 
| 26 | 
            +
                manage_mcp,
         | 
| 25 27 | 
             
                manage_memory,
         | 
| 26 28 | 
             
                manage_monitor,
         | 
| 27 | 
            -
                 | 
| 28 | 
            -
                 | 
| 29 | 
            -
                 | 
| 30 | 
            -
                manage_mcp
         | 
| 29 | 
            +
                manage_tickets,
         | 
| 30 | 
            +
                run_session,
         | 
| 31 | 
            +
                show_info,
         | 
| 31 32 | 
             
            )
         | 
| 32 | 
            -
            from  | 
| 33 | 
            +
            from .parser import create_parser, preprocess_args
         | 
| 34 | 
            +
            from .utils import ensure_directories, setup_logging
         | 
| 33 35 |  | 
| 34 36 | 
             
            # Get version using centralized path management
         | 
| 35 37 | 
             
            # Try package VERSION file first (for installed packages)
         | 
| @@ -52,55 +54,78 @@ else: | |
| 52 54 | 
             
            def main(argv: Optional[list] = None):
         | 
| 53 55 | 
             
                """
         | 
| 54 56 | 
             
                Main CLI entry point.
         | 
| 55 | 
            -
             | 
| 57 | 
            +
             | 
| 56 58 | 
             
                WHY: This function orchestrates the entire CLI flow:
         | 
| 57 59 | 
             
                1. Ensures directories exist
         | 
| 58 60 | 
             
                2. Preprocesses arguments (handling --mpm: prefix)
         | 
| 59 61 | 
             
                3. Parses arguments
         | 
| 60 62 | 
             
                4. Sets up logging
         | 
| 61 63 | 
             
                5. Executes the appropriate command
         | 
| 62 | 
            -
             | 
| 64 | 
            +
             | 
| 63 65 | 
             
                DESIGN DECISION: We keep error handling at this level to provide consistent
         | 
| 64 66 | 
             
                error messages and exit codes across all commands.
         | 
| 65 | 
            -
             | 
| 67 | 
            +
             | 
| 66 68 | 
             
                Args:
         | 
| 67 69 | 
             
                    argv: Optional list of command line arguments for testing
         | 
| 68 | 
            -
             | 
| 70 | 
            +
             | 
| 69 71 | 
             
                Returns:
         | 
| 70 72 | 
             
                    Exit code (0 for success, non-zero for errors)
         | 
| 71 73 | 
             
                """
         | 
| 72 74 | 
             
                # Ensure directories are initialized on first run
         | 
| 73 75 | 
             
                ensure_directories()
         | 
| 74 | 
            -
             | 
| 76 | 
            +
             | 
| 75 77 | 
             
                # Initialize or update project registry
         | 
| 76 78 | 
             
                _initialize_project_registry()
         | 
| 77 | 
            -
             | 
| 79 | 
            +
             | 
| 78 80 | 
             
                # Create parser with version
         | 
| 79 81 | 
             
                parser = create_parser(version=__version__)
         | 
| 80 | 
            -
             | 
| 82 | 
            +
             | 
| 81 83 | 
             
                # Preprocess and parse arguments
         | 
| 82 84 | 
             
                processed_argv = preprocess_args(argv)
         | 
| 83 85 | 
             
                args = parser.parse_args(processed_argv)
         | 
| 84 | 
            -
             | 
| 86 | 
            +
             | 
| 85 87 | 
             
                # Set up logging
         | 
| 86 | 
            -
                 | 
| 87 | 
            -
                
         | 
| 88 | 
            +
                # Special case: For MCP start command, we need minimal logging to avoid stdout interference
         | 
| 89 | 
            +
                if (
         | 
| 90 | 
            +
                    args.command == CLICommands.MCP.value
         | 
| 91 | 
            +
                    and getattr(args, "mcp_command", None) == "start"
         | 
| 92 | 
            +
                ):
         | 
| 93 | 
            +
                    # For MCP server, configure minimal stderr-only logging
         | 
| 94 | 
            +
                    import logging
         | 
| 95 | 
            +
                    import sys
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                    # Only log errors to stderr for MCP server
         | 
| 98 | 
            +
                    if not getattr(args, "test", False) and not getattr(
         | 
| 99 | 
            +
                        args, "instructions", False
         | 
| 100 | 
            +
                    ):
         | 
| 101 | 
            +
                        # Production MCP mode - minimal logging
         | 
| 102 | 
            +
                        logging.basicConfig(
         | 
| 103 | 
            +
                            level=logging.ERROR, format="%(message)s", stream=sys.stderr, force=True
         | 
| 104 | 
            +
                        )
         | 
| 105 | 
            +
                        logger = logging.getLogger("claude_mpm")
         | 
| 106 | 
            +
                    else:
         | 
| 107 | 
            +
                        # Test or instructions mode - normal logging
         | 
| 108 | 
            +
                        logger = setup_logging(args)
         | 
| 109 | 
            +
                else:
         | 
| 110 | 
            +
                    # Normal logging for all other commands
         | 
| 111 | 
            +
                    logger = setup_logging(args)
         | 
| 112 | 
            +
             | 
| 88 113 | 
             
                # Debug output if requested
         | 
| 89 | 
            -
                if hasattr(args,  | 
| 114 | 
            +
                if hasattr(args, "debug") and args.debug:
         | 
| 90 115 | 
             
                    logger.debug(f"Command: {args.command}")
         | 
| 91 116 | 
             
                    logger.debug(f"Arguments: {args}")
         | 
| 92 | 
            -
             | 
| 117 | 
            +
             | 
| 93 118 | 
             
                # Hook system note: Claude Code hooks are handled externally via the
         | 
| 94 119 | 
             
                # hook_handler.py script installed in ~/.claude/settings.json
         | 
| 95 120 | 
             
                # The --no-hooks flag is kept for backward compatibility but doesn't affect
         | 
| 96 121 | 
             
                # Claude Code hooks which are configured separately.
         | 
| 97 | 
            -
             | 
| 122 | 
            +
             | 
| 98 123 | 
             
                # Default to run command if no command specified
         | 
| 99 124 | 
             
                if not args.command:
         | 
| 100 125 | 
             
                    args.command = CLICommands.RUN.value
         | 
| 101 126 | 
             
                    # Ensure run-specific attributes exist when defaulting to run
         | 
| 102 127 | 
             
                    _ensure_run_attributes(args)
         | 
| 103 | 
            -
             | 
| 128 | 
            +
             | 
| 104 129 | 
             
                # Execute command
         | 
| 105 130 | 
             
                try:
         | 
| 106 131 | 
             
                    exit_code = _execute_command(args.command, args)
         | 
| @@ -112,6 +137,7 @@ def main(argv: Optional[list] = None): | |
| 112 137 | 
             
                    logger.error(f"Error: {e}")
         | 
| 113 138 | 
             
                    if args.debug:
         | 
| 114 139 | 
             
                        import traceback
         | 
| 140 | 
            +
             | 
| 115 141 | 
             
                        traceback.print_exc()
         | 
| 116 142 | 
             
                    return 1
         | 
| 117 143 |  | 
| @@ -119,21 +145,23 @@ def main(argv: Optional[list] = None): | |
| 119 145 | 
             
            def _initialize_project_registry():
         | 
| 120 146 | 
             
                """
         | 
| 121 147 | 
             
                Initialize or update the project registry for the current session.
         | 
| 122 | 
            -
             | 
| 148 | 
            +
             | 
| 123 149 | 
             
                WHY: The project registry tracks all claude-mpm projects and their metadata
         | 
| 124 150 | 
             
                across sessions. This function ensures the current project is properly
         | 
| 125 151 | 
             
                registered and updates session information.
         | 
| 126 | 
            -
             | 
| 152 | 
            +
             | 
| 127 153 | 
             
                DESIGN DECISION: Registry failures are logged but don't prevent startup
         | 
| 128 154 | 
             
                to ensure claude-mpm remains functional even if registry operations fail.
         | 
| 129 155 | 
             
                """
         | 
| 130 156 | 
             
                try:
         | 
| 131 | 
            -
                    from ..services. | 
| 157 | 
            +
                    from ..services.project.registry import ProjectRegistry
         | 
| 158 | 
            +
             | 
| 132 159 | 
             
                    registry = ProjectRegistry()
         | 
| 133 160 | 
             
                    registry.get_or_create_project_entry()
         | 
| 134 161 | 
             
                except Exception as e:
         | 
| 135 162 | 
             
                    # Import logger here to avoid circular imports
         | 
| 136 163 | 
             
                    from ..core.logger import get_logger
         | 
| 164 | 
            +
             | 
| 137 165 | 
             
                    logger = get_logger("cli")
         | 
| 138 166 | 
             
                    logger.debug(f"Failed to initialize project registry: {e}")
         | 
| 139 167 | 
             
                    # Continue execution - registry failure shouldn't block startup
         | 
| @@ -142,44 +170,57 @@ def _initialize_project_registry(): | |
| 142 170 | 
             
            def _ensure_run_attributes(args):
         | 
| 143 171 | 
             
                """
         | 
| 144 172 | 
             
                Ensure run command attributes exist when defaulting to run.
         | 
| 145 | 
            -
             | 
| 173 | 
            +
             | 
| 146 174 | 
             
                WHY: When no command is specified, we default to 'run' but the args object
         | 
| 147 175 | 
             
                won't have run-specific attributes from the subparser. This function ensures
         | 
| 148 176 | 
             
                they exist with sensible defaults.
         | 
| 149 | 
            -
             | 
| 177 | 
            +
             | 
| 150 178 | 
             
                Args:
         | 
| 151 179 | 
             
                    args: Parsed arguments object to update
         | 
| 152 180 | 
             
                """
         | 
| 153 181 | 
             
                # Set defaults for run command attributes
         | 
| 154 | 
            -
                args.no_tickets = getattr(args,  | 
| 155 | 
            -
                args.no_hooks = getattr(args,  | 
| 156 | 
            -
                args.intercept_commands = getattr(args,  | 
| 157 | 
            -
                args.input = getattr(args,  | 
| 158 | 
            -
                args.non_interactive = getattr(args,  | 
| 159 | 
            -
                args.no_native_agents = getattr(args,  | 
| 160 | 
            -
                args.claude_args = getattr(args,  | 
| 161 | 
            -
                args.launch_method = getattr(args,  | 
| 162 | 
            -
                args.websocket = getattr(args,  | 
| 163 | 
            -
                args.websocket_port = getattr(args,  | 
| 182 | 
            +
                args.no_tickets = getattr(args, "no_tickets", False)
         | 
| 183 | 
            +
                args.no_hooks = getattr(args, "no_hooks", False)
         | 
| 184 | 
            +
                args.intercept_commands = getattr(args, "intercept_commands", False)
         | 
| 185 | 
            +
                args.input = getattr(args, "input", None)
         | 
| 186 | 
            +
                args.non_interactive = getattr(args, "non_interactive", False)
         | 
| 187 | 
            +
                args.no_native_agents = getattr(args, "no_native_agents", False)
         | 
| 188 | 
            +
                args.claude_args = getattr(args, "claude_args", [])
         | 
| 189 | 
            +
                args.launch_method = getattr(args, "launch_method", "exec")
         | 
| 190 | 
            +
                args.websocket = getattr(args, "websocket", False)
         | 
| 191 | 
            +
                args.websocket_port = getattr(args, "websocket_port", 8765)
         | 
| 164 192 |  | 
| 165 193 |  | 
| 166 194 | 
             
            def _execute_command(command: str, args) -> int:
         | 
| 167 195 | 
             
                """
         | 
| 168 196 | 
             
                Execute the specified command.
         | 
| 169 | 
            -
             | 
| 197 | 
            +
             | 
| 170 198 | 
             
                WHY: This function maps command names to their implementations, providing
         | 
| 171 | 
            -
                a single place to manage command routing.
         | 
| 172 | 
            -
                
         | 
| 199 | 
            +
                a single place to manage command routing. Experimental commands are imported
         | 
| 200 | 
            +
                lazily to avoid loading unnecessary code.
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                DESIGN DECISION: run_guarded is imported only when needed to maintain
         | 
| 203 | 
            +
                separation between stable and experimental features.
         | 
| 204 | 
            +
             | 
| 173 205 | 
             
                Args:
         | 
| 174 206 | 
             
                    command: The command name to execute
         | 
| 175 207 | 
             
                    args: Parsed command line arguments
         | 
| 176 | 
            -
             | 
| 208 | 
            +
             | 
| 177 209 | 
             
                Returns:
         | 
| 178 210 | 
             
                    Exit code from the command
         | 
| 179 211 | 
             
                """
         | 
| 180 | 
            -
                #  | 
| 212 | 
            +
                # Handle experimental run-guarded command separately with lazy import
         | 
| 213 | 
            +
                if command == "run-guarded":
         | 
| 214 | 
            +
                    # Lazy import to avoid loading experimental code unless needed
         | 
| 215 | 
            +
                    from .commands.run_guarded import execute_run_guarded
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                    result = execute_run_guarded(args)
         | 
| 218 | 
            +
                    return result if result is not None else 0
         | 
| 219 | 
            +
             | 
| 220 | 
            +
                # Map stable commands to their implementations
         | 
| 181 221 | 
             
                command_map = {
         | 
| 182 222 | 
             
                    CLICommands.RUN.value: run_session,
         | 
| 223 | 
            +
                    # CLICommands.RUN_GUARDED.value is handled above
         | 
| 183 224 | 
             
                    CLICommands.TICKETS.value: manage_tickets,
         | 
| 184 225 | 
             
                    CLICommands.INFO.value: show_info,
         | 
| 185 226 | 
             
                    CLICommands.AGENTS.value: manage_agents,
         | 
| @@ -190,7 +231,7 @@ def _execute_command(command: str, args) -> int: | |
| 190 231 | 
             
                    CLICommands.CLEANUP.value: cleanup_memory,
         | 
| 191 232 | 
             
                    CLICommands.MCP.value: manage_mcp,
         | 
| 192 233 | 
             
                }
         | 
| 193 | 
            -
             | 
| 234 | 
            +
             | 
| 194 235 | 
             
                # Execute command if found
         | 
| 195 236 | 
             
                if command in command_map:
         | 
| 196 237 | 
             
                    result = command_map[command](args)
         | 
| @@ -205,4 +246,4 @@ def _execute_command(command: str, args) -> int: | |
| 205 246 |  | 
| 206 247 | 
             
            # For backward compatibility - export main
         | 
| 207 248 | 
             
            if __name__ == "__main__":
         | 
| 208 | 
            -
                sys.exit(main())
         | 
| 249 | 
            +
                sys.exit(main())
         | 
    
        claude_mpm/cli/__main__.py
    CHANGED
    
    | @@ -11,14 +11,15 @@ execution. | |
| 11 11 |  | 
| 12 12 | 
             
            Usage:
         | 
| 13 13 | 
             
                python -m claude_mpm.cli [arguments]
         | 
| 14 | 
            -
             | 
| 14 | 
            +
             | 
| 15 15 | 
             
            This is equivalent to calling the claude-mpm script directly but ensures
         | 
| 16 16 | 
             
            proper Python module context and import resolution.
         | 
| 17 17 | 
             
            """
         | 
| 18 18 |  | 
| 19 19 | 
             
            import sys
         | 
| 20 | 
            +
             | 
| 20 21 | 
             
            from . import main
         | 
| 21 22 |  | 
| 22 23 | 
             
            if __name__ == "__main__":
         | 
| 23 24 | 
             
                # Execute the main CLI function and exit with its return code
         | 
| 24 | 
            -
                sys.exit(main())
         | 
| 25 | 
            +
                sys.exit(main())
         | 
| @@ -5,27 +5,30 @@ WHY: This package contains individual command implementations, organized into | |
| 5 5 | 
             
            separate modules for better maintainability and code organization.
         | 
| 6 6 | 
             
            """
         | 
| 7 7 |  | 
| 8 | 
            -
            from .run import run_session
         | 
| 9 | 
            -
            from .tickets import manage_tickets, list_tickets
         | 
| 10 | 
            -
            from .info import show_info
         | 
| 11 8 | 
             
            from .agents import manage_agents
         | 
| 12 | 
            -
            from .memory import manage_memory
         | 
| 13 | 
            -
            from .monitor import manage_monitor
         | 
| 14 | 
            -
            from .config import manage_config
         | 
| 15 9 | 
             
            from .aggregate import aggregate_command
         | 
| 16 10 | 
             
            from .cleanup import cleanup_memory
         | 
| 11 | 
            +
            from .config import manage_config
         | 
| 12 | 
            +
            from .info import show_info
         | 
| 17 13 | 
             
            from .mcp import manage_mcp
         | 
| 14 | 
            +
            from .memory import manage_memory
         | 
| 15 | 
            +
            from .monitor import manage_monitor
         | 
| 16 | 
            +
            from .run import run_session
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
            from .tickets import list_tickets, manage_tickets
         | 
| 18 20 |  | 
| 19 21 | 
             
            __all__ = [
         | 
| 20 | 
            -
                 | 
| 21 | 
            -
                ' | 
| 22 | 
            -
                 | 
| 23 | 
            -
                 | 
| 24 | 
            -
                 | 
| 25 | 
            -
                 | 
| 26 | 
            -
                 | 
| 27 | 
            -
                 | 
| 28 | 
            -
                 | 
| 29 | 
            -
                 | 
| 30 | 
            -
                 | 
| 31 | 
            -
             | 
| 22 | 
            +
                "run_session",
         | 
| 23 | 
            +
                # 'run_guarded_session',  # Excluded from default exports (experimental)
         | 
| 24 | 
            +
                "manage_tickets",
         | 
| 25 | 
            +
                "list_tickets",
         | 
| 26 | 
            +
                "show_info",
         | 
| 27 | 
            +
                "manage_agents",
         | 
| 28 | 
            +
                "manage_memory",
         | 
| 29 | 
            +
                "manage_monitor",
         | 
| 30 | 
            +
                "manage_config",
         | 
| 31 | 
            +
                "aggregate_command",
         | 
| 32 | 
            +
                "cleanup_memory",
         | 
| 33 | 
            +
                "manage_mcp",
         | 
| 34 | 
            +
            ]
         |