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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Tool access control system for managing which tools agents can use."""
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import Dict, List,
|
|
4
|
+
from typing import Dict, List, Set
|
|
5
5
|
|
|
6
6
|
logger = logging.getLogger(__name__)
|
|
7
7
|
|
|
@@ -76,7 +76,7 @@ class ToolAccessControl:
|
|
|
76
76
|
if is_parent or agent_type == "pm":
|
|
77
77
|
allowed = self.PM_TOOLS.copy()
|
|
78
78
|
logger.debug(f"PM/Parent process allowed tools: {allowed}")
|
|
79
|
-
return sorted(
|
|
79
|
+
return sorted(allowed)
|
|
80
80
|
|
|
81
81
|
# Check custom restrictions first
|
|
82
82
|
if agent_type in self.custom_restrictions:
|
|
@@ -94,7 +94,7 @@ class ToolAccessControl:
|
|
|
94
94
|
allowed = allowed - {"TodoWrite"}
|
|
95
95
|
|
|
96
96
|
logger.debug(f"Agent '{agent_type}' allowed tools: {allowed}")
|
|
97
|
-
return sorted(
|
|
97
|
+
return sorted(allowed)
|
|
98
98
|
|
|
99
99
|
def format_allowed_tools_arg(self, agent_type: str, is_parent: bool = False) -> str:
|
|
100
100
|
"""
|
|
@@ -166,8 +166,7 @@ class ToolAccessControl:
|
|
|
166
166
|
"""
|
|
167
167
|
if agent_type.lower() == "pm":
|
|
168
168
|
return """You have access to the TodoWrite tool for tracking tasks. Always prefix todos with [Agent] to indicate delegation target."""
|
|
169
|
-
|
|
170
|
-
return """You do NOT have access to TodoWrite. Instead, when you identify tasks that need tracking:
|
|
169
|
+
return """You do NOT have access to TodoWrite. Instead, when you identify tasks that need tracking:
|
|
171
170
|
1. Include them in your response with clear markers like "TODO:" or "TASK:"
|
|
172
171
|
2. Format them as a structured list with priority and description
|
|
173
172
|
3. The PM will extract and track these in the central todo list
|
claude_mpm/core/typing_utils.py
CHANGED
|
@@ -16,20 +16,15 @@ strict type safety.
|
|
|
16
16
|
|
|
17
17
|
import logging
|
|
18
18
|
from datetime import datetime
|
|
19
|
-
from enum import Enum
|
|
20
19
|
from typing import (
|
|
21
|
-
TYPE_CHECKING,
|
|
22
20
|
Any,
|
|
23
|
-
AsyncIterator,
|
|
24
21
|
Awaitable,
|
|
25
22
|
Callable,
|
|
26
23
|
Dict,
|
|
27
|
-
Iterator,
|
|
28
24
|
List,
|
|
29
25
|
Literal,
|
|
30
26
|
Optional,
|
|
31
27
|
Protocol,
|
|
32
|
-
Set,
|
|
33
28
|
Tuple,
|
|
34
29
|
TypeVar,
|
|
35
30
|
Union,
|
|
@@ -37,10 +32,6 @@ from typing import (
|
|
|
37
32
|
|
|
38
33
|
from typing_extensions import NotRequired, TypeAlias, TypedDict
|
|
39
34
|
|
|
40
|
-
if TYPE_CHECKING:
|
|
41
|
-
from claude_mpm.core.claude_runner import ClaudeRunner
|
|
42
|
-
from claude_mpm.services.socketio_server import SocketIOClientProxy
|
|
43
|
-
|
|
44
35
|
# Generic type variables
|
|
45
36
|
T = TypeVar("T")
|
|
46
37
|
TSession = TypeVar("TSession") # Generic session type
|
|
@@ -488,74 +479,74 @@ ErrorResult = Tuple[bool, Optional[str]]
|
|
|
488
479
|
SuccessResult = Tuple[bool, Any]
|
|
489
480
|
|
|
490
481
|
__all__ = [
|
|
491
|
-
|
|
492
|
-
"
|
|
493
|
-
"JSONValue",
|
|
494
|
-
"JSONDict",
|
|
495
|
-
"Headers",
|
|
496
|
-
"ErrorCode",
|
|
497
|
-
"LogLevel",
|
|
498
|
-
# Session types
|
|
499
|
-
"SessionId",
|
|
500
|
-
"SessionStatus",
|
|
501
|
-
"LaunchMethod",
|
|
502
|
-
"SessionConfig",
|
|
503
|
-
"SessionResult",
|
|
504
|
-
"SessionEvent",
|
|
482
|
+
"AgentCapabilities",
|
|
483
|
+
"AgentDefinition",
|
|
505
484
|
# Agent types
|
|
506
485
|
"AgentId",
|
|
507
|
-
"AgentVersion",
|
|
508
|
-
"AgentTier",
|
|
509
|
-
"ModelName",
|
|
510
|
-
"ResourceTier",
|
|
511
|
-
"AgentCapabilities",
|
|
512
486
|
"AgentMetadata",
|
|
513
|
-
"
|
|
514
|
-
|
|
515
|
-
"
|
|
516
|
-
"EventData",
|
|
517
|
-
"SocketId",
|
|
518
|
-
"WebSocketMessage",
|
|
487
|
+
"AgentServiceProtocol",
|
|
488
|
+
"AgentTier",
|
|
489
|
+
"AgentVersion",
|
|
519
490
|
"ClaudeStatus",
|
|
491
|
+
"CommandArgs",
|
|
492
|
+
"CommandName",
|
|
493
|
+
"CommandResult",
|
|
494
|
+
# Common combinations
|
|
495
|
+
"CommonTypes",
|
|
496
|
+
"ConfigDict",
|
|
520
497
|
"DelegationInfo",
|
|
498
|
+
"DeploymentResult",
|
|
499
|
+
"ErrorCode",
|
|
500
|
+
"ErrorResult",
|
|
501
|
+
"EventData",
|
|
502
|
+
# WebSocket types
|
|
503
|
+
"EventName",
|
|
504
|
+
"Headers",
|
|
505
|
+
"HookConfig",
|
|
506
|
+
"HookContext",
|
|
521
507
|
# Hook types
|
|
522
508
|
"HookName",
|
|
523
509
|
"HookPriority",
|
|
524
510
|
"HookResult",
|
|
525
|
-
"
|
|
526
|
-
"
|
|
527
|
-
|
|
528
|
-
"
|
|
529
|
-
"
|
|
530
|
-
"ServiceConfig",
|
|
531
|
-
"ServiceInfo",
|
|
532
|
-
# Memory types
|
|
533
|
-
"MemoryType",
|
|
534
|
-
"MemoryId",
|
|
511
|
+
"JSONDict",
|
|
512
|
+
"JSONValue",
|
|
513
|
+
"LaunchMethod",
|
|
514
|
+
"LogLevel",
|
|
515
|
+
"LoggerProtocol",
|
|
535
516
|
"Memory",
|
|
517
|
+
"MemoryId",
|
|
536
518
|
"MemorySearchResult",
|
|
519
|
+
"MemoryServiceProtocol",
|
|
520
|
+
# Memory types
|
|
521
|
+
"MemoryType",
|
|
522
|
+
"ModelName",
|
|
523
|
+
# Basic type aliases
|
|
524
|
+
"PathLike",
|
|
537
525
|
# Other types
|
|
538
526
|
"ProjectConfig",
|
|
539
|
-
"
|
|
527
|
+
"ResourceTier",
|
|
540
528
|
"ResponseLogEntry",
|
|
541
|
-
"
|
|
542
|
-
"
|
|
543
|
-
"
|
|
529
|
+
"ServiceConfig",
|
|
530
|
+
"ServiceContainer",
|
|
531
|
+
"ServiceInfo",
|
|
532
|
+
# Service types
|
|
533
|
+
"ServiceName",
|
|
534
|
+
"ServiceStatus",
|
|
535
|
+
"SessionConfig",
|
|
536
|
+
"SessionEvent",
|
|
537
|
+
# Session types
|
|
538
|
+
"SessionId",
|
|
544
539
|
# Protocols
|
|
545
540
|
"SessionProtocol",
|
|
546
|
-
"
|
|
547
|
-
"
|
|
548
|
-
"
|
|
549
|
-
"
|
|
550
|
-
"ServiceContainer",
|
|
541
|
+
"SessionResult",
|
|
542
|
+
"SessionStatus",
|
|
543
|
+
"SocketId",
|
|
544
|
+
"SuccessResult",
|
|
551
545
|
# Generic type variables
|
|
552
546
|
"T",
|
|
553
|
-
"TSession",
|
|
554
547
|
"TAgent",
|
|
555
548
|
"TService",
|
|
556
|
-
|
|
557
|
-
"
|
|
558
|
-
"
|
|
559
|
-
"ErrorResult",
|
|
560
|
-
"SuccessResult",
|
|
549
|
+
"TSession",
|
|
550
|
+
"WebSocketMessage",
|
|
551
|
+
"WebSocketServerProtocol",
|
|
561
552
|
]
|
|
@@ -25,6 +25,7 @@ Architecture:
|
|
|
25
25
|
- Discovery engine with tier-based precedence
|
|
26
26
|
"""
|
|
27
27
|
|
|
28
|
+
import contextlib
|
|
28
29
|
import json
|
|
29
30
|
import logging
|
|
30
31
|
import time
|
|
@@ -322,13 +323,12 @@ class UnifiedAgentRegistry:
|
|
|
322
323
|
or str(self.path_manager.get_project_agents_dir()) in path_str
|
|
323
324
|
):
|
|
324
325
|
return AgentTier.PROJECT
|
|
325
|
-
|
|
326
|
+
if (
|
|
326
327
|
"user" in path_str
|
|
327
328
|
or str(self.path_manager.get_user_agents_dir()) in path_str
|
|
328
329
|
):
|
|
329
330
|
return AgentTier.USER
|
|
330
|
-
|
|
331
|
-
return AgentTier.SYSTEM
|
|
331
|
+
return AgentTier.SYSTEM
|
|
332
332
|
|
|
333
333
|
def _determine_agent_type(self, file_path: Path, tier: AgentTier) -> AgentType:
|
|
334
334
|
"""Determine agent type based on file path and tier."""
|
|
@@ -388,8 +388,7 @@ class UnifiedAgentRegistry:
|
|
|
388
388
|
|
|
389
389
|
# Look for frontmatter
|
|
390
390
|
if lines and lines[0].strip() == "---":
|
|
391
|
-
|
|
392
|
-
for i, line in enumerate(lines[1:], 1):
|
|
391
|
+
for _i, line in enumerate(lines[1:], 1):
|
|
393
392
|
if line.strip() == "---":
|
|
394
393
|
break
|
|
395
394
|
if line.startswith("description:"):
|
|
@@ -410,8 +409,7 @@ class UnifiedAgentRegistry:
|
|
|
410
409
|
# Look for frontmatter
|
|
411
410
|
lines = content.split("\n")
|
|
412
411
|
if lines and lines[0].strip() == "---":
|
|
413
|
-
|
|
414
|
-
for i, line in enumerate(lines[1:], 1):
|
|
412
|
+
for _i, line in enumerate(lines[1:], 1):
|
|
415
413
|
if line.strip() == "---":
|
|
416
414
|
break
|
|
417
415
|
if line.startswith("specializations:"):
|
|
@@ -419,10 +417,8 @@ class UnifiedAgentRegistry:
|
|
|
419
417
|
spec_content = line.split(":", 1)[1].strip()
|
|
420
418
|
if spec_content.startswith("[") and spec_content.endswith("]"):
|
|
421
419
|
# JSON-style list
|
|
422
|
-
|
|
420
|
+
with contextlib.suppress(Exception):
|
|
423
421
|
specializations = json.loads(spec_content)
|
|
424
|
-
except:
|
|
425
|
-
pass
|
|
426
422
|
|
|
427
423
|
return specializations
|
|
428
424
|
|
|
@@ -500,7 +496,6 @@ class UnifiedAgentRegistry:
|
|
|
500
496
|
"""Cache the current registry state."""
|
|
501
497
|
# For now, we just store in memory
|
|
502
498
|
# In a full implementation, this could write to disk
|
|
503
|
-
pass
|
|
504
499
|
|
|
505
500
|
# ========================================================================
|
|
506
501
|
# Public API Methods
|
|
@@ -607,7 +602,7 @@ class UnifiedAgentRegistry:
|
|
|
607
602
|
"""Import registry from JSON file."""
|
|
608
603
|
input_path = Path(input_path)
|
|
609
604
|
|
|
610
|
-
with open(input_path
|
|
605
|
+
with open(input_path) as f:
|
|
611
606
|
data = json.load(f)
|
|
612
607
|
|
|
613
608
|
# Clear current registry
|
|
@@ -700,22 +695,22 @@ def list_agents_all() -> List[AgentMetadata]:
|
|
|
700
695
|
# ============================================================================
|
|
701
696
|
|
|
702
697
|
__all__ = [
|
|
703
|
-
"
|
|
698
|
+
"AgentFormat",
|
|
704
699
|
"AgentMetadata",
|
|
705
700
|
"AgentTier",
|
|
706
701
|
"AgentType",
|
|
707
|
-
"
|
|
708
|
-
"get_agent_registry",
|
|
702
|
+
"UnifiedAgentRegistry",
|
|
709
703
|
"discover_agents",
|
|
710
|
-
"
|
|
704
|
+
"discover_agents_sync",
|
|
711
705
|
"get_agent",
|
|
706
|
+
"get_agent_names",
|
|
707
|
+
"get_agent_registry",
|
|
712
708
|
"get_core_agents",
|
|
713
|
-
"get_specialized_agents",
|
|
714
709
|
"get_project_agents",
|
|
715
|
-
"get_agent_names",
|
|
716
710
|
"get_registry_stats",
|
|
711
|
+
"get_specialized_agents",
|
|
717
712
|
# Legacy compatibility
|
|
718
713
|
"listAgents",
|
|
719
|
-
"
|
|
714
|
+
"list_agents",
|
|
720
715
|
"list_agents_all",
|
|
721
716
|
]
|
|
@@ -13,7 +13,6 @@ Design Principles:
|
|
|
13
13
|
6. Backward compatibility with existing config systems
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
-
import os
|
|
17
16
|
from pathlib import Path
|
|
18
17
|
from typing import Any, Dict, List, Optional, Union
|
|
19
18
|
|
|
@@ -56,7 +55,7 @@ class LoggingConfig(BaseModel):
|
|
|
56
55
|
)
|
|
57
56
|
|
|
58
57
|
@validator("level")
|
|
59
|
-
def validate_log_level(
|
|
58
|
+
def validate_log_level(self, v):
|
|
60
59
|
valid_levels = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
|
|
61
60
|
if v.upper() not in valid_levels:
|
|
62
61
|
raise ValueError(f"Invalid log level. Must be one of: {valid_levels}")
|
|
@@ -267,7 +266,7 @@ class UnifiedConfig(BaseSettings):
|
|
|
267
266
|
extra = "allow" # Allow extra fields for backward compatibility
|
|
268
267
|
|
|
269
268
|
@validator("environment")
|
|
270
|
-
def validate_environment(
|
|
269
|
+
def validate_environment(self, v):
|
|
271
270
|
valid_envs = ["development", "testing", "production"]
|
|
272
271
|
if v not in valid_envs:
|
|
273
272
|
raise ValueError(f"Invalid environment. Must be one of: {valid_envs}")
|
|
@@ -437,7 +436,7 @@ class ConfigurationService:
|
|
|
437
436
|
if config_path.exists():
|
|
438
437
|
import yaml
|
|
439
438
|
|
|
440
|
-
with open(config_path
|
|
439
|
+
with open(config_path) as f:
|
|
441
440
|
file_config = yaml.safe_load(f) or {}
|
|
442
441
|
config_data.update(file_config)
|
|
443
442
|
break
|
|
@@ -514,8 +513,7 @@ class ConfigurationService:
|
|
|
514
513
|
# Pydantic validation happens automatically, but we can add custom validation here
|
|
515
514
|
if self._config.network.socketio_port in range(1024, 65536):
|
|
516
515
|
return True
|
|
517
|
-
|
|
518
|
-
raise ConfigurationError("Invalid SocketIO port range")
|
|
516
|
+
raise ConfigurationError("Invalid SocketIO port range")
|
|
519
517
|
except Exception as e:
|
|
520
518
|
raise ConfigurationError(f"Configuration validation failed: {e}")
|
|
521
519
|
|