claude-mpm 4.24.0__py3-none-any.whl → 5.4.41__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.

Files changed (623) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +4 -0
  3. claude_mpm/agents/BASE_AGENT.md +164 -0
  4. claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +3 -48
  5. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
  6. claude_mpm/agents/MEMORY.md +1 -1
  7. claude_mpm/agents/PM_INSTRUCTIONS.md +735 -925
  8. claude_mpm/agents/WORKFLOW.md +5 -254
  9. claude_mpm/agents/__init__.py +6 -0
  10. claude_mpm/agents/agent_loader.py +14 -48
  11. claude_mpm/agents/base_agent.json +7 -4
  12. claude_mpm/agents/frontmatter_validator.py +71 -3
  13. claude_mpm/agents/templates/circuit-breakers.md +1391 -0
  14. claude_mpm/agents/templates/context-management-examples.md +544 -0
  15. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +48 -0
  16. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  17. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  18. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  19. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  20. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  21. claude_mpm/cli/__init__.py +37 -2
  22. claude_mpm/cli/__main__.py +4 -0
  23. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  24. claude_mpm/cli/commands/__init__.py +2 -0
  25. claude_mpm/cli/commands/agent_source.py +774 -0
  26. claude_mpm/cli/commands/agent_state_manager.py +180 -31
  27. claude_mpm/cli/commands/agents.py +1116 -55
  28. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  29. claude_mpm/cli/commands/agents_discover.py +338 -0
  30. claude_mpm/cli/commands/aggregate.py +1 -1
  31. claude_mpm/cli/commands/analyze.py +3 -3
  32. claude_mpm/cli/commands/auto_configure.py +725 -242
  33. claude_mpm/cli/commands/config.py +95 -6
  34. claude_mpm/cli/commands/configure.py +1875 -46
  35. claude_mpm/cli/commands/configure_agent_display.py +29 -10
  36. claude_mpm/cli/commands/configure_navigation.py +63 -46
  37. claude_mpm/cli/commands/debug.py +12 -12
  38. claude_mpm/cli/commands/doctor.py +10 -2
  39. claude_mpm/cli/commands/hook_errors.py +277 -0
  40. claude_mpm/cli/commands/local_deploy.py +1 -4
  41. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  42. claude_mpm/cli/commands/mpm_init/core.py +229 -2
  43. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  44. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  45. claude_mpm/cli/commands/mpm_init/prompts.py +286 -6
  46. claude_mpm/cli/commands/postmortem.py +401 -0
  47. claude_mpm/cli/commands/profile.py +277 -0
  48. claude_mpm/cli/commands/run.py +123 -165
  49. claude_mpm/cli/commands/skill_source.py +694 -0
  50. claude_mpm/cli/commands/skills.py +782 -20
  51. claude_mpm/cli/commands/summarize.py +413 -0
  52. claude_mpm/cli/executor.py +96 -3
  53. claude_mpm/cli/interactive/agent_wizard.py +1030 -45
  54. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  55. claude_mpm/cli/parsers/agents_parser.py +307 -10
  56. claude_mpm/cli/parsers/auto_configure_parser.py +13 -138
  57. claude_mpm/cli/parsers/base_parser.py +65 -0
  58. claude_mpm/cli/parsers/config_parser.py +162 -39
  59. claude_mpm/cli/parsers/profile_parser.py +148 -0
  60. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  61. claude_mpm/cli/parsers/skills_parser.py +146 -0
  62. claude_mpm/cli/parsers/source_parser.py +138 -0
  63. claude_mpm/cli/startup.py +1280 -118
  64. claude_mpm/cli/startup_display.py +480 -0
  65. claude_mpm/cli/utils.py +1 -1
  66. claude_mpm/cli_module/commands.py +1 -1
  67. claude_mpm/commands/mpm-config.md +21 -134
  68. claude_mpm/commands/mpm-doctor.md +16 -20
  69. claude_mpm/commands/mpm-help.md +13 -283
  70. claude_mpm/commands/mpm-init.md +88 -489
  71. claude_mpm/commands/mpm-monitor.md +23 -401
  72. claude_mpm/commands/mpm-organize.md +72 -247
  73. claude_mpm/commands/mpm-postmortem.md +21 -0
  74. claude_mpm/commands/mpm-session-resume.md +30 -0
  75. claude_mpm/commands/mpm-status.md +13 -68
  76. claude_mpm/commands/mpm-ticket-view.md +109 -0
  77. claude_mpm/commands/mpm-version.md +13 -106
  78. claude_mpm/commands/mpm.md +10 -0
  79. claude_mpm/config/agent_presets.py +488 -0
  80. claude_mpm/config/agent_sources.py +352 -0
  81. claude_mpm/config/skill_presets.py +392 -0
  82. claude_mpm/config/skill_sources.py +590 -0
  83. claude_mpm/constants.py +13 -0
  84. claude_mpm/core/claude_runner.py +5 -34
  85. claude_mpm/core/config.py +15 -1
  86. claude_mpm/core/constants.py +1 -1
  87. claude_mpm/core/framework/__init__.py +3 -16
  88. claude_mpm/core/framework/formatters/content_formatter.py +3 -13
  89. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  90. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  91. claude_mpm/core/framework/loaders/instruction_loader.py +66 -5
  92. claude_mpm/core/framework_loader.py +4 -2
  93. claude_mpm/core/hook_error_memory.py +381 -0
  94. claude_mpm/core/hook_manager.py +41 -2
  95. claude_mpm/core/interactive_session.py +91 -10
  96. claude_mpm/core/logger.py +16 -1
  97. claude_mpm/core/oneshot_session.py +71 -8
  98. claude_mpm/core/optimized_startup.py +59 -0
  99. claude_mpm/core/output_style_manager.py +173 -43
  100. claude_mpm/core/protocols/__init__.py +23 -0
  101. claude_mpm/core/protocols/runner_protocol.py +103 -0
  102. claude_mpm/core/protocols/session_protocol.py +131 -0
  103. claude_mpm/core/shared/config_loader.py +1 -1
  104. claude_mpm/core/shared/singleton_manager.py +11 -4
  105. claude_mpm/core/socketio_pool.py +3 -3
  106. claude_mpm/core/system_context.py +38 -0
  107. claude_mpm/core/unified_agent_registry.py +134 -16
  108. claude_mpm/core/unified_config.py +22 -0
  109. claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
  110. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +1 -0
  111. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +1 -0
  112. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +1 -0
  113. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +1 -0
  114. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +1 -0
  115. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +2 -0
  116. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DjhvlsAc.js +1 -0
  117. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/N4qtv3Hx.js +2 -0
  118. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uj46x2Wr.js +1 -0
  119. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +2 -0
  120. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +1 -0
  121. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.CAGBuiOw.js +1 -0
  122. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +1 -0
  123. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +10 -0
  124. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
  125. claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
  126. claude_mpm/dashboard/static/svelte-build/index.html +36 -0
  127. claude_mpm/experimental/cli_enhancements.py +1 -5
  128. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  129. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  130. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  131. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  132. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
  133. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  134. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  135. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  136. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  137. claude_mpm/hooks/claude_hooks/event_handlers.py +214 -79
  138. claude_mpm/hooks/claude_hooks/hook_handler.py +155 -1
  139. claude_mpm/hooks/claude_hooks/installer.py +33 -10
  140. claude_mpm/hooks/claude_hooks/memory_integration.py +28 -0
  141. claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
  142. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  143. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
  144. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  145. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  146. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  147. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  148. claude_mpm/hooks/claude_hooks/services/connection_manager.py +30 -6
  149. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  150. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  151. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  152. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  153. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  154. claude_mpm/hooks/memory_integration_hook.py +46 -1
  155. claude_mpm/init.py +63 -19
  156. claude_mpm/models/agent_definition.py +7 -0
  157. claude_mpm/models/git_repository.py +198 -0
  158. claude_mpm/scripts/claude-hook-handler.sh +60 -20
  159. claude_mpm/scripts/launch_monitor.py +93 -13
  160. claude_mpm/scripts/start_activity_logging.py +3 -1
  161. claude_mpm/services/agents/agent_builder.py +48 -12
  162. claude_mpm/services/agents/agent_preset_service.py +238 -0
  163. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  164. claude_mpm/services/agents/agent_review_service.py +280 -0
  165. claude_mpm/services/agents/agent_selection_service.py +484 -0
  166. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  167. claude_mpm/services/agents/cache_git_manager.py +621 -0
  168. claude_mpm/services/agents/deployment/agent_deployment.py +148 -2
  169. claude_mpm/services/agents/deployment/agent_discovery_service.py +104 -73
  170. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  171. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  172. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  173. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  174. claude_mpm/services/agents/deployment/agent_template_builder.py +238 -15
  175. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  176. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  177. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  178. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +422 -31
  179. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  180. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  181. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +841 -0
  182. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  183. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  184. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  185. claude_mpm/services/agents/git_source_manager.py +663 -0
  186. claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
  187. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  188. claude_mpm/services/agents/local_template_manager.py +50 -10
  189. claude_mpm/services/agents/recommender.py +5 -3
  190. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  191. claude_mpm/services/agents/sources/__init__.py +13 -0
  192. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  193. claude_mpm/services/agents/sources/git_source_sync_service.py +1094 -0
  194. claude_mpm/services/agents/startup_sync.py +259 -0
  195. claude_mpm/services/agents/toolchain_detector.py +478 -0
  196. claude_mpm/services/analysis/__init__.py +35 -0
  197. claude_mpm/services/analysis/clone_detector.py +1030 -0
  198. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  199. claude_mpm/services/analysis/postmortem_service.py +765 -0
  200. claude_mpm/services/cli/session_pause_manager.py +1 -1
  201. claude_mpm/services/command_deployment_service.py +271 -6
  202. claude_mpm/services/core/base.py +7 -2
  203. claude_mpm/services/core/interfaces/__init__.py +1 -3
  204. claude_mpm/services/core/interfaces/health.py +1 -4
  205. claude_mpm/services/core/models/__init__.py +2 -11
  206. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  207. claude_mpm/services/diagnostics/checks/agent_check.py +2 -4
  208. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  209. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  210. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  211. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  212. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  213. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  214. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  215. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  216. claude_mpm/services/event_bus/config.py +3 -1
  217. claude_mpm/services/event_bus/direct_relay.py +3 -3
  218. claude_mpm/services/events/consumers/logging.py +1 -2
  219. claude_mpm/services/git/__init__.py +21 -0
  220. claude_mpm/services/git/git_operations_service.py +579 -0
  221. claude_mpm/services/github/__init__.py +21 -0
  222. claude_mpm/services/github/github_cli_service.py +397 -0
  223. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  224. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  225. claude_mpm/services/instructions/__init__.py +9 -0
  226. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  227. claude_mpm/services/local_ops/__init__.py +3 -13
  228. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  229. claude_mpm/services/local_ops/health_manager.py +1 -4
  230. claude_mpm/services/local_ops/resource_monitor.py +1 -1
  231. claude_mpm/services/mcp_config_manager.py +75 -145
  232. claude_mpm/services/mcp_service_verifier.py +6 -3
  233. claude_mpm/services/model/model_router.py +1 -2
  234. claude_mpm/services/monitor/daemon.py +38 -11
  235. claude_mpm/services/monitor/daemon_manager.py +134 -21
  236. claude_mpm/services/monitor/management/lifecycle.py +8 -1
  237. claude_mpm/services/monitor/server.py +700 -24
  238. claude_mpm/services/pm_skills_deployer.py +676 -0
  239. claude_mpm/services/port_manager.py +1 -1
  240. claude_mpm/services/pr/__init__.py +14 -0
  241. claude_mpm/services/pr/pr_template_service.py +329 -0
  242. claude_mpm/services/profile_manager.py +331 -0
  243. claude_mpm/services/project/documentation_manager.py +2 -1
  244. claude_mpm/services/project/project_organizer.py +4 -0
  245. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  246. claude_mpm/services/runner_configuration_service.py +16 -3
  247. claude_mpm/services/self_upgrade_service.py +120 -12
  248. claude_mpm/services/session_management_service.py +16 -4
  249. claude_mpm/services/skills/__init__.py +21 -0
  250. claude_mpm/services/skills/git_skill_source_manager.py +1297 -0
  251. claude_mpm/services/skills/selective_skill_deployer.py +704 -0
  252. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  253. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  254. claude_mpm/services/skills_config.py +547 -0
  255. claude_mpm/services/skills_deployer.py +1072 -0
  256. claude_mpm/services/socketio/dashboard_server.py +1 -0
  257. claude_mpm/services/socketio/event_normalizer.py +51 -6
  258. claude_mpm/services/socketio/handlers/connection.py +1 -1
  259. claude_mpm/services/socketio/handlers/git.py +1 -1
  260. claude_mpm/services/socketio/server/core.py +387 -112
  261. claude_mpm/services/socketio/server/main.py +1 -3
  262. claude_mpm/services/system_instructions_service.py +1 -3
  263. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  264. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  265. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  266. claude_mpm/services/unified/unified_deployment.py +1 -5
  267. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  268. claude_mpm/services/version_control/git_operations.py +103 -0
  269. claude_mpm/services/visualization/__init__.py +1 -5
  270. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  271. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  272. claude_mpm/skills/skill_manager.py +92 -3
  273. claude_mpm/skills/skills_registry.py +0 -1
  274. claude_mpm/templates/questions/__init__.py +38 -0
  275. claude_mpm/templates/questions/base.py +193 -0
  276. claude_mpm/templates/questions/pr_strategy.py +311 -0
  277. claude_mpm/templates/questions/project_init.py +385 -0
  278. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  279. claude_mpm/tools/__main__.py +8 -8
  280. claude_mpm/utils/agent_dependency_loader.py +91 -12
  281. claude_mpm/utils/agent_filters.py +261 -0
  282. claude_mpm/utils/dependency_cache.py +3 -1
  283. claude_mpm/utils/gitignore.py +244 -0
  284. claude_mpm/utils/migration.py +372 -0
  285. claude_mpm/utils/progress.py +387 -0
  286. claude_mpm/utils/robust_installer.py +49 -7
  287. claude_mpm/utils/structured_questions.py +619 -0
  288. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/METADATA +445 -122
  289. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/RECORD +298 -503
  290. claude_mpm-5.4.41.dist-info/entry_points.txt +5 -0
  291. claude_mpm-5.4.41.dist-info/licenses/LICENSE +94 -0
  292. claude_mpm-5.4.41.dist-info/licenses/LICENSE-FAQ.md +153 -0
  293. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
  294. claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
  295. claude_mpm/agents/BASE_OPS.md +0 -219
  296. claude_mpm/agents/BASE_PM.md +0 -468
  297. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
  298. claude_mpm/agents/BASE_QA.md +0 -167
  299. claude_mpm/agents/BASE_RESEARCH.md +0 -53
  300. claude_mpm/agents/base_agent_loader.py +0 -626
  301. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  302. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  303. claude_mpm/agents/templates/agent-manager.json +0 -273
  304. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  305. claude_mpm/agents/templates/api_qa.json +0 -183
  306. claude_mpm/agents/templates/circuit_breakers.md +0 -638
  307. claude_mpm/agents/templates/clerk-ops.json +0 -235
  308. claude_mpm/agents/templates/code_analyzer.json +0 -101
  309. claude_mpm/agents/templates/content-agent.json +0 -358
  310. claude_mpm/agents/templates/dart_engineer.json +0 -307
  311. claude_mpm/agents/templates/data_engineer.json +0 -225
  312. claude_mpm/agents/templates/documentation.json +0 -238
  313. claude_mpm/agents/templates/engineer.json +0 -210
  314. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  315. claude_mpm/agents/templates/golang_engineer.json +0 -270
  316. claude_mpm/agents/templates/imagemagick.json +0 -264
  317. claude_mpm/agents/templates/java_engineer.json +0 -346
  318. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  319. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  320. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  321. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  322. claude_mpm/agents/templates/memory_manager.json +0 -158
  323. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  324. claude_mpm/agents/templates/ops.json +0 -185
  325. claude_mpm/agents/templates/php-engineer.json +0 -287
  326. claude_mpm/agents/templates/product_owner.json +0 -338
  327. claude_mpm/agents/templates/project_organizer.json +0 -144
  328. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  329. claude_mpm/agents/templates/python_engineer.json +0 -387
  330. claude_mpm/agents/templates/qa.json +0 -243
  331. claude_mpm/agents/templates/react_engineer.json +0 -239
  332. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  333. claude_mpm/agents/templates/research.json +0 -188
  334. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  335. claude_mpm/agents/templates/rust_engineer.json +0 -275
  336. claude_mpm/agents/templates/security.json +0 -202
  337. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  338. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  339. claude_mpm/agents/templates/ticketing.json +0 -178
  340. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  341. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  342. claude_mpm/agents/templates/version_control.json +0 -159
  343. claude_mpm/agents/templates/web_qa.json +0 -400
  344. claude_mpm/agents/templates/web_ui.json +0 -189
  345. claude_mpm/cli/commands/agents_detect.py +0 -380
  346. claude_mpm/cli/commands/agents_recommend.py +0 -309
  347. claude_mpm/cli/ticket_cli.py +0 -35
  348. claude_mpm/commands/mpm-agents-detect.md +0 -168
  349. claude_mpm/commands/mpm-agents-recommend.md +0 -214
  350. claude_mpm/commands/mpm-agents.md +0 -122
  351. claude_mpm/commands/mpm-auto-configure.md +0 -269
  352. claude_mpm/commands/mpm-resume.md +0 -372
  353. claude_mpm/commands/mpm-tickets.md +0 -151
  354. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  355. claude_mpm/dashboard/analysis_runner.py +0 -455
  356. claude_mpm/dashboard/index.html +0 -13
  357. claude_mpm/dashboard/open_dashboard.py +0 -66
  358. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  359. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  360. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  361. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  362. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  363. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  364. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  365. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  366. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  367. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  368. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  369. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  370. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  371. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  372. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  373. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  374. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  375. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  376. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  377. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  378. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  379. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  380. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  381. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  382. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  383. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  384. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  385. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  386. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  387. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  388. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  389. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  390. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  391. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  392. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  393. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  394. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  395. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  396. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  397. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  398. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  399. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  400. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  401. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  402. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  403. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  404. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  405. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  406. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  407. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  408. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  409. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  410. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  411. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  412. claude_mpm/dashboard/static/built/react/events.js +0 -30
  413. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  414. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  415. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  416. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  417. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  418. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  419. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  420. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  421. claude_mpm/dashboard/static/css/activity.css +0 -1958
  422. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  423. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  424. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  425. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  426. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  427. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  428. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  429. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  430. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  431. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  432. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  433. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  434. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  435. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  436. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  437. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  438. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  439. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  440. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  441. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  442. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  443. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  444. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  445. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  446. claude_mpm/dashboard/static/events.html +0 -607
  447. claude_mpm/dashboard/static/index.html +0 -635
  448. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  449. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  450. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  451. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  452. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  453. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  454. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  455. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  456. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  457. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  458. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  459. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  460. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  461. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  462. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  463. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  464. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  465. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  466. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  467. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  468. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  469. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  470. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  471. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  472. claude_mpm/dashboard/static/js/dashboard.js +0 -1896
  473. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  474. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  475. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  476. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  477. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  478. claude_mpm/dashboard/static/js/socket-client.js +0 -1457
  479. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  480. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  481. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  482. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  483. claude_mpm/dashboard/static/legacy/files.html +0 -747
  484. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  485. claude_mpm/dashboard/static/monitors.html +0 -431
  486. claude_mpm/dashboard/static/production/events.html +0 -659
  487. claude_mpm/dashboard/static/production/main.html +0 -698
  488. claude_mpm/dashboard/static/production/monitors.html +0 -483
  489. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  490. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  491. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  492. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  493. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  494. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  495. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  496. claude_mpm/dashboard/templates/code_simple.html +0 -153
  497. claude_mpm/dashboard/templates/index.html +0 -606
  498. claude_mpm/dashboard/test_dashboard.html +0 -372
  499. claude_mpm/scripts/mcp_server.py +0 -75
  500. claude_mpm/scripts/mcp_wrapper.py +0 -39
  501. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  502. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  503. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  504. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  505. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  506. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  507. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  508. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  509. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  510. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  511. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -971
  512. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  513. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  514. claude_mpm/services/mcp_gateway/main.py +0 -589
  515. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  516. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  517. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  518. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  519. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -419
  520. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  521. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -714
  522. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  523. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  524. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  525. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  526. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  527. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  528. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -551
  529. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  530. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  531. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  532. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  533. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  534. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  535. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  536. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  537. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  538. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  539. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  540. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  541. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  542. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  543. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  544. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  545. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  546. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  547. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  548. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  549. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  550. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  551. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  552. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  553. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  554. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  555. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  556. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  557. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  558. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  559. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  560. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  561. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  562. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  563. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  564. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  565. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  566. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  567. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  568. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  569. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  570. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  571. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  572. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  573. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  574. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  575. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  576. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  577. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  578. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  579. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  580. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  581. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  582. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  583. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  584. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  585. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  586. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  587. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  588. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  589. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  590. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  591. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  592. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  593. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  594. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  595. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  596. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  597. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  598. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  599. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  600. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  601. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  602. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  603. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  604. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  605. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  606. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  607. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  608. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  609. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  610. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  611. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  612. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  613. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  614. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  615. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  616. claude_mpm-4.24.0.dist-info/entry_points.txt +0 -10
  617. claude_mpm-4.24.0.dist-info/licenses/LICENSE +0 -21
  618. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  619. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  620. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  621. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  622. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/WHEEL +0 -0
  623. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/top_level.txt +0 -0
@@ -3,13 +3,16 @@ Auto-Configuration CLI Command for Claude MPM Framework
3
3
  ========================================================
4
4
 
5
5
  WHY: This module provides a user-friendly CLI interface for the auto-configuration
6
- feature, allowing users to automatically configure agents based on detected toolchain.
6
+ feature, allowing users to automatically configure BOTH agents AND skills based on
7
+ detected toolchain.
7
8
 
8
9
  DESIGN DECISION: Uses rich for beautiful terminal output, implements interactive
9
10
  confirmation, and provides comprehensive error handling. Supports both interactive
10
- and non-interactive modes for flexibility.
11
+ and non-interactive modes for flexibility. Orchestrates both agent auto-config
12
+ (via AutoConfigManagerService) and skill recommendations (via SkillsDeployer).
11
13
 
12
14
  Part of TSK-0054: Auto-Configuration Feature - Phase 5
15
+ Unified Auto-Configure: 1M-502 Phase 2
13
16
  """
14
17
 
15
18
  import json
@@ -18,7 +21,6 @@ from typing import Optional
18
21
 
19
22
  try:
20
23
  from rich.console import Console
21
- from rich.panel import Panel
22
24
  from rich.progress import BarColumn, Progress, SpinnerColumn, TextColumn
23
25
  from rich.table import Table
24
26
 
@@ -29,7 +31,6 @@ except ImportError:
29
31
  from ...core.enums import OperationResult
30
32
  from ...services.agents.auto_config_manager import AutoConfigManagerService
31
33
  from ...services.agents.observers import NullObserver
32
- from ...services.core.models.agent_config import ConfigurationResult
33
34
  from ..shared import BaseCommand, CommandResult
34
35
 
35
36
 
@@ -100,7 +101,11 @@ class AutoConfigureCommand(BaseCommand):
100
101
  Handle auto-configuration CLI commands.
101
102
 
102
103
  This command provides a user-friendly interface for automatically configuring
103
- agents based on detected project toolchain.
104
+ BOTH agents AND skills based on detected project toolchain.
105
+
106
+ Orchestrates:
107
+ 1. Agent auto-configuration (via AutoConfigManagerService)
108
+ 2. Skills recommendations and deployment (via SkillsDeployer + agent-skill mapping)
104
109
  """
105
110
 
106
111
  def __init__(self):
@@ -108,19 +113,16 @@ class AutoConfigureCommand(BaseCommand):
108
113
  super().__init__("auto-configure")
109
114
  self.console = Console() if RICH_AVAILABLE else None
110
115
  self._auto_config_manager = None
116
+ self._skills_deployer = None
111
117
 
112
118
  @property
113
119
  def auto_config_manager(self) -> AutoConfigManagerService:
114
120
  """Get auto-configuration manager (lazy loaded)."""
115
121
  if self._auto_config_manager is None:
116
- from ...services.agents.auto_config_manager import (
117
- AutoConfigManagerService,
118
- )
122
+ from ...services.agents.auto_config_manager import AutoConfigManagerService
119
123
  from ...services.agents.recommender import AgentRecommenderService
120
124
  from ...services.agents.registry import AgentRegistry
121
- from ...services.project.toolchain_analyzer import (
122
- ToolchainAnalyzerService,
123
- )
125
+ from ...services.project.toolchain_analyzer import ToolchainAnalyzerService
124
126
 
125
127
  # Initialize services with dependency injection
126
128
  toolchain_analyzer = ToolchainAnalyzerService()
@@ -144,6 +146,15 @@ class AutoConfigureCommand(BaseCommand):
144
146
 
145
147
  return self._auto_config_manager
146
148
 
149
+ @property
150
+ def skills_deployer(self):
151
+ """Get skills deployer instance (lazy loaded)."""
152
+ if self._skills_deployer is None:
153
+ from ...services.skills_deployer import SkillsDeployerService
154
+
155
+ self._skills_deployer = SkillsDeployerService()
156
+ return self._skills_deployer
157
+
147
158
  def validate_args(self, args) -> Optional[str]:
148
159
  """Validate command arguments."""
149
160
  # Validate project path
@@ -195,11 +206,26 @@ class AutoConfigureCommand(BaseCommand):
195
206
  skip_confirmation = args.yes if hasattr(args, "yes") and args.yes else False
196
207
  json_output = args.json if hasattr(args, "json") and args.json else False
197
208
 
209
+ # Determine what to configure (agents, skills, or both)
210
+ configure_agents = not getattr(args, "skills_only", False)
211
+ configure_skills = not getattr(args, "agents_only", False)
212
+
198
213
  # Run preview or full configuration
199
214
  if dry_run or args.preview if hasattr(args, "preview") else False:
200
- return self._run_preview(project_path, min_confidence, json_output)
215
+ return self._run_preview(
216
+ project_path,
217
+ min_confidence,
218
+ json_output,
219
+ configure_agents,
220
+ configure_skills,
221
+ )
201
222
  return self._run_full_configuration(
202
- project_path, min_confidence, skip_confirmation, json_output
223
+ project_path,
224
+ min_confidence,
225
+ skip_confirmation,
226
+ json_output,
227
+ configure_agents,
228
+ configure_skills,
203
229
  )
204
230
 
205
231
  except KeyboardInterrupt:
@@ -219,24 +245,61 @@ class AutoConfigureCommand(BaseCommand):
219
245
  return CommandResult.error_result(error_msg)
220
246
 
221
247
  def _run_preview(
222
- self, project_path: Path, min_confidence: float, json_output: bool
248
+ self,
249
+ project_path: Path,
250
+ min_confidence: float,
251
+ json_output: bool,
252
+ configure_agents: bool = True,
253
+ configure_skills: bool = True,
223
254
  ) -> CommandResult:
224
255
  """Run configuration preview without deploying."""
225
- # Show analysis spinner
226
- if self.console and not json_output:
227
- with self.console.status("[bold green]Analyzing project toolchain..."):
228
- preview = self.auto_config_manager.preview_configuration(
256
+ # Get agent preview
257
+ agent_preview = None
258
+ if configure_agents:
259
+ if self.console and not json_output:
260
+ with self.console.status("[bold green]Analyzing project toolchain..."):
261
+ agent_preview = self.auto_config_manager.preview_configuration(
262
+ project_path, min_confidence
263
+ )
264
+ else:
265
+ agent_preview = self.auto_config_manager.preview_configuration(
229
266
  project_path, min_confidence
230
267
  )
231
- else:
232
- preview = self.auto_config_manager.preview_configuration(
233
- project_path, min_confidence
234
- )
268
+
269
+ # Review existing project agents
270
+ agent_review_results = None
271
+ if configure_agents:
272
+ if self.console and not json_output:
273
+ with self.console.status("[bold green]Reviewing existing agents..."):
274
+ agent_review_results = self._review_project_agents(agent_preview)
275
+ else:
276
+ agent_review_results = self._review_project_agents(agent_preview)
277
+
278
+ # Get skills recommendations
279
+ skills_recommendations = None
280
+ if configure_skills:
281
+ if self.console and not json_output:
282
+ with self.console.status("[bold green]Analyzing skill requirements..."):
283
+ skills_recommendations = self._recommend_skills(agent_preview)
284
+ else:
285
+ skills_recommendations = self._recommend_skills(agent_preview)
235
286
 
236
287
  # Output results
237
288
  if json_output:
238
- return self._output_preview_json(preview)
239
- return self._display_preview(preview)
289
+ return self._output_preview_json(
290
+ agent_preview,
291
+ skills_recommendations,
292
+ configure_agents,
293
+ configure_skills,
294
+ agent_review_results,
295
+ )
296
+ return self._display_preview(
297
+ agent_preview,
298
+ skills_recommendations,
299
+ configure_agents,
300
+ configure_skills,
301
+ agent_review_results,
302
+ )
240
303
 
241
304
  def _run_full_configuration(
242
305
  self,
@@ -244,147 +307,281 @@ class AutoConfigureCommand(BaseCommand):
244
307
  min_confidence: float,
245
308
  skip_confirmation: bool,
246
309
  json_output: bool,
310
+ configure_agents: bool = True,
311
+ configure_skills: bool = True,
247
312
  ) -> CommandResult:
248
313
  """Run full auto-configuration with deployment."""
249
- # Get preview first
250
- if self.console and not json_output:
251
- with self.console.status("[bold green]Analyzing project toolchain..."):
252
- preview = self.auto_config_manager.preview_configuration(
314
+ # Get agent preview
315
+ agent_preview = None
316
+ if configure_agents:
317
+ if self.console and not json_output:
318
+ with self.console.status("[bold green]Analyzing project toolchain..."):
319
+ agent_preview = self.auto_config_manager.preview_configuration(
320
+ project_path, min_confidence
321
+ )
322
+ else:
323
+ agent_preview = self.auto_config_manager.preview_configuration(
253
324
  project_path, min_confidence
254
325
  )
255
- else:
256
- preview = self.auto_config_manager.preview_configuration(
257
- project_path, min_confidence
258
- )
326
+
327
+ # Review existing project agents
328
+ agent_review_results = None
329
+ if configure_agents:
330
+ if self.console and not json_output:
331
+ with self.console.status("[bold green]Reviewing existing agents..."):
332
+ agent_review_results = self._review_project_agents(agent_preview)
333
+ else:
334
+ agent_review_results = self._review_project_agents(agent_preview)
335
+
336
+ # Get skills recommendations
337
+ skills_recommendations = None
338
+ if configure_skills:
339
+ if self.console and not json_output:
340
+ with self.console.status("[bold green]Analyzing skill requirements..."):
341
+ skills_recommendations = self._recommend_skills(agent_preview)
342
+ else:
343
+ skills_recommendations = self._recommend_skills(agent_preview)
259
344
 
260
345
  # Display preview (unless JSON output)
261
346
  if not json_output:
262
- self._display_preview(preview)
347
+ self._display_preview(
348
+ agent_preview,
349
+ skills_recommendations,
350
+ configure_agents,
351
+ configure_skills,
352
+ agent_review_results,
353
+ )
263
354
 
264
355
  # Ask for confirmation (unless skipped)
265
356
  if not skip_confirmation and not json_output:
266
- if not self._confirm_deployment(preview):
357
+ if not self._confirm_deployment(
358
+ agent_preview,
359
+ skills_recommendations,
360
+ configure_agents,
361
+ configure_skills,
362
+ agent_review_results,
363
+ ):
267
364
  if self.console:
268
365
  self.console.print("\n❌ Operation cancelled by user")
269
366
  else:
270
367
  print("\nOperation cancelled by user")
271
368
  return CommandResult.error_result("Operation cancelled", exit_code=0)
272
369
 
273
- # Execute configuration
274
- import asyncio
275
-
276
- observer = RichProgressObserver(self.console) if self.console else None
277
- result = asyncio.run(
278
- self.auto_config_manager.auto_configure(
279
- project_path,
280
- confirmation_required=False, # Already confirmed above
281
- dry_run=False,
282
- min_confidence=min_confidence,
283
- observer=observer,
370
+ # Archive unused agents (before deploying new ones)
371
+ archive_result = None
372
+ if configure_agents and agent_review_results:
373
+ agents_to_archive = agent_review_results.get("unused", [])
374
+ if agents_to_archive:
375
+ if self.console and not json_output:
376
+ self.console.print(
377
+ "\n[bold yellow]Archiving unused agents...[/bold yellow]\n"
378
+ )
379
+ archive_result = self._archive_agents(agents_to_archive)
380
+
381
+ # Execute agent configuration
382
+ agent_result = None
383
+ if configure_agents and agent_preview:
384
+ import asyncio
385
+
386
+ observer = RichProgressObserver(self.console) if self.console else None
387
+ agent_result = asyncio.run(
388
+ self.auto_config_manager.auto_configure(
389
+ project_path,
390
+ confirmation_required=False, # Already confirmed above
391
+ dry_run=False,
392
+ min_confidence=min_confidence,
393
+ observer=observer,
394
+ )
284
395
  )
285
- )
396
+
397
+ # Deploy skills
398
+ skills_result = None
399
+ if configure_skills and skills_recommendations:
400
+ if self.console and not json_output:
401
+ self.console.print("\n[bold cyan]Deploying skills...[/bold cyan]\n")
402
+ skills_result = self._deploy_skills(skills_recommendations)
286
403
 
287
404
  # Output results
288
405
  if json_output:
289
- return self._output_result_json(result)
290
- return self._display_result(result)
406
+ return self._output_result_json(agent_result, skills_result, archive_result)
407
+ return self._display_result(agent_result, skills_result, archive_result)
291
408
 
292
- def _display_preview(self, preview) -> CommandResult:
409
+ def _display_preview(
410
+ self,
411
+ agent_preview,
412
+ skills_recommendations=None,
413
+ configure_agents=True,
414
+ configure_skills=True,
415
+ agent_review_results=None,
416
+ ) -> CommandResult:
293
417
  """Display configuration preview with Rich formatting."""
294
418
  if not self.console:
295
419
  # Fallback to plain text
296
- return self._display_preview_plain(preview)
420
+ return self._display_preview_plain(
421
+ agent_preview,
422
+ skills_recommendations,
423
+ configure_agents,
424
+ configure_skills,
425
+ agent_review_results,
426
+ )
297
427
 
298
- # Display detected toolchain
299
- self.console.print("\n📊 Detected Toolchain:", style="bold blue")
300
- if preview.detected_toolchain and preview.detected_toolchain.components:
301
- toolchain_table = Table(show_header=True, header_style="bold")
302
- toolchain_table.add_column("Component", style="cyan")
303
- toolchain_table.add_column("Version", style="yellow")
304
- toolchain_table.add_column("Confidence", style="green")
305
-
306
- for component in preview.detected_toolchain.components:
307
- confidence_pct = int(component.confidence * 100)
308
- bar = "█" * (confidence_pct // 10) + "░" * (10 - confidence_pct // 10)
309
- confidence_str = f"{bar} {confidence_pct}%"
310
-
311
- toolchain_table.add_row(
312
- (
313
- component.type.value
314
- if hasattr(component.type, "value")
315
- else str(component.type)
316
- ),
317
- component.version or "Unknown",
318
- confidence_str,
319
- )
428
+ # Only show toolchain and agents if configuring agents
429
+ if not configure_agents:
430
+ agent_preview = None
320
431
 
321
- self.console.print(toolchain_table)
322
- else:
323
- self.console.print(" No toolchain detected", style="yellow")
324
-
325
- # Display recommended agents
326
- self.console.print("\n🤖 Recommended Agents:", style="bold blue")
327
- if preview.recommendations:
328
- for rec in preview.recommendations:
329
- confidence_pct = int(rec.confidence * 100)
330
- icon = "" if rec.confidence >= 0.8 else ""
331
- self.console.print(
332
- f" {icon} [bold]{rec.agent_id}[/bold] ({confidence_pct}% confidence)"
333
- )
334
- self.console.print(f" Reason: {rec.reasoning}", style="dim")
335
- else:
336
- self.console.print(" No agents recommended", style="yellow")
337
-
338
- # Display validation issues
339
- if preview.validation_result and preview.validation_result.issues:
340
- self.console.print("\n⚠️ Validation Issues:", style="bold yellow")
341
- for issue in preview.validation_result.issues:
342
- severity_icon = {"error": "❌", "warning": "⚠️", "info": "ℹ️"}.get(
343
- (
344
- issue.severity.value
345
- if hasattr(issue.severity, "value")
346
- else str(issue.severity)
347
- ),
348
- "•",
349
- )
350
- self.console.print(f" {severity_icon} {issue.message}", style="yellow")
432
+ # Display detected toolchain
433
+ if configure_agents and agent_preview:
434
+ self.console.print("\n📊 Detected Toolchain:", style="bold blue")
435
+ if (
436
+ agent_preview.detected_toolchain
437
+ and agent_preview.detected_toolchain.components
438
+ ):
439
+ toolchain_table = Table(show_header=True, header_style="bold")
440
+ toolchain_table.add_column("Component", style="cyan")
441
+ toolchain_table.add_column("Version", style="yellow")
442
+ toolchain_table.add_column("Confidence", style="green")
443
+
444
+ for component in agent_preview.detected_toolchain.components:
445
+ confidence_pct = int(component.confidence * 100)
446
+ bar = "█" * (confidence_pct // 10) + "░" * (
447
+ 10 - confidence_pct // 10
448
+ )
449
+ confidence_str = f"{bar} {confidence_pct}%"
450
+
451
+ toolchain_table.add_row(
452
+ (
453
+ component.type.value
454
+ if hasattr(component.type, "value")
455
+ else str(component.type)
456
+ ),
457
+ component.version or "Unknown",
458
+ confidence_str,
459
+ )
460
+
461
+ self.console.print(toolchain_table)
462
+ else:
463
+ self.console.print(" No toolchain detected", style="yellow")
464
+
465
+ # Display recommended agents
466
+ self.console.print("\n🤖 Recommended Agents:", style="bold blue")
467
+ if agent_preview.recommendations:
468
+ for rec in agent_preview.recommendations:
469
+ confidence_pct = int(rec.confidence * 100)
470
+ icon = "✓" if rec.confidence >= 0.8 else "○"
471
+ self.console.print(
472
+ f" {icon} [bold]{rec.agent_id}[/bold] ({confidence_pct}% confidence)"
473
+ )
474
+ self.console.print(f" Reason: {rec.reasoning}", style="dim")
475
+ else:
476
+ self.console.print(" No agents recommended", style="yellow")
477
+
478
+ # Display validation issues
479
+ if (
480
+ agent_preview.validation_result
481
+ and agent_preview.validation_result.issues
482
+ ):
483
+ self.console.print("\n⚠️ Validation Issues:", style="bold yellow")
484
+ for issue in agent_preview.validation_result.issues:
485
+ severity_icon = {"error": "❌", "warning": "⚠️", "info": "ℹ️"}.get(
486
+ (
487
+ issue.severity.value
488
+ if hasattr(issue.severity, "value")
489
+ else str(issue.severity)
490
+ ),
491
+ "•",
492
+ )
493
+ self.console.print(
494
+ f" {severity_icon} {issue.message}", style="yellow"
495
+ )
496
+
497
+ # Display agent review results
498
+ if configure_agents and agent_review_results:
499
+ self._display_agent_review(agent_review_results)
500
+
501
+ # Display recommended skills
502
+ if configure_skills and skills_recommendations:
503
+ self.console.print("\n🎯 Recommended Skills:", style="bold blue")
504
+ for skill in skills_recommendations:
505
+ self.console.print(f" ✓ [bold]{skill}[/bold]")
351
506
 
352
507
  return CommandResult.success_result()
353
508
 
354
- def _display_preview_plain(self, preview) -> CommandResult:
509
+ def _display_preview_plain(
510
+ self,
511
+ agent_preview,
512
+ skills_recommendations=None,
513
+ configure_agents=True,
514
+ configure_skills=True,
515
+ agent_review_results=None,
516
+ ) -> CommandResult:
355
517
  """Display preview in plain text (fallback when Rich not available)."""
356
- print("\nDetected Toolchain:")
357
- if preview.detected_toolchain and preview.detected_toolchain.components:
358
- for component in preview.detected_toolchain.components:
359
- confidence_pct = int(component.confidence * 100)
360
- print(f" - {component.type}: {component.version} ({confidence_pct}%)")
361
- else:
362
- print(" No toolchain detected")
363
-
364
- print("\nRecommended Agents:")
365
- if preview.recommendations:
366
- for rec in preview.recommendations:
367
- confidence_pct = int(rec.confidence * 100)
368
- print(f" - {rec.agent_id} ({confidence_pct}%)")
369
- print(f" Reason: {rec.reasoning}")
370
- else:
371
- print(" No agents recommended")
518
+ if configure_agents and agent_preview:
519
+ print("\nDetected Toolchain:")
520
+ if (
521
+ agent_preview.detected_toolchain
522
+ and agent_preview.detected_toolchain.components
523
+ ):
524
+ for component in agent_preview.detected_toolchain.components:
525
+ confidence_pct = int(component.confidence * 100)
526
+ print(
527
+ f" - {component.type}: {component.version} ({confidence_pct}%)"
528
+ )
529
+ else:
530
+ print(" No toolchain detected")
531
+
532
+ print("\nRecommended Agents:")
533
+ if agent_preview.recommendations:
534
+ for rec in agent_preview.recommendations:
535
+ confidence_pct = int(rec.confidence * 100)
536
+ print(f" - {rec.agent_id} ({confidence_pct}%)")
537
+ print(f" Reason: {rec.reasoning}")
538
+ else:
539
+ print(" No agents recommended")
372
540
 
373
- if preview.validation_result and preview.validation_result.issues:
374
- print("\nValidation Issues:")
375
- for issue in preview.validation_result.issues:
376
- print(f" - {issue.severity}: {issue.message}")
541
+ if (
542
+ agent_preview.validation_result
543
+ and agent_preview.validation_result.issues
544
+ ):
545
+ print("\nValidation Issues:")
546
+ for issue in agent_preview.validation_result.issues:
547
+ print(f" - {issue.severity}: {issue.message}")
548
+
549
+ if configure_skills and skills_recommendations:
550
+ print("\nRecommended Skills:")
551
+ for skill in skills_recommendations:
552
+ print(f" - {skill}")
377
553
 
378
554
  return CommandResult.success_result()
379
555
 
380
- def _confirm_deployment(self, preview) -> bool:
556
+ def _confirm_deployment(
557
+ self,
558
+ agent_preview,
559
+ skills_recommendations=None,
560
+ configure_agents=True,
561
+ configure_skills=True,
562
+ agent_review_results=None,
563
+ ) -> bool:
381
564
  """Ask user to confirm deployment."""
382
- if not preview.recommendations:
565
+ has_agents = (
566
+ configure_agents and agent_preview and agent_preview.recommendations
567
+ )
568
+ has_skills = configure_skills and skills_recommendations
569
+
570
+ if not has_agents and not has_skills:
383
571
  return False
384
572
 
573
+ # Build confirmation message
574
+ items = []
575
+ if has_agents:
576
+ items.append(f"{len(agent_preview.recommendations)} agent(s)")
577
+ if has_skills:
578
+ items.append(f"{len(skills_recommendations)} skill(s)")
579
+
580
+ message = f"Deploy {' and '.join(items)}?"
581
+
385
582
  if self.console:
386
583
  self.console.print("\n" + "=" * 60)
387
- self.console.print("Deploy these agents?", style="bold yellow")
584
+ self.console.print(message, style="bold yellow")
388
585
  self.console.print("=" * 60)
389
586
  response = (
390
587
  self.console.input("\n[bold]Proceed? (y/n/s for select):[/bold] ")
@@ -393,7 +590,7 @@ class AutoConfigureCommand(BaseCommand):
393
590
  )
394
591
  else:
395
592
  print("\n" + "=" * 60)
396
- print("Deploy these agents?")
593
+ print(message)
397
594
  print("=" * 60)
398
595
  response = input("\nProceed? (y/n/s for select): ").strip().lower()
399
596
 
@@ -411,160 +608,446 @@ class AutoConfigureCommand(BaseCommand):
411
608
  return False
412
609
  return False
413
610
 
414
- def _display_result(self, result: ConfigurationResult) -> CommandResult:
611
+ def _display_result(
612
+ self,
613
+ agent_result: Optional = None,
614
+ skills_result: Optional[dict] = None,
615
+ archive_result: Optional[dict] = None,
616
+ ) -> CommandResult:
415
617
  """Display configuration result."""
416
618
  if not self.console:
417
- return self._display_result_plain(result)
418
-
419
- # Display summary
420
- if result.status == OperationResult.SUCCESS:
421
- panel = Panel(
422
- f"✅ Auto-configuration completed successfully!\n\n"
423
- f"Deployed {len(result.deployed_agents)} agent(s)",
424
- title="Success",
425
- border_style="green",
619
+ return self._display_result_plain(
620
+ agent_result, skills_result, archive_result
426
621
  )
427
- self.console.print(panel)
428
622
 
623
+ # Determine overall success
624
+ agent_success = (
625
+ (agent_result and agent_result.status == OperationResult.SUCCESS)
626
+ if agent_result
627
+ else True
628
+ )
629
+ skills_success = not skills_result or (
630
+ skills_result and not skills_result.get("errors")
631
+ )
632
+ archive_success = not archive_result or not archive_result.get("errors")
633
+ overall_success = agent_success and skills_success and archive_success
634
+
635
+ # Display summary
636
+ if overall_success:
429
637
  # Show deployed agents
430
- if result.deployed_agents:
638
+ if agent_result and agent_result.deployed_agents:
431
639
  self.console.print("\n📦 Deployed Agents:", style="bold green")
432
- for agent_id in result.deployed_agents:
640
+ for agent_id in agent_result.deployed_agents:
433
641
  self.console.print(f" ✓ {agent_id}")
434
642
 
643
+ # Show deployed skills
644
+ if skills_result and skills_result.get("deployed"):
645
+ self.console.print("\n🎯 Deployed Skills:", style="bold green")
646
+ for skill in skills_result["deployed"]:
647
+ self.console.print(f" ✓ {skill}")
648
+
649
+ # Show archived agents
650
+ if archive_result and archive_result.get("archived"):
651
+ self.console.print("\n📁 Archived Agents:", style="bold yellow")
652
+ for archived in archive_result["archived"]:
653
+ self.console.print(f" → {archived['name']}")
654
+
655
+ # Show restart notification
656
+ self._show_restart_notification(agent_result, skills_result, archive_result)
657
+
435
658
  return CommandResult.success_result()
436
659
 
437
- if result.status == OperationResult.WARNING:
438
- panel = Panel(
439
- f"⚠️ Auto-configuration partially completed\n\n"
440
- f"Deployed: {len(result.deployed_agents)}\n"
441
- f"Failed: {len(result.failed_agents)}",
442
- title="Partial Success",
443
- border_style="yellow",
444
- )
445
- self.console.print(panel)
660
+ # Partial or complete failure
661
+ has_errors = False
662
+ if agent_result and agent_result.status in [
663
+ OperationResult.WARNING,
664
+ OperationResult.FAILED,
665
+ ]:
666
+ has_errors = True
667
+
668
+ if agent_result.status == OperationResult.WARNING:
669
+ self.console.print(
670
+ "\n⚠️ Agent configuration partially completed", style="yellow"
671
+ )
672
+ else:
673
+ self.console.print("\n❌ Agent configuration failed", style="red")
446
674
 
447
- if result.failed_agents:
675
+ if agent_result.failed_agents:
448
676
  self.console.print("\n❌ Failed Agents:", style="bold red")
449
- for agent_id in result.failed_agents:
450
- error = result.errors.get(agent_id, "Unknown error")
677
+ for agent_id in agent_result.failed_agents:
678
+ error = agent_result.errors.get(agent_id, "Unknown error")
451
679
  self.console.print(f" ✗ {agent_id}: {error}")
452
680
 
453
- return CommandResult.error_result("Partial configuration", exit_code=1)
454
-
455
- panel = Panel(
456
- f"❌ Auto-configuration failed\n\n{result.errors.get('general', 'Unknown error')}",
457
- title="Error",
458
- border_style="red",
681
+ if skills_result and skills_result.get("errors"):
682
+ has_errors = True
683
+ self.console.print("\n❌ Skill deployment failed", style="red")
684
+ for error in skills_result["errors"]:
685
+ self.console.print(f" ✗ {error}")
686
+
687
+ return (
688
+ CommandResult.error_result(
689
+ "Configuration partially succeeded"
690
+ if (agent_success or skills_success)
691
+ else "Configuration failed",
692
+ exit_code=1,
693
+ )
694
+ if has_errors
695
+ else CommandResult.success_result()
459
696
  )
460
- self.console.print(panel)
461
-
462
- return CommandResult.error_result("Configuration failed", exit_code=1)
463
697
 
464
- def _display_result_plain(self, result: ConfigurationResult) -> CommandResult:
698
+ def _display_result_plain(
699
+ self,
700
+ agent_result: Optional = None,
701
+ skills_result: Optional[dict] = None,
702
+ archive_result: Optional[dict] = None,
703
+ ) -> CommandResult:
465
704
  """Display result in plain text (fallback)."""
466
- if result.status == OperationResult.SUCCESS:
705
+ # Determine overall success
706
+ agent_success = (
707
+ (agent_result and agent_result.status == OperationResult.SUCCESS)
708
+ if agent_result
709
+ else True
710
+ )
711
+ skills_success = not skills_result or not skills_result.get("errors")
712
+ overall_success = agent_success and skills_success
713
+
714
+ if overall_success:
467
715
  print("\n✅ Auto-configuration completed successfully!")
468
- print(f"Deployed {len(result.deployed_agents)} agent(s)")
469
716
 
470
- if result.deployed_agents:
717
+ if agent_result and agent_result.deployed_agents:
718
+ print(f"Deployed {len(agent_result.deployed_agents)} agent(s)")
471
719
  print("\nDeployed Agents:")
472
- for agent_id in result.deployed_agents:
720
+ for agent_id in agent_result.deployed_agents:
473
721
  print(f" - {agent_id}")
474
722
 
723
+ if skills_result and skills_result.get("deployed"):
724
+ print(f"\nDeployed {len(skills_result['deployed'])} skill(s)")
725
+ print("\nDeployed Skills:")
726
+ for skill in skills_result["deployed"]:
727
+ print(f" - {skill}")
728
+
475
729
  return CommandResult.success_result()
476
730
 
477
- if result.status == OperationResult.WARNING:
478
- print("\n⚠️ Auto-configuration partially completed")
479
- print(f"Deployed: {len(result.deployed_agents)}")
480
- print(f"Failed: {len(result.failed_agents)}")
731
+ # Partial or complete failure
732
+ has_errors = False
733
+ if agent_result and agent_result.status in [
734
+ OperationResult.WARNING,
735
+ OperationResult.FAILED,
736
+ ]:
737
+ has_errors = True
738
+ print(
739
+ "\n⚠️ Agent configuration partially completed"
740
+ if agent_result.status == OperationResult.WARNING
741
+ else "\n❌ Agent configuration failed"
742
+ )
481
743
 
482
- if result.failed_agents:
744
+ if agent_result.failed_agents:
483
745
  print("\nFailed Agents:")
484
- for agent_id in result.failed_agents:
485
- error = result.errors.get(agent_id, "Unknown error")
746
+ for agent_id in agent_result.failed_agents:
747
+ error = agent_result.errors.get(agent_id, "Unknown error")
486
748
  print(f" - {agent_id}: {error}")
487
749
 
488
- return CommandResult.error_result("Partial configuration", exit_code=1)
489
-
490
- print("\n❌ Auto-configuration failed")
491
- print(result.errors.get("general", "Unknown error"))
492
-
493
- return CommandResult.error_result("Configuration failed", exit_code=1)
750
+ if skills_result and skills_result.get("errors"):
751
+ has_errors = True
752
+ print("\n❌ Skill deployment failed")
753
+ for error in skills_result["errors"]:
754
+ print(f" - {error}")
755
+
756
+ return (
757
+ CommandResult.error_result(
758
+ "Configuration partially succeeded"
759
+ if (agent_success or skills_success)
760
+ else "Configuration failed",
761
+ exit_code=1,
762
+ )
763
+ if has_errors
764
+ else CommandResult.success_result()
765
+ )
494
766
 
495
- def _output_preview_json(self, preview) -> CommandResult:
767
+ def _output_preview_json(
768
+ self,
769
+ agent_preview,
770
+ skills_recommendations=None,
771
+ configure_agents=True,
772
+ configure_skills=True,
773
+ agent_review_results=None,
774
+ ) -> CommandResult:
496
775
  """Output preview as JSON."""
497
- output = {
498
- "detected_toolchain": {
499
- "components": (
500
- [
501
- {
502
- "type": (
503
- c.type.value
504
- if hasattr(c.type, "value")
505
- else str(c.type)
506
- ),
507
- "version": c.version,
508
- "confidence": c.confidence,
509
- }
510
- for c in preview.detected_toolchain.components
511
- ]
512
- if preview.detected_toolchain
513
- else []
514
- )
515
- },
516
- "recommendations": [
517
- {
518
- "agent_id": r.agent_id,
519
- "confidence": r.confidence,
520
- "reasoning": r.reasoning,
521
- }
522
- for r in preview.recommendations
523
- ],
524
- "validation": {
525
- "is_valid": (
526
- preview.validation_result.is_valid
527
- if preview.validation_result
528
- else True
529
- ),
530
- "issues": (
531
- [
532
- {
533
- "severity": (
534
- i.severity.value
535
- if hasattr(i.severity, "value")
536
- else str(i.severity)
537
- ),
538
- "message": i.message,
539
- }
540
- for i in preview.validation_result.issues
541
- ]
542
- if preview.validation_result
543
- else []
544
- ),
545
- },
546
- }
776
+ output = {}
777
+
778
+ if configure_agents and agent_preview:
779
+ output["agents"] = {
780
+ "detected_toolchain": {
781
+ "components": (
782
+ [
783
+ {
784
+ "type": (
785
+ c.type.value
786
+ if hasattr(c.type, "value")
787
+ else str(c.type)
788
+ ),
789
+ "version": c.version,
790
+ "confidence": c.confidence,
791
+ }
792
+ for c in agent_preview.detected_toolchain.components
793
+ ]
794
+ if agent_preview.detected_toolchain
795
+ else []
796
+ )
797
+ },
798
+ "recommendations": [
799
+ {
800
+ "agent_id": r.agent_id,
801
+ "confidence": r.confidence,
802
+ "reasoning": r.reasoning,
803
+ }
804
+ for r in agent_preview.recommendations
805
+ ],
806
+ "validation": {
807
+ "is_valid": (
808
+ agent_preview.validation_result.is_valid
809
+ if agent_preview.validation_result
810
+ else True
811
+ ),
812
+ "issues": (
813
+ [
814
+ {
815
+ "severity": (
816
+ i.severity.value
817
+ if hasattr(i.severity, "value")
818
+ else str(i.severity)
819
+ ),
820
+ "message": i.message,
821
+ }
822
+ for i in agent_preview.validation_result.issues
823
+ ]
824
+ if agent_preview.validation_result
825
+ else []
826
+ ),
827
+ },
828
+ }
829
+
830
+ if configure_skills and skills_recommendations:
831
+ output["skills"] = {
832
+ "recommendations": skills_recommendations,
833
+ }
547
834
 
548
835
  print(json.dumps(output, indent=2))
549
836
  return CommandResult.success_result(data=output)
550
837
 
551
- def _output_result_json(self, result: ConfigurationResult) -> CommandResult:
838
+ def _output_result_json(
839
+ self,
840
+ agent_result: Optional = None,
841
+ skills_result: Optional[dict] = None,
842
+ archive_result: Optional[dict] = None,
843
+ ) -> CommandResult:
552
844
  """Output result as JSON."""
553
- output = {
554
- "status": (
555
- result.status.value
556
- if hasattr(result.status, "value")
557
- else str(result.status)
558
- ),
559
- "deployed_agents": result.deployed_agents,
560
- "failed_agents": result.failed_agents,
561
- "errors": result.errors,
562
- }
845
+ output = {}
846
+
847
+ if agent_result:
848
+ output["agents"] = {
849
+ "status": (
850
+ agent_result.status.value
851
+ if hasattr(agent_result.status, "value")
852
+ else str(agent_result.status)
853
+ ),
854
+ "deployed_agents": agent_result.deployed_agents,
855
+ "failed_agents": agent_result.failed_agents,
856
+ "errors": agent_result.errors,
857
+ }
858
+
859
+ if skills_result:
860
+ output["skills"] = skills_result
563
861
 
564
862
  print(json.dumps(output, indent=2))
565
863
 
566
- if result.status == OperationResult.SUCCESS:
864
+ # Determine overall success
865
+ agent_success = (
866
+ agent_result.status == OperationResult.SUCCESS if agent_result else True
867
+ )
868
+ skills_success = not skills_result or not skills_result.get("errors")
869
+ overall_success = agent_success and skills_success
870
+
871
+ if overall_success:
567
872
  return CommandResult.success_result(data=output)
568
873
  return CommandResult.error_result(
569
874
  "Configuration failed or partial", exit_code=1, data=output
570
875
  )
876
+
877
+ def _recommend_skills(self, agent_preview):
878
+ """Recommend skills based on deployed/recommended agents.
879
+
880
+ Args:
881
+ agent_preview: Agent preview result with recommendations
882
+
883
+ Returns:
884
+ List of recommended skill names, or None if no agents recommended
885
+ """
886
+ if not agent_preview or not agent_preview.recommendations:
887
+ return None
888
+
889
+ # Import agent-skill mapping
890
+ from ...cli.interactive.skills_wizard import AGENT_SKILL_MAPPING
891
+
892
+ # Collect recommended skills based on agent types
893
+ recommended_skills = set()
894
+ for rec in agent_preview.recommendations:
895
+ agent_id = rec.agent_id
896
+ # Map agent ID to skill recommendations
897
+ if agent_id in AGENT_SKILL_MAPPING:
898
+ recommended_skills.update(AGENT_SKILL_MAPPING[agent_id])
899
+
900
+ return list(recommended_skills) if recommended_skills else None
901
+
902
+ def _deploy_skills(self, recommended_skills: list[str]) -> dict:
903
+ """Deploy recommended skills.
904
+
905
+ Args:
906
+ recommended_skills: List of skill names to deploy
907
+
908
+ Returns:
909
+ Dict with deployment results: {"deployed": [...], "errors": [...]}
910
+ """
911
+ try:
912
+ return self.skills_deployer.deploy_skills(
913
+ skill_names=recommended_skills, force=False
914
+ )
915
+ except Exception as e:
916
+ self.logger.error(f"Failed to deploy skills: {e}")
917
+ return {"deployed": [], "errors": [str(e)]}
918
+
919
+ def _review_project_agents(self, agent_preview) -> Optional[dict]:
920
+ """Review existing project agents and categorize them.
921
+
922
+ Args:
923
+ agent_preview: Agent preview result with recommendations
924
+
925
+ Returns:
926
+ Dictionary with categorized agents or None if no preview
927
+ """
928
+ if not agent_preview:
929
+ return None
930
+
931
+ from ...services.agents.agent_review_service import AgentReviewService
932
+ from ...services.agents.deployment.remote_agent_discovery_service import (
933
+ RemoteAgentDiscoveryService,
934
+ )
935
+
936
+ # Get managed agents from cache
937
+ agents_cache_dir = Path.home() / ".claude-mpm" / "cache" / "agents"
938
+ if not agents_cache_dir.exists():
939
+ self.logger.debug("No agents cache found")
940
+ return None
941
+
942
+ # Discover managed agents
943
+ discovery_service = RemoteAgentDiscoveryService(agents_cache_dir)
944
+ managed_agents = discovery_service.discover_remote_agents()
945
+
946
+ if not managed_agents:
947
+ self.logger.debug("No managed agents found in cache")
948
+ return None
949
+
950
+ # Get recommended agent IDs
951
+ recommended_ids = set()
952
+ if agent_preview.recommendations:
953
+ recommended_ids = {rec.agent_id for rec in agent_preview.recommendations}
954
+
955
+ # Review project agents
956
+ project_agents_dir = Path.cwd() / ".claude" / "agents"
957
+ review_service = AgentReviewService()
958
+ return review_service.review_project_agents(
959
+ project_agents_dir, managed_agents, recommended_ids
960
+ )
961
+
962
+ def _archive_agents(self, agents_to_archive: list[dict]) -> dict:
963
+ """Archive unused agents by moving them to .claude/agents/unused/.
964
+
965
+ Args:
966
+ agents_to_archive: List of agent dicts to archive
967
+
968
+ Returns:
969
+ Dictionary with archival results
970
+ """
971
+ from ...services.agents.agent_review_service import AgentReviewService
972
+
973
+ project_agents_dir = Path.cwd() / ".claude" / "agents"
974
+ review_service = AgentReviewService()
975
+ return review_service.archive_agents(agents_to_archive, project_agents_dir)
976
+
977
+ def _display_agent_review(self, review_results: dict) -> None:
978
+ """Display agent review results in the preview.
979
+
980
+ Args:
981
+ review_results: Dictionary with categorized agents
982
+ """
983
+ if not self.console:
984
+ return
985
+
986
+ # Count agents to archive
987
+ unused_count = len(review_results.get("unused", []))
988
+ outdated_count = len(review_results.get("outdated", []))
989
+ custom_count = len(review_results.get("custom", []))
990
+
991
+ if unused_count > 0 or outdated_count > 0 or custom_count > 0:
992
+ self.console.print("\n📋 Existing Agents Review:", style="bold blue")
993
+
994
+ # Show custom agents (will be preserved)
995
+ if custom_count > 0:
996
+ self.console.print(
997
+ "\n [green]Custom agents (will be preserved):[/green]"
998
+ )
999
+ for agent in review_results["custom"]:
1000
+ self.console.print(f" ✓ {agent['name']} (v{agent['version']})")
1001
+
1002
+ # Show agents to be archived
1003
+ if unused_count > 0:
1004
+ self.console.print(
1005
+ "\n [yellow]Agents to archive (not needed for this toolchain):[/yellow]"
1006
+ )
1007
+ for agent in review_results["unused"]:
1008
+ reason = (
1009
+ f"outdated (v{agent['current_version']} → v{agent['available_version']})"
1010
+ if "current_version" in agent
1011
+ else "not recommended"
1012
+ )
1013
+ self.console.print(f" → {agent['name']} ({reason})")
1014
+ self.console.print(
1015
+ " [dim]Will be moved to .claude/agents/unused/[/dim]"
1016
+ )
1017
+
1018
+ def _show_restart_notification(
1019
+ self, agent_result=None, skills_result=None, archive_result=None
1020
+ ) -> None:
1021
+ """Show restart notification after configuration is complete.
1022
+
1023
+ Args:
1024
+ agent_result: Agent deployment results
1025
+ skills_result: Skills deployment results
1026
+ archive_result: Agent archival results
1027
+ """
1028
+ if not self.console:
1029
+ return
1030
+
1031
+ # Build summary of changes
1032
+ changes = []
1033
+ if agent_result and agent_result.deployed_agents:
1034
+ changes.append(f"Deployed {len(agent_result.deployed_agents)} agent(s)")
1035
+ if skills_result and skills_result.get("deployed"):
1036
+ changes.append(f"Deployed {len(skills_result['deployed'])} skill(s)")
1037
+ if archive_result and archive_result.get("archived"):
1038
+ changes.append(
1039
+ f"Archived {len(archive_result['archived'])} unused agent(s) to .claude/agents/unused/"
1040
+ )
1041
+
1042
+ if changes:
1043
+ self.console.print("\n" + "=" * 70)
1044
+ self.console.print("✅ [bold green]Configuration complete![/bold green]")
1045
+ self.console.print(
1046
+ "\n🔄 [bold yellow]Please restart Claude Code to apply changes:[/bold yellow]"
1047
+ )
1048
+ self.console.print(" - Quit Claude Code completely")
1049
+ self.console.print(" - Relaunch Claude Code")
1050
+ self.console.print("\n[bold]Changes applied:[/bold]")
1051
+ for change in changes:
1052
+ self.console.print(f" • {change}")
1053
+ self.console.print("=" * 70 + "\n")