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.
Files changed (497) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +632 -334
  5. claude_mpm/agents/WORKFLOW.md +75 -2
  6. claude_mpm/agents/__init__.py +6 -0
  7. claude_mpm/agents/agent_loader.py +1 -4
  8. claude_mpm/agents/base_agent.json +6 -3
  9. claude_mpm/agents/frontmatter_validator.py +1 -1
  10. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +370 -3
  11. claude_mpm/agents/templates/context-management-examples.md +544 -0
  12. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
  13. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  14. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  15. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  16. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  17. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  18. claude_mpm/cli/__init__.py +38 -2
  19. claude_mpm/cli/commands/agent_source.py +774 -0
  20. claude_mpm/cli/commands/agent_state_manager.py +125 -20
  21. claude_mpm/cli/commands/agents.py +684 -13
  22. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  23. claude_mpm/cli/commands/agents_discover.py +338 -0
  24. claude_mpm/cli/commands/aggregate.py +1 -1
  25. claude_mpm/cli/commands/analyze.py +3 -3
  26. claude_mpm/cli/commands/auto_configure.py +2 -6
  27. claude_mpm/cli/commands/cleanup.py +1 -1
  28. claude_mpm/cli/commands/config.py +7 -4
  29. claude_mpm/cli/commands/configure.py +478 -44
  30. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  31. claude_mpm/cli/commands/configure_navigation.py +63 -46
  32. claude_mpm/cli/commands/debug.py +12 -12
  33. claude_mpm/cli/commands/doctor.py +10 -2
  34. claude_mpm/cli/commands/hook_errors.py +277 -0
  35. claude_mpm/cli/commands/local_deploy.py +1 -4
  36. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  37. claude_mpm/cli/commands/mpm_init/core.py +50 -2
  38. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  39. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  40. claude_mpm/cli/commands/run.py +124 -128
  41. claude_mpm/cli/commands/skill_source.py +694 -0
  42. claude_mpm/cli/commands/skills.py +435 -1
  43. claude_mpm/cli/executor.py +78 -3
  44. claude_mpm/cli/interactive/agent_wizard.py +919 -41
  45. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  46. claude_mpm/cli/parsers/agents_parser.py +173 -4
  47. claude_mpm/cli/parsers/base_parser.py +49 -0
  48. claude_mpm/cli/parsers/config_parser.py +96 -43
  49. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  50. claude_mpm/cli/parsers/skills_parser.py +138 -0
  51. claude_mpm/cli/parsers/source_parser.py +138 -0
  52. claude_mpm/cli/startup.py +499 -84
  53. claude_mpm/cli/startup_display.py +480 -0
  54. claude_mpm/cli/utils.py +1 -1
  55. claude_mpm/cli_module/commands.py +1 -1
  56. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  57. claude_mpm/commands/mpm-agents-detect.md +9 -0
  58. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  59. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  60. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  61. claude_mpm/commands/mpm-doctor.md +9 -0
  62. claude_mpm/commands/mpm-help.md +14 -2
  63. claude_mpm/commands/mpm-init.md +27 -2
  64. claude_mpm/commands/mpm-monitor.md +9 -0
  65. claude_mpm/commands/mpm-session-resume.md +381 -0
  66. claude_mpm/commands/mpm-status.md +9 -0
  67. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  68. claude_mpm/commands/mpm-ticket-view.md +552 -0
  69. claude_mpm/commands/mpm-version.md +9 -0
  70. claude_mpm/commands/mpm.md +11 -0
  71. claude_mpm/config/agent_presets.py +258 -0
  72. claude_mpm/config/agent_sources.py +325 -0
  73. claude_mpm/config/skill_sources.py +590 -0
  74. claude_mpm/constants.py +12 -0
  75. claude_mpm/core/api_validator.py +1 -1
  76. claude_mpm/core/claude_runner.py +17 -10
  77. claude_mpm/core/config.py +24 -0
  78. claude_mpm/core/constants.py +1 -1
  79. claude_mpm/core/framework/__init__.py +3 -16
  80. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  81. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  82. claude_mpm/core/hook_error_memory.py +381 -0
  83. claude_mpm/core/hook_manager.py +41 -2
  84. claude_mpm/core/interactive_session.py +112 -5
  85. claude_mpm/core/logger.py +3 -1
  86. claude_mpm/core/oneshot_session.py +94 -4
  87. claude_mpm/dashboard/static/css/activity.css +69 -69
  88. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  89. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  90. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  91. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  92. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  93. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  94. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  95. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  96. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  97. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  98. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  99. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  100. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  101. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  102. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  103. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  104. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  105. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  106. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  107. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  108. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  109. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  110. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  111. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  112. claude_mpm/dashboard/templates/code_simple.html +23 -23
  113. claude_mpm/dashboard/templates/index.html +18 -18
  114. claude_mpm/experimental/cli_enhancements.py +1 -5
  115. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  116. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  117. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  118. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  119. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  120. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  121. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  122. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  123. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  124. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  125. claude_mpm/models/git_repository.py +198 -0
  126. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  127. claude_mpm/scripts/start_activity_logging.py +3 -1
  128. claude_mpm/services/agents/agent_builder.py +45 -9
  129. claude_mpm/services/agents/agent_preset_service.py +238 -0
  130. claude_mpm/services/agents/agent_selection_service.py +484 -0
  131. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  132. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  133. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  134. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  135. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  136. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  137. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  138. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  139. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  140. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  141. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  142. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  143. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  144. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  145. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  146. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  147. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  148. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  149. claude_mpm/services/agents/git_source_manager.py +629 -0
  150. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  151. claude_mpm/services/agents/local_template_manager.py +50 -10
  152. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  153. claude_mpm/services/agents/sources/__init__.py +13 -0
  154. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  155. claude_mpm/services/agents/sources/git_source_sync_service.py +1055 -0
  156. claude_mpm/services/agents/startup_sync.py +239 -0
  157. claude_mpm/services/agents/toolchain_detector.py +474 -0
  158. claude_mpm/services/cli/session_pause_manager.py +1 -1
  159. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  160. claude_mpm/services/command_deployment_service.py +92 -1
  161. claude_mpm/services/core/base.py +26 -11
  162. claude_mpm/services/core/interfaces/__init__.py +1 -3
  163. claude_mpm/services/core/interfaces/health.py +1 -4
  164. claude_mpm/services/core/models/__init__.py +2 -11
  165. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  166. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  167. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  168. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  169. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  170. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  171. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  172. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  173. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  174. claude_mpm/services/event_bus/direct_relay.py +3 -3
  175. claude_mpm/services/event_bus/event_bus.py +36 -3
  176. claude_mpm/services/event_bus/relay.py +23 -7
  177. claude_mpm/services/events/consumers/logging.py +1 -2
  178. claude_mpm/services/git/__init__.py +21 -0
  179. claude_mpm/services/git/git_operations_service.py +494 -0
  180. claude_mpm/services/github/__init__.py +21 -0
  181. claude_mpm/services/github/github_cli_service.py +397 -0
  182. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  183. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  184. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  185. claude_mpm/services/instructions/__init__.py +9 -0
  186. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  187. claude_mpm/services/local_ops/__init__.py +3 -13
  188. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  189. claude_mpm/services/local_ops/health_manager.py +1 -4
  190. claude_mpm/services/local_ops/process_manager.py +1 -1
  191. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  192. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  193. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  194. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  195. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  196. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  197. claude_mpm/services/memory/failure_tracker.py +19 -4
  198. claude_mpm/services/memory/optimizer.py +1 -1
  199. claude_mpm/services/model/model_router.py +8 -9
  200. claude_mpm/services/monitor/daemon.py +1 -1
  201. claude_mpm/services/monitor/server.py +2 -2
  202. claude_mpm/services/native_agent_converter.py +356 -0
  203. claude_mpm/services/port_manager.py +1 -1
  204. claude_mpm/services/pr/__init__.py +14 -0
  205. claude_mpm/services/pr/pr_template_service.py +329 -0
  206. claude_mpm/services/project/documentation_manager.py +2 -1
  207. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  208. claude_mpm/services/runner_configuration_service.py +1 -0
  209. claude_mpm/services/self_upgrade_service.py +165 -7
  210. claude_mpm/services/skills/__init__.py +18 -0
  211. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  212. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  213. claude_mpm/services/skills_config.py +547 -0
  214. claude_mpm/services/skills_deployer.py +955 -0
  215. claude_mpm/services/socketio/handlers/connection.py +1 -1
  216. claude_mpm/services/socketio/handlers/git.py +2 -2
  217. claude_mpm/services/socketio/server/core.py +1 -4
  218. claude_mpm/services/socketio/server/main.py +1 -3
  219. claude_mpm/services/system_instructions_service.py +1 -3
  220. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  221. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  222. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  223. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  224. claude_mpm/services/unified/unified_deployment.py +1 -5
  225. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  226. claude_mpm/services/visualization/__init__.py +1 -5
  227. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  228. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  229. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  230. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  231. claude_mpm/skills/skills_registry.py +0 -1
  232. claude_mpm/templates/questions/__init__.py +38 -0
  233. claude_mpm/templates/questions/base.py +193 -0
  234. claude_mpm/templates/questions/pr_strategy.py +311 -0
  235. claude_mpm/templates/questions/project_init.py +385 -0
  236. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  237. claude_mpm/tools/__main__.py +8 -8
  238. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  239. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  240. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  241. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  242. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  243. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  244. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  245. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  246. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  247. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  248. claude_mpm/utils/agent_dependency_loader.py +80 -13
  249. claude_mpm/utils/dependency_cache.py +3 -1
  250. claude_mpm/utils/gitignore.py +241 -0
  251. claude_mpm/utils/log_cleanup.py +3 -3
  252. claude_mpm/utils/progress.py +383 -0
  253. claude_mpm/utils/robust_installer.py +3 -5
  254. claude_mpm/utils/structured_questions.py +619 -0
  255. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/METADATA +429 -59
  256. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/RECORD +264 -427
  257. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  258. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  259. claude_mpm/agents/templates/agent-manager.json +0 -273
  260. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  261. claude_mpm/agents/templates/api_qa.json +0 -180
  262. claude_mpm/agents/templates/clerk-ops.json +0 -235
  263. claude_mpm/agents/templates/code_analyzer.json +0 -101
  264. claude_mpm/agents/templates/content-agent.json +0 -358
  265. claude_mpm/agents/templates/dart_engineer.json +0 -307
  266. claude_mpm/agents/templates/data_engineer.json +0 -225
  267. claude_mpm/agents/templates/documentation.json +0 -211
  268. claude_mpm/agents/templates/engineer.json +0 -210
  269. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  270. claude_mpm/agents/templates/golang_engineer.json +0 -270
  271. claude_mpm/agents/templates/imagemagick.json +0 -264
  272. claude_mpm/agents/templates/java_engineer.json +0 -346
  273. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  274. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  275. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  276. claude_mpm/agents/templates/memory_manager.json +0 -158
  277. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  278. claude_mpm/agents/templates/ops.json +0 -185
  279. claude_mpm/agents/templates/php-engineer.json +0 -287
  280. claude_mpm/agents/templates/product_owner.json +0 -338
  281. claude_mpm/agents/templates/project_organizer.json +0 -140
  282. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  283. claude_mpm/agents/templates/python_engineer.json +0 -387
  284. claude_mpm/agents/templates/qa.json +0 -242
  285. claude_mpm/agents/templates/react_engineer.json +0 -238
  286. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  287. claude_mpm/agents/templates/research.json +0 -188
  288. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  289. claude_mpm/agents/templates/rust_engineer.json +0 -275
  290. claude_mpm/agents/templates/security.json +0 -202
  291. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  292. claude_mpm/agents/templates/ticketing.json +0 -177
  293. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  294. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  295. claude_mpm/agents/templates/version_control.json +0 -157
  296. claude_mpm/agents/templates/web_qa.json +0 -399
  297. claude_mpm/agents/templates/web_ui.json +0 -189
  298. claude_mpm/commands/mpm-tickets.md +0 -102
  299. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  300. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  301. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  302. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  303. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  304. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  305. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  306. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  307. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  308. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  309. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  310. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  311. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  312. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  313. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  314. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  315. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  316. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  317. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  318. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  319. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  320. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  321. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  322. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  323. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  324. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  325. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  326. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  327. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  328. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  329. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  330. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  331. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  332. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  333. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  334. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  335. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  336. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  337. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  338. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  339. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  340. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  341. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  342. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  343. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  344. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  345. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  346. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  347. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  348. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  349. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  350. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  351. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  352. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  353. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  354. claude_mpm/dashboard/static/built/react/events.js +0 -30
  355. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  356. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  357. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  358. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  359. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  360. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  361. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  362. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  363. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  364. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  365. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  366. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  367. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  368. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  369. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  370. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  371. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  372. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  373. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  374. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  375. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  376. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  377. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  378. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  379. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  380. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  381. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  382. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  383. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  384. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  385. claude_mpm/dashboard/static/events.html +0 -607
  386. claude_mpm/dashboard/static/index.html +0 -635
  387. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  388. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  389. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  390. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  391. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  392. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  393. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  394. claude_mpm/dashboard/static/legacy/files.html +0 -747
  395. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  396. claude_mpm/dashboard/static/monitors.html +0 -431
  397. claude_mpm/dashboard/static/production/events.html +0 -659
  398. claude_mpm/dashboard/static/production/main.html +0 -698
  399. claude_mpm/dashboard/static/production/monitors.html +0 -483
  400. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  401. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  402. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  403. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  404. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  405. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  406. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  407. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  408. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  409. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  410. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  411. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  412. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  413. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  414. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  415. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  416. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  417. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  418. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  419. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  420. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  421. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  422. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  423. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  424. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  425. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  426. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  427. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  428. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  429. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  430. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  431. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  432. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  433. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  434. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  435. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  436. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  437. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  438. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  439. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  440. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  441. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  442. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  443. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  444. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  445. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  446. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  447. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  448. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  449. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  450. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  451. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  452. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  453. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  454. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  455. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  456. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  457. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  458. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  459. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  460. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  461. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  462. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  463. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  464. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  465. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  466. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  467. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  468. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  469. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  470. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  471. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  472. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  473. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  474. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  475. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  476. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  477. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  478. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  479. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  480. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  481. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  482. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  483. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  484. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  485. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  486. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  487. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  488. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  489. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  490. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  491. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  492. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  493. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  494. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/WHEEL +0 -0
  495. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/entry_points.txt +0 -0
  496. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/licenses/LICENSE +0 -0
  497. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/top_level.txt +0 -0
@@ -21,11 +21,9 @@ from ...services.cli.agent_dependency_service import AgentDependencyService
21
21
  from ...services.cli.agent_listing_service import AgentListingService
22
22
  from ...services.cli.agent_output_formatter import AgentOutputFormatter
23
23
  from ...services.cli.agent_validation_service import AgentValidationService
24
- from ..shared import (
25
- AgentCommand,
26
- CommandResult,
27
- )
24
+ from ..shared import AgentCommand, CommandResult
28
25
  from ..utils import get_agent_versions_display
26
+ from .agents_cleanup import handle_agents_cleanup
29
27
 
30
28
 
31
29
  def _is_structured_output(args) -> bool:
@@ -149,6 +147,7 @@ class AgentsCommand(AgentCommand):
149
147
  "deps-install": self._install_agent_dependencies,
150
148
  "deps-list": self._list_agent_dependencies,
151
149
  "deps-fix": self._fix_agent_dependencies,
150
+ "cleanup": lambda a: self._handle_cleanup_command(a),
152
151
  "cleanup-orphaned": self._cleanup_orphaned_agents,
153
152
  # Local agent management commands
154
153
  "create": self._create_local_agent,
@@ -156,9 +155,18 @@ class AgentsCommand(AgentCommand):
156
155
  "delete": self._delete_local_agent,
157
156
  "manage": self._manage_local_agents,
158
157
  "configure": self._configure_deployment,
158
+ # Migration command (DEPRECATION support)
159
+ "migrate-to-project": self._migrate_to_project,
159
160
  # Auto-configuration commands (TSK-0054 Phase 5)
160
161
  "detect": self._detect_toolchain,
161
162
  "recommend": self._recommend_agents,
163
+ # Agent selection modes (Phase 3: 1M-382)
164
+ "deploy-minimal": self._deploy_minimal_configuration,
165
+ "deploy-auto": self._deploy_auto_configure,
166
+ # Agent source management (Phase 2: 1M-442)
167
+ "available": self._list_available_from_sources,
168
+ # Agent discovery with rich filtering (Phase 1: Discovery & Browsing)
169
+ "discover": self._discover_agents,
162
170
  }
163
171
 
164
172
  if args.agents_command in command_map:
@@ -396,9 +404,159 @@ class AgentsCommand(AgentCommand):
396
404
  self.logger.error(f"Error listing agents by tier: {e}", exc_info=True)
397
405
  return CommandResult.error_result(f"Error listing agents by tier: {e}")
398
406
 
407
+ def _list_available_from_sources(self, args) -> CommandResult:
408
+ """List available agents from all configured git sources.
409
+
410
+ This command shows agents discovered from configured agent sources
411
+ (Git repositories) after syncing their cache. Implements Phase 2 of 1M-442.
412
+
413
+ Args:
414
+ args: Command arguments with optional source filter and format
415
+
416
+ Returns:
417
+ CommandResult with agent list or error
418
+ """
419
+ try:
420
+ from ...config.agent_sources import AgentSourceConfiguration
421
+ from ...services.agents.git_source_manager import GitSourceManager
422
+
423
+ # Load agent sources configuration
424
+ config = AgentSourceConfiguration.load()
425
+ enabled_repos = [r for r in config.repositories if r.enabled]
426
+
427
+ if not enabled_repos:
428
+ message = (
429
+ "No agent sources configured.\n\n"
430
+ "Configure sources with:\n"
431
+ " claude-mpm agent-source add <url>\n\n"
432
+ "Example:\n"
433
+ " claude-mpm agent-source add https://github.com/owner/repo/agents"
434
+ )
435
+ print(message)
436
+ return CommandResult.error_result("No agent sources configured")
437
+
438
+ # Initialize git source manager
439
+ manager = GitSourceManager()
440
+
441
+ # Sync all configured sources (with timeout)
442
+ self.logger.info(f"Syncing {len(enabled_repos)} agent sources...")
443
+ sync_results = {}
444
+
445
+ for repo in enabled_repos:
446
+ try:
447
+ result = manager.sync_repository(repo, force=False)
448
+ sync_results[repo.identifier] = result
449
+ except Exception as e:
450
+ self.logger.warning(f"Failed to sync {repo.identifier}: {e}")
451
+ sync_results[repo.identifier] = {"synced": False, "error": str(e)}
452
+
453
+ # Get source filter from args
454
+ source_filter = getattr(args, "source", None)
455
+
456
+ # List all cached agents
457
+ all_agents = manager.list_cached_agents(repo_identifier=source_filter)
458
+
459
+ if not all_agents:
460
+ message = "No agents found in configured sources."
461
+ if sync_results:
462
+ failed_count = sum(
463
+ 1 for r in sync_results.values() if not r.get("synced")
464
+ )
465
+ if failed_count > 0:
466
+ message += f"\n\n{failed_count} source(s) failed to sync. Check logs for details."
467
+ print(message)
468
+ return CommandResult.success_result(message, data={"agents": []})
469
+
470
+ # Format output
471
+ output_format = getattr(args, "format", "table")
472
+
473
+ if output_format == "json":
474
+ import json
475
+
476
+ print(json.dumps(all_agents, indent=2))
477
+ elif output_format == "simple":
478
+ for agent in all_agents:
479
+ name = agent.get("metadata", {}).get(
480
+ "name", agent.get("agent_id", "unknown")
481
+ )
482
+ repo = agent.get("repository", "unknown")
483
+ print(f"{name} (from {repo})")
484
+ else: # table format
485
+ print(f"\n{'Agent Name':<30} {'Repository':<40} {'Version':<15}")
486
+ print("=" * 85)
487
+ for agent in all_agents:
488
+ name = agent.get("metadata", {}).get(
489
+ "name", agent.get("agent_id", "unknown")
490
+ )
491
+ repo = agent.get("repository", "unknown")
492
+ version = agent.get("version", "unknown")[:12]
493
+ print(f"{name:<30} {repo:<40} {version:<15}")
494
+ print(
495
+ f"\nTotal: {len(all_agents)} agents from {len(sync_results)} sources"
496
+ )
497
+
498
+ return CommandResult.success_result(
499
+ f"Listed {len(all_agents)} agents from sources",
500
+ data={"agents": all_agents, "sync_results": sync_results},
501
+ )
502
+
503
+ except Exception as e:
504
+ self.logger.error(f"Error listing available agents: {e}", exc_info=True)
505
+ return CommandResult.error_result(f"Error listing available agents: {e}")
506
+
507
+ def _discover_agents(self, args) -> CommandResult:
508
+ """Discover agents with rich filtering capabilities.
509
+
510
+ This command extends the 'available' command by adding semantic filtering
511
+ based on AUTO-DEPLOY-INDEX.md categories. Users can filter by category,
512
+ language, framework, platform, and specialization.
513
+
514
+ Design Decision: Delegate to agents_discover.py module
515
+
516
+ Rationale: Keep CLI command logic separate from routing logic for better
517
+ testability and maintainability. The discover_command function handles
518
+ all the complex filtering and formatting logic.
519
+
520
+ Args:
521
+ args: Command arguments with filter options:
522
+ - source: Source repository filter
523
+ - category: Category filter (e.g., 'engineer/backend')
524
+ - language: Language filter (e.g., 'python')
525
+ - framework: Framework filter (e.g., 'react')
526
+ - platform: Platform filter (e.g., 'vercel')
527
+ - specialization: Specialization filter (e.g., 'data')
528
+ - format: Output format (table, json, simple)
529
+ - verbose: Show descriptions and metadata
530
+
531
+ Returns:
532
+ CommandResult with filtered agent list or error
533
+
534
+ Example:
535
+ >>> # Called via: claude-mpm agents discover --category engineer/backend
536
+ >>> _discover_agents(args)
537
+ CommandResult(success=True, message="Discovered 8 agents")
538
+ """
539
+ try:
540
+ from .agents_discover import discover_command
541
+
542
+ # Call discover_command and convert exit code to CommandResult
543
+ exit_code = discover_command(args)
544
+
545
+ if exit_code == 0:
546
+ return CommandResult.success_result("Agent discovery complete")
547
+ return CommandResult.error_result("Agent discovery failed")
548
+
549
+ except Exception as e:
550
+ self.logger.error(f"Error discovering agents: {e}", exc_info=True)
551
+ return CommandResult.error_result(f"Error discovering agents: {e}")
552
+
399
553
  def _deploy_agents(self, args, force=False) -> CommandResult:
400
- """Deploy both system and project agents."""
554
+ """Deploy both system and project agents, or deploy by preset."""
401
555
  try:
556
+ # Handle preset deployment
557
+ if hasattr(args, "preset") and args.preset:
558
+ return self._deploy_preset(args)
559
+
402
560
  # Deploy system agents
403
561
  system_result = self.deployment_service.deploy_system_agents(force=force)
404
562
 
@@ -444,6 +602,173 @@ class AgentsCommand(AgentCommand):
444
602
  self.logger.error(f"Error deploying agents: {e}", exc_info=True)
445
603
  return CommandResult.error_result(f"Error deploying agents: {e}")
446
604
 
605
+ def _deploy_preset(self, args) -> CommandResult:
606
+ """Deploy agents by preset name.
607
+
608
+ This method implements Phase 2 of the agents/skills CLI redesign,
609
+ enabling preset-based deployment like:
610
+ claude-mpm agents deploy --preset python-dev
611
+
612
+ Args:
613
+ args: Command arguments with preset name and optional flags
614
+
615
+ Returns:
616
+ CommandResult with deployment status
617
+ """
618
+ try:
619
+ from pathlib import Path
620
+
621
+ from ...config.agent_sources import AgentSourceConfiguration
622
+ from ...services.agents.agent_preset_service import AgentPresetService
623
+ from ...services.agents.git_source_manager import GitSourceManager
624
+ from ...services.agents.single_tier_deployment_service import (
625
+ SingleTierDeploymentService,
626
+ )
627
+
628
+ preset_name = args.preset
629
+ dry_run = getattr(args, "dry_run", False)
630
+
631
+ # Initialize services
632
+ config = AgentSourceConfiguration.load()
633
+ deployment_dir = Path.home() / ".claude" / "agents"
634
+ git_source_manager = GitSourceManager()
635
+ preset_service = AgentPresetService(git_source_manager)
636
+ deployment_service = SingleTierDeploymentService(config, deployment_dir)
637
+
638
+ # Validate preset
639
+ if not preset_service.validate_preset(preset_name):
640
+ available = preset_service.list_presets()
641
+ print(f"❌ Unknown preset: {preset_name}")
642
+ print("\n📚 Available presets:")
643
+ for preset in available:
644
+ print(
645
+ f" • {preset['name']}: {preset['description']} ({preset['agent_count']} agents)"
646
+ )
647
+ print(f" Use cases: {', '.join(preset['use_cases'])}")
648
+ return CommandResult.error_result(f"Unknown preset: {preset_name}")
649
+
650
+ # Resolve preset to agent list
651
+ print(f"\n🔍 Resolving preset: {preset_name}")
652
+ resolution = preset_service.resolve_agents(
653
+ preset_name, validate_availability=True
654
+ )
655
+
656
+ # Show preset info
657
+ preset_info = resolution["preset_info"]
658
+ print(f"\n🎯 Preset: {preset_info['description']}")
659
+ print(f" Agents: {preset_info['agent_count']}")
660
+ print(f" Use cases: {', '.join(preset_info['use_cases'])}")
661
+
662
+ # Show warnings for missing agents
663
+ if resolution["missing_agents"]:
664
+ print("\n⚠️ Missing agents (not found in configured sources):")
665
+ for agent_id in resolution["missing_agents"]:
666
+ print(f" • {agent_id}")
667
+ print("\n💡 These agents are not available in your configured sources.")
668
+ print(" Deployment will continue with available agents.")
669
+
670
+ # Show conflicts
671
+ if resolution["conflicts"]:
672
+ print("\n⚠️ Priority conflicts detected:")
673
+ for conflict in resolution["conflicts"]:
674
+ sources = ", ".join(conflict["sources"])
675
+ print(f" • {conflict['agent_id']} (found in: {sources})")
676
+ print(" Using highest priority source for each")
677
+
678
+ # Dry run mode
679
+ if dry_run:
680
+ print("\n🔍 DRY RUN: Preview agent deployment\n")
681
+ print("Agents to deploy:")
682
+ for agent in resolution["agents"]:
683
+ source = agent.get("source", "unknown")
684
+ print(f" ✓ {agent['agent_id']} (from {source})")
685
+ print(
686
+ "\n💡 This is a dry run. Run without --dry-run to actually deploy."
687
+ )
688
+ return CommandResult.success_result(
689
+ "Dry run complete",
690
+ data={
691
+ "preset": preset_name,
692
+ "agents": resolution["agents"],
693
+ "missing": resolution["missing_agents"],
694
+ },
695
+ )
696
+
697
+ # Deploy agents
698
+ print(f"\n📦 Deploying {len(resolution['agents'])} agents...")
699
+ deployed_count = 0
700
+ failed_count = 0
701
+ skipped_count = len(resolution["missing_agents"])
702
+ deployed_agents = []
703
+ failed_agents = []
704
+
705
+ for agent in resolution["agents"]:
706
+ agent_id = agent["agent_id"]
707
+ try:
708
+ # Deploy using single-tier deployment service
709
+ result = deployment_service.deploy_agent(
710
+ agent_id, source_repo=agent.get("source"), dry_run=False
711
+ )
712
+
713
+ if result.get("deployed"):
714
+ deployed_count += 1
715
+ deployed_agents.append(agent_id)
716
+ print(f" ✓ {agent_id}")
717
+ else:
718
+ failed_count += 1
719
+ failed_agents.append(
720
+ {
721
+ "agent_id": agent_id,
722
+ "error": result.get("error", "Unknown"),
723
+ }
724
+ )
725
+ print(f" ✗ {agent_id}: {result.get('error', 'Failed')}")
726
+
727
+ except Exception as e:
728
+ failed_count += 1
729
+ failed_agents.append({"agent_id": agent_id, "error": str(e)})
730
+ print(f" ✗ {agent_id}: {e}")
731
+
732
+ # Summary
733
+ print(f"\n{'=' * 60}")
734
+ print("📊 Deployment Summary")
735
+ print(f"{'=' * 60}")
736
+ print(f" ✅ Deployed: {deployed_count}")
737
+ print(f" ❌ Failed: {failed_count}")
738
+ print(f" ⏭️ Skipped: {skipped_count} (missing from sources)")
739
+ print(f"{'=' * 60}\n")
740
+
741
+ if failed_agents:
742
+ print("❌ Failed agents:")
743
+ for failure in failed_agents:
744
+ print(f" • {failure['agent_id']}: {failure['error']}")
745
+ print()
746
+
747
+ if deployed_count > 0:
748
+ print(f"✅ Successfully deployed {deployed_count} agents!")
749
+ return CommandResult.success_result(
750
+ f"Deployed {deployed_count} agents from preset '{preset_name}'",
751
+ data={
752
+ "preset": preset_name,
753
+ "deployed": deployed_agents,
754
+ "failed": failed_agents,
755
+ "skipped": resolution["missing_agents"],
756
+ },
757
+ )
758
+ return CommandResult.error_result(
759
+ f"No agents deployed from preset '{preset_name}'",
760
+ data={
761
+ "preset": preset_name,
762
+ "failed": failed_agents,
763
+ "skipped": resolution["missing_agents"],
764
+ },
765
+ )
766
+
767
+ except Exception as e:
768
+ self.logger.error(f"Error deploying preset: {e}", exc_info=True)
769
+ print(f"\n❌ Error deploying preset: {e}")
770
+ return CommandResult.error_result(f"Error deploying preset: {e}")
771
+
447
772
  def _clean_agents(self, args) -> CommandResult:
448
773
  """Clean deployed agents."""
449
774
  try:
@@ -904,6 +1229,16 @@ class AgentsCommand(AgentCommand):
904
1229
  self.logger.error(f"Error fixing dependencies: {e}", exc_info=True)
905
1230
  return CommandResult.error_result(f"Error fixing dependencies: {e}")
906
1231
 
1232
+ def _handle_cleanup_command(self, args) -> CommandResult:
1233
+ """Handle cleanup command with proper result wrapping."""
1234
+ exit_code = handle_agents_cleanup(args)
1235
+ return CommandResult(
1236
+ success=exit_code == 0,
1237
+ message=(
1238
+ "Agent cleanup complete" if exit_code == 0 else "Agent cleanup failed"
1239
+ ),
1240
+ )
1241
+
907
1242
  def _cleanup_orphaned_agents(self, args) -> CommandResult:
908
1243
  """Clean up orphaned agents that don't have templates."""
909
1244
  try:
@@ -1125,18 +1460,46 @@ class AgentsCommand(AgentCommand):
1125
1460
  return CommandResult.error_result(f"Error deleting local agents: {e}")
1126
1461
 
1127
1462
  def _manage_local_agents(self, args) -> CommandResult:
1128
- """Launch interactive management menu for local agents."""
1463
+ """Redirect to main configuration interface (DEPRECATED)."""
1129
1464
  try:
1130
- from ..interactive.agent_wizard import run_interactive_agent_manager
1465
+ from rich.console import Console
1466
+ from rich.prompt import Confirm
1131
1467
 
1132
- exit_code = run_interactive_agent_manager()
1133
- if exit_code == 0:
1134
- return CommandResult.success_result("Agent management completed")
1135
- return CommandResult.error_result("Agent management failed or cancelled")
1468
+ console = Console()
1469
+
1470
+ console.print(
1471
+ "\n[bold cyan]╭─────────────────────────────────────────╮[/bold cyan]"
1472
+ )
1473
+ console.print(
1474
+ "[bold cyan]│ Agent Management Has Moved! │[/bold cyan]"
1475
+ )
1476
+ console.print(
1477
+ "[bold cyan]╰─────────────────────────────────────────╯[/bold cyan]\n"
1478
+ )
1479
+
1480
+ console.print("For a better experience with integrated configuration:")
1481
+ console.print(" • Agent management")
1482
+ console.print(" • Skills management")
1483
+ console.print(" • Template editing")
1484
+ console.print(" • Behavior configuration")
1485
+ console.print(" • Startup settings\n")
1486
+
1487
+ console.print("Please use: [bold green]claude-mpm config[/bold green]\n")
1488
+
1489
+ if Confirm.ask("Launch configuration interface now?", default=True):
1490
+ # Import and run config command directly
1491
+ from claude_mpm.cli.commands.configure import ConfigureCommand
1492
+
1493
+ config_cmd = ConfigureCommand()
1494
+ return config_cmd.execute(args)
1495
+ console.print(
1496
+ "\n[dim]Run 'claude-mpm config' anytime to access agent management[/dim]"
1497
+ )
1498
+ return CommandResult.success_result("Redirected to config interface")
1136
1499
 
1137
1500
  except Exception as e:
1138
- self.logger.error(f"Error managing local agents: {e}", exc_info=True)
1139
- return CommandResult.error_result(f"Error managing local agents: {e}")
1501
+ self.logger.error(f"Error redirecting to config: {e}", exc_info=True)
1502
+ return CommandResult.error_result(f"Error redirecting to config: {e}")
1140
1503
 
1141
1504
  def _configure_deployment(self, args) -> CommandResult:
1142
1505
  """Configure agent deployment settings."""
@@ -1448,6 +1811,314 @@ class AgentsCommand(AgentCommand):
1448
1811
  self.logger.error(f"Error recommending agents: {e}", exc_info=True)
1449
1812
  return CommandResult.error_result(f"Error recommending agents: {e}")
1450
1813
 
1814
+ def _migrate_to_project(self, args) -> CommandResult:
1815
+ """Migrate user-level agents to project-level.
1816
+
1817
+ DEPRECATION: User-level agents (~/.claude-mpm/agents/) are deprecated and
1818
+ will be removed in v5.0.0. This command migrates them to project-level
1819
+ (.claude-mpm/agents/) where they belong.
1820
+
1821
+ Args:
1822
+ args: Command arguments with dry_run and force flags
1823
+
1824
+ Returns:
1825
+ CommandResult with migration status
1826
+ """
1827
+ import shutil
1828
+
1829
+ try:
1830
+ user_agents_dir = Path.home() / ".claude-mpm" / "agents"
1831
+ project_agents_dir = Path.cwd() / ".claude-mpm" / "agents"
1832
+
1833
+ dry_run = getattr(args, "dry_run", False)
1834
+ force = getattr(args, "force", False)
1835
+
1836
+ # Check if user agents directory exists
1837
+ if not user_agents_dir.exists():
1838
+ print("✅ No user-level agents found. Nothing to migrate.")
1839
+ return CommandResult.success_result("No user-level agents to migrate")
1840
+
1841
+ # Find all user agent files
1842
+ user_agent_files = list(user_agents_dir.glob("*.json")) + list(
1843
+ user_agents_dir.glob("*.md")
1844
+ )
1845
+
1846
+ if not user_agent_files:
1847
+ print("✅ No user-level agents found. Nothing to migrate.")
1848
+ return CommandResult.success_result("No user-level agents to migrate")
1849
+
1850
+ # Display what we found
1851
+ print(f"\n📦 Found {len(user_agent_files)} user-level agent(s) to migrate:")
1852
+ for agent_file in user_agent_files:
1853
+ print(f" - {agent_file.name}")
1854
+
1855
+ if dry_run:
1856
+ print("\n🔍 DRY RUN: Would migrate to:")
1857
+ print(f" → {project_agents_dir}")
1858
+ print("\nRun without --dry-run to perform the migration.")
1859
+ return CommandResult.success_result(
1860
+ "Dry run completed",
1861
+ data={
1862
+ "user_agents_found": len(user_agent_files),
1863
+ "target_directory": str(project_agents_dir),
1864
+ },
1865
+ )
1866
+
1867
+ # Create project agents directory
1868
+ project_agents_dir.mkdir(parents=True, exist_ok=True)
1869
+
1870
+ # Migrate agents
1871
+ migrated = 0
1872
+ skipped = 0
1873
+ errors = []
1874
+
1875
+ for agent_file in user_agent_files:
1876
+ target_file = project_agents_dir / agent_file.name
1877
+
1878
+ # Check for conflicts
1879
+ if target_file.exists() and not force:
1880
+ print(f"⚠️ Skipping {agent_file.name} (already exists in project)")
1881
+ print(" Use --force to overwrite existing agents")
1882
+ skipped += 1
1883
+ continue
1884
+
1885
+ try:
1886
+ # Copy agent to project directory
1887
+ shutil.copy2(agent_file, target_file)
1888
+ migrated += 1
1889
+ print(f"✅ Migrated {agent_file.name}")
1890
+ except Exception as e:
1891
+ error_msg = f"Failed to migrate {agent_file.name}: {e}"
1892
+ errors.append(error_msg)
1893
+ print(f"❌ {error_msg}")
1894
+
1895
+ # Summary
1896
+ print("\n📊 Migration Summary:")
1897
+ print(f" ✅ Migrated: {migrated}/{len(user_agent_files)}")
1898
+ if skipped > 0:
1899
+ print(f" ⏭️ Skipped: {skipped} (already exist)")
1900
+ if errors:
1901
+ print(f" ❌ Errors: {len(errors)}")
1902
+
1903
+ if migrated > 0:
1904
+ print(f"\n✅ Successfully migrated {migrated} agent(s) to:")
1905
+ print(f" {project_agents_dir}")
1906
+ print(
1907
+ "\n⚠️ IMPORTANT: Verify agents work correctly, then remove user-level agents:"
1908
+ )
1909
+ print(f" rm -rf {user_agents_dir}")
1910
+ print("\n💡 Why this change?")
1911
+ print(" - Project isolation: Each project has its own agents")
1912
+ print(" - Version control: Agents can be versioned with your code")
1913
+ print(" - Team consistency: Everyone uses the same agents")
1914
+
1915
+ return CommandResult.success_result(
1916
+ f"Migrated {migrated} agents",
1917
+ data={
1918
+ "migrated": migrated,
1919
+ "skipped": skipped,
1920
+ "errors": errors,
1921
+ "total": len(user_agent_files),
1922
+ },
1923
+ )
1924
+
1925
+ except Exception as e:
1926
+ self.logger.error(f"Error migrating agents: {e}", exc_info=True)
1927
+ return CommandResult.error_result(f"Error migrating agents: {e}")
1928
+
1929
+ def _deploy_minimal_configuration(self, args) -> CommandResult:
1930
+ """Deploy minimal configuration (6 core agents).
1931
+
1932
+ Part of Phase 3 (1M-382): Agent Selection Modes.
1933
+ Deploy exactly 6 agents for basic Claude MPM workflow:
1934
+ engineer, documentation, qa, research, ops, ticketing.
1935
+ """
1936
+ try:
1937
+ from ...config.agent_sources import AgentSourceConfiguration
1938
+ from ...services.agents.agent_selection_service import AgentSelectionService
1939
+ from ...services.agents.single_tier_deployment_service import (
1940
+ SingleTierDeploymentService,
1941
+ )
1942
+
1943
+ # Initialize services
1944
+ config = AgentSourceConfiguration.load()
1945
+ deployment_dir = Path.home() / ".claude" / "agents"
1946
+ deployment_service = SingleTierDeploymentService(config, deployment_dir)
1947
+ selection_service = AgentSelectionService(deployment_service)
1948
+
1949
+ # Get dry_run flag
1950
+ dry_run = getattr(args, "dry_run", False)
1951
+
1952
+ # Deploy minimal configuration
1953
+ print("🎯 Deploying minimal configuration (6 core agents)...")
1954
+ if dry_run:
1955
+ print("🔍 DRY RUN MODE - No agents will be deployed\n")
1956
+
1957
+ result = selection_service.deploy_minimal_configuration(dry_run=dry_run)
1958
+
1959
+ # Format output
1960
+ output_format = self._get_output_format(args)
1961
+ if self._is_structured_format(output_format):
1962
+ formatted = (
1963
+ self._formatter.format_as_json(result)
1964
+ if str(output_format).lower() == OutputFormat.JSON
1965
+ else self._formatter.format_as_yaml(result)
1966
+ )
1967
+ print(formatted)
1968
+ return CommandResult.success_result(
1969
+ f"Minimal configuration {result['status']}", data=result
1970
+ )
1971
+
1972
+ # Text output
1973
+ print(f"\n{'=' * 60}")
1974
+ print(f"Status: {result['status'].upper()}")
1975
+ print(f"Mode: {result['mode']}")
1976
+ print(f"{'=' * 60}")
1977
+ print(
1978
+ f"\n📊 Summary: {result['deployed_count']} deployed, "
1979
+ f"{result['failed_count']} failed, {result['missing_count']} missing"
1980
+ )
1981
+
1982
+ if result["deployed_agents"]:
1983
+ print(f"\n✅ Deployed agents ({len(result['deployed_agents'])}):")
1984
+ for agent in result["deployed_agents"]:
1985
+ print(f" • {agent}")
1986
+
1987
+ if result["failed_agents"]:
1988
+ print(f"\n❌ Failed agents ({len(result['failed_agents'])}):")
1989
+ for agent in result["failed_agents"]:
1990
+ print(f" • {agent}")
1991
+
1992
+ if result["missing_agents"]:
1993
+ print(f"\n⚠️ Missing agents ({len(result['missing_agents'])}):")
1994
+ for agent in result["missing_agents"]:
1995
+ print(f" • {agent}")
1996
+ print("\nThese agents are not available in configured sources.")
1997
+
1998
+ if dry_run:
1999
+ print(
2000
+ "\n💡 This was a dry run. Run without --dry-run to deploy agents."
2001
+ )
2002
+
2003
+ return CommandResult.success_result(
2004
+ f"Minimal configuration {result['status']}", data=result
2005
+ )
2006
+
2007
+ except Exception as e:
2008
+ self.logger.error(
2009
+ f"Error deploying minimal configuration: {e}", exc_info=True
2010
+ )
2011
+ return CommandResult.error_result(
2012
+ f"Error deploying minimal configuration: {e}"
2013
+ )
2014
+
2015
+ def _deploy_auto_configure(self, args) -> CommandResult:
2016
+ """Auto-detect toolchain and deploy matching agents.
2017
+
2018
+ Part of Phase 3 (1M-382): Agent Selection Modes.
2019
+ Detect project toolchain (languages, frameworks, build tools) and
2020
+ deploy matching specialized agents.
2021
+ """
2022
+ try:
2023
+ from ...config.agent_sources import AgentSourceConfiguration
2024
+ from ...services.agents.agent_selection_service import AgentSelectionService
2025
+ from ...services.agents.single_tier_deployment_service import (
2026
+ SingleTierDeploymentService,
2027
+ )
2028
+
2029
+ # Initialize services
2030
+ config = AgentSourceConfiguration.load()
2031
+ deployment_dir = Path.home() / ".claude" / "agents"
2032
+ deployment_service = SingleTierDeploymentService(config, deployment_dir)
2033
+ selection_service = AgentSelectionService(deployment_service)
2034
+
2035
+ # Get arguments
2036
+ project_path = getattr(args, "path", Path.cwd())
2037
+ dry_run = getattr(args, "dry_run", False)
2038
+
2039
+ # Deploy auto-configure
2040
+ print(f"🔍 Auto-detecting toolchain in {project_path}...")
2041
+ if dry_run:
2042
+ print("🔍 DRY RUN MODE - No agents will be deployed\n")
2043
+
2044
+ result = selection_service.deploy_auto_configure(
2045
+ project_path=project_path, dry_run=dry_run
2046
+ )
2047
+
2048
+ # Format output
2049
+ output_format = self._get_output_format(args)
2050
+ if self._is_structured_format(output_format):
2051
+ formatted = (
2052
+ self._formatter.format_as_json(result)
2053
+ if str(output_format).lower() == OutputFormat.JSON
2054
+ else self._formatter.format_as_yaml(result)
2055
+ )
2056
+ print(formatted)
2057
+ return CommandResult.success_result(
2058
+ f"Auto-configure {result['status']}", data=result
2059
+ )
2060
+
2061
+ # Text output
2062
+ print(f"\n{'=' * 60}")
2063
+ print(f"Status: {result['status'].upper()}")
2064
+ print(f"Mode: {result['mode']}")
2065
+ print(f"{'=' * 60}")
2066
+
2067
+ # Show detected toolchain
2068
+ toolchain = result.get("toolchain", {})
2069
+ print("\n🔧 Detected Toolchain:")
2070
+ if toolchain.get("languages"):
2071
+ print(f" Languages: {', '.join(toolchain['languages'])}")
2072
+ if toolchain.get("frameworks"):
2073
+ print(f" Frameworks: {', '.join(toolchain['frameworks'])}")
2074
+ if toolchain.get("build_tools"):
2075
+ print(f" Build Tools: {', '.join(toolchain['build_tools'])}")
2076
+
2077
+ if not any(toolchain.values()):
2078
+ print(" (No toolchain detected)")
2079
+
2080
+ # Show recommended agents
2081
+ recommended = result.get("recommended_agents", [])
2082
+ if recommended:
2083
+ print(f"\n🎯 Recommended agents ({len(recommended)}):")
2084
+ for agent in recommended:
2085
+ print(f" • {agent}")
2086
+
2087
+ # Show deployment summary
2088
+ print(
2089
+ f"\n📊 Summary: {result['deployed_count']} deployed, "
2090
+ f"{result['failed_count']} failed, {result['missing_count']} missing"
2091
+ )
2092
+
2093
+ if result.get("deployed_agents"):
2094
+ print(f"\n✅ Deployed agents ({len(result['deployed_agents'])}):")
2095
+ for agent in result["deployed_agents"]:
2096
+ print(f" • {agent}")
2097
+
2098
+ if result.get("failed_agents"):
2099
+ print(f"\n❌ Failed agents ({len(result['failed_agents'])}):")
2100
+ for agent in result["failed_agents"]:
2101
+ print(f" • {agent}")
2102
+
2103
+ if result.get("missing_agents"):
2104
+ print(f"\n⚠️ Missing agents ({len(result['missing_agents'])}):")
2105
+ for agent in result["missing_agents"]:
2106
+ print(f" • {agent}")
2107
+ print("\nThese agents are not available in configured sources.")
2108
+
2109
+ if dry_run:
2110
+ print(
2111
+ "\n💡 This was a dry run. Run without --dry-run to deploy agents."
2112
+ )
2113
+
2114
+ return CommandResult.success_result(
2115
+ f"Auto-configure {result['status']}", data=result
2116
+ )
2117
+
2118
+ except Exception as e:
2119
+ self.logger.error(f"Error in auto-configure: {e}", exc_info=True)
2120
+ return CommandResult.error_result(f"Error in auto-configure: {e}")
2121
+
1451
2122
 
1452
2123
  def manage_agents(args):
1453
2124
  """