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.
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
@@ -0,0 +1,131 @@
1
+ """Protocol definitions for session management dependencies.
2
+
3
+ These protocols use Python's typing.Protocol for structural subtyping,
4
+ allowing dependency injection without circular imports.
5
+ """
6
+
7
+ from typing import Any, Dict, Optional, Protocol, Tuple
8
+
9
+
10
+ class InteractiveSessionProtocol(Protocol):
11
+ """Protocol for interactive session orchestration.
12
+
13
+ This protocol defines the interface that SessionManagementService
14
+ needs from InteractiveSession without requiring a full import.
15
+ """
16
+
17
+ def initialize_interactive_session(self) -> Tuple[bool, Optional[str]]:
18
+ """Initialize the interactive session environment.
19
+
20
+ Returns:
21
+ Tuple of (success, error_message)
22
+ """
23
+ ...
24
+
25
+ def setup_interactive_environment(self) -> Tuple[bool, Dict[str, Any]]:
26
+ """Set up the interactive environment including agents and commands.
27
+
28
+ Returns:
29
+ Tuple of (success, environment_dict)
30
+ """
31
+ ...
32
+
33
+ def handle_interactive_input(self, environment: Dict[str, Any]) -> bool:
34
+ """Handle the interactive input/output loop.
35
+
36
+ Args:
37
+ environment: Dictionary with command, env vars, and session info
38
+
39
+ Returns:
40
+ True if successful, False otherwise
41
+ """
42
+ ...
43
+
44
+ def cleanup_interactive_session(self) -> None:
45
+ """Clean up resources after interactive session ends."""
46
+ ...
47
+
48
+
49
+ class OneshotSessionProtocol(Protocol):
50
+ """Protocol for oneshot session orchestration.
51
+
52
+ This protocol defines the interface that SessionManagementService
53
+ needs from OneshotSession without requiring a full import.
54
+ """
55
+
56
+ def initialize_session(self, prompt: str) -> Tuple[bool, Optional[str]]:
57
+ """Initialize the oneshot session.
58
+
59
+ Args:
60
+ prompt: The command or prompt to execute
61
+
62
+ Returns:
63
+ Tuple of (success, error_message)
64
+ """
65
+ ...
66
+
67
+ def deploy_agents(self) -> bool:
68
+ """Deploy agents for the session.
69
+
70
+ Returns:
71
+ True if successful, False otherwise
72
+ """
73
+ ...
74
+
75
+ def setup_infrastructure(self) -> Dict[str, Any]:
76
+ """Set up session infrastructure.
77
+
78
+ Returns:
79
+ Dictionary with infrastructure configuration
80
+ """
81
+ ...
82
+
83
+ def execute_command(
84
+ self, prompt: str, context: Optional[str], infrastructure: Dict[str, Any]
85
+ ) -> Tuple[bool, Optional[str]]:
86
+ """Execute the command with given context and infrastructure.
87
+
88
+ Args:
89
+ prompt: Command to execute
90
+ context: Optional context
91
+ infrastructure: Infrastructure configuration
92
+
93
+ Returns:
94
+ Tuple of (success, response)
95
+ """
96
+ ...
97
+
98
+ def cleanup_session(self) -> None:
99
+ """Clean up session resources."""
100
+ ...
101
+
102
+
103
+ class SessionManagementProtocol(Protocol):
104
+ """Protocol for session management service.
105
+
106
+ This protocol defines the interface that ClaudeRunner needs from
107
+ SessionManagementService without requiring a full import.
108
+ """
109
+
110
+ def run_interactive_session(self, initial_context: Optional[str] = None) -> bool:
111
+ """Run Claude in interactive mode.
112
+
113
+ Args:
114
+ initial_context: Optional initial context to pass to Claude
115
+
116
+ Returns:
117
+ True if successful, False otherwise
118
+ """
119
+ ...
120
+
121
+ def run_oneshot_session(self, prompt: str, context: Optional[str] = None) -> bool:
122
+ """Run Claude with a single prompt.
123
+
124
+ Args:
125
+ prompt: The command or prompt to execute
126
+ context: Optional context to prepend to the prompt
127
+
128
+ Returns:
129
+ True if successful, False otherwise
130
+ """
131
+ ...
@@ -16,11 +16,14 @@ class SingletonManager:
16
16
 
17
17
  Reduces duplication by providing thread-safe singleton patterns
18
18
  that can be used across different classes.
19
+
20
+ Uses RLock (reentrant locks) to support recursive calls from
21
+ SingletonMixin.__new__ and @singleton decorator patterns.
19
22
  """
20
23
 
21
24
  _instances: Dict[Type, Any] = {}
22
- _locks: Dict[Type, threading.Lock] = {}
23
- _global_lock = threading.Lock()
25
+ _locks: Dict[Type, threading.RLock] = {}
26
+ _global_lock = threading.RLock()
24
27
 
25
28
  @classmethod
26
29
  def get_instance(
@@ -42,7 +45,7 @@ class SingletonManager:
42
45
  if singleton_class not in cls._locks:
43
46
  with cls._global_lock:
44
47
  if singleton_class not in cls._locks:
45
- cls._locks[singleton_class] = threading.Lock()
48
+ cls._locks[singleton_class] = threading.RLock()
46
49
 
47
50
  # Get instance with class-specific lock
48
51
  with cls._locks[singleton_class]:
@@ -50,9 +53,13 @@ class SingletonManager:
50
53
  logger = get_logger("singleton_manager")
51
54
  logger.debug(f"Creating singleton instance: {singleton_class.__name__}")
52
55
 
53
- instance = singleton_class(*args, **kwargs)
56
+ # Use object.__new__ to bypass SingletonMixin.__new__ and avoid recursion
57
+ instance = object.__new__(singleton_class)
54
58
  cls._instances[singleton_class] = instance
55
59
 
60
+ # Now call __init__ explicitly with the stored instance
61
+ instance.__init__(*args, **kwargs)
62
+
56
63
  return instance
57
64
 
58
65
  return cls._instances[singleton_class]
@@ -0,0 +1,38 @@
1
+ """System context utilities for Claude runner.
2
+
3
+ This module provides shared context creation functions that can be used
4
+ across different modules without circular dependencies.
5
+ """
6
+
7
+
8
+ def create_simple_context() -> str:
9
+ """Create basic context for Claude.
10
+
11
+ This function is extracted to avoid circular imports between
12
+ claude_runner.py and interactive_session.py.
13
+
14
+ Returns:
15
+ Basic system context string for Claude
16
+ """
17
+ return """You are Claude Code running in Claude MPM (Multi-Agent Project Manager).
18
+
19
+ You have access to native subagents via the Task tool with subagent_type parameter:
20
+ - engineer: For coding, implementation, and technical tasks
21
+ - qa: For testing, validation, and quality assurance
22
+ - documentation: For docs, guides, and explanations
23
+ - research: For investigation and analysis
24
+ - security: For security-related tasks
25
+ - ops: For deployment and infrastructure
26
+ - version-control: For git and version management
27
+ - data-engineer: For data processing and APIs
28
+
29
+ Use these agents by calling: Task(description="task description", subagent_type="agent_name")
30
+
31
+ IMPORTANT: The Task tool accepts both naming formats:
32
+ - Capitalized format: "Research", "Engineer", "QA", "Version Control", "Data Engineer"
33
+ - Lowercase format: "research", "engineer", "qa", "version-control", "data-engineer"
34
+
35
+ Both formats work correctly. When you see capitalized names (matching TodoWrite prefixes),
36
+ automatically normalize them to lowercase-hyphenated format for the Task tool.
37
+
38
+ Work efficiently and delegate appropriately to subagents when needed."""
@@ -218,6 +218,27 @@ class DevelopmentConfig(BaseModel):
218
218
  )
219
219
 
220
220
 
221
+ class DocumentationConfig(BaseModel):
222
+ """Documentation routing and management configuration."""
223
+
224
+ docs_path: str = Field(
225
+ default="docs/research/",
226
+ description="Default path for session documentation (relative to project root)",
227
+ )
228
+ attach_to_tickets: bool = Field(
229
+ default=True,
230
+ description="Attach work products to tickets when ticket context exists",
231
+ )
232
+ backup_locally: bool = Field(
233
+ default=True,
234
+ description="Always create local backup copies of documentation",
235
+ )
236
+ enable_ticket_detection: bool = Field(
237
+ default=True,
238
+ description="Enable automatic ticket context detection from user messages",
239
+ )
240
+
241
+
221
242
  class UnifiedConfig(BaseSettings):
222
243
  """
223
244
  Unified configuration model for Claude MPM.
@@ -242,6 +263,7 @@ class UnifiedConfig(BaseSettings):
242
263
  performance: PerformanceConfig = Field(default_factory=PerformanceConfig)
243
264
  sessions: SessionConfig = Field(default_factory=SessionConfig)
244
265
  development: DevelopmentConfig = Field(default_factory=DevelopmentConfig)
266
+ documentation: DocumentationConfig = Field(default_factory=DocumentationConfig)
245
267
 
246
268
  # Path configuration
247
269
  base_path: Optional[Path] = Field(
@@ -31,11 +31,7 @@ import click
31
31
 
32
32
  from claude_mpm.core.logging_utils import get_logger
33
33
  from claude_mpm.hooks.validation_hooks import ValidationHooks
34
- from claude_mpm.utils.error_handler import (
35
- ErrorContext,
36
- MPMError,
37
- handle_errors,
38
- )
34
+ from claude_mpm.utils.error_handler import ErrorContext, MPMError, handle_errors
39
35
  from claude_mpm.validation import AgentValidator, ValidationResult
40
36
 
41
37
  logger = get_logger(__name__)
@@ -5,8 +5,19 @@ This module provides utilities for integrating with the memory system,
5
5
  including pre and post delegation hooks.
6
6
  """
7
7
 
8
- import os
8
+ import logging
9
9
  import sys
10
+
11
+ # Reconfigure logging to INFO level BEFORE kuzu-memory imports
12
+ # This overrides kuzu-memory's WARNING-level basicConfig (fixes 1M-445)
13
+ logging.basicConfig(
14
+ level=logging.INFO,
15
+ format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
16
+ force=True, # Python 3.8+ - reconfigures root logger
17
+ stream=sys.stderr,
18
+ )
19
+
20
+ import os
10
21
  from datetime import datetime, timezone
11
22
  from typing import Optional
12
23
 
@@ -35,14 +35,8 @@ Usage:
35
35
  hook_service.register_hook(get_learning_extraction_hook())
36
36
  """
37
37
 
38
- from .failure_detection_hook import (
39
- FailureDetectionHook,
40
- get_failure_detection_hook,
41
- )
42
- from .fix_detection_hook import (
43
- FixDetectionHook,
44
- get_fix_detection_hook,
45
- )
38
+ from .failure_detection_hook import FailureDetectionHook, get_failure_detection_hook
39
+ from .fix_detection_hook import FixDetectionHook, get_fix_detection_hook
46
40
  from .learning_extraction_hook import (
47
41
  LearningExtractionHook,
48
42
  get_learning_extraction_hook,
@@ -21,12 +21,7 @@ Integration points:
21
21
  import logging
22
22
  from typing import Any, Dict
23
23
 
24
- from claude_mpm.hooks.base_hook import (
25
- BaseHook,
26
- HookContext,
27
- HookResult,
28
- HookType,
29
- )
24
+ from claude_mpm.hooks.base_hook import BaseHook, HookContext, HookResult, HookType
30
25
  from claude_mpm.services.memory.failure_tracker import get_failure_tracker
31
26
 
32
27
  logger = logging.getLogger(__name__)
@@ -23,12 +23,7 @@ Integration points:
23
23
  import logging
24
24
  from typing import Any, Dict
25
25
 
26
- from claude_mpm.hooks.base_hook import (
27
- BaseHook,
28
- HookContext,
29
- HookResult,
30
- HookType,
31
- )
26
+ from claude_mpm.hooks.base_hook import BaseHook, HookContext, HookResult, HookType
32
27
  from claude_mpm.services.memory.failure_tracker import get_failure_tracker
33
28
 
34
29
  logger = logging.getLogger(__name__)
@@ -23,12 +23,7 @@ Integration points:
23
23
  import logging
24
24
  from typing import Any
25
25
 
26
- from claude_mpm.hooks.base_hook import (
27
- BaseHook,
28
- HookContext,
29
- HookResult,
30
- HookType,
31
- )
26
+ from claude_mpm.hooks.base_hook import BaseHook, HookContext, HookResult, HookType
32
27
  from claude_mpm.services.memory.failure_tracker import get_failure_tracker
33
28
 
34
29
  logger = logging.getLogger(__name__)
@@ -20,11 +20,7 @@ DESIGN DECISIONS:
20
20
  import logging
21
21
  from typing import Any, Optional
22
22
 
23
- from claude_mpm.hooks.base_hook import (
24
- HookContext,
25
- HookResult,
26
- PostDelegationHook,
27
- )
23
+ from claude_mpm.hooks.base_hook import HookContext, HookResult, PostDelegationHook
28
24
  from claude_mpm.hooks.kuzu_memory_hook import get_kuzu_memory_hook
29
25
 
30
26
  logger = logging.getLogger(__name__)
@@ -0,0 +1,198 @@
1
+ """Git repository model for agent sources."""
2
+
3
+ from dataclasses import dataclass
4
+ from datetime import datetime
5
+ from pathlib import Path
6
+ from typing import Optional
7
+ from urllib.parse import urlparse
8
+
9
+
10
+ @dataclass
11
+ class GitRepository:
12
+ """Represents a Git repository configuration for agent sources.
13
+
14
+ This model tracks Git repositories that contain agent markdown files.
15
+ Repositories are cached locally and synced using ETag-based HTTP caching.
16
+
17
+ Attributes:
18
+ url: Full GitHub repository URL (e.g., https://github.com/owner/repo)
19
+ subdirectory: Optional subdirectory within repository (e.g., "agents/backend")
20
+ enabled: Whether this repository should be synced
21
+ priority: Priority for agent resolution (lower = higher precedence)
22
+ last_synced: Timestamp of last successful sync
23
+ etag: HTTP ETag from last sync for incremental updates
24
+ """
25
+
26
+ url: str
27
+ subdirectory: Optional[str] = None
28
+ enabled: bool = True
29
+ priority: int = 100
30
+ last_synced: Optional[datetime] = None
31
+ etag: Optional[str] = None
32
+
33
+ @property
34
+ def cache_path(self) -> Path:
35
+ """Return cache directory path for this repository.
36
+
37
+ Cache structure: ~/.claude-mpm/cache/remote-agents/{owner}/{repo}/{subdirectory}/
38
+
39
+ Returns:
40
+ Absolute path to cache directory for this repository
41
+
42
+ Example:
43
+ >>> repo = GitRepository(
44
+ ... url="https://github.com/bobmatnyc/claude-mpm-agents",
45
+ ... subdirectory="agents"
46
+ ... )
47
+ >>> repo.cache_path
48
+ Path('/Users/user/.claude-mpm/cache/remote-agents/bobmatnyc/claude-mpm-agents/agents')
49
+ """
50
+ home = Path.home()
51
+ base_cache = home / ".claude-mpm" / "cache" / "remote-agents"
52
+
53
+ # Extract owner and repo from URL
54
+ owner, repo = self._parse_github_url(self.url)
55
+
56
+ # Build cache path: base/owner/repo/subdirectory
57
+ cache_path = base_cache / owner / repo
58
+
59
+ if self.subdirectory:
60
+ # Normalize subdirectory path (remove leading/trailing slashes)
61
+ normalized_subdir = self.subdirectory.strip("/")
62
+ cache_path = cache_path / normalized_subdir
63
+
64
+ return cache_path
65
+
66
+ @property
67
+ def identifier(self) -> str:
68
+ """Return unique identifier for this repository.
69
+
70
+ Format: {owner}/{repo}/{subdirectory} or {owner}/{repo}
71
+
72
+ Returns:
73
+ Unique identifier string
74
+
75
+ Example:
76
+ >>> repo = GitRepository(
77
+ ... url="https://github.com/owner/repo",
78
+ ... subdirectory="agents"
79
+ ... )
80
+ >>> repo.identifier
81
+ 'owner/repo/agents'
82
+ """
83
+ owner, repo = self._parse_github_url(self.url)
84
+ base_id = f"{owner}/{repo}"
85
+
86
+ if self.subdirectory:
87
+ normalized_subdir = self.subdirectory.strip("/")
88
+ return f"{base_id}/{normalized_subdir}"
89
+
90
+ return base_id
91
+
92
+ def validate(self) -> list[str]:
93
+ """Validate repository configuration.
94
+
95
+ Returns:
96
+ List of validation error messages (empty if valid)
97
+
98
+ Validation checks:
99
+ - URL is not empty
100
+ - URL is valid HTTP/HTTPS format
101
+ - URL is a GitHub repository URL
102
+ - Priority is non-negative
103
+ - Priority is reasonable (<= 1000, warning only)
104
+ - Subdirectory is relative path (not absolute)
105
+ """
106
+ errors = []
107
+
108
+ # Validate URL
109
+ if not self.url or not self.url.strip():
110
+ errors.append("URL cannot be empty")
111
+ return errors # Can't continue validation without URL
112
+
113
+ # Check URL format
114
+ try:
115
+ parsed = urlparse(self.url)
116
+
117
+ # Must be HTTP or HTTPS
118
+ if parsed.scheme not in ("http", "https"):
119
+ errors.append(
120
+ f"URL must use http:// or https:// protocol, got: {parsed.scheme}"
121
+ )
122
+
123
+ # Must be GitHub (for now)
124
+ if not parsed.netloc.endswith("github.com"):
125
+ errors.append(f"URL must be a GitHub repository, got: {parsed.netloc}")
126
+
127
+ # Should have owner/repo path structure
128
+ path_parts = [p for p in parsed.path.strip("/").split("/") if p]
129
+ if len(path_parts) < 2:
130
+ errors.append(f"URL must include owner/repo path, got: {parsed.path}")
131
+
132
+ except Exception as e:
133
+ errors.append(f"Invalid URL format: {e}")
134
+
135
+ # Validate priority
136
+ if self.priority < 0:
137
+ errors.append("Priority must be non-negative (0 or greater)")
138
+
139
+ if self.priority > 1000:
140
+ errors.append(
141
+ f"Priority {self.priority} is unusually high (recommended: 0-1000). "
142
+ "Lower priority numbers have higher precedence."
143
+ )
144
+
145
+ # Validate subdirectory
146
+ if self.subdirectory:
147
+ # Must be relative path
148
+ if Path(self.subdirectory).is_absolute():
149
+ errors.append(
150
+ f"Subdirectory must be a relative path, got absolute: {self.subdirectory}"
151
+ )
152
+
153
+ # Should not start with slash
154
+ if self.subdirectory.startswith("/"):
155
+ errors.append(
156
+ f"Subdirectory should not start with '/', got: {self.subdirectory}"
157
+ )
158
+
159
+ return errors
160
+
161
+ def _parse_github_url(self, url: str) -> tuple[str, str]:
162
+ """Parse GitHub URL to extract owner and repository name.
163
+
164
+ Args:
165
+ url: GitHub repository URL
166
+
167
+ Returns:
168
+ Tuple of (owner, repository_name)
169
+
170
+ Example:
171
+ >>> repo = GitRepository(url="https://github.com/owner/repo")
172
+ >>> repo._parse_github_url(repo.url)
173
+ ('owner', 'repo')
174
+ """
175
+ # Remove .git suffix if present
176
+ url = url.rstrip("/")
177
+ if url.endswith(".git"):
178
+ url = url[:-4]
179
+
180
+ # Parse URL
181
+ parsed = urlparse(url)
182
+ path_parts = [p for p in parsed.path.strip("/").split("/") if p]
183
+
184
+ if len(path_parts) >= 2:
185
+ owner = path_parts[0]
186
+ repo = path_parts[1]
187
+ return owner, repo
188
+
189
+ # Fallback: Use URL as-is if parsing fails
190
+ # This will be caught by validation
191
+ return "unknown", "unknown"
192
+
193
+ def __repr__(self) -> str:
194
+ """Return string representation of repository."""
195
+ return (
196
+ f"GitRepository(identifier='{self.identifier}', "
197
+ f"priority={self.priority}, enabled={self.enabled})"
198
+ )
@@ -8,12 +8,13 @@ This service provides comprehensive agent lifecycle management including:
8
8
  - Integration with deployment services
9
9
  """
10
10
 
11
- import json
12
11
  import re
13
12
  from datetime import datetime, timezone
14
13
  from pathlib import Path
15
14
  from typing import Any, ClassVar, Dict, List, Optional, Tuple
16
15
 
16
+ import yaml
17
+
17
18
  from claude_mpm.core.exceptions import AgentDeploymentError
18
19
  from claude_mpm.core.logging_config import get_logger
19
20
 
@@ -285,10 +286,15 @@ class AgentBuilderService:
285
286
  if not self.templates_dir.exists():
286
287
  return templates
287
288
 
288
- for template_file in self.templates_dir.glob("*.json"):
289
+ # Agent templates migrated to Markdown with YAML frontmatter (v4.26.0+)
290
+ for template_file in self.templates_dir.glob("*.md"):
289
291
  try:
290
- with template_file.open() as f:
291
- config = json.load(f)
292
+ # Read markdown content and extract YAML frontmatter
293
+ content = template_file.read_text()
294
+ config = self._extract_yaml_frontmatter(content)
295
+ if not config:
296
+ self.logger.warning(f"No YAML frontmatter in {template_file.name}")
297
+ continue
292
298
 
293
299
  # Use filename stem as ID if not specified in config
294
300
  template_id = config.get("id") or template_file.stem
@@ -308,6 +314,30 @@ class AgentBuilderService:
308
314
 
309
315
  return templates
310
316
 
317
+ def _extract_yaml_frontmatter(self, content: str) -> Optional[Dict[str, Any]]:
318
+ """
319
+ Extract and parse YAML frontmatter from markdown content.
320
+
321
+ Args:
322
+ content: File content to parse
323
+
324
+ Returns:
325
+ Parsed YAML frontmatter as dict, or None if not found/invalid
326
+ """
327
+ if not content.strip().startswith("---"):
328
+ return None
329
+
330
+ # Split on --- delimiters
331
+ parts = content.split("---", 2)
332
+ if len(parts) < 3:
333
+ return None
334
+
335
+ try:
336
+ return yaml.safe_load(parts[1])
337
+ except yaml.YAMLError as e:
338
+ self.logger.warning(f"Failed to parse YAML frontmatter: {e}")
339
+ return None
340
+
311
341
  def _validate_agent_id(self, agent_id: str) -> None:
312
342
  """Validate agent ID format.
313
343
 
@@ -371,16 +401,22 @@ class AgentBuilderService:
371
401
  if template_id in self._template_cache:
372
402
  return self._template_cache[template_id].copy()
373
403
 
374
- template_file = self.templates_dir / f"{template_id}.json"
404
+ # Agent templates migrated to Markdown with YAML frontmatter (v4.26.0+)
405
+ template_file = self.templates_dir / f"{template_id}.md"
375
406
 
376
407
  if not template_file.exists():
377
408
  raise AgentDeploymentError(f"Template '{template_id}' not found")
378
409
 
379
410
  try:
380
- with template_file.open() as f:
381
- config = json.load(f)
382
- self._template_cache[template_id] = config
383
- return config.copy()
411
+ # Read markdown content and extract YAML frontmatter
412
+ content = template_file.read_text()
413
+ config = self._extract_yaml_frontmatter(content)
414
+ if not config:
415
+ raise AgentDeploymentError(
416
+ f"No YAML frontmatter in template '{template_id}'"
417
+ )
418
+ self._template_cache[template_id] = config
419
+ return config.copy()
384
420
  except Exception as e:
385
421
  raise AgentDeploymentError(
386
422
  f"Failed to load template '{template_id}': {e}"