claude-mpm 4.1.0__py3-none-any.whl → 4.1.2__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/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 +133 -58
- claude_mpm/agents/templates/web_ui.json +3 -3
- 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 +271 -268
- 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 +192 -141
- claude_mpm/cli/commands/monitor.py +117 -88
- claude_mpm/cli/commands/run.py +120 -84
- claude_mpm/cli/commands/run_config_checker.py +4 -5
- 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 +204 -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 +20 -23
- 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 +581 -280
- 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 -15
- 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 +93 -38
- claude_mpm/hooks/claude_hooks/hook_handler.py +130 -76
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +104 -77
- 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/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 +136 -106
- 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/config/__init__.py +1 -1
- claude_mpm/services/agents/deployment/config/deployment_config.py +7 -8
- 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/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 +280 -160
- 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/template_generator.py +4 -6
- claude_mpm/services/agents/registry/__init__.py +10 -6
- 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/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/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/diagnostics/__init__.py +1 -1
- claude_mpm/services/diagnostics/checks/__init__.py +6 -6
- claude_mpm/services/diagnostics/checks/agent_check.py +89 -80
- 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.0.dist-info → claude_mpm-4.1.2.dist-info}/METADATA +1 -1
- claude_mpm-4.1.2.dist-info/RECORD +498 -0
- claude_mpm-4.1.0.dist-info/RECORD +0 -494
- {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/top_level.txt +0 -0
|
@@ -18,7 +18,7 @@ Usage:
|
|
|
18
18
|
cache_size = ConfigConstants.get_cache_setting('max_size_mb')
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
|
-
from typing import Any,
|
|
21
|
+
from typing import Any, Optional
|
|
22
22
|
|
|
23
23
|
from .unified_config import ConfigurationService
|
|
24
24
|
|
|
@@ -79,6 +79,11 @@ class ConfigConstants:
|
|
|
79
79
|
"max_file_size_mb": 10,
|
|
80
80
|
"max_memory_usage_mb": 1024,
|
|
81
81
|
},
|
|
82
|
+
# Logging configuration
|
|
83
|
+
"logging": {
|
|
84
|
+
"startup_logs_retention_count": 10,
|
|
85
|
+
"mpm_logs_retention_count": 10,
|
|
86
|
+
},
|
|
82
87
|
}
|
|
83
88
|
|
|
84
89
|
@classmethod
|
|
@@ -109,18 +114,17 @@ class ConfigConstants:
|
|
|
109
114
|
|
|
110
115
|
if timeout_type == "hook_execution":
|
|
111
116
|
return config.performance.hook_timeout_seconds
|
|
112
|
-
|
|
117
|
+
if timeout_type == "session_default":
|
|
113
118
|
return config.performance.session_timeout_seconds
|
|
114
|
-
|
|
119
|
+
if timeout_type == "session_extended":
|
|
115
120
|
return config.sessions.session_timeout_minutes * 60
|
|
116
|
-
|
|
121
|
+
if timeout_type == "agent_loading":
|
|
117
122
|
return config.performance.agent_load_timeout_seconds
|
|
118
|
-
|
|
123
|
+
if timeout_type == "startup":
|
|
119
124
|
return config.performance.startup_timeout
|
|
120
|
-
|
|
125
|
+
if timeout_type == "graceful_shutdown":
|
|
121
126
|
return config.performance.graceful_shutdown_timeout
|
|
122
|
-
|
|
123
|
-
return cls.DEFAULT_VALUES["timeouts"].get(timeout_type, 30)
|
|
127
|
+
return cls.DEFAULT_VALUES["timeouts"].get(timeout_type, 30)
|
|
124
128
|
except Exception:
|
|
125
129
|
return cls.DEFAULT_VALUES["timeouts"].get(timeout_type, 30)
|
|
126
130
|
|
|
@@ -140,12 +144,11 @@ class ConfigConstants:
|
|
|
140
144
|
|
|
141
145
|
if port_type == "socketio_default":
|
|
142
146
|
return config.network.socketio_port
|
|
143
|
-
|
|
147
|
+
if port_type == "socketio_range_start":
|
|
144
148
|
return config.network.socketio_port_range[0]
|
|
145
|
-
|
|
149
|
+
if port_type == "socketio_range_end":
|
|
146
150
|
return config.network.socketio_port_range[1]
|
|
147
|
-
|
|
148
|
-
return cls.DEFAULT_VALUES["ports"].get(port_type, 8765)
|
|
151
|
+
return cls.DEFAULT_VALUES["ports"].get(port_type, 8765)
|
|
149
152
|
except Exception:
|
|
150
153
|
return cls.DEFAULT_VALUES["ports"].get(port_type, 8765)
|
|
151
154
|
|
|
@@ -165,15 +168,38 @@ class ConfigConstants:
|
|
|
165
168
|
|
|
166
169
|
if setting_name == "max_size_mb":
|
|
167
170
|
return config.performance.cache_max_size_mb
|
|
168
|
-
|
|
171
|
+
if setting_name == "max_entries":
|
|
169
172
|
return config.performance.cache_max_entries
|
|
170
|
-
|
|
173
|
+
if setting_name == "default_ttl_seconds":
|
|
171
174
|
return config.performance.cache_default_ttl_seconds
|
|
172
|
-
|
|
173
|
-
return cls.DEFAULT_VALUES["cache"].get(setting_name)
|
|
175
|
+
return cls.DEFAULT_VALUES["cache"].get(setting_name)
|
|
174
176
|
except Exception:
|
|
175
177
|
return cls.DEFAULT_VALUES["cache"].get(setting_name)
|
|
176
178
|
|
|
179
|
+
@classmethod
|
|
180
|
+
def get_logging_setting(cls, setting_name: str) -> Any:
|
|
181
|
+
"""
|
|
182
|
+
Get logging setting by name.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
setting_name: Name of logging setting
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
Logging setting value
|
|
189
|
+
"""
|
|
190
|
+
try:
|
|
191
|
+
# For now, just return from DEFAULT_VALUES
|
|
192
|
+
# Can be extended to read from unified config later
|
|
193
|
+
return cls.DEFAULT_VALUES["logging"].get(setting_name)
|
|
194
|
+
except Exception:
|
|
195
|
+
# Fallback to default values
|
|
196
|
+
if setting_name in {
|
|
197
|
+
"startup_logs_retention_count",
|
|
198
|
+
"mpm_logs_retention_count",
|
|
199
|
+
}:
|
|
200
|
+
return 10
|
|
201
|
+
return None
|
|
202
|
+
|
|
177
203
|
@classmethod
|
|
178
204
|
def get_session_setting(cls, setting_name: str) -> Any:
|
|
179
205
|
"""
|
|
@@ -190,12 +216,11 @@ class ConfigConstants:
|
|
|
190
216
|
|
|
191
217
|
if setting_name == "max_age_minutes":
|
|
192
218
|
return config.sessions.max_age_minutes
|
|
193
|
-
|
|
219
|
+
if setting_name == "cleanup_max_age_hours":
|
|
194
220
|
return config.sessions.cleanup_max_age_hours
|
|
195
|
-
|
|
221
|
+
if setting_name == "timeout_minutes":
|
|
196
222
|
return config.sessions.session_timeout_minutes
|
|
197
|
-
|
|
198
|
-
return cls.DEFAULT_VALUES["sessions"].get(setting_name)
|
|
223
|
+
return cls.DEFAULT_VALUES["sessions"].get(setting_name)
|
|
199
224
|
except Exception:
|
|
200
225
|
return cls.DEFAULT_VALUES["sessions"].get(setting_name)
|
|
201
226
|
|
|
@@ -215,10 +240,9 @@ class ConfigConstants:
|
|
|
215
240
|
|
|
216
241
|
if setting_name == "max_restarts":
|
|
217
242
|
return config.performance.max_restarts
|
|
218
|
-
|
|
243
|
+
if setting_name == "max_recovery_attempts":
|
|
219
244
|
return config.performance.max_recovery_attempts
|
|
220
|
-
|
|
221
|
-
return cls.DEFAULT_VALUES["recovery"].get(setting_name, 3)
|
|
245
|
+
return cls.DEFAULT_VALUES["recovery"].get(setting_name, 3)
|
|
222
246
|
except Exception:
|
|
223
247
|
return cls.DEFAULT_VALUES["recovery"].get(setting_name, 3)
|
|
224
248
|
|
|
@@ -238,12 +262,11 @@ class ConfigConstants:
|
|
|
238
262
|
|
|
239
263
|
if interval_type == "health_check":
|
|
240
264
|
return config.performance.health_check_interval_seconds
|
|
241
|
-
|
|
265
|
+
if interval_type == "polling":
|
|
242
266
|
return config.performance.polling_interval_seconds
|
|
243
|
-
|
|
267
|
+
if interval_type == "batch_window_ms":
|
|
244
268
|
return config.performance.batch_window_ms / 1000.0
|
|
245
|
-
|
|
246
|
-
return cls.DEFAULT_VALUES["intervals"].get(interval_type, 1.0)
|
|
269
|
+
return cls.DEFAULT_VALUES["intervals"].get(interval_type, 1.0)
|
|
247
270
|
except Exception:
|
|
248
271
|
return cls.DEFAULT_VALUES["intervals"].get(interval_type, 1.0)
|
|
249
272
|
|
|
@@ -263,10 +286,9 @@ class ConfigConstants:
|
|
|
263
286
|
|
|
264
287
|
if limit_type == "max_file_size_mb":
|
|
265
288
|
return config.security.max_file_size_mb
|
|
266
|
-
|
|
289
|
+
if limit_type == "max_memory_usage_mb":
|
|
267
290
|
return config.performance.max_memory_usage_mb
|
|
268
|
-
|
|
269
|
-
return cls.DEFAULT_VALUES["limits"].get(limit_type, 100)
|
|
291
|
+
return cls.DEFAULT_VALUES["limits"].get(limit_type, 100)
|
|
270
292
|
except Exception:
|
|
271
293
|
return cls.DEFAULT_VALUES["limits"].get(limit_type, 100)
|
|
272
294
|
|
claude_mpm/core/constants.py
CHANGED
claude_mpm/core/container.py
CHANGED
|
@@ -13,7 +13,6 @@ that supports:
|
|
|
13
13
|
|
|
14
14
|
import inspect
|
|
15
15
|
import threading
|
|
16
|
-
from abc import ABC
|
|
17
16
|
from enum import Enum
|
|
18
17
|
from typing import Any, Callable, Dict, List, Optional, Set, Type, TypeVar, Union
|
|
19
18
|
|
|
@@ -76,22 +75,17 @@ class ServiceRegistration:
|
|
|
76
75
|
# Get constructor parameters
|
|
77
76
|
if inspect.isclass(self.implementation):
|
|
78
77
|
return container.create_instance(self.implementation, self.dependencies)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
return self.implementation
|
|
78
|
+
# It's already an instance or callable
|
|
79
|
+
return self.implementation
|
|
82
80
|
|
|
83
81
|
|
|
84
82
|
class CircularDependencyError(Exception):
|
|
85
83
|
"""Raised when circular dependencies are detected."""
|
|
86
84
|
|
|
87
|
-
pass
|
|
88
|
-
|
|
89
85
|
|
|
90
86
|
class ServiceNotFoundError(Exception):
|
|
91
87
|
"""Raised when a requested service is not registered."""
|
|
92
88
|
|
|
93
|
-
pass
|
|
94
|
-
|
|
95
89
|
|
|
96
90
|
class ServiceScope:
|
|
97
91
|
"""
|
|
@@ -337,17 +331,16 @@ class DIContainer(IServiceContainer):
|
|
|
337
331
|
if not hasattr(self, "_named_singletons"):
|
|
338
332
|
self._named_singletons = {}
|
|
339
333
|
self._named_singletons[named_key] = instance
|
|
334
|
+
# Normal registration without name
|
|
335
|
+
elif instance is not None:
|
|
336
|
+
self._register_internal(interface, instance=instance)
|
|
337
|
+
elif implementation is not None and not inspect.isclass(implementation):
|
|
338
|
+
# It's an instance passed as implementation (backward compatibility)
|
|
339
|
+
self._register_internal(interface, instance=implementation)
|
|
340
340
|
else:
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
elif implementation is not None and not inspect.isclass(implementation):
|
|
345
|
-
# It's an instance passed as implementation (backward compatibility)
|
|
346
|
-
self._register_internal(interface, instance=implementation)
|
|
347
|
-
else:
|
|
348
|
-
self._register_internal(
|
|
349
|
-
interface, implementation, lifetime=ServiceLifetime.SINGLETON
|
|
350
|
-
)
|
|
341
|
+
self._register_internal(
|
|
342
|
+
interface, implementation, lifetime=ServiceLifetime.SINGLETON
|
|
343
|
+
)
|
|
351
344
|
|
|
352
345
|
# Handle disposal handler
|
|
353
346
|
if dispose_handler:
|
|
@@ -485,12 +478,11 @@ class DIContainer(IServiceContainer):
|
|
|
485
478
|
registration = self._named_registrations[name]
|
|
486
479
|
if registration.instance is not None:
|
|
487
480
|
return registration.instance
|
|
488
|
-
|
|
481
|
+
if registration.factory:
|
|
489
482
|
return registration.factory(self)
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
)
|
|
483
|
+
return self.create_instance(
|
|
484
|
+
registration.implementation, registration.dependencies
|
|
485
|
+
)
|
|
494
486
|
|
|
495
487
|
return self._resolve_internal(interface)
|
|
496
488
|
|
|
@@ -669,8 +661,7 @@ class DIContainer(IServiceContainer):
|
|
|
669
661
|
raise CircularDependencyError(
|
|
670
662
|
f"Circular dependency detected: {cycle}"
|
|
671
663
|
)
|
|
672
|
-
|
|
673
|
-
kwargs[param_name] = self.resolve(param_type)
|
|
664
|
+
kwargs[param_name] = self.resolve(param_type)
|
|
674
665
|
elif param.default != param.empty:
|
|
675
666
|
# Use default value
|
|
676
667
|
kwargs[param_name] = param.default
|
|
@@ -813,7 +804,7 @@ class DIContainer(IServiceContainer):
|
|
|
813
804
|
type_name = service_type.__name__.lower()
|
|
814
805
|
similar = []
|
|
815
806
|
|
|
816
|
-
for registered_type in self._registrations
|
|
807
|
+
for registered_type in self._registrations:
|
|
817
808
|
registered_name = registered_type.__name__
|
|
818
809
|
registered_lower = registered_name.lower()
|
|
819
810
|
|
|
@@ -845,7 +836,7 @@ class DIContainer(IServiceContainer):
|
|
|
845
836
|
name_lower = name.lower()
|
|
846
837
|
similar = []
|
|
847
838
|
|
|
848
|
-
for registered_name in self._named_registrations
|
|
839
|
+
for registered_name in self._named_registrations:
|
|
849
840
|
registered_lower = registered_name.lower()
|
|
850
841
|
|
|
851
842
|
# Check for substring match
|
claude_mpm/core/exceptions.py
CHANGED
|
@@ -24,7 +24,7 @@ Usage:
|
|
|
24
24
|
raise AgentDeploymentError("Failed to deploy agent to .claude/agents directory")
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
|
-
from typing import Any, Dict,
|
|
27
|
+
from typing import Any, Dict, Optional
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class MPMError(Exception):
|
|
@@ -429,7 +429,7 @@ class ProcessError(MPMError):
|
|
|
429
429
|
self.message = f"[Command: {context['command']}] {message}"
|
|
430
430
|
if "exit_code" in context:
|
|
431
431
|
self.message += f"\nExit code: {context['exit_code']}"
|
|
432
|
-
if
|
|
432
|
+
if context.get("stderr"):
|
|
433
433
|
stderr_preview = str(context["stderr"])[:200]
|
|
434
434
|
self.message += f"\nError output: {stderr_preview}"
|
|
435
435
|
if len(str(context["stderr"])) > 200:
|
claude_mpm/core/factories.py
CHANGED
|
@@ -7,14 +7,18 @@ Provides factory patterns for services that require complex initialization
|
|
|
7
7
|
or have multiple configuration options.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
+
import os
|
|
10
11
|
from abc import ABC, abstractmethod
|
|
11
|
-
from typing import Any, Dict, Optional,
|
|
12
|
+
from typing import TYPE_CHECKING, Any, Dict, Optional, TypeVar
|
|
12
13
|
|
|
13
14
|
from ..services import AgentDeploymentService
|
|
14
15
|
from .config import Config
|
|
15
16
|
from .container import DIContainer
|
|
16
17
|
from .logger import get_logger
|
|
17
18
|
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
from .unified_config import ConfigurationService
|
|
21
|
+
|
|
18
22
|
# Note: Orchestration functionality has been replaced by claude_runner
|
|
19
23
|
|
|
20
24
|
logger = get_logger(__name__)
|
|
@@ -28,7 +32,6 @@ class ServiceFactory(ABC):
|
|
|
28
32
|
@abstractmethod
|
|
29
33
|
def create(self, container: DIContainer, **kwargs) -> Any:
|
|
30
34
|
"""Create a service instance."""
|
|
31
|
-
pass
|
|
32
35
|
|
|
33
36
|
|
|
34
37
|
# OrchestratorFactoryWrapper has been removed - orchestration replaced by claude_runner
|
|
@@ -57,8 +60,6 @@ class AgentServiceFactory(ServiceFactory):
|
|
|
57
60
|
config = container.resolve(Config)
|
|
58
61
|
|
|
59
62
|
# Get directories from config if not provided
|
|
60
|
-
import os
|
|
61
|
-
|
|
62
63
|
if framework_dir is None:
|
|
63
64
|
framework_dir = Path(config.get("framework.dir", "framework"))
|
|
64
65
|
|
|
@@ -112,14 +113,13 @@ class SessionManagerFactory(ServiceFactory):
|
|
|
112
113
|
return AgentSessionManager(
|
|
113
114
|
session_dir=session_dir, max_sessions_per_agent=max_sessions
|
|
114
115
|
)
|
|
115
|
-
|
|
116
|
-
from ..core.session_manager import SessionManager
|
|
116
|
+
from ..core.session_manager import SessionManager
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
session_dir = kwargs.get("session_dir") or Path(
|
|
119
|
+
config.get("session.dir", ".claude-mpm/sessions")
|
|
120
|
+
)
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
return SessionManager(session_dir=session_dir)
|
|
123
123
|
|
|
124
124
|
|
|
125
125
|
class ConfigurationFactory(ServiceFactory):
|
|
@@ -148,8 +148,6 @@ class ConfigurationFactory(ServiceFactory):
|
|
|
148
148
|
config = Config(config_data or {}, config_path)
|
|
149
149
|
|
|
150
150
|
# Load environment variables
|
|
151
|
-
import os
|
|
152
|
-
|
|
153
151
|
for key, value in os.environ.items():
|
|
154
152
|
if key.startswith(env_prefix):
|
|
155
153
|
# Convert CLAUDE_MPM_FOO_BAR to foo.bar
|