claude-mpm 4.1.26__py3-none-any.whl → 5.0.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/BUILD_NUMBER +1 -1
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +20 -5
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +118 -0
- claude_mpm/agents/BASE_DOCUMENTATION.md +53 -0
- claude_mpm/agents/BASE_ENGINEER.md +658 -0
- claude_mpm/agents/BASE_OPS.md +219 -0
- claude_mpm/agents/BASE_PM.md +432 -158
- claude_mpm/agents/BASE_PROMPT_ENGINEER.md +787 -0
- claude_mpm/agents/BASE_QA.md +167 -0
- claude_mpm/agents/BASE_RESEARCH.md +53 -0
- claude_mpm/agents/OUTPUT_STYLE.md +254 -29
- claude_mpm/agents/PM_INSTRUCTIONS.md +969 -0
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +355 -191
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +41 -14
- claude_mpm/agents/agent_loader_integration.py +3 -2
- claude_mpm/agents/async_agent_loader.py +3 -3
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/base_agent_loader.py +21 -44
- claude_mpm/agents/frontmatter_validator.py +292 -252
- claude_mpm/agents/system_agent_config.py +3 -2
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/circuit-breakers.md +1005 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/git-file-tracking.md +584 -0
- claude_mpm/agents/templates/pm-examples.md +474 -0
- claude_mpm/agents/templates/pm-red-flags.md +310 -0
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/response-format.md +583 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/agents/templates/validation-templates.md +312 -0
- claude_mpm/cli/__init__.py +72 -376
- claude_mpm/cli/commands/__init__.py +4 -0
- claude_mpm/cli/commands/agent_manager.py +675 -20
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +344 -0
- claude_mpm/cli/commands/agents.py +1673 -178
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_detect.py +380 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/agents_recommend.py +309 -0
- claude_mpm/cli/commands/aggregate.py +11 -7
- claude_mpm/cli/commands/analyze.py +18 -13
- claude_mpm/cli/commands/analyze_code.py +8 -4
- claude_mpm/cli/commands/auto_configure.py +566 -0
- claude_mpm/cli/commands/cleanup.py +12 -12
- claude_mpm/cli/commands/config.py +54 -17
- claude_mpm/cli/commands/configure.py +1184 -1055
- claude_mpm/cli/commands/configure_agent_display.py +261 -0
- claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
- claude_mpm/cli/commands/configure_hook_manager.py +225 -0
- claude_mpm/cli/commands/configure_models.py +18 -0
- claude_mpm/cli/commands/configure_navigation.py +184 -0
- claude_mpm/cli/commands/configure_paths.py +104 -0
- claude_mpm/cli/commands/configure_persistence.py +254 -0
- claude_mpm/cli/commands/configure_startup_manager.py +646 -0
- claude_mpm/cli/commands/configure_template_editor.py +497 -0
- claude_mpm/cli/commands/configure_validators.py +73 -0
- claude_mpm/cli/commands/dashboard.py +50 -52
- claude_mpm/cli/commands/debug.py +19 -19
- claude_mpm/cli/commands/doctor.py +51 -7
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/info.py +3 -4
- claude_mpm/cli/commands/local_deploy.py +534 -0
- claude_mpm/cli/commands/mcp.py +17 -10
- claude_mpm/cli/commands/mcp_command_router.py +11 -0
- claude_mpm/cli/commands/mcp_config.py +154 -0
- claude_mpm/cli/commands/mcp_external_commands.py +249 -0
- claude_mpm/cli/commands/mcp_install_commands.py +101 -32
- claude_mpm/cli/commands/mcp_pipx_config.py +2 -2
- claude_mpm/cli/commands/mcp_setup_external.py +868 -0
- claude_mpm/cli/commands/memory.py +55 -21
- claude_mpm/cli/commands/monitor.py +160 -70
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +573 -0
- claude_mpm/cli/commands/mpm_init/display.py +341 -0
- claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +114 -4
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +252 -167
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +1225 -0
- claude_mpm/cli/commands/uninstall.py +176 -0
- claude_mpm/cli/commands/upgrade.py +152 -0
- claude_mpm/cli/commands/verify.py +119 -0
- claude_mpm/cli/executor.py +279 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +1872 -0
- claude_mpm/cli/interactive/skills_wizard.py +491 -0
- claude_mpm/cli/parser.py +79 -2
- claude_mpm/cli/parsers/__init__.py +7 -1
- claude_mpm/cli/parsers/agent_manager_parser.py +161 -1
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +369 -1
- claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
- claude_mpm/cli/parsers/base_parser.py +196 -3
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/configure_parser.py +11 -15
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/parsers/mcp_parser.py +15 -0
- claude_mpm/cli/parsers/monitor_parser.py +12 -2
- claude_mpm/cli/parsers/mpm_init_parser.py +179 -9
- claude_mpm/cli/parsers/run_parser.py +5 -0
- claude_mpm/cli/parsers/search_parser.py +245 -0
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +282 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/shared/argument_patterns.py +20 -13
- claude_mpm/cli/shared/base_command.py +2 -2
- claude_mpm/cli/shared/output_formatters.py +28 -19
- claude_mpm/cli/startup.py +994 -0
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/startup_logging.py +179 -13
- claude_mpm/cli/utils.py +54 -3
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/commands/mpm-agents-auto-configure.md +278 -0
- claude_mpm/commands/mpm-agents-detect.md +177 -0
- claude_mpm/commands/mpm-agents-list.md +131 -0
- claude_mpm/commands/mpm-agents-recommend.md +223 -0
- claude_mpm/commands/mpm-config-view.md +150 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +297 -5
- claude_mpm/commands/mpm-init.md +401 -17
- claude_mpm/commands/mpm-monitor.md +418 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/mpm-session-resume.md +381 -0
- claude_mpm/commands/mpm-status.md +79 -8
- claude_mpm/commands/mpm-ticket-organize.md +304 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +122 -0
- claude_mpm/commands/mpm.md +12 -0
- claude_mpm/config/agent_config.py +4 -4
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/experimental_features.py +7 -7
- claude_mpm/config/model_config.py +428 -0
- claude_mpm/config/paths.py +3 -2
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/config/socketio_config.py +3 -3
- claude_mpm/constants.py +28 -1
- claude_mpm/core/__init__.py +53 -17
- claude_mpm/core/agent_name_normalizer.py +3 -2
- claude_mpm/core/agent_registry.py +2 -2
- claude_mpm/core/agent_session_manager.py +10 -10
- claude_mpm/core/api_validator.py +330 -0
- claude_mpm/core/base_service.py +33 -23
- claude_mpm/core/cache.py +9 -9
- claude_mpm/core/claude_runner.py +24 -42
- claude_mpm/core/config.py +101 -8
- claude_mpm/core/config_aliases.py +7 -6
- claude_mpm/core/constants.py +66 -1
- claude_mpm/core/container.py +11 -5
- claude_mpm/core/enums.py +452 -0
- claude_mpm/core/error_handler.py +623 -0
- claude_mpm/core/factories.py +1 -1
- claude_mpm/core/file_utils.py +764 -0
- claude_mpm/core/framework/__init__.py +25 -0
- claude_mpm/core/framework/formatters/__init__.py +11 -0
- claude_mpm/core/framework/formatters/capability_generator.py +367 -0
- claude_mpm/core/framework/formatters/content_formatter.py +288 -0
- claude_mpm/core/framework/formatters/context_generator.py +185 -0
- claude_mpm/core/framework/loaders/__init__.py +13 -0
- claude_mpm/core/framework/loaders/agent_loader.py +210 -0
- claude_mpm/core/framework/loaders/file_loader.py +176 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +181 -0
- claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
- claude_mpm/core/framework/processors/__init__.py +11 -0
- claude_mpm/core/framework/processors/memory_processor.py +230 -0
- claude_mpm/core/framework/processors/metadata_processor.py +146 -0
- claude_mpm/core/framework/processors/template_processor.py +244 -0
- claude_mpm/core/framework_loader.py +321 -1631
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +49 -8
- claude_mpm/core/injectable_service.py +11 -8
- claude_mpm/core/instruction_reinforcement_hook.py +4 -3
- claude_mpm/core/interactive_session.py +146 -18
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/lazy.py +3 -3
- claude_mpm/core/log_manager.py +92 -23
- claude_mpm/core/logger.py +22 -15
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/oneshot_session.py +122 -15
- claude_mpm/core/optimized_agent_loader.py +9 -9
- claude_mpm/core/optimized_startup.py +1 -1
- claude_mpm/core/output_style_manager.py +12 -192
- claude_mpm/core/pm_hook_interceptor.py +18 -12
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/service_registry.py +7 -3
- claude_mpm/core/session_manager.py +14 -12
- claude_mpm/core/shared/config_loader.py +1 -1
- claude_mpm/core/shared/singleton_manager.py +11 -4
- claude_mpm/core/socketio_pool.py +15 -15
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/tool_access_control.py +3 -2
- claude_mpm/core/types.py +4 -11
- claude_mpm/core/typing_utils.py +7 -6
- claude_mpm/core/unified_agent_registry.py +115 -11
- claude_mpm/core/unified_config.py +6 -6
- claude_mpm/core/unified_paths.py +23 -20
- claude_mpm/dashboard/analysis_runner.py +4 -4
- claude_mpm/dashboard/api/simple_directory.py +261 -0
- claude_mpm/dashboard/static/css/activity.css +69 -69
- claude_mpm/dashboard/static/css/connection-status.css +10 -10
- claude_mpm/dashboard/static/css/dashboard.css +600 -18
- claude_mpm/dashboard/static/js/components/activity-tree.js +181 -195
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +105 -102
- claude_mpm/dashboard/static/js/components/agent-inference.js +34 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +67 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/js/components/diff-viewer.js +891 -0
- claude_mpm/dashboard/static/js/components/event-processor.js +3 -0
- claude_mpm/dashboard/static/js/components/event-viewer.js +50 -13
- claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +443 -0
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +690 -0
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +36 -16
- claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
- claude_mpm/dashboard/static/js/components/module-viewer.js +49 -23
- claude_mpm/dashboard/static/js/components/session-manager.js +19 -19
- claude_mpm/dashboard/static/js/components/socket-manager.js +5 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +356 -41
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +520 -88
- claude_mpm/dashboard/static/js/components/working-directory.js +46 -11
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +309 -178
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/socket-client.js +183 -139
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/socket.io.min.js +7 -0
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
- claude_mpm/dashboard/templates/code_simple.html +153 -0
- claude_mpm/dashboard/templates/index.html +125 -122
- claude_mpm/experimental/cli_enhancements.py +5 -7
- claude_mpm/generators/agent_profile_generator.py +5 -3
- claude_mpm/hooks/__init__.py +37 -1
- claude_mpm/hooks/base_hook.py +5 -4
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
- claude_mpm/hooks/claude_hooks/event_handlers.py +24 -19
- claude_mpm/hooks/claude_hooks/hook_handler.py +29 -22
- claude_mpm/hooks/claude_hooks/installer.py +67 -22
- claude_mpm/hooks/claude_hooks/memory_integration.py +3 -3
- claude_mpm/hooks/claude_hooks/response_tracking.py +57 -17
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +62 -64
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +140 -76
- claude_mpm/hooks/claude_hooks/services/state_manager.py +11 -9
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +3 -3
- claude_mpm/hooks/failure_learning/__init__.py +54 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -0
- claude_mpm/hooks/instruction_reinforcement.py +301 -0
- claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
- claude_mpm/hooks/kuzu_memory_hook.py +386 -0
- claude_mpm/hooks/kuzu_response_hook.py +179 -0
- claude_mpm/hooks/memory_integration_hook.py +1 -1
- claude_mpm/hooks/session_resume_hook.py +121 -0
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/hooks/tool_call_interceptor.py +8 -5
- claude_mpm/hooks/validation_hooks.py +3 -3
- claude_mpm/init.py +23 -4
- claude_mpm/models/agent_session.py +8 -6
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/scripts/claude-hook-handler.sh +35 -9
- claude_mpm/scripts/launch_monitor.py +85 -0
- claude_mpm/scripts/mcp_server.py +3 -5
- claude_mpm/scripts/mpm_doctor.py +3 -2
- claude_mpm/scripts/socketio_daemon.py +159 -512
- claude_mpm/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/__init__.py +144 -160
- claude_mpm/services/agents/__init__.py +18 -5
- claude_mpm/services/agents/agent_builder.py +56 -18
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_deployment.py +164 -17
- claude_mpm/services/agents/deployment/agent_discovery_service.py +191 -41
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +5 -5
- claude_mpm/services/agents/deployment/agent_format_converter.py +56 -12
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -7
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/agent_operation_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_record_service.py +4 -4
- claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
- claude_mpm/services/agents/deployment/agent_template_builder.py +939 -50
- claude_mpm/services/agents/deployment/agent_validator.py +31 -7
- claude_mpm/services/agents/deployment/agent_version_manager.py +8 -5
- claude_mpm/services/agents/deployment/agent_versioning.py +1 -1
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +3 -2
- claude_mpm/services/agents/deployment/deployment_config_loader.py +131 -7
- claude_mpm/services/agents/deployment/deployment_type_detector.py +10 -14
- claude_mpm/services/agents/deployment/deployment_wrapper.py +58 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
- claude_mpm/services/agents/deployment/local_template_deployment.py +360 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +249 -53
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +8 -7
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +7 -5
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +10 -10
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -43
- claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- claude_mpm/services/agents/deployment/validation/template_validator.py +64 -44
- claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
- claude_mpm/services/agents/git_source_manager.py +629 -0
- claude_mpm/services/agents/loading/agent_profile_loader.py +10 -9
- claude_mpm/services/agents/loading/base_agent_manager.py +16 -6
- claude_mpm/services/agents/loading/framework_agent_loader.py +11 -14
- claude_mpm/services/agents/local_template_manager.py +784 -0
- claude_mpm/services/agents/management/agent_capabilities_generator.py +3 -2
- claude_mpm/services/agents/management/agent_management_service.py +5 -5
- claude_mpm/services/agents/memory/agent_memory_manager.py +32 -29
- claude_mpm/services/agents/memory/content_manager.py +17 -9
- claude_mpm/services/agents/memory/memory_categorization_service.py +4 -2
- claude_mpm/services/agents/memory/memory_file_service.py +32 -6
- claude_mpm/services/agents/memory/memory_format_service.py +6 -4
- claude_mpm/services/agents/memory/memory_limits_service.py +4 -2
- claude_mpm/services/agents/memory/template_generator.py +3 -3
- claude_mpm/services/agents/observers.py +547 -0
- claude_mpm/services/agents/recommender.py +615 -0
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +3 -3
- claude_mpm/services/agents/registry/modification_tracker.py +30 -19
- claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/analysis/__init__.py +25 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/async_session_logger.py +141 -98
- claude_mpm/services/claude_session_logger.py +82 -74
- claude_mpm/services/cli/agent_cleanup_service.py +5 -0
- claude_mpm/services/cli/agent_listing_service.py +5 -5
- claude_mpm/services/cli/agent_validation_service.py +3 -1
- claude_mpm/services/cli/memory_crud_service.py +12 -7
- claude_mpm/services/cli/memory_output_formatter.py +2 -2
- claude_mpm/services/cli/resume_service.py +617 -0
- claude_mpm/services/cli/session_manager.py +104 -13
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +372 -0
- claude_mpm/services/cli/startup_checker.py +13 -10
- claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
- claude_mpm/services/command_deployment_service.py +209 -13
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/__init__.py +33 -1
- claude_mpm/services/core/base.py +31 -11
- claude_mpm/services/core/interfaces/__init__.py +88 -3
- claude_mpm/services/core/interfaces/agent.py +184 -0
- claude_mpm/services/core/interfaces/health.py +169 -0
- claude_mpm/services/core/interfaces/model.py +281 -0
- claude_mpm/services/core/interfaces/process.py +372 -0
- claude_mpm/services/core/interfaces/project.py +121 -0
- claude_mpm/services/core/interfaces/restart.py +307 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/memory_manager.py +92 -47
- claude_mpm/services/core/models/__init__.py +70 -0
- claude_mpm/services/core/models/agent_config.py +384 -0
- claude_mpm/services/core/models/health.py +162 -0
- claude_mpm/services/core/models/process.py +239 -0
- claude_mpm/services/core/models/restart.py +302 -0
- claude_mpm/services/core/models/stability.py +264 -0
- claude_mpm/services/core/models/toolchain.py +306 -0
- claude_mpm/services/core/path_resolver.py +36 -14
- claude_mpm/services/diagnostics/__init__.py +2 -2
- claude_mpm/services/diagnostics/checks/__init__.py +8 -2
- claude_mpm/services/diagnostics/checks/agent_check.py +30 -34
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
- claude_mpm/services/diagnostics/checks/common_issues_check.py +28 -27
- claude_mpm/services/diagnostics/checks/configuration_check.py +26 -25
- claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
- claude_mpm/services/diagnostics/checks/installation_check.py +165 -60
- claude_mpm/services/diagnostics/checks/instructions_check.py +21 -21
- claude_mpm/services/diagnostics/checks/mcp_check.py +57 -44
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +24 -24
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
- claude_mpm/services/diagnostics/diagnostic_runner.py +31 -13
- claude_mpm/services/diagnostics/doctor_reporter.py +305 -47
- claude_mpm/services/diagnostics/models.py +37 -21
- claude_mpm/services/event_aggregator.py +5 -3
- claude_mpm/services/event_bus/direct_relay.py +11 -7
- claude_mpm/services/event_bus/event_bus.py +51 -9
- claude_mpm/services/event_bus/relay.py +33 -14
- claude_mpm/services/events/consumers/dead_letter.py +7 -5
- claude_mpm/services/events/consumers/logging.py +1 -2
- claude_mpm/services/events/core.py +5 -6
- claude_mpm/services/events/producers/hook.py +6 -6
- claude_mpm/services/events/producers/system.py +8 -8
- claude_mpm/services/exceptions.py +5 -5
- claude_mpm/services/framework_claude_md_generator/__init__.py +1 -1
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +5 -5
- claude_mpm/services/framework_claude_md_generator/content_validator.py +2 -2
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +3 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +2 -2
- claude_mpm/services/framework_claude_md_generator/version_manager.py +1 -1
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +494 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- claude_mpm/services/hook_installer_service.py +506 -0
- claude_mpm/services/hook_service.py +5 -6
- claude_mpm/services/infrastructure/context_preservation.py +13 -11
- claude_mpm/services/infrastructure/daemon_manager.py +9 -9
- claude_mpm/services/infrastructure/logging.py +2 -2
- claude_mpm/services/infrastructure/monitoring/__init__.py +2 -6
- claude_mpm/services/infrastructure/monitoring/aggregator.py +13 -18
- claude_mpm/services/infrastructure/monitoring/base.py +5 -13
- claude_mpm/services/infrastructure/monitoring/network.py +7 -6
- claude_mpm/services/infrastructure/monitoring/process.py +13 -12
- claude_mpm/services/infrastructure/monitoring/resources.py +8 -7
- claude_mpm/services/infrastructure/monitoring/service.py +16 -15
- claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
- claude_mpm/services/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +155 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +26 -0
- claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
- claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
- claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
- claude_mpm/services/local_ops/health_manager.py +427 -0
- claude_mpm/services/local_ops/log_monitor.py +396 -0
- claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
- claude_mpm/services/local_ops/process_manager.py +595 -0
- claude_mpm/services/local_ops/resource_monitor.py +331 -0
- claude_mpm/services/local_ops/restart_manager.py +401 -0
- claude_mpm/services/local_ops/restart_policy.py +387 -0
- claude_mpm/services/local_ops/state_manager.py +372 -0
- claude_mpm/services/local_ops/unified_manager.py +600 -0
- claude_mpm/services/mcp_config_manager.py +1542 -0
- claude_mpm/services/mcp_gateway/__init__.py +97 -93
- claude_mpm/services/mcp_gateway/auto_configure.py +43 -38
- claude_mpm/services/mcp_gateway/config/config_loader.py +3 -3
- claude_mpm/services/mcp_gateway/config/configuration.py +24 -5
- claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
- claude_mpm/services/mcp_gateway/core/base.py +20 -33
- claude_mpm/services/mcp_gateway/core/process_pool.py +591 -31
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +2 -2
- claude_mpm/services/mcp_gateway/core/startup_verification.py +3 -3
- claude_mpm/services/mcp_gateway/main.py +90 -15
- claude_mpm/services/mcp_gateway/registry/service_registry.py +4 -2
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +12 -9
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +5 -10
- claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -17
- claude_mpm/services/mcp_gateway/tools/__init__.py +14 -2
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +15 -15
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +10 -9
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +654 -0
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +36 -34
- claude_mpm/services/mcp_gateway/tools/hello_world.py +8 -8
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +555 -0
- claude_mpm/services/mcp_gateway/utils/__init__.py +14 -0
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +160 -0
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +170 -0
- claude_mpm/services/mcp_service_verifier.py +732 -0
- claude_mpm/services/memory/builder.py +9 -8
- claude_mpm/services/memory/cache/shared_prompt_cache.py +2 -1
- claude_mpm/services/memory/cache/simple_cache.py +2 -2
- claude_mpm/services/memory/failure_tracker.py +578 -0
- claude_mpm/services/memory/indexed_memory.py +8 -8
- claude_mpm/services/memory/optimizer.py +8 -9
- claude_mpm/services/memory/router.py +3 -3
- claude_mpm/services/memory_hook_service.py +165 -4
- claude_mpm/services/model/__init__.py +147 -0
- claude_mpm/services/model/base_provider.py +365 -0
- claude_mpm/services/model/claude_provider.py +412 -0
- claude_mpm/services/model/model_router.py +452 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +691 -0
- claude_mpm/services/monitor/daemon_manager.py +1040 -0
- claude_mpm/services/monitor/event_emitter.py +350 -0
- claude_mpm/services/monitor/handlers/__init__.py +21 -0
- claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
- claude_mpm/services/monitor/handlers/dashboard.py +299 -0
- claude_mpm/services/monitor/handlers/file.py +264 -0
- claude_mpm/services/monitor/handlers/hooks.py +512 -0
- claude_mpm/services/monitor/management/__init__.py +18 -0
- claude_mpm/services/monitor/management/health.py +124 -0
- claude_mpm/services/monitor/management/lifecycle.py +724 -0
- claude_mpm/services/monitor/server.py +817 -0
- claude_mpm/services/monitor_build_service.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/orphan_detection.py +786 -0
- claude_mpm/services/port_manager.py +3 -3
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/__init__.py +23 -0
- claude_mpm/services/project/analyzer.py +3 -3
- claude_mpm/services/project/architecture_analyzer.py +5 -5
- claude_mpm/services/project/archive_manager.py +1045 -0
- claude_mpm/services/project/dependency_analyzer.py +4 -4
- claude_mpm/services/project/detection_strategies.py +719 -0
- claude_mpm/services/project/documentation_manager.py +554 -0
- claude_mpm/services/project/enhanced_analyzer.py +572 -0
- claude_mpm/services/project/metrics_collector.py +4 -4
- claude_mpm/services/project/project_organizer.py +1005 -0
- claude_mpm/services/project/registry.py +13 -7
- claude_mpm/services/project/toolchain_analyzer.py +583 -0
- claude_mpm/services/project_port_allocator.py +596 -0
- claude_mpm/services/response_tracker.py +21 -10
- claude_mpm/services/runner_configuration_service.py +17 -3
- claude_mpm/services/self_upgrade_service.py +500 -0
- claude_mpm/services/session_management_service.py +23 -9
- claude_mpm/services/session_manager.py +380 -0
- claude_mpm/services/shared/__init__.py +2 -1
- claude_mpm/services/shared/async_service_base.py +16 -27
- claude_mpm/services/shared/config_service_base.py +17 -14
- claude_mpm/services/shared/lifecycle_service_base.py +1 -14
- claude_mpm/services/shared/service_factory.py +8 -5
- claude_mpm/services/skills/__init__.py +18 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +955 -0
- claude_mpm/services/socketio/client_proxy.py +60 -5
- claude_mpm/services/socketio/dashboard_server.py +361 -0
- claude_mpm/services/socketio/event_normalizer.py +10 -6
- claude_mpm/services/socketio/handlers/__init__.py +5 -2
- claude_mpm/services/socketio/handlers/base.py +2 -2
- claude_mpm/services/socketio/handlers/code_analysis.py +90 -27
- claude_mpm/services/socketio/handlers/connection.py +22 -41
- claude_mpm/services/socketio/handlers/connection_handler.py +13 -10
- claude_mpm/services/socketio/handlers/file.py +46 -10
- claude_mpm/services/socketio/handlers/git.py +9 -9
- claude_mpm/services/socketio/handlers/hook.py +29 -17
- claude_mpm/services/socketio/handlers/registry.py +4 -2
- claude_mpm/services/socketio/monitor_client.py +364 -0
- claude_mpm/services/socketio/server/broadcaster.py +9 -7
- claude_mpm/services/socketio/server/connection_manager.py +2 -2
- claude_mpm/services/socketio/server/core.py +142 -8
- claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
- claude_mpm/services/socketio/server/main.py +24 -24
- claude_mpm/services/socketio_client_manager.py +4 -4
- claude_mpm/services/subprocess_launcher_service.py +19 -15
- claude_mpm/services/system_instructions_service.py +3 -5
- claude_mpm/services/ticket_services/formatter_service.py +1 -1
- claude_mpm/services/ticket_services/validation_service.py +5 -5
- claude_mpm/services/unified/__init__.py +65 -0
- claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +900 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -0
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
- claude_mpm/services/unified/config_strategies/__init__.py +175 -0
- claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
- claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
- claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
- claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
- claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
- claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
- claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
- claude_mpm/services/unified/deployment_strategies/base.py +553 -0
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
- claude_mpm/services/unified/deployment_strategies/local.py +607 -0
- claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
- claude_mpm/services/unified/deployment_strategies/vercel.py +471 -0
- claude_mpm/services/unified/interfaces.py +475 -0
- claude_mpm/services/unified/migration.py +509 -0
- claude_mpm/services/unified/strategies.py +534 -0
- claude_mpm/services/unified/unified_analyzer.py +542 -0
- claude_mpm/services/unified/unified_config.py +691 -0
- claude_mpm/services/unified/unified_deployment.py +466 -0
- claude_mpm/services/utility_service.py +6 -3
- claude_mpm/services/version_control/branch_strategy.py +2 -2
- claude_mpm/services/version_control/conflict_resolution.py +14 -8
- claude_mpm/services/version_control/git_operations.py +26 -24
- claude_mpm/services/version_control/semantic_versioning.py +14 -14
- claude_mpm/services/version_control/version_parser.py +14 -11
- claude_mpm/services/version_service.py +104 -1
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- claude_mpm/skills/__init__.py +42 -0
- claude_mpm/skills/agent_skills_injector.py +324 -0
- claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
- claude_mpm/skills/bundled/__init__.py +6 -0
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +573 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/security-scanning.md +327 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
- claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +286 -0
- claude_mpm/skills/skill_manager.py +310 -0
- claude_mpm/skills/skills_registry.py +347 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/state_storage.py +31 -31
- claude_mpm/templates/questions/__init__.py +38 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +311 -0
- claude_mpm/templates/questions/project_init.py +385 -0
- claude_mpm/templates/questions/ticket_mgmt.py +394 -0
- claude_mpm/tools/__main__.py +9 -9
- claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
- claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
- claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
- claude_mpm/tools/code_tree_analyzer/core.py +380 -0
- claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
- claude_mpm/tools/code_tree_analyzer/events.py +168 -0
- claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
- claude_mpm/tools/code_tree_analyzer/models.py +39 -0
- claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
- claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
- claude_mpm/tools/code_tree_builder.py +6 -6
- claude_mpm/tools/code_tree_events.py +14 -10
- claude_mpm/tools/socketio_debug.py +11 -11
- claude_mpm/utils/agent_dependency_loader.py +184 -36
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/common.py +544 -0
- claude_mpm/utils/config_manager.py +12 -6
- claude_mpm/utils/database_connector.py +298 -0
- claude_mpm/utils/dependency_cache.py +5 -3
- claude_mpm/utils/dependency_strategies.py +15 -10
- claude_mpm/utils/display_helper.py +260 -0
- claude_mpm/utils/environment_context.py +4 -3
- claude_mpm/utils/error_handler.py +5 -3
- claude_mpm/utils/file_utils.py +13 -14
- claude_mpm/utils/git_analyzer.py +407 -0
- claude_mpm/utils/gitignore.py +241 -0
- claude_mpm/utils/log_cleanup.py +627 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/path_operations.py +7 -4
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +131 -24
- claude_mpm/utils/session_logging.py +2 -2
- claude_mpm/utils/structured_questions.py +619 -0
- claude_mpm/utils/subprocess_utils.py +9 -8
- claude_mpm/validation/agent_validator.py +6 -6
- claude_mpm/validation/frontmatter_validator.py +6 -6
- claude_mpm-5.0.9.dist-info/METADATA +1028 -0
- claude_mpm-5.0.9.dist-info/RECORD +864 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +1 -0
- claude_mpm/agents/INSTRUCTIONS.md +0 -261
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
- claude_mpm/agents/templates/agent-manager.json +0 -270
- claude_mpm/agents/templates/agent-manager.md +0 -619
- claude_mpm/agents/templates/agentic_coder_optimizer.json +0 -222
- claude_mpm/agents/templates/api_qa.json +0 -171
- claude_mpm/agents/templates/code_analyzer.json +0 -95
- claude_mpm/agents/templates/data_engineer.json +0 -152
- claude_mpm/agents/templates/documentation.json +0 -175
- claude_mpm/agents/templates/engineer.json +0 -176
- claude_mpm/agents/templates/imagemagick.json +0 -261
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/memory_manager.json +0 -155
- claude_mpm/agents/templates/ops.json +0 -175
- claude_mpm/agents/templates/project_organizer.json +0 -130
- claude_mpm/agents/templates/qa.json +0 -223
- claude_mpm/agents/templates/refactoring_engineer.json +0 -266
- claude_mpm/agents/templates/research.json +0 -163
- claude_mpm/agents/templates/security.json +0 -153
- claude_mpm/agents/templates/ticketing.json +0 -169
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -281
- claude_mpm/agents/templates/version_control.json +0 -147
- claude_mpm/agents/templates/web_qa.json +0 -254
- claude_mpm/agents/templates/web_ui.json +0 -176
- claude_mpm/cli/commands/configure_tui.py +0 -1927
- claude_mpm/cli/commands/mpm_init.py +0 -594
- claude_mpm/cli/commands/socketio_monitor.py +0 -233
- claude_mpm/commands/mpm-agents.md +0 -12
- claude_mpm/commands/mpm-config.md +0 -18
- claude_mpm/commands/mpm-tickets.md +0 -102
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/css/code-tree.css +0 -1408
- claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/dist/dashboard.js +0 -2
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- claude_mpm/dashboard/static/js/components/code-tree.js +0 -3220
- claude_mpm/dashboard/static/js/components/code-viewer.js +0 -480
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
- claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1040
- claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
- claude_mpm/scripts/socketio_daemon_hardened.py +0 -937
- claude_mpm/scripts/socketio_daemon_wrapper.py +0 -78
- claude_mpm/scripts/socketio_server_manager.py +0 -349
- claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
- claude_mpm/services/cli/dashboard_launcher.py +0 -423
- claude_mpm/services/cli/socketio_manager.py +0 -537
- claude_mpm/services/diagnostics/checks/claude_desktop_check.py +0 -286
- claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -645
- claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -602
- claude_mpm/services/project/analyzer_refactored.py +0 -450
- claude_mpm/tools/code_tree_analyzer.py +0 -1693
- claude_mpm-4.1.26.dist-info/METADATA +0 -332
- claude_mpm-4.1.26.dist-info/RECORD +0 -606
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/WHEEL +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
|
@@ -21,7 +21,7 @@ ARCHITECTURE:
|
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
23
|
import logging
|
|
24
|
-
from datetime import datetime
|
|
24
|
+
from datetime import datetime, timezone
|
|
25
25
|
from pathlib import Path
|
|
26
26
|
from typing import Any, Dict, List, Optional, Set
|
|
27
27
|
|
|
@@ -40,9 +40,11 @@ class MemoryManager(IMemoryManager):
|
|
|
40
40
|
4. Legacy format migration (e.g., PM.md -> PM_memories.md)
|
|
41
41
|
5. Memory caching for performance
|
|
42
42
|
|
|
43
|
-
Memory
|
|
44
|
-
-
|
|
45
|
-
-
|
|
43
|
+
Memory Scope:
|
|
44
|
+
- Project-level ONLY: ./.claude-mpm/memories/ (project-scoped isolation)
|
|
45
|
+
- User-level memories are NOT loaded to prevent cross-project contamination
|
|
46
|
+
|
|
47
|
+
Note: As of v4.7.10+, memories are strictly project-scoped for complete isolation.
|
|
46
48
|
"""
|
|
47
49
|
|
|
48
50
|
def __init__(
|
|
@@ -169,7 +171,7 @@ class MemoryManager(IMemoryManager):
|
|
|
169
171
|
]
|
|
170
172
|
|
|
171
173
|
# Add new memory as a bullet point
|
|
172
|
-
timestamp = datetime.now().isoformat()
|
|
174
|
+
timestamp = datetime.now(timezone.utc).isoformat()
|
|
173
175
|
lines.append(f"- [{timestamp}] {key}: {value}")
|
|
174
176
|
|
|
175
177
|
# Write back
|
|
@@ -279,7 +281,10 @@ class MemoryManager(IMemoryManager):
|
|
|
279
281
|
|
|
280
282
|
def _load_actual_memories(self, deployed_agents: Set[str]) -> Dict[str, Any]:
|
|
281
283
|
"""
|
|
282
|
-
Load actual memories from
|
|
284
|
+
Load actual memories from project directory only.
|
|
285
|
+
|
|
286
|
+
Memories are project-scoped to ensure complete isolation between projects.
|
|
287
|
+
User-level memories are no longer supported to prevent cross-project contamination.
|
|
283
288
|
|
|
284
289
|
Args:
|
|
285
290
|
deployed_agents: Set of deployed agent names
|
|
@@ -287,32 +292,14 @@ class MemoryManager(IMemoryManager):
|
|
|
287
292
|
Returns:
|
|
288
293
|
Dictionary with actual_memories and agent_memories
|
|
289
294
|
"""
|
|
290
|
-
# Define memory
|
|
291
|
-
user_memories_dir = Path.home() / ".claude-mpm" / "memories"
|
|
295
|
+
# Define project memory directory (project-scoped only)
|
|
292
296
|
project_memories_dir = Path.cwd() / ".claude-mpm" / "memories"
|
|
293
297
|
|
|
294
298
|
# Dictionary to store aggregated memories
|
|
295
299
|
pm_memories = []
|
|
296
300
|
agent_memories_dict = {}
|
|
297
301
|
|
|
298
|
-
# Load memories from
|
|
299
|
-
if user_memories_dir.exists():
|
|
300
|
-
self.logger.info(
|
|
301
|
-
f"Loading user-level memory files from: {user_memories_dir}"
|
|
302
|
-
)
|
|
303
|
-
self._load_memories_from_directory(
|
|
304
|
-
user_memories_dir,
|
|
305
|
-
deployed_agents,
|
|
306
|
-
pm_memories,
|
|
307
|
-
agent_memories_dict,
|
|
308
|
-
"user",
|
|
309
|
-
)
|
|
310
|
-
else:
|
|
311
|
-
self.logger.debug(
|
|
312
|
-
f"No user memories directory found at: {user_memories_dir}"
|
|
313
|
-
)
|
|
314
|
-
|
|
315
|
-
# Load memories from project directory (overrides user memories)
|
|
302
|
+
# Load memories from project directory only
|
|
316
303
|
if project_memories_dir.exists():
|
|
317
304
|
self.logger.info(
|
|
318
305
|
f"Loading project-level memory files from: {project_memories_dir}"
|
|
@@ -335,19 +322,37 @@ class MemoryManager(IMemoryManager):
|
|
|
335
322
|
if pm_memories:
|
|
336
323
|
aggregated_pm = self._aggregate_memories(pm_memories)
|
|
337
324
|
result["actual_memories"] = aggregated_pm
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
325
|
+
# Count actual memory items in aggregated content
|
|
326
|
+
memory_items = [
|
|
327
|
+
line.strip()
|
|
328
|
+
for line in aggregated_pm.split("\n")
|
|
329
|
+
if line.strip().startswith("-")
|
|
330
|
+
]
|
|
331
|
+
if memory_items:
|
|
332
|
+
self.logger.info(
|
|
333
|
+
f"Aggregated PM memory: {len(memory_items)} total items from {len(pm_memories)} source(s)"
|
|
334
|
+
)
|
|
335
|
+
else:
|
|
336
|
+
self.logger.debug(
|
|
337
|
+
f"Aggregated PM memory from {len(pm_memories)} source(s) (no items)"
|
|
338
|
+
)
|
|
342
339
|
|
|
343
340
|
# Store agent memories (already aggregated per agent)
|
|
344
341
|
if agent_memories_dict:
|
|
345
342
|
result["agent_memories"] = agent_memories_dict
|
|
346
343
|
for agent_name, memory_content in agent_memories_dict.items():
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
344
|
+
# Count actual memory items
|
|
345
|
+
memory_items = [
|
|
346
|
+
line.strip()
|
|
347
|
+
for line in memory_content.split("\n")
|
|
348
|
+
if line.strip().startswith("-")
|
|
349
|
+
]
|
|
350
|
+
if memory_items:
|
|
351
|
+
self.logger.debug(
|
|
352
|
+
f"Aggregated {agent_name} memory: {len(memory_items)} items"
|
|
353
|
+
)
|
|
354
|
+
else:
|
|
355
|
+
self.logger.debug(f"Aggregated {agent_name} memory: no items")
|
|
351
356
|
|
|
352
357
|
# Log summary
|
|
353
358
|
if self._stats["loaded_count"] > 0 or self._stats["skipped_count"] > 0:
|
|
@@ -410,10 +415,21 @@ class MemoryManager(IMemoryManager):
|
|
|
410
415
|
"path": pm_memory_path,
|
|
411
416
|
}
|
|
412
417
|
)
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
418
|
+
# Count actual memory items (lines starting with "-")
|
|
419
|
+
memory_items = [
|
|
420
|
+
line.strip()
|
|
421
|
+
for line in loaded_content.split("\n")
|
|
422
|
+
if line.strip().startswith("-")
|
|
423
|
+
]
|
|
424
|
+
if memory_items:
|
|
425
|
+
self.logger.info(
|
|
426
|
+
f"Loaded {source} PM memory: {len(memory_items)} items"
|
|
427
|
+
)
|
|
428
|
+
else:
|
|
429
|
+
# Skip logging if no actual memory items
|
|
430
|
+
self.logger.debug(
|
|
431
|
+
f"Skipped {source} PM memory: {pm_memory_path} (no memory items)"
|
|
432
|
+
)
|
|
417
433
|
self._stats["loaded_count"] += 1
|
|
418
434
|
except Exception as e:
|
|
419
435
|
self.logger.error(
|
|
@@ -471,20 +487,47 @@ class MemoryManager(IMemoryManager):
|
|
|
471
487
|
}
|
|
472
488
|
)
|
|
473
489
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
490
|
+
# Count actual memory items (lines starting with "-")
|
|
491
|
+
memory_items = [
|
|
492
|
+
line.strip()
|
|
493
|
+
for line in loaded_content.split("\n")
|
|
494
|
+
if line.strip().startswith("-")
|
|
495
|
+
]
|
|
496
|
+
if memory_items:
|
|
497
|
+
self.logger.info(
|
|
498
|
+
f"Loaded {source} memory for {agent_name}: {len(memory_items)} items"
|
|
499
|
+
)
|
|
500
|
+
else:
|
|
501
|
+
# Skip logging if no actual memory items
|
|
502
|
+
self.logger.debug(
|
|
503
|
+
f"Skipped {source} memory for {agent_name}: {memory_file.name} (no memory items)"
|
|
504
|
+
)
|
|
478
505
|
self._stats["loaded_count"] += 1
|
|
479
506
|
except Exception as e:
|
|
480
507
|
self.logger.error(
|
|
481
508
|
f"Failed to load agent memory from {memory_file}: {e}"
|
|
482
509
|
)
|
|
483
510
|
else:
|
|
484
|
-
# Log skipped memories
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
511
|
+
# Log skipped memories only if they contain actual items
|
|
512
|
+
try:
|
|
513
|
+
loaded_content = memory_file.read_text(encoding="utf-8")
|
|
514
|
+
memory_items = [
|
|
515
|
+
line.strip()
|
|
516
|
+
for line in loaded_content.split("\n")
|
|
517
|
+
if line.strip().startswith("-")
|
|
518
|
+
]
|
|
519
|
+
if memory_items:
|
|
520
|
+
self.logger.info(
|
|
521
|
+
f"Skipped {source} memory: {memory_file.name} (agent '{agent_name}' not deployed, {len(memory_items)} items)"
|
|
522
|
+
)
|
|
523
|
+
else:
|
|
524
|
+
# Don't log if file has no actual memory items
|
|
525
|
+
self.logger.debug(
|
|
526
|
+
f"Skipped {source} memory: {memory_file.name} (agent '{agent_name}' not deployed, no items)"
|
|
527
|
+
)
|
|
528
|
+
except Exception:
|
|
529
|
+
# If we can't read the file, just skip silently
|
|
530
|
+
pass
|
|
488
531
|
|
|
489
532
|
# Detect naming mismatches
|
|
490
533
|
alt_name = (
|
|
@@ -570,7 +613,9 @@ class MemoryManager(IMemoryManager):
|
|
|
570
613
|
lines.append("# Agent Memory")
|
|
571
614
|
|
|
572
615
|
# Add latest timestamp
|
|
573
|
-
lines.append(
|
|
616
|
+
lines.append(
|
|
617
|
+
f"<!-- Last Updated: {datetime.now(timezone.utc).isoformat()}Z -->"
|
|
618
|
+
)
|
|
574
619
|
lines.append("")
|
|
575
620
|
|
|
576
621
|
# Add all unique items (sorted for consistency)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Core Models Package for Claude MPM Framework
|
|
3
|
+
============================================
|
|
4
|
+
|
|
5
|
+
WHY: This package contains data models used across the service layer.
|
|
6
|
+
Models are organized by domain to maintain clear boundaries and enable
|
|
7
|
+
independent evolution of different model types.
|
|
8
|
+
|
|
9
|
+
DESIGN DECISION: Models are grouped by domain (toolchain, agent_config)
|
|
10
|
+
to create logical cohesion and make it easier to understand dependencies
|
|
11
|
+
between different parts of the system.
|
|
12
|
+
|
|
13
|
+
Part of TSK-0054: Auto-Configuration Feature - Phase 1
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from .agent_config import (
|
|
17
|
+
AgentCapabilities,
|
|
18
|
+
AgentRecommendation,
|
|
19
|
+
ConfigurationPreview,
|
|
20
|
+
ConfigurationResult,
|
|
21
|
+
ValidationResult,
|
|
22
|
+
)
|
|
23
|
+
from .process import (
|
|
24
|
+
PROTECTED_PORT_RANGES,
|
|
25
|
+
DeploymentState,
|
|
26
|
+
ProcessInfo,
|
|
27
|
+
StartConfig,
|
|
28
|
+
is_port_protected,
|
|
29
|
+
)
|
|
30
|
+
from .restart import CircuitBreakerState, RestartAttempt, RestartConfig, RestartHistory
|
|
31
|
+
from .stability import LogPatternMatch, MemoryTrend, ResourceUsage
|
|
32
|
+
from .toolchain import (
|
|
33
|
+
ConfidenceLevel,
|
|
34
|
+
DeploymentTarget,
|
|
35
|
+
Framework,
|
|
36
|
+
LanguageDetection,
|
|
37
|
+
ToolchainAnalysis,
|
|
38
|
+
ToolchainComponent,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
__all__ = [ # noqa: RUF022 - Grouped by category with comments for clarity
|
|
42
|
+
# Toolchain models
|
|
43
|
+
"ConfidenceLevel",
|
|
44
|
+
"ToolchainComponent",
|
|
45
|
+
"LanguageDetection",
|
|
46
|
+
"Framework",
|
|
47
|
+
"DeploymentTarget",
|
|
48
|
+
"ToolchainAnalysis",
|
|
49
|
+
# Agent configuration models
|
|
50
|
+
"AgentCapabilities",
|
|
51
|
+
"AgentRecommendation",
|
|
52
|
+
"ConfigurationResult",
|
|
53
|
+
"ValidationResult",
|
|
54
|
+
"ConfigurationPreview",
|
|
55
|
+
# Process management models
|
|
56
|
+
"DeploymentState",
|
|
57
|
+
"ProcessInfo",
|
|
58
|
+
"StartConfig",
|
|
59
|
+
"PROTECTED_PORT_RANGES",
|
|
60
|
+
"is_port_protected",
|
|
61
|
+
# Restart management models
|
|
62
|
+
"CircuitBreakerState",
|
|
63
|
+
"RestartAttempt",
|
|
64
|
+
"RestartHistory",
|
|
65
|
+
"RestartConfig",
|
|
66
|
+
# Stability monitoring models
|
|
67
|
+
"MemoryTrend",
|
|
68
|
+
"LogPatternMatch",
|
|
69
|
+
"ResourceUsage",
|
|
70
|
+
]
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Agent Configuration Data Models for Claude MPM Framework
|
|
3
|
+
========================================================
|
|
4
|
+
|
|
5
|
+
WHY: These models represent agent capabilities, recommendations, and
|
|
6
|
+
configuration results. They provide a standardized way to communicate
|
|
7
|
+
agent suitability, deployment plans, and validation outcomes.
|
|
8
|
+
|
|
9
|
+
DESIGN DECISION: Uses dataclasses with validation to ensure data consistency.
|
|
10
|
+
Includes confidence scores and reasoning to enable transparent decision-making.
|
|
11
|
+
Supports both successful and error states for robust error handling.
|
|
12
|
+
|
|
13
|
+
Part of TSK-0054: Auto-Configuration Feature - Phase 1
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from dataclasses import dataclass, field
|
|
17
|
+
from enum import Enum
|
|
18
|
+
from typing import Any, Dict, List, Optional
|
|
19
|
+
|
|
20
|
+
from ....core.enums import OperationResult, ValidationSeverity
|
|
21
|
+
|
|
22
|
+
# Backward compatibility alias (consolidated in Phase 3A Batch 25)
|
|
23
|
+
ConfigurationStatus = OperationResult
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AgentSpecialization(str, Enum):
|
|
27
|
+
"""Agent specialization categories.
|
|
28
|
+
|
|
29
|
+
WHY: Agents have different areas of expertise. This enum provides
|
|
30
|
+
a standardized taxonomy for categorizing agent capabilities.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
GENERAL = "general"
|
|
34
|
+
LANGUAGE_SPECIFIC = "language_specific"
|
|
35
|
+
FRAMEWORK_SPECIFIC = "framework_specific"
|
|
36
|
+
DEVOPS = "devops"
|
|
37
|
+
SECURITY = "security"
|
|
38
|
+
TESTING = "testing"
|
|
39
|
+
DOCUMENTATION = "documentation"
|
|
40
|
+
PERFORMANCE = "performance"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclass(frozen=True)
|
|
44
|
+
class AgentCapabilities:
|
|
45
|
+
"""Represents the capabilities of an agent.
|
|
46
|
+
|
|
47
|
+
WHY: Understanding what an agent can do is essential for matching
|
|
48
|
+
agents to projects. This model captures all relevant capability
|
|
49
|
+
information in a structured format.
|
|
50
|
+
|
|
51
|
+
DESIGN DECISION: Frozen to prevent modification of capability definitions.
|
|
52
|
+
Includes both broad categories (specializations) and specific skills
|
|
53
|
+
(languages, frameworks) to enable fine-grained matching.
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
agent_id: str
|
|
57
|
+
agent_name: str
|
|
58
|
+
specializations: List[AgentSpecialization] = field(default_factory=list)
|
|
59
|
+
supported_languages: List[str] = field(default_factory=list)
|
|
60
|
+
supported_frameworks: List[str] = field(default_factory=list)
|
|
61
|
+
required_tools: List[str] = field(default_factory=list)
|
|
62
|
+
optional_tools: List[str] = field(default_factory=list)
|
|
63
|
+
deployment_targets: List[str] = field(default_factory=list)
|
|
64
|
+
description: str = ""
|
|
65
|
+
strengths: List[str] = field(default_factory=list)
|
|
66
|
+
limitations: List[str] = field(default_factory=list)
|
|
67
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
68
|
+
|
|
69
|
+
def __post_init__(self):
|
|
70
|
+
"""Validate agent capabilities."""
|
|
71
|
+
if not self.agent_id or not self.agent_id.strip():
|
|
72
|
+
raise ValueError("Agent ID cannot be empty")
|
|
73
|
+
if not self.agent_name or not self.agent_name.strip():
|
|
74
|
+
raise ValueError("Agent name cannot be empty")
|
|
75
|
+
|
|
76
|
+
def supports_language(self, language: str) -> bool:
|
|
77
|
+
"""Check if agent supports a specific language (case-insensitive)."""
|
|
78
|
+
return any(
|
|
79
|
+
lang.lower() == language.lower() for lang in self.supported_languages
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
def supports_framework(self, framework: str) -> bool:
|
|
83
|
+
"""Check if agent supports a specific framework (case-insensitive)."""
|
|
84
|
+
return any(fw.lower() == framework.lower() for fw in self.supported_frameworks)
|
|
85
|
+
|
|
86
|
+
def has_specialization(self, specialization: AgentSpecialization) -> bool:
|
|
87
|
+
"""Check if agent has a specific specialization."""
|
|
88
|
+
return specialization in self.specializations
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@dataclass
|
|
92
|
+
class AgentRecommendation:
|
|
93
|
+
"""Represents a recommended agent with reasoning.
|
|
94
|
+
|
|
95
|
+
WHY: Users need to understand why agents are recommended. This model
|
|
96
|
+
captures the recommendation along with confidence score, match reasoning,
|
|
97
|
+
and any warnings or considerations.
|
|
98
|
+
|
|
99
|
+
DESIGN DECISION: Includes detailed reasoning to support transparency
|
|
100
|
+
and enable users to make informed decisions. Confidence score enables
|
|
101
|
+
filtering and ranking of recommendations.
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
agent_id: str
|
|
105
|
+
agent_name: str
|
|
106
|
+
confidence_score: float # 0.0-1.0
|
|
107
|
+
match_reasons: List[str] = field(default_factory=list)
|
|
108
|
+
concerns: List[str] = field(default_factory=list)
|
|
109
|
+
capabilities: Optional[AgentCapabilities] = None
|
|
110
|
+
deployment_priority: int = 1 # Lower = higher priority
|
|
111
|
+
configuration_hints: Dict[str, Any] = field(default_factory=dict)
|
|
112
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
113
|
+
|
|
114
|
+
def __post_init__(self):
|
|
115
|
+
"""Validate agent recommendation."""
|
|
116
|
+
if not self.agent_id or not self.agent_id.strip():
|
|
117
|
+
raise ValueError("Agent ID cannot be empty")
|
|
118
|
+
if not self.agent_name or not self.agent_name.strip():
|
|
119
|
+
raise ValueError("Agent name cannot be empty")
|
|
120
|
+
if not (0.0 <= self.confidence_score <= 1.0):
|
|
121
|
+
raise ValueError(
|
|
122
|
+
f"Confidence score must be 0.0-1.0, got {self.confidence_score}"
|
|
123
|
+
)
|
|
124
|
+
if self.deployment_priority < 1:
|
|
125
|
+
raise ValueError(
|
|
126
|
+
f"Deployment priority must be >= 1, got {self.deployment_priority}"
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
@property
|
|
130
|
+
def is_high_confidence(self) -> bool:
|
|
131
|
+
"""Check if recommendation has high confidence (>= 0.8)."""
|
|
132
|
+
return self.confidence_score >= 0.8
|
|
133
|
+
|
|
134
|
+
@property
|
|
135
|
+
def is_medium_confidence(self) -> bool:
|
|
136
|
+
"""Check if recommendation has medium confidence (0.5-0.8)."""
|
|
137
|
+
return 0.5 <= self.confidence_score < 0.8
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def is_low_confidence(self) -> bool:
|
|
141
|
+
"""Check if recommendation has low confidence (< 0.5)."""
|
|
142
|
+
return self.confidence_score < 0.5
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def has_concerns(self) -> bool:
|
|
146
|
+
"""Check if recommendation has any concerns."""
|
|
147
|
+
return len(self.concerns) > 0
|
|
148
|
+
|
|
149
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
150
|
+
"""Convert recommendation to dictionary."""
|
|
151
|
+
return {
|
|
152
|
+
"agent_id": self.agent_id,
|
|
153
|
+
"agent_name": self.agent_name,
|
|
154
|
+
"confidence_score": self.confidence_score,
|
|
155
|
+
"match_reasons": self.match_reasons,
|
|
156
|
+
"concerns": self.concerns,
|
|
157
|
+
"deployment_priority": self.deployment_priority,
|
|
158
|
+
"configuration_hints": self.configuration_hints,
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
@dataclass
|
|
163
|
+
class ConfigurationResult:
|
|
164
|
+
"""Result of automated configuration operation.
|
|
165
|
+
|
|
166
|
+
WHY: Configuration operations need to return comprehensive results
|
|
167
|
+
including what was deployed, what failed, and any warnings. This model
|
|
168
|
+
provides a complete picture of the configuration outcome.
|
|
169
|
+
|
|
170
|
+
DESIGN DECISION: Separates successful and failed deployments to enable
|
|
171
|
+
proper error handling. Includes validation results and user-facing
|
|
172
|
+
messages for transparency.
|
|
173
|
+
|
|
174
|
+
NOTE: Uses core OperationResult enum (consolidated from ConfigurationStatus
|
|
175
|
+
in Phase 3A Batch 25). Mappings:
|
|
176
|
+
- SUCCESS → OperationResult.SUCCESS
|
|
177
|
+
- PARTIAL_SUCCESS → OperationResult.WARNING (partial success with issues)
|
|
178
|
+
- FAILURE → OperationResult.FAILED
|
|
179
|
+
- VALIDATION_ERROR → OperationResult.ERROR
|
|
180
|
+
- USER_CANCELLED → OperationResult.CANCELLED
|
|
181
|
+
"""
|
|
182
|
+
|
|
183
|
+
status: OperationResult
|
|
184
|
+
deployed_agents: List[str] = field(default_factory=list)
|
|
185
|
+
failed_agents: List[str] = field(default_factory=list)
|
|
186
|
+
validation_warnings: List[str] = field(default_factory=list)
|
|
187
|
+
validation_errors: List[str] = field(default_factory=list)
|
|
188
|
+
recommendations: List[AgentRecommendation] = field(default_factory=list)
|
|
189
|
+
message: str = ""
|
|
190
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
191
|
+
|
|
192
|
+
@property
|
|
193
|
+
def is_successful(self) -> bool:
|
|
194
|
+
"""Check if configuration was completely successful."""
|
|
195
|
+
return self.status == OperationResult.SUCCESS
|
|
196
|
+
|
|
197
|
+
@property
|
|
198
|
+
def has_failures(self) -> bool:
|
|
199
|
+
"""Check if any agents failed to deploy."""
|
|
200
|
+
return len(self.failed_agents) > 0
|
|
201
|
+
|
|
202
|
+
@property
|
|
203
|
+
def has_warnings(self) -> bool:
|
|
204
|
+
"""Check if there are any warnings."""
|
|
205
|
+
return len(self.validation_warnings) > 0
|
|
206
|
+
|
|
207
|
+
@property
|
|
208
|
+
def deployment_count(self) -> int:
|
|
209
|
+
"""Get number of successfully deployed agents."""
|
|
210
|
+
return len(self.deployed_agents)
|
|
211
|
+
|
|
212
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
213
|
+
"""Convert result to dictionary."""
|
|
214
|
+
return {
|
|
215
|
+
"status": self.status.value,
|
|
216
|
+
"deployed_agents": self.deployed_agents,
|
|
217
|
+
"failed_agents": self.failed_agents,
|
|
218
|
+
"validation_warnings": self.validation_warnings,
|
|
219
|
+
"validation_errors": self.validation_errors,
|
|
220
|
+
"message": self.message,
|
|
221
|
+
"deployment_count": self.deployment_count,
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
@dataclass
|
|
226
|
+
class ValidationIssue:
|
|
227
|
+
"""Represents a validation issue.
|
|
228
|
+
|
|
229
|
+
WHY: Validation can identify multiple types of issues. This model
|
|
230
|
+
provides structured representation of issues with context and
|
|
231
|
+
suggested resolutions.
|
|
232
|
+
"""
|
|
233
|
+
|
|
234
|
+
severity: ValidationSeverity
|
|
235
|
+
message: str
|
|
236
|
+
agent_id: Optional[str] = None
|
|
237
|
+
field: Optional[str] = None
|
|
238
|
+
suggested_fix: Optional[str] = None
|
|
239
|
+
|
|
240
|
+
def __post_init__(self):
|
|
241
|
+
"""Validate issue data."""
|
|
242
|
+
if not self.message or not self.message.strip():
|
|
243
|
+
raise ValueError("Validation issue message cannot be empty")
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
@dataclass
|
|
247
|
+
class ValidationResult:
|
|
248
|
+
"""Result of configuration validation.
|
|
249
|
+
|
|
250
|
+
WHY: Validation produces multiple types of findings (errors, warnings, info).
|
|
251
|
+
This model aggregates all validation results and provides summary properties.
|
|
252
|
+
|
|
253
|
+
DESIGN DECISION: Separates issues by severity to enable appropriate handling.
|
|
254
|
+
Provides convenience properties for common checks (is_valid, has_errors).
|
|
255
|
+
"""
|
|
256
|
+
|
|
257
|
+
is_valid: bool
|
|
258
|
+
issues: List[ValidationIssue] = field(default_factory=list)
|
|
259
|
+
validated_agents: List[str] = field(default_factory=list)
|
|
260
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
261
|
+
|
|
262
|
+
@property
|
|
263
|
+
def errors(self) -> List[ValidationIssue]:
|
|
264
|
+
"""Get all error-level issues."""
|
|
265
|
+
return [
|
|
266
|
+
issue for issue in self.issues if issue.severity == ValidationSeverity.ERROR
|
|
267
|
+
]
|
|
268
|
+
|
|
269
|
+
@property
|
|
270
|
+
def warnings(self) -> List[ValidationIssue]:
|
|
271
|
+
"""Get all warning-level issues."""
|
|
272
|
+
return [
|
|
273
|
+
issue
|
|
274
|
+
for issue in self.issues
|
|
275
|
+
if issue.severity == ValidationSeverity.WARNING
|
|
276
|
+
]
|
|
277
|
+
|
|
278
|
+
@property
|
|
279
|
+
def infos(self) -> List[ValidationIssue]:
|
|
280
|
+
"""Get all info-level issues."""
|
|
281
|
+
return [
|
|
282
|
+
issue for issue in self.issues if issue.severity == ValidationSeverity.INFO
|
|
283
|
+
]
|
|
284
|
+
|
|
285
|
+
@property
|
|
286
|
+
def has_errors(self) -> bool:
|
|
287
|
+
"""Check if validation has any errors."""
|
|
288
|
+
return len(self.errors) > 0
|
|
289
|
+
|
|
290
|
+
@property
|
|
291
|
+
def has_warnings(self) -> bool:
|
|
292
|
+
"""Check if validation has any warnings."""
|
|
293
|
+
return len(self.warnings) > 0
|
|
294
|
+
|
|
295
|
+
@property
|
|
296
|
+
def error_count(self) -> int:
|
|
297
|
+
"""Get number of errors."""
|
|
298
|
+
return len(self.errors)
|
|
299
|
+
|
|
300
|
+
@property
|
|
301
|
+
def warning_count(self) -> int:
|
|
302
|
+
"""Get number of warnings."""
|
|
303
|
+
return len(self.warnings)
|
|
304
|
+
|
|
305
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
306
|
+
"""Convert validation result to dictionary."""
|
|
307
|
+
return {
|
|
308
|
+
"is_valid": self.is_valid,
|
|
309
|
+
"error_count": self.error_count,
|
|
310
|
+
"warning_count": self.warning_count,
|
|
311
|
+
"validated_agents": self.validated_agents,
|
|
312
|
+
"errors": [
|
|
313
|
+
{
|
|
314
|
+
"severity": issue.severity.value,
|
|
315
|
+
"message": issue.message,
|
|
316
|
+
"agent_id": issue.agent_id,
|
|
317
|
+
}
|
|
318
|
+
for issue in self.errors
|
|
319
|
+
],
|
|
320
|
+
"warnings": [
|
|
321
|
+
{
|
|
322
|
+
"severity": issue.severity.value,
|
|
323
|
+
"message": issue.message,
|
|
324
|
+
"agent_id": issue.agent_id,
|
|
325
|
+
}
|
|
326
|
+
for issue in self.warnings
|
|
327
|
+
],
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
@dataclass
|
|
332
|
+
class ConfigurationPreview:
|
|
333
|
+
"""Preview of what would be configured.
|
|
334
|
+
|
|
335
|
+
WHY: Users need to see what would change before committing. This model
|
|
336
|
+
provides a complete preview including recommendations, validation results,
|
|
337
|
+
and estimated impact.
|
|
338
|
+
|
|
339
|
+
DESIGN DECISION: Includes validation results to show potential issues
|
|
340
|
+
before deployment. Provides summary statistics for quick assessment.
|
|
341
|
+
"""
|
|
342
|
+
|
|
343
|
+
recommendations: List[AgentRecommendation] = field(default_factory=list)
|
|
344
|
+
validation_result: Optional[ValidationResult] = None
|
|
345
|
+
estimated_deployment_time: float = 0.0 # seconds
|
|
346
|
+
would_deploy: List[str] = field(default_factory=list)
|
|
347
|
+
would_skip: List[str] = field(default_factory=list)
|
|
348
|
+
requires_confirmation: bool = True
|
|
349
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
350
|
+
|
|
351
|
+
@property
|
|
352
|
+
def deployment_count(self) -> int:
|
|
353
|
+
"""Get number of agents that would be deployed."""
|
|
354
|
+
return len(self.would_deploy)
|
|
355
|
+
|
|
356
|
+
@property
|
|
357
|
+
def skip_count(self) -> int:
|
|
358
|
+
"""Get number of agents that would be skipped."""
|
|
359
|
+
return len(self.would_skip)
|
|
360
|
+
|
|
361
|
+
@property
|
|
362
|
+
def is_valid(self) -> bool:
|
|
363
|
+
"""Check if preview represents a valid configuration."""
|
|
364
|
+
if self.validation_result is None:
|
|
365
|
+
return True
|
|
366
|
+
return self.validation_result.is_valid
|
|
367
|
+
|
|
368
|
+
@property
|
|
369
|
+
def high_confidence_count(self) -> int:
|
|
370
|
+
"""Get number of high-confidence recommendations."""
|
|
371
|
+
return sum(1 for rec in self.recommendations if rec.is_high_confidence)
|
|
372
|
+
|
|
373
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
374
|
+
"""Convert preview to dictionary."""
|
|
375
|
+
return {
|
|
376
|
+
"deployment_count": self.deployment_count,
|
|
377
|
+
"skip_count": self.skip_count,
|
|
378
|
+
"high_confidence_count": self.high_confidence_count,
|
|
379
|
+
"estimated_deployment_time": self.estimated_deployment_time,
|
|
380
|
+
"is_valid": self.is_valid,
|
|
381
|
+
"would_deploy": self.would_deploy,
|
|
382
|
+
"would_skip": self.would_skip,
|
|
383
|
+
"recommendations": [rec.to_dict() for rec in self.recommendations],
|
|
384
|
+
}
|