claude-mpm 3.9.11__py3-none-any.whl → 4.0.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +2 -2
- claude_mpm/__main__.py +3 -2
- claude_mpm/agents/__init__.py +85 -79
- claude_mpm/agents/agent_loader.py +464 -1003
- claude_mpm/agents/agent_loader_integration.py +45 -45
- claude_mpm/agents/agents_metadata.py +29 -30
- claude_mpm/agents/async_agent_loader.py +156 -138
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/base_agent_loader.py +179 -151
- claude_mpm/agents/frontmatter_validator.py +229 -130
- claude_mpm/agents/schema/agent_schema.json +1 -1
- claude_mpm/agents/system_agent_config.py +213 -147
- claude_mpm/agents/templates/__init__.py +13 -13
- claude_mpm/agents/templates/code_analyzer.json +2 -2
- claude_mpm/agents/templates/data_engineer.json +1 -1
- claude_mpm/agents/templates/documentation.json +23 -11
- claude_mpm/agents/templates/engineer.json +22 -6
- claude_mpm/agents/templates/memory_manager.json +1 -1
- claude_mpm/agents/templates/ops.json +2 -2
- claude_mpm/agents/templates/project_organizer.json +1 -1
- claude_mpm/agents/templates/qa.json +1 -1
- claude_mpm/agents/templates/refactoring_engineer.json +222 -0
- claude_mpm/agents/templates/research.json +20 -14
- claude_mpm/agents/templates/security.json +1 -1
- claude_mpm/agents/templates/ticketing.json +2 -2
- claude_mpm/agents/templates/version_control.json +1 -1
- claude_mpm/agents/templates/web_qa.json +3 -1
- claude_mpm/agents/templates/web_ui.json +2 -2
- claude_mpm/cli/__init__.py +79 -51
- claude_mpm/cli/__main__.py +3 -2
- claude_mpm/cli/commands/__init__.py +20 -20
- claude_mpm/cli/commands/agents.py +279 -247
- claude_mpm/cli/commands/aggregate.py +138 -157
- claude_mpm/cli/commands/cleanup.py +147 -147
- claude_mpm/cli/commands/config.py +93 -76
- claude_mpm/cli/commands/info.py +17 -16
- claude_mpm/cli/commands/mcp.py +140 -905
- claude_mpm/cli/commands/mcp_command_router.py +139 -0
- claude_mpm/cli/commands/mcp_config_commands.py +20 -0
- claude_mpm/cli/commands/mcp_install_commands.py +20 -0
- claude_mpm/cli/commands/mcp_server_commands.py +175 -0
- claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
- claude_mpm/cli/commands/memory.py +239 -203
- claude_mpm/cli/commands/monitor.py +330 -86
- claude_mpm/cli/commands/run.py +380 -429
- claude_mpm/cli/commands/run_config_checker.py +160 -0
- claude_mpm/cli/commands/socketio_monitor.py +235 -0
- claude_mpm/cli/commands/tickets.py +363 -220
- claude_mpm/cli/parser.py +24 -1156
- claude_mpm/cli/parsers/__init__.py +29 -0
- claude_mpm/cli/parsers/agents_parser.py +136 -0
- claude_mpm/cli/parsers/base_parser.py +331 -0
- claude_mpm/cli/parsers/config_parser.py +85 -0
- claude_mpm/cli/parsers/mcp_parser.py +152 -0
- claude_mpm/cli/parsers/memory_parser.py +138 -0
- claude_mpm/cli/parsers/monitor_parser.py +124 -0
- claude_mpm/cli/parsers/run_parser.py +147 -0
- claude_mpm/cli/parsers/tickets_parser.py +203 -0
- claude_mpm/cli/ticket_cli.py +7 -3
- claude_mpm/cli/utils.py +55 -37
- claude_mpm/cli_module/__init__.py +6 -6
- claude_mpm/cli_module/args.py +188 -140
- claude_mpm/cli_module/commands.py +79 -70
- claude_mpm/cli_module/migration_example.py +38 -60
- claude_mpm/config/__init__.py +32 -25
- claude_mpm/config/agent_config.py +151 -119
- claude_mpm/config/experimental_features.py +71 -73
- claude_mpm/config/paths.py +94 -208
- claude_mpm/config/socketio_config.py +84 -73
- claude_mpm/constants.py +35 -18
- claude_mpm/core/__init__.py +9 -6
- claude_mpm/core/agent_name_normalizer.py +68 -71
- claude_mpm/core/agent_registry.py +372 -521
- claude_mpm/core/agent_session_manager.py +74 -63
- claude_mpm/core/base_service.py +116 -87
- claude_mpm/core/cache.py +119 -153
- claude_mpm/core/claude_runner.py +425 -1120
- claude_mpm/core/config.py +263 -168
- claude_mpm/core/config_aliases.py +69 -61
- claude_mpm/core/config_constants.py +292 -0
- claude_mpm/core/constants.py +57 -99
- claude_mpm/core/container.py +211 -178
- claude_mpm/core/exceptions.py +233 -89
- claude_mpm/core/factories.py +92 -54
- claude_mpm/core/framework_loader.py +378 -220
- claude_mpm/core/hook_manager.py +198 -83
- claude_mpm/core/hook_performance_config.py +136 -0
- claude_mpm/core/injectable_service.py +61 -55
- claude_mpm/core/interactive_session.py +165 -155
- claude_mpm/core/interfaces.py +221 -195
- claude_mpm/core/lazy.py +96 -96
- claude_mpm/core/logger.py +133 -107
- claude_mpm/core/logging_config.py +185 -157
- claude_mpm/core/minimal_framework_loader.py +20 -15
- claude_mpm/core/mixins.py +30 -29
- claude_mpm/core/oneshot_session.py +215 -181
- claude_mpm/core/optimized_agent_loader.py +134 -138
- claude_mpm/core/optimized_startup.py +159 -157
- claude_mpm/core/pm_hook_interceptor.py +85 -72
- claude_mpm/core/service_registry.py +103 -101
- claude_mpm/core/session_manager.py +97 -87
- claude_mpm/core/socketio_pool.py +212 -158
- claude_mpm/core/tool_access_control.py +58 -51
- claude_mpm/core/types.py +46 -24
- claude_mpm/core/typing_utils.py +166 -82
- claude_mpm/core/unified_agent_registry.py +721 -0
- claude_mpm/core/unified_config.py +550 -0
- claude_mpm/core/unified_paths.py +549 -0
- claude_mpm/dashboard/index.html +1 -1
- claude_mpm/dashboard/open_dashboard.py +51 -17
- claude_mpm/dashboard/static/built/components/agent-inference.js +2 -0
- claude_mpm/dashboard/static/built/components/event-processor.js +2 -0
- claude_mpm/dashboard/static/built/components/event-viewer.js +2 -0
- claude_mpm/dashboard/static/built/components/export-manager.js +2 -0
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +2 -0
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +2 -0
- claude_mpm/dashboard/static/built/components/hud-manager.js +2 -0
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +2 -0
- claude_mpm/dashboard/static/built/components/module-viewer.js +2 -0
- claude_mpm/dashboard/static/built/components/session-manager.js +2 -0
- claude_mpm/dashboard/static/built/components/socket-manager.js +2 -0
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +2 -0
- claude_mpm/dashboard/static/built/components/working-directory.js +2 -0
- claude_mpm/dashboard/static/built/dashboard.js +2 -0
- claude_mpm/dashboard/static/built/socket-client.js +2 -0
- claude_mpm/dashboard/static/css/dashboard.css +27 -8
- claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
- claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
- claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
- claude_mpm/dashboard/static/dist/dashboard.js +2 -0
- claude_mpm/dashboard/static/dist/socket-client.js +2 -0
- claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
- claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
- claude_mpm/dashboard/static/js/components/event-viewer.js +93 -72
- claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +110 -96
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
- claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
- claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
- claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
- claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
- claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
- claude_mpm/dashboard/static/js/dashboard.js +178 -453
- claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/js/socket-client.js +133 -53
- claude_mpm/dashboard/templates/index.html +40 -50
- claude_mpm/experimental/cli_enhancements.py +60 -58
- claude_mpm/generators/__init__.py +1 -1
- claude_mpm/generators/agent_profile_generator.py +75 -65
- claude_mpm/hooks/__init__.py +1 -1
- claude_mpm/hooks/base_hook.py +33 -28
- claude_mpm/hooks/claude_hooks/__init__.py +1 -1
- claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
- claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
- claude_mpm/hooks/memory_integration_hook.py +140 -100
- claude_mpm/hooks/tool_call_interceptor.py +89 -76
- claude_mpm/hooks/validation_hooks.py +57 -49
- claude_mpm/init.py +145 -121
- claude_mpm/models/__init__.py +9 -9
- claude_mpm/models/agent_definition.py +33 -23
- claude_mpm/models/agent_session.py +228 -200
- claude_mpm/scripts/__init__.py +1 -1
- claude_mpm/scripts/socketio_daemon.py +192 -75
- claude_mpm/scripts/socketio_server_manager.py +328 -0
- claude_mpm/scripts/start_activity_logging.py +25 -22
- claude_mpm/services/__init__.py +68 -43
- claude_mpm/services/agent_capabilities_service.py +271 -0
- claude_mpm/services/agents/__init__.py +23 -32
- claude_mpm/services/agents/deployment/__init__.py +3 -3
- claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
- claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
- claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
- claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
- claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
- claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
- claude_mpm/services/agents/deployment/agent_validator.py +352 -0
- claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
- claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
- claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
- claude_mpm/services/agents/deployment/config/__init__.py +13 -0
- claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
- claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
- claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
- claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
- claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
- claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
- claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
- claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
- claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
- claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
- claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
- claude_mpm/services/agents/deployment/results/__init__.py +13 -0
- claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
- claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
- claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
- claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
- claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
- claude_mpm/services/agents/loading/__init__.py +2 -2
- claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
- claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
- claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
- claude_mpm/services/agents/management/__init__.py +2 -2
- claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
- claude_mpm/services/agents/management/agent_management_service.py +209 -156
- claude_mpm/services/agents/memory/__init__.py +9 -6
- claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
- claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
- claude_mpm/services/agents/memory/analyzer.py +430 -0
- claude_mpm/services/agents/memory/content_manager.py +376 -0
- claude_mpm/services/agents/memory/template_generator.py +468 -0
- claude_mpm/services/agents/registry/__init__.py +7 -10
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
- claude_mpm/services/agents/registry/modification_tracker.py +351 -285
- claude_mpm/services/async_session_logger.py +187 -153
- claude_mpm/services/claude_session_logger.py +87 -72
- claude_mpm/services/command_handler_service.py +217 -0
- claude_mpm/services/communication/__init__.py +3 -2
- claude_mpm/services/core/__init__.py +50 -97
- claude_mpm/services/core/base.py +60 -53
- claude_mpm/services/core/interfaces/__init__.py +188 -0
- claude_mpm/services/core/interfaces/agent.py +351 -0
- claude_mpm/services/core/interfaces/communication.py +343 -0
- claude_mpm/services/core/interfaces/infrastructure.py +413 -0
- claude_mpm/services/core/interfaces/service.py +434 -0
- claude_mpm/services/core/interfaces.py +19 -944
- claude_mpm/services/event_aggregator.py +208 -170
- claude_mpm/services/exceptions.py +387 -308
- claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
- claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
- claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
- claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
- claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
- claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
- claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
- claude_mpm/services/hook_service.py +106 -114
- claude_mpm/services/infrastructure/__init__.py +7 -5
- claude_mpm/services/infrastructure/context_preservation.py +233 -199
- claude_mpm/services/infrastructure/daemon_manager.py +279 -0
- claude_mpm/services/infrastructure/logging.py +83 -76
- claude_mpm/services/infrastructure/monitoring.py +547 -404
- claude_mpm/services/mcp_gateway/__init__.py +30 -13
- claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
- claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
- claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
- claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
- claude_mpm/services/mcp_gateway/core/base.py +80 -67
- claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
- claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
- claude_mpm/services/mcp_gateway/main.py +287 -137
- claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
- claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
- claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
- claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
- claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
- claude_mpm/services/memory/__init__.py +2 -2
- claude_mpm/services/memory/builder.py +451 -362
- claude_mpm/services/memory/cache/__init__.py +2 -2
- claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
- claude_mpm/services/memory/cache/simple_cache.py +107 -93
- claude_mpm/services/memory/indexed_memory.py +195 -193
- claude_mpm/services/memory/optimizer.py +267 -234
- claude_mpm/services/memory/router.py +571 -263
- claude_mpm/services/memory_hook_service.py +237 -0
- claude_mpm/services/port_manager.py +575 -0
- claude_mpm/services/project/__init__.py +3 -3
- claude_mpm/services/project/analyzer.py +451 -305
- claude_mpm/services/project/registry.py +262 -240
- claude_mpm/services/recovery_manager.py +287 -231
- claude_mpm/services/response_tracker.py +87 -67
- claude_mpm/services/runner_configuration_service.py +587 -0
- claude_mpm/services/session_management_service.py +304 -0
- claude_mpm/services/socketio/__init__.py +4 -4
- claude_mpm/services/socketio/client_proxy.py +174 -0
- claude_mpm/services/socketio/handlers/__init__.py +3 -3
- claude_mpm/services/socketio/handlers/base.py +44 -30
- claude_mpm/services/socketio/handlers/connection.py +166 -64
- claude_mpm/services/socketio/handlers/file.py +123 -108
- claude_mpm/services/socketio/handlers/git.py +607 -373
- claude_mpm/services/socketio/handlers/hook.py +185 -0
- claude_mpm/services/socketio/handlers/memory.py +4 -4
- claude_mpm/services/socketio/handlers/project.py +4 -4
- claude_mpm/services/socketio/handlers/registry.py +53 -38
- claude_mpm/services/socketio/server/__init__.py +18 -0
- claude_mpm/services/socketio/server/broadcaster.py +252 -0
- claude_mpm/services/socketio/server/core.py +399 -0
- claude_mpm/services/socketio/server/main.py +323 -0
- claude_mpm/services/socketio_client_manager.py +160 -133
- claude_mpm/services/socketio_server.py +36 -1885
- claude_mpm/services/subprocess_launcher_service.py +316 -0
- claude_mpm/services/system_instructions_service.py +258 -0
- claude_mpm/services/ticket_manager.py +19 -533
- claude_mpm/services/utility_service.py +285 -0
- claude_mpm/services/version_control/__init__.py +18 -21
- claude_mpm/services/version_control/branch_strategy.py +20 -10
- claude_mpm/services/version_control/conflict_resolution.py +37 -13
- claude_mpm/services/version_control/git_operations.py +52 -21
- claude_mpm/services/version_control/semantic_versioning.py +92 -53
- claude_mpm/services/version_control/version_parser.py +145 -125
- claude_mpm/services/version_service.py +270 -0
- claude_mpm/storage/__init__.py +2 -2
- claude_mpm/storage/state_storage.py +177 -181
- claude_mpm/ticket_wrapper.py +2 -2
- claude_mpm/utils/__init__.py +2 -2
- claude_mpm/utils/agent_dependency_loader.py +453 -243
- claude_mpm/utils/config_manager.py +157 -118
- claude_mpm/utils/console.py +1 -1
- claude_mpm/utils/dependency_cache.py +102 -107
- claude_mpm/utils/dependency_manager.py +52 -47
- claude_mpm/utils/dependency_strategies.py +131 -96
- claude_mpm/utils/environment_context.py +110 -102
- claude_mpm/utils/error_handler.py +75 -55
- claude_mpm/utils/file_utils.py +80 -67
- claude_mpm/utils/framework_detection.py +12 -11
- claude_mpm/utils/import_migration_example.py +12 -60
- claude_mpm/utils/imports.py +48 -45
- claude_mpm/utils/path_operations.py +100 -93
- claude_mpm/utils/robust_installer.py +172 -164
- claude_mpm/utils/session_logging.py +30 -23
- claude_mpm/utils/subprocess_utils.py +99 -61
- claude_mpm/validation/__init__.py +1 -1
- claude_mpm/validation/agent_validator.py +151 -111
- claude_mpm/validation/frontmatter_validator.py +92 -71
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/METADATA +90 -22
- claude_mpm-4.0.4.dist-info/RECORD +417 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/entry_points.txt +1 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/licenses/LICENSE +1 -1
- claude_mpm/cli/commands/run_guarded.py +0 -511
- claude_mpm/config/memory_guardian_config.py +0 -325
- claude_mpm/config/memory_guardian_yaml.py +0 -335
- claude_mpm/core/config_paths.py +0 -150
- claude_mpm/core/memory_aware_runner.py +0 -353
- claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
- claude_mpm/deployment_paths.py +0 -261
- claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
- claude_mpm/models/state_models.py +0 -433
- claude_mpm/services/agent/__init__.py +0 -24
- claude_mpm/services/agent/deployment.py +0 -2548
- claude_mpm/services/agent/management.py +0 -598
- claude_mpm/services/agent/registry.py +0 -813
- claude_mpm/services/agents/registry/agent_registry.py +0 -813
- claude_mpm/services/communication/socketio.py +0 -1935
- claude_mpm/services/communication/websocket.py +0 -479
- claude_mpm/services/framework_claude_md_generator.py +0 -624
- claude_mpm/services/health_monitor.py +0 -893
- claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
- claude_mpm/services/infrastructure/health_monitor.py +0 -775
- claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
- claude_mpm/services/infrastructure/memory_guardian.py +0 -944
- claude_mpm/services/infrastructure/restart_protection.py +0 -642
- claude_mpm/services/infrastructure/state_manager.py +0 -774
- claude_mpm/services/mcp_gateway/manager.py +0 -334
- claude_mpm/services/optimized_hook_service.py +0 -542
- claude_mpm/services/project_analyzer.py +0 -864
- claude_mpm/services/project_registry.py +0 -608
- claude_mpm/services/standalone_socketio_server.py +0 -1300
- claude_mpm/services/ticket_manager_di.py +0 -318
- claude_mpm/services/ticketing_service_original.py +0 -510
- claude_mpm/utils/paths.py +0 -395
- claude_mpm/utils/platform_memory.py +0 -524
- claude_mpm-3.9.11.dist-info/RECORD +0 -306
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/WHEEL +0 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/top_level.txt +0 -0
    
        claude_mpm/cli/__init__.py
    CHANGED
    
    | @@ -1,3 +1,6 @@ | |
| 1 | 
            +
            from pathlib import Path
         | 
| 2 | 
            +
            from typing import Optional
         | 
| 3 | 
            +
             | 
| 1 4 | 
             
            """
         | 
| 2 5 | 
             
            Claude MPM Command-Line Interface.
         | 
| 3 6 |  | 
| @@ -11,26 +14,24 @@ remains the primary entry point for both direct execution and package imports. | |
| 11 14 | 
             
            """
         | 
| 12 15 |  | 
| 13 16 | 
             
            import sys
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            from  | 
| 17 | 
            +
             | 
| 18 | 
            +
            from claude_mpm.config.paths import paths
         | 
| 16 19 |  | 
| 17 20 | 
             
            from ..constants import CLICommands, LogLevel
         | 
| 18 | 
            -
            from . | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
                run_session,
         | 
| 22 | 
            -
                # run_guarded_session is imported lazily to avoid loading experimental code
         | 
| 23 | 
            -
                manage_tickets,
         | 
| 24 | 
            -
                show_info,
         | 
| 21 | 
            +
            from .commands import (  # run_guarded_session is imported lazily to avoid loading experimental code
         | 
| 22 | 
            +
                aggregate_command,
         | 
| 23 | 
            +
                cleanup_memory,
         | 
| 25 24 | 
             
                manage_agents,
         | 
| 25 | 
            +
                manage_config,
         | 
| 26 | 
            +
                manage_mcp,
         | 
| 26 27 | 
             
                manage_memory,
         | 
| 27 28 | 
             
                manage_monitor,
         | 
| 28 | 
            -
                 | 
| 29 | 
            -
                 | 
| 30 | 
            -
                 | 
| 31 | 
            -
                manage_mcp
         | 
| 29 | 
            +
                manage_tickets,
         | 
| 30 | 
            +
                run_session,
         | 
| 31 | 
            +
                show_info,
         | 
| 32 32 | 
             
            )
         | 
| 33 | 
            -
            from  | 
| 33 | 
            +
            from .parser import create_parser, preprocess_args
         | 
| 34 | 
            +
            from .utils import ensure_directories, setup_logging
         | 
| 34 35 |  | 
| 35 36 | 
             
            # Get version using centralized path management
         | 
| 36 37 | 
             
            # Try package VERSION file first (for installed packages)
         | 
| @@ -53,55 +54,78 @@ else: | |
| 53 54 | 
             
            def main(argv: Optional[list] = None):
         | 
| 54 55 | 
             
                """
         | 
| 55 56 | 
             
                Main CLI entry point.
         | 
| 56 | 
            -
             | 
| 57 | 
            +
             | 
| 57 58 | 
             
                WHY: This function orchestrates the entire CLI flow:
         | 
| 58 59 | 
             
                1. Ensures directories exist
         | 
| 59 60 | 
             
                2. Preprocesses arguments (handling --mpm: prefix)
         | 
| 60 61 | 
             
                3. Parses arguments
         | 
| 61 62 | 
             
                4. Sets up logging
         | 
| 62 63 | 
             
                5. Executes the appropriate command
         | 
| 63 | 
            -
             | 
| 64 | 
            +
             | 
| 64 65 | 
             
                DESIGN DECISION: We keep error handling at this level to provide consistent
         | 
| 65 66 | 
             
                error messages and exit codes across all commands.
         | 
| 66 | 
            -
             | 
| 67 | 
            +
             | 
| 67 68 | 
             
                Args:
         | 
| 68 69 | 
             
                    argv: Optional list of command line arguments for testing
         | 
| 69 | 
            -
             | 
| 70 | 
            +
             | 
| 70 71 | 
             
                Returns:
         | 
| 71 72 | 
             
                    Exit code (0 for success, non-zero for errors)
         | 
| 72 73 | 
             
                """
         | 
| 73 74 | 
             
                # Ensure directories are initialized on first run
         | 
| 74 75 | 
             
                ensure_directories()
         | 
| 75 | 
            -
             | 
| 76 | 
            +
             | 
| 76 77 | 
             
                # Initialize or update project registry
         | 
| 77 78 | 
             
                _initialize_project_registry()
         | 
| 78 | 
            -
             | 
| 79 | 
            +
             | 
| 79 80 | 
             
                # Create parser with version
         | 
| 80 81 | 
             
                parser = create_parser(version=__version__)
         | 
| 81 | 
            -
             | 
| 82 | 
            +
             | 
| 82 83 | 
             
                # Preprocess and parse arguments
         | 
| 83 84 | 
             
                processed_argv = preprocess_args(argv)
         | 
| 84 85 | 
             
                args = parser.parse_args(processed_argv)
         | 
| 85 | 
            -
             | 
| 86 | 
            +
             | 
| 86 87 | 
             
                # Set up logging
         | 
| 87 | 
            -
                 | 
| 88 | 
            -
                
         | 
| 88 | 
            +
                # Special case: For MCP start command, we need minimal logging to avoid stdout interference
         | 
| 89 | 
            +
                if (
         | 
| 90 | 
            +
                    args.command == CLICommands.MCP.value
         | 
| 91 | 
            +
                    and getattr(args, "mcp_command", None) == "start"
         | 
| 92 | 
            +
                ):
         | 
| 93 | 
            +
                    # For MCP server, configure minimal stderr-only logging
         | 
| 94 | 
            +
                    import logging
         | 
| 95 | 
            +
                    import sys
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                    # Only log errors to stderr for MCP server
         | 
| 98 | 
            +
                    if not getattr(args, "test", False) and not getattr(
         | 
| 99 | 
            +
                        args, "instructions", False
         | 
| 100 | 
            +
                    ):
         | 
| 101 | 
            +
                        # Production MCP mode - minimal logging
         | 
| 102 | 
            +
                        logging.basicConfig(
         | 
| 103 | 
            +
                            level=logging.ERROR, format="%(message)s", stream=sys.stderr, force=True
         | 
| 104 | 
            +
                        )
         | 
| 105 | 
            +
                        logger = logging.getLogger("claude_mpm")
         | 
| 106 | 
            +
                    else:
         | 
| 107 | 
            +
                        # Test or instructions mode - normal logging
         | 
| 108 | 
            +
                        logger = setup_logging(args)
         | 
| 109 | 
            +
                else:
         | 
| 110 | 
            +
                    # Normal logging for all other commands
         | 
| 111 | 
            +
                    logger = setup_logging(args)
         | 
| 112 | 
            +
             | 
| 89 113 | 
             
                # Debug output if requested
         | 
| 90 | 
            -
                if hasattr(args,  | 
| 114 | 
            +
                if hasattr(args, "debug") and args.debug:
         | 
| 91 115 | 
             
                    logger.debug(f"Command: {args.command}")
         | 
| 92 116 | 
             
                    logger.debug(f"Arguments: {args}")
         | 
| 93 | 
            -
             | 
| 117 | 
            +
             | 
| 94 118 | 
             
                # Hook system note: Claude Code hooks are handled externally via the
         | 
| 95 119 | 
             
                # hook_handler.py script installed in ~/.claude/settings.json
         | 
| 96 120 | 
             
                # The --no-hooks flag is kept for backward compatibility but doesn't affect
         | 
| 97 121 | 
             
                # Claude Code hooks which are configured separately.
         | 
| 98 | 
            -
             | 
| 122 | 
            +
             | 
| 99 123 | 
             
                # Default to run command if no command specified
         | 
| 100 124 | 
             
                if not args.command:
         | 
| 101 125 | 
             
                    args.command = CLICommands.RUN.value
         | 
| 102 126 | 
             
                    # Ensure run-specific attributes exist when defaulting to run
         | 
| 103 127 | 
             
                    _ensure_run_attributes(args)
         | 
| 104 | 
            -
             | 
| 128 | 
            +
             | 
| 105 129 | 
             
                # Execute command
         | 
| 106 130 | 
             
                try:
         | 
| 107 131 | 
             
                    exit_code = _execute_command(args.command, args)
         | 
| @@ -113,6 +137,7 @@ def main(argv: Optional[list] = None): | |
| 113 137 | 
             
                    logger.error(f"Error: {e}")
         | 
| 114 138 | 
             
                    if args.debug:
         | 
| 115 139 | 
             
                        import traceback
         | 
| 140 | 
            +
             | 
| 116 141 | 
             
                        traceback.print_exc()
         | 
| 117 142 | 
             
                    return 1
         | 
| 118 143 |  | 
| @@ -120,21 +145,23 @@ def main(argv: Optional[list] = None): | |
| 120 145 | 
             
            def _initialize_project_registry():
         | 
| 121 146 | 
             
                """
         | 
| 122 147 | 
             
                Initialize or update the project registry for the current session.
         | 
| 123 | 
            -
             | 
| 148 | 
            +
             | 
| 124 149 | 
             
                WHY: The project registry tracks all claude-mpm projects and their metadata
         | 
| 125 150 | 
             
                across sessions. This function ensures the current project is properly
         | 
| 126 151 | 
             
                registered and updates session information.
         | 
| 127 | 
            -
             | 
| 152 | 
            +
             | 
| 128 153 | 
             
                DESIGN DECISION: Registry failures are logged but don't prevent startup
         | 
| 129 154 | 
             
                to ensure claude-mpm remains functional even if registry operations fail.
         | 
| 130 155 | 
             
                """
         | 
| 131 156 | 
             
                try:
         | 
| 132 | 
            -
                    from ..services. | 
| 157 | 
            +
                    from ..services.project.registry import ProjectRegistry
         | 
| 158 | 
            +
             | 
| 133 159 | 
             
                    registry = ProjectRegistry()
         | 
| 134 160 | 
             
                    registry.get_or_create_project_entry()
         | 
| 135 161 | 
             
                except Exception as e:
         | 
| 136 162 | 
             
                    # Import logger here to avoid circular imports
         | 
| 137 163 | 
             
                    from ..core.logger import get_logger
         | 
| 164 | 
            +
             | 
| 138 165 | 
             
                    logger = get_logger("cli")
         | 
| 139 166 | 
             
                    logger.debug(f"Failed to initialize project registry: {e}")
         | 
| 140 167 | 
             
                    # Continue execution - registry failure shouldn't block startup
         | 
| @@ -143,52 +170,53 @@ def _initialize_project_registry(): | |
| 143 170 | 
             
            def _ensure_run_attributes(args):
         | 
| 144 171 | 
             
                """
         | 
| 145 172 | 
             
                Ensure run command attributes exist when defaulting to run.
         | 
| 146 | 
            -
             | 
| 173 | 
            +
             | 
| 147 174 | 
             
                WHY: When no command is specified, we default to 'run' but the args object
         | 
| 148 175 | 
             
                won't have run-specific attributes from the subparser. This function ensures
         | 
| 149 176 | 
             
                they exist with sensible defaults.
         | 
| 150 | 
            -
             | 
| 177 | 
            +
             | 
| 151 178 | 
             
                Args:
         | 
| 152 179 | 
             
                    args: Parsed arguments object to update
         | 
| 153 180 | 
             
                """
         | 
| 154 181 | 
             
                # Set defaults for run command attributes
         | 
| 155 | 
            -
                args.no_tickets = getattr(args,  | 
| 156 | 
            -
                args.no_hooks = getattr(args,  | 
| 157 | 
            -
                args.intercept_commands = getattr(args,  | 
| 158 | 
            -
                args.input = getattr(args,  | 
| 159 | 
            -
                args.non_interactive = getattr(args,  | 
| 160 | 
            -
                args.no_native_agents = getattr(args,  | 
| 161 | 
            -
                args.claude_args = getattr(args,  | 
| 162 | 
            -
                args.launch_method = getattr(args,  | 
| 163 | 
            -
                args.websocket = getattr(args,  | 
| 164 | 
            -
                args.websocket_port = getattr(args,  | 
| 182 | 
            +
                args.no_tickets = getattr(args, "no_tickets", False)
         | 
| 183 | 
            +
                args.no_hooks = getattr(args, "no_hooks", False)
         | 
| 184 | 
            +
                args.intercept_commands = getattr(args, "intercept_commands", False)
         | 
| 185 | 
            +
                args.input = getattr(args, "input", None)
         | 
| 186 | 
            +
                args.non_interactive = getattr(args, "non_interactive", False)
         | 
| 187 | 
            +
                args.no_native_agents = getattr(args, "no_native_agents", False)
         | 
| 188 | 
            +
                args.claude_args = getattr(args, "claude_args", [])
         | 
| 189 | 
            +
                args.launch_method = getattr(args, "launch_method", "exec")
         | 
| 190 | 
            +
                args.websocket = getattr(args, "websocket", False)
         | 
| 191 | 
            +
                args.websocket_port = getattr(args, "websocket_port", 8765)
         | 
| 165 192 |  | 
| 166 193 |  | 
| 167 194 | 
             
            def _execute_command(command: str, args) -> int:
         | 
| 168 195 | 
             
                """
         | 
| 169 196 | 
             
                Execute the specified command.
         | 
| 170 | 
            -
             | 
| 197 | 
            +
             | 
| 171 198 | 
             
                WHY: This function maps command names to their implementations, providing
         | 
| 172 199 | 
             
                a single place to manage command routing. Experimental commands are imported
         | 
| 173 200 | 
             
                lazily to avoid loading unnecessary code.
         | 
| 174 | 
            -
             | 
| 201 | 
            +
             | 
| 175 202 | 
             
                DESIGN DECISION: run_guarded is imported only when needed to maintain
         | 
| 176 203 | 
             
                separation between stable and experimental features.
         | 
| 177 | 
            -
             | 
| 204 | 
            +
             | 
| 178 205 | 
             
                Args:
         | 
| 179 206 | 
             
                    command: The command name to execute
         | 
| 180 207 | 
             
                    args: Parsed command line arguments
         | 
| 181 | 
            -
             | 
| 208 | 
            +
             | 
| 182 209 | 
             
                Returns:
         | 
| 183 210 | 
             
                    Exit code from the command
         | 
| 184 211 | 
             
                """
         | 
| 185 212 | 
             
                # Handle experimental run-guarded command separately with lazy import
         | 
| 186 | 
            -
                if command ==  | 
| 213 | 
            +
                if command == "run-guarded":
         | 
| 187 214 | 
             
                    # Lazy import to avoid loading experimental code unless needed
         | 
| 188 215 | 
             
                    from .commands.run_guarded import execute_run_guarded
         | 
| 216 | 
            +
             | 
| 189 217 | 
             
                    result = execute_run_guarded(args)
         | 
| 190 218 | 
             
                    return result if result is not None else 0
         | 
| 191 | 
            -
             | 
| 219 | 
            +
             | 
| 192 220 | 
             
                # Map stable commands to their implementations
         | 
| 193 221 | 
             
                command_map = {
         | 
| 194 222 | 
             
                    CLICommands.RUN.value: run_session,
         | 
| @@ -203,7 +231,7 @@ def _execute_command(command: str, args) -> int: | |
| 203 231 | 
             
                    CLICommands.CLEANUP.value: cleanup_memory,
         | 
| 204 232 | 
             
                    CLICommands.MCP.value: manage_mcp,
         | 
| 205 233 | 
             
                }
         | 
| 206 | 
            -
             | 
| 234 | 
            +
             | 
| 207 235 | 
             
                # Execute command if found
         | 
| 208 236 | 
             
                if command in command_map:
         | 
| 209 237 | 
             
                    result = command_map[command](args)
         | 
| @@ -218,4 +246,4 @@ def _execute_command(command: str, args) -> int: | |
| 218 246 |  | 
| 219 247 | 
             
            # For backward compatibility - export main
         | 
| 220 248 | 
             
            if __name__ == "__main__":
         | 
| 221 | 
            -
                sys.exit(main())
         | 
| 249 | 
            +
                sys.exit(main())
         | 
    
        claude_mpm/cli/__main__.py
    CHANGED
    
    | @@ -11,14 +11,15 @@ execution. | |
| 11 11 |  | 
| 12 12 | 
             
            Usage:
         | 
| 13 13 | 
             
                python -m claude_mpm.cli [arguments]
         | 
| 14 | 
            -
             | 
| 14 | 
            +
             | 
| 15 15 | 
             
            This is equivalent to calling the claude-mpm script directly but ensures
         | 
| 16 16 | 
             
            proper Python module context and import resolution.
         | 
| 17 17 | 
             
            """
         | 
| 18 18 |  | 
| 19 19 | 
             
            import sys
         | 
| 20 | 
            +
             | 
| 20 21 | 
             
            from . import main
         | 
| 21 22 |  | 
| 22 23 | 
             
            if __name__ == "__main__":
         | 
| 23 24 | 
             
                # Execute the main CLI function and exit with its return code
         | 
| 24 | 
            -
                sys.exit(main())
         | 
| 25 | 
            +
                sys.exit(main())
         | 
| @@ -5,30 +5,30 @@ WHY: This package contains individual command implementations, organized into | |
| 5 5 | 
             
            separate modules for better maintainability and code organization.
         | 
| 6 6 | 
             
            """
         | 
| 7 7 |  | 
| 8 | 
            -
            from .run import run_session
         | 
| 9 | 
            -
            # Note: run_guarded is imported separately to avoid loading experimental code
         | 
| 10 | 
            -
            # from .run_guarded import execute_run_guarded as run_guarded_session
         | 
| 11 | 
            -
            from .tickets import manage_tickets, list_tickets
         | 
| 12 | 
            -
            from .info import show_info
         | 
| 13 8 | 
             
            from .agents import manage_agents
         | 
| 14 | 
            -
            from .memory import manage_memory
         | 
| 15 | 
            -
            from .monitor import manage_monitor
         | 
| 16 | 
            -
            from .config import manage_config
         | 
| 17 9 | 
             
            from .aggregate import aggregate_command
         | 
| 18 10 | 
             
            from .cleanup import cleanup_memory
         | 
| 11 | 
            +
            from .config import manage_config
         | 
| 12 | 
            +
            from .info import show_info
         | 
| 19 13 | 
             
            from .mcp import manage_mcp
         | 
| 14 | 
            +
            from .memory import manage_memory
         | 
| 15 | 
            +
            from .monitor import manage_monitor
         | 
| 16 | 
            +
            from .run import run_session
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
            from .tickets import list_tickets, manage_tickets
         | 
| 20 20 |  | 
| 21 21 | 
             
            __all__ = [
         | 
| 22 | 
            -
                 | 
| 22 | 
            +
                "run_session",
         | 
| 23 23 | 
             
                # 'run_guarded_session',  # Excluded from default exports (experimental)
         | 
| 24 | 
            -
                 | 
| 25 | 
            -
                 | 
| 26 | 
            -
                 | 
| 27 | 
            -
                 | 
| 28 | 
            -
                 | 
| 29 | 
            -
                 | 
| 30 | 
            -
                 | 
| 31 | 
            -
                 | 
| 32 | 
            -
                 | 
| 33 | 
            -
                 | 
| 34 | 
            -
            ]
         | 
| 24 | 
            +
                "manage_tickets",
         | 
| 25 | 
            +
                "list_tickets",
         | 
| 26 | 
            +
                "show_info",
         | 
| 27 | 
            +
                "manage_agents",
         | 
| 28 | 
            +
                "manage_memory",
         | 
| 29 | 
            +
                "manage_monitor",
         | 
| 30 | 
            +
                "manage_config",
         | 
| 31 | 
            +
                "aggregate_command",
         | 
| 32 | 
            +
                "cleanup_memory",
         | 
| 33 | 
            +
                "manage_mcp",
         | 
| 34 | 
            +
            ]
         |