claude-mpm 4.21.3__py3-none-any.whl → 5.1.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 → CLAUDE_MPM_OUTPUT_STYLE.md} +3 -48
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1239 -674
- 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/base_agent_loader.py +10 -35
- claude_mpm/agents/frontmatter_validator.py +69 -1
- claude_mpm/agents/templates/circuit-breakers.md +1254 -0
- 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 +37 -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 +1128 -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 +537 -239
- claude_mpm/cli/commands/cleanup.py +1 -1
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +935 -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 +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/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +125 -167
- 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 +1032 -47
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +310 -4
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
- 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 +564 -108
- 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/api_validator.py +1 -1
- claude_mpm/core/claude_runner.py +19 -35
- 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/file_loader.py +54 -101
- 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 +131 -10
- claude_mpm/core/logger.py +3 -1
- claude_mpm/core/oneshot_session.py +110 -8
- claude_mpm/core/output_style_manager.py +173 -43
- 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/core/unified_agent_registry.py +129 -1
- claude_mpm/core/unified_config.py +22 -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/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/claude_hooks/memory_integration.py +12 -1
- 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/agent_definition.py +7 -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/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 +225 -18
- 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 +557 -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/cli/unified_dashboard_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/event_bus/event_bus.py +36 -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/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_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/document_summarizer.py +1 -1
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
- claude_mpm/services/mcp_service_verifier.py +6 -3
- claude_mpm/services/memory/optimizer.py +1 -1
- claude_mpm/services/model/model_router.py +8 -9
- 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/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/project_organizer.py +4 -0
- claude_mpm/services/project/toolchain_analyzer.py +3 -1
- claude_mpm/services/runner_configuration_service.py +17 -3
- claude_mpm/services/self_upgrade_service.py +165 -7
- 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 +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/analysis.py +1 -1
- claude_mpm/utils/agent_dependency_loader.py +80 -13
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/dependency_cache.py +3 -1
- claude_mpm/utils/gitignore.py +244 -0
- claude_mpm/utils/log_cleanup.py +3 -3
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +3 -5
- claude_mpm/utils/structured_questions.py +619 -0
- {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/METADATA +496 -65
- {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/RECORD +284 -443
- 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/circuit_breakers.md +0 -638
- 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/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.3.dist-info → claude_mpm-5.1.9.dist-info}/WHEEL +0 -0
- {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/top_level.txt +0 -0
|
@@ -21,19 +21,29 @@ from claude_mpm.core.logging_config import get_logger
|
|
|
21
21
|
|
|
22
22
|
from .agent_discovery_service import AgentDiscoveryService
|
|
23
23
|
from .agent_version_manager import AgentVersionManager
|
|
24
|
+
from .remote_agent_discovery_service import RemoteAgentDiscoveryService
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
class MultiSourceAgentDeploymentService:
|
|
27
28
|
"""Service for deploying agents from multiple sources with version comparison.
|
|
28
29
|
|
|
29
30
|
This service ensures that the highest version of each agent is deployed,
|
|
30
|
-
regardless of whether it comes from system templates, project agents,
|
|
31
|
-
user agents.
|
|
31
|
+
regardless of whether it comes from system templates, project agents,
|
|
32
|
+
user agents, or remote agents.
|
|
33
|
+
|
|
34
|
+
4-Tier Agent Discovery:
|
|
35
|
+
1. System templates (lowest priority) - Built-in agents
|
|
36
|
+
2. User agents (DEPRECATED) - User-level customizations (~/.claude-mpm/agents/)
|
|
37
|
+
3. Remote agents - Agents cached from GitHub
|
|
38
|
+
4. Project agents (highest priority) - Project-specific customizations
|
|
32
39
|
|
|
33
40
|
WHY: The current system processes agents from a single source at a time,
|
|
34
41
|
which can result in lower version agents being deployed if they exist in
|
|
35
42
|
a higher priority source. This service fixes that by comparing versions
|
|
36
43
|
across all sources.
|
|
44
|
+
|
|
45
|
+
DEPRECATION: User-level agents (~/.claude-mpm/agents/) are deprecated and
|
|
46
|
+
will be removed in v5.0.0. Use project-level agents instead.
|
|
37
47
|
"""
|
|
38
48
|
|
|
39
49
|
def __init__(self):
|
|
@@ -41,23 +51,92 @@ class MultiSourceAgentDeploymentService:
|
|
|
41
51
|
self.logger = get_logger(__name__)
|
|
42
52
|
self.version_manager = AgentVersionManager()
|
|
43
53
|
|
|
54
|
+
def _build_canonical_id_for_agent(self, agent_info: Dict[str, Any]) -> str:
|
|
55
|
+
"""Build or retrieve canonical_id for an agent.
|
|
56
|
+
|
|
57
|
+
NEW: Supports enhanced agent matching via canonical_id.
|
|
58
|
+
|
|
59
|
+
Priority:
|
|
60
|
+
1. Use existing canonical_id from agent_info if present
|
|
61
|
+
2. Generate from collection_id + agent_id if available
|
|
62
|
+
3. Fallback to legacy:{filename} for backward compatibility
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
agent_info: Agent dictionary with metadata
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Canonical ID string for matching
|
|
69
|
+
|
|
70
|
+
Example:
|
|
71
|
+
Remote agent: "bobmatnyc/claude-mpm-agents:pm"
|
|
72
|
+
Legacy agent: "legacy:custom-agent"
|
|
73
|
+
"""
|
|
74
|
+
# Priority 1: Existing canonical_id
|
|
75
|
+
if "canonical_id" in agent_info:
|
|
76
|
+
return agent_info["canonical_id"]
|
|
77
|
+
|
|
78
|
+
# Priority 2: Generate from collection_id + agent_id
|
|
79
|
+
collection_id = agent_info.get("collection_id")
|
|
80
|
+
agent_id = agent_info.get("agent_id")
|
|
81
|
+
|
|
82
|
+
if collection_id and agent_id:
|
|
83
|
+
canonical_id = f"{collection_id}:{agent_id}"
|
|
84
|
+
# Cache it in agent_info for future use
|
|
85
|
+
agent_info["canonical_id"] = canonical_id
|
|
86
|
+
return canonical_id
|
|
87
|
+
|
|
88
|
+
# Priority 3: Fallback to legacy format
|
|
89
|
+
# Use filename or agent name
|
|
90
|
+
agent_name = agent_info.get("name") or agent_info.get("metadata", {}).get(
|
|
91
|
+
"name", "unknown"
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# Extract filename from path
|
|
95
|
+
path_str = (
|
|
96
|
+
agent_info.get("path")
|
|
97
|
+
or agent_info.get("file_path")
|
|
98
|
+
or agent_info.get("source_file")
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
if path_str:
|
|
102
|
+
filename = Path(path_str).stem
|
|
103
|
+
canonical_id = f"legacy:{filename}"
|
|
104
|
+
else:
|
|
105
|
+
canonical_id = f"legacy:{agent_name}"
|
|
106
|
+
|
|
107
|
+
# Cache it
|
|
108
|
+
agent_info["canonical_id"] = canonical_id
|
|
109
|
+
return canonical_id
|
|
110
|
+
|
|
44
111
|
def discover_agents_from_all_sources(
|
|
45
112
|
self,
|
|
46
113
|
system_templates_dir: Optional[Path] = None,
|
|
47
114
|
project_agents_dir: Optional[Path] = None,
|
|
48
115
|
user_agents_dir: Optional[Path] = None,
|
|
116
|
+
remote_agents_dir: Optional[Path] = None,
|
|
49
117
|
working_directory: Optional[Path] = None,
|
|
50
118
|
) -> Dict[str, List[Dict[str, Any]]]:
|
|
51
|
-
"""Discover agents from all
|
|
119
|
+
"""Discover agents from all 4 tiers (system, user, remote, project).
|
|
120
|
+
|
|
121
|
+
Priority hierarchy (highest to lowest):
|
|
122
|
+
4. Project agents - Highest priority, project-specific customizations
|
|
123
|
+
3. Remote agents - GitHub-synced agents from cache
|
|
124
|
+
2. User agents - DEPRECATED, user-level customizations
|
|
125
|
+
1. System templates - Lowest priority, built-in agents
|
|
52
126
|
|
|
53
127
|
Args:
|
|
54
128
|
system_templates_dir: Directory containing system agent templates
|
|
55
129
|
project_agents_dir: Directory containing project-specific agents
|
|
56
|
-
user_agents_dir: Directory containing user custom agents
|
|
130
|
+
user_agents_dir: Directory containing user custom agents (DEPRECATED)
|
|
131
|
+
remote_agents_dir: Directory containing cached remote agents
|
|
57
132
|
working_directory: Current working directory for finding project agents
|
|
58
133
|
|
|
59
134
|
Returns:
|
|
60
135
|
Dictionary mapping agent names to list of agent info from different sources
|
|
136
|
+
|
|
137
|
+
Deprecation Warning:
|
|
138
|
+
User-level agents are deprecated and will show a warning if found.
|
|
139
|
+
Use 'claude-mpm agents migrate-to-project' to migrate them.
|
|
61
140
|
"""
|
|
62
141
|
agents_by_name = {}
|
|
63
142
|
|
|
@@ -80,24 +159,53 @@ class MultiSourceAgentDeploymentService:
|
|
|
80
159
|
if not user_agents_dir.exists():
|
|
81
160
|
user_agents_dir = None
|
|
82
161
|
|
|
83
|
-
|
|
162
|
+
if not remote_agents_dir:
|
|
163
|
+
# Check for remote agents in cache directory
|
|
164
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache"
|
|
165
|
+
remote_agents_dir = cache_dir / "remote-agents"
|
|
166
|
+
if not remote_agents_dir.exists():
|
|
167
|
+
remote_agents_dir = None
|
|
168
|
+
|
|
169
|
+
# Discover agents from each source in priority order
|
|
170
|
+
# Note: We process in reverse priority order (system first) and build up the dictionary
|
|
171
|
+
# The select_highest_version_agents() method will handle the actual prioritization
|
|
84
172
|
sources = [
|
|
85
173
|
("system", system_templates_dir),
|
|
86
|
-
("project", project_agents_dir),
|
|
87
174
|
("user", user_agents_dir),
|
|
175
|
+
("remote", remote_agents_dir),
|
|
176
|
+
("project", project_agents_dir),
|
|
88
177
|
]
|
|
89
178
|
|
|
179
|
+
# Track if we found user agents for deprecation warning
|
|
180
|
+
user_agents_found = False
|
|
181
|
+
|
|
90
182
|
for source_name, source_dir in sources:
|
|
91
183
|
if source_dir and source_dir.exists():
|
|
92
184
|
self.logger.debug(
|
|
93
185
|
f"Discovering agents from {source_name} source: {source_dir}"
|
|
94
186
|
)
|
|
95
|
-
|
|
96
|
-
#
|
|
97
|
-
|
|
187
|
+
|
|
188
|
+
# Use appropriate discovery service based on source type
|
|
189
|
+
if source_name == "remote":
|
|
190
|
+
# Remote agents are Markdown, use RemoteAgentDiscoveryService
|
|
191
|
+
remote_service = RemoteAgentDiscoveryService(source_dir)
|
|
192
|
+
agents = remote_service.discover_remote_agents()
|
|
193
|
+
else:
|
|
194
|
+
# Other sources are JSON, use AgentDiscoveryService
|
|
195
|
+
discovery_service = AgentDiscoveryService(source_dir)
|
|
196
|
+
# Pass log_discovery=False to avoid duplicate logging
|
|
197
|
+
agents = discovery_service.list_available_agents(
|
|
198
|
+
log_discovery=False
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
# Track user agents for deprecation warning
|
|
202
|
+
if source_name == "user" and agents:
|
|
203
|
+
user_agents_found = True
|
|
98
204
|
|
|
99
205
|
for agent_info in agents:
|
|
100
|
-
agent_name = agent_info.get("name")
|
|
206
|
+
agent_name = agent_info.get("name") or agent_info.get(
|
|
207
|
+
"metadata", {}
|
|
208
|
+
).get("name")
|
|
101
209
|
if not agent_name:
|
|
102
210
|
continue
|
|
103
211
|
|
|
@@ -105,19 +213,89 @@ class MultiSourceAgentDeploymentService:
|
|
|
105
213
|
agent_info["source"] = source_name
|
|
106
214
|
agent_info["source_dir"] = str(source_dir)
|
|
107
215
|
|
|
216
|
+
# NEW: Build canonical_id for enhanced matching
|
|
217
|
+
canonical_id = self._build_canonical_id_for_agent(agent_info)
|
|
218
|
+
|
|
219
|
+
# Group by canonical_id (PRIMARY) for enhanced matching
|
|
220
|
+
# This allows matching agents from different sources with same canonical_id
|
|
221
|
+
# while maintaining backward compatibility with name-based matching
|
|
222
|
+
matching_key = canonical_id
|
|
223
|
+
|
|
108
224
|
# Initialize list if this is the first occurrence of this agent
|
|
109
|
-
if
|
|
110
|
-
agents_by_name[
|
|
225
|
+
if matching_key not in agents_by_name:
|
|
226
|
+
agents_by_name[matching_key] = []
|
|
111
227
|
|
|
112
|
-
agents_by_name[
|
|
228
|
+
agents_by_name[matching_key].append(agent_info)
|
|
113
229
|
|
|
114
230
|
# Use more specific log message
|
|
115
231
|
self.logger.info(
|
|
116
232
|
f"Discovered {len(agents)} {source_name} agent templates from {source_dir.name}"
|
|
117
233
|
)
|
|
118
234
|
|
|
235
|
+
# Show deprecation warning if user agents found
|
|
236
|
+
if user_agents_found:
|
|
237
|
+
self.logger.warning(
|
|
238
|
+
"\n"
|
|
239
|
+
"⚠️ DEPRECATION WARNING: User-level agents found in ~/.claude-mpm/agents/\n"
|
|
240
|
+
" User-level agent deployment is deprecated and will be removed in v5.0.0\n"
|
|
241
|
+
"\n"
|
|
242
|
+
" Why this change?\n"
|
|
243
|
+
" - Project isolation: Agents should be project-specific\n"
|
|
244
|
+
" - Version control: Project agents can be versioned with your code\n"
|
|
245
|
+
" - Team consistency: All team members use the same agents\n"
|
|
246
|
+
"\n"
|
|
247
|
+
" Migration:\n"
|
|
248
|
+
" 1. Run: claude-mpm agents migrate-to-project\n"
|
|
249
|
+
" 2. Verify agents work in .claude-mpm/agents/\n"
|
|
250
|
+
" 3. Remove: rm -rf ~/.claude-mpm/agents/\n"
|
|
251
|
+
"\n"
|
|
252
|
+
" Learn more: https://docs.claude-mpm.dev/agents/migration\n"
|
|
253
|
+
)
|
|
254
|
+
|
|
119
255
|
return agents_by_name
|
|
120
256
|
|
|
257
|
+
def get_agents_by_collection(
|
|
258
|
+
self,
|
|
259
|
+
collection_id: str,
|
|
260
|
+
remote_agents_dir: Optional[Path] = None,
|
|
261
|
+
) -> List[Dict[str, Any]]:
|
|
262
|
+
"""Get all agents from a specific collection.
|
|
263
|
+
|
|
264
|
+
NEW: Enables collection-based agent selection.
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
collection_id: Collection identifier (e.g., "bobmatnyc/claude-mpm-agents")
|
|
268
|
+
remote_agents_dir: Directory containing remote agents cache
|
|
269
|
+
|
|
270
|
+
Returns:
|
|
271
|
+
List of agent dictionaries from the specified collection
|
|
272
|
+
|
|
273
|
+
Example:
|
|
274
|
+
>>> service = MultiSourceAgentDeploymentService()
|
|
275
|
+
>>> agents = service.get_agents_by_collection("bobmatnyc/claude-mpm-agents")
|
|
276
|
+
>>> len(agents)
|
|
277
|
+
45
|
|
278
|
+
"""
|
|
279
|
+
if not remote_agents_dir:
|
|
280
|
+
cache_dir = Path.home() / ".claude-mpm" / "cache"
|
|
281
|
+
remote_agents_dir = cache_dir / "remote-agents"
|
|
282
|
+
|
|
283
|
+
if not remote_agents_dir.exists():
|
|
284
|
+
self.logger.warning(
|
|
285
|
+
f"Remote agents directory not found: {remote_agents_dir}"
|
|
286
|
+
)
|
|
287
|
+
return []
|
|
288
|
+
|
|
289
|
+
# Use RemoteAgentDiscoveryService to get collection agents
|
|
290
|
+
remote_service = RemoteAgentDiscoveryService(remote_agents_dir)
|
|
291
|
+
collection_agents = remote_service.get_agents_by_collection(collection_id)
|
|
292
|
+
|
|
293
|
+
self.logger.info(
|
|
294
|
+
f"Retrieved {len(collection_agents)} agents from collection '{collection_id}'"
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
return collection_agents
|
|
298
|
+
|
|
121
299
|
def select_highest_version_agents(
|
|
122
300
|
self, agents_by_name: Dict[str, List[Dict[str, Any]]]
|
|
123
301
|
) -> Dict[str, Dict[str, Any]]:
|
|
@@ -226,17 +404,19 @@ class MultiSourceAgentDeploymentService:
|
|
|
226
404
|
system_templates_dir: Optional[Path] = None,
|
|
227
405
|
project_agents_dir: Optional[Path] = None,
|
|
228
406
|
user_agents_dir: Optional[Path] = None,
|
|
407
|
+
remote_agents_dir: Optional[Path] = None,
|
|
229
408
|
working_directory: Optional[Path] = None,
|
|
230
409
|
excluded_agents: Optional[List[str]] = None,
|
|
231
410
|
config: Optional[Config] = None,
|
|
232
411
|
cleanup_outdated: bool = True,
|
|
233
412
|
) -> Tuple[Dict[str, Path], Dict[str, str], Dict[str, Any]]:
|
|
234
|
-
"""Get the highest version agents from all
|
|
413
|
+
"""Get the highest version agents from all 4 tiers for deployment.
|
|
235
414
|
|
|
236
415
|
Args:
|
|
237
416
|
system_templates_dir: Directory containing system agent templates
|
|
238
417
|
project_agents_dir: Directory containing project-specific agents
|
|
239
|
-
user_agents_dir: Directory containing user custom agents
|
|
418
|
+
user_agents_dir: Directory containing user custom agents (DEPRECATED)
|
|
419
|
+
remote_agents_dir: Directory containing cached remote agents
|
|
240
420
|
working_directory: Current working directory for finding project agents
|
|
241
421
|
excluded_agents: List of agent names to exclude from deployment
|
|
242
422
|
config: Configuration object for additional filtering
|
|
@@ -248,11 +428,12 @@ class MultiSourceAgentDeploymentService:
|
|
|
248
428
|
- Dictionary mapping agent names to their source
|
|
249
429
|
- Dictionary with cleanup results (removed, preserved, errors)
|
|
250
430
|
"""
|
|
251
|
-
# Discover all available agents
|
|
431
|
+
# Discover all available agents from 4 tiers
|
|
252
432
|
agents_by_name = self.discover_agents_from_all_sources(
|
|
253
433
|
system_templates_dir=system_templates_dir,
|
|
254
434
|
project_agents_dir=project_agents_dir,
|
|
255
435
|
user_agents_dir=user_agents_dir,
|
|
436
|
+
remote_agents_dir=remote_agents_dir,
|
|
256
437
|
working_directory=working_directory,
|
|
257
438
|
)
|
|
258
439
|
|
|
@@ -300,7 +481,21 @@ class MultiSourceAgentDeploymentService:
|
|
|
300
481
|
agent_sources = {}
|
|
301
482
|
|
|
302
483
|
for agent_name, agent_info in selected_agents.items():
|
|
303
|
-
|
|
484
|
+
# Defensive: Try multiple path fields for backward compatibility (ticket 1M-480)
|
|
485
|
+
# Priority: 'path' -> 'file_path' -> 'source_file'
|
|
486
|
+
path_str = (
|
|
487
|
+
agent_info.get("path")
|
|
488
|
+
or agent_info.get("file_path")
|
|
489
|
+
or agent_info.get("source_file")
|
|
490
|
+
)
|
|
491
|
+
|
|
492
|
+
if not path_str:
|
|
493
|
+
self.logger.warning(
|
|
494
|
+
f"Agent '{agent_name}' missing path information (no 'path', 'file_path', or 'source_file' field)"
|
|
495
|
+
)
|
|
496
|
+
continue
|
|
497
|
+
|
|
498
|
+
template_path = Path(path_str)
|
|
304
499
|
if template_path.exists():
|
|
305
500
|
# Use the file stem as the key for consistency
|
|
306
501
|
file_stem = template_path.stem
|
|
@@ -371,8 +566,20 @@ class MultiSourceAgentDeploymentService:
|
|
|
371
566
|
if agent_info["source"] != "user":
|
|
372
567
|
continue
|
|
373
568
|
|
|
569
|
+
# Defensive: Get path from agent_info (ticket 1M-480)
|
|
570
|
+
path_str = (
|
|
571
|
+
agent_info.get("path")
|
|
572
|
+
or agent_info.get("file_path")
|
|
573
|
+
or agent_info.get("source_file")
|
|
574
|
+
)
|
|
575
|
+
if not path_str:
|
|
576
|
+
self.logger.warning(
|
|
577
|
+
f"User agent '{agent_name}' missing path information, skipping cleanup"
|
|
578
|
+
)
|
|
579
|
+
continue
|
|
580
|
+
|
|
374
581
|
# Safety check - ensure path is within user agents directory
|
|
375
|
-
user_agent_path = Path(
|
|
582
|
+
user_agent_path = Path(path_str)
|
|
376
583
|
try:
|
|
377
584
|
# Resolve paths to compare them safely
|
|
378
585
|
resolved_user_path = user_agent_path.resolve()
|
|
@@ -51,11 +51,11 @@ class DeploymentPipelineExecutor:
|
|
|
51
51
|
try:
|
|
52
52
|
# Check if step should be executed
|
|
53
53
|
if not step.should_execute(context):
|
|
54
|
-
self.logger.info(f"Skipping step {i+1}/{len(steps)}: {step.name}")
|
|
54
|
+
self.logger.info(f"Skipping step {i + 1}/{len(steps)}: {step.name}")
|
|
55
55
|
skipped_steps.append(step.name)
|
|
56
56
|
continue
|
|
57
57
|
|
|
58
|
-
self.logger.info(f"Executing step {i+1}/{len(steps)}: {step.name}")
|
|
58
|
+
self.logger.info(f"Executing step {i + 1}/{len(steps)}: {step.name}")
|
|
59
59
|
|
|
60
60
|
# Execute the step
|
|
61
61
|
result = step.execute(context)
|
|
@@ -9,10 +9,7 @@ from claude_mpm.core.logger import get_logger
|
|
|
9
9
|
|
|
10
10
|
from .config import DeploymentConfigManager
|
|
11
11
|
from .facade import DeploymentFacade
|
|
12
|
-
from .pipeline import
|
|
13
|
-
DeploymentPipelineBuilder,
|
|
14
|
-
DeploymentPipelineExecutor,
|
|
15
|
-
)
|
|
12
|
+
from .pipeline import DeploymentPipelineBuilder, DeploymentPipelineExecutor
|
|
16
13
|
from .results import DeploymentResultBuilder
|
|
17
14
|
|
|
18
15
|
# Import refactored components
|