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
|
@@ -95,7 +95,7 @@ class DeploymentManager:
|
|
|
95
95
|
|
|
96
96
|
# Check if file exists and compare versions
|
|
97
97
|
if target_file.exists() and not force:
|
|
98
|
-
with open(target_file
|
|
98
|
+
with open(target_file) as f:
|
|
99
99
|
existing_content = f.read()
|
|
100
100
|
existing_fw_ver = self.version_manager.parse_current_version(
|
|
101
101
|
existing_content
|
|
@@ -119,7 +119,7 @@ class DeploymentManager:
|
|
|
119
119
|
|
|
120
120
|
return True, f"Successfully deployed version {version_str}"
|
|
121
121
|
except Exception as e:
|
|
122
|
-
return False, f"Deployment failed: {
|
|
122
|
+
return False, f"Deployment failed: {e!s}"
|
|
123
123
|
|
|
124
124
|
def check_deployment_needed(self, parent_path: Path) -> Tuple[bool, str]:
|
|
125
125
|
"""
|
|
@@ -137,7 +137,7 @@ class DeploymentManager:
|
|
|
137
137
|
return True, f"{self.target_filename} does not exist"
|
|
138
138
|
|
|
139
139
|
try:
|
|
140
|
-
with open(target_file
|
|
140
|
+
with open(target_file) as f:
|
|
141
141
|
existing_content = f.read()
|
|
142
142
|
existing_fw_ver = self.version_manager.parse_current_version(
|
|
143
143
|
existing_content
|
|
@@ -151,7 +151,7 @@ class DeploymentManager:
|
|
|
151
151
|
|
|
152
152
|
return False, "Already up to date"
|
|
153
153
|
except Exception as e:
|
|
154
|
-
return True, f"Error checking existing file: {
|
|
154
|
+
return True, f"Error checking existing file: {e!s}"
|
|
155
155
|
|
|
156
156
|
def backup_existing(self, parent_path: Path) -> Optional[Path]:
|
|
157
157
|
"""
|
|
@@ -7,7 +7,7 @@ Handles version parsing, incrementing, and comparison operations.
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
import re
|
|
10
|
-
from typing import Optional
|
|
10
|
+
from typing import Optional
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class VersionManager:
|
|
@@ -38,7 +38,7 @@ class VersionManager:
|
|
|
38
38
|
version_path = package_path.parent / "framework" / "VERSION"
|
|
39
39
|
|
|
40
40
|
if version_path.exists():
|
|
41
|
-
with open(version_path
|
|
41
|
+
with open(version_path) as f:
|
|
42
42
|
version_content = f.read().strip()
|
|
43
43
|
# Framework VERSION file contains just the framework version number
|
|
44
44
|
try:
|
|
@@ -117,7 +117,6 @@ class VersionManager:
|
|
|
117
117
|
|
|
118
118
|
if v1 < v2:
|
|
119
119
|
return -1
|
|
120
|
-
|
|
120
|
+
if v1 > v2:
|
|
121
121
|
return 1
|
|
122
|
-
|
|
123
|
-
return 0
|
|
122
|
+
return 0
|
|
@@ -12,17 +12,15 @@ rather than a single list with type checking because:
|
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
14
|
import time
|
|
15
|
-
from datetime import datetime
|
|
16
15
|
from typing import Any, Dict, List, Optional
|
|
17
16
|
|
|
18
17
|
from claude_mpm.core.config import Config
|
|
19
18
|
from claude_mpm.core.interfaces import HookServiceInterface
|
|
20
|
-
from claude_mpm.core.logging_config import get_logger
|
|
19
|
+
from claude_mpm.core.logging_config import get_logger
|
|
21
20
|
from claude_mpm.hooks.base_hook import (
|
|
22
21
|
BaseHook,
|
|
23
22
|
HookContext,
|
|
24
23
|
HookResult,
|
|
25
|
-
HookType,
|
|
26
24
|
PostDelegationHook,
|
|
27
25
|
PreDelegationHook,
|
|
28
26
|
)
|
|
@@ -83,7 +81,7 @@ class HookService(HookServiceInterface):
|
|
|
83
81
|
)
|
|
84
82
|
return True
|
|
85
83
|
|
|
86
|
-
|
|
84
|
+
if isinstance(hook, PostDelegationHook):
|
|
87
85
|
self.post_delegation_hooks.append(hook)
|
|
88
86
|
# Sort by priority
|
|
89
87
|
self.post_delegation_hooks.sort(key=lambda h: h.priority)
|
|
@@ -92,11 +90,10 @@ class HookService(HookServiceInterface):
|
|
|
92
90
|
)
|
|
93
91
|
return True
|
|
94
92
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
return False
|
|
93
|
+
self.logger.warning(
|
|
94
|
+
f"Attempted to register unsupported hook type: {type(hook).__name__}"
|
|
95
|
+
)
|
|
96
|
+
return False
|
|
100
97
|
|
|
101
98
|
except Exception as e:
|
|
102
99
|
self.logger.error(f"Failed to register hook {hook.name}: {e}")
|
|
@@ -19,8 +19,8 @@ from .memory_guardian import MemoryGuardian
|
|
|
19
19
|
from .monitoring import AdvancedHealthMonitor
|
|
20
20
|
|
|
21
21
|
__all__ = [
|
|
22
|
-
"LoggingService",
|
|
23
22
|
"AdvancedHealthMonitor", # For SocketIO server monitoring
|
|
24
23
|
"HealthMonitor", # For Memory Guardian system monitoring
|
|
24
|
+
"LoggingService",
|
|
25
25
|
"MemoryGuardian",
|
|
26
26
|
]
|
|
@@ -14,14 +14,12 @@ Design Principles:
|
|
|
14
14
|
|
|
15
15
|
import gzip
|
|
16
16
|
import json
|
|
17
|
-
import os
|
|
18
17
|
import shutil
|
|
19
|
-
import
|
|
20
|
-
from datetime import datetime
|
|
21
|
-
from typing import Any, Dict,
|
|
18
|
+
from dataclasses import dataclass, field
|
|
19
|
+
from datetime import datetime
|
|
20
|
+
from typing import Any, Dict, List, Optional
|
|
22
21
|
|
|
23
22
|
import ijson # For streaming JSON parsing
|
|
24
|
-
from dataclasses import dataclass, field
|
|
25
23
|
|
|
26
24
|
from claude_mpm.services.core.base import BaseService
|
|
27
25
|
|
|
@@ -136,8 +134,7 @@ class ContextPreservationService(BaseService):
|
|
|
136
134
|
if file_size_mb > self.large_file_threshold_mb:
|
|
137
135
|
self.log_info("Using streaming parser for large file")
|
|
138
136
|
return await self._parse_large_claude_json(extract_full)
|
|
139
|
-
|
|
140
|
-
return await self._parse_standard_claude_json(extract_full)
|
|
137
|
+
return await self._parse_standard_claude_json(extract_full)
|
|
141
138
|
|
|
142
139
|
except Exception as e:
|
|
143
140
|
self.log_error(f"Failed to parse Claude JSON: {e}")
|
|
@@ -158,7 +155,6 @@ class ContextPreservationService(BaseService):
|
|
|
158
155
|
parser = ijson.parse(f)
|
|
159
156
|
|
|
160
157
|
active_conv_id = None
|
|
161
|
-
in_conversations = False
|
|
162
158
|
current_conv = {}
|
|
163
159
|
|
|
164
160
|
for prefix, event, value in parser:
|
|
@@ -169,7 +165,7 @@ class ContextPreservationService(BaseService):
|
|
|
169
165
|
# Parse conversations array
|
|
170
166
|
elif prefix.startswith("conversations.item"):
|
|
171
167
|
if event == "map_key":
|
|
172
|
-
|
|
168
|
+
pass
|
|
173
169
|
elif (
|
|
174
170
|
active_conv_id and current_conv.get("id") == active_conv_id
|
|
175
171
|
):
|
|
@@ -204,12 +200,12 @@ class ContextPreservationService(BaseService):
|
|
|
204
200
|
self.log_info(f"Compressing conversation history: {file_size_mb:.2f}MB")
|
|
205
201
|
|
|
206
202
|
# Create backup first
|
|
207
|
-
|
|
203
|
+
await self._create_backup()
|
|
208
204
|
|
|
209
205
|
# Load and filter conversations
|
|
210
206
|
cutoff_time = datetime.now().timestamp() - (keep_recent_days * 86400)
|
|
211
207
|
|
|
212
|
-
with open(self.claude_json_path
|
|
208
|
+
with open(self.claude_json_path) as f:
|
|
213
209
|
data = json.load(f)
|
|
214
210
|
|
|
215
211
|
original_count = len(data.get("conversations", []))
|
|
@@ -341,7 +337,7 @@ class ContextPreservationService(BaseService):
|
|
|
341
337
|
) -> ConversationState:
|
|
342
338
|
"""Parse Claude JSON using standard JSON parser."""
|
|
343
339
|
try:
|
|
344
|
-
with open(self.claude_json_path
|
|
340
|
+
with open(self.claude_json_path) as f:
|
|
345
341
|
data = json.load(f)
|
|
346
342
|
|
|
347
343
|
return await self._extract_conversation_state(data, extract_full)
|
|
@@ -15,9 +15,9 @@ Design Principles:
|
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
17
|
import asyncio
|
|
18
|
+
import contextlib
|
|
18
19
|
import logging
|
|
19
20
|
import socket
|
|
20
|
-
import threading
|
|
21
21
|
import time
|
|
22
22
|
from abc import ABC, abstractmethod
|
|
23
23
|
from collections import deque
|
|
@@ -120,12 +120,10 @@ class HealthChecker(ABC):
|
|
|
120
120
|
@abstractmethod
|
|
121
121
|
def get_name(self) -> str:
|
|
122
122
|
"""Get the name of this health checker."""
|
|
123
|
-
pass
|
|
124
123
|
|
|
125
124
|
@abstractmethod
|
|
126
125
|
async def check_health(self) -> List[HealthMetric]:
|
|
127
126
|
"""Perform health check and return metrics."""
|
|
128
|
-
pass
|
|
129
127
|
|
|
130
128
|
|
|
131
129
|
class ProcessResourceChecker(HealthChecker):
|
|
@@ -220,9 +218,11 @@ class ProcessResourceChecker(HealthChecker):
|
|
|
220
218
|
HealthMetric(
|
|
221
219
|
name="process_status",
|
|
222
220
|
value=status,
|
|
223
|
-
status=
|
|
224
|
-
|
|
225
|
-
|
|
221
|
+
status=(
|
|
222
|
+
HealthStatus.HEALTHY
|
|
223
|
+
if process_healthy
|
|
224
|
+
else HealthStatus.CRITICAL
|
|
225
|
+
),
|
|
226
226
|
message=f"Process status: {status}",
|
|
227
227
|
)
|
|
228
228
|
)
|
|
@@ -612,9 +612,9 @@ class ServiceHealthChecker(HealthChecker):
|
|
|
612
612
|
HealthMetric(
|
|
613
613
|
name="total_errors",
|
|
614
614
|
value=errors,
|
|
615
|
-
status=
|
|
616
|
-
|
|
617
|
-
|
|
615
|
+
status=(
|
|
616
|
+
HealthStatus.HEALTHY if errors == 0 else HealthStatus.WARNING
|
|
617
|
+
),
|
|
618
618
|
)
|
|
619
619
|
)
|
|
620
620
|
except Exception as e:
|
|
@@ -843,7 +843,7 @@ class AdvancedHealthMonitor:
|
|
|
843
843
|
return HealthStatus.UNKNOWN
|
|
844
844
|
|
|
845
845
|
# Count metrics by status
|
|
846
|
-
status_counts =
|
|
846
|
+
status_counts = dict.fromkeys(HealthStatus, 0)
|
|
847
847
|
for metric in metrics:
|
|
848
848
|
status_counts[metric.status] += 1
|
|
849
849
|
|
|
@@ -890,10 +890,8 @@ class AdvancedHealthMonitor:
|
|
|
890
890
|
self.monitoring = False
|
|
891
891
|
if self.monitor_task:
|
|
892
892
|
self.monitor_task.cancel()
|
|
893
|
-
|
|
893
|
+
with contextlib.suppress(asyncio.CancelledError):
|
|
894
894
|
await self.monitor_task
|
|
895
|
-
except asyncio.CancelledError:
|
|
896
|
-
pass
|
|
897
895
|
self.monitor_task = None
|
|
898
896
|
|
|
899
897
|
self.logger.info("Stopped health monitoring")
|
|
@@ -966,7 +964,7 @@ class AdvancedHealthMonitor:
|
|
|
966
964
|
}
|
|
967
965
|
|
|
968
966
|
# Aggregate statistics
|
|
969
|
-
status_counts =
|
|
967
|
+
status_counts = dict.fromkeys(HealthStatus, 0)
|
|
970
968
|
total_metrics = 0
|
|
971
969
|
total_errors = 0
|
|
972
970
|
total_duration_ms = 0
|
|
@@ -1019,18 +1017,18 @@ class AdvancedHealthMonitor:
|
|
|
1019
1017
|
"callbacks_count": len(self.health_callbacks),
|
|
1020
1018
|
},
|
|
1021
1019
|
"checkers": [checker.get_name() for checker in self.checkers],
|
|
1022
|
-
"current_status":
|
|
1023
|
-
|
|
1024
|
-
|
|
1020
|
+
"current_status": (
|
|
1021
|
+
self.last_check_result.to_dict() if self.last_check_result else None
|
|
1022
|
+
),
|
|
1025
1023
|
"aggregated_status": self.get_aggregated_status(),
|
|
1026
1024
|
"monitoring_stats": dict(self.monitoring_stats),
|
|
1027
1025
|
"history_summary": {
|
|
1028
1026
|
"total_checks": len(self.health_history),
|
|
1029
|
-
"oldest_check":
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
"newest_check":
|
|
1033
|
-
|
|
1034
|
-
|
|
1027
|
+
"oldest_check": (
|
|
1028
|
+
self.health_history[0].timestamp if self.health_history else None
|
|
1029
|
+
),
|
|
1030
|
+
"newest_check": (
|
|
1031
|
+
self.health_history[-1].timestamp if self.health_history else None
|
|
1032
|
+
),
|
|
1035
1033
|
},
|
|
1036
1034
|
}
|
|
@@ -34,89 +34,89 @@ def __getattr__(name):
|
|
|
34
34
|
from .core.interfaces import IMCPGateway
|
|
35
35
|
|
|
36
36
|
return IMCPGateway
|
|
37
|
-
|
|
37
|
+
if name == "IMCPToolRegistry":
|
|
38
38
|
from .core.interfaces import IMCPToolRegistry
|
|
39
39
|
|
|
40
40
|
return IMCPToolRegistry
|
|
41
|
-
|
|
41
|
+
if name == "IMCPConfiguration":
|
|
42
42
|
from .core.interfaces import IMCPConfiguration
|
|
43
43
|
|
|
44
44
|
return IMCPConfiguration
|
|
45
|
-
|
|
45
|
+
if name == "IMCPToolAdapter":
|
|
46
46
|
from .core.interfaces import IMCPToolAdapter
|
|
47
47
|
|
|
48
48
|
return IMCPToolAdapter
|
|
49
|
-
|
|
49
|
+
if name == "BaseMCPService":
|
|
50
50
|
from .core.base import BaseMCPService
|
|
51
51
|
|
|
52
52
|
return BaseMCPService
|
|
53
53
|
|
|
54
54
|
# Gateway implementations
|
|
55
|
-
|
|
55
|
+
if name == "MCPGateway":
|
|
56
56
|
from .server.mcp_gateway import MCPGateway
|
|
57
57
|
|
|
58
58
|
return MCPGateway
|
|
59
|
-
|
|
59
|
+
if name == "StdioHandler":
|
|
60
60
|
from .server.stdio_handler import StdioHandler
|
|
61
61
|
|
|
62
62
|
return StdioHandler
|
|
63
|
-
|
|
63
|
+
if name == "AlternativeStdioHandler":
|
|
64
64
|
from .server.stdio_handler import AlternativeStdioHandler
|
|
65
65
|
|
|
66
66
|
return AlternativeStdioHandler
|
|
67
67
|
|
|
68
68
|
# Tool registry and adapters
|
|
69
|
-
|
|
69
|
+
if name == "ToolRegistry":
|
|
70
70
|
from .registry.tool_registry import ToolRegistry
|
|
71
71
|
|
|
72
72
|
return ToolRegistry
|
|
73
|
-
|
|
73
|
+
if name == "BaseToolAdapter":
|
|
74
74
|
from .tools.base_adapter import BaseToolAdapter
|
|
75
75
|
|
|
76
76
|
return BaseToolAdapter
|
|
77
|
-
|
|
77
|
+
if name == "EchoToolAdapter":
|
|
78
78
|
from .tools.base_adapter import EchoToolAdapter
|
|
79
79
|
|
|
80
80
|
return EchoToolAdapter
|
|
81
|
-
|
|
81
|
+
if name == "CalculatorToolAdapter":
|
|
82
82
|
from .tools.base_adapter import CalculatorToolAdapter
|
|
83
83
|
|
|
84
84
|
return CalculatorToolAdapter
|
|
85
|
-
|
|
85
|
+
if name == "SystemInfoToolAdapter":
|
|
86
86
|
from .tools.base_adapter import SystemInfoToolAdapter
|
|
87
87
|
|
|
88
88
|
return SystemInfoToolAdapter
|
|
89
89
|
|
|
90
90
|
# Configuration management
|
|
91
|
-
|
|
91
|
+
if name == "MCPConfiguration":
|
|
92
92
|
from .config.configuration import MCPConfiguration
|
|
93
93
|
|
|
94
94
|
return MCPConfiguration
|
|
95
|
-
|
|
95
|
+
if name == "MCPConfigLoader":
|
|
96
96
|
from .config.config_loader import MCPConfigLoader
|
|
97
97
|
|
|
98
98
|
return MCPConfigLoader
|
|
99
99
|
|
|
100
100
|
# Service registry
|
|
101
|
-
|
|
101
|
+
if name == "MCPServiceRegistry":
|
|
102
102
|
from .registry.service_registry import MCPServiceRegistry
|
|
103
103
|
|
|
104
104
|
return MCPServiceRegistry
|
|
105
105
|
|
|
106
106
|
# Exceptions
|
|
107
|
-
|
|
107
|
+
if name == "MCPException":
|
|
108
108
|
from .core.exceptions import MCPException
|
|
109
109
|
|
|
110
110
|
return MCPException
|
|
111
|
-
|
|
111
|
+
if name == "MCPConfigurationError":
|
|
112
112
|
from .core.exceptions import MCPConfigurationError
|
|
113
113
|
|
|
114
114
|
return MCPConfigurationError
|
|
115
|
-
|
|
115
|
+
if name == "MCPToolNotFoundError":
|
|
116
116
|
from .core.exceptions import MCPToolNotFoundError
|
|
117
117
|
|
|
118
118
|
return MCPToolNotFoundError
|
|
119
|
-
|
|
119
|
+
if name == "MCPServerError":
|
|
120
120
|
from .core.exceptions import MCPServerError
|
|
121
121
|
|
|
122
122
|
return MCPServerError
|
|
@@ -126,30 +126,30 @@ def __getattr__(name):
|
|
|
126
126
|
|
|
127
127
|
# Public API exports
|
|
128
128
|
__all__ = [
|
|
129
|
-
# Core interfaces
|
|
130
|
-
"IMCPGateway",
|
|
131
|
-
"IMCPToolRegistry",
|
|
132
|
-
"IMCPConfiguration",
|
|
133
|
-
"IMCPToolAdapter",
|
|
134
|
-
"BaseMCPService",
|
|
135
|
-
# Gateway implementations
|
|
136
|
-
"MCPGateway",
|
|
137
|
-
"StdioHandler",
|
|
138
129
|
"AlternativeStdioHandler",
|
|
139
|
-
|
|
140
|
-
"ToolRegistry",
|
|
130
|
+
"BaseMCPService",
|
|
141
131
|
"BaseToolAdapter",
|
|
142
|
-
"EchoToolAdapter",
|
|
143
132
|
"CalculatorToolAdapter",
|
|
144
|
-
"
|
|
133
|
+
"EchoToolAdapter",
|
|
134
|
+
"IMCPConfiguration",
|
|
135
|
+
# Core interfaces
|
|
136
|
+
"IMCPGateway",
|
|
137
|
+
"IMCPToolAdapter",
|
|
138
|
+
"IMCPToolRegistry",
|
|
139
|
+
"MCPConfigLoader",
|
|
145
140
|
# Configuration
|
|
146
141
|
"MCPConfiguration",
|
|
147
|
-
"
|
|
148
|
-
# Service registry
|
|
149
|
-
"MCPServiceRegistry",
|
|
142
|
+
"MCPConfigurationError",
|
|
150
143
|
# Exceptions
|
|
151
144
|
"MCPException",
|
|
152
|
-
|
|
153
|
-
"
|
|
145
|
+
# Gateway implementations
|
|
146
|
+
"MCPGateway",
|
|
154
147
|
"MCPServerError",
|
|
148
|
+
# Service registry
|
|
149
|
+
"MCPServiceRegistry",
|
|
150
|
+
"MCPToolNotFoundError",
|
|
151
|
+
"StdioHandler",
|
|
152
|
+
"SystemInfoToolAdapter",
|
|
153
|
+
# Tool management
|
|
154
|
+
"ToolRegistry",
|
|
155
155
|
]
|