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
|
@@ -4,11 +4,13 @@ This service handles:
|
|
|
4
4
|
1. Copying command markdown files from source to user's ~/.claude/commands directory
|
|
5
5
|
2. Creating the commands directory if it doesn't exist
|
|
6
6
|
3. Overwriting existing commands to ensure they're up-to-date
|
|
7
|
+
4. Parsing and validating YAML frontmatter for namespace metadata (Phase 1 - 1M-400)
|
|
7
8
|
"""
|
|
8
9
|
|
|
9
|
-
import shutil
|
|
10
10
|
from pathlib import Path
|
|
11
|
-
from typing import Any, Dict, List
|
|
11
|
+
from typing import Any, Dict, List, Optional, Tuple
|
|
12
|
+
|
|
13
|
+
import yaml
|
|
12
14
|
|
|
13
15
|
from claude_mpm.core.base_service import BaseService
|
|
14
16
|
from claude_mpm.core.logger import get_logger
|
|
@@ -17,6 +19,16 @@ from claude_mpm.core.logger import get_logger
|
|
|
17
19
|
class CommandDeploymentService(BaseService):
|
|
18
20
|
"""Service for deploying MPM slash commands."""
|
|
19
21
|
|
|
22
|
+
# Deprecated commands that have been replaced (cleanup on startup)
|
|
23
|
+
DEPRECATED_COMMANDS = [
|
|
24
|
+
"mpm-agents.md", # Replaced by mpm-agents-list.md
|
|
25
|
+
"mpm-auto-configure.md", # Replaced by mpm-agents-auto-configure.md
|
|
26
|
+
"mpm-config.md", # Replaced by mpm-config-view.md
|
|
27
|
+
"mpm-organize.md", # Replaced by mpm-ticket-organize.md
|
|
28
|
+
"mpm-resume.md", # Replaced by mpm-session-resume.md
|
|
29
|
+
"mpm-ticket.md", # Replaced by mpm-ticket-view.md
|
|
30
|
+
]
|
|
31
|
+
|
|
20
32
|
def __init__(self):
|
|
21
33
|
"""Initialize the command deployment service."""
|
|
22
34
|
super().__init__(name="command_deployment")
|
|
@@ -39,6 +51,106 @@ class CommandDeploymentService(BaseService):
|
|
|
39
51
|
async def _cleanup(self) -> None:
|
|
40
52
|
"""Cleanup service resources."""
|
|
41
53
|
|
|
54
|
+
def _parse_frontmatter(self, content: str) -> Tuple[Optional[Dict[str, Any]], str]:
|
|
55
|
+
"""Parse YAML frontmatter from command file.
|
|
56
|
+
|
|
57
|
+
Ticket: 1M-400 Phase 1 - Enhanced Flat Naming with Namespace Metadata
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
content: Command file content
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
Tuple of (frontmatter_dict, content_without_frontmatter)
|
|
64
|
+
If no frontmatter found, returns (None, original_content)
|
|
65
|
+
"""
|
|
66
|
+
if not content.startswith("---\n"):
|
|
67
|
+
return None, content
|
|
68
|
+
|
|
69
|
+
try:
|
|
70
|
+
# Split on closing ---
|
|
71
|
+
parts = content.split("\n---\n", 1)
|
|
72
|
+
if len(parts) != 2:
|
|
73
|
+
return None, content
|
|
74
|
+
|
|
75
|
+
frontmatter_str = parts[0].replace("---\n", "", 1)
|
|
76
|
+
body = parts[1]
|
|
77
|
+
|
|
78
|
+
frontmatter = yaml.safe_load(frontmatter_str)
|
|
79
|
+
return frontmatter, body
|
|
80
|
+
except yaml.YAMLError as e:
|
|
81
|
+
self.logger.warning(f"YAML parsing error: {e}")
|
|
82
|
+
return None, content
|
|
83
|
+
|
|
84
|
+
def _validate_frontmatter(
|
|
85
|
+
self, frontmatter: Dict[str, Any], filepath: Path
|
|
86
|
+
) -> List[str]:
|
|
87
|
+
"""Validate frontmatter schema.
|
|
88
|
+
|
|
89
|
+
Ticket: 1M-400 Phase 1 - Enhanced Flat Naming with Namespace Metadata
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
frontmatter: Parsed frontmatter dictionary
|
|
93
|
+
filepath: Path to command file (for error reporting)
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
List of validation errors (empty if valid)
|
|
97
|
+
"""
|
|
98
|
+
errors = []
|
|
99
|
+
required_fields = ["namespace", "command", "category", "description"]
|
|
100
|
+
|
|
101
|
+
for field in required_fields:
|
|
102
|
+
if field not in frontmatter:
|
|
103
|
+
errors.append(f"Missing required field: {field}")
|
|
104
|
+
|
|
105
|
+
# Validate category
|
|
106
|
+
valid_categories = ["agents", "config", "tickets", "session", "system"]
|
|
107
|
+
if (
|
|
108
|
+
"category" in frontmatter
|
|
109
|
+
and frontmatter["category"] not in valid_categories
|
|
110
|
+
):
|
|
111
|
+
errors.append(
|
|
112
|
+
f"Invalid category: {frontmatter['category']} "
|
|
113
|
+
f"(must be one of {valid_categories})"
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
# Validate data types
|
|
117
|
+
if "aliases" in frontmatter and not isinstance(frontmatter["aliases"], list):
|
|
118
|
+
errors.append("Field 'aliases' must be a list")
|
|
119
|
+
|
|
120
|
+
if "deprecated_aliases" in frontmatter and not isinstance(
|
|
121
|
+
frontmatter["deprecated_aliases"], list
|
|
122
|
+
):
|
|
123
|
+
errors.append("Field 'deprecated_aliases' must be a list")
|
|
124
|
+
|
|
125
|
+
return errors
|
|
126
|
+
|
|
127
|
+
def _strip_deprecated_aliases(self, content: str) -> str:
|
|
128
|
+
"""Strip deprecated_aliases from frontmatter to hide them from Claude Code UI.
|
|
129
|
+
|
|
130
|
+
This prevents deprecated aliases from appearing in the command list while
|
|
131
|
+
maintaining backward compatibility through command routing.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
content: Command file content with frontmatter
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
Content with deprecated_aliases removed from frontmatter
|
|
138
|
+
"""
|
|
139
|
+
frontmatter, body = self._parse_frontmatter(content)
|
|
140
|
+
|
|
141
|
+
if not frontmatter or "deprecated_aliases" not in frontmatter:
|
|
142
|
+
return content
|
|
143
|
+
|
|
144
|
+
# Remove deprecated_aliases from frontmatter
|
|
145
|
+
frontmatter_copy = frontmatter.copy()
|
|
146
|
+
del frontmatter_copy["deprecated_aliases"]
|
|
147
|
+
|
|
148
|
+
# Reconstruct the file with modified frontmatter
|
|
149
|
+
frontmatter_yaml = yaml.dump(
|
|
150
|
+
frontmatter_copy, default_flow_style=False, sort_keys=False
|
|
151
|
+
)
|
|
152
|
+
return f"---\n{frontmatter_yaml}---\n{body}"
|
|
153
|
+
|
|
42
154
|
def deploy_commands(self, force: bool = False) -> Dict[str, Any]:
|
|
43
155
|
"""Deploy MPM slash commands to user's Claude configuration.
|
|
44
156
|
|
|
@@ -83,17 +195,38 @@ class CommandDeploymentService(BaseService):
|
|
|
83
195
|
target_file = self.target_dir / source_file.name
|
|
84
196
|
|
|
85
197
|
try:
|
|
86
|
-
#
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
198
|
+
# Validate frontmatter if present (1M-400 Phase 1)
|
|
199
|
+
content = source_file.read_text()
|
|
200
|
+
frontmatter, _ = self._parse_frontmatter(content)
|
|
201
|
+
|
|
202
|
+
if frontmatter:
|
|
203
|
+
validation_errors = self._validate_frontmatter(
|
|
204
|
+
frontmatter, source_file
|
|
205
|
+
)
|
|
206
|
+
if validation_errors:
|
|
207
|
+
self.logger.warning(
|
|
208
|
+
f"Frontmatter validation issues in {source_file.name}: "
|
|
209
|
+
f"{'; '.join(validation_errors)}"
|
|
92
210
|
)
|
|
93
|
-
|
|
211
|
+
# Continue deployment but log warnings
|
|
94
212
|
|
|
95
|
-
#
|
|
96
|
-
|
|
213
|
+
# Check if file exists and if we should overwrite
|
|
214
|
+
if (
|
|
215
|
+
target_file.exists()
|
|
216
|
+
and not force
|
|
217
|
+
and source_file.stat().st_mtime <= target_file.stat().st_mtime
|
|
218
|
+
):
|
|
219
|
+
self.logger.debug(
|
|
220
|
+
f"Skipping {source_file.name} - target is up to date"
|
|
221
|
+
)
|
|
222
|
+
continue
|
|
223
|
+
|
|
224
|
+
# Strip deprecated_aliases from content before deployment
|
|
225
|
+
# This prevents them from appearing in Claude Code's command list UI
|
|
226
|
+
cleaned_content = self._strip_deprecated_aliases(content)
|
|
227
|
+
|
|
228
|
+
# Write the cleaned content to target
|
|
229
|
+
target_file.write_text(cleaned_content)
|
|
97
230
|
self.logger.info(f"Deployed command: {source_file.name}")
|
|
98
231
|
result["deployed"].append(source_file.name)
|
|
99
232
|
|
|
@@ -159,21 +292,84 @@ class CommandDeploymentService(BaseService):
|
|
|
159
292
|
|
|
160
293
|
return removed
|
|
161
294
|
|
|
295
|
+
def remove_deprecated_commands(self) -> int:
|
|
296
|
+
"""Remove deprecated MPM commands that have been replaced.
|
|
297
|
+
|
|
298
|
+
This method cleans up old command files that have been superseded by
|
|
299
|
+
new hierarchical command names. It's called automatically on startup
|
|
300
|
+
to ensure users don't have both old and new versions.
|
|
301
|
+
|
|
302
|
+
Returns:
|
|
303
|
+
Number of deprecated files removed
|
|
304
|
+
"""
|
|
305
|
+
if not self.target_dir.exists():
|
|
306
|
+
self.logger.debug(
|
|
307
|
+
f"Target directory does not exist: {self.target_dir}, skipping deprecated command cleanup"
|
|
308
|
+
)
|
|
309
|
+
return 0
|
|
310
|
+
|
|
311
|
+
removed = 0
|
|
312
|
+
self.logger.info("Cleaning up deprecated commands...")
|
|
313
|
+
|
|
314
|
+
# Mapping of deprecated commands to their replacements for informative logging
|
|
315
|
+
replacement_map = {
|
|
316
|
+
"mpm-agents.md": "mpm-agents-list.md",
|
|
317
|
+
"mpm-auto-configure.md": "mpm-agents-auto-configure.md",
|
|
318
|
+
"mpm-config.md": "mpm-config-view.md",
|
|
319
|
+
"mpm-organize.md": "mpm-ticket-organize.md",
|
|
320
|
+
"mpm-resume.md": "mpm-session-resume.md",
|
|
321
|
+
"mpm-ticket.md": "mpm-ticket-view.md",
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
for deprecated_cmd in self.DEPRECATED_COMMANDS:
|
|
325
|
+
deprecated_file = self.target_dir / deprecated_cmd
|
|
326
|
+
replacement = replacement_map.get(deprecated_cmd, "a newer command")
|
|
327
|
+
|
|
328
|
+
if deprecated_file.exists():
|
|
329
|
+
try:
|
|
330
|
+
deprecated_file.unlink()
|
|
331
|
+
self.logger.debug(
|
|
332
|
+
f"Removed deprecated command: {deprecated_cmd} (replaced by {replacement})"
|
|
333
|
+
)
|
|
334
|
+
removed += 1
|
|
335
|
+
except Exception as e:
|
|
336
|
+
# Log error but don't fail startup - this is non-critical
|
|
337
|
+
self.logger.warning(
|
|
338
|
+
f"Failed to remove deprecated command {deprecated_cmd}: {e}"
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
if removed > 0:
|
|
342
|
+
self.logger.info(f"Removed {removed} deprecated command(s)")
|
|
343
|
+
else:
|
|
344
|
+
self.logger.debug("No deprecated commands found to remove")
|
|
345
|
+
|
|
346
|
+
return removed
|
|
347
|
+
|
|
162
348
|
|
|
163
349
|
def deploy_commands_on_startup(force: bool = False) -> None:
|
|
164
350
|
"""Convenience function to deploy commands during startup.
|
|
165
351
|
|
|
352
|
+
This function:
|
|
353
|
+
1. Removes deprecated commands that have been replaced
|
|
354
|
+
2. Deploys current command files
|
|
355
|
+
|
|
166
356
|
Args:
|
|
167
357
|
force: Force deployment even if files exist
|
|
168
358
|
"""
|
|
169
359
|
service = CommandDeploymentService()
|
|
360
|
+
logger = get_logger("startup")
|
|
361
|
+
|
|
362
|
+
# Clean up deprecated commands BEFORE deploying new ones
|
|
363
|
+
removed_count = service.remove_deprecated_commands()
|
|
364
|
+
if removed_count > 0:
|
|
365
|
+
logger.info(f"Cleaned up {removed_count} deprecated command(s)")
|
|
366
|
+
|
|
367
|
+
# Deploy current commands
|
|
170
368
|
result = service.deploy_commands(force=force)
|
|
171
369
|
|
|
172
370
|
if result["deployed"]:
|
|
173
|
-
logger = get_logger("startup")
|
|
174
371
|
logger.info(f"MPM commands deployed: {', '.join(result['deployed'])}")
|
|
175
372
|
|
|
176
373
|
if result["errors"]:
|
|
177
|
-
logger = get_logger("startup")
|
|
178
374
|
for error in result["errors"]:
|
|
179
375
|
logger.warning(f"Command deployment issue: {error}")
|
|
@@ -12,6 +12,7 @@ Extracted from ClaudeRunner to follow Single Responsibility Principle.
|
|
|
12
12
|
from typing import Any, Dict, List
|
|
13
13
|
|
|
14
14
|
from claude_mpm.core.base_service import BaseService
|
|
15
|
+
from claude_mpm.core.enums import OperationResult
|
|
15
16
|
from claude_mpm.services.core.interfaces import CommandHandlerInterface
|
|
16
17
|
|
|
17
18
|
|
|
@@ -169,7 +170,7 @@ class CommandHandlerService(BaseService, CommandHandlerInterface):
|
|
|
169
170
|
if command == "test":
|
|
170
171
|
success = self._handle_test_command(args)
|
|
171
172
|
return {
|
|
172
|
-
|
|
173
|
+
OperationResult.SUCCESS.value: success,
|
|
173
174
|
"command": command,
|
|
174
175
|
"args": args,
|
|
175
176
|
"message": (
|
|
@@ -179,7 +180,7 @@ class CommandHandlerService(BaseService, CommandHandlerInterface):
|
|
|
179
180
|
if command == "agents":
|
|
180
181
|
success = self._handle_agents_command(args)
|
|
181
182
|
return {
|
|
182
|
-
|
|
183
|
+
OperationResult.SUCCESS.value: success,
|
|
183
184
|
"command": command,
|
|
184
185
|
"args": args,
|
|
185
186
|
"message": (
|
|
@@ -189,14 +190,19 @@ class CommandHandlerService(BaseService, CommandHandlerInterface):
|
|
|
189
190
|
),
|
|
190
191
|
}
|
|
191
192
|
return {
|
|
192
|
-
|
|
193
|
+
OperationResult.SUCCESS.value: False,
|
|
193
194
|
"command": command,
|
|
194
195
|
"args": args,
|
|
195
|
-
|
|
196
|
+
OperationResult.ERROR.value: f"Unknown command: {command}",
|
|
196
197
|
"available_commands": self.get_available_commands(),
|
|
197
198
|
}
|
|
198
199
|
except Exception as e:
|
|
199
|
-
return {
|
|
200
|
+
return {
|
|
201
|
+
OperationResult.SUCCESS.value: False,
|
|
202
|
+
"command": command,
|
|
203
|
+
"args": args,
|
|
204
|
+
OperationResult.ERROR.value: str(e),
|
|
205
|
+
}
|
|
200
206
|
|
|
201
207
|
def get_command_help(self, command: str) -> str:
|
|
202
208
|
"""Get help text for a specific command.
|
|
@@ -16,7 +16,9 @@ from .interfaces import ( # Core dependency injection; Configuration management
|
|
|
16
16
|
CacheEntry,
|
|
17
17
|
HealthStatus,
|
|
18
18
|
HookServiceInterface,
|
|
19
|
+
IAgentRecommender,
|
|
19
20
|
IAgentRegistry,
|
|
21
|
+
IAutoConfigManager,
|
|
20
22
|
ICacheService,
|
|
21
23
|
IConfigurationManager,
|
|
22
24
|
IConfigurationService,
|
|
@@ -31,6 +33,7 @@ from .interfaces import ( # Core dependency injection; Configuration management
|
|
|
31
33
|
IServiceLifecycle,
|
|
32
34
|
IStructuredLogger,
|
|
33
35
|
ITemplateManager,
|
|
36
|
+
IToolchainAnalyzer,
|
|
34
37
|
MemoryServiceInterface,
|
|
35
38
|
ProjectAnalyzerInterface,
|
|
36
39
|
ServiceType,
|
|
@@ -38,8 +41,21 @@ from .interfaces import ( # Core dependency injection; Configuration management
|
|
|
38
41
|
TemplateRenderContext,
|
|
39
42
|
TicketManagerInterface,
|
|
40
43
|
)
|
|
44
|
+
from .models import ( # Data models for services
|
|
45
|
+
AgentCapabilities,
|
|
46
|
+
AgentRecommendation,
|
|
47
|
+
ConfidenceLevel,
|
|
48
|
+
ConfigurationPreview,
|
|
49
|
+
ConfigurationResult,
|
|
50
|
+
DeploymentTarget,
|
|
51
|
+
Framework,
|
|
52
|
+
LanguageDetection,
|
|
53
|
+
ToolchainAnalysis,
|
|
54
|
+
ToolchainComponent,
|
|
55
|
+
ValidationResult,
|
|
56
|
+
)
|
|
41
57
|
|
|
42
|
-
__all__ = [
|
|
58
|
+
__all__ = [ # noqa: RUF022 - Grouped by category with comments for clarity
|
|
43
59
|
# Service interfaces
|
|
44
60
|
"AgentDeploymentInterface",
|
|
45
61
|
"AgentMetadata",
|
|
@@ -48,7 +64,9 @@ __all__ = [
|
|
|
48
64
|
"CacheEntry",
|
|
49
65
|
"HealthStatus",
|
|
50
66
|
"HookServiceInterface",
|
|
67
|
+
"IAgentRecommender",
|
|
51
68
|
"IAgentRegistry",
|
|
69
|
+
"IAutoConfigManager",
|
|
52
70
|
"ICacheService",
|
|
53
71
|
"IConfigurationManager",
|
|
54
72
|
"IConfigurationService",
|
|
@@ -63,6 +81,7 @@ __all__ = [
|
|
|
63
81
|
"IServiceLifecycle",
|
|
64
82
|
"IStructuredLogger",
|
|
65
83
|
"ITemplateManager",
|
|
84
|
+
"IToolchainAnalyzer",
|
|
66
85
|
# Registry
|
|
67
86
|
"InterfaceRegistry",
|
|
68
87
|
"MemoryServiceInterface",
|
|
@@ -73,4 +92,17 @@ __all__ = [
|
|
|
73
92
|
"SyncBaseService",
|
|
74
93
|
"TemplateRenderContext",
|
|
75
94
|
"TicketManagerInterface",
|
|
95
|
+
# Data models - Toolchain
|
|
96
|
+
"ConfidenceLevel",
|
|
97
|
+
"ToolchainComponent",
|
|
98
|
+
"LanguageDetection",
|
|
99
|
+
"Framework",
|
|
100
|
+
"DeploymentTarget",
|
|
101
|
+
"ToolchainAnalysis",
|
|
102
|
+
# Data models - Agent Configuration
|
|
103
|
+
"AgentCapabilities",
|
|
104
|
+
"AgentRecommendation",
|
|
105
|
+
"ConfigurationResult",
|
|
106
|
+
"ValidationResult",
|
|
107
|
+
"ConfigurationPreview",
|
|
76
108
|
]
|
claude_mpm/services/core/base.py
CHANGED
|
@@ -9,6 +9,7 @@ and lifecycle management.
|
|
|
9
9
|
Part of TSK-0046: Service Layer Architecture Reorganization
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
+
import threading
|
|
12
13
|
from abc import ABC, abstractmethod
|
|
13
14
|
from typing import Any, Dict, Optional
|
|
14
15
|
|
|
@@ -221,29 +222,48 @@ class SingletonService(SyncBaseService):
|
|
|
221
222
|
"""
|
|
222
223
|
Base class for singleton services.
|
|
223
224
|
|
|
224
|
-
Ensures only one instance of the service exists.
|
|
225
|
+
Ensures only one instance of the service exists with thread-safe initialization.
|
|
226
|
+
Uses double-checked locking pattern to prevent race conditions.
|
|
227
|
+
Uses RLock (reentrant lock) to support recursive instantiation patterns.
|
|
225
228
|
"""
|
|
226
229
|
|
|
227
230
|
_instances: Dict[type, "SingletonService"] = {}
|
|
231
|
+
_lock = threading.RLock()
|
|
228
232
|
|
|
229
233
|
def __new__(cls, *args, **kwargs):
|
|
230
|
-
"""Ensure only one instance exists."""
|
|
234
|
+
"""Ensure only one instance exists with thread-safe initialization."""
|
|
235
|
+
# Fast path - check without lock
|
|
231
236
|
if cls not in cls._instances:
|
|
232
|
-
|
|
237
|
+
# Slow path - acquire lock and double-check
|
|
238
|
+
with cls._lock:
|
|
239
|
+
if cls not in cls._instances:
|
|
240
|
+
cls._instances[cls] = super().__new__(cls)
|
|
233
241
|
return cls._instances[cls]
|
|
234
242
|
|
|
235
243
|
@classmethod
|
|
236
244
|
def get_instance(cls) -> "SingletonService":
|
|
237
|
-
"""Get the singleton instance."""
|
|
245
|
+
"""Get the singleton instance with thread-safe initialization."""
|
|
246
|
+
# Fast path - check without lock
|
|
238
247
|
if cls not in cls._instances:
|
|
239
|
-
|
|
248
|
+
# Slow path - acquire lock and double-check
|
|
249
|
+
with cls._lock:
|
|
250
|
+
if cls not in cls._instances:
|
|
251
|
+
# Use object.__new__ to bypass __new__ recursion
|
|
252
|
+
instance = object.__new__(cls)
|
|
253
|
+
cls._instances[cls] = instance
|
|
254
|
+
# Call __init__ explicitly after storing instance
|
|
255
|
+
instance.__init__()
|
|
240
256
|
return cls._instances[cls]
|
|
241
257
|
|
|
242
258
|
@classmethod
|
|
243
259
|
def clear_instance(cls) -> None:
|
|
244
|
-
"""Clear the singleton instance (useful for testing).
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
260
|
+
"""Clear the singleton instance (useful for testing).
|
|
261
|
+
|
|
262
|
+
Thread-safe implementation ensures proper cleanup.
|
|
263
|
+
"""
|
|
264
|
+
with cls._lock:
|
|
265
|
+
if cls in cls._instances:
|
|
266
|
+
instance = cls._instances[cls]
|
|
267
|
+
if hasattr(instance, "shutdown") and not instance.is_shutdown:
|
|
268
|
+
instance.shutdown()
|
|
269
|
+
del cls._instances[cls]
|
|
@@ -24,11 +24,13 @@ MODULES:
|
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
26
|
# Agent interfaces (agent management and operations)
|
|
27
|
-
from .agent import ( # Agent registry; Agent deployment; Agent capabilities; System instructions; Subprocess management; Runner configuration
|
|
27
|
+
from .agent import ( # Agent registry; Agent deployment; Agent capabilities; System instructions; Subprocess management; Runner configuration; Agent recommendation; Auto-configuration
|
|
28
28
|
AgentCapabilitiesInterface,
|
|
29
29
|
AgentDeploymentInterface,
|
|
30
30
|
AgentMetadata,
|
|
31
|
+
IAgentRecommender,
|
|
31
32
|
IAgentRegistry,
|
|
33
|
+
IAutoConfigManager,
|
|
32
34
|
RunnerConfigurationInterface,
|
|
33
35
|
SubprocessLauncherInterface,
|
|
34
36
|
SystemInstructionsInterface,
|
|
@@ -41,6 +43,12 @@ from .communication import ( # WebSocket/SocketIO; Project analysis; Ticket man
|
|
|
41
43
|
TicketManagerInterface,
|
|
42
44
|
)
|
|
43
45
|
|
|
46
|
+
# Health interfaces (health monitoring)
|
|
47
|
+
from .health import ( # Health checks; Health monitoring
|
|
48
|
+
IHealthCheck,
|
|
49
|
+
IHealthCheckManager,
|
|
50
|
+
)
|
|
51
|
+
|
|
44
52
|
# Infrastructure interfaces (core framework services)
|
|
45
53
|
from .infrastructure import ( # Type variables; Core dependency injection; Configuration management; Caching; Health monitoring; Template management; Service factory; Logging; Service lifecycle; Error handling; Performance monitoring; Event system
|
|
46
54
|
CacheEntry,
|
|
@@ -63,6 +71,31 @@ from .infrastructure import ( # Type variables; Core dependency injection; Conf
|
|
|
63
71
|
TemplateRenderContext,
|
|
64
72
|
)
|
|
65
73
|
|
|
74
|
+
# Model interfaces (content processing and model providers)
|
|
75
|
+
from .model import ( # Model providers; Routing
|
|
76
|
+
IModelProvider,
|
|
77
|
+
IModelRouter,
|
|
78
|
+
ModelCapability,
|
|
79
|
+
ModelProvider,
|
|
80
|
+
ModelResponse,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# Process interfaces (local process management)
|
|
84
|
+
from .process import ( # Process lifecycle; State persistence
|
|
85
|
+
IDeploymentStateManager,
|
|
86
|
+
ILocalProcessManager,
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
# Project interfaces (project analysis and toolchain detection)
|
|
90
|
+
from .project import IToolchainAnalyzer # Toolchain analysis
|
|
91
|
+
|
|
92
|
+
# Restart interfaces (auto-restart management)
|
|
93
|
+
from .restart import ( # Crash detection; Restart policy; Restart orchestration
|
|
94
|
+
ICrashDetector,
|
|
95
|
+
IRestartManager,
|
|
96
|
+
IRestartPolicy,
|
|
97
|
+
)
|
|
98
|
+
|
|
66
99
|
# Service interfaces (business services)
|
|
67
100
|
from .service import ( # Version service; Command handling; Memory management; Session management; Utilities; Hook service
|
|
68
101
|
CommandHandlerInterface,
|
|
@@ -74,6 +107,13 @@ from .service import ( # Version service; Command handling; Memory management;
|
|
|
74
107
|
VersionServiceInterface,
|
|
75
108
|
)
|
|
76
109
|
|
|
110
|
+
# Stability interfaces (proactive monitoring and crash prevention)
|
|
111
|
+
from .stability import ( # Memory leak detection; Log monitoring; Resource monitoring
|
|
112
|
+
ILogMonitor,
|
|
113
|
+
IMemoryLeakDetector,
|
|
114
|
+
IResourceMonitor,
|
|
115
|
+
)
|
|
116
|
+
|
|
77
117
|
|
|
78
118
|
# Interface registry for dependency injection discovery
|
|
79
119
|
class InterfaceRegistry:
|
|
@@ -118,6 +158,27 @@ class InterfaceRegistry:
|
|
|
118
158
|
"socketio_service": SocketIOServiceInterface,
|
|
119
159
|
"project_analyzer": ProjectAnalyzerInterface,
|
|
120
160
|
"ticket_manager": TicketManagerInterface,
|
|
161
|
+
# Project interfaces
|
|
162
|
+
"toolchain_analyzer": IToolchainAnalyzer,
|
|
163
|
+
"agent_recommender": IAgentRecommender,
|
|
164
|
+
"auto_config_manager": IAutoConfigManager,
|
|
165
|
+
# Model interfaces
|
|
166
|
+
"model_provider": IModelProvider,
|
|
167
|
+
"model_router": IModelRouter,
|
|
168
|
+
# Process interfaces
|
|
169
|
+
"deployment_state_manager": IDeploymentStateManager,
|
|
170
|
+
"local_process_manager": ILocalProcessManager,
|
|
171
|
+
# Health interfaces
|
|
172
|
+
"health_check": IHealthCheck,
|
|
173
|
+
"health_check_manager": IHealthCheckManager,
|
|
174
|
+
# Restart interfaces
|
|
175
|
+
"crash_detector": ICrashDetector,
|
|
176
|
+
"restart_policy": IRestartPolicy,
|
|
177
|
+
"restart_manager": IRestartManager,
|
|
178
|
+
# Stability interfaces
|
|
179
|
+
"memory_leak_detector": IMemoryLeakDetector,
|
|
180
|
+
"log_monitor": ILogMonitor,
|
|
181
|
+
"resource_monitor": IResourceMonitor,
|
|
121
182
|
}
|
|
122
183
|
|
|
123
184
|
@classmethod
|
|
@@ -142,7 +203,7 @@ class InterfaceRegistry:
|
|
|
142
203
|
|
|
143
204
|
|
|
144
205
|
# Re-export everything for backward compatibility
|
|
145
|
-
__all__ = [
|
|
206
|
+
__all__ = [ # noqa: RUF022 - Semantic grouping by domain preferred over alphabetical
|
|
146
207
|
"AgentCapabilitiesInterface",
|
|
147
208
|
"AgentDeploymentInterface",
|
|
148
209
|
"AgentMetadata",
|
|
@@ -151,23 +212,47 @@ __all__ = [
|
|
|
151
212
|
"HealthStatus",
|
|
152
213
|
"HookServiceInterface",
|
|
153
214
|
# Agent interfaces
|
|
215
|
+
"IAgentRecommender",
|
|
154
216
|
"IAgentRegistry",
|
|
217
|
+
"IAutoConfigManager",
|
|
155
218
|
"ICacheService",
|
|
156
219
|
"IConfigurationManager",
|
|
157
220
|
"IConfigurationService",
|
|
221
|
+
# Process interfaces
|
|
222
|
+
"IDeploymentStateManager",
|
|
158
223
|
"IErrorHandler",
|
|
159
224
|
"IEventBus",
|
|
225
|
+
# Health interfaces
|
|
226
|
+
"IHealthCheck",
|
|
227
|
+
"IHealthCheckManager",
|
|
160
228
|
"IHealthMonitor",
|
|
229
|
+
# Infrastructure interfaces
|
|
230
|
+
"ILocalProcessManager",
|
|
231
|
+
# Restart interfaces
|
|
232
|
+
"ICrashDetector",
|
|
233
|
+
"IRestartManager",
|
|
234
|
+
"IRestartPolicy",
|
|
235
|
+
# Stability interfaces
|
|
236
|
+
"IMemoryLeakDetector",
|
|
237
|
+
"ILogMonitor",
|
|
238
|
+
"IResourceMonitor",
|
|
239
|
+
# Model interfaces
|
|
240
|
+
"IModelProvider",
|
|
241
|
+
"IModelRouter",
|
|
161
242
|
"IPerformanceMonitor",
|
|
162
243
|
"IPromptCache",
|
|
163
|
-
# Infrastructure interfaces
|
|
164
244
|
"IServiceContainer",
|
|
165
245
|
"IServiceFactory",
|
|
166
246
|
"IServiceLifecycle",
|
|
167
247
|
"IStructuredLogger",
|
|
168
248
|
"ITemplateManager",
|
|
249
|
+
# Project interfaces
|
|
250
|
+
"IToolchainAnalyzer",
|
|
169
251
|
# Registry
|
|
170
252
|
"InterfaceRegistry",
|
|
253
|
+
"ModelCapability",
|
|
254
|
+
"ModelProvider",
|
|
255
|
+
"ModelResponse",
|
|
171
256
|
"MemoryHookInterface",
|
|
172
257
|
"MemoryServiceInterface",
|
|
173
258
|
"ProjectAnalyzerInterface",
|