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.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- 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
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
"""Interactive Skills Selection Wizard for Claude MPM.
|
|
2
|
+
|
|
3
|
+
This module provides a step-by-step interactive wizard for selecting and configuring
|
|
4
|
+
skills for agents with user-friendly prompts and intelligent auto-linking.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Dict, List, Optional, Tuple
|
|
8
|
+
|
|
9
|
+
from claude_mpm.core.logging_config import get_logger
|
|
10
|
+
from claude_mpm.skills.registry import get_registry
|
|
11
|
+
from claude_mpm.skills.skill_manager import get_manager
|
|
12
|
+
|
|
13
|
+
logger = get_logger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# Agent-to-skills auto-linking mappings
|
|
17
|
+
ENGINEER_CORE_SKILLS = [
|
|
18
|
+
"test-driven-development",
|
|
19
|
+
"systematic-debugging",
|
|
20
|
+
"code-review",
|
|
21
|
+
"refactoring-patterns",
|
|
22
|
+
"git-workflow",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
PYTHON_SKILLS = ENGINEER_CORE_SKILLS + ["async-testing"]
|
|
26
|
+
TYPESCRIPT_SKILLS = ENGINEER_CORE_SKILLS + ["async-testing"]
|
|
27
|
+
GOLANG_SKILLS = ENGINEER_CORE_SKILLS + ["async-testing"]
|
|
28
|
+
REACT_SKILLS = TYPESCRIPT_SKILLS + ["performance-profiling"]
|
|
29
|
+
NEXTJS_SKILLS = REACT_SKILLS
|
|
30
|
+
VUE_SKILLS = TYPESCRIPT_SKILLS + ["performance-profiling"]
|
|
31
|
+
|
|
32
|
+
OPS_SKILLS = [
|
|
33
|
+
"docker-containerization",
|
|
34
|
+
"database-migration",
|
|
35
|
+
"security-scanning",
|
|
36
|
+
"systematic-debugging",
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
DOCUMENTATION_SKILLS = [
|
|
40
|
+
"api-documentation",
|
|
41
|
+
"code-review",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
QA_SKILLS = [
|
|
45
|
+
"test-driven-development",
|
|
46
|
+
"systematic-debugging",
|
|
47
|
+
"async-testing",
|
|
48
|
+
"performance-profiling",
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
# Mapping of agent types to their recommended skills
|
|
52
|
+
AGENT_SKILL_MAPPING = {
|
|
53
|
+
# Engineer agents
|
|
54
|
+
"engineer": ENGINEER_CORE_SKILLS,
|
|
55
|
+
"python-engineer": PYTHON_SKILLS,
|
|
56
|
+
"typescript-engineer": TYPESCRIPT_SKILLS,
|
|
57
|
+
"golang-engineer": GOLANG_SKILLS,
|
|
58
|
+
"react-engineer": REACT_SKILLS,
|
|
59
|
+
"nextjs-engineer": NEXTJS_SKILLS,
|
|
60
|
+
"vue-engineer": VUE_SKILLS,
|
|
61
|
+
# Ops agents
|
|
62
|
+
"ops": OPS_SKILLS,
|
|
63
|
+
"devops": OPS_SKILLS,
|
|
64
|
+
"local-ops": OPS_SKILLS,
|
|
65
|
+
# Documentation agents
|
|
66
|
+
"docs": DOCUMENTATION_SKILLS,
|
|
67
|
+
"documentation": DOCUMENTATION_SKILLS,
|
|
68
|
+
"technical-writer": DOCUMENTATION_SKILLS,
|
|
69
|
+
# QA agents
|
|
70
|
+
"qa": QA_SKILLS,
|
|
71
|
+
"web-qa": QA_SKILLS,
|
|
72
|
+
"api-qa": QA_SKILLS,
|
|
73
|
+
"tester": QA_SKILLS,
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class SkillsWizard:
|
|
78
|
+
"""Interactive wizard for skills selection and configuration."""
|
|
79
|
+
|
|
80
|
+
def __init__(self):
|
|
81
|
+
"""Initialize the skills wizard."""
|
|
82
|
+
self.registry = get_registry()
|
|
83
|
+
self.manager = get_manager()
|
|
84
|
+
self.logger = logger
|
|
85
|
+
|
|
86
|
+
def run_interactive_selection(
|
|
87
|
+
self, selected_agents: Optional[List[str]] = None
|
|
88
|
+
) -> Tuple[bool, Dict[str, List[str]]]:
|
|
89
|
+
"""Run interactive skills selection wizard.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
selected_agents: List of agent IDs that were selected in agent wizard
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
Tuple of (success, agent_skills_mapping)
|
|
96
|
+
- success: Boolean indicating if selection was successful
|
|
97
|
+
- agent_skills_mapping: Dict mapping agent IDs to lists of skill names
|
|
98
|
+
"""
|
|
99
|
+
try:
|
|
100
|
+
print("\n" + "=" * 60)
|
|
101
|
+
print("🎯 Skills Selection Wizard")
|
|
102
|
+
print("=" * 60)
|
|
103
|
+
print("\nI'll help you select skills for your agents.")
|
|
104
|
+
print("Press Ctrl+C anytime to cancel.\n")
|
|
105
|
+
|
|
106
|
+
# Auto-link skills based on selected agents
|
|
107
|
+
agent_skills_mapping = {}
|
|
108
|
+
if selected_agents:
|
|
109
|
+
print("📋 Auto-linking skills based on selected agents...\n")
|
|
110
|
+
agent_skills_mapping = self._auto_link_skills(selected_agents)
|
|
111
|
+
self._display_auto_linked_skills(agent_skills_mapping)
|
|
112
|
+
|
|
113
|
+
# Ask if user wants to customize
|
|
114
|
+
customize = (
|
|
115
|
+
input("\nWould you like to customize skill selections? [y/N]: ")
|
|
116
|
+
.strip()
|
|
117
|
+
.lower()
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
if customize in ["y", "yes"]:
|
|
121
|
+
agent_skills_mapping = self._run_custom_selection(
|
|
122
|
+
selected_agents, agent_skills_mapping
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# Preview final configuration
|
|
126
|
+
self._preview_final_configuration(agent_skills_mapping)
|
|
127
|
+
|
|
128
|
+
# Confirm
|
|
129
|
+
confirm = (
|
|
130
|
+
input("\nApply this skills configuration? [Y/n]: ").strip().lower()
|
|
131
|
+
)
|
|
132
|
+
if confirm in ["n", "no"]:
|
|
133
|
+
return False, {}
|
|
134
|
+
|
|
135
|
+
# Apply configuration
|
|
136
|
+
self._apply_skills_configuration(agent_skills_mapping)
|
|
137
|
+
|
|
138
|
+
print("\n✅ Skills configuration complete!")
|
|
139
|
+
return True, agent_skills_mapping
|
|
140
|
+
|
|
141
|
+
except KeyboardInterrupt:
|
|
142
|
+
print("\n\n❌ Skills selection cancelled")
|
|
143
|
+
return False, {}
|
|
144
|
+
except Exception as e:
|
|
145
|
+
error_msg = f"Skills selection error: {e}"
|
|
146
|
+
self.logger.error(error_msg, exc_info=True)
|
|
147
|
+
print(f"\n❌ {error_msg}")
|
|
148
|
+
return False, {}
|
|
149
|
+
|
|
150
|
+
def _auto_link_skills(self, agent_ids: List[str]) -> Dict[str, List[str]]:
|
|
151
|
+
"""Auto-link skills to agents based on agent types.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
agent_ids: List of agent IDs
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
Dictionary mapping agent IDs to skill names
|
|
158
|
+
"""
|
|
159
|
+
mapping = {}
|
|
160
|
+
for agent_id in agent_ids:
|
|
161
|
+
# Try to match against known patterns
|
|
162
|
+
skills = self._get_recommended_skills_for_agent(agent_id)
|
|
163
|
+
if skills:
|
|
164
|
+
mapping[agent_id] = skills
|
|
165
|
+
else:
|
|
166
|
+
# Default to core engineer skills if no match
|
|
167
|
+
mapping[agent_id] = ENGINEER_CORE_SKILLS.copy()
|
|
168
|
+
|
|
169
|
+
return mapping
|
|
170
|
+
|
|
171
|
+
def _get_recommended_skills_for_agent(self, agent_id: str) -> List[str]:
|
|
172
|
+
"""Get recommended skills for an agent based on its ID.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
agent_id: Agent identifier
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
List of recommended skill names
|
|
179
|
+
"""
|
|
180
|
+
agent_id_lower = agent_id.lower()
|
|
181
|
+
|
|
182
|
+
# Direct match
|
|
183
|
+
if agent_id_lower in AGENT_SKILL_MAPPING:
|
|
184
|
+
return AGENT_SKILL_MAPPING[agent_id_lower].copy()
|
|
185
|
+
|
|
186
|
+
# Fuzzy matching for common patterns
|
|
187
|
+
if "python" in agent_id_lower:
|
|
188
|
+
return PYTHON_SKILLS.copy()
|
|
189
|
+
if any(js in agent_id_lower for js in ["typescript", "ts", "javascript", "js"]):
|
|
190
|
+
return TYPESCRIPT_SKILLS.copy()
|
|
191
|
+
if "react" in agent_id_lower:
|
|
192
|
+
return REACT_SKILLS.copy()
|
|
193
|
+
if "next" in agent_id_lower:
|
|
194
|
+
return NEXTJS_SKILLS.copy()
|
|
195
|
+
if "vue" in agent_id_lower:
|
|
196
|
+
return VUE_SKILLS.copy()
|
|
197
|
+
if "go" in agent_id_lower or "golang" in agent_id_lower:
|
|
198
|
+
return GOLANG_SKILLS.copy()
|
|
199
|
+
if any(ops in agent_id_lower for ops in ["ops", "devops", "deploy"]):
|
|
200
|
+
return OPS_SKILLS.copy()
|
|
201
|
+
if any(qa in agent_id_lower for qa in ["qa", "test", "quality"]):
|
|
202
|
+
return QA_SKILLS.copy()
|
|
203
|
+
if any(doc in agent_id_lower for doc in ["doc", "writer", "technical"]):
|
|
204
|
+
return DOCUMENTATION_SKILLS.copy()
|
|
205
|
+
if "engineer" in agent_id_lower:
|
|
206
|
+
return ENGINEER_CORE_SKILLS.copy()
|
|
207
|
+
|
|
208
|
+
# Default
|
|
209
|
+
return []
|
|
210
|
+
|
|
211
|
+
def _display_auto_linked_skills(self, mapping: Dict[str, List[str]]):
|
|
212
|
+
"""Display auto-linked skills configuration.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
mapping: Agent-to-skills mapping
|
|
216
|
+
"""
|
|
217
|
+
for agent_id, skills in mapping.items():
|
|
218
|
+
print(f" • {agent_id}:")
|
|
219
|
+
for skill in skills:
|
|
220
|
+
print(f" - {skill}")
|
|
221
|
+
print()
|
|
222
|
+
|
|
223
|
+
def _run_custom_selection(
|
|
224
|
+
self, agent_ids: Optional[List[str]], initial_mapping: Dict[str, List[str]]
|
|
225
|
+
) -> Dict[str, List[str]]:
|
|
226
|
+
"""Run custom skills selection for each agent.
|
|
227
|
+
|
|
228
|
+
Args:
|
|
229
|
+
agent_ids: List of agent IDs
|
|
230
|
+
initial_mapping: Initial auto-linked mapping
|
|
231
|
+
|
|
232
|
+
Returns:
|
|
233
|
+
Updated agent-to-skills mapping
|
|
234
|
+
"""
|
|
235
|
+
mapping = initial_mapping.copy()
|
|
236
|
+
|
|
237
|
+
# Get all available bundled skills
|
|
238
|
+
bundled_skills = self.registry.list_skills(source="bundled")
|
|
239
|
+
skill_list = sorted([skill.name for skill in bundled_skills])
|
|
240
|
+
|
|
241
|
+
print("\n" + "=" * 60)
|
|
242
|
+
print("Available Bundled Skills:")
|
|
243
|
+
print("=" * 60)
|
|
244
|
+
for i, skill in enumerate(bundled_skills, 1):
|
|
245
|
+
description = (
|
|
246
|
+
skill.description[:60] + "..."
|
|
247
|
+
if len(skill.description) > 60
|
|
248
|
+
else skill.description
|
|
249
|
+
)
|
|
250
|
+
print(f" [{i:2d}] {skill.name}")
|
|
251
|
+
print(f" {description}")
|
|
252
|
+
print()
|
|
253
|
+
|
|
254
|
+
# If no agents provided, ask which agents to configure
|
|
255
|
+
if not agent_ids:
|
|
256
|
+
agent_ids = self._get_agents_to_configure()
|
|
257
|
+
|
|
258
|
+
# Configure each agent
|
|
259
|
+
for agent_id in agent_ids:
|
|
260
|
+
print(f"\n🔧 Configuring skills for: {agent_id}")
|
|
261
|
+
current_skills = mapping.get(agent_id, [])
|
|
262
|
+
|
|
263
|
+
print(f" Current skills ({len(current_skills)}):")
|
|
264
|
+
for skill in current_skills:
|
|
265
|
+
print(f" - {skill}")
|
|
266
|
+
|
|
267
|
+
modify = (
|
|
268
|
+
input(f"\n Modify skills for {agent_id}? [y/N]: ").strip().lower()
|
|
269
|
+
)
|
|
270
|
+
if modify not in ["y", "yes"]:
|
|
271
|
+
continue
|
|
272
|
+
|
|
273
|
+
# Let user select skills
|
|
274
|
+
print("\n Enter skill numbers (comma-separated), or:")
|
|
275
|
+
print(" 'all' - Select all skills")
|
|
276
|
+
print(" 'none' - Clear all skills")
|
|
277
|
+
print(" 'keep' - Keep current selection")
|
|
278
|
+
selection = input(" Selection: ").strip().lower()
|
|
279
|
+
|
|
280
|
+
if selection == "keep":
|
|
281
|
+
continue
|
|
282
|
+
if selection == "none":
|
|
283
|
+
mapping[agent_id] = []
|
|
284
|
+
elif selection == "all":
|
|
285
|
+
mapping[agent_id] = skill_list.copy()
|
|
286
|
+
else:
|
|
287
|
+
# Parse comma-separated numbers
|
|
288
|
+
try:
|
|
289
|
+
selected_indices = [
|
|
290
|
+
int(idx.strip()) for idx in selection.split(",")
|
|
291
|
+
]
|
|
292
|
+
selected_skills = [
|
|
293
|
+
skill_list[idx - 1]
|
|
294
|
+
for idx in selected_indices
|
|
295
|
+
if 1 <= idx <= len(skill_list)
|
|
296
|
+
]
|
|
297
|
+
mapping[agent_id] = selected_skills
|
|
298
|
+
except (ValueError, IndexError) as e:
|
|
299
|
+
print(f" ⚠️ Invalid selection, keeping current: {e}")
|
|
300
|
+
|
|
301
|
+
return mapping
|
|
302
|
+
|
|
303
|
+
def _get_agents_to_configure(self) -> List[str]:
|
|
304
|
+
"""Ask user which agents to configure.
|
|
305
|
+
|
|
306
|
+
Returns:
|
|
307
|
+
List of agent IDs
|
|
308
|
+
"""
|
|
309
|
+
agent_ids_input = input("\nEnter agent IDs (comma-separated): ").strip()
|
|
310
|
+
return [aid.strip() for aid in agent_ids_input.split(",") if aid.strip()]
|
|
311
|
+
|
|
312
|
+
def _preview_final_configuration(self, mapping: Dict[str, List[str]]):
|
|
313
|
+
"""Display final skills configuration preview.
|
|
314
|
+
|
|
315
|
+
Args:
|
|
316
|
+
mapping: Agent-to-skills mapping
|
|
317
|
+
"""
|
|
318
|
+
print("\n" + "=" * 60)
|
|
319
|
+
print("📋 Final Skills Configuration:")
|
|
320
|
+
print("=" * 60)
|
|
321
|
+
|
|
322
|
+
if not mapping:
|
|
323
|
+
print(" (No skills configured)")
|
|
324
|
+
return
|
|
325
|
+
|
|
326
|
+
for agent_id, skills in mapping.items():
|
|
327
|
+
print(f"\n {agent_id} ({len(skills)} skills):")
|
|
328
|
+
if skills:
|
|
329
|
+
for skill in skills:
|
|
330
|
+
print(f" ✓ {skill}")
|
|
331
|
+
else:
|
|
332
|
+
print(" (no skills)")
|
|
333
|
+
|
|
334
|
+
def _apply_skills_configuration(self, mapping: Dict[str, List[str]]):
|
|
335
|
+
"""Apply skills configuration to skill manager.
|
|
336
|
+
|
|
337
|
+
Args:
|
|
338
|
+
mapping: Agent-to-skills mapping
|
|
339
|
+
"""
|
|
340
|
+
for agent_id, skills in mapping.items():
|
|
341
|
+
# Clear existing mappings for this agent
|
|
342
|
+
if agent_id in self.manager.agent_skill_mapping:
|
|
343
|
+
self.manager.agent_skill_mapping[agent_id] = []
|
|
344
|
+
|
|
345
|
+
# Add each skill
|
|
346
|
+
for skill_name in skills:
|
|
347
|
+
self.manager.add_skill_to_agent(agent_id, skill_name)
|
|
348
|
+
|
|
349
|
+
self.logger.info(f"Applied skills configuration for {len(mapping)} agents")
|
|
350
|
+
|
|
351
|
+
def list_available_skills(self):
|
|
352
|
+
"""Display all available skills."""
|
|
353
|
+
print("\n" + "=" * 60)
|
|
354
|
+
print("📚 Available Skills")
|
|
355
|
+
print("=" * 60)
|
|
356
|
+
|
|
357
|
+
# Bundled skills
|
|
358
|
+
bundled_skills = self.registry.list_skills(source="bundled")
|
|
359
|
+
if bundled_skills:
|
|
360
|
+
print(f"\n🔹 Bundled Skills ({len(bundled_skills)}):")
|
|
361
|
+
for skill in sorted(bundled_skills, key=lambda s: s.name):
|
|
362
|
+
print(f" • {skill.name}")
|
|
363
|
+
if skill.description:
|
|
364
|
+
desc = (
|
|
365
|
+
skill.description[:80] + "..."
|
|
366
|
+
if len(skill.description) > 80
|
|
367
|
+
else skill.description
|
|
368
|
+
)
|
|
369
|
+
print(f" {desc}")
|
|
370
|
+
|
|
371
|
+
# User skills
|
|
372
|
+
user_skills = self.registry.list_skills(source="user")
|
|
373
|
+
if user_skills:
|
|
374
|
+
print(f"\n👤 User Skills ({len(user_skills)}):")
|
|
375
|
+
for skill in sorted(user_skills, key=lambda s: s.name):
|
|
376
|
+
print(f" • {skill.name}")
|
|
377
|
+
if skill.description:
|
|
378
|
+
desc = (
|
|
379
|
+
skill.description[:80] + "..."
|
|
380
|
+
if len(skill.description) > 80
|
|
381
|
+
else skill.description
|
|
382
|
+
)
|
|
383
|
+
print(f" {desc}")
|
|
384
|
+
|
|
385
|
+
# Project skills
|
|
386
|
+
project_skills = self.registry.list_skills(source="project")
|
|
387
|
+
if project_skills:
|
|
388
|
+
print(f"\n📂 Project Skills ({len(project_skills)}):")
|
|
389
|
+
for skill in sorted(project_skills, key=lambda s: s.name):
|
|
390
|
+
print(f" • {skill.name}")
|
|
391
|
+
if skill.description:
|
|
392
|
+
desc = (
|
|
393
|
+
skill.description[:80] + "..."
|
|
394
|
+
if len(skill.description) > 80
|
|
395
|
+
else skill.description
|
|
396
|
+
)
|
|
397
|
+
print(f" {desc}")
|
|
398
|
+
|
|
399
|
+
print()
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
def discover_and_link_runtime_skills():
|
|
403
|
+
"""Discover user/project skills and auto-link to agents at runtime.
|
|
404
|
+
|
|
405
|
+
This function is called during startup to:
|
|
406
|
+
1. Reload the skills registry (picks up new skills from .claude/skills/)
|
|
407
|
+
2. Auto-link discovered skills to agents based on tags/naming conventions
|
|
408
|
+
"""
|
|
409
|
+
try:
|
|
410
|
+
registry = get_registry()
|
|
411
|
+
manager = get_manager()
|
|
412
|
+
|
|
413
|
+
# Reload registry to pick up new skills
|
|
414
|
+
registry.reload()
|
|
415
|
+
|
|
416
|
+
# Get discovered skills (user and project)
|
|
417
|
+
discovered_skills = registry.list_skills(source="user") + registry.list_skills(
|
|
418
|
+
source="project"
|
|
419
|
+
)
|
|
420
|
+
|
|
421
|
+
if not discovered_skills:
|
|
422
|
+
logger.debug("No runtime skills discovered")
|
|
423
|
+
return
|
|
424
|
+
|
|
425
|
+
logger.info(f"Discovered {len(discovered_skills)} runtime skills")
|
|
426
|
+
|
|
427
|
+
# Auto-link based on skill content and naming
|
|
428
|
+
for skill in discovered_skills:
|
|
429
|
+
agents = _infer_agents_for_skill(skill)
|
|
430
|
+
for agent_id in agents:
|
|
431
|
+
manager.add_skill_to_agent(agent_id, skill.name)
|
|
432
|
+
logger.debug(f"Auto-linked skill '{skill.name}' to agent '{agent_id}'")
|
|
433
|
+
|
|
434
|
+
except Exception as e:
|
|
435
|
+
logger.error(f"Error during runtime skills discovery: {e}", exc_info=True)
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
def _infer_agents_for_skill(skill) -> List[str]:
|
|
439
|
+
"""Infer which agents should have this skill based on tags/name.
|
|
440
|
+
|
|
441
|
+
Args:
|
|
442
|
+
skill: Skill object to analyze
|
|
443
|
+
|
|
444
|
+
Returns:
|
|
445
|
+
List of agent IDs that should have this skill
|
|
446
|
+
"""
|
|
447
|
+
agents = []
|
|
448
|
+
content_lower = skill.content.lower()
|
|
449
|
+
name_lower = skill.name.lower()
|
|
450
|
+
|
|
451
|
+
# Python-related
|
|
452
|
+
if any(
|
|
453
|
+
tag in content_lower or tag in name_lower
|
|
454
|
+
for tag in ["python", "django", "flask", "fastapi"]
|
|
455
|
+
):
|
|
456
|
+
agents.append("python-engineer")
|
|
457
|
+
|
|
458
|
+
# TypeScript/JavaScript-related
|
|
459
|
+
if any(
|
|
460
|
+
tag in content_lower or tag in name_lower
|
|
461
|
+
for tag in ["typescript", "javascript", "react", "next", "vue", "node"]
|
|
462
|
+
):
|
|
463
|
+
agents.extend(["typescript-engineer", "react-engineer", "nextjs-engineer"])
|
|
464
|
+
|
|
465
|
+
# Go-related
|
|
466
|
+
if any(tag in content_lower or tag in name_lower for tag in ["golang", "go "]):
|
|
467
|
+
agents.append("golang-engineer")
|
|
468
|
+
|
|
469
|
+
# Ops-related
|
|
470
|
+
if any(
|
|
471
|
+
tag in content_lower or tag in name_lower
|
|
472
|
+
for tag in ["docker", "kubernetes", "deploy", "devops", "ops"]
|
|
473
|
+
):
|
|
474
|
+
agents.extend(["ops", "devops", "local-ops"])
|
|
475
|
+
|
|
476
|
+
# Testing/QA-related
|
|
477
|
+
if any(
|
|
478
|
+
tag in content_lower or tag in name_lower
|
|
479
|
+
for tag in ["test", "qa", "quality", "assert"]
|
|
480
|
+
):
|
|
481
|
+
agents.extend(["qa", "web-qa", "api-qa"])
|
|
482
|
+
|
|
483
|
+
# Documentation-related
|
|
484
|
+
if any(
|
|
485
|
+
tag in content_lower or tag in name_lower
|
|
486
|
+
for tag in ["documentation", "docs", "api doc", "openapi"]
|
|
487
|
+
):
|
|
488
|
+
agents.extend(["docs", "documentation", "technical-writer"])
|
|
489
|
+
|
|
490
|
+
# Remove duplicates
|
|
491
|
+
return list(set(agents))
|
claude_mpm/cli/parser.py
CHANGED
|
@@ -19,8 +19,85 @@ REFACTORING NOTE: The original 961-line create_parser function has been split in
|
|
|
19
19
|
- parsers/mcp_parser.py: MCP Gateway commands
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
import argparse
|
|
23
|
+
import sys
|
|
24
|
+
from typing import List, Optional
|
|
25
|
+
|
|
26
|
+
# Try to import from the new modular structure with helpful error handling
|
|
27
|
+
try:
|
|
28
|
+
from .parsers import add_common_arguments, create_parser, preprocess_args
|
|
29
|
+
except ImportError as e:
|
|
30
|
+
# Provide a helpful error message for users with outdated installations
|
|
31
|
+
error_msg = f"""
|
|
32
|
+
╔══════════════════════════════════════════════════════════════════╗
|
|
33
|
+
║ Claude MPM Import Error ║
|
|
34
|
+
╠══════════════════════════════════════════════════════════════════╣
|
|
35
|
+
║ ║
|
|
36
|
+
║ Unable to import required modules: {e!s} ║
|
|
37
|
+
║ ║
|
|
38
|
+
║ This typically happens when: ║
|
|
39
|
+
║ • The installation is outdated or incomplete ║
|
|
40
|
+
║ • Files are missing from your installation ║
|
|
41
|
+
║ • You're using an old cached version from pipx ║
|
|
42
|
+
║ ║
|
|
43
|
+
║ ┌─────────────────────────────────────────────────────────┐ ║
|
|
44
|
+
║ │ To fix this issue, please try one of these solutions: │ ║
|
|
45
|
+
║ └─────────────────────────────────────────────────────────┘ ║
|
|
46
|
+
║ ║
|
|
47
|
+
║ 1. If installed with pipx (recommended): ║
|
|
48
|
+
║ ➜ pipx reinstall claude-mpm ║
|
|
49
|
+
║ ║
|
|
50
|
+
║ 2. If installed with pip: ║
|
|
51
|
+
║ ➜ pip install --upgrade --force-reinstall claude-mpm ║
|
|
52
|
+
║ ║
|
|
53
|
+
║ 3. For development installations: ║
|
|
54
|
+
║ ➜ pip install -e . --force-reinstall ║
|
|
55
|
+
║ ║
|
|
56
|
+
║ 4. Clear pipx cache and reinstall (if pipx issues persist): ║
|
|
57
|
+
║ ➜ pipx uninstall claude-mpm ║
|
|
58
|
+
║ ➜ pipx install claude-mpm ║
|
|
59
|
+
║ ║
|
|
60
|
+
╚══════════════════════════════════════════════════════════════════╝
|
|
61
|
+
"""
|
|
62
|
+
print(error_msg, file=sys.stderr)
|
|
63
|
+
|
|
64
|
+
# Provide minimal fallback functionality to at least show help
|
|
65
|
+
def create_parser(version: str = "Unknown") -> argparse.ArgumentParser:
|
|
66
|
+
"""Emergency fallback parser that shows reinstallation instructions."""
|
|
67
|
+
parser = argparse.ArgumentParser(
|
|
68
|
+
prog="claude-mpm",
|
|
69
|
+
description="Claude Multi-Agent Project Manager (Installation Error - Please Reinstall)",
|
|
70
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
71
|
+
epilog="""
|
|
72
|
+
This installation appears to be incomplete or outdated.
|
|
73
|
+
Please reinstall using one of the methods shown above.
|
|
74
|
+
""",
|
|
75
|
+
)
|
|
76
|
+
parser.add_argument(
|
|
77
|
+
"--version",
|
|
78
|
+
action="version",
|
|
79
|
+
version=f"{version} (installation error - please reinstall)",
|
|
80
|
+
)
|
|
81
|
+
return parser
|
|
82
|
+
|
|
83
|
+
def add_common_arguments(parser: argparse.ArgumentParser) -> None:
|
|
84
|
+
"""Emergency fallback - no common arguments available."""
|
|
85
|
+
|
|
86
|
+
def preprocess_args(args: Optional[List[str]] = None) -> List[str]:
|
|
87
|
+
"""Emergency fallback - return args unchanged."""
|
|
88
|
+
return args if args is not None else sys.argv[1:]
|
|
89
|
+
|
|
90
|
+
# Exit with error code to indicate the problem
|
|
91
|
+
# Don't exit immediately - let the user see --help if requested
|
|
92
|
+
import atexit
|
|
93
|
+
|
|
94
|
+
atexit.register(
|
|
95
|
+
lambda: (
|
|
96
|
+
sys.exit(1)
|
|
97
|
+
if "--help" not in sys.argv and "--version" not in sys.argv
|
|
98
|
+
else None
|
|
99
|
+
)
|
|
100
|
+
)
|
|
24
101
|
|
|
25
102
|
# Re-export for backward compatibility
|
|
26
103
|
__all__ = ["add_common_arguments", "create_parser", "preprocess_args"]
|
|
@@ -18,10 +18,16 @@ DESIGN DECISION: Each parser module handles a specific command domain:
|
|
|
18
18
|
- mcp_parser.py: MCP Gateway commands
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
|
-
from .base_parser import
|
|
21
|
+
from .base_parser import (
|
|
22
|
+
SuggestingArgumentParser,
|
|
23
|
+
add_common_arguments,
|
|
24
|
+
create_parser,
|
|
25
|
+
preprocess_args,
|
|
26
|
+
)
|
|
22
27
|
from .run_parser import add_run_arguments
|
|
23
28
|
|
|
24
29
|
__all__ = [
|
|
30
|
+
"SuggestingArgumentParser",
|
|
25
31
|
"add_common_arguments",
|
|
26
32
|
"add_run_arguments",
|
|
27
33
|
"create_parser",
|