claude-mpm 4.21.0__py3-none-any.whl → 5.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_PM.md +12 -0
- claude_mpm/agents/OUTPUT_STYLE.md +3 -48
- claude_mpm/agents/PM_INSTRUCTIONS.md +632 -334
- claude_mpm/agents/WORKFLOW.md +75 -2
- 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/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} +89 -19
- 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/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +125 -20
- claude_mpm/cli/commands/agents.py +684 -13
- 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/cleanup.py +1 -1
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +478 -44
- 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 +50 -2
- 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/run.py +124 -128
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +435 -1
- claude_mpm/cli/executor.py +78 -3
- claude_mpm/cli/interactive/agent_wizard.py +919 -41
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +173 -4
- claude_mpm/cli/parsers/base_parser.py +49 -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 +138 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/startup.py +499 -84
- 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-session-resume.md +381 -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 +11 -0
- claude_mpm/config/agent_presets.py +258 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/constants.py +12 -0
- claude_mpm/core/api_validator.py +1 -1
- claude_mpm/core/claude_runner.py +17 -10
- claude_mpm/core/config.py +24 -0
- claude_mpm/core/constants.py +1 -1
- claude_mpm/core/framework/__init__.py +3 -16
- claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
- claude_mpm/core/framework/processors/metadata_processor.py +1 -1
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +41 -2
- claude_mpm/core/interactive_session.py +112 -5
- claude_mpm/core/logger.py +3 -1
- claude_mpm/core/oneshot_session.py +94 -4
- 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/event_handlers.py +3 -1
- claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
- claude_mpm/hooks/claude_hooks/installer.py +45 -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/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- 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/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 +1055 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/cli/session_pause_manager.py +1 -1
- claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
- claude_mpm/services/command_deployment_service.py +92 -1
- claude_mpm/services/core/base.py +26 -11
- 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/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/event_bus/event_bus.py +36 -3
- claude_mpm/services/event_bus/relay.py +23 -7
- 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/infrastructure/monitoring/resources.py +1 -1
- 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/process_manager.py +1 -1
- claude_mpm/services/local_ops/resource_monitor.py +2 -2
- claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
- 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/document_summarizer.py +1 -1
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
- claude_mpm/services/memory/failure_tracker.py +19 -4
- claude_mpm/services/memory/optimizer.py +1 -1
- claude_mpm/services/model/model_router.py +8 -9
- claude_mpm/services/monitor/daemon.py +1 -1
- claude_mpm/services/monitor/server.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- 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 +1 -0
- claude_mpm/services/self_upgrade_service.py +165 -7
- 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 +2 -2
- 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/cloud_strategies.py +1 -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/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/performance-profiling.md +6 -0
- 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/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/utils/agent_dependency_loader.py +80 -13
- claude_mpm/utils/dependency_cache.py +3 -1
- claude_mpm/utils/gitignore.py +241 -0
- claude_mpm/utils/log_cleanup.py +3 -3
- claude_mpm/utils/progress.py +383 -0
- claude_mpm/utils/robust_installer.py +3 -5
- claude_mpm/utils/structured_questions.py +619 -0
- {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/METADATA +429 -59
- {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/RECORD +264 -427
- 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 -180
- 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 -211
- 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/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 -140
- 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 -242
- claude_mpm/agents/templates/react_engineer.json +0 -238
- 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/ticketing.json +0 -177
- 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 -157
- claude_mpm/agents/templates/web_qa.json +0 -399
- claude_mpm/agents/templates/web_ui.json +0 -189
- claude_mpm/commands/mpm-tickets.md +0 -102
- 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/tools/code_tree_analyzer.py +0 -1825
- /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.21.0.dist-info → claude_mpm-5.0.2.dist-info}/WHEEL +0 -0
- {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"""Agent preset configurations for common development scenarios.
|
|
2
|
+
|
|
3
|
+
This module defines preset bundles of agents for typical development workflows.
|
|
4
|
+
Presets enable users to deploy entire agent stacks with a single command like:
|
|
5
|
+
claude-mpm agents deploy --preset python-dev
|
|
6
|
+
|
|
7
|
+
Design Decision: Presets use agent IDs from AUTO-DEPLOY-INDEX.md format
|
|
8
|
+
(e.g., "universal/memory-manager", "engineer/backend/python-engineer").
|
|
9
|
+
|
|
10
|
+
Trade-offs:
|
|
11
|
+
- Simplicity: Static lists are easy to maintain
|
|
12
|
+
- Flexibility: Dynamic functions allow auto-detection (future enhancement)
|
|
13
|
+
- Discoverability: Presets shown in CLI help and error messages
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from typing import Any, Callable, Dict, List, Union
|
|
17
|
+
|
|
18
|
+
# Type for preset resolver (can be static list or dynamic function)
|
|
19
|
+
PresetResolver = Union[List[str], Callable[[], List[str]]]
|
|
20
|
+
|
|
21
|
+
PRESETS: Dict[str, Dict[str, Any]] = {
|
|
22
|
+
"minimal": {
|
|
23
|
+
"description": "6 core agents for any project",
|
|
24
|
+
"agents": [
|
|
25
|
+
"universal/memory-manager",
|
|
26
|
+
"universal/research",
|
|
27
|
+
"documentation/documentation",
|
|
28
|
+
"engineer/backend/python-engineer", # Will be language-specific in future
|
|
29
|
+
"qa/qa",
|
|
30
|
+
"ops/core/ops",
|
|
31
|
+
],
|
|
32
|
+
"use_cases": ["Micro projects", "Quick prototypes", "Learning"],
|
|
33
|
+
},
|
|
34
|
+
"python-dev": {
|
|
35
|
+
"description": "Python backend development stack (8 agents)",
|
|
36
|
+
"agents": [
|
|
37
|
+
"universal/memory-manager",
|
|
38
|
+
"universal/research",
|
|
39
|
+
"documentation/documentation",
|
|
40
|
+
"engineer/backend/python-engineer",
|
|
41
|
+
"qa/qa",
|
|
42
|
+
"qa/api-qa",
|
|
43
|
+
"ops/core/ops",
|
|
44
|
+
"security/security",
|
|
45
|
+
],
|
|
46
|
+
"use_cases": ["FastAPI projects", "Django projects", "Python APIs"],
|
|
47
|
+
},
|
|
48
|
+
"python-fullstack": {
|
|
49
|
+
"description": "Python backend + React frontend (12 agents)",
|
|
50
|
+
"agents": [
|
|
51
|
+
"universal/memory-manager",
|
|
52
|
+
"universal/research",
|
|
53
|
+
"universal/code-analyzer",
|
|
54
|
+
"documentation/documentation",
|
|
55
|
+
"documentation/ticketing",
|
|
56
|
+
"engineer/backend/python-engineer",
|
|
57
|
+
"engineer/frontend/react-engineer",
|
|
58
|
+
"qa/qa",
|
|
59
|
+
"qa/api-qa",
|
|
60
|
+
"qa/web-qa",
|
|
61
|
+
"ops/core/ops",
|
|
62
|
+
"security/security",
|
|
63
|
+
],
|
|
64
|
+
"use_cases": ["FastAPI + React", "Django + React", "Full-stack Python"],
|
|
65
|
+
},
|
|
66
|
+
"javascript-backend": {
|
|
67
|
+
"description": "Node.js backend development (8 agents)",
|
|
68
|
+
"agents": [
|
|
69
|
+
"universal/memory-manager",
|
|
70
|
+
"universal/research",
|
|
71
|
+
"documentation/documentation",
|
|
72
|
+
"engineer/backend/javascript-engineer",
|
|
73
|
+
"qa/qa",
|
|
74
|
+
"qa/api-qa",
|
|
75
|
+
"ops/core/ops",
|
|
76
|
+
"security/security",
|
|
77
|
+
],
|
|
78
|
+
"use_cases": ["Express.js", "Fastify", "Koa", "Node.js APIs"],
|
|
79
|
+
},
|
|
80
|
+
"react-dev": {
|
|
81
|
+
"description": "React frontend development (9 agents)",
|
|
82
|
+
"agents": [
|
|
83
|
+
"universal/memory-manager",
|
|
84
|
+
"universal/research",
|
|
85
|
+
"documentation/documentation",
|
|
86
|
+
"engineer/frontend/react-engineer",
|
|
87
|
+
"engineer/data/typescript-engineer",
|
|
88
|
+
"qa/qa",
|
|
89
|
+
"qa/web-qa",
|
|
90
|
+
"ops/core/ops",
|
|
91
|
+
"security/security",
|
|
92
|
+
],
|
|
93
|
+
"use_cases": ["React SPAs", "Component libraries", "Frontend projects"],
|
|
94
|
+
},
|
|
95
|
+
"nextjs-fullstack": {
|
|
96
|
+
"description": "Next.js full-stack development (13 agents)",
|
|
97
|
+
"agents": [
|
|
98
|
+
"universal/memory-manager",
|
|
99
|
+
"universal/research",
|
|
100
|
+
"universal/code-analyzer",
|
|
101
|
+
"documentation/documentation",
|
|
102
|
+
"engineer/frontend/nextjs-engineer",
|
|
103
|
+
"engineer/frontend/react-engineer",
|
|
104
|
+
"engineer/data/typescript-engineer",
|
|
105
|
+
"qa/qa",
|
|
106
|
+
"qa/web-qa",
|
|
107
|
+
"ops/core/ops",
|
|
108
|
+
"ops/platform/vercel-ops",
|
|
109
|
+
"security/security",
|
|
110
|
+
"documentation/ticketing",
|
|
111
|
+
],
|
|
112
|
+
"use_cases": ["Next.js apps", "Vercel deployments", "Full-stack TypeScript"],
|
|
113
|
+
},
|
|
114
|
+
"rust-dev": {
|
|
115
|
+
"description": "Rust systems development (7 agents)",
|
|
116
|
+
"agents": [
|
|
117
|
+
"universal/memory-manager",
|
|
118
|
+
"universal/research",
|
|
119
|
+
"documentation/documentation",
|
|
120
|
+
"engineer/backend/rust-engineer",
|
|
121
|
+
"qa/qa",
|
|
122
|
+
"ops/core/ops",
|
|
123
|
+
"security/security",
|
|
124
|
+
],
|
|
125
|
+
"use_cases": ["Rust systems", "CLI tools", "WebAssembly"],
|
|
126
|
+
},
|
|
127
|
+
"golang-dev": {
|
|
128
|
+
"description": "Go backend development (8 agents)",
|
|
129
|
+
"agents": [
|
|
130
|
+
"universal/memory-manager",
|
|
131
|
+
"universal/research",
|
|
132
|
+
"documentation/documentation",
|
|
133
|
+
"engineer/backend/golang-engineer",
|
|
134
|
+
"qa/qa",
|
|
135
|
+
"qa/api-qa",
|
|
136
|
+
"ops/core/ops",
|
|
137
|
+
"security/security",
|
|
138
|
+
],
|
|
139
|
+
"use_cases": ["Go APIs", "Microservices", "Cloud-native apps"],
|
|
140
|
+
},
|
|
141
|
+
"java-dev": {
|
|
142
|
+
"description": "Java/Spring Boot development (9 agents)",
|
|
143
|
+
"agents": [
|
|
144
|
+
"universal/memory-manager",
|
|
145
|
+
"universal/research",
|
|
146
|
+
"documentation/documentation",
|
|
147
|
+
"engineer/backend/java-engineer",
|
|
148
|
+
"qa/qa",
|
|
149
|
+
"qa/api-qa",
|
|
150
|
+
"ops/core/ops",
|
|
151
|
+
"security/security",
|
|
152
|
+
"documentation/ticketing",
|
|
153
|
+
],
|
|
154
|
+
"use_cases": ["Spring Boot", "Java EE", "Enterprise applications"],
|
|
155
|
+
},
|
|
156
|
+
"mobile-flutter": {
|
|
157
|
+
"description": "Flutter mobile development (8 agents)",
|
|
158
|
+
"agents": [
|
|
159
|
+
"universal/memory-manager",
|
|
160
|
+
"universal/research",
|
|
161
|
+
"documentation/documentation",
|
|
162
|
+
"engineer/mobile/dart-engineer",
|
|
163
|
+
"qa/qa",
|
|
164
|
+
"ops/core/ops",
|
|
165
|
+
"security/security",
|
|
166
|
+
"documentation/ticketing",
|
|
167
|
+
],
|
|
168
|
+
"use_cases": ["Flutter apps", "Cross-platform mobile", "iOS/Android"],
|
|
169
|
+
},
|
|
170
|
+
"data-eng": {
|
|
171
|
+
"description": "Data engineering stack (10 agents)",
|
|
172
|
+
"agents": [
|
|
173
|
+
"universal/memory-manager",
|
|
174
|
+
"universal/research",
|
|
175
|
+
"documentation/documentation",
|
|
176
|
+
"engineer/backend/python-engineer",
|
|
177
|
+
"engineer/data/data-engineer",
|
|
178
|
+
"qa/qa",
|
|
179
|
+
"ops/core/ops",
|
|
180
|
+
"security/security",
|
|
181
|
+
"documentation/ticketing",
|
|
182
|
+
"universal/code-analyzer",
|
|
183
|
+
],
|
|
184
|
+
"use_cases": ["dbt projects", "Airflow", "Data pipelines", "ETL"],
|
|
185
|
+
},
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def get_preset_names() -> List[str]:
|
|
190
|
+
"""Get list of all available preset names.
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
List of preset names (e.g., ['minimal', 'python-dev', ...])
|
|
194
|
+
|
|
195
|
+
Example:
|
|
196
|
+
>>> names = get_preset_names()
|
|
197
|
+
>>> 'minimal' in names
|
|
198
|
+
True
|
|
199
|
+
"""
|
|
200
|
+
return list(PRESETS.keys())
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def get_preset_info(preset_name: str) -> Dict[str, Any]:
|
|
204
|
+
"""Get preset metadata (description, use cases, agent count).
|
|
205
|
+
|
|
206
|
+
Args:
|
|
207
|
+
preset_name: Name of preset (e.g., 'python-dev')
|
|
208
|
+
|
|
209
|
+
Returns:
|
|
210
|
+
Dict with keys:
|
|
211
|
+
- name: Preset name
|
|
212
|
+
- description: Human-readable description
|
|
213
|
+
- agent_count: Number of agents in preset
|
|
214
|
+
- use_cases: List of use case strings
|
|
215
|
+
|
|
216
|
+
Raises:
|
|
217
|
+
ValueError: If preset name is invalid
|
|
218
|
+
|
|
219
|
+
Example:
|
|
220
|
+
>>> info = get_preset_info('minimal')
|
|
221
|
+
>>> info['agent_count']
|
|
222
|
+
6
|
|
223
|
+
"""
|
|
224
|
+
if preset_name not in PRESETS:
|
|
225
|
+
raise ValueError(f"Unknown preset: {preset_name}")
|
|
226
|
+
|
|
227
|
+
preset = PRESETS[preset_name]
|
|
228
|
+
return {
|
|
229
|
+
"name": preset_name,
|
|
230
|
+
"description": preset["description"],
|
|
231
|
+
"agent_count": len(preset["agents"]),
|
|
232
|
+
"use_cases": preset["use_cases"],
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def get_preset_agents(preset_name: str) -> List[str]:
|
|
237
|
+
"""Get agent list for preset.
|
|
238
|
+
|
|
239
|
+
Args:
|
|
240
|
+
preset_name: Name of preset (e.g., 'python-dev')
|
|
241
|
+
|
|
242
|
+
Returns:
|
|
243
|
+
List of agent IDs (e.g., ["universal/memory-manager", ...])
|
|
244
|
+
|
|
245
|
+
Raises:
|
|
246
|
+
ValueError: If preset name is invalid
|
|
247
|
+
|
|
248
|
+
Example:
|
|
249
|
+
>>> agents = get_preset_agents('minimal')
|
|
250
|
+
>>> len(agents)
|
|
251
|
+
6
|
|
252
|
+
>>> 'universal/memory-manager' in agents
|
|
253
|
+
True
|
|
254
|
+
"""
|
|
255
|
+
if preset_name not in PRESETS:
|
|
256
|
+
raise ValueError(f"Unknown preset: {preset_name}")
|
|
257
|
+
|
|
258
|
+
return PRESETS[preset_name]["agents"]
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
"""Configuration for agent sources (Git repositories)."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Optional
|
|
7
|
+
|
|
8
|
+
import yaml
|
|
9
|
+
|
|
10
|
+
from claude_mpm.models.git_repository import GitRepository
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class AgentSourceConfiguration:
|
|
17
|
+
"""Configuration for agent sources.
|
|
18
|
+
|
|
19
|
+
This class manages the configuration of Git repositories that contain
|
|
20
|
+
agent markdown files. It supports:
|
|
21
|
+
- System repository (bobmatnyc/claude-mpm-agents) with disable option
|
|
22
|
+
- Multiple custom repositories with priority-based resolution
|
|
23
|
+
- YAML persistence for configuration
|
|
24
|
+
- Repository management (add, remove, enable, disable)
|
|
25
|
+
|
|
26
|
+
Attributes:
|
|
27
|
+
disable_system_repo: If True, don't include default system repository
|
|
28
|
+
(default: True as of v4.5.0 - git sources are now preferred)
|
|
29
|
+
repositories: List of custom Git repositories
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
disable_system_repo: bool = True # Changed from False to True in v4.5.0
|
|
33
|
+
repositories: list[GitRepository] = field(default_factory=list)
|
|
34
|
+
|
|
35
|
+
@classmethod
|
|
36
|
+
def create_default_configuration(cls) -> "AgentSourceConfiguration":
|
|
37
|
+
"""Create default configuration with git sources enabled.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
AgentSourceConfiguration with default git repository configured
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
>>> config = AgentSourceConfiguration.create_default_configuration()
|
|
44
|
+
>>> print(config.repositories[0].url)
|
|
45
|
+
'https://github.com/bobmatnyc/claude-mpm-agents'
|
|
46
|
+
"""
|
|
47
|
+
# Create default git repository
|
|
48
|
+
default_repo = GitRepository(
|
|
49
|
+
url="https://github.com/bobmatnyc/claude-mpm-agents",
|
|
50
|
+
subdirectory="agents",
|
|
51
|
+
enabled=True,
|
|
52
|
+
priority=100,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
return cls(
|
|
56
|
+
disable_system_repo=True, # Disable built-in templates, use git sources
|
|
57
|
+
repositories=[default_repo],
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
@classmethod
|
|
61
|
+
def load(cls, config_path: Optional[Path] = None) -> "AgentSourceConfiguration":
|
|
62
|
+
"""Load configuration from YAML file.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
config_path: Path to YAML configuration file.
|
|
66
|
+
Defaults to ~/.claude-mpm/config/agent_sources.yaml
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
AgentSourceConfiguration instance
|
|
70
|
+
|
|
71
|
+
Example:
|
|
72
|
+
>>> config = AgentSourceConfiguration.load()
|
|
73
|
+
>>> print(config.repositories)
|
|
74
|
+
"""
|
|
75
|
+
if config_path is None:
|
|
76
|
+
config_path = Path.home() / ".claude-mpm" / "config" / "agent_sources.yaml"
|
|
77
|
+
|
|
78
|
+
# If file doesn't exist, create default configuration with git sources
|
|
79
|
+
if not config_path.exists():
|
|
80
|
+
logger.info(
|
|
81
|
+
f"Configuration file not found at {config_path}, creating default with git sources"
|
|
82
|
+
)
|
|
83
|
+
default_config = cls.create_default_configuration()
|
|
84
|
+
# Save the default configuration for future use
|
|
85
|
+
try:
|
|
86
|
+
default_config.save(config_path)
|
|
87
|
+
except Exception as e:
|
|
88
|
+
logger.warning(f"Could not save default configuration: {e}")
|
|
89
|
+
return default_config
|
|
90
|
+
|
|
91
|
+
try:
|
|
92
|
+
with open(config_path) as f:
|
|
93
|
+
data = yaml.safe_load(f)
|
|
94
|
+
|
|
95
|
+
if not data:
|
|
96
|
+
logger.warning(
|
|
97
|
+
f"Empty configuration file at {config_path}, using defaults"
|
|
98
|
+
)
|
|
99
|
+
return cls()
|
|
100
|
+
|
|
101
|
+
# Parse configuration
|
|
102
|
+
# Note: Default changed from False to True in v4.5.0
|
|
103
|
+
# For backward compatibility, if key is missing, use new default (True)
|
|
104
|
+
disable_system_repo = data.get("disable_system_repo", True)
|
|
105
|
+
|
|
106
|
+
# Parse repositories
|
|
107
|
+
repositories = []
|
|
108
|
+
for repo_data in data.get("repositories", []):
|
|
109
|
+
repo = GitRepository(
|
|
110
|
+
url=repo_data["url"],
|
|
111
|
+
subdirectory=repo_data.get("subdirectory"),
|
|
112
|
+
enabled=repo_data.get("enabled", True),
|
|
113
|
+
priority=repo_data.get("priority", 100),
|
|
114
|
+
)
|
|
115
|
+
repositories.append(repo)
|
|
116
|
+
|
|
117
|
+
return cls(
|
|
118
|
+
disable_system_repo=disable_system_repo, repositories=repositories
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
except Exception as e:
|
|
122
|
+
logger.error(f"Failed to load configuration from {config_path}: {e}")
|
|
123
|
+
logger.info("Using default configuration")
|
|
124
|
+
return cls()
|
|
125
|
+
|
|
126
|
+
def save(
|
|
127
|
+
self, config_path: Optional[Path] = None, include_comments: bool = True
|
|
128
|
+
) -> None:
|
|
129
|
+
"""Save configuration to YAML file.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
config_path: Path to YAML configuration file.
|
|
133
|
+
Defaults to ~/.claude-mpm/config/agent_sources.yaml
|
|
134
|
+
include_comments: Whether to include helpful comments in the YAML file
|
|
135
|
+
|
|
136
|
+
Example:
|
|
137
|
+
>>> config = AgentSourceConfiguration()
|
|
138
|
+
>>> config.save()
|
|
139
|
+
"""
|
|
140
|
+
if config_path is None:
|
|
141
|
+
config_path = Path.home() / ".claude-mpm" / "config" / "agent_sources.yaml"
|
|
142
|
+
|
|
143
|
+
# Ensure parent directory exists
|
|
144
|
+
config_path.parent.mkdir(parents=True, exist_ok=True)
|
|
145
|
+
|
|
146
|
+
try:
|
|
147
|
+
with open(config_path, "w") as f:
|
|
148
|
+
# Write header comments if requested
|
|
149
|
+
if include_comments:
|
|
150
|
+
f.write("# Claude MPM Agent Sources Configuration\n")
|
|
151
|
+
f.write("#\n")
|
|
152
|
+
f.write(
|
|
153
|
+
"# This file configures where Claude MPM discovers agent templates.\n"
|
|
154
|
+
)
|
|
155
|
+
f.write(
|
|
156
|
+
"# Git sources are the recommended approach for agent management.\n"
|
|
157
|
+
)
|
|
158
|
+
f.write("#\n")
|
|
159
|
+
f.write(
|
|
160
|
+
"# disable_system_repo: Set to true to use git sources instead of built-in templates\n"
|
|
161
|
+
)
|
|
162
|
+
f.write(
|
|
163
|
+
"# repositories: List of git repositories containing agent markdown files\n"
|
|
164
|
+
)
|
|
165
|
+
f.write("#\n")
|
|
166
|
+
f.write(
|
|
167
|
+
"# Default repository: https://github.com/bobmatnyc/claude-mpm-agents\n"
|
|
168
|
+
)
|
|
169
|
+
f.write("#\n\n")
|
|
170
|
+
|
|
171
|
+
# Build YAML data structure
|
|
172
|
+
data = {
|
|
173
|
+
"disable_system_repo": self.disable_system_repo,
|
|
174
|
+
"repositories": [
|
|
175
|
+
{
|
|
176
|
+
"url": repo.url,
|
|
177
|
+
"subdirectory": repo.subdirectory,
|
|
178
|
+
"enabled": repo.enabled,
|
|
179
|
+
"priority": repo.priority,
|
|
180
|
+
}
|
|
181
|
+
for repo in self.repositories
|
|
182
|
+
],
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
yaml.safe_dump(data, f, default_flow_style=False, sort_keys=False)
|
|
186
|
+
|
|
187
|
+
logger.info(f"Configuration saved to {config_path}")
|
|
188
|
+
|
|
189
|
+
except Exception as e:
|
|
190
|
+
logger.error(f"Failed to save configuration to {config_path}: {e}")
|
|
191
|
+
raise
|
|
192
|
+
|
|
193
|
+
def get_system_repo(self) -> Optional[GitRepository]:
|
|
194
|
+
"""Get system repository if not disabled.
|
|
195
|
+
|
|
196
|
+
Returns:
|
|
197
|
+
GitRepository for system repo, or None if disabled
|
|
198
|
+
|
|
199
|
+
Example:
|
|
200
|
+
>>> config = AgentSourceConfiguration()
|
|
201
|
+
>>> system_repo = config.get_system_repo()
|
|
202
|
+
>>> print(system_repo.url)
|
|
203
|
+
'https://github.com/bobmatnyc/claude-mpm-agents'
|
|
204
|
+
"""
|
|
205
|
+
if self.disable_system_repo:
|
|
206
|
+
return None
|
|
207
|
+
|
|
208
|
+
return GitRepository(
|
|
209
|
+
url="https://github.com/bobmatnyc/claude-mpm-agents",
|
|
210
|
+
subdirectory="agents",
|
|
211
|
+
enabled=True,
|
|
212
|
+
priority=100,
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
def get_enabled_repositories(self) -> list[GitRepository]:
|
|
216
|
+
"""Get all enabled repositories sorted by priority.
|
|
217
|
+
|
|
218
|
+
Returns repositories in priority order (lower priority number = higher precedence).
|
|
219
|
+
Includes system repository if not disabled.
|
|
220
|
+
|
|
221
|
+
Returns:
|
|
222
|
+
List of enabled GitRepository instances, sorted by priority
|
|
223
|
+
|
|
224
|
+
Example:
|
|
225
|
+
>>> config = AgentSourceConfiguration()
|
|
226
|
+
>>> repos = config.get_enabled_repositories()
|
|
227
|
+
>>> for repo in repos:
|
|
228
|
+
... print(f"{repo.identifier} (priority: {repo.priority})")
|
|
229
|
+
"""
|
|
230
|
+
repos = []
|
|
231
|
+
|
|
232
|
+
# Add system repo if not disabled
|
|
233
|
+
system_repo = self.get_system_repo()
|
|
234
|
+
if system_repo:
|
|
235
|
+
repos.append(system_repo)
|
|
236
|
+
|
|
237
|
+
# Add enabled custom repositories
|
|
238
|
+
repos.extend([r for r in self.repositories if r.enabled])
|
|
239
|
+
|
|
240
|
+
# Sort by priority (lower number = higher precedence)
|
|
241
|
+
return sorted(repos, key=lambda r: r.priority)
|
|
242
|
+
|
|
243
|
+
def add_repository(self, repo: GitRepository) -> None:
|
|
244
|
+
"""Add a new repository.
|
|
245
|
+
|
|
246
|
+
Args:
|
|
247
|
+
repo: GitRepository to add
|
|
248
|
+
|
|
249
|
+
Example:
|
|
250
|
+
>>> config = AgentSourceConfiguration()
|
|
251
|
+
>>> repo = GitRepository(url="https://github.com/owner/repo")
|
|
252
|
+
>>> config.add_repository(repo)
|
|
253
|
+
"""
|
|
254
|
+
self.repositories.append(repo)
|
|
255
|
+
logger.info(f"Added repository: {repo.identifier}")
|
|
256
|
+
|
|
257
|
+
def remove_repository(self, identifier: str) -> bool:
|
|
258
|
+
"""Remove repository by identifier.
|
|
259
|
+
|
|
260
|
+
Args:
|
|
261
|
+
identifier: Repository identifier (e.g., "owner/repo" or "owner/repo/subdirectory")
|
|
262
|
+
|
|
263
|
+
Returns:
|
|
264
|
+
True if repository was removed, False if not found
|
|
265
|
+
|
|
266
|
+
Example:
|
|
267
|
+
>>> config = AgentSourceConfiguration()
|
|
268
|
+
>>> repo = GitRepository(url="https://github.com/owner/repo")
|
|
269
|
+
>>> config.add_repository(repo)
|
|
270
|
+
>>> removed = config.remove_repository("owner/repo")
|
|
271
|
+
>>> print(removed)
|
|
272
|
+
True
|
|
273
|
+
"""
|
|
274
|
+
for i, repo in enumerate(self.repositories):
|
|
275
|
+
if repo.identifier == identifier:
|
|
276
|
+
removed_repo = self.repositories.pop(i)
|
|
277
|
+
logger.info(f"Removed repository: {removed_repo.identifier}")
|
|
278
|
+
return True
|
|
279
|
+
|
|
280
|
+
logger.warning(f"Repository not found: {identifier}")
|
|
281
|
+
return False
|
|
282
|
+
|
|
283
|
+
def validate(self) -> list[str]:
|
|
284
|
+
"""Validate configuration.
|
|
285
|
+
|
|
286
|
+
Checks:
|
|
287
|
+
- All repositories pass validation
|
|
288
|
+
- No duplicate repository identifiers
|
|
289
|
+
- Priority values are reasonable
|
|
290
|
+
|
|
291
|
+
Returns:
|
|
292
|
+
List of validation error messages (empty if valid)
|
|
293
|
+
|
|
294
|
+
Example:
|
|
295
|
+
>>> config = AgentSourceConfiguration()
|
|
296
|
+
>>> errors = config.validate()
|
|
297
|
+
>>> if errors:
|
|
298
|
+
... print("Validation errors:", errors)
|
|
299
|
+
"""
|
|
300
|
+
errors = []
|
|
301
|
+
|
|
302
|
+
# Validate each repository
|
|
303
|
+
for repo in self.repositories:
|
|
304
|
+
repo_errors = repo.validate()
|
|
305
|
+
if repo_errors:
|
|
306
|
+
errors.append(f"Repository {repo.identifier}: {', '.join(repo_errors)}")
|
|
307
|
+
|
|
308
|
+
# Check for duplicate identifiers
|
|
309
|
+
identifiers = [repo.identifier for repo in self.repositories]
|
|
310
|
+
duplicates = {id for id in identifiers if identifiers.count(id) > 1}
|
|
311
|
+
|
|
312
|
+
if duplicates:
|
|
313
|
+
errors.append(
|
|
314
|
+
f"Duplicate repository identifiers found: {', '.join(duplicates)}"
|
|
315
|
+
)
|
|
316
|
+
|
|
317
|
+
return errors
|
|
318
|
+
|
|
319
|
+
def __repr__(self) -> str:
|
|
320
|
+
"""Return string representation of configuration."""
|
|
321
|
+
return (
|
|
322
|
+
f"AgentSourceConfiguration("
|
|
323
|
+
f"system_repo={'disabled' if self.disable_system_repo else 'enabled'}, "
|
|
324
|
+
f"custom_repos={len(self.repositories)})"
|
|
325
|
+
)
|