claude-mpm 4.25.10__py3-none-any.whl → 5.1.8__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 (507) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/PM_INSTRUCTIONS.md +1055 -2230
  4. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  5. claude_mpm/agents/WORKFLOW.md +4 -4
  6. claude_mpm/agents/__init__.py +6 -0
  7. claude_mpm/agents/agent_loader.py +1 -4
  8. claude_mpm/agents/base_agent_loader.py +10 -35
  9. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +576 -66
  10. claude_mpm/agents/templates/context-management-examples.md +544 -0
  11. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  12. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  13. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  14. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  15. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  16. claude_mpm/cli/__init__.py +28 -3
  17. claude_mpm/cli/commands/__init__.py +2 -0
  18. claude_mpm/cli/commands/agent_source.py +774 -0
  19. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  20. claude_mpm/cli/commands/agents.py +959 -36
  21. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  22. claude_mpm/cli/commands/agents_discover.py +338 -0
  23. claude_mpm/cli/commands/auto_configure.py +537 -239
  24. claude_mpm/cli/commands/config.py +7 -4
  25. claude_mpm/cli/commands/configure.py +924 -45
  26. claude_mpm/cli/commands/configure_navigation.py +63 -46
  27. claude_mpm/cli/commands/doctor.py +10 -2
  28. claude_mpm/cli/commands/local_deploy.py +1 -4
  29. claude_mpm/cli/commands/postmortem.py +401 -0
  30. claude_mpm/cli/commands/run.py +1 -39
  31. claude_mpm/cli/commands/skill_source.py +694 -0
  32. claude_mpm/cli/commands/skills.py +322 -19
  33. claude_mpm/cli/executor.py +22 -3
  34. claude_mpm/cli/interactive/agent_wizard.py +1028 -43
  35. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  36. claude_mpm/cli/parsers/agents_parser.py +256 -4
  37. claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
  38. claude_mpm/cli/parsers/base_parser.py +25 -0
  39. claude_mpm/cli/parsers/config_parser.py +96 -43
  40. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  41. claude_mpm/cli/parsers/skills_parser.py +7 -0
  42. claude_mpm/cli/parsers/source_parser.py +138 -0
  43. claude_mpm/cli/startup.py +456 -103
  44. claude_mpm/cli/startup_display.py +4 -4
  45. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  46. claude_mpm/commands/mpm-agents-detect.md +9 -0
  47. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  48. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  49. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  50. claude_mpm/commands/mpm-doctor.md +9 -0
  51. claude_mpm/commands/mpm-help.md +14 -2
  52. claude_mpm/commands/mpm-init.md +9 -0
  53. claude_mpm/commands/mpm-monitor.md +9 -0
  54. claude_mpm/commands/mpm-postmortem.md +123 -0
  55. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  56. claude_mpm/commands/mpm-status.md +9 -0
  57. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  58. claude_mpm/commands/mpm-ticket-view.md +552 -0
  59. claude_mpm/commands/mpm-version.md +9 -0
  60. claude_mpm/commands/mpm.md +10 -0
  61. claude_mpm/config/agent_presets.py +488 -0
  62. claude_mpm/config/agent_sources.py +325 -0
  63. claude_mpm/config/skill_presets.py +392 -0
  64. claude_mpm/config/skill_sources.py +590 -0
  65. claude_mpm/constants.py +1 -0
  66. claude_mpm/core/claude_runner.py +5 -34
  67. claude_mpm/core/config.py +16 -0
  68. claude_mpm/core/framework/__init__.py +3 -16
  69. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  70. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  71. claude_mpm/core/interactive_session.py +83 -7
  72. claude_mpm/core/oneshot_session.py +71 -8
  73. claude_mpm/core/protocols/__init__.py +23 -0
  74. claude_mpm/core/protocols/runner_protocol.py +103 -0
  75. claude_mpm/core/protocols/session_protocol.py +131 -0
  76. claude_mpm/core/shared/singleton_manager.py +11 -4
  77. claude_mpm/core/system_context.py +38 -0
  78. claude_mpm/core/unified_config.py +22 -0
  79. claude_mpm/experimental/cli_enhancements.py +1 -5
  80. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  81. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  82. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  83. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  84. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  85. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  86. claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
  87. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  88. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  89. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  90. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  91. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  92. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  93. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  94. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  95. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  96. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  97. claude_mpm/models/git_repository.py +198 -0
  98. claude_mpm/services/agents/agent_builder.py +45 -9
  99. claude_mpm/services/agents/agent_preset_service.py +238 -0
  100. claude_mpm/services/agents/agent_selection_service.py +484 -0
  101. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  102. claude_mpm/services/agents/cache_git_manager.py +621 -0
  103. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  104. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  105. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  106. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  107. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  108. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  109. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  110. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  111. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  112. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  113. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  114. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  115. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  116. claude_mpm/services/agents/git_source_manager.py +629 -0
  117. claude_mpm/services/agents/loading/framework_agent_loader.py +1 -4
  118. claude_mpm/services/agents/local_template_manager.py +47 -9
  119. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  120. claude_mpm/services/agents/sources/__init__.py +13 -0
  121. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  122. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  123. claude_mpm/services/agents/startup_sync.py +239 -0
  124. claude_mpm/services/agents/toolchain_detector.py +474 -0
  125. claude_mpm/services/analysis/__init__.py +25 -0
  126. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  127. claude_mpm/services/analysis/postmortem_service.py +765 -0
  128. claude_mpm/services/command_deployment_service.py +200 -6
  129. claude_mpm/services/core/base.py +7 -2
  130. claude_mpm/services/core/interfaces/__init__.py +1 -3
  131. claude_mpm/services/core/interfaces/health.py +1 -4
  132. claude_mpm/services/core/models/__init__.py +2 -11
  133. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  134. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  135. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  136. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  137. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  138. claude_mpm/services/diagnostics/doctor_reporter.py +34 -6
  139. claude_mpm/services/git/__init__.py +21 -0
  140. claude_mpm/services/git/git_operations_service.py +494 -0
  141. claude_mpm/services/github/__init__.py +21 -0
  142. claude_mpm/services/github/github_cli_service.py +397 -0
  143. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  144. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  145. claude_mpm/services/instructions/__init__.py +9 -0
  146. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  147. claude_mpm/services/local_ops/__init__.py +3 -13
  148. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  149. claude_mpm/services/local_ops/health_manager.py +1 -4
  150. claude_mpm/services/mcp_config_manager.py +75 -145
  151. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  152. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  153. claude_mpm/services/mcp_service_verifier.py +6 -3
  154. claude_mpm/services/monitor/daemon.py +28 -8
  155. claude_mpm/services/monitor/daemon_manager.py +96 -19
  156. claude_mpm/services/pr/__init__.py +14 -0
  157. claude_mpm/services/pr/pr_template_service.py +329 -0
  158. claude_mpm/services/project/project_organizer.py +4 -0
  159. claude_mpm/services/runner_configuration_service.py +16 -3
  160. claude_mpm/services/session_management_service.py +16 -4
  161. claude_mpm/services/skills/__init__.py +18 -0
  162. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  163. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  164. claude_mpm/services/socketio/server/core.py +1 -4
  165. claude_mpm/services/socketio/server/main.py +1 -3
  166. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  167. claude_mpm/services/unified/unified_deployment.py +1 -5
  168. claude_mpm/services/visualization/__init__.py +1 -5
  169. claude_mpm/templates/questions/__init__.py +2 -7
  170. claude_mpm/templates/questions/pr_strategy.py +1 -4
  171. claude_mpm/templates/questions/project_init.py +1 -4
  172. claude_mpm/templates/questions/ticket_mgmt.py +1 -4
  173. claude_mpm/utils/agent_dependency_loader.py +77 -10
  174. claude_mpm/utils/agent_filters.py +288 -0
  175. claude_mpm/utils/gitignore.py +3 -0
  176. claude_mpm/utils/migration.py +372 -0
  177. claude_mpm/utils/progress.py +387 -0
  178. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +356 -112
  179. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +188 -439
  180. claude_mpm/agents/templates/agent-manager.json +0 -273
  181. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  182. claude_mpm/agents/templates/api_qa.json +0 -183
  183. claude_mpm/agents/templates/clerk-ops.json +0 -235
  184. claude_mpm/agents/templates/code_analyzer.json +0 -101
  185. claude_mpm/agents/templates/content-agent.json +0 -358
  186. claude_mpm/agents/templates/dart_engineer.json +0 -307
  187. claude_mpm/agents/templates/data_engineer.json +0 -225
  188. claude_mpm/agents/templates/documentation.json +0 -238
  189. claude_mpm/agents/templates/engineer.json +0 -210
  190. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  191. claude_mpm/agents/templates/golang_engineer.json +0 -270
  192. claude_mpm/agents/templates/imagemagick.json +0 -264
  193. claude_mpm/agents/templates/java_engineer.json +0 -346
  194. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  195. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  196. claude_mpm/agents/templates/memory_manager.json +0 -158
  197. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  198. claude_mpm/agents/templates/ops.json +0 -185
  199. claude_mpm/agents/templates/php-engineer.json +0 -287
  200. claude_mpm/agents/templates/product_owner.json +0 -338
  201. claude_mpm/agents/templates/project_organizer.json +0 -144
  202. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  203. claude_mpm/agents/templates/python_engineer.json +0 -387
  204. claude_mpm/agents/templates/qa.json +0 -243
  205. claude_mpm/agents/templates/react_engineer.json +0 -239
  206. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  207. claude_mpm/agents/templates/research.json +0 -258
  208. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  209. claude_mpm/agents/templates/rust_engineer.json +0 -275
  210. claude_mpm/agents/templates/security.json +0 -202
  211. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  212. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  213. claude_mpm/agents/templates/ticketing.json +0 -181
  214. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  215. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  216. claude_mpm/agents/templates/version_control.json +0 -159
  217. claude_mpm/agents/templates/web_qa.json +0 -400
  218. claude_mpm/agents/templates/web_ui.json +0 -189
  219. claude_mpm/cli/README.md +0 -253
  220. claude_mpm/cli/commands/mcp_install_commands.py.backup +0 -284
  221. claude_mpm/cli/commands/mpm_init/README.md +0 -365
  222. claude_mpm/cli_module/refactoring_guide.md +0 -253
  223. claude_mpm/commands/mpm-tickets.md +0 -151
  224. claude_mpm/config/agent_capabilities.yaml +0 -658
  225. claude_mpm/config/async_logging_config.yaml +0 -145
  226. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +0 -34
  227. claude_mpm/d2/.gitignore +0 -22
  228. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +0 -273
  229. claude_mpm/d2/FLASK_INTEGRATION.md +0 -156
  230. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +0 -452
  231. claude_mpm/d2/QUICKSTART.md +0 -186
  232. claude_mpm/d2/README.md +0 -232
  233. claude_mpm/d2/STORE_FIX_SUMMARY.md +0 -167
  234. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +0 -180
  235. claude_mpm/d2/TESTING.md +0 -288
  236. claude_mpm/d2/index.html +0 -118
  237. claude_mpm/d2/package.json +0 -19
  238. claude_mpm/d2/src/App.svelte +0 -110
  239. claude_mpm/d2/src/components/Header.svelte +0 -153
  240. claude_mpm/d2/src/components/MainContent.svelte +0 -74
  241. claude_mpm/d2/src/components/Sidebar.svelte +0 -85
  242. claude_mpm/d2/src/components/tabs/EventsTab.svelte +0 -326
  243. claude_mpm/d2/src/lib/socketio.js +0 -144
  244. claude_mpm/d2/src/main.js +0 -7
  245. claude_mpm/d2/src/stores/events.js +0 -114
  246. claude_mpm/d2/src/stores/socket.js +0 -108
  247. claude_mpm/d2/src/stores/theme.js +0 -65
  248. claude_mpm/d2/svelte.config.js +0 -12
  249. claude_mpm/d2/vite.config.js +0 -15
  250. claude_mpm/dashboard/.claude-mpm/memories/README.md +0 -36
  251. claude_mpm/dashboard/BUILD_NUMBER +0 -1
  252. claude_mpm/dashboard/README.md +0 -121
  253. claude_mpm/dashboard/VERSION +0 -1
  254. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  255. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +0 -273
  256. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +0 -75
  257. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  258. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +0 -141
  259. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  260. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +0 -36
  261. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  262. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +0 -89
  263. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +0 -215
  264. claude_mpm/dashboard/react/entries/events.tsx +0 -165
  265. claude_mpm/dashboard/react/hooks/useEvents.ts +0 -191
  266. claude_mpm/dashboard/react/hooks/useSocket.ts +0 -225
  267. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  268. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +0 -170
  269. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  270. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  271. claude_mpm/dashboard/static/built/components/activity-tree.js.map +0 -1
  272. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  273. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  274. claude_mpm/dashboard/static/built/components/agent-inference.js.map +0 -1
  275. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  276. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  277. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  278. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  279. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  280. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  281. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  282. claude_mpm/dashboard/static/built/components/code-tree.js.map +0 -1
  283. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  284. claude_mpm/dashboard/static/built/components/code-viewer.js.map +0 -1
  285. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  286. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  287. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  288. claude_mpm/dashboard/static/built/components/event-processor.js.map +0 -1
  289. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  290. claude_mpm/dashboard/static/built/components/event-viewer.js.map +0 -1
  291. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  292. claude_mpm/dashboard/static/built/components/export-manager.js.map +0 -1
  293. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  294. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  295. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  296. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +0 -1
  297. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  298. claude_mpm/dashboard/static/built/components/file-viewer.js.map +0 -1
  299. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  300. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +0 -1
  301. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  302. claude_mpm/dashboard/static/built/components/hud-manager.js.map +0 -1
  303. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  304. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +0 -1
  305. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  306. claude_mpm/dashboard/static/built/components/module-viewer.js.map +0 -1
  307. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  308. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  309. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  310. claude_mpm/dashboard/static/built/components/session-manager.js.map +0 -1
  311. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  312. claude_mpm/dashboard/static/built/components/socket-manager.js.map +0 -1
  313. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  314. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +0 -1
  315. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  316. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +0 -1
  317. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  318. claude_mpm/dashboard/static/built/components/working-directory.js.map +0 -1
  319. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  320. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  321. claude_mpm/dashboard/static/built/dashboard.js.map +0 -1
  322. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  323. claude_mpm/dashboard/static/built/react/events.js +0 -30
  324. claude_mpm/dashboard/static/built/react/events.js.map +0 -1
  325. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  326. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  327. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  328. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  329. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  330. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  331. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  332. claude_mpm/dashboard/static/built/socket-client.js.map +0 -1
  333. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  334. claude_mpm/dashboard/static/events.html +0 -607
  335. claude_mpm/dashboard/static/index.html +0 -635
  336. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +0 -170
  337. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  338. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  339. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  340. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  341. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  342. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  343. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  344. claude_mpm/dashboard/static/legacy/files.html +0 -747
  345. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  346. claude_mpm/dashboard/static/monitors.html +0 -431
  347. claude_mpm/dashboard/static/navigation-test-results.md +0 -118
  348. claude_mpm/dashboard/static/production/events.html +0 -659
  349. claude_mpm/dashboard/static/production/main.html +0 -698
  350. claude_mpm/dashboard/static/production/monitors.html +0 -483
  351. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  352. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  353. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  354. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  355. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +0 -36
  356. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +0 -39
  357. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +0 -38
  358. claude_mpm/hooks/README.md +0 -143
  359. claude_mpm/hooks/templates/README.md +0 -180
  360. claude_mpm/hooks/templates/settings.json.example +0 -147
  361. claude_mpm/schemas/agent_schema.json +0 -596
  362. claude_mpm/schemas/frontmatter_schema.json +0 -165
  363. claude_mpm/services/event_bus/README.md +0 -244
  364. claude_mpm/services/events/README.md +0 -303
  365. claude_mpm/services/framework_claude_md_generator/README.md +0 -119
  366. claude_mpm/services/mcp_gateway/README.md +0 -185
  367. claude_mpm/services/socketio/handlers/connection.py.backup +0 -217
  368. claude_mpm/services/socketio/handlers/hook.py.backup +0 -154
  369. claude_mpm/services/static/.gitkeep +0 -2
  370. claude_mpm/services/version_control/VERSION +0 -1
  371. claude_mpm/skills/bundled/.gitkeep +0 -2
  372. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  373. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  374. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  375. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  376. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  377. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  378. claude_mpm/skills/bundled/collaboration/git-worktrees.md +0 -317
  379. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  380. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  381. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  382. claude_mpm/skills/bundled/collaboration/stacked-prs.md +0 -251
  383. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  384. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  385. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  386. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  387. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +0 -63
  388. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  389. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  390. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  391. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  392. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  393. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  394. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  395. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  396. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  397. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  398. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  399. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  400. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  401. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  402. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  403. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  404. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  405. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  406. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  407. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +0 -611
  408. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +0 -596
  409. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +0 -260
  410. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +0 -315
  411. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +0 -436
  412. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +0 -433
  413. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +0 -452
  414. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +0 -404
  415. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +0 -420
  416. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +0 -202
  417. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  418. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +0 -54
  419. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +0 -322
  420. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  421. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +0 -202
  422. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  423. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  424. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  425. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  426. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  427. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +0 -202
  428. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  429. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  430. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  431. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  432. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  433. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  434. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  435. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +0 -22
  436. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +0 -2
  437. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +0 -202
  438. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  439. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  440. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  441. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  442. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  443. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  444. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  445. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  446. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  447. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  448. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  449. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  450. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  451. claude_mpm/skills/bundled/react/flexlayout-react.md +0 -742
  452. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  453. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  454. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  455. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  456. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  457. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  458. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  459. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +0 -495
  460. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +0 -599
  461. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +0 -535
  462. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +0 -613
  463. claude_mpm/skills/bundled/tauri/tauri-event-system.md +0 -648
  464. claude_mpm/skills/bundled/tauri/tauri-file-system.md +0 -673
  465. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +0 -767
  466. claude_mpm/skills/bundled/tauri/tauri-performance.md +0 -669
  467. claude_mpm/skills/bundled/tauri/tauri-state-management.md +0 -573
  468. claude_mpm/skills/bundled/tauri/tauri-testing.md +0 -384
  469. claude_mpm/skills/bundled/tauri/tauri-window-management.md +0 -628
  470. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  471. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +0 -158
  472. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  473. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  474. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  475. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  476. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  477. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  478. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  479. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +0 -458
  480. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +0 -411
  481. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +0 -317
  482. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +0 -270
  483. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +0 -436
  484. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  485. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  486. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  487. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  488. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  489. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +0 -202
  490. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  491. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  492. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  493. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  494. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  495. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  496. claude_mpm/templates/questions/EXAMPLES.md +0 -501
  497. claude_mpm/tools/README_SOCKETIO_DEBUG.md +0 -224
  498. claude_mpm/tools/code_tree_analyzer/README.md +0 -64
  499. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  500. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  501. /claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +0 -0
  502. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  503. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  504. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
  505. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
  506. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
  507. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
claude_mpm/cli/startup.py CHANGED
@@ -10,6 +10,47 @@ Part of cli/__init__.py refactoring to reduce file size and improve modularity.
10
10
 
11
11
  import os
12
12
  import sys
13
+ import warnings
14
+ from pathlib import Path
15
+
16
+
17
+ def check_legacy_cache() -> None:
18
+ """Check for legacy cache/agents/ directory and warn user.
19
+
20
+ WHY: cache/agents/ is deprecated in favor of cache/remote-agents/.
21
+ Research confirmed that cache/remote-agents/ is the canonical location
22
+ with 26 active code references, while cache/agents/ has only 7 legacy references.
23
+
24
+ DESIGN DECISIONS:
25
+ - Non-blocking warning: Doesn't stop execution, just informs user
26
+ - Migration guidance: Provides clear path to migrate
27
+ - One-time check: Only warns if legacy cache contains files
28
+ """
29
+ home = Path.home()
30
+ legacy_cache = home / ".claude-mpm" / "cache" / "agents"
31
+ canonical_cache = home / ".claude-mpm" / "cache" / "remote-agents"
32
+ migration_marker = home / ".claude-mpm" / "cache" / ".migrated_to_remote_agents"
33
+
34
+ # Skip if already migrated or no legacy cache
35
+ if migration_marker.exists() or not legacy_cache.exists():
36
+ return
37
+
38
+ # Check if legacy cache has actual agent files
39
+ legacy_files = list(legacy_cache.glob("*.md")) + list(legacy_cache.glob("*.json"))
40
+ if not legacy_files:
41
+ return
42
+
43
+ # Only warn if canonical cache doesn't exist (indicating unmigrated system)
44
+ if not canonical_cache.exists():
45
+ warnings.warn(
46
+ f"\n⚠️ DEPRECATION: Legacy cache directory detected\n"
47
+ f" Location: {legacy_cache}\n"
48
+ f" Files found: {len(legacy_files)}\n\n"
49
+ f"The 'cache/agents/' directory is deprecated. Please migrate to 'cache/remote-agents/'.\n"
50
+ f"Run: python scripts/migrate_cache_to_remote_agents.py\n",
51
+ DeprecationWarning,
52
+ stacklevel=2,
53
+ )
13
54
 
14
55
 
15
56
  def setup_early_environment(argv):
@@ -97,7 +138,7 @@ def deploy_bundled_skills():
97
138
  WHY: Automatically deploy skills from the bundled/ directory to .claude/skills/
98
139
  to ensure skills are available for agents without manual intervention.
99
140
 
100
- DESIGN DECISION: Deployment happens silently on startup with logging only.
141
+ DESIGN DECISION: Deployment happens with minimal feedback (checkmark on success).
101
142
  Failures are logged but don't block startup to ensure claude-mpm remains
102
143
  functional even if skills deployment fails. Respects auto_deploy config setting.
103
144
  """
@@ -128,9 +169,13 @@ def deploy_bundled_skills():
128
169
  logger = get_logger("cli")
129
170
 
130
171
  if deployment_result.get("deployed"):
131
- logger.info(
132
- f"Skills: Deployed {len(deployment_result['deployed'])} skill(s)"
133
- )
172
+ # Show simple feedback for deployed skills
173
+ deployed_count = len(deployment_result["deployed"])
174
+ print(f"✓ Bundled skills ready ({deployed_count} deployed)", flush=True)
175
+ logger.info(f"Skills: Deployed {deployed_count} skill(s)")
176
+ elif not deployment_result.get("errors"):
177
+ # No deployment needed, skills already present
178
+ print("✓ Bundled skills ready", flush=True)
134
179
 
135
180
  if deployment_result.get("errors"):
136
181
  logger.warning(
@@ -153,7 +198,8 @@ def discover_and_link_runtime_skills():
153
198
  WHY: Automatically discover and link skills added to .claude/skills/
154
199
  without requiring manual configuration.
155
200
 
156
- DESIGN DECISION: Failures are logged but don't block startup to ensure
201
+ DESIGN DECISION: Provides simple feedback on completion.
202
+ Failures are logged but don't block startup to ensure
157
203
  claude-mpm remains functional even if skills discovery fails.
158
204
  """
159
205
  try:
@@ -162,6 +208,8 @@ def discover_and_link_runtime_skills():
162
208
  )
163
209
 
164
210
  discover_skills()
211
+ # Show simple success feedback
212
+ print("✓ Runtime skills linked", flush=True)
165
213
  except Exception as e:
166
214
  # Import logger here to avoid circular imports
167
215
  from ..core.logger import get_logger
@@ -200,6 +248,7 @@ def deploy_output_style_on_startup():
200
248
  settings_file = Path.home() / ".claude" / "settings.json"
201
249
  output_style_file = Path.home() / ".claude" / "output-styles" / "claude-mpm.md"
202
250
 
251
+ already_configured = False
203
252
  if settings_file.exists() and output_style_file.exists():
204
253
  try:
205
254
  import json
@@ -213,10 +262,15 @@ def deploy_output_style_on_startup():
213
262
  settings = json.loads(settings_file.read_text())
214
263
  if settings.get("activeOutputStyle") == "claude-mpm":
215
264
  # Already deployed and active with content
216
- return
265
+ already_configured = True
217
266
  except Exception:
218
267
  pass # Continue with deployment if we can't read settings
219
268
 
269
+ if already_configured:
270
+ # Show feedback that output style is ready
271
+ print("✓ Output style configured", flush=True)
272
+ return
273
+
220
274
  # Read OUTPUT_STYLE.md content
221
275
  output_style_path = Path(__file__).parent.parent / "agents" / "OUTPUT_STYLE.md"
222
276
 
@@ -228,6 +282,7 @@ def deploy_output_style_on_startup():
228
282
 
229
283
  # Deploy the output style (deploys file and activates it)
230
284
  output_style_manager.deploy_output_style(output_style_content)
285
+ print("✓ Output style configured", flush=True)
231
286
 
232
287
  except Exception as e:
233
288
  # Non-critical - log but don't fail startup
@@ -238,18 +293,384 @@ def deploy_output_style_on_startup():
238
293
  # Continue execution - output style deployment shouldn't block startup
239
294
 
240
295
 
296
+ def sync_remote_agents_on_startup():
297
+ """
298
+ Synchronize agent templates from remote sources on startup.
299
+
300
+ WHY: Ensures agents are up-to-date from remote Git sources (GitHub)
301
+ without manual intervention. Uses ETag-based caching for efficient
302
+ updates (95%+ bandwidth reduction).
303
+
304
+ DESIGN DECISION: Non-blocking synchronization that doesn't prevent
305
+ startup if network is unavailable. Failures are logged but don't
306
+ block startup to ensure claude-mpm remains functional.
307
+
308
+ Workflow:
309
+ 1. Sync all enabled Git sources (download/cache files) - Phase 1 progress bar
310
+ 2. Deploy agents to ~/.claude/agents/ - Phase 2 progress bar
311
+ 3. Log deployment results
312
+ """
313
+ # Check for legacy cache and warn user if found
314
+ check_legacy_cache()
315
+
316
+ try:
317
+ from ..services.agents.deployment.agent_deployment import AgentDeploymentService
318
+ from ..services.agents.startup_sync import sync_agents_on_startup
319
+ from ..utils.progress import ProgressBar
320
+
321
+ # Phase 1: Sync files from Git sources
322
+ result = sync_agents_on_startup()
323
+
324
+ # Only proceed with deployment if sync was enabled and ran
325
+ if result.get("enabled") and result.get("sources_synced", 0) > 0:
326
+ from ..core.logger import get_logger
327
+
328
+ logger = get_logger("cli")
329
+
330
+ downloaded = result.get("total_downloaded", 0)
331
+ cached = result.get("cache_hits", 0)
332
+ duration = result.get("duration_ms", 0)
333
+
334
+ if downloaded > 0 or cached > 0:
335
+ logger.debug(
336
+ f"Agent sync: {downloaded} updated, {cached} cached ({duration}ms)"
337
+ )
338
+
339
+ # Log errors if any
340
+ errors = result.get("errors", [])
341
+ if errors:
342
+ logger.warning(f"Agent sync completed with {len(errors)} errors")
343
+
344
+ # Phase 2: Deploy agents from cache to ~/.claude/agents/
345
+ # This mirrors the skills deployment pattern (lines 371-407)
346
+ try:
347
+ # Initialize deployment service
348
+ deployment_service = AgentDeploymentService()
349
+
350
+ # Count agents in cache to show accurate progress
351
+ from pathlib import Path
352
+
353
+ cache_dir = Path.home() / ".claude-mpm" / "cache" / "remote-agents"
354
+ agent_count = 0
355
+
356
+ if cache_dir.exists():
357
+ # Count MD files in cache (agent markdown files from Git)
358
+ # BUGFIX: Only count files in agent directories, not docs/templates/READMEs
359
+ # Valid agent paths must contain "/agents/" or be in root-level category dirs
360
+ # Exclude PM templates, BASE-AGENT, and documentation files
361
+ pm_templates = {
362
+ "base-agent.md",
363
+ "circuit_breakers.md",
364
+ "pm_examples.md",
365
+ "pm_red_flags.md",
366
+ "research_gate_examples.md",
367
+ "response_format.md",
368
+ "ticket_completeness_examples.md",
369
+ "validation_templates.md",
370
+ "git_file_tracking.md",
371
+ }
372
+ # Documentation files to exclude (by filename)
373
+ doc_files = {
374
+ "readme.md",
375
+ "changelog.md",
376
+ "contributing.md",
377
+ "implementation-summary.md",
378
+ "reorganization-plan.md",
379
+ "auto-deploy-index.md",
380
+ }
381
+
382
+ # Find all markdown files
383
+ all_md_files = list(cache_dir.rglob("*.md"))
384
+
385
+ # Filter to only agent files:
386
+ # 1. Must have "/agents/" in path (from git repos)
387
+ # 2. Must not be in PM templates or doc files
388
+ # 3. Exclude BASE-AGENT.md which is not a deployable agent
389
+ agent_files = [
390
+ f
391
+ for f in all_md_files
392
+ if (
393
+ # Must be in an agent directory (from git repos like bobmatnyc/claude-mpm-agents/agents/)
394
+ "/agents/" in str(f)
395
+ # Exclude PM templates, doc files, and BASE-AGENT
396
+ and f.name.lower() not in pm_templates
397
+ and f.name.lower() not in doc_files
398
+ and f.name.lower() != "base-agent.md"
399
+ )
400
+ ]
401
+ agent_count = len(agent_files)
402
+
403
+ if agent_count > 0:
404
+ # Create progress bar for deployment phase
405
+ deploy_progress = ProgressBar(
406
+ total=agent_count,
407
+ prefix="Deploying agents",
408
+ show_percentage=True,
409
+ show_counter=True,
410
+ )
411
+
412
+ # Deploy agents with progress callback
413
+ deploy_target = Path.home() / ".claude" / "agents"
414
+ deployment_result = deployment_service.deploy_agents(
415
+ target_dir=deploy_target,
416
+ force_rebuild=False, # Only deploy if versions differ
417
+ deployment_mode="update", # Version-aware updates
418
+ )
419
+
420
+ # Update progress bar (single increment since deploy_agents is batch)
421
+ deploy_progress.update(agent_count)
422
+
423
+ # Finish deployment progress bar
424
+ deployed = len(deployment_result.get("deployed", []))
425
+ updated = len(deployment_result.get("updated", []))
426
+ skipped = len(deployment_result.get("skipped", []))
427
+ total_available = deployed + updated + skipped
428
+
429
+ # Show total available agents (deployed + updated + already existing)
430
+ if deployed > 0 or updated > 0:
431
+ deploy_progress.finish(
432
+ f"Complete: {deployed} deployed, {updated} updated, {skipped} already present ({total_available} total)"
433
+ )
434
+ else:
435
+ deploy_progress.finish(
436
+ f"Complete: {total_available} agents ready (all up-to-date)"
437
+ )
438
+
439
+ # Display deployment errors to user (not just logs)
440
+ deploy_errors = deployment_result.get("errors", [])
441
+ if deploy_errors:
442
+ # Log for debugging
443
+ logger.warning(
444
+ f"Agent deployment completed with {len(deploy_errors)} errors: {deploy_errors}"
445
+ )
446
+
447
+ # Display errors to user with clear formatting
448
+ print("\n⚠️ Agent Deployment Errors:")
449
+
450
+ # Show first 10 errors to avoid overwhelming output
451
+ max_errors_to_show = 10
452
+ errors_to_display = deploy_errors[:max_errors_to_show]
453
+
454
+ for error in errors_to_display:
455
+ # Format error message for readability
456
+ # Errors typically come as strings like "agent.md: Error message"
457
+ print(f" - {error}")
458
+
459
+ # If more errors exist, show count
460
+ if len(deploy_errors) > max_errors_to_show:
461
+ remaining = len(deploy_errors) - max_errors_to_show
462
+ print(f" ... and {remaining} more error(s)")
463
+
464
+ # Show summary message
465
+ print(
466
+ f"\n❌ Failed to deploy {len(deploy_errors)} agent(s). Please check the error messages above."
467
+ )
468
+ print(" Run with --verbose for detailed error information.\n")
469
+
470
+ except Exception as e:
471
+ # Deployment failure shouldn't block startup
472
+ from ..core.logger import get_logger
473
+
474
+ logger = get_logger("cli")
475
+ logger.warning(f"Failed to deploy agents from cache: {e}")
476
+
477
+ except Exception as e:
478
+ # Non-critical - log but don't fail startup
479
+ from ..core.logger import get_logger
480
+
481
+ logger = get_logger("cli")
482
+ logger.debug(f"Failed to sync remote agents: {e}")
483
+ # Continue execution - agent sync failure shouldn't block startup
484
+
485
+
486
+ def sync_remote_skills_on_startup():
487
+ """
488
+ Synchronize skill templates from remote sources on startup.
489
+
490
+ WHY: Ensures skills are up-to-date from remote Git sources (GitHub)
491
+ without manual intervention. Provides consistency with agent syncing.
492
+
493
+ DESIGN DECISION: Non-blocking synchronization that doesn't prevent
494
+ startup if network is unavailable. Failures are logged but don't
495
+ block startup to ensure claude-mpm remains functional.
496
+
497
+ Workflow:
498
+ 1. Sync all enabled Git sources (download/cache files) - Phase 1 progress bar
499
+ 2. Deploy skills to ~/.claude/skills/ with flat structure - Phase 2 progress bar
500
+ 3. Log deployment results
501
+ """
502
+ try:
503
+ from pathlib import Path
504
+
505
+ from ..config.skill_sources import SkillSourceConfiguration
506
+ from ..services.skills.git_skill_source_manager import GitSkillSourceManager
507
+ from ..utils.progress import ProgressBar
508
+
509
+ config = SkillSourceConfiguration()
510
+ manager = GitSkillSourceManager(config)
511
+
512
+ # Get enabled sources
513
+ enabled_sources = config.get_enabled_sources()
514
+ if not enabled_sources:
515
+ return # No sources enabled, nothing to sync
516
+
517
+ # Phase 1: Sync files from Git sources
518
+ # We need to discover file count first to show accurate progress
519
+ # This requires pre-scanning repositories via GitHub API
520
+ from ..core.logger import get_logger
521
+
522
+ logger = get_logger("cli")
523
+
524
+ # Discover total file count across all sources
525
+ total_file_count = 0
526
+ for source in enabled_sources:
527
+ try:
528
+ # Parse GitHub URL
529
+ url_parts = (
530
+ source.url.rstrip("/").replace(".git", "").split("github.com/")
531
+ )
532
+ if len(url_parts) == 2:
533
+ repo_path = url_parts[1].strip("/")
534
+ owner_repo = "/".join(repo_path.split("/")[:2])
535
+
536
+ # Use Tree API to discover all files
537
+ all_files = manager._discover_repository_files_via_tree_api(
538
+ owner_repo, source.branch
539
+ )
540
+
541
+ # Count relevant files (markdown, JSON)
542
+ relevant_files = [
543
+ f
544
+ for f in all_files
545
+ if f.endswith(".md") or f.endswith(".json") or f == ".gitignore"
546
+ ]
547
+ total_file_count += len(relevant_files)
548
+
549
+ except Exception as e:
550
+ logger.debug(f"Failed to discover files for {source.id}: {e}")
551
+ # Use estimate if discovery fails
552
+ total_file_count += 150
553
+
554
+ # Create progress bar for sync phase with actual file count
555
+ sync_progress = ProgressBar(
556
+ total=total_file_count if total_file_count > 0 else 1,
557
+ prefix="Syncing skills",
558
+ show_percentage=True,
559
+ show_counter=True,
560
+ )
561
+
562
+ # Sync all sources with progress callback
563
+ results = manager.sync_all_sources(
564
+ force=False, progress_callback=sync_progress.update
565
+ )
566
+
567
+ # Finish sync progress bar with clear breakdown
568
+ downloaded = results["total_files_updated"]
569
+ cached = results["total_files_cached"]
570
+ total_files = downloaded + cached
571
+
572
+ if cached > 0:
573
+ sync_progress.finish(
574
+ f"Complete: {downloaded} downloaded, {cached} cached ({total_files} total)"
575
+ )
576
+ else:
577
+ # All new downloads (first sync)
578
+ sync_progress.finish(f"Complete: {downloaded} files downloaded")
579
+
580
+ # Phase 2: Deploy skills to ~/.claude/skills/
581
+ # This flattens nested Git structure (e.g., collaboration/parallel-agents/SKILL.md)
582
+ # into flat deployment (e.g., collaboration-dispatching-parallel-agents/SKILL.md)
583
+ if results["synced_count"] > 0:
584
+ # Get all skills to determine deployment count
585
+ all_skills = manager.get_all_skills()
586
+ skill_count = len(all_skills)
587
+
588
+ if skill_count > 0:
589
+ # Create progress bar for deployment phase
590
+ deploy_progress = ProgressBar(
591
+ total=skill_count,
592
+ prefix="Deploying skill directories",
593
+ show_percentage=True,
594
+ show_counter=True,
595
+ )
596
+
597
+ # Deploy skills with progress callback
598
+ # Deploy to project directory (like agents), not user directory
599
+ deployment_result = manager.deploy_skills(
600
+ target_dir=Path.cwd() / ".claude" / "skills",
601
+ force=False,
602
+ progress_callback=deploy_progress.update,
603
+ )
604
+
605
+ # Finish deployment progress bar
606
+ deployed = deployment_result.get("deployed_count", 0)
607
+ skipped = deployment_result.get("skipped_count", 0)
608
+ total_available = deployed + skipped
609
+
610
+ # Show total available skills (deployed + already existing)
611
+ # This is more user-friendly than just showing newly deployed count
612
+ if deployed > 0:
613
+ deploy_progress.finish(
614
+ f"Complete: {deployed} deployed, {skipped} already present ({total_available} total)"
615
+ )
616
+ else:
617
+ deploy_progress.finish(
618
+ f"Complete: {total_available} skills ready (all up-to-date)"
619
+ )
620
+
621
+ # Log deployment errors if any
622
+ from ..core.logger import get_logger
623
+
624
+ logger = get_logger("cli")
625
+
626
+ errors = deployment_result.get("errors", [])
627
+ if errors:
628
+ logger.warning(
629
+ f"Skill deployment completed with {len(errors)} errors: {errors}"
630
+ )
631
+
632
+ # Log sync errors if any
633
+ if results["failed_count"] > 0:
634
+ logger.warning(
635
+ f"Skill sync completed with {results['failed_count']} failures"
636
+ )
637
+
638
+ except Exception as e:
639
+ # Non-critical - log but don't fail startup
640
+ from ..core.logger import get_logger
641
+
642
+ logger = get_logger("cli")
643
+ logger.debug(f"Failed to sync remote skills: {e}")
644
+ # Continue execution - skill sync failure shouldn't block startup
645
+
646
+
241
647
  def run_background_services():
242
648
  """
243
649
  Initialize all background services on startup.
244
650
 
245
651
  WHY: Centralizes all startup service initialization for cleaner main().
652
+
653
+ NOTE: System instructions (PM_INSTRUCTIONS.md, WORKFLOW.md, MEMORY.md) and
654
+ templates do NOT deploy automatically on startup. They only deploy when user
655
+ explicitly requests them via agent-manager commands. This prevents unwanted
656
+ file creation in project .claude/ directories.
657
+ See: SystemInstructionsDeployer and agent_deployment.py line 504-509
246
658
  """
247
659
  initialize_project_registry()
248
660
  check_mcp_auto_configuration()
249
661
  verify_mcp_gateway_startup()
250
662
  check_for_updates_async()
251
- deploy_bundled_skills()
252
- discover_and_link_runtime_skills()
663
+ sync_remote_agents_on_startup() # Sync agents from remote sources
664
+
665
+ # Skills deployment order (precedence: remote > bundled)
666
+ # 1. Deploy bundled skills first (base layer from package)
667
+ # 2. Sync and deploy remote skills (Git sources, can override bundled)
668
+ # 3. Discover and link runtime skills (user-added skills)
669
+ # This ensures remote skills take precedence over bundled skills when names conflict
670
+ deploy_bundled_skills() # Base layer: package-bundled skills
671
+ sync_remote_skills_on_startup() # Override layer: Git-based skills (takes precedence)
672
+ discover_and_link_runtime_skills() # Discovery: user-added skills
673
+
253
674
  deploy_output_style_on_startup()
254
675
 
255
676
 
@@ -326,12 +747,26 @@ def check_mcp_auto_configuration():
326
747
  user consent.
327
748
 
328
749
  DESIGN DECISION: This is blocking but quick - it only runs once and has
329
- a 10-second timeout. We want to catch users on first run for the best
330
- experience.
750
+ a 10-second timeout. Shows progress feedback during checks to avoid
751
+ appearing frozen.
752
+
753
+ OPTIMIZATION: Skip ALL MCP checks for doctor and configure commands to avoid
754
+ duplicate checks (doctor performs its own comprehensive check, configure
755
+ allows users to select services).
331
756
  """
757
+ # Skip MCP service checks for the doctor and configure commands
758
+ # The doctor command performs its own comprehensive MCP service check
759
+ # The configure command allows users to configure which services to enable
760
+ # Running both would cause duplicate checks and log messages (9 seconds apart)
761
+ if len(sys.argv) > 1 and sys.argv[1] in ("doctor", "configure"):
762
+ return
763
+
332
764
  try:
333
765
  from ..services.mcp_gateway.auto_configure import check_and_configure_mcp
334
766
 
767
+ # Show progress feedback - this operation can take 10+ seconds
768
+ print("Checking MCP configuration...", end="", flush=True)
769
+
335
770
  # This function handles all the logic:
336
771
  # - Checks if already configured
337
772
  # - Checks if pipx installation
@@ -340,45 +775,18 @@ def check_mcp_auto_configuration():
340
775
  # - Configures if user agrees
341
776
  check_and_configure_mcp()
342
777
 
343
- except Exception as e:
344
- # Non-critical - log but don't fail
345
- from ..core.logger import get_logger
346
-
347
- logger = get_logger("cli")
348
- logger.debug(f"MCP auto-configuration check failed: {e}")
349
-
350
- # Skip MCP service fixes for the doctor and configure commands
351
- # The doctor command performs its own comprehensive MCP service check
352
- # The configure command allows users to configure which services to enable
353
- # Running both would cause duplicate checks and log messages (9 seconds apart)
354
- if len(sys.argv) > 1 and sys.argv[1] in ("doctor", "configure"):
355
- return
356
-
357
- # Also ensure MCP services are properly configured in ~/.claude.json
358
- # This fixes incorrect paths and adds missing services
359
- try:
360
- from ..core.logger import get_logger
361
- from ..services.mcp_config_manager import MCPConfigManager
362
-
363
- logger = get_logger("cli")
364
- mcp_manager = MCPConfigManager()
365
-
366
- # Fix any corrupted installations first
367
- _fix_success, fix_message = mcp_manager.fix_mcp_service_issues()
368
- if fix_message and "Fixed:" in fix_message:
369
- logger.info(f"MCP service fixes applied: {fix_message}")
370
-
371
- # Ensure all services are configured correctly
372
- _config_success, config_message = mcp_manager.ensure_mcp_services_configured()
373
- if config_message and "Added MCP services" in config_message:
374
- logger.info(f"MCP services configured: {config_message}")
778
+ # Clear the "Checking..." message by overwriting with spaces
779
+ print("\r" + " " * 30 + "\r", end="", flush=True)
375
780
 
376
781
  except Exception as e:
782
+ # Clear progress message on error
783
+ print("\r" + " " * 30 + "\r", end="", flush=True)
784
+
377
785
  # Non-critical - log but don't fail
378
786
  from ..core.logger import get_logger
379
787
 
380
788
  logger = get_logger("cli")
381
- logger.debug(f"MCP services configuration update failed: {e}")
789
+ logger.debug(f"MCP auto-configuration check failed: {e}")
382
790
 
383
791
 
384
792
  def verify_mcp_gateway_startup():
@@ -407,7 +815,6 @@ def verify_mcp_gateway_startup():
407
815
 
408
816
  try:
409
817
  import asyncio
410
- import time
411
818
 
412
819
  from ..core.logger import get_logger
413
820
  from ..services.mcp_gateway.core.startup_verification import (
@@ -422,68 +829,14 @@ def verify_mcp_gateway_startup():
422
829
 
423
830
  # DISABLED: Pre-warming MCP servers can interfere with Claude Code's MCP management
424
831
  # This was causing issues with MCP server initialization and stderr handling
425
- # def run_pre_warming():
426
- # loop = None
427
- # try:
428
- # start_time = time.time()
429
- # loop = asyncio.new_event_loop()
430
- # asyncio.set_event_loop(loop)
431
- #
432
- # # Pre-warm MCP servers (especially vector search)
433
- # logger.info("Pre-warming MCP servers to eliminate startup delay...")
434
- # loop.run_until_complete(pre_warm_mcp_servers())
435
- #
436
- # pre_warm_time = time.time() - start_time
437
- # if pre_warm_time > 1.0:
438
- # logger.info(f"MCP servers pre-warmed in {pre_warm_time:.2f}s")
439
-
440
- # Dummy function to maintain structure
441
- def run_pre_warming():
442
- loop = None
443
- try:
444
- time.time()
445
- loop = asyncio.new_event_loop()
446
- asyncio.set_event_loop(loop)
447
-
448
- # Also run gateway verification if needed
449
- if not gateway_configured:
450
- loop.run_until_complete(verify_mcp_gateway_on_startup())
451
-
452
- except Exception as e:
453
- # Non-blocking - log but don't fail
454
- logger.debug(f"MCP pre-warming error (non-critical): {e}")
455
- finally:
456
- # Properly clean up event loop to prevent kqueue warnings
457
- if loop is not None:
458
- try:
459
- # Cancel all running tasks
460
- pending = asyncio.all_tasks(loop)
461
- for task in pending:
462
- task.cancel()
463
- # Wait for tasks to complete cancellation
464
- if pending:
465
- loop.run_until_complete(
466
- asyncio.gather(*pending, return_exceptions=True)
467
- )
468
- except Exception:
469
- pass # Ignore cleanup errors
470
- finally:
471
- loop.close()
472
- # Clear the event loop reference to help with cleanup
473
- asyncio.set_event_loop(None)
474
-
475
- # Run pre-warming in background thread
476
- import threading
477
-
478
- pre_warm_thread = threading.Thread(target=run_pre_warming, daemon=True)
479
- pre_warm_thread.start()
480
-
481
- return
832
+ # Pre-warming functionality has been removed. Gateway verification only runs
833
+ # if MCP gateway is not already configured.
482
834
 
483
- # Run detailed verification in background if not configured
835
+ # Run gateway verification in background if not configured
484
836
  if not gateway_configured:
485
- # Note: We don't await this to avoid blocking startup
837
+
486
838
  def run_verification():
839
+ """Background thread to verify MCP gateway configuration."""
487
840
  loop = None
488
841
  try:
489
842
  loop = asyncio.new_event_loop()