claude-mpm 3.9.9__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 +155 -0
- 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 +90 -49
- claude_mpm/cli/__main__.py +3 -2
- claude_mpm/cli/commands/__init__.py +21 -18
- 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 +143 -762
- 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 -1150
- 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 +217 -0
- claude_mpm/config/paths.py +94 -208
- claude_mpm/config/socketio_config.py +84 -73
- claude_mpm/constants.py +36 -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 +571 -0
- 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 +40 -23
- 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 +14 -21
- 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 +97 -93
- claude_mpm/services/mcp_gateway/main.py +307 -127
- claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
- claude_mpm/services/mcp_gateway/registry/service_registry.py +100 -101
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
- claude_mpm/services/mcp_gateway/server/__init__.py +4 -4
- claude_mpm/services/mcp_gateway/server/{mcp_server.py → mcp_gateway.py} +149 -153
- 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 +110 -121
- 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 +20 -534
- 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 +9 -0
- claude_mpm/storage/state_storage.py +552 -0
- 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.9.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +51 -2
- claude_mpm-4.0.3.dist-info/RECORD +402 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
- claude_mpm/config/memory_guardian_config.py +0 -325
- claude_mpm/core/config_paths.py +0 -150
- 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/memory_guardian.py +0 -770
- claude_mpm/services/mcp_gateway/server/mcp_server_simple.py +0 -444
- 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.9.dist-info/RECORD +0 -293
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
- {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
| @@ -0,0 +1,468 @@ | |
| 1 | 
            +
            #!/usr/bin/env python3
         | 
| 2 | 
            +
            """
         | 
| 3 | 
            +
            Memory Template Generator
         | 
| 4 | 
            +
            ========================
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Generates project-specific memory templates for agents based on project analysis.
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            This module provides:
         | 
| 9 | 
            +
            - Project-specific memory template creation
         | 
| 10 | 
            +
            - Section generation based on project characteristics
         | 
| 11 | 
            +
            - Domain-specific knowledge starters
         | 
| 12 | 
            +
            - Fallback templates when project analysis fails
         | 
| 13 | 
            +
            """
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            import logging
         | 
| 16 | 
            +
            from datetime import datetime
         | 
| 17 | 
            +
            from pathlib import Path
         | 
| 18 | 
            +
            from typing import Any, Dict, List
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            from claude_mpm.core.config import Config
         | 
| 21 | 
            +
            from claude_mpm.services.project.analyzer import ProjectAnalyzer
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             | 
| 24 | 
            +
            class MemoryTemplateGenerator:
         | 
| 25 | 
            +
                """Generates project-specific memory templates for agents.
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                WHY: Instead of generic templates, agents need project-specific knowledge
         | 
| 28 | 
            +
                from the start. This class analyzes the current project and creates contextual
         | 
| 29 | 
            +
                memories with actual project characteristics.
         | 
| 30 | 
            +
                """
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                REQUIRED_SECTIONS = [
         | 
| 33 | 
            +
                    "Project Architecture",
         | 
| 34 | 
            +
                    "Implementation Guidelines",
         | 
| 35 | 
            +
                    "Common Mistakes to Avoid",
         | 
| 36 | 
            +
                    "Current Technical Context",
         | 
| 37 | 
            +
                ]
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def __init__(
         | 
| 40 | 
            +
                    self, config: Config, working_directory: Path, project_analyzer: ProjectAnalyzer
         | 
| 41 | 
            +
                ):
         | 
| 42 | 
            +
                    """Initialize the template generator.
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                    Args:
         | 
| 45 | 
            +
                        config: Configuration object
         | 
| 46 | 
            +
                        working_directory: Working directory path
         | 
| 47 | 
            +
                        project_analyzer: Project analyzer instance
         | 
| 48 | 
            +
                    """
         | 
| 49 | 
            +
                    self.config = config
         | 
| 50 | 
            +
                    self.working_directory = working_directory
         | 
| 51 | 
            +
                    self.project_analyzer = project_analyzer
         | 
| 52 | 
            +
                    self.logger = logging.getLogger(f"{__name__}.{self.__class__.__name__}")
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def create_default_memory(self, agent_id: str, limits: Dict[str, Any]) -> str:
         | 
| 55 | 
            +
                    """Create project-specific default memory file for agent.
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    Args:
         | 
| 58 | 
            +
                        agent_id: The agent identifier
         | 
| 59 | 
            +
                        limits: Memory limits for this agent
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                    Returns:
         | 
| 62 | 
            +
                        str: The project-specific memory template content
         | 
| 63 | 
            +
                    """
         | 
| 64 | 
            +
                    # Convert agent_id to proper name, handling cases like "test_agent" -> "Test"
         | 
| 65 | 
            +
                    agent_name = agent_id.replace("_agent", "").replace("_", " ").title()
         | 
| 66 | 
            +
                    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                    # Analyze the project for context-specific content
         | 
| 69 | 
            +
                    try:
         | 
| 70 | 
            +
                        project_characteristics = self.project_analyzer.analyze_project()
         | 
| 71 | 
            +
                        project_context = self.project_analyzer.get_project_context_summary()
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                        self.logger.info(
         | 
| 74 | 
            +
                            f"Creating project-specific memory for {agent_id} using analyzed project context"
         | 
| 75 | 
            +
                        )
         | 
| 76 | 
            +
                    except Exception as e:
         | 
| 77 | 
            +
                        self.logger.warning(
         | 
| 78 | 
            +
                            f"Error analyzing project for {agent_id}, falling back to basic template: {e}"
         | 
| 79 | 
            +
                        )
         | 
| 80 | 
            +
                        return self._create_basic_memory_template(agent_id, limits)
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                    # Create project-specific sections
         | 
| 83 | 
            +
                    architecture_items = self._generate_architecture_section(
         | 
| 84 | 
            +
                        project_characteristics
         | 
| 85 | 
            +
                    )
         | 
| 86 | 
            +
                    coding_patterns = self._generate_coding_patterns_section(
         | 
| 87 | 
            +
                        project_characteristics
         | 
| 88 | 
            +
                    )
         | 
| 89 | 
            +
                    implementation_guidelines = self._generate_implementation_guidelines(
         | 
| 90 | 
            +
                        project_characteristics
         | 
| 91 | 
            +
                    )
         | 
| 92 | 
            +
                    tech_context = self._generate_technical_context(project_characteristics)
         | 
| 93 | 
            +
                    integration_points = self._generate_integration_points(project_characteristics)
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                    template = f"""# {agent_name} Agent Memory - {project_characteristics.project_name}
         | 
| 96 | 
            +
             | 
| 97 | 
            +
            <!-- MEMORY LIMITS: {limits['max_file_size_kb']}KB max | {limits['max_sections']} sections max | {limits['max_items_per_section']} items per section -->
         | 
| 98 | 
            +
            <!-- Last Updated: {timestamp} | Auto-updated by: {agent_id} -->
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            ## Project Context
         | 
| 101 | 
            +
            {project_context}
         | 
| 102 | 
            +
             | 
| 103 | 
            +
            ## Project Architecture
         | 
| 104 | 
            +
            {self._format_section_items(architecture_items)}
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            ## Coding Patterns Learned
         | 
| 107 | 
            +
            {self._format_section_items(coding_patterns)}
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            ## Implementation Guidelines
         | 
| 110 | 
            +
            {self._format_section_items(implementation_guidelines)}
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            ## Domain-Specific Knowledge
         | 
| 113 | 
            +
            <!-- Agent-specific knowledge for {project_characteristics.project_name} domain -->
         | 
| 114 | 
            +
            {self._generate_domain_knowledge_starters(project_characteristics, agent_id)}
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            ## Effective Strategies
         | 
| 117 | 
            +
            <!-- Successful approaches discovered through experience -->
         | 
| 118 | 
            +
             | 
| 119 | 
            +
            ## Common Mistakes to Avoid
         | 
| 120 | 
            +
            {self._format_section_items(self._generate_common_mistakes(project_characteristics))}
         | 
| 121 | 
            +
             | 
| 122 | 
            +
            ## Integration Points
         | 
| 123 | 
            +
            {self._format_section_items(integration_points)}
         | 
| 124 | 
            +
             | 
| 125 | 
            +
            ## Performance Considerations
         | 
| 126 | 
            +
            {self._format_section_items(self._generate_performance_considerations(project_characteristics))}
         | 
| 127 | 
            +
             | 
| 128 | 
            +
            ## Current Technical Context
         | 
| 129 | 
            +
            {self._format_section_items(tech_context)}
         | 
| 130 | 
            +
             | 
| 131 | 
            +
            ## Recent Learnings
         | 
| 132 | 
            +
            <!-- Most recent discoveries and insights -->
         | 
| 133 | 
            +
            """
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                    return template
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                def _create_basic_memory_template(
         | 
| 138 | 
            +
                    self, agent_id: str, limits: Dict[str, Any]
         | 
| 139 | 
            +
                ) -> str:
         | 
| 140 | 
            +
                    """Create basic memory template when project analysis fails.
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                    Args:
         | 
| 143 | 
            +
                        agent_id: The agent identifier
         | 
| 144 | 
            +
                        limits: Memory limits for this agent
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                    Returns:
         | 
| 147 | 
            +
                        str: Basic memory template
         | 
| 148 | 
            +
                    """
         | 
| 149 | 
            +
                    agent_name = agent_id.replace("_agent", "").replace("_", " ").title()
         | 
| 150 | 
            +
                    project_name = self.working_directory.name
         | 
| 151 | 
            +
                    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                    return f"""# {agent_name} Agent Memory - {project_name}
         | 
| 154 | 
            +
             | 
| 155 | 
            +
            <!-- MEMORY LIMITS: {limits['max_file_size_kb']}KB max | {limits['max_sections']} sections max | {limits['max_items_per_section']} items per section -->
         | 
| 156 | 
            +
            <!-- Last Updated: {timestamp} | Auto-updated by: {agent_id} -->
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            ## Project Context
         | 
| 159 | 
            +
            {project_name}: Software project requiring analysis
         | 
| 160 | 
            +
             | 
| 161 | 
            +
            ## Project Architecture
         | 
| 162 | 
            +
            - Analyze project structure to understand architecture patterns
         | 
| 163 | 
            +
             | 
| 164 | 
            +
            ## Coding Patterns Learned
         | 
| 165 | 
            +
            - Observe codebase patterns and conventions during tasks
         | 
| 166 | 
            +
             | 
| 167 | 
            +
            ## Implementation Guidelines
         | 
| 168 | 
            +
            - Extract implementation guidelines from project documentation
         | 
| 169 | 
            +
             | 
| 170 | 
            +
            ## Domain-Specific Knowledge
         | 
| 171 | 
            +
            <!-- Agent-specific knowledge accumulates here -->
         | 
| 172 | 
            +
             | 
| 173 | 
            +
            ## Effective Strategies
         | 
| 174 | 
            +
            <!-- Successful approaches discovered through experience -->
         | 
| 175 | 
            +
             | 
| 176 | 
            +
            ## Common Mistakes to Avoid
         | 
| 177 | 
            +
            - Learn from errors encountered during project work
         | 
| 178 | 
            +
             | 
| 179 | 
            +
            ## Integration Points
         | 
| 180 | 
            +
            <!-- Key interfaces and integration patterns -->
         | 
| 181 | 
            +
             | 
| 182 | 
            +
            ## Performance Considerations
         | 
| 183 | 
            +
            <!-- Performance insights and optimization patterns -->
         | 
| 184 | 
            +
             | 
| 185 | 
            +
            ## Current Technical Context
         | 
| 186 | 
            +
            - Project analysis pending - gather context during tasks
         | 
| 187 | 
            +
             | 
| 188 | 
            +
            ## Recent Learnings
         | 
| 189 | 
            +
            <!-- Most recent discoveries and insights -->
         | 
| 190 | 
            +
            """
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                def _generate_architecture_section(self, characteristics) -> List[str]:
         | 
| 193 | 
            +
                    """Generate architecture section items based on project analysis."""
         | 
| 194 | 
            +
                    items = []
         | 
| 195 | 
            +
             | 
| 196 | 
            +
                    # Architecture type
         | 
| 197 | 
            +
                    items.append(
         | 
| 198 | 
            +
                        f"{characteristics.architecture_type} with {characteristics.primary_language or 'mixed'} implementation"
         | 
| 199 | 
            +
                    )
         | 
| 200 | 
            +
             | 
| 201 | 
            +
                    # Key directories structure
         | 
| 202 | 
            +
                    if characteristics.key_directories:
         | 
| 203 | 
            +
                        key_dirs = ", ".join(characteristics.key_directories[:5])
         | 
| 204 | 
            +
                        items.append(f"Main directories: {key_dirs}")
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                    # Main modules
         | 
| 207 | 
            +
                    if characteristics.main_modules:
         | 
| 208 | 
            +
                        modules = ", ".join(characteristics.main_modules[:4])
         | 
| 209 | 
            +
                        items.append(f"Core modules: {modules}")
         | 
| 210 | 
            +
             | 
| 211 | 
            +
                    # Entry points
         | 
| 212 | 
            +
                    if characteristics.entry_points:
         | 
| 213 | 
            +
                        entries = ", ".join(characteristics.entry_points[:3])
         | 
| 214 | 
            +
                        items.append(f"Entry points: {entries}")
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                    # Frameworks affecting architecture
         | 
| 217 | 
            +
                    if characteristics.web_frameworks:
         | 
| 218 | 
            +
                        frameworks = ", ".join(characteristics.web_frameworks[:3])
         | 
| 219 | 
            +
                        items.append(f"Web framework stack: {frameworks}")
         | 
| 220 | 
            +
             | 
| 221 | 
            +
                    return items[:8]  # Limit to prevent overwhelming
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                def _generate_coding_patterns_section(self, characteristics) -> List[str]:
         | 
| 224 | 
            +
                    """Generate coding patterns section based on project analysis."""
         | 
| 225 | 
            +
                    items = []
         | 
| 226 | 
            +
             | 
| 227 | 
            +
                    # Language-specific patterns
         | 
| 228 | 
            +
                    if characteristics.primary_language == "python":
         | 
| 229 | 
            +
                        items.append("Python project: use type hints, follow PEP 8 conventions")
         | 
| 230 | 
            +
                        if "django" in [fw.lower() for fw in characteristics.web_frameworks]:
         | 
| 231 | 
            +
                            items.append("Django patterns: models, views, templates separation")
         | 
| 232 | 
            +
                        elif "flask" in [fw.lower() for fw in characteristics.web_frameworks]:
         | 
| 233 | 
            +
                            items.append(
         | 
| 234 | 
            +
                                "Flask patterns: blueprint organization, app factory pattern"
         | 
| 235 | 
            +
                            )
         | 
| 236 | 
            +
                    elif characteristics.primary_language == "node_js":
         | 
| 237 | 
            +
                        items.append("Node.js project: use async/await, ES6+ features")
         | 
| 238 | 
            +
                        if "express" in [fw.lower() for fw in characteristics.web_frameworks]:
         | 
| 239 | 
            +
                            items.append("Express patterns: middleware usage, route organization")
         | 
| 240 | 
            +
             | 
| 241 | 
            +
                    # Framework-specific patterns
         | 
| 242 | 
            +
                    for framework in characteristics.frameworks[:3]:
         | 
| 243 | 
            +
                        if "react" in framework.lower():
         | 
| 244 | 
            +
                            items.append("React patterns: component composition, hooks usage")
         | 
| 245 | 
            +
                        elif "vue" in framework.lower():
         | 
| 246 | 
            +
                            items.append("Vue patterns: single file components, composition API")
         | 
| 247 | 
            +
             | 
| 248 | 
            +
                    # Code conventions found
         | 
| 249 | 
            +
                    for convention in characteristics.code_conventions[:3]:
         | 
| 250 | 
            +
                        items.append(f"Project uses: {convention}")
         | 
| 251 | 
            +
             | 
| 252 | 
            +
                    return items[:8]
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                def _generate_implementation_guidelines(self, characteristics) -> List[str]:
         | 
| 255 | 
            +
                    """Generate implementation guidelines based on project analysis."""
         | 
| 256 | 
            +
                    items = []
         | 
| 257 | 
            +
             | 
| 258 | 
            +
                    # Package manager guidance
         | 
| 259 | 
            +
                    if characteristics.package_manager:
         | 
| 260 | 
            +
                        items.append(
         | 
| 261 | 
            +
                            f"Use {characteristics.package_manager} for dependency management"
         | 
| 262 | 
            +
                        )
         | 
| 263 | 
            +
             | 
| 264 | 
            +
                    # Testing guidelines
         | 
| 265 | 
            +
                    if characteristics.testing_framework:
         | 
| 266 | 
            +
                        items.append(f"Write tests using {characteristics.testing_framework}")
         | 
| 267 | 
            +
             | 
| 268 | 
            +
                    # Test patterns
         | 
| 269 | 
            +
                    for pattern in characteristics.test_patterns[:2]:
         | 
| 270 | 
            +
                        items.append(f"Follow {pattern.lower()}")
         | 
| 271 | 
            +
             | 
| 272 | 
            +
                    # Build tools
         | 
| 273 | 
            +
                    if characteristics.build_tools:
         | 
| 274 | 
            +
                        tools = ", ".join(characteristics.build_tools[:2])
         | 
| 275 | 
            +
                        items.append(f"Use build tools: {tools}")
         | 
| 276 | 
            +
             | 
| 277 | 
            +
                    # Configuration patterns
         | 
| 278 | 
            +
                    for config_pattern in characteristics.configuration_patterns[:2]:
         | 
| 279 | 
            +
                        items.append(f"Configuration: {config_pattern}")
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                    # Important files to reference
         | 
| 282 | 
            +
                    important_configs = characteristics.important_configs[:3]
         | 
| 283 | 
            +
                    if important_configs:
         | 
| 284 | 
            +
                        configs = ", ".join(important_configs)
         | 
| 285 | 
            +
                        items.append(f"Key config files: {configs}")
         | 
| 286 | 
            +
             | 
| 287 | 
            +
                    return items[:8]
         | 
| 288 | 
            +
             | 
| 289 | 
            +
                def _generate_technical_context(self, characteristics) -> List[str]:
         | 
| 290 | 
            +
                    """Generate current technical context based on project analysis."""
         | 
| 291 | 
            +
                    items = []
         | 
| 292 | 
            +
             | 
| 293 | 
            +
                    # Technology stack summary
         | 
| 294 | 
            +
                    tech_stack = []
         | 
| 295 | 
            +
                    if characteristics.primary_language:
         | 
| 296 | 
            +
                        tech_stack.append(characteristics.primary_language)
         | 
| 297 | 
            +
                    tech_stack.extend(characteristics.frameworks[:2])
         | 
| 298 | 
            +
                    if tech_stack:
         | 
| 299 | 
            +
                        items.append(f"Tech stack: {', '.join(tech_stack)}")
         | 
| 300 | 
            +
             | 
| 301 | 
            +
                    # Databases in use
         | 
| 302 | 
            +
                    if characteristics.databases:
         | 
| 303 | 
            +
                        dbs = ", ".join(characteristics.databases[:3])
         | 
| 304 | 
            +
                        items.append(f"Data storage: {dbs}")
         | 
| 305 | 
            +
             | 
| 306 | 
            +
                    # API patterns
         | 
| 307 | 
            +
                    if characteristics.api_patterns:
         | 
| 308 | 
            +
                        apis = ", ".join(characteristics.api_patterns[:2])
         | 
| 309 | 
            +
                        items.append(f"API patterns: {apis}")
         | 
| 310 | 
            +
             | 
| 311 | 
            +
                    # Key dependencies
         | 
| 312 | 
            +
                    if characteristics.key_dependencies:
         | 
| 313 | 
            +
                        deps = ", ".join(characteristics.key_dependencies[:4])
         | 
| 314 | 
            +
                        items.append(f"Key dependencies: {deps}")
         | 
| 315 | 
            +
             | 
| 316 | 
            +
                    # Documentation available
         | 
| 317 | 
            +
                    if characteristics.documentation_files:
         | 
| 318 | 
            +
                        docs = ", ".join(characteristics.documentation_files[:3])
         | 
| 319 | 
            +
                        items.append(f"Documentation: {docs}")
         | 
| 320 | 
            +
             | 
| 321 | 
            +
                    return items[:8]
         | 
| 322 | 
            +
             | 
| 323 | 
            +
                def _generate_integration_points(self, characteristics) -> List[str]:
         | 
| 324 | 
            +
                    """Generate integration points based on project analysis."""
         | 
| 325 | 
            +
                    items = []
         | 
| 326 | 
            +
             | 
| 327 | 
            +
                    # Database integrations
         | 
| 328 | 
            +
                    for db in characteristics.databases[:3]:
         | 
| 329 | 
            +
                        items.append(f"{db.title()} database integration")
         | 
| 330 | 
            +
             | 
| 331 | 
            +
                    # Web framework integrations
         | 
| 332 | 
            +
                    for framework in characteristics.web_frameworks[:2]:
         | 
| 333 | 
            +
                        items.append(f"{framework} web framework integration")
         | 
| 334 | 
            +
             | 
| 335 | 
            +
                    # API integrations
         | 
| 336 | 
            +
                    for api_pattern in characteristics.api_patterns[:2]:
         | 
| 337 | 
            +
                        items.append(f"{api_pattern} integration pattern")
         | 
| 338 | 
            +
             | 
| 339 | 
            +
                    # Common integration patterns based on dependencies
         | 
| 340 | 
            +
                    integration_deps = [
         | 
| 341 | 
            +
                        dep
         | 
| 342 | 
            +
                        for dep in characteristics.key_dependencies
         | 
| 343 | 
            +
                        if any(
         | 
| 344 | 
            +
                            keyword in dep.lower()
         | 
| 345 | 
            +
                            for keyword in ["redis", "rabbit", "celery", "kafka", "docker"]
         | 
| 346 | 
            +
                        )
         | 
| 347 | 
            +
                    ]
         | 
| 348 | 
            +
                    for dep in integration_deps[:3]:
         | 
| 349 | 
            +
                        items.append(f"{dep} integration")
         | 
| 350 | 
            +
             | 
| 351 | 
            +
                    return items[:6]
         | 
| 352 | 
            +
             | 
| 353 | 
            +
                def _generate_common_mistakes(self, characteristics) -> List[str]:
         | 
| 354 | 
            +
                    """Generate common mistakes based on project type and stack."""
         | 
| 355 | 
            +
                    items = []
         | 
| 356 | 
            +
             | 
| 357 | 
            +
                    # Language-specific mistakes
         | 
| 358 | 
            +
                    if characteristics.primary_language == "python":
         | 
| 359 | 
            +
                        items.append("Avoid circular imports - use late imports when needed")
         | 
| 360 | 
            +
                        items.append(
         | 
| 361 | 
            +
                            "Don't ignore virtual environment - always activate before work"
         | 
| 362 | 
            +
                        )
         | 
| 363 | 
            +
                    elif characteristics.primary_language == "node_js":
         | 
| 364 | 
            +
                        items.append("Avoid callback hell - use async/await consistently")
         | 
| 365 | 
            +
                        items.append("Don't commit node_modules - ensure .gitignore is correct")
         | 
| 366 | 
            +
             | 
| 367 | 
            +
                    # Framework-specific mistakes
         | 
| 368 | 
            +
                    if "django" in [fw.lower() for fw in characteristics.web_frameworks]:
         | 
| 369 | 
            +
                        items.append("Don't skip migrations - always create and apply them")
         | 
| 370 | 
            +
                    elif "flask" in [fw.lower() for fw in characteristics.web_frameworks]:
         | 
| 371 | 
            +
                        items.append("Avoid app context issues - use proper application factory")
         | 
| 372 | 
            +
             | 
| 373 | 
            +
                    # Database-specific mistakes
         | 
| 374 | 
            +
                    if characteristics.databases:
         | 
| 375 | 
            +
                        items.append("Don't ignore database transactions in multi-step operations")
         | 
| 376 | 
            +
                        items.append("Avoid N+1 queries - use proper joins or prefetching")
         | 
| 377 | 
            +
             | 
| 378 | 
            +
                    # Testing mistakes
         | 
| 379 | 
            +
                    if characteristics.testing_framework:
         | 
| 380 | 
            +
                        items.append(
         | 
| 381 | 
            +
                            "Don't skip test isolation - ensure tests can run independently"
         | 
| 382 | 
            +
                        )
         | 
| 383 | 
            +
             | 
| 384 | 
            +
                    return items[:8]
         | 
| 385 | 
            +
             | 
| 386 | 
            +
                def _generate_performance_considerations(self, characteristics) -> List[str]:
         | 
| 387 | 
            +
                    """Generate performance considerations based on project stack."""
         | 
| 388 | 
            +
                    items = []
         | 
| 389 | 
            +
             | 
| 390 | 
            +
                    # Language-specific performance
         | 
| 391 | 
            +
                    if characteristics.primary_language == "python":
         | 
| 392 | 
            +
                        items.append("Use list comprehensions over loops where appropriate")
         | 
| 393 | 
            +
                        items.append("Consider caching for expensive operations")
         | 
| 394 | 
            +
                    elif characteristics.primary_language == "node_js":
         | 
| 395 | 
            +
                        items.append("Leverage event loop - avoid blocking operations")
         | 
| 396 | 
            +
                        items.append("Use streams for large data processing")
         | 
| 397 | 
            +
             | 
| 398 | 
            +
                    # Database performance
         | 
| 399 | 
            +
                    if characteristics.databases:
         | 
| 400 | 
            +
                        items.append("Index frequently queried columns")
         | 
| 401 | 
            +
                        items.append("Use connection pooling for database connections")
         | 
| 402 | 
            +
             | 
| 403 | 
            +
                    # Web framework performance
         | 
| 404 | 
            +
                    if characteristics.web_frameworks:
         | 
| 405 | 
            +
                        items.append("Implement appropriate caching strategies")
         | 
| 406 | 
            +
                        items.append("Optimize static asset delivery")
         | 
| 407 | 
            +
             | 
| 408 | 
            +
                    # Framework-specific performance
         | 
| 409 | 
            +
                    if "react" in [fw.lower() for fw in characteristics.frameworks]:
         | 
| 410 | 
            +
                        items.append("Use React.memo for expensive component renders")
         | 
| 411 | 
            +
             | 
| 412 | 
            +
                    return items[:6]
         | 
| 413 | 
            +
             | 
| 414 | 
            +
                def _generate_domain_knowledge_starters(
         | 
| 415 | 
            +
                    self, characteristics, agent_id: str
         | 
| 416 | 
            +
                ) -> str:
         | 
| 417 | 
            +
                    """Generate domain-specific knowledge starters based on project and agent type."""
         | 
| 418 | 
            +
                    items = []
         | 
| 419 | 
            +
             | 
| 420 | 
            +
                    # Project terminology
         | 
| 421 | 
            +
                    if characteristics.project_terminology:
         | 
| 422 | 
            +
                        terms = ", ".join(characteristics.project_terminology[:4])
         | 
| 423 | 
            +
                        items.append(f"- Key project terms: {terms}")
         | 
| 424 | 
            +
             | 
| 425 | 
            +
                    # Agent-specific starters
         | 
| 426 | 
            +
                    if "research" in agent_id.lower():
         | 
| 427 | 
            +
                        items.append(
         | 
| 428 | 
            +
                            "- Focus on code analysis, pattern discovery, and architectural insights"
         | 
| 429 | 
            +
                        )
         | 
| 430 | 
            +
                        if characteristics.documentation_files:
         | 
| 431 | 
            +
                            items.append(
         | 
| 432 | 
            +
                                "- Prioritize documentation analysis for comprehensive understanding"
         | 
| 433 | 
            +
                            )
         | 
| 434 | 
            +
                    elif "engineer" in agent_id.lower():
         | 
| 435 | 
            +
                        items.append(
         | 
| 436 | 
            +
                            "- Focus on implementation patterns, coding standards, and best practices"
         | 
| 437 | 
            +
                        )
         | 
| 438 | 
            +
                        if characteristics.testing_framework:
         | 
| 439 | 
            +
                            items.append(
         | 
| 440 | 
            +
                                f"- Ensure test coverage using {characteristics.testing_framework}"
         | 
| 441 | 
            +
                            )
         | 
| 442 | 
            +
                    elif "pm" in agent_id.lower() or "manager" in agent_id.lower():
         | 
| 443 | 
            +
                        items.append(
         | 
| 444 | 
            +
                            "- Focus on project coordination, task delegation, and progress tracking"
         | 
| 445 | 
            +
                        )
         | 
| 446 | 
            +
                        items.append(
         | 
| 447 | 
            +
                            "- Monitor integration points and cross-component dependencies"
         | 
| 448 | 
            +
                        )
         | 
| 449 | 
            +
             | 
| 450 | 
            +
                    return (
         | 
| 451 | 
            +
                        "\n".join(items)
         | 
| 452 | 
            +
                        if items
         | 
| 453 | 
            +
                        else "<!-- Domain knowledge will accumulate here -->"
         | 
| 454 | 
            +
                    )
         | 
| 455 | 
            +
             | 
| 456 | 
            +
                def _format_section_items(self, items: List[str]) -> str:
         | 
| 457 | 
            +
                    """Format list of items as markdown bullet points."""
         | 
| 458 | 
            +
                    if not items:
         | 
| 459 | 
            +
                        return "<!-- Items will be added as knowledge accumulates -->"
         | 
| 460 | 
            +
             | 
| 461 | 
            +
                    formatted_items = []
         | 
| 462 | 
            +
                    for item in items:
         | 
| 463 | 
            +
                        # Ensure each item starts with a dash and is properly formatted
         | 
| 464 | 
            +
                        if not item.startswith("- "):
         | 
| 465 | 
            +
                            item = f"- {item}"
         | 
| 466 | 
            +
                        formatted_items.append(item)
         | 
| 467 | 
            +
             | 
| 468 | 
            +
                    return "\n".join(formatted_items)
         | 
| @@ -1,18 +1,15 @@ | |
| 1 1 | 
             
            """Agent registry services for discovery and tracking."""
         | 
| 2 2 |  | 
| 3 | 
            -
            from . | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
                AgentTier,
         | 
| 7 | 
            -
                AgentType,
         | 
| 8 | 
            -
            )
         | 
| 3 | 
            +
            from claude_mpm.core.unified_agent_registry import AgentMetadata, AgentTier, AgentType
         | 
| 4 | 
            +
            from claude_mpm.core.unified_agent_registry import UnifiedAgentRegistry as AgentRegistry
         | 
| 5 | 
            +
             | 
| 9 6 | 
             
            from .deployed_agent_discovery import DeployedAgentDiscovery
         | 
| 10 7 | 
             
            from .modification_tracker import (
         | 
| 11 | 
            -
                AgentModificationTracker,
         | 
| 12 | 
            -
                ModificationType,
         | 
| 13 | 
            -
                ModificationTier,
         | 
| 14 8 | 
             
                AgentModification,
         | 
| 9 | 
            +
                AgentModificationTracker,
         | 
| 15 10 | 
             
                ModificationHistory,
         | 
| 11 | 
            +
                ModificationTier,
         | 
| 12 | 
            +
                ModificationType,
         | 
| 16 13 | 
             
            )
         | 
| 17 14 |  | 
| 18 15 | 
             
            __all__ = [
         | 
| @@ -26,4 +23,4 @@ __all__ = [ | |
| 26 23 | 
             
                "ModificationTier",
         | 
| 27 24 | 
             
                "AgentModification",
         | 
| 28 25 | 
             
                "ModificationHistory",
         | 
| 29 | 
            -
            ]
         | 
| 26 | 
            +
            ]
         |