claude-mpm 4.24.0__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/VERSION +1 -1
- claude_mpm/agents/BASE_PM.md +12 -0
- claude_mpm/agents/OUTPUT_STYLE.md +3 -48
- claude_mpm/agents/PM_INSTRUCTIONS.md +721 -911
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +4 -4
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +1 -4
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/base_agent_loader.py +10 -35
- claude_mpm/agents/frontmatter_validator.py +1 -1
- claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +370 -3
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +48 -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/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/cli/__init__.py +38 -2
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +188 -30
- claude_mpm/cli/commands/agents.py +959 -36
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/aggregate.py +1 -1
- claude_mpm/cli/commands/analyze.py +3 -3
- claude_mpm/cli/commands/auto_configure.py +2 -6
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +769 -45
- claude_mpm/cli/commands/configure_agent_display.py +4 -4
- claude_mpm/cli/commands/configure_navigation.py +63 -46
- claude_mpm/cli/commands/debug.py +12 -12
- claude_mpm/cli/commands/doctor.py +10 -2
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/local_deploy.py +1 -4
- claude_mpm/cli/commands/mcp_install_commands.py +1 -1
- claude_mpm/cli/commands/mpm_init/core.py +49 -1
- claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
- claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +123 -165
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +757 -20
- claude_mpm/cli/executor.py +78 -3
- claude_mpm/cli/interactive/agent_wizard.py +955 -45
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +256 -4
- claude_mpm/cli/parsers/base_parser.py +53 -0
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +145 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/startup.py +538 -106
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/utils.py +1 -1
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
- claude_mpm/commands/mpm-agents-detect.md +9 -0
- claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
- claude_mpm/commands/mpm-agents-recommend.md +9 -0
- claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +14 -2
- claude_mpm/commands/mpm-init.md +27 -2
- claude_mpm/commands/mpm-monitor.md +9 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
- claude_mpm/commands/mpm-status.md +9 -0
- claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +9 -0
- claude_mpm/commands/mpm.md +10 -0
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/constants.py +13 -0
- claude_mpm/core/claude_runner.py +5 -34
- claude_mpm/core/config.py +16 -0
- claude_mpm/core/constants.py +1 -1
- claude_mpm/core/framework/__init__.py +3 -16
- claude_mpm/core/framework/loaders/file_loader.py +54 -101
- claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +41 -2
- claude_mpm/core/interactive_session.py +91 -10
- claude_mpm/core/logger.py +3 -1
- claude_mpm/core/oneshot_session.py +71 -8
- 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/shared/singleton_manager.py +11 -4
- claude_mpm/core/system_context.py +38 -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 +15 -15
- claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
- claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
- claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
- claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
- claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
- claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
- claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +76 -58
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/socket-client.js +138 -121
- claude_mpm/dashboard/templates/code_simple.html +23 -23
- claude_mpm/dashboard/templates/index.html +18 -18
- claude_mpm/experimental/cli_enhancements.py +1 -5
- 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/event_handlers.py +3 -1
- 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/failure_learning/__init__.py +2 -8
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
- claude_mpm/hooks/kuzu_response_hook.py +1 -5
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/scripts/claude-hook-handler.sh +3 -3
- claude_mpm/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/agents/agent_builder.py +45 -9
- 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_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
- claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
- claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
- 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 -46
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- claude_mpm/services/agents/git_source_manager.py +629 -0
- claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
- claude_mpm/services/agents/local_template_manager.py +50 -10
- 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/cli/session_pause_manager.py +1 -1
- claude_mpm/services/command_deployment_service.py +200 -6
- claude_mpm/services/core/base.py +7 -2
- claude_mpm/services/core/interfaces/__init__.py +1 -3
- claude_mpm/services/core/interfaces/health.py +1 -4
- claude_mpm/services/core/models/__init__.py +2 -11
- claude_mpm/services/diagnostics/checks/__init__.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
- claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
- claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
- claude_mpm/services/event_bus/direct_relay.py +3 -3
- claude_mpm/services/events/consumers/logging.py +1 -2
- 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/infrastructure/monitoring/__init__.py +1 -5
- claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
- 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 +3 -13
- claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
- claude_mpm/services/local_ops/health_manager.py +1 -4
- claude_mpm/services/local_ops/resource_monitor.py +1 -1
- claude_mpm/services/mcp_config_manager.py +75 -145
- claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
- claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
- claude_mpm/services/mcp_service_verifier.py +6 -3
- claude_mpm/services/model/model_router.py +1 -2
- claude_mpm/services/monitor/daemon.py +29 -9
- claude_mpm/services/monitor/daemon_manager.py +96 -19
- claude_mpm/services/monitor/server.py +2 -2
- claude_mpm/services/port_manager.py +1 -1
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/documentation_manager.py +2 -1
- claude_mpm/services/project/toolchain_analyzer.py +3 -1
- claude_mpm/services/runner_configuration_service.py +16 -3
- claude_mpm/services/session_management_service.py +16 -4
- 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/handlers/connection.py +1 -1
- claude_mpm/services/socketio/handlers/git.py +1 -1
- claude_mpm/services/socketio/server/core.py +1 -4
- claude_mpm/services/socketio/server/main.py +1 -3
- claude_mpm/services/system_instructions_service.py +1 -3
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
- claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
- claude_mpm/services/unified/unified_deployment.py +1 -5
- claude_mpm/services/version_control/conflict_resolution.py +6 -4
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
- claude_mpm/skills/skills_registry.py +0 -1
- 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 +8 -8
- claude_mpm/utils/agent_dependency_loader.py +77 -10
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/dependency_cache.py +3 -1
- claude_mpm/utils/gitignore.py +241 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +2 -4
- claude_mpm/utils/structured_questions.py +619 -0
- {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/METADATA +396 -43
- {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/RECORD +268 -422
- 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 -273
- claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
- claude_mpm/agents/templates/api_qa.json +0 -183
- claude_mpm/agents/templates/clerk-ops.json +0 -235
- claude_mpm/agents/templates/code_analyzer.json +0 -101
- claude_mpm/agents/templates/content-agent.json +0 -358
- claude_mpm/agents/templates/dart_engineer.json +0 -307
- claude_mpm/agents/templates/data_engineer.json +0 -225
- claude_mpm/agents/templates/documentation.json +0 -238
- claude_mpm/agents/templates/engineer.json +0 -210
- claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
- claude_mpm/agents/templates/golang_engineer.json +0 -270
- claude_mpm/agents/templates/imagemagick.json +0 -264
- claude_mpm/agents/templates/java_engineer.json +0 -346
- claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
- claude_mpm/agents/templates/local_ops_agent.json +0 -1840
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
- claude_mpm/agents/templates/memory_manager.json +0 -158
- claude_mpm/agents/templates/nextjs_engineer.json +0 -285
- claude_mpm/agents/templates/ops.json +0 -185
- claude_mpm/agents/templates/php-engineer.json +0 -287
- claude_mpm/agents/templates/product_owner.json +0 -338
- claude_mpm/agents/templates/project_organizer.json +0 -144
- claude_mpm/agents/templates/prompt-engineer.json +0 -737
- claude_mpm/agents/templates/python_engineer.json +0 -387
- claude_mpm/agents/templates/qa.json +0 -243
- claude_mpm/agents/templates/react_engineer.json +0 -239
- claude_mpm/agents/templates/refactoring_engineer.json +0 -276
- claude_mpm/agents/templates/research.json +0 -188
- claude_mpm/agents/templates/ruby-engineer.json +0 -280
- claude_mpm/agents/templates/rust_engineer.json +0 -275
- claude_mpm/agents/templates/security.json +0 -202
- claude_mpm/agents/templates/svelte-engineer.json +0 -225
- claude_mpm/agents/templates/tauri_engineer.json +0 -274
- claude_mpm/agents/templates/ticketing.json +0 -178
- claude_mpm/agents/templates/typescript_engineer.json +0 -285
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
- claude_mpm/agents/templates/version_control.json +0 -159
- claude_mpm/agents/templates/web_qa.json +0 -400
- claude_mpm/agents/templates/web_ui.json +0 -189
- claude_mpm/commands/mpm-tickets.md +0 -151
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
- claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
- claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
- claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
- claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
- claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
- claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
- 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/connection-debug.js +0 -654
- claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
- 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-change-tracker.js +0 -443
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/file-viewer.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/nav-bar.js +0 -145
- claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
- 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/connection-manager.js +0 -536
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/built/react/events.js +0 -30
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
- claude_mpm/dashboard/static/built/shared/logger.js +0 -385
- claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
- 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/file-viewer.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/react/events.js +0 -30
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- claude_mpm/dashboard/static/events.html +0 -607
- claude_mpm/dashboard/static/index.html +0 -635
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/js/shared/logger.js +0 -385
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
- claude_mpm/dashboard/static/legacy/activity.html +0 -736
- claude_mpm/dashboard/static/legacy/agents.html +0 -786
- claude_mpm/dashboard/static/legacy/files.html +0 -747
- claude_mpm/dashboard/static/legacy/tools.html +0 -831
- claude_mpm/dashboard/static/monitors.html +0 -431
- claude_mpm/dashboard/static/production/events.html +0 -659
- claude_mpm/dashboard/static/production/main.html +0 -698
- claude_mpm/dashboard/static/production/monitors.html +0 -483
- claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
- claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
- claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
- claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
- /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
- /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
- /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
- /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
- {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/WHEEL +0 -0
- {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
"""Agent selection service for minimal and auto-configure deployment modes.
|
|
2
|
+
|
|
3
|
+
WHY: Provide two agent selection strategies to simplify deployment:
|
|
4
|
+
1. Minimal Configuration: Deploy exactly 6 core agents for basic workflow
|
|
5
|
+
2. Auto-Configure: Detect toolchain and deploy matching specialized agents
|
|
6
|
+
|
|
7
|
+
Design Decision: Strategy Pattern with Composition
|
|
8
|
+
|
|
9
|
+
This service composes SingleTierDeploymentService and ToolchainDetector
|
|
10
|
+
rather than inheriting. Each deployment mode is a distinct strategy that
|
|
11
|
+
orchestrates the deployment service differently.
|
|
12
|
+
|
|
13
|
+
Trade-offs:
|
|
14
|
+
- Flexibility: Easy to add new selection modes (e.g., profile-based)
|
|
15
|
+
- Testability: Can mock deployment service and detector independently
|
|
16
|
+
- Complexity: Slightly more code than monolithic approach
|
|
17
|
+
- Clarity: Clear separation between selection logic and deployment mechanics
|
|
18
|
+
|
|
19
|
+
Architecture:
|
|
20
|
+
- AgentSelectionService orchestrates deployment strategies
|
|
21
|
+
- SingleTierDeploymentService handles Git sync and file copying
|
|
22
|
+
- ToolchainDetector provides toolchain analysis for auto-configure
|
|
23
|
+
|
|
24
|
+
Example Workflow:
|
|
25
|
+
# Minimal mode
|
|
26
|
+
service.deploy_minimal_configuration()
|
|
27
|
+
-> Validate 6 core agents available
|
|
28
|
+
-> Deploy each agent via deployment_service.deploy_agent()
|
|
29
|
+
|
|
30
|
+
# Auto-configure mode
|
|
31
|
+
service.deploy_auto_configure(project_path)
|
|
32
|
+
-> Detect toolchain (languages, frameworks, tools)
|
|
33
|
+
-> Recommend agents based on toolchain
|
|
34
|
+
-> Merge with core agents
|
|
35
|
+
-> Deploy recommended agents
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
import logging
|
|
39
|
+
from pathlib import Path
|
|
40
|
+
from typing import Any, Dict, List, Optional, Set, Tuple
|
|
41
|
+
|
|
42
|
+
from src.claude_mpm.services.agents.single_tier_deployment_service import (
|
|
43
|
+
SingleTierDeploymentService,
|
|
44
|
+
)
|
|
45
|
+
from src.claude_mpm.services.agents.toolchain_detector import ToolchainDetector
|
|
46
|
+
|
|
47
|
+
logger = logging.getLogger(__name__)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class AgentSelectionService:
|
|
51
|
+
"""Service for agent selection modes (minimal and auto-configure).
|
|
52
|
+
|
|
53
|
+
Provides two deployment strategies:
|
|
54
|
+
|
|
55
|
+
1. Minimal Configuration Mode:
|
|
56
|
+
Deploy exactly 6 core agents needed for basic Claude MPM workflow:
|
|
57
|
+
- engineer: General implementation
|
|
58
|
+
- documentation: Documentation creation
|
|
59
|
+
- qa: Quality assurance testing
|
|
60
|
+
- research: Codebase analysis
|
|
61
|
+
- ops: Deployment operations
|
|
62
|
+
- ticketing: Ticket management
|
|
63
|
+
|
|
64
|
+
2. Auto-Configure Mode:
|
|
65
|
+
Detect project toolchain and deploy matching agents:
|
|
66
|
+
- Scan project for languages, frameworks, build tools
|
|
67
|
+
- Map toolchain to specialized agents
|
|
68
|
+
- Include core agents for complete workflow
|
|
69
|
+
- Deploy recommended agent set
|
|
70
|
+
|
|
71
|
+
Usage:
|
|
72
|
+
>>> config = AgentSourceConfiguration.load()
|
|
73
|
+
>>> deployment = SingleTierDeploymentService(config, deployment_dir)
|
|
74
|
+
>>> service = AgentSelectionService(deployment)
|
|
75
|
+
>>>
|
|
76
|
+
>>> # Minimal mode
|
|
77
|
+
>>> result = service.deploy_minimal_configuration()
|
|
78
|
+
>>> print(f"Deployed {result['deployed_count']} agents")
|
|
79
|
+
>>>
|
|
80
|
+
>>> # Auto-configure mode
|
|
81
|
+
>>> result = service.deploy_auto_configure(project_path=Path("."))
|
|
82
|
+
>>> print(f"Detected: {result['toolchain']}")
|
|
83
|
+
>>> print(f"Deployed: {result['deployed_agents']}")
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
# Minimal configuration agents (6 core agents)
|
|
87
|
+
MINIMAL_AGENTS = [
|
|
88
|
+
"engineer",
|
|
89
|
+
"documentation",
|
|
90
|
+
"qa",
|
|
91
|
+
"research",
|
|
92
|
+
"ops",
|
|
93
|
+
"ticketing",
|
|
94
|
+
]
|
|
95
|
+
|
|
96
|
+
def __init__(self, deployment_service: SingleTierDeploymentService):
|
|
97
|
+
"""Initialize agent selection service.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
deployment_service: Deployment service for agent operations
|
|
101
|
+
"""
|
|
102
|
+
self.deployment_service = deployment_service
|
|
103
|
+
self.toolchain_detector = ToolchainDetector()
|
|
104
|
+
|
|
105
|
+
logger.info("AgentSelectionService initialized")
|
|
106
|
+
|
|
107
|
+
def deploy_minimal_configuration(self, dry_run: bool = False) -> Dict[str, Any]:
|
|
108
|
+
"""Deploy minimal configuration (6 core agents).
|
|
109
|
+
|
|
110
|
+
Deploys exactly 6 agents required for basic Claude MPM workflow:
|
|
111
|
+
engineer, documentation, qa, research, ops, ticketing.
|
|
112
|
+
|
|
113
|
+
Workflow:
|
|
114
|
+
1. Get available agents from deployment service
|
|
115
|
+
2. Validate all 6 core agents are available
|
|
116
|
+
3. Deploy each core agent individually
|
|
117
|
+
4. Return deployment report with success/failure details
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
dry_run: Show what would be deployed without actually deploying
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
Deployment report:
|
|
124
|
+
{
|
|
125
|
+
"status": "success" | "partial" | "error",
|
|
126
|
+
"mode": "minimal",
|
|
127
|
+
"deployed_count": 6,
|
|
128
|
+
"failed_count": 0,
|
|
129
|
+
"deployed_agents": ["engineer", "qa", ...],
|
|
130
|
+
"failed_agents": [],
|
|
131
|
+
"missing_agents": [],
|
|
132
|
+
"dry_run": false,
|
|
133
|
+
"details": [
|
|
134
|
+
{
|
|
135
|
+
"agent_name": "engineer",
|
|
136
|
+
"deployed": true,
|
|
137
|
+
"source": "bobmatnyc/claude-mpm-agents",
|
|
138
|
+
"priority": 100
|
|
139
|
+
},
|
|
140
|
+
...
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
Error Handling:
|
|
145
|
+
- Missing agents logged and included in missing_agents list
|
|
146
|
+
- Failed deployments logged and included in failed_agents list
|
|
147
|
+
- Returns "partial" status if some agents deployed successfully
|
|
148
|
+
- Returns "error" status if no agents deployed
|
|
149
|
+
"""
|
|
150
|
+
logger.info(f"Starting minimal configuration deployment (dry_run={dry_run})")
|
|
151
|
+
|
|
152
|
+
# Step 1: Get available agents
|
|
153
|
+
available_agents = self.deployment_service.list_available_agents()
|
|
154
|
+
available_agent_ids = {agent["agent_id"].lower() for agent in available_agents}
|
|
155
|
+
|
|
156
|
+
logger.debug(
|
|
157
|
+
f"Available agents: {len(available_agents)} ({sorted(available_agent_ids)})"
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
# Step 2: Validate all minimal agents are available
|
|
161
|
+
available_minimal, missing_minimal = self._validate_agent_availability(
|
|
162
|
+
self.MINIMAL_AGENTS, available_agent_ids
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
if missing_minimal:
|
|
166
|
+
logger.warning(
|
|
167
|
+
f"Some minimal agents not available: {sorted(missing_minimal)}"
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
# Step 3: Deploy each available minimal agent
|
|
171
|
+
deployed_agents: List[str] = []
|
|
172
|
+
failed_agents: List[str] = []
|
|
173
|
+
deployment_details: List[Dict[str, Any]] = []
|
|
174
|
+
|
|
175
|
+
for agent_name in available_minimal:
|
|
176
|
+
try:
|
|
177
|
+
result = self.deployment_service.deploy_agent(
|
|
178
|
+
agent_name=agent_name, dry_run=dry_run
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
if result.get("deployed", False) or result.get("dry_run", False):
|
|
182
|
+
deployed_agents.append(agent_name)
|
|
183
|
+
deployment_details.append(result)
|
|
184
|
+
logger.info(f"✓ Deployed {agent_name}")
|
|
185
|
+
else:
|
|
186
|
+
failed_agents.append(agent_name)
|
|
187
|
+
deployment_details.append(result)
|
|
188
|
+
logger.warning(
|
|
189
|
+
f"✗ Failed to deploy {agent_name}: {result.get('error', 'Unknown error')}"
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
except Exception as e:
|
|
193
|
+
failed_agents.append(agent_name)
|
|
194
|
+
logger.error(f"✗ Error deploying {agent_name}: {e}")
|
|
195
|
+
deployment_details.append(
|
|
196
|
+
{
|
|
197
|
+
"agent_name": agent_name,
|
|
198
|
+
"deployed": False,
|
|
199
|
+
"error": str(e),
|
|
200
|
+
}
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
# Step 4: Build report
|
|
204
|
+
deployed_count = len(deployed_agents)
|
|
205
|
+
failed_count = len(failed_agents)
|
|
206
|
+
missing_count = len(missing_minimal)
|
|
207
|
+
|
|
208
|
+
if deployed_count == len(self.MINIMAL_AGENTS) and missing_count == 0:
|
|
209
|
+
status = "success"
|
|
210
|
+
elif deployed_count > 0:
|
|
211
|
+
status = "partial"
|
|
212
|
+
else:
|
|
213
|
+
status = "error"
|
|
214
|
+
|
|
215
|
+
report = {
|
|
216
|
+
"status": status,
|
|
217
|
+
"mode": "minimal",
|
|
218
|
+
"deployed_count": deployed_count,
|
|
219
|
+
"failed_count": failed_count,
|
|
220
|
+
"missing_count": missing_count,
|
|
221
|
+
"deployed_agents": sorted(deployed_agents),
|
|
222
|
+
"failed_agents": sorted(failed_agents),
|
|
223
|
+
"missing_agents": sorted(missing_minimal),
|
|
224
|
+
"dry_run": dry_run,
|
|
225
|
+
"details": deployment_details,
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
logger.info(
|
|
229
|
+
f"Minimal configuration deployment complete: "
|
|
230
|
+
f"{deployed_count} deployed, {failed_count} failed, "
|
|
231
|
+
f"{missing_count} missing (status: {status})"
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
return report
|
|
235
|
+
|
|
236
|
+
def deploy_auto_configure(
|
|
237
|
+
self,
|
|
238
|
+
project_path: Optional[Path] = None,
|
|
239
|
+
dry_run: bool = False,
|
|
240
|
+
) -> Dict[str, Any]:
|
|
241
|
+
"""Auto-detect toolchain and deploy matching agents.
|
|
242
|
+
|
|
243
|
+
Workflow:
|
|
244
|
+
1. Detect toolchain (languages, frameworks, build tools)
|
|
245
|
+
2. Map toolchain to recommended agents
|
|
246
|
+
3. Merge recommended agents with core agents
|
|
247
|
+
4. Validate agent availability
|
|
248
|
+
5. Deploy recommended agents
|
|
249
|
+
6. Return deployment report with toolchain analysis
|
|
250
|
+
|
|
251
|
+
Args:
|
|
252
|
+
project_path: Project root path (defaults to current directory)
|
|
253
|
+
dry_run: Show what would be deployed without actually deploying
|
|
254
|
+
|
|
255
|
+
Returns:
|
|
256
|
+
Deployment report:
|
|
257
|
+
{
|
|
258
|
+
"status": "success" | "partial" | "error",
|
|
259
|
+
"mode": "auto_configure",
|
|
260
|
+
"deployed_count": 8,
|
|
261
|
+
"failed_count": 0,
|
|
262
|
+
"toolchain": {
|
|
263
|
+
"languages": ["python"],
|
|
264
|
+
"frameworks": ["fastapi"],
|
|
265
|
+
"build_tools": ["docker", "make"]
|
|
266
|
+
},
|
|
267
|
+
"recommended_agents": ["python-engineer", "ops", "qa", ...],
|
|
268
|
+
"deployed_agents": ["python-engineer", "ops", "qa", ...],
|
|
269
|
+
"failed_agents": [],
|
|
270
|
+
"missing_agents": [],
|
|
271
|
+
"dry_run": false,
|
|
272
|
+
"details": [...]
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
Error Handling:
|
|
276
|
+
- Invalid project path: Returns error status with message
|
|
277
|
+
- Toolchain detection failure: Falls back to minimal configuration
|
|
278
|
+
- Missing agents: Logged and included in report
|
|
279
|
+
- Failed deployments: Logged and included in report
|
|
280
|
+
"""
|
|
281
|
+
if project_path is None:
|
|
282
|
+
project_path = Path.cwd()
|
|
283
|
+
|
|
284
|
+
logger.info(
|
|
285
|
+
f"Starting auto-configure deployment (project={project_path}, dry_run={dry_run})"
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
# Step 1: Validate project path
|
|
289
|
+
if not project_path.exists() or not project_path.is_dir():
|
|
290
|
+
logger.error(f"Invalid project path: {project_path}")
|
|
291
|
+
return {
|
|
292
|
+
"status": "error",
|
|
293
|
+
"mode": "auto_configure",
|
|
294
|
+
"error": f"Invalid project path: {project_path}",
|
|
295
|
+
"deployed_count": 0,
|
|
296
|
+
"failed_count": 0,
|
|
297
|
+
"toolchain": {},
|
|
298
|
+
"recommended_agents": [],
|
|
299
|
+
"deployed_agents": [],
|
|
300
|
+
"failed_agents": [],
|
|
301
|
+
"missing_agents": [],
|
|
302
|
+
"dry_run": dry_run,
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
# Step 2: Detect toolchain
|
|
306
|
+
try:
|
|
307
|
+
toolchain = self.toolchain_detector.detect_toolchain(project_path)
|
|
308
|
+
logger.info(f"Detected toolchain: {toolchain}")
|
|
309
|
+
except Exception as e:
|
|
310
|
+
logger.error(f"Toolchain detection failed: {e}")
|
|
311
|
+
return {
|
|
312
|
+
"status": "error",
|
|
313
|
+
"mode": "auto_configure",
|
|
314
|
+
"error": f"Toolchain detection failed: {e}",
|
|
315
|
+
"deployed_count": 0,
|
|
316
|
+
"failed_count": 0,
|
|
317
|
+
"toolchain": {},
|
|
318
|
+
"recommended_agents": [],
|
|
319
|
+
"deployed_agents": [],
|
|
320
|
+
"failed_agents": [],
|
|
321
|
+
"missing_agents": [],
|
|
322
|
+
"dry_run": dry_run,
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
# Step 3: Recommend agents based on toolchain
|
|
326
|
+
recommended_agents = self.toolchain_detector.recommend_agents(toolchain)
|
|
327
|
+
logger.info(
|
|
328
|
+
f"Recommended {len(recommended_agents)} agents: {recommended_agents}"
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
# Step 4: Get available agents and validate
|
|
332
|
+
available_agents = self.deployment_service.list_available_agents()
|
|
333
|
+
available_agent_ids = {agent["agent_id"].lower() for agent in available_agents}
|
|
334
|
+
|
|
335
|
+
available_recommended, missing_recommended = self._validate_agent_availability(
|
|
336
|
+
recommended_agents, available_agent_ids
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
if missing_recommended:
|
|
340
|
+
logger.warning(
|
|
341
|
+
f"Some recommended agents not available: {sorted(missing_recommended)}"
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
# Step 5: Deploy each available recommended agent
|
|
345
|
+
deployed_agents: List[str] = []
|
|
346
|
+
failed_agents: List[str] = []
|
|
347
|
+
deployment_details: List[Dict[str, Any]] = []
|
|
348
|
+
|
|
349
|
+
for agent_name in available_recommended:
|
|
350
|
+
try:
|
|
351
|
+
result = self.deployment_service.deploy_agent(
|
|
352
|
+
agent_name=agent_name, dry_run=dry_run
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
if result.get("deployed", False) or result.get("dry_run", False):
|
|
356
|
+
deployed_agents.append(agent_name)
|
|
357
|
+
deployment_details.append(result)
|
|
358
|
+
logger.info(f"✓ Deployed {agent_name}")
|
|
359
|
+
else:
|
|
360
|
+
failed_agents.append(agent_name)
|
|
361
|
+
deployment_details.append(result)
|
|
362
|
+
logger.warning(
|
|
363
|
+
f"✗ Failed to deploy {agent_name}: {result.get('error', 'Unknown error')}"
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
except Exception as e:
|
|
367
|
+
failed_agents.append(agent_name)
|
|
368
|
+
logger.error(f"✗ Error deploying {agent_name}: {e}")
|
|
369
|
+
deployment_details.append(
|
|
370
|
+
{
|
|
371
|
+
"agent_name": agent_name,
|
|
372
|
+
"deployed": False,
|
|
373
|
+
"error": str(e),
|
|
374
|
+
}
|
|
375
|
+
)
|
|
376
|
+
|
|
377
|
+
# Step 6: Build report
|
|
378
|
+
deployed_count = len(deployed_agents)
|
|
379
|
+
failed_count = len(failed_agents)
|
|
380
|
+
missing_count = len(missing_recommended)
|
|
381
|
+
|
|
382
|
+
if deployed_count > 0 and failed_count == 0 and missing_count == 0:
|
|
383
|
+
status = "success"
|
|
384
|
+
elif deployed_count > 0:
|
|
385
|
+
status = "partial"
|
|
386
|
+
else:
|
|
387
|
+
status = "error"
|
|
388
|
+
|
|
389
|
+
report = {
|
|
390
|
+
"status": status,
|
|
391
|
+
"mode": "auto_configure",
|
|
392
|
+
"deployed_count": deployed_count,
|
|
393
|
+
"failed_count": failed_count,
|
|
394
|
+
"missing_count": missing_count,
|
|
395
|
+
"toolchain": toolchain,
|
|
396
|
+
"recommended_agents": sorted(recommended_agents),
|
|
397
|
+
"deployed_agents": sorted(deployed_agents),
|
|
398
|
+
"failed_agents": sorted(failed_agents),
|
|
399
|
+
"missing_agents": sorted(missing_recommended),
|
|
400
|
+
"dry_run": dry_run,
|
|
401
|
+
"details": deployment_details,
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
logger.info(
|
|
405
|
+
f"Auto-configure deployment complete: "
|
|
406
|
+
f"{deployed_count} deployed, {failed_count} failed, "
|
|
407
|
+
f"{missing_count} missing (status: {status})"
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
return report
|
|
411
|
+
|
|
412
|
+
def _validate_agent_availability(
|
|
413
|
+
self, required_agents: List[str], available_agents: Set[str]
|
|
414
|
+
) -> Tuple[List[str], List[str]]:
|
|
415
|
+
"""Validate which required agents are available.
|
|
416
|
+
|
|
417
|
+
Args:
|
|
418
|
+
required_agents: List of agent names needed
|
|
419
|
+
available_agents: Set of available agent IDs
|
|
420
|
+
|
|
421
|
+
Returns:
|
|
422
|
+
Tuple of (available_list, missing_list)
|
|
423
|
+
- available_list: Agents that are available
|
|
424
|
+
- missing_list: Agents that are not available
|
|
425
|
+
"""
|
|
426
|
+
available_list: List[str] = []
|
|
427
|
+
missing_list: List[str] = []
|
|
428
|
+
|
|
429
|
+
for agent_name in required_agents:
|
|
430
|
+
agent_id = agent_name.lower().replace(" ", "-")
|
|
431
|
+
if agent_id in available_agents:
|
|
432
|
+
available_list.append(agent_name)
|
|
433
|
+
else:
|
|
434
|
+
missing_list.append(agent_name)
|
|
435
|
+
|
|
436
|
+
return available_list, missing_list
|
|
437
|
+
|
|
438
|
+
def get_available_selection_modes(self) -> List[Dict[str, Any]]:
|
|
439
|
+
"""Get information about available selection modes.
|
|
440
|
+
|
|
441
|
+
Returns:
|
|
442
|
+
List of selection mode metadata:
|
|
443
|
+
[
|
|
444
|
+
{
|
|
445
|
+
"mode": "minimal",
|
|
446
|
+
"description": "Deploy 6 core agents for basic workflow",
|
|
447
|
+
"agent_count": 6,
|
|
448
|
+
"agents": ["engineer", "documentation", "qa", ...]
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"mode": "auto_configure",
|
|
452
|
+
"description": "Auto-detect toolchain and deploy matching agents",
|
|
453
|
+
"agent_count": "varies",
|
|
454
|
+
"requires_project_scan": true
|
|
455
|
+
}
|
|
456
|
+
]
|
|
457
|
+
"""
|
|
458
|
+
return [
|
|
459
|
+
{
|
|
460
|
+
"mode": "minimal",
|
|
461
|
+
"description": "Deploy 6 core agents for basic workflow",
|
|
462
|
+
"agent_count": len(self.MINIMAL_AGENTS),
|
|
463
|
+
"agents": self.MINIMAL_AGENTS,
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
"mode": "auto_configure",
|
|
467
|
+
"description": "Auto-detect toolchain and deploy matching agents",
|
|
468
|
+
"agent_count": "varies",
|
|
469
|
+
"requires_project_scan": True,
|
|
470
|
+
"toolchain_support": {
|
|
471
|
+
"languages": list(self.toolchain_detector.LANGUAGE_PATTERNS.keys()),
|
|
472
|
+
"frameworks": list(
|
|
473
|
+
self.toolchain_detector.FRAMEWORK_PATTERNS.keys()
|
|
474
|
+
),
|
|
475
|
+
"build_tools": list(
|
|
476
|
+
self.toolchain_detector.BUILD_TOOL_PATTERNS.keys()
|
|
477
|
+
),
|
|
478
|
+
},
|
|
479
|
+
},
|
|
480
|
+
]
|
|
481
|
+
|
|
482
|
+
def __repr__(self) -> str:
|
|
483
|
+
"""Return string representation."""
|
|
484
|
+
return f"AgentSelectionService(deployment_service={self.deployment_service})"
|