claude-mpm 4.21.3__py3-none-any.whl → 5.1.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (517) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +3 -48
  4. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +1239 -674
  6. claude_mpm/agents/WORKFLOW.md +75 -2
  7. claude_mpm/agents/__init__.py +6 -0
  8. claude_mpm/agents/agent_loader.py +1 -4
  9. claude_mpm/agents/base_agent.json +6 -3
  10. claude_mpm/agents/base_agent_loader.py +10 -35
  11. claude_mpm/agents/frontmatter_validator.py +69 -1
  12. claude_mpm/agents/templates/circuit-breakers.md +1254 -0
  13. claude_mpm/agents/templates/context-management-examples.md +544 -0
  14. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
  15. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  16. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  17. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  18. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  19. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  20. claude_mpm/cli/__init__.py +37 -2
  21. claude_mpm/cli/commands/__init__.py +2 -0
  22. claude_mpm/cli/commands/agent_source.py +774 -0
  23. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  24. claude_mpm/cli/commands/agents.py +1128 -36
  25. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  26. claude_mpm/cli/commands/agents_discover.py +338 -0
  27. claude_mpm/cli/commands/aggregate.py +1 -1
  28. claude_mpm/cli/commands/analyze.py +3 -3
  29. claude_mpm/cli/commands/auto_configure.py +537 -239
  30. claude_mpm/cli/commands/cleanup.py +1 -1
  31. claude_mpm/cli/commands/config.py +7 -4
  32. claude_mpm/cli/commands/configure.py +935 -45
  33. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  34. claude_mpm/cli/commands/configure_navigation.py +63 -46
  35. claude_mpm/cli/commands/debug.py +12 -12
  36. claude_mpm/cli/commands/doctor.py +10 -2
  37. claude_mpm/cli/commands/hook_errors.py +277 -0
  38. claude_mpm/cli/commands/local_deploy.py +1 -4
  39. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  40. claude_mpm/cli/commands/mpm_init/core.py +50 -2
  41. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  42. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  43. claude_mpm/cli/commands/postmortem.py +401 -0
  44. claude_mpm/cli/commands/run.py +125 -167
  45. claude_mpm/cli/commands/skill_source.py +694 -0
  46. claude_mpm/cli/commands/skills.py +757 -20
  47. claude_mpm/cli/executor.py +78 -3
  48. claude_mpm/cli/interactive/agent_wizard.py +1032 -47
  49. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  50. claude_mpm/cli/parsers/agents_parser.py +310 -4
  51. claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
  52. claude_mpm/cli/parsers/base_parser.py +53 -0
  53. claude_mpm/cli/parsers/config_parser.py +96 -43
  54. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  55. claude_mpm/cli/parsers/skills_parser.py +145 -0
  56. claude_mpm/cli/parsers/source_parser.py +138 -0
  57. claude_mpm/cli/startup.py +564 -108
  58. claude_mpm/cli/startup_display.py +480 -0
  59. claude_mpm/cli/utils.py +1 -1
  60. claude_mpm/cli_module/commands.py +1 -1
  61. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  62. claude_mpm/commands/mpm-agents-detect.md +9 -0
  63. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  64. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  65. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  66. claude_mpm/commands/mpm-doctor.md +9 -0
  67. claude_mpm/commands/mpm-help.md +14 -2
  68. claude_mpm/commands/mpm-init.md +27 -2
  69. claude_mpm/commands/mpm-monitor.md +9 -0
  70. claude_mpm/commands/mpm-postmortem.md +123 -0
  71. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  72. claude_mpm/commands/mpm-status.md +9 -0
  73. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  74. claude_mpm/commands/mpm-ticket-view.md +552 -0
  75. claude_mpm/commands/mpm-version.md +9 -0
  76. claude_mpm/commands/mpm.md +10 -0
  77. claude_mpm/config/agent_presets.py +488 -0
  78. claude_mpm/config/agent_sources.py +325 -0
  79. claude_mpm/config/skill_presets.py +392 -0
  80. claude_mpm/config/skill_sources.py +590 -0
  81. claude_mpm/constants.py +13 -0
  82. claude_mpm/core/api_validator.py +1 -1
  83. claude_mpm/core/claude_runner.py +19 -35
  84. claude_mpm/core/config.py +24 -0
  85. claude_mpm/core/constants.py +1 -1
  86. claude_mpm/core/framework/__init__.py +3 -16
  87. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  88. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  89. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  90. claude_mpm/core/hook_error_memory.py +381 -0
  91. claude_mpm/core/hook_manager.py +41 -2
  92. claude_mpm/core/interactive_session.py +131 -10
  93. claude_mpm/core/logger.py +3 -1
  94. claude_mpm/core/oneshot_session.py +110 -8
  95. claude_mpm/core/output_style_manager.py +173 -43
  96. claude_mpm/core/protocols/__init__.py +23 -0
  97. claude_mpm/core/protocols/runner_protocol.py +103 -0
  98. claude_mpm/core/protocols/session_protocol.py +131 -0
  99. claude_mpm/core/shared/singleton_manager.py +11 -4
  100. claude_mpm/core/system_context.py +38 -0
  101. claude_mpm/core/unified_agent_registry.py +129 -1
  102. claude_mpm/core/unified_config.py +22 -0
  103. claude_mpm/dashboard/static/css/activity.css +69 -69
  104. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  105. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  106. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  107. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  108. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  109. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  110. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  111. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  112. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  113. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  114. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  115. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  116. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  117. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  118. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  119. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  120. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  121. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  122. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  123. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  124. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  125. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  126. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  127. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  128. claude_mpm/dashboard/templates/code_simple.html +23 -23
  129. claude_mpm/dashboard/templates/index.html +18 -18
  130. claude_mpm/experimental/cli_enhancements.py +1 -5
  131. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  132. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  133. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  134. claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
  135. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  136. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  137. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  138. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  139. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  140. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  141. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  142. claude_mpm/models/agent_definition.py +7 -0
  143. claude_mpm/models/git_repository.py +198 -0
  144. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  145. claude_mpm/scripts/start_activity_logging.py +3 -1
  146. claude_mpm/services/agents/agent_builder.py +45 -9
  147. claude_mpm/services/agents/agent_preset_service.py +238 -0
  148. claude_mpm/services/agents/agent_selection_service.py +484 -0
  149. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  150. claude_mpm/services/agents/cache_git_manager.py +621 -0
  151. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  152. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  153. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  154. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  155. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  156. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  157. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  158. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  159. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  160. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  161. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +225 -18
  162. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  163. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  164. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +557 -0
  165. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  166. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  167. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  168. claude_mpm/services/agents/git_source_manager.py +629 -0
  169. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  170. claude_mpm/services/agents/local_template_manager.py +50 -10
  171. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  172. claude_mpm/services/agents/sources/__init__.py +13 -0
  173. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  174. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  175. claude_mpm/services/agents/startup_sync.py +239 -0
  176. claude_mpm/services/agents/toolchain_detector.py +474 -0
  177. claude_mpm/services/analysis/__init__.py +25 -0
  178. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  179. claude_mpm/services/analysis/postmortem_service.py +765 -0
  180. claude_mpm/services/cli/session_pause_manager.py +1 -1
  181. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  182. claude_mpm/services/command_deployment_service.py +200 -6
  183. claude_mpm/services/core/base.py +7 -2
  184. claude_mpm/services/core/interfaces/__init__.py +1 -3
  185. claude_mpm/services/core/interfaces/health.py +1 -4
  186. claude_mpm/services/core/models/__init__.py +2 -11
  187. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  188. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  189. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  190. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  191. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  192. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  193. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  194. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  195. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  196. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  197. claude_mpm/services/event_bus/direct_relay.py +3 -3
  198. claude_mpm/services/event_bus/event_bus.py +36 -3
  199. claude_mpm/services/events/consumers/logging.py +1 -2
  200. claude_mpm/services/git/__init__.py +21 -0
  201. claude_mpm/services/git/git_operations_service.py +494 -0
  202. claude_mpm/services/github/__init__.py +21 -0
  203. claude_mpm/services/github/github_cli_service.py +397 -0
  204. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  205. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  206. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  207. claude_mpm/services/instructions/__init__.py +9 -0
  208. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  209. claude_mpm/services/local_ops/__init__.py +3 -13
  210. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  211. claude_mpm/services/local_ops/health_manager.py +1 -4
  212. claude_mpm/services/local_ops/process_manager.py +1 -1
  213. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  214. claude_mpm/services/mcp_config_manager.py +75 -145
  215. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  216. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  217. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  218. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  219. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  220. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  221. claude_mpm/services/mcp_service_verifier.py +6 -3
  222. claude_mpm/services/memory/optimizer.py +1 -1
  223. claude_mpm/services/model/model_router.py +8 -9
  224. claude_mpm/services/monitor/daemon.py +29 -9
  225. claude_mpm/services/monitor/daemon_manager.py +96 -19
  226. claude_mpm/services/monitor/server.py +2 -2
  227. claude_mpm/services/native_agent_converter.py +356 -0
  228. claude_mpm/services/port_manager.py +1 -1
  229. claude_mpm/services/pr/__init__.py +14 -0
  230. claude_mpm/services/pr/pr_template_service.py +329 -0
  231. claude_mpm/services/project/documentation_manager.py +2 -1
  232. claude_mpm/services/project/project_organizer.py +4 -0
  233. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  234. claude_mpm/services/runner_configuration_service.py +17 -3
  235. claude_mpm/services/self_upgrade_service.py +165 -7
  236. claude_mpm/services/session_management_service.py +16 -4
  237. claude_mpm/services/skills/__init__.py +18 -0
  238. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  239. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  240. claude_mpm/services/skills_config.py +547 -0
  241. claude_mpm/services/skills_deployer.py +955 -0
  242. claude_mpm/services/socketio/handlers/connection.py +1 -1
  243. claude_mpm/services/socketio/handlers/git.py +2 -2
  244. claude_mpm/services/socketio/server/core.py +1 -4
  245. claude_mpm/services/socketio/server/main.py +1 -3
  246. claude_mpm/services/system_instructions_service.py +1 -3
  247. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  248. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  249. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  250. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  251. claude_mpm/services/unified/unified_deployment.py +1 -5
  252. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  253. claude_mpm/services/visualization/__init__.py +1 -5
  254. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  255. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  256. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  257. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  258. claude_mpm/skills/skills_registry.py +0 -1
  259. claude_mpm/templates/questions/__init__.py +38 -0
  260. claude_mpm/templates/questions/base.py +193 -0
  261. claude_mpm/templates/questions/pr_strategy.py +311 -0
  262. claude_mpm/templates/questions/project_init.py +385 -0
  263. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  264. claude_mpm/tools/__main__.py +8 -8
  265. claude_mpm/tools/code_tree_analyzer/analysis.py +1 -1
  266. claude_mpm/utils/agent_dependency_loader.py +80 -13
  267. claude_mpm/utils/agent_filters.py +288 -0
  268. claude_mpm/utils/dependency_cache.py +3 -1
  269. claude_mpm/utils/gitignore.py +244 -0
  270. claude_mpm/utils/log_cleanup.py +3 -3
  271. claude_mpm/utils/migration.py +372 -0
  272. claude_mpm/utils/progress.py +387 -0
  273. claude_mpm/utils/robust_installer.py +3 -5
  274. claude_mpm/utils/structured_questions.py +619 -0
  275. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/METADATA +496 -65
  276. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/RECORD +284 -443
  277. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  278. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  279. claude_mpm/agents/templates/agent-manager.json +0 -273
  280. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  281. claude_mpm/agents/templates/api_qa.json +0 -180
  282. claude_mpm/agents/templates/circuit_breakers.md +0 -638
  283. claude_mpm/agents/templates/clerk-ops.json +0 -235
  284. claude_mpm/agents/templates/code_analyzer.json +0 -101
  285. claude_mpm/agents/templates/content-agent.json +0 -358
  286. claude_mpm/agents/templates/dart_engineer.json +0 -307
  287. claude_mpm/agents/templates/data_engineer.json +0 -225
  288. claude_mpm/agents/templates/documentation.json +0 -211
  289. claude_mpm/agents/templates/engineer.json +0 -210
  290. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  291. claude_mpm/agents/templates/golang_engineer.json +0 -270
  292. claude_mpm/agents/templates/imagemagick.json +0 -264
  293. claude_mpm/agents/templates/java_engineer.json +0 -346
  294. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  295. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  296. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  297. claude_mpm/agents/templates/memory_manager.json +0 -158
  298. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  299. claude_mpm/agents/templates/ops.json +0 -185
  300. claude_mpm/agents/templates/php-engineer.json +0 -287
  301. claude_mpm/agents/templates/product_owner.json +0 -338
  302. claude_mpm/agents/templates/project_organizer.json +0 -140
  303. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  304. claude_mpm/agents/templates/python_engineer.json +0 -387
  305. claude_mpm/agents/templates/qa.json +0 -242
  306. claude_mpm/agents/templates/react_engineer.json +0 -238
  307. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  308. claude_mpm/agents/templates/research.json +0 -188
  309. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  310. claude_mpm/agents/templates/rust_engineer.json +0 -275
  311. claude_mpm/agents/templates/security.json +0 -202
  312. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  313. claude_mpm/agents/templates/ticketing.json +0 -177
  314. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  315. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  316. claude_mpm/agents/templates/version_control.json +0 -157
  317. claude_mpm/agents/templates/web_qa.json +0 -399
  318. claude_mpm/agents/templates/web_ui.json +0 -189
  319. claude_mpm/commands/mpm-tickets.md +0 -102
  320. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  321. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  322. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  323. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  324. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  325. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  326. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  327. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  328. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  329. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  330. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  331. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  332. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  333. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  334. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  335. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  336. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  337. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  338. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  339. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  340. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  341. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  342. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  343. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  344. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  345. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  346. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  347. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  348. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  349. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  350. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  351. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  352. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  353. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  354. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  355. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  356. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  357. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  358. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  359. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  360. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  361. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  362. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  363. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  364. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  365. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  366. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  367. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  368. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  369. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  370. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  371. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  372. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  373. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  374. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  375. claude_mpm/dashboard/static/built/react/events.js +0 -30
  376. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  377. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  378. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  379. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  380. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  381. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  382. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  383. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  384. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  385. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  386. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  387. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  388. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  389. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  390. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  391. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  392. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  393. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  394. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  395. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  396. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  397. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  398. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  399. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  400. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  401. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  402. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  403. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  404. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  405. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  406. claude_mpm/dashboard/static/events.html +0 -607
  407. claude_mpm/dashboard/static/index.html +0 -635
  408. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  409. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  410. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  411. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  412. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  413. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  414. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  415. claude_mpm/dashboard/static/legacy/files.html +0 -747
  416. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  417. claude_mpm/dashboard/static/monitors.html +0 -431
  418. claude_mpm/dashboard/static/production/events.html +0 -659
  419. claude_mpm/dashboard/static/production/main.html +0 -698
  420. claude_mpm/dashboard/static/production/monitors.html +0 -483
  421. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  422. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  423. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  424. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  425. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  426. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  427. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  428. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  429. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  430. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  431. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  432. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  433. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  434. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  435. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  436. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  437. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  438. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  439. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  440. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  441. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  442. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  443. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  444. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  445. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  446. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  447. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  448. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  449. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  450. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  451. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  452. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  453. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  454. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  455. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  456. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  457. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  458. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  459. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  460. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  461. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  462. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  463. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  464. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  465. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  466. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  467. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  468. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  469. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  470. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  471. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  472. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  473. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  474. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  475. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  476. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  477. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  478. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  479. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  480. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  481. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  482. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  483. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  484. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  485. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  486. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  487. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  488. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  489. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  490. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  491. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  492. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  493. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  494. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  495. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  496. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  497. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  498. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  499. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  500. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  501. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  502. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  503. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  504. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  505. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  506. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  507. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  508. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  509. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  510. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  511. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  512. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  513. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  514. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/WHEEL +0 -0
  515. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/entry_points.txt +0 -0
  516. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/licenses/LICENSE +0 -0
  517. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,329 @@
1
+ """
2
+ Pull Request Template Service
3
+ ==============================
4
+
5
+ Generates consistent PR titles and descriptions for agent/skill improvements.
6
+
7
+ Design Decisions:
8
+ - Follows conventional commit format
9
+ - Generates comprehensive PR descriptions with testing checklists
10
+ - Supports both agent and skill PR types
11
+ - Validates conventional commit message format
12
+
13
+ Example:
14
+ >>> service = PRTemplateService()
15
+ >>> title = service.generate_pr_title("research", "improve memory efficiency", PRType.AGENT)
16
+ >>> print(title)
17
+ feat(agent): improve research - improve memory efficiency
18
+
19
+ >>> body = service.generate_agent_pr_body(
20
+ ... agent_name="research",
21
+ ... problem="Memory exhaustion with >50 files",
22
+ ... solution="Add hard limit of 5 files per session",
23
+ ... testing_notes="Tested with 100-file codebase",
24
+ ... related_issues=["#157"]
25
+ ... )
26
+ """
27
+
28
+ from enum import Enum
29
+ from typing import List, Optional
30
+
31
+
32
+ class PRType(Enum):
33
+ """Type of pull request."""
34
+
35
+ AGENT = "agent"
36
+ SKILL = "skill"
37
+
38
+
39
+ class PRTemplateService:
40
+ """
41
+ Service for generating PR templates.
42
+
43
+ Generates consistent PR titles and descriptions following
44
+ conventional commit format and best practices.
45
+ """
46
+
47
+ # Conventional commit types
48
+ COMMIT_TYPES = {
49
+ "feat": "New feature or enhancement",
50
+ "fix": "Bug fix",
51
+ "docs": "Documentation changes",
52
+ "refactor": "Code refactoring without feature changes",
53
+ "test": "Adding or updating tests",
54
+ "chore": "Maintenance tasks",
55
+ }
56
+
57
+ def generate_pr_title(
58
+ self,
59
+ item_name: str,
60
+ brief_description: str,
61
+ pr_type: PRType,
62
+ commit_type: str = "feat",
63
+ ) -> str:
64
+ """
65
+ Generate PR title in conventional commit format.
66
+
67
+ Format: {commit_type}({scope}): {item} - {brief_description}
68
+
69
+ Args:
70
+ item_name: Agent or skill name (e.g., "research", "fastapi-testing")
71
+ brief_description: Brief description (e.g., "improve memory handling")
72
+ pr_type: Type of PR (agent or skill)
73
+ commit_type: Conventional commit type (default: "feat")
74
+
75
+ Returns:
76
+ Formatted PR title
77
+
78
+ Example:
79
+ >>> service = PRTemplateService()
80
+ >>> service.generate_pr_title("research", "improve memory handling", PRType.AGENT)
81
+ 'feat(agent): improve research - improve memory handling'
82
+ """
83
+ scope = pr_type.value
84
+ return f"{commit_type}({scope}): improve {item_name} - {brief_description}"
85
+
86
+ def generate_agent_pr_body(
87
+ self,
88
+ agent_name: str,
89
+ problem: str,
90
+ solution: str,
91
+ testing_notes: str,
92
+ related_issues: Optional[List[str]] = None,
93
+ ) -> str:
94
+ """
95
+ Generate PR body for agent improvements.
96
+
97
+ Args:
98
+ agent_name: Agent name (e.g., "research")
99
+ problem: Problem statement (what wasn't working)
100
+ solution: Solution overview (what was changed)
101
+ testing_notes: Testing performed
102
+ related_issues: Related issue numbers (e.g., ["#157", "#142"])
103
+
104
+ Returns:
105
+ Formatted PR body in markdown
106
+
107
+ Example:
108
+ >>> service = PRTemplateService()
109
+ >>> body = service.generate_agent_pr_body(
110
+ ... agent_name="research",
111
+ ... problem="Memory exhaustion when analyzing >50 files",
112
+ ... solution="Add hard limit of 5 files per session with MCP summarizer",
113
+ ... testing_notes="Tested with 100-file codebase, memory stayed under 4GB",
114
+ ... related_issues=["#157"]
115
+ ... )
116
+ """
117
+ related_section = ""
118
+ if related_issues:
119
+ related_section = "\n\n## Related Issues\n\n"
120
+ for issue in related_issues:
121
+ # Check if it's just a number or already has #
122
+ issue_ref = issue if issue.startswith("#") else f"#{issue}"
123
+ related_section += f"Closes {issue_ref}\n"
124
+
125
+ return f"""## Problem Statement
126
+
127
+ {problem}
128
+
129
+ ## Proposed Solution
130
+
131
+ {solution}
132
+
133
+ ## Changes Made
134
+
135
+ **Agent:** `{agent_name}`
136
+
137
+ {self._format_changes_placeholder()}
138
+
139
+ ## Testing Performed
140
+
141
+ {testing_notes}
142
+
143
+ - [x] Validated YAML frontmatter syntax
144
+ - [x] Tested agent with sample tasks
145
+ - [x] Verified no regression in existing behavior
146
+ {related_section}
147
+ ## Checklist
148
+
149
+ - [x] Instructions are clear and unambiguous
150
+ - [x] No conflicting guidance
151
+ - [x] Follows agent architecture best practices
152
+ - [x] Documentation updated if needed
153
+
154
+ ---
155
+ 🤖 Generated with Claude MPM Agent Improver
156
+ Co-Authored-By: agent-improver <noreply@anthropic.com>
157
+ """
158
+
159
+ def generate_skill_pr_body(
160
+ self,
161
+ skill_name: str,
162
+ improvements: str,
163
+ justification: str,
164
+ examples: str,
165
+ related_issues: Optional[List[str]] = None,
166
+ ) -> str:
167
+ """
168
+ Generate PR body for skill improvements.
169
+
170
+ Args:
171
+ skill_name: Skill name (e.g., "fastapi-testing")
172
+ improvements: Description of improvements made
173
+ justification: Why these improvements were needed
174
+ examples: Examples added or updated
175
+ related_issues: Related issue numbers
176
+
177
+ Returns:
178
+ Formatted PR body in markdown
179
+
180
+ Example:
181
+ >>> service = PRTemplateService()
182
+ >>> body = service.generate_skill_pr_body(
183
+ ... skill_name="fastapi-testing",
184
+ ... improvements="Added async test patterns and database handling",
185
+ ... justification="Users struggled with async endpoint testing",
186
+ ... examples="pytest-asyncio config, AsyncClient usage, DB rollback patterns",
187
+ ... related_issues=["#203"]
188
+ ... )
189
+ """
190
+ related_section = ""
191
+ if related_issues:
192
+ related_section = "\n\n## Related Issues\n\n"
193
+ for issue in related_issues:
194
+ issue_ref = issue if issue.startswith("#") else f"#{issue}"
195
+ related_section += f"Requested by: Issue {issue_ref}\n"
196
+
197
+ return f"""## Skill Enhancement
198
+
199
+ **Skill:** `{skill_name}`
200
+
201
+ ## Motivation
202
+
203
+ {justification}
204
+
205
+ ## Improvements
206
+
207
+ {improvements}
208
+
209
+ ## Examples Added
210
+
211
+ {examples}
212
+
213
+ ## Testing
214
+
215
+ - [x] Validated YAML frontmatter
216
+ - [x] Verified skill syntax
217
+ - [x] Tested examples in relevant project
218
+ - [x] No conflicts with existing skills
219
+ {related_section}
220
+ ---
221
+ 🤖 Generated with Claude MPM Skills Manager
222
+ Co-Authored-By: skills-manager <noreply@anthropic.com>
223
+ """
224
+
225
+ def validate_conventional_commit(self, message: str) -> bool:
226
+ """
227
+ Validate that message follows conventional commit format.
228
+
229
+ Format: type(scope): description
230
+
231
+ Args:
232
+ message: Commit message to validate
233
+
234
+ Returns:
235
+ True if message follows conventional commit format
236
+
237
+ Example:
238
+ >>> service = PRTemplateService()
239
+ >>> service.validate_conventional_commit("feat(agent): improve research")
240
+ True
241
+ >>> service.validate_conventional_commit("improve research agent")
242
+ False
243
+ """
244
+ if not message:
245
+ return False
246
+
247
+ # Extract first line (title)
248
+ first_line = message.split("\n")[0]
249
+
250
+ # Check basic format: type(scope): description
251
+ if ":" not in first_line:
252
+ return False
253
+
254
+ # Split into type/scope and description
255
+ parts = first_line.split(":", 1)
256
+ if len(parts) != 2:
257
+ return False
258
+
259
+ type_scope = parts[0].strip()
260
+ description = parts[1].strip()
261
+
262
+ # Check type(scope) format
263
+ if "(" not in type_scope or ")" not in type_scope:
264
+ return False
265
+
266
+ # Extract type
267
+ commit_type = type_scope.split("(")[0].strip()
268
+
269
+ # Validate type is recognized
270
+ if commit_type not in self.COMMIT_TYPES:
271
+ return False
272
+
273
+ # Check description is not empty
274
+ if not description:
275
+ return False
276
+
277
+ return True
278
+
279
+ def _format_changes_placeholder(self) -> str:
280
+ """
281
+ Generate placeholder text for changes section.
282
+
283
+ Returns:
284
+ Formatted changes placeholder
285
+ """
286
+ return """_Detailed changes will be visible in the diff. Key modifications:_
287
+ - [List specific instruction changes]
288
+ - [List frontmatter updates if any]
289
+ - [List any related file changes]"""
290
+
291
+ def generate_commit_message(
292
+ self,
293
+ item_name: str,
294
+ brief_description: str,
295
+ detailed_changes: str,
296
+ pr_type: PRType,
297
+ commit_type: str = "feat",
298
+ ) -> str:
299
+ """
300
+ Generate conventional commit message.
301
+
302
+ Args:
303
+ item_name: Agent or skill name
304
+ brief_description: Brief description
305
+ detailed_changes: Detailed list of changes
306
+ pr_type: Type (agent or skill)
307
+ commit_type: Conventional commit type
308
+
309
+ Returns:
310
+ Formatted commit message
311
+
312
+ Example:
313
+ >>> service = PRTemplateService()
314
+ >>> msg = service.generate_commit_message(
315
+ ... "research",
316
+ ... "improve memory efficiency",
317
+ ... "- Add hard limit of 5 files\\n- Document MCP summarizer",
318
+ ... PRType.AGENT
319
+ ... )
320
+ """
321
+ scope = pr_type.value
322
+ title = f"{commit_type}({scope}): improve {item_name} - {brief_description}"
323
+
324
+ return f"""{title}
325
+
326
+ {detailed_changes}
327
+
328
+ 🤖 Generated with Claude MPM
329
+ """
@@ -369,7 +369,8 @@ class DocumentationManager:
369
369
  sorted_sections = sorted(
370
370
  sections.items(),
371
371
  key=lambda x: self.SECTION_PRIORITY.get(
372
- self._get_section_key(x[0]), 50 # Default priority
372
+ self._get_section_key(x[0]),
373
+ 50, # Default priority
373
374
  ),
374
375
  reverse=True, # Higher priority first
375
376
  )
@@ -58,6 +58,10 @@ class ProjectOrganizer:
58
58
  ".mcp-vector-search/",
59
59
  ".kuzu-memory/",
60
60
  "kuzu-memories/", # kuzu-memory database directory
61
+ # User-specific config files (should NOT be committed)
62
+ ".mcp.json",
63
+ ".claude.json",
64
+ ".claude/",
61
65
  # Python artifacts
62
66
  "__pycache__/",
63
67
  "*.py[cod]",
@@ -318,7 +318,9 @@ class ToolchainAnalyzerService(BaseService, IToolchainAnalyzer):
318
318
  else (
319
319
  3
320
320
  if f.confidence == ConfidenceLevel.MEDIUM
321
- else 2 if f.confidence == ConfidenceLevel.LOW else 1
321
+ else 2
322
+ if f.confidence == ConfidenceLevel.LOW
323
+ else 1
322
324
  )
323
325
  ),
324
326
  f.popularity_score,
@@ -10,10 +10,14 @@ This service handles:
10
10
  5. Hook service registration
11
11
 
12
12
  Extracted from ClaudeRunner to follow Single Responsibility Principle.
13
+
14
+ DEPENDENCY INJECTION:
15
+ This service uses protocol-based dependency injection to avoid circular imports
16
+ when registering the SessionManagementService.
13
17
  """
14
18
 
15
19
  import os
16
- from typing import Any, Dict, List, Optional, Tuple
20
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
17
21
 
18
22
  from claude_mpm.core.base_service import BaseService
19
23
  from claude_mpm.core.config import Config
@@ -22,6 +26,13 @@ from claude_mpm.core.logger import get_project_logger
22
26
  from claude_mpm.core.shared.config_loader import ConfigLoader
23
27
  from claude_mpm.services.core.interfaces import RunnerConfigurationInterface
24
28
 
29
+ # Protocol imports for type checking without circular dependencies
30
+ if TYPE_CHECKING:
31
+ from claude_mpm.core.protocols import ClaudeRunnerProtocol
32
+ else:
33
+ # At runtime, accept any object with matching interface
34
+ ClaudeRunnerProtocol = Any
35
+
25
36
 
26
37
  class RunnerConfigurationService(BaseService, RunnerConfigurationInterface):
27
38
  """Service for configuring and initializing ClaudeRunner components."""
@@ -168,6 +179,7 @@ class RunnerConfigurationService(BaseService, RunnerConfigurationInterface):
168
179
  "launch_method": kwargs.get("launch_method", "exec"),
169
180
  "enable_websocket": kwargs.get("enable_websocket", False),
170
181
  "websocket_port": kwargs.get("websocket_port", 8765),
182
+ "use_native_agents": kwargs.get("use_native_agents", False),
171
183
  }
172
184
 
173
185
  # Initialize main configuration using ConfigLoader
@@ -494,12 +506,14 @@ class RunnerConfigurationService(BaseService, RunnerConfigurationInterface):
494
506
  )
495
507
  return None
496
508
 
497
- def register_session_management_service(self, container, runner):
509
+ def register_session_management_service(
510
+ self, container, runner: "ClaudeRunnerProtocol"
511
+ ):
498
512
  """Register session management service in the DI container.
499
513
 
500
514
  Args:
501
515
  container: DI container instance
502
- runner: ClaudeRunner instance dependency
516
+ runner: ClaudeRunner instance (or any object matching ClaudeRunnerProtocol)
503
517
 
504
518
  Returns:
505
519
  Initialized session management service or None if failed
@@ -4,9 +4,11 @@ Self-Upgrade Service
4
4
 
5
5
  Handles version checking and self-upgrade functionality for claude-mpm.
6
6
  Supports pip, pipx, and npm installations with automatic detection.
7
+ Also checks Claude Code version compatibility.
7
8
 
8
9
  WHY: Users should be notified of updates and have an easy way to upgrade
9
- without manually running installation commands.
10
+ without manually running installation commands. Claude Code version checking
11
+ ensures compatibility with required features.
10
12
 
11
13
  DESIGN DECISIONS:
12
14
  - Detects installation method (pip/pipx/npm/editable)
@@ -14,9 +16,11 @@ DESIGN DECISIONS:
14
16
  - Interactive upgrade prompts with confirmation
15
17
  - Automatic restart after upgrade
16
18
  - Graceful failure handling (never breaks existing installation)
19
+ - Claude Code version detection and compatibility checking
17
20
  """
18
21
 
19
22
  import os
23
+ import re
20
24
  import subprocess
21
25
  import sys
22
26
  from datetime import datetime, timezone
@@ -47,17 +51,23 @@ class SelfUpgradeService:
47
51
  Capabilities:
48
52
  - Detect current installation method
49
53
  - Check PyPI/npm for latest version
54
+ - Check Claude Code version and compatibility
50
55
  - Prompt user for upgrade confirmation
51
56
  - Execute upgrade command
52
57
  - Restart after upgrade
53
58
  """
54
59
 
60
+ # Claude Code version requirements
61
+ CLAUDE_CODE_MIN_VERSION = "1.0.92"
62
+ CLAUDE_CODE_RECOMMENDED_VERSION = "2.0.30"
63
+
55
64
  def __init__(self):
56
65
  """Initialize the self-upgrade service."""
57
66
  self.logger = get_logger("SelfUpgradeService")
58
67
  self.version_checker = PackageVersionChecker()
59
68
  self.current_version = self._get_current_version()
60
69
  self.installation_method = self._detect_installation_method()
70
+ self.claude_code_version = self._get_claude_code_version()
61
71
 
62
72
  def _get_current_version(self) -> str:
63
73
  """
@@ -117,6 +127,109 @@ class SelfUpgradeService:
117
127
  # Default to pip
118
128
  return InstallationMethod.PIP
119
129
 
130
+ def _get_claude_code_version(self) -> Optional[str]:
131
+ """
132
+ Get the installed Claude Code version.
133
+
134
+ Returns:
135
+ Version string (e.g., "2.0.30") or None if not installed
136
+ """
137
+ try:
138
+ # Try to get Claude Code version via CLI
139
+ result = subprocess.run(
140
+ ["claude", "--version"],
141
+ check=False,
142
+ capture_output=True,
143
+ text=True,
144
+ timeout=5,
145
+ )
146
+ if result.returncode == 0:
147
+ # Parse version from output
148
+ # Expected format: "Claude Code 2.0.30" or similar
149
+ match = re.search(r"(\d+\.\d+\.\d+)", result.stdout)
150
+ if match:
151
+ return match.group(1)
152
+ except (FileNotFoundError, subprocess.TimeoutExpired):
153
+ # Claude Code not installed or command not found
154
+ pass
155
+ except Exception as e:
156
+ self.logger.debug(f"Failed to detect Claude Code version: {e}")
157
+
158
+ return None
159
+
160
+ def check_claude_code_compatibility(self) -> Dict[str, any]:
161
+ """
162
+ Check Claude Code version compatibility.
163
+
164
+ Returns:
165
+ Dict with compatibility information:
166
+ {
167
+ "installed": bool,
168
+ "version": str or None,
169
+ "meets_minimum": bool,
170
+ "is_recommended": bool,
171
+ "status": str,
172
+ "message": str
173
+ }
174
+ """
175
+ if not self.claude_code_version:
176
+ return {
177
+ "installed": False,
178
+ "version": None,
179
+ "meets_minimum": False,
180
+ "is_recommended": False,
181
+ "status": "not_installed",
182
+ "message": (
183
+ "Claude Code is not installed or not in PATH.\n"
184
+ " Install from: https://docs.anthropic.com/en/docs/claude-code"
185
+ ),
186
+ }
187
+
188
+ try:
189
+ current = version.parse(self.claude_code_version)
190
+ minimum = version.parse(self.CLAUDE_CODE_MIN_VERSION)
191
+ recommended = version.parse(self.CLAUDE_CODE_RECOMMENDED_VERSION)
192
+
193
+ meets_minimum = current >= minimum
194
+ is_recommended = current >= recommended
195
+
196
+ if is_recommended:
197
+ status = "optimal"
198
+ message = f"Claude Code v{self.claude_code_version} (optimal version)"
199
+ elif meets_minimum:
200
+ status = "compatible"
201
+ message = (
202
+ f"Claude Code v{self.claude_code_version} is compatible\n"
203
+ f" Recommended: Upgrade to v{self.CLAUDE_CODE_RECOMMENDED_VERSION}+ for best experience"
204
+ )
205
+ else:
206
+ status = "outdated"
207
+ message = (
208
+ f"Claude Code v{self.claude_code_version} is outdated\n"
209
+ f" Minimum required: v{self.CLAUDE_CODE_MIN_VERSION}\n"
210
+ f" Recommended: v{self.CLAUDE_CODE_RECOMMENDED_VERSION}+"
211
+ )
212
+
213
+ return {
214
+ "installed": True,
215
+ "version": self.claude_code_version,
216
+ "meets_minimum": meets_minimum,
217
+ "is_recommended": is_recommended,
218
+ "status": status,
219
+ "message": message,
220
+ }
221
+
222
+ except Exception as e:
223
+ self.logger.debug(f"Version comparison failed: {e}")
224
+ return {
225
+ "installed": True,
226
+ "version": self.claude_code_version,
227
+ "meets_minimum": False,
228
+ "is_recommended": False,
229
+ "status": "unknown",
230
+ "message": f"Unable to verify Claude Code version: {e}",
231
+ }
232
+
120
233
  async def check_for_update(
121
234
  self, cache_ttl: Optional[int] = None
122
235
  ) -> Optional[Dict[str, any]]:
@@ -212,7 +325,7 @@ class SelfUpgradeService:
212
325
 
213
326
  def prompt_for_upgrade(self, update_info: Dict[str, any]) -> bool:
214
327
  """
215
- Prompt user to upgrade.
328
+ Prompt user to upgrade with enhanced formatting.
216
329
 
217
330
  Args:
218
331
  update_info: Update information dict
@@ -224,11 +337,19 @@ class SelfUpgradeService:
224
337
  latest = update_info["latest"]
225
338
  method = update_info.get("installation_method", "unknown")
226
339
 
227
- print("\n🎉 New version available!")
340
+ # Enhanced notification with release notes link
341
+ print("\n" + "=" * 70)
342
+ print("📢 Update Available for claude-mpm")
343
+ print("=" * 70)
228
344
  print(f" Current: v{current}")
229
345
  print(f" Latest: v{latest}")
230
- print(f" Installation method: {method}")
231
- print(f"\nTo upgrade, run: {update_info['upgrade_command']}")
346
+ print(f" Method: {method}")
347
+ print()
348
+ print(f" Upgrade: {update_info['upgrade_command']}")
349
+ print(
350
+ f" Release: https://github.com/bobmatnyc/claude-mpm/releases/tag/v{latest}"
351
+ )
352
+ print("=" * 70)
232
353
 
233
354
  try:
234
355
  response = input("\nWould you like to upgrade now? [y/N]: ").strip().lower()
@@ -237,6 +358,24 @@ class SelfUpgradeService:
237
358
  print("\n")
238
359
  return False
239
360
 
361
+ def display_update_notification(self, update_info: Dict[str, any]) -> None:
362
+ """
363
+ Display a non-interactive update notification.
364
+
365
+ Args:
366
+ update_info: Update information dict
367
+ """
368
+ current = update_info["current"]
369
+ latest = update_info["latest"]
370
+ command = update_info.get("upgrade_command", "pip install --upgrade claude-mpm")
371
+
372
+ print(f"\nℹ️ Update available: v{current} → v{latest}")
373
+ print(f" Run: {command}")
374
+ print(
375
+ f" Release notes: https://github.com/bobmatnyc/claude-mpm/releases/tag/v{latest}"
376
+ )
377
+ print()
378
+
240
379
  def perform_upgrade(self, update_info: Dict[str, any]) -> Tuple[bool, str]:
241
380
  """
242
381
  Perform the upgrade.
@@ -309,13 +448,15 @@ class SelfUpgradeService:
309
448
  print("Please restart claude-mpm manually.")
310
449
 
311
450
  async def check_and_prompt_on_startup(
312
- self, auto_upgrade: bool = False
451
+ self, auto_upgrade: bool = False, check_claude_code: bool = True
313
452
  ) -> Optional[Dict[str, any]]:
314
453
  """
315
454
  Check for updates on startup and optionally prompt user.
455
+ Also checks Claude Code version compatibility.
316
456
 
317
457
  Args:
318
458
  auto_upgrade: If True, upgrade without prompting (use with caution)
459
+ check_claude_code: If True, also check Claude Code compatibility
319
460
 
320
461
  Returns:
321
462
  Update info if available, None otherwise
@@ -325,14 +466,31 @@ class SelfUpgradeService:
325
466
  return None
326
467
 
327
468
  try:
469
+ # Check Claude Code compatibility first
470
+ if check_claude_code:
471
+ claude_compat = self.check_claude_code_compatibility()
472
+ if not claude_compat["installed"]:
473
+ print("\n⚠️ Claude Code Not Detected")
474
+ print(" " + claude_compat["message"])
475
+ elif claude_compat["status"] == "outdated":
476
+ print("\n⚠️ Claude Code Outdated")
477
+ print(" " + claude_compat["message"].replace("\n", "\n "))
478
+ elif claude_compat["status"] == "compatible":
479
+ # Only show if verbose or debug
480
+ self.logger.debug(claude_compat["message"])
481
+
482
+ # Check for claude-mpm updates
328
483
  update_info = await self.check_for_update()
329
484
 
330
485
  if update_info and update_info.get("update_available"):
331
- if auto_upgrade or self.prompt_for_upgrade(update_info):
486
+ if auto_upgrade:
332
487
  success, message = self.perform_upgrade(update_info)
333
488
  print(message)
334
489
  if success:
335
490
  self.restart_after_upgrade()
491
+ else:
492
+ # Just display notification, don't prompt during startup
493
+ self.display_update_notification(update_info)
336
494
 
337
495
  return update_info
338
496