claude-mpm 3.9.11__py3-none-any.whl → 4.0.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/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 +1 -1
- 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 +203 -81
- 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 +305 -197
- 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 +104 -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/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 +74 -70
- claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
- 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 +120 -54
- 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 +223 -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 +145 -65
- 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 +170 -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.3.dist-info}/METADATA +27 -1
- claude_mpm-4.0.3.dist-info/RECORD +402 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.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.3.dist-info}/WHEEL +0 -0
- {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
| @@ -0,0 +1,271 @@ | |
| 1 | 
            +
            from pathlib import Path
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            """Agent capabilities service for discovering and generating agent capability descriptions.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            This service handles:
         | 
| 6 | 
            +
            1. Agent discovery from multiple directories (system, user, project)
         | 
| 7 | 
            +
            2. Agent categorization based on content and naming
         | 
| 8 | 
            +
            3. Generation of capability descriptions for Claude
         | 
| 9 | 
            +
            4. Fallback capabilities when no agents are found
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            Extracted from ClaudeRunner to follow Single Responsibility Principle.
         | 
| 12 | 
            +
            """
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            import logging
         | 
| 15 | 
            +
            from typing import Dict, Optional
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            from claude_mpm.core.base_service import BaseService
         | 
| 18 | 
            +
            from claude_mpm.core.logging_config import get_logger
         | 
| 19 | 
            +
            from claude_mpm.services.core.interfaces import AgentCapabilitiesInterface
         | 
| 20 | 
            +
             | 
| 21 | 
            +
             | 
| 22 | 
            +
            class AgentCapabilitiesService(BaseService, AgentCapabilitiesInterface):
         | 
| 23 | 
            +
                """Service for discovering and generating agent capability descriptions."""
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                def __init__(self):
         | 
| 26 | 
            +
                    """Initialize the agent capabilities service."""
         | 
| 27 | 
            +
                    super().__init__(name="agent_capabilities_service")
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                async def _initialize(self) -> None:
         | 
| 30 | 
            +
                    """Initialize the service. No special initialization needed."""
         | 
| 31 | 
            +
                    pass
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                async def _cleanup(self) -> None:
         | 
| 34 | 
            +
                    """Cleanup service resources. No cleanup needed."""
         | 
| 35 | 
            +
                    pass
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                def generate_agent_capabilities(self, agent_type: str = "general") -> str:
         | 
| 38 | 
            +
                    """Generate formatted agent capabilities for Claude.
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                    Args:
         | 
| 41 | 
            +
                        agent_type: Type of agent to generate capabilities for
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    Returns:
         | 
| 44 | 
            +
                        Formatted capabilities string for Claude consumption
         | 
| 45 | 
            +
                    """
         | 
| 46 | 
            +
                    # Delegate to the existing implementation
         | 
| 47 | 
            +
                    return self.generate_deployed_agent_capabilities()
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                def generate_deployed_agent_capabilities(self) -> str:
         | 
| 50 | 
            +
                    """Generate agent capabilities from deployed agents following Claude Code's hierarchy.
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    Follows the agent precedence order:
         | 
| 53 | 
            +
                    1. Project agents (.claude/agents/) - highest priority
         | 
| 54 | 
            +
                    2. User agents (~/.config/claude/agents/) - middle priority
         | 
| 55 | 
            +
                    3. System agents (claude-desktop installation) - lowest priority
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    Project agents override user/system agents with the same ID.
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                    Returns:
         | 
| 60 | 
            +
                        str: Formatted agent capabilities description
         | 
| 61 | 
            +
                    """
         | 
| 62 | 
            +
                    try:
         | 
| 63 | 
            +
                        # Track discovered agents by ID to handle overrides
         | 
| 64 | 
            +
                        discovered_agents = {}
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                        # 1. First read system agents (lowest priority)
         | 
| 67 | 
            +
                        system_agents_dirs = [
         | 
| 68 | 
            +
                            Path.home()
         | 
| 69 | 
            +
                            / "Library"
         | 
| 70 | 
            +
                            / "Application Support"
         | 
| 71 | 
            +
                            / "Claude"
         | 
| 72 | 
            +
                            / "agents",  # macOS
         | 
| 73 | 
            +
                            Path.home() / ".config" / "claude" / "agents",  # Linux
         | 
| 74 | 
            +
                            Path.home() / "AppData" / "Roaming" / "Claude" / "agents",  # Windows
         | 
| 75 | 
            +
                        ]
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                        for system_dir in system_agents_dirs:
         | 
| 78 | 
            +
                            if system_dir.exists():
         | 
| 79 | 
            +
                                self._discover_agents_from_dir(
         | 
| 80 | 
            +
                                    system_dir, discovered_agents, "system"
         | 
| 81 | 
            +
                                )
         | 
| 82 | 
            +
                                break
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                        # 2. Then read user agents (middle priority, overrides system)
         | 
| 85 | 
            +
                        user_agents_dir = Path.home() / ".config" / "claude" / "agents"
         | 
| 86 | 
            +
                        if user_agents_dir.exists():
         | 
| 87 | 
            +
                            self._discover_agents_from_dir(
         | 
| 88 | 
            +
                                user_agents_dir, discovered_agents, "user"
         | 
| 89 | 
            +
                            )
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                        # 3. Finally read project agents (highest priority, overrides all)
         | 
| 92 | 
            +
                        project_agents_dir = Path.cwd() / ".claude" / "agents"
         | 
| 93 | 
            +
                        if project_agents_dir.exists():
         | 
| 94 | 
            +
                            self._discover_agents_from_dir(
         | 
| 95 | 
            +
                                project_agents_dir, discovered_agents, "project"
         | 
| 96 | 
            +
                            )
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                        if not discovered_agents:
         | 
| 99 | 
            +
                            self.logger.warning("No agents found in any tier")
         | 
| 100 | 
            +
                            return self._get_fallback_capabilities()
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                        # Build capabilities section from discovered agents using list and join for better performance
         | 
| 103 | 
            +
                        section_parts = [
         | 
| 104 | 
            +
                            "\n## Available Agent Capabilities\n\n",
         | 
| 105 | 
            +
                            "You have the following specialized agents available for delegation:\n\n",
         | 
| 106 | 
            +
                        ]
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                        # Group agents by category
         | 
| 109 | 
            +
                        agents_by_category = {}
         | 
| 110 | 
            +
                        for agent_id, agent_info in discovered_agents.items():
         | 
| 111 | 
            +
                            category = agent_info["category"]
         | 
| 112 | 
            +
                            if category not in agents_by_category:
         | 
| 113 | 
            +
                                agents_by_category[category] = []
         | 
| 114 | 
            +
                            agents_by_category[category].append(agent_info)
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                        # Output agents by category
         | 
| 117 | 
            +
                        for category in sorted(agents_by_category.keys()):
         | 
| 118 | 
            +
                            section_parts.append(f"\n### {category} Agents\n")
         | 
| 119 | 
            +
                            for agent in sorted(
         | 
| 120 | 
            +
                                agents_by_category[category], key=lambda x: x["name"]
         | 
| 121 | 
            +
                            ):
         | 
| 122 | 
            +
                                tier_indicator = (
         | 
| 123 | 
            +
                                    f" [{agent['tier']}]" if agent["tier"] != "project" else ""
         | 
| 124 | 
            +
                                )
         | 
| 125 | 
            +
                                section_parts.append(
         | 
| 126 | 
            +
                                    f"- **{agent['name']}** (`{agent['id']}`{tier_indicator}): {agent['description']}\n"
         | 
| 127 | 
            +
                                )
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                        # Add summary
         | 
| 130 | 
            +
                        section_parts.append(
         | 
| 131 | 
            +
                            f"\n**Total Available Agents**: {len(discovered_agents)}\n"
         | 
| 132 | 
            +
                        )
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                        # Show tier distribution
         | 
| 135 | 
            +
                        tier_counts = {}
         | 
| 136 | 
            +
                        for agent in discovered_agents.values():
         | 
| 137 | 
            +
                            tier = agent["tier"]
         | 
| 138 | 
            +
                            tier_counts[tier] = tier_counts.get(tier, 0) + 1
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                        if len(tier_counts) > 1:
         | 
| 141 | 
            +
                            section_parts.append("**Agent Sources**: ")
         | 
| 142 | 
            +
                            tier_summary = []
         | 
| 143 | 
            +
                            for tier in ["project", "user", "system"]:
         | 
| 144 | 
            +
                                if tier in tier_counts:
         | 
| 145 | 
            +
                                    tier_summary.append(f"{tier_counts[tier]} {tier}")
         | 
| 146 | 
            +
                            section_parts.append(", ".join(tier_summary) + "\n")
         | 
| 147 | 
            +
             | 
| 148 | 
            +
                        section_parts.append(
         | 
| 149 | 
            +
                            "Use the agent ID in parentheses when delegating tasks via the Task tool.\n"
         | 
| 150 | 
            +
                        )
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                        # Join all parts for final section
         | 
| 153 | 
            +
                        section = "".join(section_parts)
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                        self.logger.info(
         | 
| 156 | 
            +
                            f"Generated capabilities for {len(discovered_agents)} agents "
         | 
| 157 | 
            +
                            + f"(project: {tier_counts.get('project', 0)}, "
         | 
| 158 | 
            +
                            + f"user: {tier_counts.get('user', 0)}, "
         | 
| 159 | 
            +
                            + f"system: {tier_counts.get('system', 0)})"
         | 
| 160 | 
            +
                        )
         | 
| 161 | 
            +
                        return section
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                    except Exception as e:
         | 
| 164 | 
            +
                        self.logger.error(f"Failed to generate deployed agent capabilities: {e}")
         | 
| 165 | 
            +
                        return self._get_fallback_capabilities()
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                def _discover_agents_from_dir(
         | 
| 168 | 
            +
                    self, agents_dir: Path, discovered_agents: dict, tier: str
         | 
| 169 | 
            +
                ):
         | 
| 170 | 
            +
                    """Discover agents from a specific directory and add/override in discovered_agents.
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                    Args:
         | 
| 173 | 
            +
                        agents_dir: Directory to search for agent .md files
         | 
| 174 | 
            +
                        discovered_agents: Dictionary to update with discovered agents
         | 
| 175 | 
            +
                        tier: The tier this directory represents (system/user/project)
         | 
| 176 | 
            +
                    """
         | 
| 177 | 
            +
                    if not agents_dir.exists():
         | 
| 178 | 
            +
                        return
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                    agent_files = list(agents_dir.glob("*.md"))
         | 
| 181 | 
            +
                    for agent_file in sorted(agent_files):
         | 
| 182 | 
            +
                        try:
         | 
| 183 | 
            +
                            agent_id = agent_file.stem
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                            # Read agent content
         | 
| 186 | 
            +
                            content = agent_file.read_text(encoding="utf-8")
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                            # Extract name and description from content
         | 
| 189 | 
            +
                            lines = content.split("\n")
         | 
| 190 | 
            +
                            name = agent_id.replace("-", " ").replace("_", " ").title()
         | 
| 191 | 
            +
                            description = f"Specialized agent for {agent_id.replace('-', ' ')}"
         | 
| 192 | 
            +
             | 
| 193 | 
            +
                            # Try to extract better name and description from content
         | 
| 194 | 
            +
                            for line in lines:
         | 
| 195 | 
            +
                                line = line.strip()
         | 
| 196 | 
            +
                                if line.startswith("# "):
         | 
| 197 | 
            +
                                    name = line[2:].strip()
         | 
| 198 | 
            +
                                elif line.startswith("Description:"):
         | 
| 199 | 
            +
                                    description = line[12:].strip()
         | 
| 200 | 
            +
                                elif "description" in line.lower() and ":" in line:
         | 
| 201 | 
            +
                                    description = line.split(":", 1)[1].strip()
         | 
| 202 | 
            +
             | 
| 203 | 
            +
                            # Categorize the agent
         | 
| 204 | 
            +
                            category = self._categorize_agent(agent_id, content)
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                            # Add/override in discovered agents (higher tier overrides lower)
         | 
| 207 | 
            +
                            discovered_agents[agent_id] = {
         | 
| 208 | 
            +
                                "id": agent_id,
         | 
| 209 | 
            +
                                "name": name,
         | 
| 210 | 
            +
                                "description": description,
         | 
| 211 | 
            +
                                "category": category,
         | 
| 212 | 
            +
                                "tier": tier,
         | 
| 213 | 
            +
                                "path": str(agent_file),
         | 
| 214 | 
            +
                            }
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                            self.logger.debug(f"Discovered {tier} agent: {agent_id} ({category})")
         | 
| 217 | 
            +
             | 
| 218 | 
            +
                        except Exception as e:
         | 
| 219 | 
            +
                            self.logger.debug(f"Could not parse agent {agent_file}: {e}")
         | 
| 220 | 
            +
                            continue
         | 
| 221 | 
            +
             | 
| 222 | 
            +
                def _categorize_agent(self, agent_id: str, content: str) -> str:
         | 
| 223 | 
            +
                    """Categorize an agent based on its ID and content."""
         | 
| 224 | 
            +
                    agent_id_lower = agent_id.lower()
         | 
| 225 | 
            +
                    content_lower = content.lower()
         | 
| 226 | 
            +
             | 
| 227 | 
            +
                    if "engineer" in agent_id_lower or "engineering" in content_lower:
         | 
| 228 | 
            +
                        return "Development"
         | 
| 229 | 
            +
                    elif "research" in agent_id_lower or "research" in content_lower:
         | 
| 230 | 
            +
                        return "Research"
         | 
| 231 | 
            +
                    elif (
         | 
| 232 | 
            +
                        "qa" in agent_id_lower
         | 
| 233 | 
            +
                        or "test" in agent_id_lower
         | 
| 234 | 
            +
                        or "quality" in content_lower
         | 
| 235 | 
            +
                    ):
         | 
| 236 | 
            +
                        return "Quality Assurance"
         | 
| 237 | 
            +
                    elif "doc" in agent_id_lower or "documentation" in content_lower:
         | 
| 238 | 
            +
                        return "Documentation"
         | 
| 239 | 
            +
                    elif "security" in agent_id_lower or "security" in content_lower:
         | 
| 240 | 
            +
                        return "Security"
         | 
| 241 | 
            +
                    elif "data" in agent_id_lower or "database" in content_lower:
         | 
| 242 | 
            +
                        return "Data"
         | 
| 243 | 
            +
                    elif (
         | 
| 244 | 
            +
                        "ops" in agent_id_lower
         | 
| 245 | 
            +
                        or "deploy" in agent_id_lower
         | 
| 246 | 
            +
                        or "operations" in content_lower
         | 
| 247 | 
            +
                    ):
         | 
| 248 | 
            +
                        return "Operations"
         | 
| 249 | 
            +
                    elif "git" in agent_id_lower or "version" in content_lower:
         | 
| 250 | 
            +
                        return "Version Control"
         | 
| 251 | 
            +
                    else:
         | 
| 252 | 
            +
                        return "General"
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                def _get_fallback_capabilities(self) -> str:
         | 
| 255 | 
            +
                    """Return fallback agent capabilities when deployed agents can't be read."""
         | 
| 256 | 
            +
                    return """
         | 
| 257 | 
            +
            ## Available Agent Capabilities
         | 
| 258 | 
            +
             | 
| 259 | 
            +
            You have the following specialized agents available for delegation:
         | 
| 260 | 
            +
             | 
| 261 | 
            +
            - **Engineer Agent**: Code implementation and development
         | 
| 262 | 
            +
            - **Research Agent**: Investigation and analysis
         | 
| 263 | 
            +
            - **QA Agent**: Testing and quality assurance
         | 
| 264 | 
            +
            - **Documentation Agent**: Documentation creation and maintenance
         | 
| 265 | 
            +
            - **Security Agent**: Security analysis and protection
         | 
| 266 | 
            +
            - **Data Engineer Agent**: Data management and pipelines
         | 
| 267 | 
            +
            - **Ops Agent**: Deployment and operations
         | 
| 268 | 
            +
            - **Version Control Agent**: Git operations and version management
         | 
| 269 | 
            +
             | 
| 270 | 
            +
            Use these agents to delegate specialized work via the Task tool.
         | 
| 271 | 
            +
            """
         | 
| @@ -1,52 +1,43 @@ | |
| 1 1 | 
             
            """Agent services module - hierarchical organization of agent-related services."""
         | 
| 2 2 |  | 
| 3 3 | 
             
            # Registry exports
         | 
| 4 | 
            -
            from .registry.agent_registry import (
         | 
| 5 | 
            -
                AgentRegistry,
         | 
| 6 | 
            -
                AgentMetadata,
         | 
| 7 | 
            -
                AgentTier,
         | 
| 8 | 
            -
                AgentType,
         | 
| 9 | 
            -
            )
         | 
| 10 | 
            -
            from .registry.deployed_agent_discovery import DeployedAgentDiscovery
         | 
| 11 | 
            -
            from .registry.modification_tracker import (
         | 
| 12 | 
            -
                AgentModificationTracker,
         | 
| 13 | 
            -
                ModificationType,
         | 
| 14 | 
            -
                ModificationTier,
         | 
| 15 | 
            -
                AgentModification,
         | 
| 16 | 
            -
                ModificationHistory,
         | 
| 17 | 
            -
            )
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            # Loading exports
         | 
| 20 | 
            -
            from .loading.framework_agent_loader import FrameworkAgentLoader
         | 
| 21 | 
            -
            from .loading.agent_profile_loader import AgentProfileLoader
         | 
| 22 | 
            -
            from .loading.base_agent_manager import BaseAgentManager
         | 
| 23 | 
            -
             | 
| 24 4 | 
             
            # Deployment exports
         | 
| 25 5 | 
             
            from .deployment.agent_deployment import AgentDeploymentService
         | 
| 26 6 | 
             
            from .deployment.agent_lifecycle_manager import (
         | 
| 27 7 | 
             
                AgentLifecycleManager,
         | 
| 28 | 
            -
                LifecycleState,
         | 
| 29 | 
            -
                LifecycleOperation,
         | 
| 30 8 | 
             
                AgentLifecycleRecord,
         | 
| 9 | 
            +
                LifecycleOperation,
         | 
| 31 10 | 
             
                LifecycleOperationResult,
         | 
| 11 | 
            +
                LifecycleState,
         | 
| 32 12 | 
             
            )
         | 
| 33 13 | 
             
            from .deployment.agent_versioning import AgentVersionManager
         | 
| 14 | 
            +
            from .loading.agent_profile_loader import AgentProfileLoader
         | 
| 15 | 
            +
            from .loading.base_agent_manager import BaseAgentManager
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            # Loading exports
         | 
| 18 | 
            +
            from .loading.framework_agent_loader import FrameworkAgentLoader
         | 
| 19 | 
            +
            from .management.agent_capabilities_generator import AgentCapabilitiesGenerator
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            # Management exports
         | 
| 22 | 
            +
            from .management.agent_management_service import AgentManager
         | 
| 34 23 |  | 
| 35 24 | 
             
            # Memory exports
         | 
| 36 | 
            -
            from .memory.agent_memory_manager import  | 
| 37 | 
            -
                AgentMemoryManager,
         | 
| 38 | 
            -
                get_memory_manager,
         | 
| 39 | 
            -
            )
         | 
| 25 | 
            +
            from .memory.agent_memory_manager import AgentMemoryManager, get_memory_manager
         | 
| 40 26 | 
             
            from .memory.agent_persistence_service import (
         | 
| 41 27 | 
             
                AgentPersistenceService,
         | 
| 42 | 
            -
                PersistenceStrategy,
         | 
| 43 28 | 
             
                PersistenceOperation,
         | 
| 44 29 | 
             
                PersistenceRecord,
         | 
| 30 | 
            +
                PersistenceStrategy,
         | 
| 31 | 
            +
            )
         | 
| 32 | 
            +
            from .registry import AgentMetadata, AgentRegistry, AgentTier, AgentType
         | 
| 33 | 
            +
            from .registry.deployed_agent_discovery import DeployedAgentDiscovery
         | 
| 34 | 
            +
            from .registry.modification_tracker import (
         | 
| 35 | 
            +
                AgentModification,
         | 
| 36 | 
            +
                AgentModificationTracker,
         | 
| 37 | 
            +
                ModificationHistory,
         | 
| 38 | 
            +
                ModificationTier,
         | 
| 39 | 
            +
                ModificationType,
         | 
| 45 40 | 
             
            )
         | 
| 46 | 
            -
             | 
| 47 | 
            -
            # Management exports
         | 
| 48 | 
            -
            from .management.agent_management_service import AgentManager
         | 
| 49 | 
            -
            from .management.agent_capabilities_generator import AgentCapabilitiesGenerator
         | 
| 50 41 |  | 
| 51 42 | 
             
            __all__ = [
         | 
| 52 43 | 
             
                # Registry
         | 
| @@ -82,4 +73,4 @@ __all__ = [ | |
| 82 73 | 
             
                # Management
         | 
| 83 74 | 
             
                "AgentManager",
         | 
| 84 75 | 
             
                "AgentCapabilitiesGenerator",
         | 
| 85 | 
            -
            ]
         | 
| 76 | 
            +
            ]
         | 
| @@ -3,10 +3,10 @@ | |
| 3 3 | 
             
            from .agent_deployment import AgentDeploymentService
         | 
| 4 4 | 
             
            from .agent_lifecycle_manager import (
         | 
| 5 5 | 
             
                AgentLifecycleManager,
         | 
| 6 | 
            -
                LifecycleState,
         | 
| 7 | 
            -
                LifecycleOperation,
         | 
| 8 6 | 
             
                AgentLifecycleRecord,
         | 
| 7 | 
            +
                LifecycleOperation,
         | 
| 9 8 | 
             
                LifecycleOperationResult,
         | 
| 9 | 
            +
                LifecycleState,
         | 
| 10 10 | 
             
            )
         | 
| 11 11 | 
             
            from .agent_versioning import AgentVersionManager
         | 
| 12 12 |  | 
| @@ -18,4 +18,4 @@ __all__ = [ | |
| 18 18 | 
             
                "AgentLifecycleRecord",
         | 
| 19 19 | 
             
                "LifecycleOperationResult",
         | 
| 20 20 | 
             
                "AgentVersionManager",
         | 
| 21 | 
            -
            ]
         | 
| 21 | 
            +
            ]
         | 
| @@ -0,0 +1,310 @@ | |
| 1 | 
            +
            """Agent configuration provider for deployment service.
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            This module provides agent-specific configurations and tools for different agent types.
         | 
| 4 | 
            +
            Extracted from AgentDeploymentService to reduce complexity and improve maintainability.
         | 
| 5 | 
            +
            """
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            from typing import Any, Dict, List
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            from claude_mpm.core.constants import ResourceLimits, SystemLimits, TimeoutConfig
         | 
| 10 | 
            +
             | 
| 11 | 
            +
             | 
| 12 | 
            +
            class AgentConfigProvider:
         | 
| 13 | 
            +
                """Provides agent-specific configurations and tools."""
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                @staticmethod
         | 
| 16 | 
            +
                def get_agent_tools(agent_name: str, metadata: Dict[str, Any]) -> List[str]:
         | 
| 17 | 
            +
                    """
         | 
| 18 | 
            +
                    Get appropriate tools for an agent based on its type.
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    Args:
         | 
| 21 | 
            +
                        agent_name: Name of the agent
         | 
| 22 | 
            +
                        metadata: Agent metadata
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    Returns:
         | 
| 25 | 
            +
                        List of tool names
         | 
| 26 | 
            +
                    """
         | 
| 27 | 
            +
                    # Base tools all agents should have
         | 
| 28 | 
            +
                    base_tools = [
         | 
| 29 | 
            +
                        "Read",
         | 
| 30 | 
            +
                        "Write",
         | 
| 31 | 
            +
                        "Edit",
         | 
| 32 | 
            +
                        "MultiEdit",
         | 
| 33 | 
            +
                        "Grep",
         | 
| 34 | 
            +
                        "Glob",
         | 
| 35 | 
            +
                        "LS",
         | 
| 36 | 
            +
                        "TodoWrite",
         | 
| 37 | 
            +
                    ]
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    # Agent-specific tools
         | 
| 40 | 
            +
                    agent_tools = {
         | 
| 41 | 
            +
                        "engineer": base_tools + ["Bash", "WebSearch", "WebFetch"],
         | 
| 42 | 
            +
                        "qa": base_tools + ["Bash", "WebSearch"],
         | 
| 43 | 
            +
                        "documentation": base_tools + ["WebSearch", "WebFetch"],
         | 
| 44 | 
            +
                        "research": base_tools + ["WebSearch", "WebFetch", "Bash"],
         | 
| 45 | 
            +
                        "security": base_tools + ["Bash", "WebSearch", "Grep"],
         | 
| 46 | 
            +
                        "ops": base_tools + ["Bash", "WebSearch"],
         | 
| 47 | 
            +
                        "data_engineer": base_tools + ["Bash", "WebSearch"],
         | 
| 48 | 
            +
                        "version_control": base_tools + ["Bash"],
         | 
| 49 | 
            +
                    }
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    # Return specific tools or default set
         | 
| 52 | 
            +
                    return agent_tools.get(agent_name, base_tools + ["Bash", "WebSearch"])
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                @staticmethod
         | 
| 55 | 
            +
                def get_agent_specific_config(agent_name: str) -> Dict[str, Any]:
         | 
| 56 | 
            +
                    """
         | 
| 57 | 
            +
                    Get agent-specific configuration based on agent type.
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                    Args:
         | 
| 60 | 
            +
                        agent_name: Name of the agent
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    Returns:
         | 
| 63 | 
            +
                        Dictionary of agent-specific configuration
         | 
| 64 | 
            +
                    """
         | 
| 65 | 
            +
                    # Base configuration all agents share
         | 
| 66 | 
            +
                    base_config = {
         | 
| 67 | 
            +
                        "timeout": TimeoutConfig.DEFAULT_TIMEOUT,
         | 
| 68 | 
            +
                        "max_tokens": SystemLimits.MAX_TOKEN_LIMIT,
         | 
| 69 | 
            +
                        "memory_limit": ResourceLimits.STANDARD_MEMORY_RANGE[
         | 
| 70 | 
            +
                            0
         | 
| 71 | 
            +
                        ],  # Use lower bound of standard memory
         | 
| 72 | 
            +
                        "cpu_limit": ResourceLimits.STANDARD_CPU_RANGE[
         | 
| 73 | 
            +
                            1
         | 
| 74 | 
            +
                        ],  # Use upper bound of standard CPU
         | 
| 75 | 
            +
                        "network_access": True,
         | 
| 76 | 
            +
                    }
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                    # Agent-specific configurations
         | 
| 79 | 
            +
                    configs = AgentConfigProvider._get_agent_configs(base_config)
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                    # Return the specific config or a default
         | 
| 82 | 
            +
                    return configs.get(
         | 
| 83 | 
            +
                        agent_name, AgentConfigProvider._get_default_config(agent_name, base_config)
         | 
| 84 | 
            +
                    )
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                @staticmethod
         | 
| 87 | 
            +
                def _get_agent_configs(base_config: Dict[str, Any]) -> Dict[str, Dict[str, Any]]:
         | 
| 88 | 
            +
                    """Get all agent-specific configurations."""
         | 
| 89 | 
            +
                    return {
         | 
| 90 | 
            +
                        "engineer": {
         | 
| 91 | 
            +
                            **base_config,
         | 
| 92 | 
            +
                            "description": "Code implementation, development, and inline documentation",
         | 
| 93 | 
            +
                            "tags": '["engineer", "development", "coding", "implementation"]',
         | 
| 94 | 
            +
                            "tools": '["Read", "Write", "Edit", "MultiEdit", "Bash", "Grep", "Glob", "LS", "WebSearch", "TodoWrite"]',
         | 
| 95 | 
            +
                            "temperature": 0.2,
         | 
| 96 | 
            +
                            "when_to_use": [
         | 
| 97 | 
            +
                                "Code implementation needed",
         | 
| 98 | 
            +
                                "Bug fixes required",
         | 
| 99 | 
            +
                                "Refactoring tasks",
         | 
| 100 | 
            +
                            ],
         | 
| 101 | 
            +
                            "specialized_knowledge": [
         | 
| 102 | 
            +
                                "Programming best practices",
         | 
| 103 | 
            +
                                "Design patterns",
         | 
| 104 | 
            +
                                "Code optimization",
         | 
| 105 | 
            +
                            ],
         | 
| 106 | 
            +
                            "unique_capabilities": [
         | 
| 107 | 
            +
                                "Write production code",
         | 
| 108 | 
            +
                                "Debug complex issues",
         | 
| 109 | 
            +
                                "Refactor codebases",
         | 
| 110 | 
            +
                            ],
         | 
| 111 | 
            +
                            "primary_role": "Code implementation and development",
         | 
| 112 | 
            +
                            "specializations": '["coding", "debugging", "refactoring", "optimization"]',
         | 
| 113 | 
            +
                            "authority": "ALL code implementation decisions",
         | 
| 114 | 
            +
                        },
         | 
| 115 | 
            +
                        "qa": {
         | 
| 116 | 
            +
                            **base_config,
         | 
| 117 | 
            +
                            "description": "Quality assurance, testing, and validation",
         | 
| 118 | 
            +
                            "tags": '["qa", "testing", "quality", "validation"]',
         | 
| 119 | 
            +
                            "tools": '["Read", "Write", "Edit", "Bash", "Grep", "Glob", "LS", "TodoWrite"]',
         | 
| 120 | 
            +
                            "temperature": 0.1,
         | 
| 121 | 
            +
                            "when_to_use": [
         | 
| 122 | 
            +
                                "Testing needed",
         | 
| 123 | 
            +
                                "Quality validation",
         | 
| 124 | 
            +
                                "Test coverage analysis",
         | 
| 125 | 
            +
                            ],
         | 
| 126 | 
            +
                            "specialized_knowledge": [
         | 
| 127 | 
            +
                                "Testing methodologies",
         | 
| 128 | 
            +
                                "Quality metrics",
         | 
| 129 | 
            +
                                "Test automation",
         | 
| 130 | 
            +
                            ],
         | 
| 131 | 
            +
                            "unique_capabilities": [
         | 
| 132 | 
            +
                                "Execute test suites",
         | 
| 133 | 
            +
                                "Identify edge cases",
         | 
| 134 | 
            +
                                "Validate quality",
         | 
| 135 | 
            +
                            ],
         | 
| 136 | 
            +
                            "primary_role": "Testing and quality assurance",
         | 
| 137 | 
            +
                            "specializations": '["testing", "validation", "quality-assurance", "coverage"]',
         | 
| 138 | 
            +
                            "authority": "ALL testing and quality decisions",
         | 
| 139 | 
            +
                        },
         | 
| 140 | 
            +
                        "documentation": {
         | 
| 141 | 
            +
                            **base_config,
         | 
| 142 | 
            +
                            "description": "Documentation creation, maintenance, and changelog generation",
         | 
| 143 | 
            +
                            "tags": '["documentation", "writing", "changelog", "docs"]',
         | 
| 144 | 
            +
                            "tools": '["Read", "Write", "Edit", "MultiEdit", "Grep", "Glob", "LS", "WebSearch", "TodoWrite"]',
         | 
| 145 | 
            +
                            "temperature": 0.3,
         | 
| 146 | 
            +
                            "when_to_use": [
         | 
| 147 | 
            +
                                "Documentation updates needed",
         | 
| 148 | 
            +
                                "Changelog generation",
         | 
| 149 | 
            +
                                "README updates",
         | 
| 150 | 
            +
                            ],
         | 
| 151 | 
            +
                            "specialized_knowledge": [
         | 
| 152 | 
            +
                                "Technical writing",
         | 
| 153 | 
            +
                                "Documentation standards",
         | 
| 154 | 
            +
                                "Semantic versioning",
         | 
| 155 | 
            +
                            ],
         | 
| 156 | 
            +
                            "unique_capabilities": [
         | 
| 157 | 
            +
                                "Create clear documentation",
         | 
| 158 | 
            +
                                "Generate changelogs",
         | 
| 159 | 
            +
                                "Maintain docs",
         | 
| 160 | 
            +
                            ],
         | 
| 161 | 
            +
                            "primary_role": "Documentation and technical writing",
         | 
| 162 | 
            +
                            "specializations": '["technical-writing", "changelog", "api-docs", "guides"]',
         | 
| 163 | 
            +
                            "authority": "ALL documentation decisions",
         | 
| 164 | 
            +
                        },
         | 
| 165 | 
            +
                        "research": {
         | 
| 166 | 
            +
                            **base_config,
         | 
| 167 | 
            +
                            "description": "Technical research, analysis, and investigation",
         | 
| 168 | 
            +
                            "tags": '["research", "analysis", "investigation", "evaluation"]',
         | 
| 169 | 
            +
                            "tools": '["Read", "Grep", "Glob", "LS", "WebSearch", "WebFetch", "TodoWrite"]',
         | 
| 170 | 
            +
                            "temperature": 0.4,
         | 
| 171 | 
            +
                            "when_to_use": [
         | 
| 172 | 
            +
                                "Technical research needed",
         | 
| 173 | 
            +
                                "Solution evaluation",
         | 
| 174 | 
            +
                                "Best practices investigation",
         | 
| 175 | 
            +
                            ],
         | 
| 176 | 
            +
                            "specialized_knowledge": [
         | 
| 177 | 
            +
                                "Research methodologies",
         | 
| 178 | 
            +
                                "Technical analysis",
         | 
| 179 | 
            +
                                "Evaluation frameworks",
         | 
| 180 | 
            +
                            ],
         | 
| 181 | 
            +
                            "unique_capabilities": [
         | 
| 182 | 
            +
                                "Deep investigation",
         | 
| 183 | 
            +
                                "Comparative analysis",
         | 
| 184 | 
            +
                                "Evidence-based recommendations",
         | 
| 185 | 
            +
                            ],
         | 
| 186 | 
            +
                            "primary_role": "Research and technical analysis",
         | 
| 187 | 
            +
                            "specializations": '["investigation", "analysis", "evaluation", "recommendations"]',
         | 
| 188 | 
            +
                            "authority": "ALL research decisions",
         | 
| 189 | 
            +
                        },
         | 
| 190 | 
            +
                        "security": {
         | 
| 191 | 
            +
                            **base_config,
         | 
| 192 | 
            +
                            "description": "Security analysis, vulnerability assessment, and protection",
         | 
| 193 | 
            +
                            "tags": '["security", "vulnerability", "protection", "audit"]',
         | 
| 194 | 
            +
                            "tools": '["Read", "Grep", "Glob", "LS", "Bash", "WebSearch", "TodoWrite"]',
         | 
| 195 | 
            +
                            "temperature": 0.1,
         | 
| 196 | 
            +
                            "when_to_use": [
         | 
| 197 | 
            +
                                "Security review needed",
         | 
| 198 | 
            +
                                "Vulnerability assessment",
         | 
| 199 | 
            +
                                "Security audit",
         | 
| 200 | 
            +
                            ],
         | 
| 201 | 
            +
                            "specialized_knowledge": [
         | 
| 202 | 
            +
                                "Security best practices",
         | 
| 203 | 
            +
                                "OWASP guidelines",
         | 
| 204 | 
            +
                                "Vulnerability patterns",
         | 
| 205 | 
            +
                            ],
         | 
| 206 | 
            +
                            "unique_capabilities": [
         | 
| 207 | 
            +
                                "Identify vulnerabilities",
         | 
| 208 | 
            +
                                "Security auditing",
         | 
| 209 | 
            +
                                "Threat modeling",
         | 
| 210 | 
            +
                            ],
         | 
| 211 | 
            +
                            "primary_role": "Security analysis and protection",
         | 
| 212 | 
            +
                            "specializations": '["vulnerability-assessment", "security-audit", "threat-modeling", "protection"]',
         | 
| 213 | 
            +
                            "authority": "ALL security decisions",
         | 
| 214 | 
            +
                        },
         | 
| 215 | 
            +
                        "ops": {
         | 
| 216 | 
            +
                            **base_config,
         | 
| 217 | 
            +
                            "description": "Deployment, operations, and infrastructure management",
         | 
| 218 | 
            +
                            "tags": '["ops", "deployment", "infrastructure", "devops"]',
         | 
| 219 | 
            +
                            "tools": '["Read", "Write", "Edit", "Bash", "Grep", "Glob", "LS", "TodoWrite"]',
         | 
| 220 | 
            +
                            "temperature": 0.2,
         | 
| 221 | 
            +
                            "when_to_use": [
         | 
| 222 | 
            +
                                "Deployment configuration",
         | 
| 223 | 
            +
                                "Infrastructure setup",
         | 
| 224 | 
            +
                                "CI/CD pipeline work",
         | 
| 225 | 
            +
                            ],
         | 
| 226 | 
            +
                            "specialized_knowledge": [
         | 
| 227 | 
            +
                                "Deployment best practices",
         | 
| 228 | 
            +
                                "Infrastructure as code",
         | 
| 229 | 
            +
                                "CI/CD",
         | 
| 230 | 
            +
                            ],
         | 
| 231 | 
            +
                            "unique_capabilities": [
         | 
| 232 | 
            +
                                "Configure deployments",
         | 
| 233 | 
            +
                                "Manage infrastructure",
         | 
| 234 | 
            +
                                "Automate operations",
         | 
| 235 | 
            +
                            ],
         | 
| 236 | 
            +
                            "primary_role": "Operations and deployment management",
         | 
| 237 | 
            +
                            "specializations": '["deployment", "infrastructure", "automation", "monitoring"]',
         | 
| 238 | 
            +
                            "authority": "ALL operations decisions",
         | 
| 239 | 
            +
                        },
         | 
| 240 | 
            +
                        "data_engineer": {
         | 
| 241 | 
            +
                            **base_config,
         | 
| 242 | 
            +
                            "description": "Data pipeline management and AI API integrations",
         | 
| 243 | 
            +
                            "tags": '["data", "pipeline", "etl", "ai-integration"]',
         | 
| 244 | 
            +
                            "tools": '["Read", "Write", "Edit", "Bash", "Grep", "Glob", "LS", "WebSearch", "TodoWrite"]',
         | 
| 245 | 
            +
                            "temperature": 0.2,
         | 
| 246 | 
            +
                            "when_to_use": [
         | 
| 247 | 
            +
                                "Data pipeline setup",
         | 
| 248 | 
            +
                                "Database design",
         | 
| 249 | 
            +
                                "AI API integration",
         | 
| 250 | 
            +
                            ],
         | 
| 251 | 
            +
                            "specialized_knowledge": [
         | 
| 252 | 
            +
                                "Data architectures",
         | 
| 253 | 
            +
                                "ETL processes",
         | 
| 254 | 
            +
                                "AI/ML APIs",
         | 
| 255 | 
            +
                            ],
         | 
| 256 | 
            +
                            "unique_capabilities": [
         | 
| 257 | 
            +
                                "Design data schemas",
         | 
| 258 | 
            +
                                "Build pipelines",
         | 
| 259 | 
            +
                                "Integrate AI services",
         | 
| 260 | 
            +
                            ],
         | 
| 261 | 
            +
                            "primary_role": "Data engineering and AI integration",
         | 
| 262 | 
            +
                            "specializations": '["data-pipelines", "etl", "database", "ai-integration"]',
         | 
| 263 | 
            +
                            "authority": "ALL data engineering decisions",
         | 
| 264 | 
            +
                        },
         | 
| 265 | 
            +
                        "version_control": {
         | 
| 266 | 
            +
                            **base_config,
         | 
| 267 | 
            +
                            "description": "Git operations, version management, and release coordination",
         | 
| 268 | 
            +
                            "tags": '["git", "version-control", "release", "branching"]',
         | 
| 269 | 
            +
                            "tools": '["Read", "Bash", "Grep", "Glob", "LS", "TodoWrite"]',
         | 
| 270 | 
            +
                            "temperature": 0.1,
         | 
| 271 | 
            +
                            "network_access": False,  # Git operations are local
         | 
| 272 | 
            +
                            "when_to_use": [
         | 
| 273 | 
            +
                                "Git operations needed",
         | 
| 274 | 
            +
                                "Version bumping",
         | 
| 275 | 
            +
                                "Release management",
         | 
| 276 | 
            +
                            ],
         | 
| 277 | 
            +
                            "specialized_knowledge": [
         | 
| 278 | 
            +
                                "Git workflows",
         | 
| 279 | 
            +
                                "Semantic versioning",
         | 
| 280 | 
            +
                                "Release processes",
         | 
| 281 | 
            +
                            ],
         | 
| 282 | 
            +
                            "unique_capabilities": [
         | 
| 283 | 
            +
                                "Complex git operations",
         | 
| 284 | 
            +
                                "Version management",
         | 
| 285 | 
            +
                                "Release coordination",
         | 
| 286 | 
            +
                            ],
         | 
| 287 | 
            +
                            "primary_role": "Version control and release management",
         | 
| 288 | 
            +
                            "specializations": '["git", "versioning", "branching", "releases"]',
         | 
| 289 | 
            +
                            "authority": "ALL version control decisions",
         | 
| 290 | 
            +
                        },
         | 
| 291 | 
            +
                    }
         | 
| 292 | 
            +
             | 
| 293 | 
            +
                @staticmethod
         | 
| 294 | 
            +
                def _get_default_config(
         | 
| 295 | 
            +
                    agent_name: str, base_config: Dict[str, Any]
         | 
| 296 | 
            +
                ) -> Dict[str, Any]:
         | 
| 297 | 
            +
                    """Get default configuration for unknown agent types."""
         | 
| 298 | 
            +
                    return {
         | 
| 299 | 
            +
                        **base_config,
         | 
| 300 | 
            +
                        "description": f"{agent_name.title()} agent for specialized tasks",
         | 
| 301 | 
            +
                        "tags": f'["{agent_name}", "specialized", "mpm"]',
         | 
| 302 | 
            +
                        "tools": '["Read", "Write", "Edit", "Grep", "Glob", "LS", "TodoWrite"]',
         | 
| 303 | 
            +
                        "temperature": 0.3,
         | 
| 304 | 
            +
                        "when_to_use": [f"When {agent_name} expertise is needed"],
         | 
| 305 | 
            +
                        "specialized_knowledge": [f"{agent_name.title()} domain knowledge"],
         | 
| 306 | 
            +
                        "unique_capabilities": [f"{agent_name.title()} specialized operations"],
         | 
| 307 | 
            +
                        "primary_role": f"{agent_name.title()} operations",
         | 
| 308 | 
            +
                        "specializations": f'["{agent_name}"]',
         | 
| 309 | 
            +
                        "authority": f"ALL {agent_name} decisions",
         | 
| 310 | 
            +
                    }
         |