claude-mpm 3.4.10__py3-none-any.whl → 5.4.85__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 (1062) hide show
  1. claude_mpm/BUILD_NUMBER +1 -0
  2. claude_mpm/VERSION +1 -0
  3. claude_mpm/__init__.py +50 -12
  4. claude_mpm/__main__.py +7 -2
  5. claude_mpm/agents/BASE_AGENT.md +164 -0
  6. claude_mpm/agents/BASE_ENGINEER.md +658 -0
  7. claude_mpm/agents/CLAUDE_MPM_FOUNDERS_OUTPUT_STYLE.md +405 -0
  8. claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +112 -0
  9. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +186 -0
  10. claude_mpm/agents/MEMORY.md +72 -0
  11. claude_mpm/agents/PM_INSTRUCTIONS.md +1429 -0
  12. claude_mpm/agents/WORKFLOW.md +111 -0
  13. claude_mpm/agents/__init__.py +92 -80
  14. claude_mpm/agents/agent-template.yaml +83 -0
  15. claude_mpm/agents/agent_loader.py +560 -745
  16. claude_mpm/agents/agent_loader_integration.py +53 -55
  17. claude_mpm/agents/agents_metadata.py +186 -27
  18. claude_mpm/agents/async_agent_loader.py +436 -0
  19. claude_mpm/agents/base_agent.json +8 -4
  20. claude_mpm/agents/frontmatter_validator.py +754 -0
  21. claude_mpm/agents/system_agent_config.py +222 -155
  22. claude_mpm/agents/templates/README.md +465 -0
  23. claude_mpm/agents/templates/__init__.py +17 -13
  24. claude_mpm/agents/templates/circuit-breakers.md +1391 -0
  25. claude_mpm/agents/templates/context-management-examples.md +544 -0
  26. claude_mpm/agents/templates/git-file-tracking.md +584 -0
  27. claude_mpm/agents/templates/pm-examples.md +474 -0
  28. claude_mpm/agents/templates/pm-red-flags.md +310 -0
  29. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  30. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  31. claude_mpm/agents/templates/response-format.md +583 -0
  32. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  33. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  34. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  35. claude_mpm/agents/templates/validation-templates.md +312 -0
  36. claude_mpm/cli/__init__.py +94 -128
  37. claude_mpm/cli/__main__.py +33 -0
  38. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  39. claude_mpm/cli/commands/__init__.py +36 -12
  40. claude_mpm/cli/commands/agent_manager.py +1403 -0
  41. claude_mpm/cli/commands/agent_source.py +774 -0
  42. claude_mpm/cli/commands/agent_state_manager.py +335 -0
  43. claude_mpm/cli/commands/agents.py +2501 -168
  44. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  45. claude_mpm/cli/commands/agents_discover.py +338 -0
  46. claude_mpm/cli/commands/agents_reconcile.py +197 -0
  47. claude_mpm/cli/commands/aggregate.py +540 -0
  48. claude_mpm/cli/commands/analyze.py +553 -0
  49. claude_mpm/cli/commands/analyze_code.py +528 -0
  50. claude_mpm/cli/commands/auto_configure.py +1053 -0
  51. claude_mpm/cli/commands/cleanup.py +588 -0
  52. claude_mpm/cli/commands/cleanup_orphaned_agents.py +150 -0
  53. claude_mpm/cli/commands/config.py +586 -0
  54. claude_mpm/cli/commands/configure.py +3253 -0
  55. claude_mpm/cli/commands/configure_agent_display.py +282 -0
  56. claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
  57. claude_mpm/cli/commands/configure_hook_manager.py +225 -0
  58. claude_mpm/cli/commands/configure_models.py +18 -0
  59. claude_mpm/cli/commands/configure_navigation.py +184 -0
  60. claude_mpm/cli/commands/configure_paths.py +104 -0
  61. claude_mpm/cli/commands/configure_persistence.py +254 -0
  62. claude_mpm/cli/commands/configure_startup_manager.py +646 -0
  63. claude_mpm/cli/commands/configure_template_editor.py +497 -0
  64. claude_mpm/cli/commands/configure_validators.py +73 -0
  65. claude_mpm/cli/commands/dashboard.py +286 -0
  66. claude_mpm/cli/commands/debug.py +1386 -0
  67. claude_mpm/cli/commands/doctor.py +243 -0
  68. claude_mpm/cli/commands/hook_errors.py +277 -0
  69. claude_mpm/cli/commands/info.py +195 -74
  70. claude_mpm/cli/commands/local_deploy.py +534 -0
  71. claude_mpm/cli/commands/mcp.py +205 -0
  72. claude_mpm/cli/commands/mcp_command_router.py +161 -0
  73. claude_mpm/cli/commands/mcp_config.py +154 -0
  74. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  75. claude_mpm/cli/commands/mcp_external_commands.py +249 -0
  76. claude_mpm/cli/commands/mcp_install_commands.py +346 -0
  77. claude_mpm/cli/commands/mcp_pipx_config.py +208 -0
  78. claude_mpm/cli/commands/mcp_server_commands.py +155 -0
  79. claude_mpm/cli/commands/mcp_setup_external.py +868 -0
  80. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  81. claude_mpm/cli/commands/memory.py +585 -846
  82. claude_mpm/cli/commands/monitor.py +228 -310
  83. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  84. claude_mpm/cli/commands/mpm_init/core.py +759 -0
  85. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  86. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  87. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  88. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  89. claude_mpm/cli/commands/mpm_init/prompts.py +722 -0
  90. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  91. claude_mpm/cli/commands/mpm_init_handler.py +195 -0
  92. claude_mpm/cli/commands/postmortem.py +401 -0
  93. claude_mpm/cli/commands/profile.py +276 -0
  94. claude_mpm/cli/commands/run.py +910 -488
  95. claude_mpm/cli/commands/search.py +458 -0
  96. claude_mpm/cli/commands/skill_source.py +694 -0
  97. claude_mpm/cli/commands/skills.py +1398 -0
  98. claude_mpm/cli/commands/summarize.py +413 -0
  99. claude_mpm/cli/commands/tickets.py +536 -53
  100. claude_mpm/cli/commands/uninstall.py +176 -0
  101. claude_mpm/cli/commands/upgrade.py +152 -0
  102. claude_mpm/cli/commands/verify.py +119 -0
  103. claude_mpm/cli/executor.py +298 -0
  104. claude_mpm/cli/helpers.py +105 -0
  105. claude_mpm/cli/interactive/__init__.py +31 -0
  106. claude_mpm/cli/interactive/agent_wizard.py +1927 -0
  107. claude_mpm/cli/interactive/questionary_styles.py +65 -0
  108. claude_mpm/cli/interactive/skill_selector.py +481 -0
  109. claude_mpm/cli/interactive/skills_wizard.py +491 -0
  110. claude_mpm/cli/parser.py +87 -563
  111. claude_mpm/cli/parsers/__init__.py +35 -0
  112. claude_mpm/cli/parsers/agent_manager_parser.py +393 -0
  113. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  114. claude_mpm/cli/parsers/agents_parser.py +575 -0
  115. claude_mpm/cli/parsers/analyze_code_parser.py +170 -0
  116. claude_mpm/cli/parsers/analyze_parser.py +135 -0
  117. claude_mpm/cli/parsers/auto_configure_parser.py +120 -0
  118. claude_mpm/cli/parsers/base_parser.py +649 -0
  119. claude_mpm/cli/parsers/config_parser.py +208 -0
  120. claude_mpm/cli/parsers/configure_parser.py +138 -0
  121. claude_mpm/cli/parsers/dashboard_parser.py +113 -0
  122. claude_mpm/cli/parsers/debug_parser.py +319 -0
  123. claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
  124. claude_mpm/cli/parsers/mcp_parser.py +195 -0
  125. claude_mpm/cli/parsers/memory_parser.py +138 -0
  126. claude_mpm/cli/parsers/monitor_parser.py +142 -0
  127. claude_mpm/cli/parsers/mpm_init_parser.py +311 -0
  128. claude_mpm/cli/parsers/profile_parser.py +147 -0
  129. claude_mpm/cli/parsers/run_parser.py +157 -0
  130. claude_mpm/cli/parsers/search_parser.py +245 -0
  131. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  132. claude_mpm/cli/parsers/skills_parser.py +277 -0
  133. claude_mpm/cli/parsers/source_parser.py +138 -0
  134. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  135. claude_mpm/cli/shared/__init__.py +40 -0
  136. claude_mpm/cli/shared/argument_patterns.py +205 -0
  137. claude_mpm/cli/shared/base_command.py +242 -0
  138. claude_mpm/cli/shared/error_handling.py +242 -0
  139. claude_mpm/cli/shared/output_formatters.py +241 -0
  140. claude_mpm/cli/startup.py +1578 -0
  141. claude_mpm/cli/startup_display.py +480 -0
  142. claude_mpm/cli/startup_logging.py +839 -0
  143. claude_mpm/cli/utils.py +136 -47
  144. claude_mpm/cli_module/__init__.py +6 -6
  145. claude_mpm/cli_module/args.py +188 -140
  146. claude_mpm/cli_module/commands.py +79 -70
  147. claude_mpm/cli_module/migration_example.py +42 -64
  148. claude_mpm/commands/__init__.py +14 -0
  149. claude_mpm/commands/mpm-config.md +28 -0
  150. claude_mpm/commands/mpm-doctor.md +20 -0
  151. claude_mpm/commands/mpm-help.md +20 -0
  152. claude_mpm/commands/mpm-init.md +120 -0
  153. claude_mpm/commands/mpm-monitor.md +31 -0
  154. claude_mpm/commands/mpm-organize.md +120 -0
  155. claude_mpm/commands/mpm-postmortem.md +21 -0
  156. claude_mpm/commands/mpm-session-resume.md +30 -0
  157. claude_mpm/commands/mpm-status.md +20 -0
  158. claude_mpm/commands/mpm-ticket-view.md +109 -0
  159. claude_mpm/commands/mpm-version.md +20 -0
  160. claude_mpm/commands/mpm.md +31 -0
  161. claude_mpm/config/__init__.py +42 -2
  162. claude_mpm/config/agent_config.py +402 -0
  163. claude_mpm/config/agent_presets.py +488 -0
  164. claude_mpm/config/agent_sources.py +352 -0
  165. claude_mpm/config/experimental_features.py +217 -0
  166. claude_mpm/config/model_config.py +428 -0
  167. claude_mpm/config/paths.py +258 -0
  168. claude_mpm/config/skill_presets.py +392 -0
  169. claude_mpm/config/skill_sources.py +590 -0
  170. claude_mpm/config/socketio_config.py +125 -83
  171. claude_mpm/constants.py +133 -22
  172. claude_mpm/core/__init__.py +62 -36
  173. claude_mpm/core/agent_name_normalizer.py +71 -73
  174. claude_mpm/core/agent_registry.py +385 -492
  175. claude_mpm/core/agent_session_manager.py +81 -70
  176. claude_mpm/core/api_validator.py +330 -0
  177. claude_mpm/core/base_service.py +159 -122
  178. claude_mpm/core/cache.py +560 -0
  179. claude_mpm/core/claude_runner.py +696 -916
  180. claude_mpm/core/config.py +613 -122
  181. claude_mpm/core/config_aliases.py +74 -73
  182. claude_mpm/core/config_constants.py +314 -0
  183. claude_mpm/core/constants.py +361 -0
  184. claude_mpm/core/container.py +646 -104
  185. claude_mpm/core/enums.py +452 -0
  186. claude_mpm/core/error_handler.py +623 -0
  187. claude_mpm/core/exceptions.py +536 -0
  188. claude_mpm/core/factories.py +105 -109
  189. claude_mpm/core/file_utils.py +764 -0
  190. claude_mpm/core/framework/__init__.py +25 -0
  191. claude_mpm/core/framework/formatters/__init__.py +11 -0
  192. claude_mpm/core/framework/formatters/capability_generator.py +367 -0
  193. claude_mpm/core/framework/formatters/content_formatter.py +278 -0
  194. claude_mpm/core/framework/formatters/context_generator.py +185 -0
  195. claude_mpm/core/framework/loaders/__init__.py +13 -0
  196. claude_mpm/core/framework/loaders/agent_loader.py +213 -0
  197. claude_mpm/core/framework/loaders/file_loader.py +176 -0
  198. claude_mpm/core/framework/loaders/instruction_loader.py +222 -0
  199. claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
  200. claude_mpm/core/framework/processors/__init__.py +11 -0
  201. claude_mpm/core/framework/processors/memory_processor.py +230 -0
  202. claude_mpm/core/framework/processors/metadata_processor.py +146 -0
  203. claude_mpm/core/framework/processors/template_processor.py +244 -0
  204. claude_mpm/core/framework_loader.py +485 -414
  205. claude_mpm/core/hook_error_memory.py +381 -0
  206. claude_mpm/core/hook_manager.py +246 -86
  207. claude_mpm/core/hook_performance_config.py +147 -0
  208. claude_mpm/core/injectable_service.py +72 -63
  209. claude_mpm/core/instruction_reinforcement_hook.py +267 -0
  210. claude_mpm/core/interactive_session.py +670 -0
  211. claude_mpm/core/interfaces.py +570 -164
  212. claude_mpm/core/lazy.py +467 -0
  213. claude_mpm/core/log_manager.py +707 -0
  214. claude_mpm/core/logger.py +295 -134
  215. claude_mpm/core/logging_config.py +474 -0
  216. claude_mpm/core/logging_utils.py +520 -0
  217. claude_mpm/core/minimal_framework_loader.py +24 -22
  218. claude_mpm/core/mixins.py +30 -29
  219. claude_mpm/core/oneshot_session.py +594 -0
  220. claude_mpm/core/optimized_agent_loader.py +479 -0
  221. claude_mpm/core/optimized_startup.py +554 -0
  222. claude_mpm/core/output_style_manager.py +491 -0
  223. claude_mpm/core/pm_hook_interceptor.py +197 -82
  224. claude_mpm/core/protocols/__init__.py +23 -0
  225. claude_mpm/core/protocols/runner_protocol.py +103 -0
  226. claude_mpm/core/protocols/session_protocol.py +131 -0
  227. claude_mpm/core/service_registry.py +153 -116
  228. claude_mpm/core/session_manager.py +179 -64
  229. claude_mpm/core/shared/__init__.py +17 -0
  230. claude_mpm/core/shared/config_loader.py +326 -0
  231. claude_mpm/core/shared/path_resolver.py +281 -0
  232. claude_mpm/core/shared/singleton_manager.py +221 -0
  233. claude_mpm/core/socketio_pool.py +400 -137
  234. claude_mpm/core/system_context.py +38 -0
  235. claude_mpm/core/tool_access_control.py +64 -57
  236. claude_mpm/core/types.py +307 -0
  237. claude_mpm/core/typing_utils.py +553 -0
  238. claude_mpm/core/unified_agent_registry.py +969 -0
  239. claude_mpm/core/unified_config.py +612 -0
  240. claude_mpm/core/unified_paths.py +958 -0
  241. claude_mpm/dashboard/__init__.py +12 -0
  242. claude_mpm/dashboard/api/simple_directory.py +261 -0
  243. claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
  244. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +1 -0
  245. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +1 -0
  246. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/4TdZjIqw.js +1 -0
  247. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +24 -0
  248. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B0uc0UOD.js +36 -0
  249. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7RN905-.js +1 -0
  250. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7xVLGWV.js +2 -0
  251. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BIF9m_hv.js +61 -0
  252. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +1 -0
  253. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BPYeabCQ.js +1 -0
  254. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
  255. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BSNlmTZj.js +1 -0
  256. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Be7GpZd6.js +7 -0
  257. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bh0LDWpI.js +145 -0
  258. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BofRWZRR.js +10 -0
  259. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BovzEFCE.js +30 -0
  260. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C30mlcqg.js +165 -0
  261. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4B-KCzX.js +1 -0
  262. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4JcI4KD.js +122 -0
  263. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CBBdVcY8.js +1 -0
  264. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CDuw-vjf.js +1 -0
  265. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C_Usid8X.js +15 -0
  266. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cfqx1Qun.js +10 -0
  267. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CiIAseT4.js +128 -0
  268. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
  269. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CnA0NrzZ.js +1 -0
  270. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cs_tUR18.js +24 -0
  271. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
  272. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CyWMqx4W.js +43 -0
  273. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzZX-COe.js +220 -0
  274. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzeYkLYB.js +65 -0
  275. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D3k0OPJN.js +4 -0
  276. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9lljYKQ.js +1 -0
  277. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DGkLK5U1.js +267 -0
  278. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DI7hHRFL.js +1 -0
  279. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DLVjFsZ3.js +139 -0
  280. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUrLdbGD.js +89 -0
  281. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
  282. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DY1XQ8fi.js +2 -0
  283. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DZX00Y4g.js +1 -0
  284. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +1 -0
  285. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DaimHw_p.js +68 -0
  286. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +323 -0
  287. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dhb8PKl3.js +1 -0
  288. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dle-35c7.js +64 -0
  289. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DmxopI1J.js +1 -0
  290. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DwBR2MJi.js +60 -0
  291. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/GYwsonyD.js +1 -0
  292. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
  293. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NqQ1dWOy.js +1 -0
  294. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/RJiighC3.js +1 -0
  295. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Vzk33B_K.js +2 -0
  296. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ZGh7QtNv.js +7 -0
  297. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bT1r9zLR.js +1 -0
  298. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bTOqqlTd.js +1 -0
  299. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/eNVUfhuA.js +1 -0
  300. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/iEWssX7S.js +162 -0
  301. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/sQeU3Y1z.js +1 -0
  302. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uuIeMWc-.js +1 -0
  303. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.D6-I5TpK.js +2 -0
  304. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +1 -0
  305. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.m1gL8KXf.js +1 -0
  306. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.CgNOuw-d.js +1 -0
  307. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +1 -0
  308. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
  309. claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
  310. claude_mpm/dashboard/static/svelte-build/index.html +36 -0
  311. claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
  312. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
  313. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
  314. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
  315. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
  316. claude_mpm/experimental/__init__.py +10 -0
  317. claude_mpm/experimental/cli_enhancements.py +104 -89
  318. claude_mpm/generators/__init__.py +1 -1
  319. claude_mpm/generators/agent_profile_generator.py +76 -66
  320. claude_mpm/hooks/__init__.py +37 -1
  321. claude_mpm/hooks/base_hook.py +37 -32
  322. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  323. claude_mpm/hooks/claude_hooks/connection_pool.py +250 -0
  324. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  325. claude_mpm/hooks/claude_hooks/event_handlers.py +888 -0
  326. claude_mpm/hooks/claude_hooks/hook_handler.py +652 -875
  327. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +10 -7
  328. claude_mpm/hooks/claude_hooks/installer.py +806 -0
  329. claude_mpm/hooks/claude_hooks/memory_integration.py +249 -0
  330. claude_mpm/hooks/claude_hooks/response_tracking.py +412 -0
  331. claude_mpm/hooks/claude_hooks/services/__init__.py +15 -0
  332. claude_mpm/hooks/claude_hooks/services/connection_manager.py +229 -0
  333. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +254 -0
  334. claude_mpm/hooks/claude_hooks/services/duplicate_detector.py +106 -0
  335. claude_mpm/hooks/claude_hooks/services/state_manager.py +284 -0
  336. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +374 -0
  337. claude_mpm/hooks/claude_hooks/tool_analysis.py +224 -0
  338. claude_mpm/hooks/failure_learning/__init__.py +54 -0
  339. claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
  340. claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
  341. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -0
  342. claude_mpm/hooks/instruction_reinforcement.py +301 -0
  343. claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
  344. claude_mpm/hooks/kuzu_memory_hook.py +386 -0
  345. claude_mpm/hooks/kuzu_response_hook.py +179 -0
  346. claude_mpm/hooks/memory_integration_hook.py +201 -107
  347. claude_mpm/hooks/session_resume_hook.py +121 -0
  348. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  349. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  350. claude_mpm/hooks/tool_call_interceptor.py +92 -76
  351. claude_mpm/hooks/validation_hooks.py +62 -54
  352. claude_mpm/init.py +518 -83
  353. claude_mpm/models/__init__.py +9 -9
  354. claude_mpm/models/agent_definition.py +40 -23
  355. claude_mpm/models/agent_session.py +538 -0
  356. claude_mpm/models/git_repository.py +198 -0
  357. claude_mpm/models/resume_log.py +340 -0
  358. claude_mpm/schemas/__init__.py +12 -0
  359. claude_mpm/scripts/__init__.py +15 -0
  360. claude_mpm/scripts/claude-hook-handler.sh +227 -0
  361. claude_mpm/scripts/launch_monitor.py +165 -0
  362. claude_mpm/scripts/mpm_doctor.py +322 -0
  363. claude_mpm/scripts/socketio_daemon.py +189 -200
  364. claude_mpm/scripts/start_activity_logging.py +91 -0
  365. claude_mpm/services/__init__.py +208 -39
  366. claude_mpm/services/agent_capabilities_service.py +266 -0
  367. claude_mpm/services/agents/__init__.py +89 -0
  368. claude_mpm/services/agents/agent_builder.py +514 -0
  369. claude_mpm/services/agents/agent_preset_service.py +238 -0
  370. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  371. claude_mpm/services/agents/agent_review_service.py +280 -0
  372. claude_mpm/services/agents/agent_selection_service.py +484 -0
  373. claude_mpm/services/agents/auto_config_manager.py +796 -0
  374. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  375. claude_mpm/services/agents/cache_git_manager.py +621 -0
  376. claude_mpm/services/agents/deployment/__init__.py +21 -0
  377. claude_mpm/services/agents/deployment/agent_config_provider.py +410 -0
  378. claude_mpm/services/agents/deployment/agent_configuration_manager.py +358 -0
  379. claude_mpm/services/agents/deployment/agent_definition_factory.py +80 -0
  380. claude_mpm/services/agents/deployment/agent_deployment.py +1037 -0
  381. claude_mpm/services/agents/deployment/agent_discovery_service.py +546 -0
  382. claude_mpm/services/agents/deployment/agent_environment_manager.py +288 -0
  383. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +383 -0
  384. claude_mpm/services/agents/deployment/agent_format_converter.py +505 -0
  385. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +160 -0
  386. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +957 -0
  387. claude_mpm/services/agents/deployment/agent_metrics_collector.py +273 -0
  388. claude_mpm/services/agents/deployment/agent_operation_service.py +573 -0
  389. claude_mpm/services/agents/deployment/agent_record_service.py +418 -0
  390. claude_mpm/services/agents/deployment/agent_restore_handler.py +84 -0
  391. claude_mpm/services/agents/deployment/agent_state_service.py +381 -0
  392. claude_mpm/services/agents/deployment/agent_template_builder.py +1377 -0
  393. claude_mpm/services/agents/deployment/agent_validator.py +376 -0
  394. claude_mpm/services/agents/deployment/agent_version_manager.py +322 -0
  395. claude_mpm/services/{agent_versioning.py → agents/deployment/agent_versioning.py} +10 -13
  396. claude_mpm/services/agents/deployment/agents_directory_resolver.py +149 -0
  397. claude_mpm/services/agents/deployment/async_agent_deployment.py +768 -0
  398. claude_mpm/services/agents/deployment/base_agent_locator.py +132 -0
  399. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  400. claude_mpm/services/agents/deployment/config/deployment_config.py +181 -0
  401. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  402. claude_mpm/services/agents/deployment/deployment_config_loader.py +178 -0
  403. claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
  404. claude_mpm/services/agents/deployment/deployment_results_manager.py +185 -0
  405. claude_mpm/services/agents/deployment/deployment_type_detector.py +120 -0
  406. claude_mpm/services/agents/deployment/deployment_wrapper.py +129 -0
  407. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  408. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  409. claude_mpm/services/agents/deployment/facade/deployment_executor.py +70 -0
  410. claude_mpm/services/agents/deployment/facade/deployment_facade.py +269 -0
  411. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  412. claude_mpm/services/agents/deployment/interface_adapter.py +226 -0
  413. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  414. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  415. claude_mpm/services/agents/deployment/local_template_deployment.py +362 -0
  416. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +1478 -0
  417. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  418. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  419. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +162 -0
  420. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  421. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  422. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +240 -0
  423. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +110 -0
  424. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +80 -0
  425. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +92 -0
  426. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +101 -0
  427. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  428. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +102 -0
  429. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  430. claude_mpm/services/agents/deployment/processors/agent_processor.py +269 -0
  431. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +311 -0
  432. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +862 -0
  433. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  434. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  435. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  436. claude_mpm/services/agents/deployment/single_agent_deployer.py +315 -0
  437. claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
  438. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  439. claude_mpm/services/agents/deployment/strategies/base_strategy.py +113 -0
  440. claude_mpm/services/agents/deployment/strategies/project_strategy.py +148 -0
  441. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  442. claude_mpm/services/agents/deployment/strategies/system_strategy.py +131 -0
  443. claude_mpm/services/agents/deployment/strategies/user_strategy.py +130 -0
  444. claude_mpm/services/agents/deployment/system_instructions_deployer.py +228 -0
  445. claude_mpm/services/agents/deployment/validation/__init__.py +21 -0
  446. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  447. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  448. claude_mpm/services/agents/deployment/validation/template_validator.py +319 -0
  449. claude_mpm/services/agents/deployment/validation/validation_result.py +214 -0
  450. claude_mpm/services/agents/git_source_manager.py +682 -0
  451. claude_mpm/services/agents/loading/__init__.py +11 -0
  452. claude_mpm/services/{agent_profile_loader.py → agents/loading/agent_profile_loader.py} +306 -228
  453. claude_mpm/services/{base_agent_manager.py → agents/loading/base_agent_manager.py} +106 -91
  454. claude_mpm/services/agents/loading/framework_agent_loader.py +433 -0
  455. claude_mpm/services/agents/local_template_manager.py +784 -0
  456. claude_mpm/services/agents/management/__init__.py +9 -0
  457. claude_mpm/services/{agent_capabilities_generator.py → agents/management/agent_capabilities_generator.py} +92 -69
  458. claude_mpm/services/{agent_management_service.py → agents/management/agent_management_service.py} +219 -168
  459. claude_mpm/services/agents/memory/__init__.py +22 -0
  460. claude_mpm/services/agents/memory/agent_memory_manager.py +784 -0
  461. claude_mpm/services/{agent_persistence_service.py → agents/memory/agent_persistence_service.py} +20 -18
  462. claude_mpm/services/agents/memory/content_manager.py +470 -0
  463. claude_mpm/services/agents/memory/memory_categorization_service.py +167 -0
  464. claude_mpm/services/agents/memory/memory_file_service.py +129 -0
  465. claude_mpm/services/agents/memory/memory_format_service.py +201 -0
  466. claude_mpm/services/agents/memory/memory_limits_service.py +101 -0
  467. claude_mpm/services/agents/memory/template_generator.py +83 -0
  468. claude_mpm/services/agents/observers.py +547 -0
  469. claude_mpm/services/agents/recommender.py +617 -0
  470. claude_mpm/services/agents/registry/__init__.py +30 -0
  471. claude_mpm/services/agents/registry/deployed_agent_discovery.py +273 -0
  472. claude_mpm/services/{agent_modification_tracker.py → agents/registry/modification_tracker.py} +370 -295
  473. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  474. claude_mpm/services/agents/sources/__init__.py +13 -0
  475. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  476. claude_mpm/services/agents/sources/git_source_sync_service.py +1205 -0
  477. claude_mpm/services/agents/startup_sync.py +262 -0
  478. claude_mpm/services/agents/toolchain_detector.py +478 -0
  479. claude_mpm/services/analysis/__init__.py +35 -0
  480. claude_mpm/services/analysis/clone_detector.py +1030 -0
  481. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  482. claude_mpm/services/analysis/postmortem_service.py +765 -0
  483. claude_mpm/services/async_session_logger.py +665 -0
  484. claude_mpm/services/claude_session_logger.py +321 -0
  485. claude_mpm/services/cli/__init__.py +18 -0
  486. claude_mpm/services/cli/agent_cleanup_service.py +408 -0
  487. claude_mpm/services/cli/agent_dependency_service.py +395 -0
  488. claude_mpm/services/cli/agent_listing_service.py +463 -0
  489. claude_mpm/services/cli/agent_output_formatter.py +605 -0
  490. claude_mpm/services/cli/agent_validation_service.py +590 -0
  491. claude_mpm/services/cli/memory_crud_service.py +622 -0
  492. claude_mpm/services/cli/memory_output_formatter.py +604 -0
  493. claude_mpm/services/cli/resume_service.py +617 -0
  494. claude_mpm/services/cli/session_manager.py +604 -0
  495. claude_mpm/services/cli/session_pause_manager.py +504 -0
  496. claude_mpm/services/cli/session_resume_helper.py +372 -0
  497. claude_mpm/services/cli/startup_checker.py +362 -0
  498. claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
  499. claude_mpm/services/command_deployment_service.py +446 -0
  500. claude_mpm/services/command_handler_service.py +221 -0
  501. claude_mpm/services/communication/__init__.py +22 -0
  502. claude_mpm/services/core/__init__.py +108 -0
  503. claude_mpm/services/core/base.py +269 -0
  504. claude_mpm/services/core/cache_manager.py +309 -0
  505. claude_mpm/services/core/interfaces/__init__.py +273 -0
  506. claude_mpm/services/core/interfaces/agent.py +514 -0
  507. claude_mpm/services/core/interfaces/communication.py +316 -0
  508. claude_mpm/services/core/interfaces/health.py +169 -0
  509. claude_mpm/services/core/interfaces/infrastructure.py +357 -0
  510. claude_mpm/services/core/interfaces/model.py +281 -0
  511. claude_mpm/services/core/interfaces/process.py +372 -0
  512. claude_mpm/services/core/interfaces/project.py +121 -0
  513. claude_mpm/services/core/interfaces/restart.py +307 -0
  514. claude_mpm/services/core/interfaces/service.py +405 -0
  515. claude_mpm/services/core/interfaces/stability.py +260 -0
  516. claude_mpm/services/core/interfaces.py +81 -0
  517. claude_mpm/services/core/memory_manager.py +682 -0
  518. claude_mpm/services/core/models/__init__.py +70 -0
  519. claude_mpm/services/core/models/agent_config.py +384 -0
  520. claude_mpm/services/core/models/health.py +162 -0
  521. claude_mpm/services/core/models/process.py +239 -0
  522. claude_mpm/services/core/models/restart.py +302 -0
  523. claude_mpm/services/core/models/stability.py +264 -0
  524. claude_mpm/services/core/models/toolchain.py +306 -0
  525. claude_mpm/services/core/path_resolver.py +517 -0
  526. claude_mpm/services/core/service_container.py +520 -0
  527. claude_mpm/services/core/service_interfaces.py +436 -0
  528. claude_mpm/services/diagnostics/__init__.py +18 -0
  529. claude_mpm/services/diagnostics/checks/__init__.py +38 -0
  530. claude_mpm/services/diagnostics/checks/agent_check.py +370 -0
  531. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  532. claude_mpm/services/diagnostics/checks/base_check.py +60 -0
  533. claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
  534. claude_mpm/services/diagnostics/checks/common_issues_check.py +363 -0
  535. claude_mpm/services/diagnostics/checks/configuration_check.py +306 -0
  536. claude_mpm/services/diagnostics/checks/filesystem_check.py +233 -0
  537. claude_mpm/services/diagnostics/checks/installation_check.py +520 -0
  538. claude_mpm/services/diagnostics/checks/instructions_check.py +415 -0
  539. claude_mpm/services/diagnostics/checks/mcp_check.py +330 -0
  540. claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
  541. claude_mpm/services/diagnostics/checks/monitor_check.py +281 -0
  542. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  543. claude_mpm/services/diagnostics/checks/startup_log_check.py +319 -0
  544. claude_mpm/services/diagnostics/diagnostic_runner.py +286 -0
  545. claude_mpm/services/diagnostics/doctor_reporter.py +578 -0
  546. claude_mpm/services/diagnostics/models.py +138 -0
  547. claude_mpm/services/event_aggregator.py +582 -0
  548. claude_mpm/services/event_bus/__init__.py +18 -0
  549. claude_mpm/services/event_bus/config.py +186 -0
  550. claude_mpm/services/event_bus/direct_relay.py +312 -0
  551. claude_mpm/services/event_bus/event_bus.py +396 -0
  552. claude_mpm/services/event_bus/relay.py +326 -0
  553. claude_mpm/services/events/__init__.py +44 -0
  554. claude_mpm/services/events/consumers/__init__.py +18 -0
  555. claude_mpm/services/events/consumers/dead_letter.py +306 -0
  556. claude_mpm/services/events/consumers/logging.py +184 -0
  557. claude_mpm/services/events/consumers/metrics.py +241 -0
  558. claude_mpm/services/events/consumers/socketio.py +377 -0
  559. claude_mpm/services/events/core.py +480 -0
  560. claude_mpm/services/events/interfaces.py +214 -0
  561. claude_mpm/services/events/producers/__init__.py +14 -0
  562. claude_mpm/services/events/producers/hook.py +269 -0
  563. claude_mpm/services/events/producers/system.py +329 -0
  564. claude_mpm/services/exceptions.py +433 -353
  565. claude_mpm/services/framework_claude_md_generator/__init__.py +81 -80
  566. claude_mpm/services/framework_claude_md_generator/content_assembler.py +74 -67
  567. claude_mpm/services/framework_claude_md_generator/content_validator.py +66 -62
  568. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +82 -60
  569. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +36 -37
  570. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +41 -40
  571. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +15 -15
  572. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +5 -4
  573. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  574. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  575. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  576. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  577. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +5 -4
  578. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  579. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  580. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +26 -30
  581. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +6 -5
  582. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  583. claude_mpm/services/framework_claude_md_generator/version_manager.py +31 -30
  584. claude_mpm/services/git/__init__.py +21 -0
  585. claude_mpm/services/git/git_operations_service.py +579 -0
  586. claude_mpm/services/github/__init__.py +21 -0
  587. claude_mpm/services/github/github_cli_service.py +397 -0
  588. claude_mpm/services/hook_installer_service.py +506 -0
  589. claude_mpm/services/hook_service.py +159 -111
  590. claude_mpm/services/infrastructure/__init__.py +52 -0
  591. claude_mpm/services/infrastructure/context_preservation.py +569 -0
  592. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  593. claude_mpm/services/infrastructure/logging.py +209 -0
  594. claude_mpm/services/infrastructure/monitoring/__init__.py +39 -0
  595. claude_mpm/services/infrastructure/monitoring/aggregator.py +432 -0
  596. claude_mpm/services/infrastructure/monitoring/base.py +122 -0
  597. claude_mpm/services/infrastructure/monitoring/legacy.py +203 -0
  598. claude_mpm/services/infrastructure/monitoring/network.py +219 -0
  599. claude_mpm/services/infrastructure/monitoring/process.py +343 -0
  600. claude_mpm/services/infrastructure/monitoring/resources.py +244 -0
  601. claude_mpm/services/infrastructure/monitoring/service.py +368 -0
  602. claude_mpm/services/infrastructure/monitoring.py +71 -0
  603. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  604. claude_mpm/services/instructions/__init__.py +9 -0
  605. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  606. claude_mpm/services/local_ops/__init__.py +155 -0
  607. claude_mpm/services/local_ops/crash_detector.py +257 -0
  608. claude_mpm/services/local_ops/health_checks/__init__.py +26 -0
  609. claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
  610. claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
  611. claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
  612. claude_mpm/services/local_ops/health_manager.py +427 -0
  613. claude_mpm/services/local_ops/log_monitor.py +396 -0
  614. claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
  615. claude_mpm/services/local_ops/process_manager.py +595 -0
  616. claude_mpm/services/local_ops/resource_monitor.py +331 -0
  617. claude_mpm/services/local_ops/restart_manager.py +401 -0
  618. claude_mpm/services/local_ops/restart_policy.py +387 -0
  619. claude_mpm/services/local_ops/state_manager.py +372 -0
  620. claude_mpm/services/local_ops/unified_manager.py +600 -0
  621. claude_mpm/services/mcp_config_manager.py +1542 -0
  622. claude_mpm/services/mcp_service_verifier.py +732 -0
  623. claude_mpm/services/memory/__init__.py +19 -0
  624. claude_mpm/services/{memory_builder.py → memory/builder.py} +465 -373
  625. claude_mpm/services/memory/cache/__init__.py +14 -0
  626. claude_mpm/services/{shared_prompt_cache.py → memory/cache/shared_prompt_cache.py} +237 -200
  627. claude_mpm/services/memory/cache/simple_cache.py +331 -0
  628. claude_mpm/services/memory/failure_tracker.py +578 -0
  629. claude_mpm/services/memory/indexed_memory.py +648 -0
  630. claude_mpm/services/{memory_optimizer.py → memory/optimizer.py} +272 -243
  631. claude_mpm/services/memory/router.py +951 -0
  632. claude_mpm/services/memory_hook_service.py +470 -0
  633. claude_mpm/services/model/__init__.py +147 -0
  634. claude_mpm/services/model/base_provider.py +365 -0
  635. claude_mpm/services/model/claude_provider.py +412 -0
  636. claude_mpm/services/model/model_router.py +452 -0
  637. claude_mpm/services/model/ollama_provider.py +415 -0
  638. claude_mpm/services/monitor/__init__.py +20 -0
  639. claude_mpm/services/monitor/daemon.py +698 -0
  640. claude_mpm/services/monitor/daemon_manager.py +1076 -0
  641. claude_mpm/services/monitor/event_emitter.py +350 -0
  642. claude_mpm/services/monitor/handlers/__init__.py +21 -0
  643. claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
  644. claude_mpm/services/monitor/handlers/dashboard.py +299 -0
  645. claude_mpm/services/monitor/handlers/file.py +264 -0
  646. claude_mpm/services/monitor/handlers/hooks.py +512 -0
  647. claude_mpm/services/monitor/management/__init__.py +18 -0
  648. claude_mpm/services/monitor/management/health.py +124 -0
  649. claude_mpm/services/monitor/management/lifecycle.py +730 -0
  650. claude_mpm/services/monitor/server.py +1493 -0
  651. claude_mpm/services/monitor_build_service.py +349 -0
  652. claude_mpm/services/native_agent_converter.py +356 -0
  653. claude_mpm/services/orphan_detection.py +786 -0
  654. claude_mpm/services/pm_skills_deployer.py +711 -0
  655. claude_mpm/services/port_manager.py +597 -0
  656. claude_mpm/services/pr/__init__.py +14 -0
  657. claude_mpm/services/pr/pr_template_service.py +329 -0
  658. claude_mpm/services/profile_manager.py +337 -0
  659. claude_mpm/services/project/__init__.py +44 -0
  660. claude_mpm/services/{project_analyzer.py → project/analyzer.py} +541 -291
  661. claude_mpm/services/project/analyzer_v2.py +566 -0
  662. claude_mpm/services/project/architecture_analyzer.py +461 -0
  663. claude_mpm/services/project/archive_manager.py +1045 -0
  664. claude_mpm/services/project/dependency_analyzer.py +462 -0
  665. claude_mpm/services/project/detection_strategies.py +719 -0
  666. claude_mpm/services/project/documentation_manager.py +554 -0
  667. claude_mpm/services/project/enhanced_analyzer.py +572 -0
  668. claude_mpm/services/project/language_analyzer.py +265 -0
  669. claude_mpm/services/project/metrics_collector.py +407 -0
  670. claude_mpm/services/project/project_organizer.py +1009 -0
  671. claude_mpm/services/project/registry.py +636 -0
  672. claude_mpm/services/project/toolchain_analyzer.py +583 -0
  673. claude_mpm/services/project_port_allocator.py +596 -0
  674. claude_mpm/services/recovery_manager.py +293 -240
  675. claude_mpm/services/response_tracker.py +267 -0
  676. claude_mpm/services/runner_configuration_service.py +605 -0
  677. claude_mpm/services/self_upgrade_service.py +608 -0
  678. claude_mpm/services/session_management_service.py +314 -0
  679. claude_mpm/services/session_manager.py +380 -0
  680. claude_mpm/services/shared/__init__.py +21 -0
  681. claude_mpm/services/shared/async_service_base.py +216 -0
  682. claude_mpm/services/shared/config_service_base.py +301 -0
  683. claude_mpm/services/shared/lifecycle_service_base.py +308 -0
  684. claude_mpm/services/shared/manager_base.py +315 -0
  685. claude_mpm/services/shared/service_factory.py +309 -0
  686. claude_mpm/services/skills/__init__.py +21 -0
  687. claude_mpm/services/skills/git_skill_source_manager.py +1340 -0
  688. claude_mpm/services/skills/selective_skill_deployer.py +743 -0
  689. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  690. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  691. claude_mpm/services/skills_config.py +547 -0
  692. claude_mpm/services/skills_deployer.py +1168 -0
  693. claude_mpm/services/socketio/__init__.py +25 -0
  694. claude_mpm/services/socketio/client_proxy.py +229 -0
  695. claude_mpm/services/socketio/dashboard_server.py +362 -0
  696. claude_mpm/services/socketio/event_normalizer.py +798 -0
  697. claude_mpm/services/socketio/handlers/__init__.py +30 -0
  698. claude_mpm/services/socketio/handlers/base.py +136 -0
  699. claude_mpm/services/socketio/handlers/code_analysis.py +682 -0
  700. claude_mpm/services/socketio/handlers/connection.py +643 -0
  701. claude_mpm/services/socketio/handlers/connection_handler.py +333 -0
  702. claude_mpm/services/socketio/handlers/file.py +263 -0
  703. claude_mpm/services/socketio/handlers/git.py +962 -0
  704. claude_mpm/services/socketio/handlers/hook.py +211 -0
  705. claude_mpm/services/socketio/handlers/memory.py +26 -0
  706. claude_mpm/services/socketio/handlers/project.py +24 -0
  707. claude_mpm/services/socketio/handlers/registry.py +214 -0
  708. claude_mpm/services/socketio/migration_utils.py +343 -0
  709. claude_mpm/services/socketio/monitor_client.py +364 -0
  710. claude_mpm/services/socketio/server/__init__.py +18 -0
  711. claude_mpm/services/socketio/server/broadcaster.py +569 -0
  712. claude_mpm/services/socketio/server/connection_manager.py +579 -0
  713. claude_mpm/services/socketio/server/core.py +1079 -0
  714. claude_mpm/services/socketio/server/eventbus_integration.py +245 -0
  715. claude_mpm/services/socketio/server/main.py +501 -0
  716. claude_mpm/services/socketio_client_manager.py +173 -143
  717. claude_mpm/services/socketio_server.py +38 -1657
  718. claude_mpm/services/subprocess_launcher_service.py +322 -0
  719. claude_mpm/services/system_instructions_service.py +270 -0
  720. claude_mpm/services/ticket_manager.py +25 -209
  721. claude_mpm/services/ticket_services/__init__.py +26 -0
  722. claude_mpm/services/ticket_services/crud_service.py +328 -0
  723. claude_mpm/services/ticket_services/formatter_service.py +290 -0
  724. claude_mpm/services/ticket_services/search_service.py +324 -0
  725. claude_mpm/services/ticket_services/validation_service.py +303 -0
  726. claude_mpm/services/ticket_services/workflow_service.py +244 -0
  727. claude_mpm/services/unified/__init__.py +65 -0
  728. claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
  729. claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
  730. claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
  731. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +900 -0
  732. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -0
  733. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
  734. claude_mpm/services/unified/config_strategies/__init__.py +175 -0
  735. claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
  736. claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
  737. claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
  738. claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
  739. claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
  740. claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
  741. claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
  742. claude_mpm/services/unified/deployment_strategies/base.py +553 -0
  743. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
  744. claude_mpm/services/unified/deployment_strategies/local.py +607 -0
  745. claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
  746. claude_mpm/services/unified/deployment_strategies/vercel.py +471 -0
  747. claude_mpm/services/unified/interfaces.py +475 -0
  748. claude_mpm/services/unified/migration.py +509 -0
  749. claude_mpm/services/unified/strategies.py +534 -0
  750. claude_mpm/services/unified/unified_analyzer.py +542 -0
  751. claude_mpm/services/unified/unified_config.py +691 -0
  752. claude_mpm/services/unified/unified_deployment.py +466 -0
  753. claude_mpm/services/utility_service.py +280 -0
  754. claude_mpm/services/version_control/__init__.py +34 -37
  755. claude_mpm/services/version_control/branch_strategy.py +26 -17
  756. claude_mpm/services/version_control/conflict_resolution.py +52 -36
  757. claude_mpm/services/version_control/git_operations.py +183 -49
  758. claude_mpm/services/version_control/semantic_versioning.py +172 -61
  759. claude_mpm/services/version_control/version_parser.py +546 -0
  760. claude_mpm/services/version_service.py +379 -0
  761. claude_mpm/services/visualization/__init__.py +15 -0
  762. claude_mpm/services/visualization/mermaid_generator.py +937 -0
  763. claude_mpm/skills/__init__.py +42 -0
  764. claude_mpm/skills/agent_skills_injector.py +324 -0
  765. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  766. claude_mpm/skills/bundled/__init__.py +6 -0
  767. claude_mpm/skills/bundled/api-documentation.md +393 -0
  768. claude_mpm/skills/bundled/async-testing.md +571 -0
  769. claude_mpm/skills/bundled/code-review.md +143 -0
  770. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  771. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  772. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  773. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  774. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  775. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  776. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  777. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  778. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  779. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  780. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  781. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  782. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  783. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  784. claude_mpm/skills/bundled/database-migration.md +199 -0
  785. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  786. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  787. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  788. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  789. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  790. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  791. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  792. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  793. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  794. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  795. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  796. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  797. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  798. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  799. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  800. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  801. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  802. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  803. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  804. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  805. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  806. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  807. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  808. claude_mpm/skills/bundled/git-workflow.md +414 -0
  809. claude_mpm/skills/bundled/imagemagick.md +204 -0
  810. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  811. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  812. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  813. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  814. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  815. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  816. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  817. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  818. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  819. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  820. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  821. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  822. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  823. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  824. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  825. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  826. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  827. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  828. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  829. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  830. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  831. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  832. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  833. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  834. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  835. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  836. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  837. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  838. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  839. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  840. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  841. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  842. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  843. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  844. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  845. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  846. claude_mpm/skills/bundled/pdf.md +141 -0
  847. claude_mpm/skills/bundled/performance-profiling.md +573 -0
  848. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  849. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  850. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  851. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  852. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  853. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  854. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  855. claude_mpm/skills/bundled/pm/pm-bug-reporting/pm-bug-reporting.md +248 -0
  856. claude_mpm/skills/bundled/pm/pm-delegation-patterns/SKILL.md +167 -0
  857. claude_mpm/skills/bundled/pm/pm-git-file-tracking/SKILL.md +113 -0
  858. claude_mpm/skills/bundled/pm/pm-pr-workflow/SKILL.md +124 -0
  859. claude_mpm/skills/bundled/pm/pm-teaching-mode/SKILL.md +657 -0
  860. claude_mpm/skills/bundled/pm/pm-ticketing-integration/SKILL.md +154 -0
  861. claude_mpm/skills/bundled/pm/pm-verification-protocols/SKILL.md +198 -0
  862. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  863. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  864. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  865. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  866. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  867. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  868. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  869. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  870. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  871. claude_mpm/skills/bundled/security-scanning.md +439 -0
  872. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  873. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  874. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  875. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  876. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  877. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  878. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  879. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  880. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  881. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  882. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  883. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  884. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  885. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  886. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  887. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  888. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  889. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  890. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  891. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  892. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  893. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  894. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  895. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  896. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  897. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  898. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  899. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  900. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  901. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  902. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  903. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  904. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  905. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  906. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  907. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  908. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  909. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  910. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  911. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  912. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  913. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  914. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  915. claude_mpm/skills/bundled/xlsx.md +157 -0
  916. claude_mpm/skills/registry.py +286 -0
  917. claude_mpm/skills/skill_manager.py +405 -0
  918. claude_mpm/skills/skills_registry.py +347 -0
  919. claude_mpm/skills/skills_service.py +739 -0
  920. claude_mpm/storage/__init__.py +9 -0
  921. claude_mpm/storage/state_storage.py +546 -0
  922. claude_mpm/templates/.pre-commit-config.yaml +112 -0
  923. claude_mpm/templates/questions/__init__.py +38 -0
  924. claude_mpm/templates/questions/base.py +193 -0
  925. claude_mpm/templates/questions/pr_strategy.py +311 -0
  926. claude_mpm/templates/questions/project_init.py +385 -0
  927. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  928. claude_mpm/ticket_wrapper.py +2 -2
  929. claude_mpm/tools/__init__.py +10 -0
  930. claude_mpm/tools/__main__.py +208 -0
  931. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  932. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  933. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  934. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  935. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  936. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  937. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  938. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  939. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  940. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  941. claude_mpm/tools/code_tree_builder.py +631 -0
  942. claude_mpm/tools/code_tree_events.py +420 -0
  943. claude_mpm/tools/socketio_debug.py +671 -0
  944. claude_mpm/utils/__init__.py +8 -8
  945. claude_mpm/utils/agent_dependency_loader.py +1189 -0
  946. claude_mpm/utils/agent_filters.py +261 -0
  947. claude_mpm/utils/common.py +544 -0
  948. claude_mpm/utils/config_manager.py +168 -126
  949. claude_mpm/utils/console.py +11 -0
  950. claude_mpm/utils/database_connector.py +298 -0
  951. claude_mpm/utils/dependency_cache.py +373 -0
  952. claude_mpm/utils/dependency_manager.py +60 -59
  953. claude_mpm/utils/dependency_strategies.py +381 -0
  954. claude_mpm/utils/display_helper.py +260 -0
  955. claude_mpm/utils/environment_context.py +313 -0
  956. claude_mpm/utils/error_handler.py +78 -66
  957. claude_mpm/utils/file_utils.py +305 -0
  958. claude_mpm/utils/framework_detection.py +12 -11
  959. claude_mpm/utils/git_analyzer.py +407 -0
  960. claude_mpm/utils/gitignore.py +244 -0
  961. claude_mpm/utils/import_migration_example.py +12 -60
  962. claude_mpm/utils/imports.py +48 -45
  963. claude_mpm/utils/log_cleanup.py +627 -0
  964. claude_mpm/utils/migration.py +372 -0
  965. claude_mpm/utils/path_operations.py +110 -104
  966. claude_mpm/utils/progress.py +387 -0
  967. claude_mpm/utils/robust_installer.py +844 -0
  968. claude_mpm/utils/session_logging.py +121 -0
  969. claude_mpm/utils/structured_questions.py +619 -0
  970. claude_mpm/utils/subprocess_utils.py +343 -0
  971. claude_mpm/validation/__init__.py +1 -1
  972. claude_mpm/validation/agent_validator.py +214 -108
  973. claude_mpm/validation/frontmatter_validator.py +252 -0
  974. claude_mpm-5.4.85.dist-info/METADATA +1023 -0
  975. claude_mpm-5.4.85.dist-info/RECORD +980 -0
  976. {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.85.dist-info}/entry_points.txt +1 -3
  977. claude_mpm-5.4.85.dist-info/licenses/LICENSE +94 -0
  978. claude_mpm-5.4.85.dist-info/licenses/LICENSE-FAQ.md +153 -0
  979. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -88
  980. claude_mpm/agents/INSTRUCTIONS.md +0 -352
  981. claude_mpm/agents/backups/INSTRUCTIONS.md +0 -352
  982. claude_mpm/agents/base_agent_loader.py +0 -529
  983. claude_mpm/agents/schema/agent_schema.json +0 -314
  984. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -36
  985. claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +0 -46
  986. claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json +0 -45
  987. claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json +0 -49
  988. claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json +0 -46
  989. claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json +0 -45
  990. claude_mpm/agents/templates/backup/research_agent_20250726_234551.json +0 -49
  991. claude_mpm/agents/templates/backup/security_agent_20250726_234551.json +0 -46
  992. claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json +0 -46
  993. claude_mpm/agents/templates/data_engineer.json +0 -110
  994. claude_mpm/agents/templates/documentation.json +0 -109
  995. claude_mpm/agents/templates/engineer.json +0 -113
  996. claude_mpm/agents/templates/ops.json +0 -109
  997. claude_mpm/agents/templates/pm.json +0 -25
  998. claude_mpm/agents/templates/qa.json +0 -111
  999. claude_mpm/agents/templates/research.json +0 -65
  1000. claude_mpm/agents/templates/security.json +0 -113
  1001. claude_mpm/agents/templates/test_integration.json +0 -112
  1002. claude_mpm/agents/templates/version_control.json +0 -107
  1003. claude_mpm/cli/commands/ui.py +0 -57
  1004. claude_mpm/core/simple_runner.py +0 -1046
  1005. claude_mpm/dashboard/open_dashboard.py +0 -34
  1006. claude_mpm/deployment_paths.py +0 -261
  1007. claude_mpm/hooks/builtin/__init__.py +0 -1
  1008. claude_mpm/hooks/builtin/logging_hook_example.py +0 -165
  1009. claude_mpm/hooks/builtin/memory_hooks_example.py +0 -67
  1010. claude_mpm/hooks/builtin/mpm_command_hook.py +0 -125
  1011. claude_mpm/hooks/builtin/post_delegation_hook_example.py +0 -124
  1012. claude_mpm/hooks/builtin/pre_delegation_hook_example.py +0 -125
  1013. claude_mpm/hooks/builtin/submit_hook_example.py +0 -100
  1014. claude_mpm/hooks/builtin/ticket_extraction_hook_example.py +0 -237
  1015. claude_mpm/hooks/builtin/todo_agent_prefix_hook.py +0 -240
  1016. claude_mpm/hooks/builtin/workflow_start_hook.py +0 -181
  1017. claude_mpm/orchestration/__init__.py +0 -6
  1018. claude_mpm/orchestration/archive/direct_orchestrator.py +0 -195
  1019. claude_mpm/orchestration/archive/factory.py +0 -215
  1020. claude_mpm/orchestration/archive/hook_enabled_orchestrator.py +0 -188
  1021. claude_mpm/orchestration/archive/hook_integration_example.py +0 -178
  1022. claude_mpm/orchestration/archive/interactive_subprocess_orchestrator.py +0 -826
  1023. claude_mpm/orchestration/archive/orchestrator.py +0 -501
  1024. claude_mpm/orchestration/archive/pexpect_orchestrator.py +0 -252
  1025. claude_mpm/orchestration/archive/pty_orchestrator.py +0 -270
  1026. claude_mpm/orchestration/archive/simple_orchestrator.py +0 -82
  1027. claude_mpm/orchestration/archive/subprocess_orchestrator.py +0 -801
  1028. claude_mpm/orchestration/archive/system_prompt_orchestrator.py +0 -278
  1029. claude_mpm/orchestration/archive/wrapper_orchestrator.py +0 -187
  1030. claude_mpm/schemas/workflow_validator.py +0 -411
  1031. claude_mpm/services/agent_deployment.py +0 -1534
  1032. claude_mpm/services/agent_lifecycle_manager.py +0 -1169
  1033. claude_mpm/services/agent_memory_manager.py +0 -1415
  1034. claude_mpm/services/agent_registry.py +0 -676
  1035. claude_mpm/services/deployed_agent_discovery.py +0 -226
  1036. claude_mpm/services/framework_agent_loader.py +0 -337
  1037. claude_mpm/services/framework_claude_md_generator.py +0 -621
  1038. claude_mpm/services/health_monitor.py +0 -892
  1039. claude_mpm/services/memory_router.py +0 -538
  1040. claude_mpm/services/parent_directory_manager/__init__.py +0 -577
  1041. claude_mpm/services/parent_directory_manager/backup_manager.py +0 -258
  1042. claude_mpm/services/parent_directory_manager/config_manager.py +0 -210
  1043. claude_mpm/services/parent_directory_manager/deduplication_manager.py +0 -279
  1044. claude_mpm/services/parent_directory_manager/framework_protector.py +0 -143
  1045. claude_mpm/services/parent_directory_manager/operations.py +0 -186
  1046. claude_mpm/services/parent_directory_manager/state_manager.py +0 -624
  1047. claude_mpm/services/parent_directory_manager/template_deployer.py +0 -579
  1048. claude_mpm/services/parent_directory_manager/validation_manager.py +0 -378
  1049. claude_mpm/services/parent_directory_manager/version_control_helper.py +0 -339
  1050. claude_mpm/services/parent_directory_manager/version_manager.py +0 -222
  1051. claude_mpm/services/standalone_socketio_server.py +0 -1300
  1052. claude_mpm/services/ticket_manager_di.py +0 -318
  1053. claude_mpm/services/ticketing_service_original.py +0 -508
  1054. claude_mpm/ui/__init__.py +0 -1
  1055. claude_mpm/ui/rich_terminal_ui.py +0 -295
  1056. claude_mpm/ui/terminal_ui.py +0 -328
  1057. claude_mpm/utils/paths.py +0 -289
  1058. claude_mpm-3.4.10.dist-info/METADATA +0 -183
  1059. claude_mpm-3.4.10.dist-info/RECORD +0 -201
  1060. claude_mpm-3.4.10.dist-info/licenses/LICENSE +0 -21
  1061. {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.85.dist-info}/WHEEL +0 -0
  1062. {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.85.dist-info}/top_level.txt +0 -0
@@ -4,483 +4,585 @@ Memory command implementation for claude-mpm.
4
4
  WHY: This module provides CLI commands for managing agent memory files,
5
5
  allowing users to view, add, and manage persistent learnings across sessions.
6
6
 
7
- DESIGN DECISION: We follow the existing CLI pattern using a main function
8
- that dispatches to specific subcommand handlers. This maintains consistency
9
- with other command modules like agents.py.
7
+ DESIGN DECISIONS:
8
+ - Use MemoryCommand base class for consistent CLI patterns
9
+ - Leverage shared utilities for argument parsing and output formatting
10
+ - Maintain backward compatibility with existing functionality
11
+ - Support multiple output formats (json, yaml, table, text)
10
12
  """
11
13
 
12
14
  import json
13
15
  import os
14
- from datetime import datetime
15
16
  from pathlib import Path
17
+ from typing import Any, Dict
18
+
19
+ from ...core.enums import OutputFormat
20
+ from ...core.shared.config_loader import ConfigLoader
21
+ from ...services.agents.memory import AgentMemoryManager
22
+ from ...services.cli.memory_crud_service import MemoryCRUDService
23
+ from ...services.cli.memory_output_formatter import MemoryOutputFormatter
24
+ from ..shared.base_command import CommandResult, MemoryCommand
25
+
26
+
27
+ def _is_structured_output(args) -> bool:
28
+ """Check if args specify structured output format (JSON/YAML)."""
29
+ if hasattr(args, "format"):
30
+ fmt = str(args.format).lower()
31
+ return fmt in (OutputFormat.JSON, OutputFormat.YAML)
32
+ return False
33
+
34
+
35
+ class MemoryManagementCommand(MemoryCommand):
36
+ """Memory management command using shared utilities."""
37
+
38
+ def __init__(self):
39
+ super().__init__("memory")
40
+ self._memory_manager = None
41
+ self._formatter = None
42
+ self._crud_service = None
43
+
44
+ @property
45
+ def memory_manager(self):
46
+ """Get memory manager instance (lazy loaded)."""
47
+ if self._memory_manager is None:
48
+ config_loader = ConfigLoader()
49
+ config = config_loader.load_main_config()
50
+ # Use CLAUDE_MPM_USER_PWD if available, otherwise use current working directory
51
+ user_pwd = os.environ.get("CLAUDE_MPM_USER_PWD", Path.cwd())
52
+ current_dir = Path(user_pwd)
53
+ self._memory_manager = AgentMemoryManager(config, current_dir)
54
+ return self._memory_manager
55
+
56
+ @property
57
+ def formatter(self):
58
+ """Get formatter instance (lazy loaded)."""
59
+ if self._formatter is None:
60
+ # Check if quiet mode is requested
61
+ quiet = os.environ.get("CLAUDE_MPM_QUIET", "false").lower() == "true"
62
+ self._formatter = MemoryOutputFormatter(quiet=quiet)
63
+ return self._formatter
64
+
65
+ @property
66
+ def crud_service(self):
67
+ """Get CRUD service instance (lazy loaded)."""
68
+ if self._crud_service is None:
69
+ self._crud_service = MemoryCRUDService(memory_manager=self.memory_manager)
70
+ return self._crud_service
71
+
72
+ def _get_output_format(self, args) -> str:
73
+ """
74
+ Get output format from args with enum default.
75
+
76
+ Args:
77
+ args: Command arguments
78
+
79
+ Returns:
80
+ Output format string (compatible with both enum and string usage)
81
+ """
82
+ return getattr(args, "format", OutputFormat.TEXT)
83
+
84
+ def _is_structured_format(self, format_str: str) -> bool:
85
+ """
86
+ Check if format is structured (JSON/YAML).
87
+
88
+ Args:
89
+ format_str: Format string to check
90
+
91
+ Returns:
92
+ True if format is JSON or YAML
93
+ """
94
+ fmt = str(format_str).lower()
95
+ return fmt in (OutputFormat.JSON, OutputFormat.YAML)
96
+
97
+ def validate_args(self, args) -> str:
98
+ """Validate command arguments."""
99
+ # Check if memory command is valid
100
+ if hasattr(args, "memory_command") and args.memory_command:
101
+ valid_commands = [
102
+ "init",
103
+ "view",
104
+ "add",
105
+ "clean",
106
+ "optimize",
107
+ "build",
108
+ "cross-ref",
109
+ "route",
110
+ ]
111
+ if args.memory_command not in valid_commands:
112
+ return f"Unknown memory command: {args.memory_command}. Valid commands: {', '.join(valid_commands)}"
113
+ return None
114
+
115
+ def run(self, args) -> CommandResult:
116
+ """Execute the memory command."""
117
+ try:
118
+ # Handle default case (no subcommand)
119
+ if not hasattr(args, "memory_command") or not args.memory_command:
120
+ return self._show_status(args)
121
+
122
+ # Route to specific subcommand handlers
123
+ command_map = {
124
+ "init": self._init_memory,
125
+ "status": self._show_status,
126
+ "view": self._show_memories,
127
+ "add": self._add_learning,
128
+ "clean": self._clean_memory,
129
+ "optimize": self._optimize_memory,
130
+ "build": self._build_memory,
131
+ "cross-ref": self._cross_reference_memory,
132
+ "show": self._show_memories,
133
+ "route": self._route_memory_command,
134
+ }
16
135
 
17
- import click
136
+ if args.memory_command in command_map:
137
+ return command_map[args.memory_command](args)
138
+ available_commands = list(command_map.keys())
139
+ error_msg = f"Unknown memory command: {args.memory_command}"
18
140
 
19
- from ...core.logger import get_logger
20
- from ...core.config import Config
21
- from ...services.agent_memory_manager import AgentMemoryManager
141
+ output_format = self._get_output_format(args)
142
+ if self._is_structured_format(output_format):
143
+ return CommandResult.error_result(
144
+ error_msg, data={"available_commands": available_commands}
145
+ )
146
+ print(f"❌ {error_msg}")
147
+ print(f"Available commands: {', '.join(available_commands)}")
148
+ return CommandResult.error_result(error_msg)
22
149
 
150
+ except Exception as e:
151
+ self.logger.error(f"Error managing memory: {e}", exc_info=True)
152
+ return CommandResult.error_result(f"Error managing memory: {e}")
23
153
 
24
- def manage_memory(args):
25
- """
26
- Manage agent memory files.
27
-
28
- WHY: Agents need persistent memory to maintain learnings across sessions.
29
- This command provides a unified interface for memory-related operations.
30
-
31
- DESIGN DECISION: When no subcommand is provided, we show memory status
32
- as the default action, giving users a quick overview of the memory system.
33
-
34
- Args:
35
- args: Parsed command line arguments with memory_command attribute
36
- """
37
- logger = get_logger("cli")
38
-
39
- try:
40
- # Load configuration for memory manager
41
- config = Config()
42
- # Use CLAUDE_MPM_USER_PWD if available (when called via shell script),
43
- # otherwise use current working directory
44
- user_pwd = os.environ.get('CLAUDE_MPM_USER_PWD', os.getcwd())
45
- current_dir = Path(user_pwd)
46
- memory_manager = AgentMemoryManager(config, current_dir)
47
-
48
- if not args.memory_command:
49
- # No subcommand - show status
50
- _show_status(memory_manager)
51
- return
52
-
53
- if args.memory_command == "status":
54
- _show_status(memory_manager)
55
-
56
- elif args.memory_command == "view":
57
- _show_memories(args, memory_manager)
58
-
59
- elif args.memory_command == "add":
60
- _add_learning(args, memory_manager)
61
-
62
- elif args.memory_command == "clean":
63
- _clean_memory(args, memory_manager)
64
-
65
- elif args.memory_command == "optimize":
66
- _optimize_memory(args, memory_manager)
67
-
68
- elif args.memory_command == "build":
69
- _build_memory(args, memory_manager)
70
-
71
- elif args.memory_command == "cross-ref":
72
- _cross_reference_memory(args, memory_manager)
73
-
74
- elif args.memory_command == "route":
75
- _route_memory_command(args, memory_manager)
76
-
77
- elif args.memory_command == "show":
78
- _show_memories(args, memory_manager)
79
-
80
- elif args.memory_command == "init":
81
- _init_memory(args, memory_manager)
82
-
83
- else:
84
- logger.error(f"Unknown memory command: {args.memory_command}")
85
- print(f"Unknown memory command: {args.memory_command}")
86
- print("Available commands: init, status, view, add, clean, optimize, build, cross-ref, route, show")
87
- return 1
88
-
89
- except Exception as e:
90
- logger.error(f"Error managing memory: {e}")
91
- print(f"❌ Error: {e}")
92
- return 1
93
-
94
- return 0
154
+ def _show_status(self, args) -> CommandResult:
155
+ """Show memory system status."""
156
+ try:
157
+ output_format = self._get_output_format(args)
158
+
159
+ if self._is_structured_format(output_format):
160
+ # Structured output
161
+ status_data = self._get_status_data()
162
+ return CommandResult.success_result(
163
+ "Memory status retrieved", data=status_data
164
+ )
165
+ # Text output using formatter
166
+ status = self.memory_manager.get_memory_status()
167
+ output = self.formatter.format_status(status)
168
+ print(output)
169
+ return CommandResult.success_result("Memory status displayed")
95
170
 
171
+ except Exception as e:
172
+ self.logger.error(f"Error showing memory status: {e}", exc_info=True)
173
+ return CommandResult.error_result(f"Error showing memory status: {e}")
174
+
175
+ def _get_status_data(self) -> Dict[str, Any]:
176
+ """Get memory status as structured data."""
177
+ # Use CRUD service to list memories with stats
178
+ result = self.crud_service.list_memories(include_stats=True)
179
+
180
+ if not result.get("success"):
181
+ return {
182
+ "error": result.get("error", "Failed to get status"),
183
+ "exists": False,
184
+ "agents": [],
185
+ "total_size_kb": 0,
186
+ "total_files": 0,
187
+ }
96
188
 
97
- def _init_memory(args, memory_manager):
98
- """
99
- Initialize project-specific memories via agent delegation.
100
-
101
- WHY: When starting with a new project, agents need project-specific knowledge
102
- beyond what automatic analysis provides. This command triggers an agent task
103
- to comprehensively scan the project and create custom memories.
104
-
105
- Args:
106
- args: Command line arguments (unused but kept for consistency)
107
- memory_manager: AgentMemoryManager instance
108
- """
109
- logger = get_logger("cli")
110
-
111
- print("🚀 Initializing project-specific memories...")
112
- print("=" * 80)
113
- print()
114
- print("This will analyze the project to:")
115
- print(" 1. Scan project structure and documentation")
116
- print(" 2. Analyze source code for patterns and conventions")
117
- print(" 3. Create targeted memories for each agent type")
118
- print(" 4. Add insights using 'claude-mpm memory add' commands")
119
- print()
120
- print("The analysis will cover:")
121
- print(" • Project architecture and design patterns")
122
- print(" • Coding conventions and standards")
123
- print(" • Key modules and integration points")
124
- print(" • Testing patterns and quality standards")
125
- print(" • Performance considerations")
126
- print(" • Domain-specific terminology")
127
- print()
128
- print("=" * 80)
129
- print()
130
- print("[Agent Task: Initialize Project-Specific Memories]")
131
- print()
132
- print("Please analyze this project and create custom memories for all agents.")
133
- print()
134
- print("Instructions:")
135
- print("1. Scan the project structure, documentation, and source code")
136
- print("2. Identify key patterns, conventions, and project-specific knowledge")
137
- print("3. Create targeted memories for each agent type")
138
- print("4. Use 'claude-mpm memory add <agent> <type> \"<content>\"' commands")
139
- print()
140
- print("Focus areas:")
141
- print(" • Architectural patterns and design decisions")
142
- print(" • Coding conventions from actual source code")
143
- print(" • Key modules, APIs, and integration points")
144
- print(" Testing patterns and quality standards")
145
- print(" • Performance considerations specific to this project")
146
- print(" • Common pitfalls based on the codebase")
147
- print(" Domain-specific terminology and concepts")
148
- print()
149
- print("Example commands to use:")
150
- print(' claude-mpm memory add engineer pattern "Use dependency injection with @inject"')
151
- print(' claude-mpm memory add qa pattern "Test files follow test_<module>_<feature>.py"')
152
- print(' claude-mpm memory add research context "Project uses microservices architecture"')
153
- print()
154
- print("Begin by examining the project structure and key files.")
155
- print()
156
- print("=" * 80)
157
- print()
158
- print("📝 Note: Copy the task above to execute the memory initialization process.")
159
- print(" Use 'claude-mpm memory add' commands to add discovered insights.")
160
-
161
-
162
- def _show_status(memory_manager):
163
- """
164
- Show comprehensive memory system status.
165
-
166
- WHY: Users need to see memory system health, file sizes, optimization
167
- opportunities, and agent-specific statistics to understand the system state.
168
-
169
- Args:
170
- memory_manager: AgentMemoryManager instance
171
- """
172
- print("Agent Memory System Status")
173
- print("-" * 80)
174
-
175
- try:
176
- # Get comprehensive status from memory manager
177
- status = memory_manager.get_memory_status()
178
-
179
- if not status.get("success", True):
180
- print(f"❌ Error getting status: {status.get('error', 'Unknown error')}")
181
- return
182
-
183
- # Show system overview
184
- system_health = status.get("system_health", "unknown")
185
- health_emoji = {
186
- "healthy": "✅",
187
- "needs_optimization": "⚠️",
188
- "high_usage": "📊",
189
- "no_memory_dir": "📁"
190
- }.get(system_health, "❓")
191
-
192
- print(f"🧠 Memory System Health: {health_emoji} {system_health}")
193
- print(f"📁 Memory Directory: {status.get('memory_directory', 'Unknown')}")
194
- print(f"🔧 System Enabled: {'Yes' if status.get('system_enabled', True) else 'No'}")
195
- print(f"📚 Auto Learning: {'Yes' if status.get('auto_learning', True) else 'No'}")
196
- print(f"📊 Total Agents: {status.get('total_agents', 0)}")
197
- print(f"💾 Total Size: {status.get('total_size_kb', 0):.1f} KB")
198
- print()
199
-
200
- # Show optimization opportunities
201
- opportunities = status.get("optimization_opportunities", [])
202
- if opportunities:
203
- print(f"⚠️ Optimization Opportunities ({len(opportunities)}):")
204
- for opportunity in opportunities[:5]: # Show top 5
205
- print(f" • {opportunity}")
206
- if len(opportunities) > 5:
207
- print(f" ... and {len(opportunities) - 5} more")
208
- print()
209
-
210
- # Show per-agent details
211
- agents = status.get("agents", {})
212
- if agents:
213
- print(f"📋 Agent Memory Details:")
214
- for agent_id, agent_info in sorted(agents.items()):
215
- if "error" in agent_info:
216
- print(f" ❌ {agent_id}: Error - {agent_info['error']}")
217
- continue
218
-
219
- size_kb = agent_info.get("size_kb", 0)
220
- size_limit = agent_info.get("size_limit_kb", 8)
221
- utilization = agent_info.get("size_utilization", 0)
222
- sections = agent_info.get("sections", 0)
223
- items = agent_info.get("items", 0)
224
- last_modified = agent_info.get("last_modified", "Unknown")
225
- auto_learning = agent_info.get("auto_learning", True)
226
-
227
- # Format last modified time
228
- try:
229
- from datetime import datetime
230
- dt = datetime.fromisoformat(last_modified.replace('Z', '+00:00'))
231
- last_modified_str = dt.strftime('%Y-%m-%d %H:%M:%S')
232
- except:
233
- last_modified_str = last_modified
234
-
235
- # Status indicator based on usage
236
- if utilization > 90:
237
- status_emoji = "🔴" # High usage
238
- elif utilization > 70:
239
- status_emoji = "🟡" # Medium usage
189
+ # Transform CRUD service result to expected format
190
+ memories = result.get("memories", [])
191
+ agents = [
192
+ {
193
+ "agent_id": mem["agent_id"],
194
+ "file": mem["file"],
195
+ "size_kb": mem.get("size_kb", 0),
196
+ "path": mem["path"],
197
+ }
198
+ for mem in memories
199
+ ]
200
+
201
+ return {
202
+ "memory_directory": result.get("memory_directory", ""),
203
+ "exists": result.get("exists", False),
204
+ "agents": agents,
205
+ "total_size_kb": result.get("total_size_kb", 0),
206
+ "total_files": result.get("total_files", 0),
207
+ }
208
+
209
+ def _show_memories(self, args) -> CommandResult:
210
+ """Show agent memories."""
211
+ try:
212
+ output_format = self._get_output_format(args)
213
+ agent_id = getattr(args, "agent_id", None)
214
+ raw_output = getattr(args, "raw", False)
215
+
216
+ if output_format in ["json", "yaml"] or raw_output:
217
+ # Use CRUD service for structured output
218
+ result = self.crud_service.read_memory(agent_id)
219
+
220
+ if not result.get("success"):
221
+ return CommandResult.error_result(
222
+ result.get("error", "Failed to read memories")
223
+ )
224
+
225
+ if raw_output:
226
+ # Output raw JSON for external tools
227
+ print(json.dumps(result, indent=2, ensure_ascii=False))
228
+ return CommandResult.success_result("Raw memory data output")
229
+
230
+ return CommandResult.success_result("Memories retrieved", data=result)
231
+
232
+ # Text output
233
+ result = self.crud_service.read_memory(agent_id)
234
+
235
+ if not result.get("success"):
236
+ print(f" {result.get('error', 'Failed to read memories')}")
237
+ return CommandResult.error_result(result.get("error"))
238
+
239
+ print("🧠 Agent Memories Display")
240
+ print("-" * 80)
241
+
242
+ if agent_id:
243
+ # Single agent memory
244
+ content = result.get("content", "")
245
+ if content:
246
+ output = self.formatter.format_memory_view(
247
+ agent_id, content, getattr(args, "format", "detailed")
248
+ )
249
+ print(output)
240
250
  else:
241
- status_emoji = "🟢" # Low usage
242
-
243
- print(f" {status_emoji} {agent_id}")
244
- print(f" Size: {size_kb:.1f} KB / {size_limit} KB ({utilization:.1f}%)")
245
- print(f" Content: {sections} sections, {items} items")
246
- print(f" Auto-learning: {'On' if auto_learning else 'Off'}")
247
- print(f" Last modified: {last_modified_str}")
248
- else:
249
- print("📭 No agent memories found")
250
-
251
- except Exception as e:
252
- print(f"❌ Error showing status: {e}")
253
- # Fallback to basic status display
254
- _show_basic_status(memory_manager)
255
-
256
-
257
- def _show_basic_status(memory_manager):
258
- """Fallback basic status display if comprehensive status fails."""
259
- print("\n--- Basic Status (Fallback) ---")
260
-
261
- memory_dir = memory_manager.memories_dir
262
- if not memory_dir.exists():
263
- print("📁 Memory directory not found - no agent memories stored yet")
264
- print(f" Expected location: {memory_dir}")
265
- return
266
-
267
- memory_files = list(memory_dir.glob("*_agent.md"))
268
-
269
- if not memory_files:
270
- print("📭 No memory files found")
271
- print(f" Memory directory: {memory_dir}")
272
- return
273
-
274
- print(f"📁 Memory directory: {memory_dir}")
275
- print(f"📊 Total memory files: {len(memory_files)}")
276
-
277
- total_size = 0
278
- for file_path in sorted(memory_files):
279
- stat = file_path.stat()
280
- size_kb = stat.st_size / 1024
281
- total_size += stat.st_size
282
-
283
- agent_id = file_path.stem.replace('_agent', '')
284
- print(f" {agent_id}: {size_kb:.1f} KB")
285
-
286
- print(f"💾 Total size: {total_size / 1024:.1f} KB")
287
-
288
-
289
- def _view_memory(args, memory_manager):
290
- """
291
- View agent memory file contents.
292
-
293
- WHY: Users need to inspect what learnings an agent has accumulated
294
- to understand its behavior and debug issues.
295
-
296
- Args:
297
- args: Command arguments with agent_id
298
- memory_manager: AgentMemoryManager instance
299
- """
300
- agent_id = args.agent_id
301
-
302
- try:
303
- memory_content = memory_manager.load_agent_memory(agent_id)
304
-
305
- if not memory_content:
306
- print(f"📭 No memory found for agent: {agent_id}")
307
- return
308
-
309
- print(f"🧠 Memory for agent: {agent_id}")
310
- print("-" * 80)
311
- print(memory_content)
312
-
313
- except FileNotFoundError:
314
- print(f"📭 No memory file found for agent: {agent_id}")
315
- except Exception as e:
316
- print(f"❌ Error viewing memory: {e}")
251
+ print(f"📭 No memory found for agent: {agent_id}")
252
+ else:
253
+ # All agent memories
254
+ agents = result.get("agents", {})
255
+ if agents:
256
+ # Parse and format all memories
257
+ agent_memories = {}
258
+ for aid, data in agents.items():
259
+ sections = self.formatter._parse_memory_content(
260
+ data.get("content", "")
261
+ )
262
+ agent_memories[aid] = sections
263
+
264
+ output = self.formatter.format_agent_memories_summary(
265
+ agent_memories, getattr(args, "format", "detailed")
266
+ )
267
+ print(output)
268
+ else:
269
+ print("📭 No agent memories found")
317
270
 
271
+ return CommandResult.success_result("Memories displayed")
318
272
 
319
- def _add_learning(args, memory_manager):
320
- """
321
- Manually add learning to agent memory.
322
-
323
- WHY: Allows manual injection of learnings for testing or correction
324
- purposes, useful for debugging and development.
325
-
326
- Args:
327
- args: Command arguments with agent_id, learning_type, and content
328
- memory_manager: AgentMemoryManager instance
329
- """
330
- agent_id = args.agent_id
331
- section = args.learning_type # Map learning_type to section name
332
- content = args.content
333
-
334
- # Map learning types to appropriate sections
335
- section_map = {
336
- "pattern": "Project Architecture",
337
- "error": "Common Mistakes to Avoid",
338
- "optimization": "Implementation Guidelines",
339
- "preference": "Implementation Guidelines",
340
- "context": "Current Technical Context"
341
- }
342
-
343
- section_name = section_map.get(section, "Current Technical Context")
344
-
345
- try:
346
- success = memory_manager.update_agent_memory(agent_id, section_name, content)
347
-
348
- if success:
349
- print(f"✅ Added {section} to {agent_id} memory in section: {section_name}")
350
- print(f" Content: {content[:100]}{'...' if len(content) > 100 else ''}")
351
- else:
352
- print(f"❌ Failed to add learning to {agent_id} memory")
353
- print(" Memory file may be at size limit or section may be full")
354
-
355
- except Exception as e:
356
- print(f"❌ Error adding learning: {e}")
273
+ except Exception as e:
274
+ self.logger.error(f"Error showing memories: {e}", exc_info=True)
275
+ return CommandResult.error_result(f"Error showing memories: {e}")
357
276
 
277
+ # Removed _get_memories_data - now handled inline with CRUD service
358
278
 
359
- def _clean_memory(args, memory_manager):
360
- """
361
- Clean up old/unused memory files.
362
-
363
- WHY: Memory files can accumulate over time. This provides a way to
364
- clean up old or unused files to save disk space.
365
-
366
- DESIGN DECISION: For Phase 1, this is a stub implementation.
367
- Full cleanup logic will be implemented based on usage patterns.
368
-
369
- Args:
370
- args: Command arguments
371
- memory_manager: AgentMemoryManager instance
372
- """
373
- print("🧹 Memory cleanup")
374
- print("-" * 80)
375
-
376
- # For Phase 1, just show what would be cleaned
377
- memory_dir = memory_manager.memories_dir
378
- if not memory_dir.exists():
379
- print("📁 No memory directory found - nothing to clean")
380
- return
381
-
382
- memory_files = list(memory_dir.glob("*_agent.md"))
383
- if not memory_files:
384
- print("📭 No memory files found - nothing to clean")
385
- return
386
-
387
- print(f"📊 Found {len(memory_files)} memory files")
388
- print()
389
- print("⚠️ Cleanup not yet implemented in Phase 1")
390
- print(" Future cleanup will remove:")
391
- print(" - Memory files older than 30 days with no recent access")
392
- print(" - Corrupted memory files")
393
- print(" - Memory files for non-existent agents")
279
+ def _init_memory(self, args) -> CommandResult:
280
+ """Initialize project-specific memories."""
281
+ try:
282
+ output_format = self._get_output_format(args)
283
+
284
+ # Use CRUD service for initialization task
285
+ result = self.crud_service.init_project_memories()
286
+
287
+ if not result.get("success"):
288
+ return CommandResult.error_result(
289
+ result.get("error", "Failed to create initialization task")
290
+ )
291
+
292
+ if self._is_structured_format(output_format):
293
+ # Return structured task data
294
+ return CommandResult.success_result(
295
+ "Memory initialization task created", data=result.get("task_data")
296
+ )
297
+
298
+ # Text output - display the task
299
+ task = result.get("task_data", {})
300
+ print("🚀 Initializing project-specific memories...")
301
+ print("=" * 80)
302
+ print()
303
+ print("This will analyze the project to:")
304
+ for idx, instruction in enumerate(task.get("instructions", []), 1):
305
+ print(f" {idx}. {instruction}")
306
+ print()
307
+ print("The analysis will cover:")
308
+ for area in task.get("focus_areas", []):
309
+ print(f" {area}")
310
+ print()
311
+ print("Example commands to use:")
312
+ for cmd in task.get("example_commands", []):
313
+ print(f" {cmd}")
314
+ print()
315
+ print("=" * 80)
316
+ print()
317
+ print(
318
+ "📝 Note: Copy the task above to execute the memory initialization process."
319
+ )
394
320
 
321
+ return CommandResult.success_result("Memory initialization task displayed")
395
322
 
396
- def _optimize_memory(args, memory_manager):
397
- """
398
- Optimize memory files by removing duplicates and consolidating similar items.
399
-
400
- WHY: Memory files can become cluttered over time with duplicate or redundant
401
- information. This command provides automated cleanup while preserving
402
- important learnings.
403
-
404
- Args:
405
- args: Command arguments with optional agent_id
406
- memory_manager: AgentMemoryManager instance
407
- """
408
- print("🔧 Memory Optimization")
409
- print("-" * 80)
410
-
411
- agent_id = getattr(args, 'agent_id', None)
412
-
413
- try:
414
- if agent_id:
415
- print(f"📊 Optimizing memory for agent: {agent_id}")
416
- result = memory_manager.optimize_memory(agent_id)
417
- else:
418
- print("📊 Optimizing all agent memories...")
419
- result = memory_manager.optimize_memory()
420
-
421
- if result.get("success"):
323
+ except Exception as e:
324
+ self.logger.error(f"Error initializing memory: {e}", exc_info=True)
325
+ return CommandResult.error_result(f"Error initializing memory: {e}")
326
+
327
+ def _add_learning(self, args) -> CommandResult:
328
+ """Add learning to agent memory."""
329
+ try:
330
+ output_format = self._get_output_format(args)
331
+
332
+ # Extract arguments
333
+ agent_id = getattr(args, "agent_id", None)
334
+ learning_type = getattr(args, "learning_type", "context")
335
+ content = getattr(args, "content", "")
336
+
337
+ if not agent_id or not content:
338
+ return CommandResult.error_result(
339
+ "Agent ID and content are required for adding learning"
340
+ )
341
+
342
+ # Use CRUD service to add learning
343
+ result = self.crud_service.update_memory(agent_id, learning_type, content)
344
+
345
+ if not result.get("success"):
346
+ return CommandResult.error_result(
347
+ result.get("error", "Failed to add learning")
348
+ )
349
+
350
+ if self._is_structured_format(output_format):
351
+ # Return structured result
352
+ return CommandResult.success_result(
353
+ "Learning added to agent memory", data=result
354
+ )
355
+
356
+ # Text output
357
+ print(f"✅ Added {learning_type} to {agent_id} memory")
358
+ print(f" Section: {result.get('section', 'Unknown')}")
359
+ print(f" Content: {result.get('content_preview', content[:100])}")
360
+
361
+ return CommandResult.success_result("Learning added")
362
+
363
+ except Exception as e:
364
+ self.logger.error(f"Error adding learning: {e}", exc_info=True)
365
+ return CommandResult.error_result(f"Error adding learning: {e}")
366
+
367
+ def _clean_memory(self, args) -> CommandResult:
368
+ """Clean up old/unused memory files."""
369
+ try:
370
+ output_format = self._get_output_format(args)
371
+ agent_id = getattr(args, "agent_id", None)
372
+ dry_run = getattr(args, "dry_run", True)
373
+
374
+ # Use CRUD service for cleanup
375
+ result = self.crud_service.clean_memory(agent_id=agent_id, dry_run=dry_run)
376
+
377
+ if not result.get("success"):
378
+ return CommandResult.error_result(result.get("error", "Cleanup failed"))
379
+
380
+ if self._is_structured_format(output_format):
381
+ # Return structured cleanup results
382
+ return CommandResult.success_result(
383
+ result.get("message", "Memory cleanup completed"), data=result
384
+ )
385
+
386
+ # Text output
387
+ print("🧹 Memory cleanup")
388
+ print("-" * 80)
389
+
390
+ if dry_run:
391
+ print("📊 Cleanup preview (dry run)")
392
+ candidates = result.get("cleanup_candidates", [])
393
+ if candidates:
394
+ print(f"Found {len(candidates)} files eligible for cleanup:")
395
+ for candidate in candidates:
396
+ print(
397
+ f" • {candidate['agent_id']}: {candidate['size_kb']:.1f} KB, {candidate['age_days']} days old"
398
+ )
399
+ print(f" Reason: {candidate['reason']}")
400
+ else:
401
+ print("No files eligible for cleanup")
402
+ else:
403
+ cleaned = result.get("cleaned_files", [])
404
+ if cleaned:
405
+ print(f"Cleaned {len(cleaned)} files")
406
+ else:
407
+ print(result.get("message", "No files cleaned"))
408
+
409
+ if result.get("note"):
410
+ print(f"\n⚠️ {result['note']}")
411
+
412
+ return CommandResult.success_result("Memory cleanup completed")
413
+
414
+ except Exception as e:
415
+ self.logger.error(f"Error cleaning memory: {e}", exc_info=True)
416
+ return CommandResult.error_result(f"Error cleaning memory: {e}")
417
+
418
+ def _optimize_memory(self, args) -> CommandResult:
419
+ """Optimize memory files."""
420
+ try:
421
+ output_format = self._get_output_format(args)
422
+ agent_id = getattr(args, "agent_id", None)
423
+
424
+ if self._is_structured_format(output_format):
425
+ # For structured output, perform optimization and return results
426
+ if agent_id:
427
+ result = self.memory_manager.optimize_memory(agent_id)
428
+ else:
429
+ result = self.memory_manager.optimize_memory()
430
+ return CommandResult.success_result(
431
+ "Memory optimization completed", data=result
432
+ )
433
+ # Text output using formatter
422
434
  if agent_id:
423
- # Single agent results
424
- _display_single_optimization_result(result)
435
+ print(f"📊 Optimizing memory for agent: {agent_id}")
436
+ result = self.memory_manager.optimize_memory(agent_id)
437
+ output = self.formatter.format_optimization_results(
438
+ result, is_single_agent=True
439
+ )
425
440
  else:
426
- # All agents results
427
- _display_bulk_optimization_results(result)
428
- else:
429
- print(f"❌ Optimization failed: {result.get('error', 'Unknown error')}")
430
-
431
- except Exception as e:
432
- print(f" Error during optimization: {e}")
441
+ print("📊 Optimizing all agent memories...")
442
+ result = self.memory_manager.optimize_memory()
443
+ output = self.formatter.format_optimization_results(
444
+ result, is_single_agent=False
445
+ )
446
+ print(output)
447
+ return CommandResult.success_result("Memory optimization completed")
448
+
449
+ except Exception as e:
450
+ self.logger.error(f"Error optimizing memory: {e}", exc_info=True)
451
+ return CommandResult.error_result(f"Error optimizing memory: {e}")
452
+
453
+ def _build_memory(self, args) -> CommandResult:
454
+ """Build agent memories from project documentation."""
455
+ try:
456
+ output_format = self._get_output_format(args)
457
+
458
+ if self._is_structured_format(output_format):
459
+ # For structured output, return build results
460
+ build_data = {
461
+ "built_memories": [],
462
+ "processed_files": [],
463
+ "summary": "Memory build completed",
464
+ }
465
+ return CommandResult.success_result(
466
+ "Memory build completed", data=build_data
467
+ )
468
+ # Text output using existing function
469
+ _build_memory(args, self.memory_manager)
470
+ return CommandResult.success_result("Memory build completed")
471
+
472
+ except Exception as e:
473
+ self.logger.error(f"Error building memory: {e}", exc_info=True)
474
+ return CommandResult.error_result(f"Error building memory: {e}")
475
+
476
+ def _cross_reference_memory(self, args) -> CommandResult:
477
+ """Find cross-references and common patterns."""
478
+ try:
479
+ output_format = self._get_output_format(args)
480
+
481
+ if self._is_structured_format(output_format):
482
+ # For structured output, return cross-reference results
483
+ crossref_data = {
484
+ "common_patterns": [],
485
+ "agent_similarities": [],
486
+ "summary": "Cross-reference analysis completed",
487
+ }
488
+ return CommandResult.success_result(
489
+ "Cross-reference analysis completed", data=crossref_data
490
+ )
491
+ # Text output using existing function
492
+ _cross_reference_memory(args, self.memory_manager)
493
+ return CommandResult.success_result("Cross-reference analysis completed")
494
+
495
+ except Exception as e:
496
+ self.logger.error(f"Error cross-referencing memory: {e}", exc_info=True)
497
+ return CommandResult.error_result(f"Error cross-referencing memory: {e}")
498
+
499
+ def _route_memory_command(self, args) -> CommandResult:
500
+ """Route memory command to appropriate agent."""
501
+ try:
502
+ output_format = self._get_output_format(args)
503
+
504
+ if self._is_structured_format(output_format):
505
+ # For structured output, return routing results
506
+ routing_data = {
507
+ "routed_to": "memory_agent",
508
+ "command": getattr(args, "command", ""),
509
+ "summary": "Command routed successfully",
510
+ }
511
+ return CommandResult.success_result(
512
+ "Command routed successfully", data=routing_data
513
+ )
514
+ # Text output using existing function
515
+ _route_memory_command(args, self.memory_manager)
516
+ return CommandResult.success_result("Command routed successfully")
517
+
518
+ except Exception as e:
519
+ self.logger.error(f"Error routing memory command: {e}", exc_info=True)
520
+ return CommandResult.error_result(f"Error routing memory command: {e}")
521
+
522
+
523
+ def manage_memory(args) -> int:
524
+ """Main entry point for memory management commands.
525
+
526
+ This function maintains backward compatibility while using the new BaseCommand pattern.
527
+ """
528
+ command = MemoryManagementCommand()
529
+ result = command.execute(args)
530
+
531
+ # Print result if structured output format is requested
532
+ if _is_structured_output(args):
533
+ command.print_result(result, args)
534
+
535
+ return result.exit_code
536
+
537
+
538
+ # Removed _init_memory - now handled by MemoryCRUDService.init_project_memories()
539
+
540
+
541
+ # Removed _show_status - functionality moved to MemoryManagementCommand._show_status()
542
+
543
+
544
+ # Removed _show_basic_status - functionality integrated into MemoryManagementCommand
545
+
546
+
547
+ # Removed _view_memory - functionality moved to MemoryCRUDService.read_memory()
548
+
549
+
550
+ # Removed _add_learning - now handled by MemoryCRUDService.update_memory()
551
+
552
+
553
+ # Removed _clean_memory - now handled by MemoryCRUDService.clean_memory()
554
+
555
+
556
+ # Removed _optimize_memory - functionality moved to MemoryManagementCommand._optimize_memory()
433
557
 
434
558
 
435
559
  def _build_memory(args, memory_manager):
436
560
  """
437
561
  Build agent memories from project documentation.
438
-
562
+
439
563
  WHY: Project documentation contains valuable patterns and guidelines that
440
564
  agents should be aware of. This command automatically extracts and assigns
441
565
  relevant information to appropriate agents.
442
-
566
+
443
567
  Args:
444
568
  args: Command arguments with optional force_rebuild flag
445
569
  memory_manager: AgentMemoryManager instance
446
570
  """
447
571
  print("📚 Memory Building from Documentation")
448
572
  print("-" * 80)
449
-
450
- force_rebuild = getattr(args, 'force_rebuild', False)
451
-
573
+
574
+ force_rebuild = getattr(args, "force_rebuild", False)
575
+
452
576
  try:
453
577
  print("🔍 Analyzing project documentation...")
454
578
  result = memory_manager.build_memories_from_docs(force_rebuild)
455
-
456
- if result.get("success"):
457
- print(f" Successfully processed documentation")
458
- print(f" Files processed: {result.get('files_processed', 0)}")
459
- print(f" Memories created: {result.get('memories_created', 0)}")
460
- print(f" Memories updated: {result.get('memories_updated', 0)}")
461
- print(f" Agents affected: {result.get('total_agents_affected', 0)}")
462
-
463
- if result.get('agents_affected'):
464
- print(f" Affected agents: {', '.join(result['agents_affected'])}")
465
-
466
- # Show file-specific results
467
- files_results = result.get('files', {})
468
- if files_results:
469
- print("\n📄 File processing details:")
470
- for file_path, file_result in files_results.items():
471
- if file_result.get('success'):
472
- extracted = file_result.get('items_extracted', 0)
473
- created = file_result.get('memories_created', 0)
474
- print(f" {file_path}: {extracted} items extracted, {created} memories created")
475
-
476
- if result.get('errors'):
477
- print("\n⚠️ Errors encountered:")
478
- for error in result['errors']:
479
- print(f" {error}")
480
-
481
- else:
482
- print(f"❌ Build failed: {result.get('error', 'Unknown error')}")
483
-
579
+
580
+ # Use formatter to display build results
581
+ quiet = os.environ.get("CLAUDE_MPM_QUIET", "false").lower() == "true"
582
+ formatter = MemoryOutputFormatter(quiet=quiet)
583
+ output = formatter.format_build_results(result)
584
+ print(output)
585
+
484
586
  except Exception as e:
485
587
  print(f"❌ Error building memories: {e}")
486
588
 
@@ -488,473 +590,110 @@ def _build_memory(args, memory_manager):
488
590
  def _cross_reference_memory(args, memory_manager):
489
591
  """
490
592
  Find cross-references and common patterns across agent memories.
491
-
593
+
492
594
  WHY: Different agents may have learned similar information or there may be
493
595
  knowledge gaps that can be identified through cross-referencing.
494
-
596
+
495
597
  Args:
496
598
  args: Command arguments with optional query
497
599
  memory_manager: AgentMemoryManager instance
498
600
  """
499
- print("🔗 Memory Cross-Reference Analysis")
500
- print("-" * 80)
501
-
502
- query = getattr(args, 'query', None)
503
-
601
+ query = getattr(args, "query", None)
602
+
504
603
  try:
505
- if query:
506
- print(f"🔍 Searching for: '{query}'")
507
- else:
508
- print("🔍 Analyzing all agent memories for patterns...")
509
-
510
604
  result = memory_manager.cross_reference_memories(query)
511
-
512
- if result.get("success") is False:
513
- print(f"❌ Analysis failed: {result.get('error', 'Unknown error')}")
514
- return
515
-
516
- # Display common patterns
517
- common_patterns = result.get("common_patterns", [])
518
- if common_patterns:
519
- print(f"\n🔄 Common patterns found ({len(common_patterns)}):")
520
- for pattern in common_patterns[:10]: # Show top 10
521
- agents = ', '.join(pattern['agents'])
522
- print(f" • {pattern['pattern']}")
523
- print(f" Found in: {agents} ({pattern['count']} instances)")
524
- else:
525
- print("\n🔄 No common patterns found")
526
-
527
- # Display query matches if query was provided
528
- if query and result.get("query_matches"):
529
- print(f"\n🎯 Query matches for '{query}':")
530
- for match in result["query_matches"]:
531
- print(f" 📋 {match['agent']}:")
532
- for line in match['matches'][:3]: # Show first 3 matches
533
- print(f" • {line}")
534
-
535
- # Display agent correlations
536
- correlations = result.get("agent_correlations", {})
537
- if correlations:
538
- print(f"\n🤝 Agent knowledge correlations:")
539
- sorted_correlations = sorted(correlations.items(), key=lambda x: x[1], reverse=True)
540
- for agents, count in sorted_correlations[:5]: # Show top 5
541
- print(f" {agents}: {count} common items")
542
- else:
543
- print("\n🤝 No significant correlations found")
544
-
545
- except Exception as e:
546
- print(f"❌ Error during cross-reference analysis: {e}")
547
605
 
606
+ # Use formatter to display cross-reference results
607
+ quiet = os.environ.get("CLAUDE_MPM_QUIET", "false").lower() == "true"
608
+ formatter = MemoryOutputFormatter(quiet=quiet)
609
+ output = formatter.format_cross_reference(result, query)
610
+ print(output)
548
611
 
549
- def _show_memories(args, memory_manager):
550
- """
551
- Show agent memories in a user-friendly format with cross-references and patterns.
552
-
553
- WHY: Users need to see agent memories in a readable format to understand
554
- what agents have learned and identify common patterns across agents.
555
-
556
- DESIGN DECISION: Added --raw flag to output structured JSON data for
557
- programmatic processing, enabling external tools and scripts to access
558
- all agent memories in a structured format.
559
-
560
- Args:
561
- args: Command arguments with optional agent_id, format, and raw flag
562
- memory_manager: AgentMemoryManager instance
563
- """
564
- agent_id = getattr(args, 'agent_id', None)
565
- format_type = getattr(args, 'format', 'detailed')
566
- raw_output = getattr(args, 'raw', False)
567
-
568
- try:
569
- if raw_output:
570
- # Output structured JSON data
571
- if agent_id:
572
- # Get single agent memory in raw format
573
- _output_single_agent_raw(agent_id, memory_manager)
574
- else:
575
- # Get all agent memories in raw format
576
- _output_all_memories_raw(memory_manager)
577
- else:
578
- # Normal user-friendly display
579
- print("🧠 Agent Memories Display")
580
- print("-" * 80)
581
-
582
- if agent_id:
583
- _show_single_agent_memory(agent_id, format_type, memory_manager)
584
- else:
585
- _show_all_agent_memories(format_type, memory_manager)
586
-
587
612
  except Exception as e:
588
- if raw_output:
589
- # Output error in JSON format for consistency
590
- error_output = {
591
- "success": False,
592
- "error": str(e),
593
- "timestamp": datetime.now().isoformat()
594
- }
595
- print(json.dumps(error_output, indent=2))
596
- else:
597
- print(f"❌ Error showing memories: {e}")
613
+ print(f"❌ Error during cross-reference analysis: {e}")
598
614
 
599
615
 
600
- def _show_single_agent_memory(agent_id, format_type, memory_manager):
601
- """Show memory for a single agent in the specified format."""
602
- memory_content = memory_manager.load_agent_memory(agent_id)
603
-
604
- if not memory_content:
605
- print(f"📭 No memory found for agent: {agent_id}")
606
- return
607
-
608
- print(f"🤖 Agent: {agent_id}")
609
- print("-" * 40)
610
-
611
- if format_type == 'full':
612
- print(memory_content)
613
- else:
614
- # Parse and display memory sections
615
- sections = _parse_memory_content(memory_content)
616
-
617
- for section_name, items in sections.items():
618
- if items:
619
- print(f"\n📚 {section_name} ({len(items)} items):")
620
- for i, item in enumerate(items[:5], 1): # Show first 5 items
621
- print(f" {i}. {item}")
622
- if len(items) > 5:
623
- print(f" ... and {len(items) - 5} more")
624
-
625
-
626
- def _show_all_agent_memories(format_type, memory_manager):
627
- """Show memories for all agents with cross-references."""
628
- # Get all available agent memory files
629
- memory_dir = memory_manager.memories_dir
630
- if not memory_dir.exists():
631
- print("📁 No memory directory found")
632
- return
633
-
634
- memory_files = list(memory_dir.glob("*_agent.md"))
635
- if not memory_files:
636
- print("📭 No agent memories found")
637
- return
638
-
639
- print(f"📊 Found memories for {len(memory_files)} agents")
640
- print()
641
-
642
- agent_memories = {}
643
- total_items = 0
644
-
645
- # Load all agent memories
646
- for file_path in sorted(memory_files):
647
- agent_id = file_path.stem.replace('_agent', '')
648
- try:
649
- memory_content = memory_manager.load_agent_memory(agent_id)
650
- if memory_content:
651
- sections = _parse_memory_content(memory_content)
652
- agent_memories[agent_id] = sections
653
-
654
- # Count items
655
- item_count = sum(len(items) for items in sections.values())
656
- total_items += item_count
657
-
658
- if format_type == 'summary':
659
- print(f"🤖 {agent_id}")
660
- print(f" 📚 {len(sections)} sections, {item_count} total items")
661
-
662
- # Show section summary
663
- for section_name, items in sections.items():
664
- if items:
665
- print(f" • {section_name}: {len(items)} items")
666
- print()
667
- elif format_type == 'detailed':
668
- print(f"🤖 {agent_id}")
669
- print(f" 📚 {len(sections)} sections, {item_count} total items")
670
-
671
- for section_name, items in sections.items():
672
- if items:
673
- print(f"\n 📖 {section_name}:")
674
- for item in items[:3]: # Show first 3 items
675
- print(f" • {item}")
676
- if len(items) > 3:
677
- print(f" ... and {len(items) - 3} more")
678
- print()
679
- except Exception as e:
680
- print(f"❌ Error loading memory for {agent_id}: {e}")
681
-
682
- print(f"📊 Total: {total_items} memory items across {len(agent_memories)} agents")
683
-
684
- # Show cross-references if we have multiple agents
685
- if len(agent_memories) > 1:
686
- print("\n🔗 Cross-References and Common Patterns:")
687
- _find_common_patterns(agent_memories)
688
-
689
-
690
- def _parse_memory_content(content):
691
- """Parse memory content into sections and items."""
692
- sections = {}
693
- current_section = None
694
- current_items = []
695
-
696
- for line in content.split('\n'):
697
- line = line.strip()
698
-
699
- if line.startswith('## ') and not line.startswith('## Memory Usage'):
700
- # New section
701
- if current_section and current_items:
702
- sections[current_section] = current_items.copy()
703
-
704
- current_section = line[3:].strip()
705
- current_items = []
706
- elif line.startswith('- ') and current_section:
707
- # Item in current section
708
- item = line[2:].strip()
709
- if item and len(item) > 5: # Filter out very short items
710
- current_items.append(item)
711
-
712
- # Add final section
713
- if current_section and current_items:
714
- sections[current_section] = current_items
715
-
716
- return sections
717
-
718
-
719
- def _find_common_patterns(agent_memories):
720
- """Find common patterns across agent memories."""
721
- pattern_count = {}
722
- agent_patterns = {}
723
-
724
- # Collect all patterns and which agents have them
725
- for agent_id, sections in agent_memories.items():
726
- agent_patterns[agent_id] = set()
727
-
728
- for section_name, items in sections.items():
729
- for item in items:
730
- # Normalize item for comparison (lowercase, basic cleanup)
731
- normalized = item.lower().strip()
732
- if len(normalized) > 10: # Skip very short items
733
- pattern_count[normalized] = pattern_count.get(normalized, 0) + 1
734
- agent_patterns[agent_id].add(normalized)
735
-
736
- # Find patterns that appear in multiple agents
737
- common_patterns = [(pattern, count) for pattern, count in pattern_count.items() if count > 1]
738
- common_patterns.sort(key=lambda x: x[1], reverse=True)
739
-
740
- if common_patterns:
741
- print("\n🔄 Most Common Patterns:")
742
- for pattern, count in common_patterns[:5]:
743
- # Find which agents have this pattern
744
- agents_with_pattern = [agent for agent, patterns in agent_patterns.items()
745
- if pattern in patterns]
746
- print(f" • {pattern[:80]}{'...' if len(pattern) > 80 else ''}")
747
- print(f" Found in: {', '.join(agents_with_pattern)} ({count} agents)")
748
- print()
749
- else:
750
- print(" No common patterns found across agents")
751
-
752
- # Show agent similarities
753
- print("\n🤝 Agent Knowledge Similarity:")
754
- agents = list(agent_memories.keys())
755
- for i, agent1 in enumerate(agents):
756
- for agent2 in agents[i+1:]:
757
- common_items = len(agent_patterns[agent1] & agent_patterns[agent2])
758
- if common_items > 0:
759
- total_items = len(agent_patterns[agent1] | agent_patterns[agent2])
760
- similarity = (common_items / total_items) * 100 if total_items > 0 else 0
761
- print(f" {agent1} ↔ {agent2}: {common_items} common items ({similarity:.1f}% similarity)")
616
+ # Note: Memory display functions have been moved to MemoryManagementCommand and MemoryCRUDService
762
617
 
763
618
 
764
619
  def _route_memory_command(args, memory_manager):
765
620
  """
766
621
  Test memory command routing logic.
767
-
622
+
768
623
  WHY: Users and developers need to understand how memory commands are routed
769
624
  to appropriate agents for debugging and customization purposes.
770
-
625
+
771
626
  Args:
772
627
  args: Command arguments with content to route
773
628
  memory_manager: AgentMemoryManager instance
774
629
  """
775
630
  print("🎯 Memory Command Routing Test")
776
631
  print("-" * 80)
777
-
778
- content = getattr(args, 'content', None)
632
+
633
+ content = getattr(args, "content", None)
779
634
  if not content:
780
635
  print("❌ No content provided for routing analysis")
781
636
  print(" Usage: memory route --content 'your content here'")
782
637
  return
783
-
638
+
784
639
  try:
785
- print(f"📝 Analyzing content: '{content[:100]}{'...' if len(content) > 100 else ''}'")
786
-
640
+ print(
641
+ f"📝 Analyzing content: '{content[:100]}{'...' if len(content) > 100 else ''}'"
642
+ )
643
+
787
644
  result = memory_manager.route_memory_command(content)
788
-
645
+
789
646
  if result.get("success") is False:
790
647
  print(f"❌ Routing failed: {result.get('error', 'Unknown error')}")
791
648
  return
792
-
649
+
793
650
  target_agent = result.get("target_agent", "unknown")
794
651
  section = result.get("section", "unknown")
795
652
  confidence = result.get("confidence", 0.0)
796
653
  reasoning = result.get("reasoning", "No reasoning provided")
797
-
798
- print(f"\n🎯 Routing Decision:")
654
+
655
+ print("\n🎯 Routing Decision:")
799
656
  print(f" Target Agent: {target_agent}")
800
657
  print(f" Section: {section}")
801
658
  print(f" Confidence: {confidence:.2f}")
802
659
  print(f" Reasoning: {reasoning}")
803
-
660
+
804
661
  # Show agent scores if available
805
662
  agent_scores = result.get("agent_scores", {})
806
663
  if agent_scores:
807
- print(f"\n📊 Agent Relevance Scores:")
664
+ print("\n📊 Agent Relevance Scores:")
808
665
  sorted_scores = sorted(
809
- [(agent, data['score']) for agent, data in agent_scores.items()],
810
- key=lambda x: x[1], reverse=True
666
+ [(agent, data["score"]) for agent, data in agent_scores.items()],
667
+ key=lambda x: x[1],
668
+ reverse=True,
811
669
  )
812
670
  for agent, score in sorted_scores[:5]: # Show top 5
813
671
  print(f" {agent}: {score:.3f}")
814
672
  # Show matched keywords if available
815
- if agent in agent_scores and agent_scores[agent].get('matched_keywords'):
816
- keywords = ', '.join(agent_scores[agent]['matched_keywords'][:3])
673
+ if agent in agent_scores and agent_scores[agent].get(
674
+ "matched_keywords"
675
+ ):
676
+ keywords = ", ".join(agent_scores[agent]["matched_keywords"][:3])
817
677
  print(f" Keywords: {keywords}")
818
-
678
+
819
679
  except Exception as e:
820
680
  print(f"❌ Error routing memory command: {e}")
821
681
 
822
682
 
823
683
  def _display_single_optimization_result(result):
824
684
  """Display optimization results for a single agent."""
825
- agent_id = result.get("agent_id", "unknown")
826
- original_size = result.get("original_size", 0)
827
- optimized_size = result.get("optimized_size", 0)
828
- size_reduction = result.get("size_reduction", 0)
829
- size_reduction_percent = result.get("size_reduction_percent", 0)
830
-
831
- print(f"✅ Optimization completed for {agent_id}")
832
- print(f" Original size: {original_size:,} bytes")
833
- print(f" Optimized size: {optimized_size:,} bytes")
834
- print(f" Size reduction: {size_reduction:,} bytes ({size_reduction_percent}%)")
835
-
836
- duplicates = result.get("duplicates_removed", 0)
837
- consolidated = result.get("items_consolidated", 0)
838
- reordered = result.get("items_reordered", 0)
839
-
840
- if duplicates > 0:
841
- print(f" Duplicates removed: {duplicates}")
842
- if consolidated > 0:
843
- print(f" Items consolidated: {consolidated}")
844
- if reordered > 0:
845
- print(f" Sections reordered: {reordered}")
846
-
847
- backup_path = result.get("backup_created")
848
- if backup_path:
849
- print(f" Backup created: {backup_path}")
685
+ quiet = os.environ.get("CLAUDE_MPM_QUIET", "false").lower() == "true"
686
+ formatter = MemoryOutputFormatter(quiet=quiet)
687
+ output = formatter.format_optimization_results(result, is_single_agent=True)
688
+ print(output)
850
689
 
851
690
 
852
691
  def _display_bulk_optimization_results(result):
853
692
  """Display optimization results for all agents."""
854
- summary = result.get("summary", {})
855
-
856
- print(f"✅ Bulk optimization completed")
857
- print(f" Agents processed: {summary.get('agents_processed', 0)}")
858
- print(f" Agents optimized: {summary.get('agents_optimized', 0)}")
859
- print(f" Total size before: {summary.get('total_size_before', 0):,} bytes")
860
- print(f" Total size after: {summary.get('total_size_after', 0):,} bytes")
861
- print(f" Total reduction: {summary.get('total_size_reduction', 0):,} bytes ({summary.get('total_size_reduction_percent', 0)}%)")
862
- print(f" Total duplicates removed: {summary.get('total_duplicates_removed', 0)}")
863
- print(f" Total items consolidated: {summary.get('total_items_consolidated', 0)}")
864
-
865
- # Show per-agent summary
866
- agents_results = result.get("agents", {})
867
- if agents_results:
868
- print(f"\n📊 Per-agent results:")
869
- for agent_id, agent_result in agents_results.items():
870
- if agent_result.get("success"):
871
- reduction = agent_result.get("size_reduction_percent", 0)
872
- duplicates = agent_result.get("duplicates_removed", 0)
873
- consolidated = agent_result.get("items_consolidated", 0)
874
-
875
- status_parts = []
876
- if duplicates > 0:
877
- status_parts.append(f"{duplicates} dupes")
878
- if consolidated > 0:
879
- status_parts.append(f"{consolidated} consolidated")
880
-
881
- status = f" ({', '.join(status_parts)})" if status_parts else ""
882
- print(f" {agent_id}: {reduction}% reduction{status}")
883
- else:
884
- error = agent_result.get("error", "Unknown error")
885
- print(f" {agent_id}: ❌ {error}")
886
-
887
-
888
- def _output_all_memories_raw(memory_manager):
889
- """
890
- Output all agent memories in raw JSON format.
891
-
892
- WHY: Provides programmatic access to all agent memories for external tools,
893
- scripts, or APIs that need to process or analyze the complete memory state.
894
-
895
- Args:
896
- memory_manager: AgentMemoryManager instance
897
- """
898
- try:
899
- raw_data = memory_manager.get_all_memories_raw()
900
- print(json.dumps(raw_data, indent=2, ensure_ascii=False))
901
- except Exception as e:
902
- error_output = {
903
- "success": False,
904
- "error": f"Failed to retrieve all memories: {str(e)}",
905
- "timestamp": datetime.now().isoformat()
906
- }
907
- print(json.dumps(error_output, indent=2))
693
+ quiet = os.environ.get("CLAUDE_MPM_QUIET", "false").lower() == "true"
694
+ formatter = MemoryOutputFormatter(quiet=quiet)
695
+ output = formatter.format_optimization_results(result, is_single_agent=False)
696
+ print(output)
908
697
 
909
698
 
910
- def _output_single_agent_raw(agent_id, memory_manager):
911
- """
912
- Output single agent memory in raw JSON format.
913
-
914
- WHY: Provides programmatic access to a specific agent's memory for
915
- targeted analysis or processing by external tools.
916
-
917
- Args:
918
- agent_id: ID of the agent to retrieve memory for
919
- memory_manager: AgentMemoryManager instance
920
- """
921
- try:
922
- # Get all memories and extract the specific agent
923
- all_memories = memory_manager.get_all_memories_raw()
924
-
925
- if not all_memories.get("success", False):
926
- error_output = {
927
- "success": False,
928
- "error": all_memories.get("error", "Failed to retrieve memories"),
929
- "timestamp": datetime.now().isoformat()
930
- }
931
- print(json.dumps(error_output, indent=2))
932
- return
933
-
934
- agents = all_memories.get("agents", {})
935
- if agent_id not in agents:
936
- error_output = {
937
- "success": False,
938
- "error": f"No memory found for agent: {agent_id}",
939
- "available_agents": list(agents.keys()),
940
- "timestamp": datetime.now().isoformat()
941
- }
942
- print(json.dumps(error_output, indent=2))
943
- return
944
-
945
- # Return single agent data with metadata
946
- single_agent_output = {
947
- "success": True,
948
- "timestamp": all_memories["timestamp"],
949
- "agent": agents[agent_id]
950
- }
951
-
952
- print(json.dumps(single_agent_output, indent=2, ensure_ascii=False))
953
-
954
- except Exception as e:
955
- error_output = {
956
- "success": False,
957
- "error": f"Failed to retrieve memory for agent {agent_id}: {str(e)}",
958
- "timestamp": datetime.now().isoformat()
959
- }
960
- print(json.dumps(error_output, indent=2))
699
+ # Note: Raw output functions have been moved to MemoryCRUDService