claude-mpm 4.1.1__py3-none-any.whl → 4.1.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/BUILD_NUMBER +1 -1
- claude_mpm/VERSION +1 -1
- claude_mpm/__main__.py +1 -1
- claude_mpm/agents/BASE_PM.md +74 -46
- claude_mpm/agents/INSTRUCTIONS.md +11 -153
- claude_mpm/agents/WORKFLOW.md +61 -321
- claude_mpm/agents/__init__.py +11 -11
- claude_mpm/agents/agent_loader.py +23 -20
- claude_mpm/agents/agent_loader_integration.py +1 -1
- claude_mpm/agents/agents_metadata.py +27 -0
- claude_mpm/agents/async_agent_loader.py +5 -8
- claude_mpm/agents/base_agent_loader.py +36 -25
- claude_mpm/agents/frontmatter_validator.py +6 -6
- claude_mpm/agents/schema/agent_schema.json +1 -1
- claude_mpm/agents/system_agent_config.py +9 -9
- claude_mpm/agents/templates/api_qa.json +47 -2
- claude_mpm/agents/templates/engineer.json +33 -11
- claude_mpm/agents/templates/imagemagick.json +256 -0
- claude_mpm/agents/templates/qa.json +41 -2
- claude_mpm/agents/templates/ticketing.json +5 -5
- claude_mpm/agents/templates/web_qa.json +50 -2
- claude_mpm/cli/__init__.py +51 -46
- claude_mpm/cli/__main__.py +1 -1
- claude_mpm/cli/commands/__init__.py +10 -12
- claude_mpm/cli/commands/agent_manager.py +186 -181
- claude_mpm/cli/commands/agents.py +648 -1098
- claude_mpm/cli/commands/aggregate.py +30 -29
- claude_mpm/cli/commands/cleanup.py +50 -44
- claude_mpm/cli/commands/cleanup_orphaned_agents.py +25 -25
- claude_mpm/cli/commands/config.py +162 -127
- claude_mpm/cli/commands/doctor.py +52 -62
- claude_mpm/cli/commands/info.py +37 -25
- claude_mpm/cli/commands/mcp.py +3 -7
- claude_mpm/cli/commands/mcp_command_router.py +14 -18
- claude_mpm/cli/commands/mcp_install_commands.py +28 -23
- claude_mpm/cli/commands/mcp_pipx_config.py +58 -49
- claude_mpm/cli/commands/mcp_server_commands.py +23 -17
- claude_mpm/cli/commands/memory.py +339 -967
- claude_mpm/cli/commands/monitor.py +117 -88
- claude_mpm/cli/commands/run.py +233 -542
- claude_mpm/cli/commands/socketio_monitor.py +17 -19
- claude_mpm/cli/commands/tickets.py +92 -92
- claude_mpm/cli/parser.py +1 -5
- claude_mpm/cli/parsers/__init__.py +1 -1
- claude_mpm/cli/parsers/agent_manager_parser.py +50 -98
- claude_mpm/cli/parsers/agents_parser.py +2 -3
- claude_mpm/cli/parsers/base_parser.py +7 -5
- claude_mpm/cli/parsers/mcp_parser.py +4 -2
- claude_mpm/cli/parsers/monitor_parser.py +26 -18
- claude_mpm/cli/shared/__init__.py +10 -10
- claude_mpm/cli/shared/argument_patterns.py +57 -71
- claude_mpm/cli/shared/base_command.py +61 -53
- claude_mpm/cli/shared/error_handling.py +62 -58
- claude_mpm/cli/shared/output_formatters.py +78 -77
- claude_mpm/cli/startup_logging.py +280 -172
- claude_mpm/cli/utils.py +10 -11
- claude_mpm/cli_module/__init__.py +1 -1
- claude_mpm/cli_module/args.py +1 -1
- claude_mpm/cli_module/migration_example.py +5 -5
- claude_mpm/config/__init__.py +9 -9
- claude_mpm/config/agent_config.py +15 -14
- claude_mpm/config/experimental_features.py +4 -4
- claude_mpm/config/paths.py +0 -1
- claude_mpm/config/socketio_config.py +5 -6
- claude_mpm/constants.py +1 -2
- claude_mpm/core/__init__.py +8 -8
- claude_mpm/core/agent_name_normalizer.py +1 -1
- claude_mpm/core/agent_registry.py +22 -29
- claude_mpm/core/agent_session_manager.py +3 -3
- claude_mpm/core/base_service.py +7 -15
- claude_mpm/core/cache.py +4 -6
- claude_mpm/core/claude_runner.py +85 -113
- claude_mpm/core/config.py +43 -28
- claude_mpm/core/config_aliases.py +0 -9
- claude_mpm/core/config_constants.py +52 -30
- claude_mpm/core/constants.py +0 -1
- claude_mpm/core/container.py +18 -27
- claude_mpm/core/exceptions.py +2 -2
- claude_mpm/core/factories.py +10 -12
- claude_mpm/core/framework_loader.py +500 -680
- claude_mpm/core/hook_manager.py +26 -22
- claude_mpm/core/hook_performance_config.py +58 -47
- claude_mpm/core/injectable_service.py +1 -1
- claude_mpm/core/interactive_session.py +61 -152
- claude_mpm/core/interfaces.py +1 -100
- claude_mpm/core/lazy.py +5 -5
- claude_mpm/core/log_manager.py +587 -0
- claude_mpm/core/logger.py +125 -8
- claude_mpm/core/logging_config.py +15 -17
- claude_mpm/core/minimal_framework_loader.py +5 -8
- claude_mpm/core/oneshot_session.py +15 -33
- claude_mpm/core/optimized_agent_loader.py +4 -6
- claude_mpm/core/optimized_startup.py +2 -1
- claude_mpm/core/output_style_manager.py +147 -106
- claude_mpm/core/pm_hook_interceptor.py +0 -1
- claude_mpm/core/service_registry.py +11 -8
- claude_mpm/core/session_manager.py +1 -2
- claude_mpm/core/shared/__init__.py +1 -1
- claude_mpm/core/shared/config_loader.py +101 -97
- claude_mpm/core/shared/path_resolver.py +72 -68
- claude_mpm/core/shared/singleton_manager.py +56 -50
- claude_mpm/core/socketio_pool.py +26 -6
- claude_mpm/core/tool_access_control.py +4 -5
- claude_mpm/core/typing_utils.py +50 -59
- claude_mpm/core/unified_agent_registry.py +14 -19
- claude_mpm/core/unified_config.py +4 -6
- claude_mpm/core/unified_paths.py +197 -109
- claude_mpm/dashboard/open_dashboard.py +2 -4
- claude_mpm/experimental/cli_enhancements.py +51 -36
- claude_mpm/generators/agent_profile_generator.py +2 -4
- claude_mpm/hooks/base_hook.py +1 -2
- claude_mpm/hooks/claude_hooks/connection_pool.py +72 -26
- claude_mpm/hooks/claude_hooks/event_handlers.py +99 -154
- claude_mpm/hooks/claude_hooks/hook_handler.py +110 -720
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +104 -77
- claude_mpm/hooks/claude_hooks/hook_handler_original.py +1040 -0
- claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +347 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +2 -4
- claude_mpm/hooks/claude_hooks/response_tracking.py +15 -11
- claude_mpm/hooks/claude_hooks/services/__init__.py +13 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +190 -0
- claude_mpm/hooks/claude_hooks/services/duplicate_detector.py +106 -0
- claude_mpm/hooks/claude_hooks/services/state_manager.py +282 -0
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +374 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +12 -18
- claude_mpm/hooks/memory_integration_hook.py +5 -5
- claude_mpm/hooks/tool_call_interceptor.py +1 -1
- claude_mpm/hooks/validation_hooks.py +4 -4
- claude_mpm/init.py +4 -9
- claude_mpm/models/__init__.py +2 -2
- claude_mpm/models/agent_session.py +11 -14
- claude_mpm/scripts/mcp_server.py +20 -11
- claude_mpm/scripts/mcp_wrapper.py +5 -5
- claude_mpm/scripts/mpm_doctor.py +321 -0
- claude_mpm/scripts/socketio_daemon.py +28 -25
- claude_mpm/scripts/socketio_daemon_hardened.py +298 -258
- claude_mpm/scripts/socketio_server_manager.py +116 -95
- claude_mpm/services/__init__.py +49 -49
- claude_mpm/services/agent_capabilities_service.py +12 -18
- claude_mpm/services/agents/__init__.py +22 -22
- claude_mpm/services/agents/agent_builder.py +140 -119
- claude_mpm/services/agents/deployment/__init__.py +3 -3
- claude_mpm/services/agents/deployment/agent_config_provider.py +9 -9
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +19 -20
- claude_mpm/services/agents/deployment/agent_definition_factory.py +1 -5
- claude_mpm/services/agents/deployment/agent_deployment.py +129 -511
- claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -8
- claude_mpm/services/agents/deployment/agent_environment_manager.py +2 -7
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +6 -10
- claude_mpm/services/agents/deployment/agent_format_converter.py +11 -15
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +2 -3
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -5
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +13 -19
- claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -1
- claude_mpm/services/agents/deployment/agent_template_builder.py +26 -35
- claude_mpm/services/agents/deployment/agent_validator.py +0 -1
- claude_mpm/services/agents/deployment/agent_version_manager.py +7 -9
- claude_mpm/services/agents/deployment/agent_versioning.py +3 -3
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +6 -7
- claude_mpm/services/agents/deployment/async_agent_deployment.py +51 -38
- claude_mpm/services/agents/deployment/base_agent_locator.py +132 -0
- claude_mpm/services/agents/deployment/config/__init__.py +1 -1
- claude_mpm/services/agents/deployment/config/deployment_config.py +7 -8
- claude_mpm/services/agents/deployment/deployment_results_manager.py +185 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +1 -1
- claude_mpm/services/agents/deployment/deployment_wrapper.py +18 -18
- claude_mpm/services/agents/deployment/facade/__init__.py +1 -1
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -3
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -4
- claude_mpm/services/agents/deployment/interface_adapter.py +5 -7
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +345 -276
- claude_mpm/services/agents/deployment/pipeline/__init__.py +2 -2
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +1 -1
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +6 -4
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +3 -3
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +2 -2
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +14 -13
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -1
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +1 -1
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +8 -9
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +1 -1
- claude_mpm/services/agents/deployment/processors/__init__.py +1 -1
- claude_mpm/services/agents/deployment/processors/agent_processor.py +20 -16
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +5 -12
- claude_mpm/services/agents/deployment/results/__init__.py +1 -1
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +1 -1
- claude_mpm/services/agents/deployment/single_agent_deployer.py +315 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +2 -2
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +1 -7
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +1 -4
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +2 -3
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +3 -7
- claude_mpm/services/agents/deployment/validation/__init__.py +1 -1
- claude_mpm/services/agents/deployment/validation/agent_validator.py +1 -1
- claude_mpm/services/agents/deployment/validation/template_validator.py +2 -2
- claude_mpm/services/agents/deployment/validation/validation_result.py +2 -6
- claude_mpm/services/agents/loading/__init__.py +1 -1
- claude_mpm/services/agents/loading/agent_profile_loader.py +6 -12
- claude_mpm/services/agents/loading/base_agent_manager.py +5 -5
- claude_mpm/services/agents/loading/framework_agent_loader.py +2 -4
- claude_mpm/services/agents/management/__init__.py +1 -1
- claude_mpm/services/agents/management/agent_capabilities_generator.py +1 -3
- claude_mpm/services/agents/management/agent_management_service.py +5 -9
- claude_mpm/services/agents/memory/__init__.py +4 -4
- claude_mpm/services/agents/memory/agent_memory_manager.py +157 -503
- claude_mpm/services/agents/memory/agent_persistence_service.py +0 -2
- claude_mpm/services/agents/memory/content_manager.py +44 -38
- claude_mpm/services/agents/memory/memory_categorization_service.py +165 -0
- claude_mpm/services/agents/memory/memory_file_service.py +103 -0
- claude_mpm/services/agents/memory/memory_format_service.py +201 -0
- claude_mpm/services/agents/memory/memory_limits_service.py +99 -0
- claude_mpm/services/agents/memory/template_generator.py +4 -6
- claude_mpm/services/agents/registry/__init__.py +11 -7
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +30 -27
- claude_mpm/services/agents/registry/modification_tracker.py +3 -6
- claude_mpm/services/async_session_logger.py +1 -2
- claude_mpm/services/claude_session_logger.py +1 -2
- claude_mpm/services/cli/__init__.py +18 -0
- claude_mpm/services/cli/agent_cleanup_service.py +407 -0
- claude_mpm/services/cli/agent_dependency_service.py +395 -0
- claude_mpm/services/cli/agent_listing_service.py +463 -0
- claude_mpm/services/cli/agent_output_formatter.py +605 -0
- claude_mpm/services/cli/agent_validation_service.py +589 -0
- claude_mpm/services/cli/dashboard_launcher.py +424 -0
- claude_mpm/services/cli/memory_crud_service.py +617 -0
- claude_mpm/services/cli/memory_output_formatter.py +604 -0
- claude_mpm/services/cli/session_manager.py +513 -0
- claude_mpm/services/cli/socketio_manager.py +498 -0
- claude_mpm/services/cli/startup_checker.py +370 -0
- claude_mpm/services/command_deployment_service.py +173 -0
- claude_mpm/services/command_handler_service.py +20 -22
- claude_mpm/services/core/__init__.py +25 -25
- claude_mpm/services/core/base.py +0 -5
- claude_mpm/services/core/cache_manager.py +311 -0
- claude_mpm/services/core/interfaces/__init__.py +32 -32
- claude_mpm/services/core/interfaces/agent.py +0 -21
- claude_mpm/services/core/interfaces/communication.py +0 -27
- claude_mpm/services/core/interfaces/infrastructure.py +0 -56
- claude_mpm/services/core/interfaces/service.py +0 -29
- claude_mpm/services/core/memory_manager.py +637 -0
- claude_mpm/services/core/path_resolver.py +498 -0
- claude_mpm/services/core/service_container.py +520 -0
- claude_mpm/services/core/service_interfaces.py +436 -0
- claude_mpm/services/diagnostics/__init__.py +1 -1
- claude_mpm/services/diagnostics/checks/__init__.py +6 -6
- claude_mpm/services/diagnostics/checks/agent_check.py +152 -97
- claude_mpm/services/diagnostics/checks/base_check.py +12 -16
- claude_mpm/services/diagnostics/checks/claude_desktop_check.py +84 -81
- claude_mpm/services/diagnostics/checks/common_issues_check.py +99 -91
- claude_mpm/services/diagnostics/checks/configuration_check.py +82 -77
- claude_mpm/services/diagnostics/checks/filesystem_check.py +67 -68
- claude_mpm/services/diagnostics/checks/installation_check.py +254 -94
- claude_mpm/services/diagnostics/checks/mcp_check.py +90 -88
- claude_mpm/services/diagnostics/checks/monitor_check.py +75 -76
- claude_mpm/services/diagnostics/checks/startup_log_check.py +67 -73
- claude_mpm/services/diagnostics/diagnostic_runner.py +67 -59
- claude_mpm/services/diagnostics/doctor_reporter.py +107 -70
- claude_mpm/services/diagnostics/models.py +21 -19
- claude_mpm/services/event_aggregator.py +10 -17
- claude_mpm/services/event_bus/__init__.py +1 -1
- claude_mpm/services/event_bus/config.py +54 -35
- claude_mpm/services/event_bus/event_bus.py +76 -71
- claude_mpm/services/event_bus/relay.py +74 -64
- claude_mpm/services/events/__init__.py +11 -11
- claude_mpm/services/events/consumers/__init__.py +3 -3
- claude_mpm/services/events/consumers/dead_letter.py +71 -63
- claude_mpm/services/events/consumers/logging.py +39 -37
- claude_mpm/services/events/consumers/metrics.py +56 -57
- claude_mpm/services/events/consumers/socketio.py +82 -81
- claude_mpm/services/events/core.py +110 -99
- claude_mpm/services/events/interfaces.py +56 -72
- claude_mpm/services/events/producers/__init__.py +1 -1
- claude_mpm/services/events/producers/hook.py +38 -38
- claude_mpm/services/events/producers/system.py +46 -44
- claude_mpm/services/exceptions.py +81 -80
- claude_mpm/services/framework_claude_md_generator/__init__.py +2 -4
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +3 -5
- claude_mpm/services/framework_claude_md_generator/content_validator.py +1 -1
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +4 -4
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -1
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -2
- claude_mpm/services/framework_claude_md_generator/version_manager.py +4 -5
- claude_mpm/services/hook_service.py +6 -9
- claude_mpm/services/infrastructure/__init__.py +1 -1
- claude_mpm/services/infrastructure/context_preservation.py +8 -12
- claude_mpm/services/infrastructure/monitoring.py +21 -23
- claude_mpm/services/mcp_gateway/__init__.py +37 -37
- claude_mpm/services/mcp_gateway/auto_configure.py +95 -103
- claude_mpm/services/mcp_gateway/config/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/config/config_loader.py +23 -25
- claude_mpm/services/mcp_gateway/config/config_schema.py +5 -5
- claude_mpm/services/mcp_gateway/config/configuration.py +9 -6
- claude_mpm/services/mcp_gateway/core/__init__.py +10 -10
- claude_mpm/services/mcp_gateway/core/base.py +0 -3
- claude_mpm/services/mcp_gateway/core/interfaces.py +1 -38
- claude_mpm/services/mcp_gateway/core/process_pool.py +99 -93
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +65 -62
- claude_mpm/services/mcp_gateway/core/startup_verification.py +75 -74
- claude_mpm/services/mcp_gateway/main.py +2 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +5 -8
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +1 -1
- claude_mpm/services/mcp_gateway/server/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +12 -19
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +4 -3
- claude_mpm/services/mcp_gateway/server/stdio_server.py +79 -71
- claude_mpm/services/mcp_gateway/tools/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +5 -6
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +13 -22
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +79 -78
- claude_mpm/services/mcp_gateway/tools/hello_world.py +12 -14
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +42 -49
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +51 -55
- claude_mpm/services/memory/__init__.py +3 -3
- claude_mpm/services/memory/builder.py +3 -6
- claude_mpm/services/memory/cache/__init__.py +1 -1
- claude_mpm/services/memory/cache/shared_prompt_cache.py +3 -5
- claude_mpm/services/memory/cache/simple_cache.py +1 -1
- claude_mpm/services/memory/indexed_memory.py +5 -7
- claude_mpm/services/memory/optimizer.py +7 -10
- claude_mpm/services/memory/router.py +8 -9
- claude_mpm/services/memory_hook_service.py +48 -34
- claude_mpm/services/monitor_build_service.py +77 -73
- claude_mpm/services/port_manager.py +130 -108
- claude_mpm/services/project/analyzer.py +12 -10
- claude_mpm/services/project/registry.py +11 -11
- claude_mpm/services/recovery_manager.py +10 -19
- claude_mpm/services/response_tracker.py +0 -1
- claude_mpm/services/runner_configuration_service.py +19 -20
- claude_mpm/services/session_management_service.py +7 -11
- claude_mpm/services/shared/__init__.py +1 -1
- claude_mpm/services/shared/async_service_base.py +58 -50
- claude_mpm/services/shared/config_service_base.py +73 -67
- claude_mpm/services/shared/lifecycle_service_base.py +82 -78
- claude_mpm/services/shared/manager_base.py +94 -82
- claude_mpm/services/shared/service_factory.py +96 -98
- claude_mpm/services/socketio/__init__.py +3 -3
- claude_mpm/services/socketio/client_proxy.py +5 -5
- claude_mpm/services/socketio/event_normalizer.py +199 -181
- claude_mpm/services/socketio/handlers/__init__.py +3 -3
- claude_mpm/services/socketio/handlers/base.py +5 -4
- claude_mpm/services/socketio/handlers/connection.py +163 -136
- claude_mpm/services/socketio/handlers/file.py +13 -14
- claude_mpm/services/socketio/handlers/git.py +12 -7
- claude_mpm/services/socketio/handlers/hook.py +49 -44
- claude_mpm/services/socketio/handlers/memory.py +0 -1
- claude_mpm/services/socketio/handlers/project.py +0 -1
- claude_mpm/services/socketio/handlers/registry.py +37 -19
- claude_mpm/services/socketio/migration_utils.py +98 -84
- claude_mpm/services/socketio/server/__init__.py +1 -1
- claude_mpm/services/socketio/server/broadcaster.py +81 -87
- claude_mpm/services/socketio/server/core.py +65 -54
- claude_mpm/services/socketio/server/eventbus_integration.py +95 -56
- claude_mpm/services/socketio/server/main.py +64 -38
- claude_mpm/services/socketio_client_manager.py +10 -12
- claude_mpm/services/subprocess_launcher_service.py +4 -7
- claude_mpm/services/system_instructions_service.py +13 -14
- claude_mpm/services/ticket_manager.py +2 -2
- claude_mpm/services/utility_service.py +5 -13
- claude_mpm/services/version_control/__init__.py +16 -16
- claude_mpm/services/version_control/branch_strategy.py +5 -8
- claude_mpm/services/version_control/conflict_resolution.py +9 -23
- claude_mpm/services/version_control/git_operations.py +5 -7
- claude_mpm/services/version_control/semantic_versioning.py +16 -17
- claude_mpm/services/version_control/version_parser.py +13 -18
- claude_mpm/services/version_service.py +10 -11
- claude_mpm/storage/__init__.py +1 -1
- claude_mpm/storage/state_storage.py +22 -28
- claude_mpm/utils/__init__.py +6 -6
- claude_mpm/utils/agent_dependency_loader.py +47 -33
- claude_mpm/utils/config_manager.py +11 -14
- claude_mpm/utils/dependency_cache.py +1 -1
- claude_mpm/utils/dependency_manager.py +13 -17
- claude_mpm/utils/dependency_strategies.py +8 -10
- claude_mpm/utils/environment_context.py +3 -9
- claude_mpm/utils/error_handler.py +3 -13
- claude_mpm/utils/file_utils.py +1 -1
- claude_mpm/utils/path_operations.py +8 -12
- claude_mpm/utils/robust_installer.py +110 -33
- claude_mpm/utils/subprocess_utils.py +5 -6
- claude_mpm/validation/agent_validator.py +3 -6
- claude_mpm/validation/frontmatter_validator.py +1 -1
- {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/METADATA +1 -1
- claude_mpm-4.1.3.dist-info/RECORD +528 -0
- claude_mpm/cli/commands/run_config_checker.py +0 -160
- claude_mpm-4.1.1.dist-info/RECORD +0 -494
- {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/top_level.txt +0 -0
claude_mpm/cli/__init__.py
CHANGED
|
@@ -21,8 +21,8 @@ from ..constants import CLICommands, LogLevel
|
|
|
21
21
|
from .commands import ( # run_guarded_session is imported lazily to avoid loading experimental code
|
|
22
22
|
aggregate_command,
|
|
23
23
|
cleanup_memory,
|
|
24
|
-
manage_agents,
|
|
25
24
|
manage_agent_manager,
|
|
25
|
+
manage_agents,
|
|
26
26
|
manage_config,
|
|
27
27
|
manage_mcp,
|
|
28
28
|
manage_memory,
|
|
@@ -40,17 +40,16 @@ from .utils import ensure_directories, setup_logging
|
|
|
40
40
|
package_version_file = Path(__file__).parent.parent / "VERSION"
|
|
41
41
|
if package_version_file.exists():
|
|
42
42
|
__version__ = package_version_file.read_text().strip()
|
|
43
|
+
# Use centralized path management for VERSION file
|
|
44
|
+
elif paths.version_file.exists():
|
|
45
|
+
__version__ = paths.version_file.read_text().strip()
|
|
43
46
|
else:
|
|
44
|
-
#
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
-
from .. import __version__
|
|
51
|
-
except ImportError:
|
|
52
|
-
# Default version if all else fails
|
|
53
|
-
__version__ = "0.0.0"
|
|
47
|
+
# Try to import from package as fallback
|
|
48
|
+
try:
|
|
49
|
+
from .. import __version__
|
|
50
|
+
except ImportError:
|
|
51
|
+
# Default version if all else fails
|
|
52
|
+
__version__ = "0.0.0"
|
|
54
53
|
|
|
55
54
|
|
|
56
55
|
def main(argv: Optional[list] = None):
|
|
@@ -75,8 +74,9 @@ def main(argv: Optional[list] = None):
|
|
|
75
74
|
"""
|
|
76
75
|
# Disable telemetry by default (set early in case any imported modules check it)
|
|
77
76
|
import os
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
|
|
78
|
+
os.environ.setdefault("DISABLE_TELEMETRY", "1")
|
|
79
|
+
|
|
80
80
|
# Ensure directories are initialized on first run
|
|
81
81
|
ensure_directories()
|
|
82
82
|
|
|
@@ -88,15 +88,16 @@ def main(argv: Optional[list] = None):
|
|
|
88
88
|
parser = create_parser(version=__version__)
|
|
89
89
|
processed_argv = preprocess_args(argv)
|
|
90
90
|
args = parser.parse_args(processed_argv)
|
|
91
|
-
|
|
91
|
+
|
|
92
92
|
# Skip auto-configuration for certain commands
|
|
93
93
|
skip_auto_config_commands = ["--version", "-v", "--help", "-h"]
|
|
94
94
|
# sys is already imported at module level (line 16), use it directly
|
|
95
|
-
should_skip_auto_config = (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
should_skip_auto_config = any(
|
|
96
|
+
cmd in (processed_argv or sys.argv[1:]) for cmd in skip_auto_config_commands
|
|
97
|
+
) or (
|
|
98
|
+
hasattr(args, "command") and args.command in ["info", "doctor", "config", "mcp"]
|
|
99
|
+
) # Info, diagnostic, and MCP commands
|
|
100
|
+
|
|
100
101
|
if not should_skip_auto_config:
|
|
101
102
|
# Check for MCP auto-configuration (pipx installations)
|
|
102
103
|
_check_mcp_auto_configuration()
|
|
@@ -112,8 +113,8 @@ def main(argv: Optional[list] = None):
|
|
|
112
113
|
):
|
|
113
114
|
# For MCP server, configure minimal stderr-only logging
|
|
114
115
|
import logging
|
|
115
|
-
# sys is already imported at module level
|
|
116
116
|
|
|
117
|
+
# sys is already imported at module level
|
|
117
118
|
# Only log errors to stderr for MCP server
|
|
118
119
|
if not getattr(args, "test", False) and not getattr(
|
|
119
120
|
args, "instructions", False
|
|
@@ -148,8 +149,7 @@ def main(argv: Optional[list] = None):
|
|
|
148
149
|
|
|
149
150
|
# Execute command
|
|
150
151
|
try:
|
|
151
|
-
|
|
152
|
-
return exit_code
|
|
152
|
+
return _execute_command(args.command, args)
|
|
153
153
|
except KeyboardInterrupt:
|
|
154
154
|
logger.info("Session interrupted by user")
|
|
155
155
|
return 0
|
|
@@ -190,18 +190,18 @@ def _initialize_project_registry():
|
|
|
190
190
|
def _check_mcp_auto_configuration():
|
|
191
191
|
"""
|
|
192
192
|
Check and potentially auto-configure MCP for pipx installations.
|
|
193
|
-
|
|
193
|
+
|
|
194
194
|
WHY: Users installing via pipx should have MCP work out-of-the-box with
|
|
195
195
|
minimal friction. This function offers one-time auto-configuration with
|
|
196
196
|
user consent.
|
|
197
|
-
|
|
197
|
+
|
|
198
198
|
DESIGN DECISION: This is blocking but quick - it only runs once and has
|
|
199
199
|
a 10-second timeout. We want to catch users on first run for the best
|
|
200
200
|
experience.
|
|
201
201
|
"""
|
|
202
202
|
try:
|
|
203
203
|
from ..services.mcp_gateway.auto_configure import check_and_configure_mcp
|
|
204
|
-
|
|
204
|
+
|
|
205
205
|
# This function handles all the logic:
|
|
206
206
|
# - Checks if already configured
|
|
207
207
|
# - Checks if pipx installation
|
|
@@ -209,10 +209,11 @@ def _check_mcp_auto_configuration():
|
|
|
209
209
|
# - Prompts user if needed
|
|
210
210
|
# - Configures if user agrees
|
|
211
211
|
check_and_configure_mcp()
|
|
212
|
-
|
|
212
|
+
|
|
213
213
|
except Exception as e:
|
|
214
214
|
# Non-critical - log but don't fail
|
|
215
215
|
from ..core.logger import get_logger
|
|
216
|
+
|
|
216
217
|
logger = get_logger("cli")
|
|
217
218
|
logger.debug(f"MCP auto-configuration check failed: {e}")
|
|
218
219
|
|
|
@@ -231,18 +232,19 @@ def _verify_mcp_gateway_startup():
|
|
|
231
232
|
try:
|
|
232
233
|
import asyncio
|
|
233
234
|
import time
|
|
235
|
+
|
|
236
|
+
from ..core.logger import get_logger
|
|
237
|
+
from ..services.mcp_gateway.core.process_pool import pre_warm_mcp_servers
|
|
234
238
|
from ..services.mcp_gateway.core.startup_verification import (
|
|
235
|
-
verify_mcp_gateway_on_startup,
|
|
236
239
|
is_mcp_gateway_configured,
|
|
240
|
+
verify_mcp_gateway_on_startup,
|
|
237
241
|
)
|
|
238
|
-
|
|
239
|
-
from ..core.logger import get_logger
|
|
240
|
-
|
|
242
|
+
|
|
241
243
|
logger = get_logger("mcp_prewarm")
|
|
242
244
|
|
|
243
245
|
# Quick check first - if already configured, skip detailed verification
|
|
244
246
|
gateway_configured = is_mcp_gateway_configured()
|
|
245
|
-
|
|
247
|
+
|
|
246
248
|
# Pre-warm MCP servers regardless of gateway config
|
|
247
249
|
# This eliminates the 11.9s delay on first agent invocation
|
|
248
250
|
def run_pre_warming():
|
|
@@ -250,29 +252,30 @@ def _verify_mcp_gateway_startup():
|
|
|
250
252
|
start_time = time.time()
|
|
251
253
|
loop = asyncio.new_event_loop()
|
|
252
254
|
asyncio.set_event_loop(loop)
|
|
253
|
-
|
|
255
|
+
|
|
254
256
|
# Pre-warm MCP servers (especially vector search)
|
|
255
257
|
logger.info("Pre-warming MCP servers to eliminate startup delay...")
|
|
256
258
|
loop.run_until_complete(pre_warm_mcp_servers())
|
|
257
|
-
|
|
259
|
+
|
|
258
260
|
pre_warm_time = time.time() - start_time
|
|
259
261
|
if pre_warm_time > 1.0:
|
|
260
262
|
logger.info(f"MCP servers pre-warmed in {pre_warm_time:.2f}s")
|
|
261
|
-
|
|
263
|
+
|
|
262
264
|
# Also run gateway verification if needed
|
|
263
265
|
if not gateway_configured:
|
|
264
|
-
|
|
265
|
-
|
|
266
|
+
loop.run_until_complete(verify_mcp_gateway_on_startup())
|
|
267
|
+
|
|
266
268
|
loop.close()
|
|
267
269
|
except Exception as e:
|
|
268
270
|
# Non-blocking - log but don't fail
|
|
269
271
|
logger.debug(f"MCP pre-warming error (non-critical): {e}")
|
|
270
|
-
|
|
272
|
+
|
|
271
273
|
# Run pre-warming in background thread
|
|
272
274
|
import threading
|
|
275
|
+
|
|
273
276
|
pre_warm_thread = threading.Thread(target=run_pre_warming, daemon=True)
|
|
274
277
|
pre_warm_thread.start()
|
|
275
|
-
|
|
278
|
+
|
|
276
279
|
return
|
|
277
280
|
|
|
278
281
|
# Run detailed verification in background if not configured
|
|
@@ -287,6 +290,7 @@ def _verify_mcp_gateway_startup():
|
|
|
287
290
|
|
|
288
291
|
# Log results but don't block
|
|
289
292
|
from ..core.logger import get_logger
|
|
293
|
+
|
|
290
294
|
logger = get_logger("cli")
|
|
291
295
|
|
|
292
296
|
if results.get("gateway_configured"):
|
|
@@ -296,11 +300,13 @@ def _verify_mcp_gateway_startup():
|
|
|
296
300
|
|
|
297
301
|
except Exception as e:
|
|
298
302
|
from ..core.logger import get_logger
|
|
303
|
+
|
|
299
304
|
logger = get_logger("cli")
|
|
300
305
|
logger.debug(f"MCP Gateway verification failed: {e}")
|
|
301
306
|
|
|
302
307
|
# Run in background thread to avoid blocking startup
|
|
303
308
|
import threading
|
|
309
|
+
|
|
304
310
|
verification_thread = threading.Thread(target=run_verification, daemon=True)
|
|
305
311
|
verification_thread.start()
|
|
306
312
|
|
|
@@ -331,15 +337,15 @@ def _ensure_run_attributes(args):
|
|
|
331
337
|
args.input = getattr(args, "input", None)
|
|
332
338
|
args.non_interactive = getattr(args, "non_interactive", False)
|
|
333
339
|
args.no_native_agents = getattr(args, "no_native_agents", False)
|
|
334
|
-
|
|
340
|
+
|
|
335
341
|
# Handle claude_args - if --resume flag is set, add it to claude_args
|
|
336
342
|
claude_args = getattr(args, "claude_args", [])
|
|
337
343
|
if getattr(args, "resume", False):
|
|
338
344
|
# Add --resume to claude_args if not already present
|
|
339
345
|
if "--resume" not in claude_args:
|
|
340
|
-
claude_args = ["--resume"
|
|
346
|
+
claude_args = ["--resume", *claude_args]
|
|
341
347
|
args.claude_args = claude_args
|
|
342
|
-
|
|
348
|
+
|
|
343
349
|
args.launch_method = getattr(args, "launch_method", "exec")
|
|
344
350
|
args.websocket = getattr(args, "websocket", False)
|
|
345
351
|
args.websocket_port = getattr(args, "websocket_port", 8765)
|
|
@@ -403,11 +409,10 @@ def _execute_command(command: str, args) -> int:
|
|
|
403
409
|
result = command_map[command](args)
|
|
404
410
|
# Commands may return None (success) or an exit code
|
|
405
411
|
return result if result is not None else 0
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
return 1
|
|
412
|
+
# Unknown command - this shouldn't happen with argparse
|
|
413
|
+
# but we handle it for completeness
|
|
414
|
+
print(f"Unknown command: {command}")
|
|
415
|
+
return 1
|
|
411
416
|
|
|
412
417
|
|
|
413
418
|
# For backward compatibility - export main
|
claude_mpm/cli/__main__.py
CHANGED
|
@@ -5,8 +5,8 @@ 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 .agents import manage_agents
|
|
9
8
|
from .agent_manager import manage_agent_manager
|
|
9
|
+
from .agents import manage_agents
|
|
10
10
|
from .aggregate import aggregate_command
|
|
11
11
|
from .cleanup import cleanup_memory
|
|
12
12
|
from .config import manage_config
|
|
@@ -16,23 +16,21 @@ from .mcp import manage_mcp
|
|
|
16
16
|
from .memory import manage_memory
|
|
17
17
|
from .monitor import manage_monitor
|
|
18
18
|
from .run import run_session
|
|
19
|
-
|
|
20
|
-
|
|
21
19
|
from .tickets import list_tickets, manage_tickets
|
|
22
20
|
|
|
23
21
|
__all__ = [
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
"manage_tickets",
|
|
22
|
+
"aggregate_command",
|
|
23
|
+
"cleanup_memory",
|
|
27
24
|
"list_tickets",
|
|
28
|
-
"show_info",
|
|
29
|
-
"manage_agents",
|
|
30
25
|
"manage_agent_manager",
|
|
31
|
-
"
|
|
32
|
-
"manage_monitor",
|
|
26
|
+
"manage_agents",
|
|
33
27
|
"manage_config",
|
|
34
|
-
"aggregate_command",
|
|
35
|
-
"cleanup_memory",
|
|
36
28
|
"manage_mcp",
|
|
29
|
+
"manage_memory",
|
|
30
|
+
"manage_monitor",
|
|
31
|
+
# 'run_guarded_session', # Excluded from default exports (experimental)
|
|
32
|
+
"manage_tickets",
|
|
37
33
|
"run_doctor",
|
|
34
|
+
"run_session",
|
|
35
|
+
"show_info",
|
|
38
36
|
]
|