claude-mpm 5.0.9__py3-none-any.whl → 5.6.23__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (614) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +4 -0
  3. claude_mpm/agents/BASE_AGENT.md +164 -0
  4. claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +115 -0
  5. claude_mpm/agents/CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md +413 -0
  6. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +186 -0
  7. claude_mpm/agents/MEMORY.md +1 -1
  8. claude_mpm/agents/PM_INSTRUCTIONS.md +479 -616
  9. claude_mpm/agents/WORKFLOW.md +6 -253
  10. claude_mpm/agents/agent_loader.py +13 -44
  11. claude_mpm/agents/base_agent.json +1 -1
  12. claude_mpm/agents/frontmatter_validator.py +70 -2
  13. claude_mpm/agents/templates/circuit-breakers.md +457 -62
  14. claude_mpm/cli/__init__.py +5 -2
  15. claude_mpm/cli/__main__.py +4 -0
  16. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  17. claude_mpm/cli/commands/agent_state_manager.py +18 -27
  18. claude_mpm/cli/commands/agents.py +177 -41
  19. claude_mpm/cli/commands/agents_reconcile.py +197 -0
  20. claude_mpm/cli/commands/auto_configure.py +723 -236
  21. claude_mpm/cli/commands/autotodos.py +566 -0
  22. claude_mpm/cli/commands/commander.py +216 -0
  23. claude_mpm/cli/commands/config.py +88 -2
  24. claude_mpm/cli/commands/configure.py +1874 -170
  25. claude_mpm/cli/commands/configure_agent_display.py +27 -6
  26. claude_mpm/cli/commands/hook_errors.py +60 -60
  27. claude_mpm/cli/commands/monitor.py +2 -2
  28. claude_mpm/cli/commands/mpm_init/core.py +232 -46
  29. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  30. claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
  31. claude_mpm/cli/commands/postmortem.py +1 -1
  32. claude_mpm/cli/commands/profile.py +276 -0
  33. claude_mpm/cli/commands/run.py +35 -3
  34. claude_mpm/cli/commands/skill_source.py +51 -2
  35. claude_mpm/cli/commands/skills.py +379 -204
  36. claude_mpm/cli/commands/summarize.py +413 -0
  37. claude_mpm/cli/executor.py +141 -19
  38. claude_mpm/cli/interactive/__init__.py +10 -0
  39. claude_mpm/cli/interactive/agent_wizard.py +115 -60
  40. claude_mpm/cli/interactive/questionary_styles.py +65 -0
  41. claude_mpm/cli/interactive/skill_selector.py +481 -0
  42. claude_mpm/cli/parsers/agents_parser.py +54 -9
  43. claude_mpm/cli/parsers/auto_configure_parser.py +13 -138
  44. claude_mpm/cli/parsers/base_parser.py +88 -1
  45. claude_mpm/cli/parsers/commander_parser.py +116 -0
  46. claude_mpm/cli/parsers/config_parser.py +153 -83
  47. claude_mpm/cli/parsers/profile_parser.py +147 -0
  48. claude_mpm/cli/parsers/run_parser.py +10 -0
  49. claude_mpm/cli/parsers/skill_source_parser.py +4 -0
  50. claude_mpm/cli/parsers/skills_parser.py +1 -1
  51. claude_mpm/cli/startup.py +1017 -266
  52. claude_mpm/cli/startup_display.py +74 -6
  53. claude_mpm/cli/startup_logging.py +2 -2
  54. claude_mpm/cli/utils.py +7 -3
  55. claude_mpm/commander/__init__.py +78 -0
  56. claude_mpm/commander/adapters/__init__.py +60 -0
  57. claude_mpm/commander/adapters/auggie.py +260 -0
  58. claude_mpm/commander/adapters/base.py +288 -0
  59. claude_mpm/commander/adapters/claude_code.py +392 -0
  60. claude_mpm/commander/adapters/codex.py +237 -0
  61. claude_mpm/commander/adapters/communication.py +366 -0
  62. claude_mpm/commander/adapters/example_usage.py +310 -0
  63. claude_mpm/commander/adapters/mpm.py +389 -0
  64. claude_mpm/commander/adapters/registry.py +204 -0
  65. claude_mpm/commander/api/__init__.py +16 -0
  66. claude_mpm/commander/api/app.py +121 -0
  67. claude_mpm/commander/api/errors.py +133 -0
  68. claude_mpm/commander/api/routes/__init__.py +8 -0
  69. claude_mpm/commander/api/routes/events.py +184 -0
  70. claude_mpm/commander/api/routes/inbox.py +171 -0
  71. claude_mpm/commander/api/routes/messages.py +148 -0
  72. claude_mpm/commander/api/routes/projects.py +271 -0
  73. claude_mpm/commander/api/routes/sessions.py +226 -0
  74. claude_mpm/commander/api/routes/work.py +296 -0
  75. claude_mpm/commander/api/schemas.py +186 -0
  76. claude_mpm/commander/chat/__init__.py +7 -0
  77. claude_mpm/commander/chat/cli.py +146 -0
  78. claude_mpm/commander/chat/commands.py +96 -0
  79. claude_mpm/commander/chat/repl.py +310 -0
  80. claude_mpm/commander/config.py +51 -0
  81. claude_mpm/commander/config_loader.py +115 -0
  82. claude_mpm/commander/core/__init__.py +10 -0
  83. claude_mpm/commander/core/block_manager.py +325 -0
  84. claude_mpm/commander/core/response_manager.py +323 -0
  85. claude_mpm/commander/daemon.py +603 -0
  86. claude_mpm/commander/env_loader.py +59 -0
  87. claude_mpm/commander/events/__init__.py +26 -0
  88. claude_mpm/commander/events/manager.py +332 -0
  89. claude_mpm/commander/frameworks/__init__.py +12 -0
  90. claude_mpm/commander/frameworks/base.py +146 -0
  91. claude_mpm/commander/frameworks/claude_code.py +58 -0
  92. claude_mpm/commander/frameworks/mpm.py +62 -0
  93. claude_mpm/commander/inbox/__init__.py +16 -0
  94. claude_mpm/commander/inbox/dedup.py +128 -0
  95. claude_mpm/commander/inbox/inbox.py +224 -0
  96. claude_mpm/commander/inbox/models.py +70 -0
  97. claude_mpm/commander/instance_manager.py +450 -0
  98. claude_mpm/commander/llm/__init__.py +6 -0
  99. claude_mpm/commander/llm/openrouter_client.py +167 -0
  100. claude_mpm/commander/llm/summarizer.py +70 -0
  101. claude_mpm/commander/memory/__init__.py +45 -0
  102. claude_mpm/commander/memory/compression.py +347 -0
  103. claude_mpm/commander/memory/embeddings.py +230 -0
  104. claude_mpm/commander/memory/entities.py +310 -0
  105. claude_mpm/commander/memory/example_usage.py +290 -0
  106. claude_mpm/commander/memory/integration.py +325 -0
  107. claude_mpm/commander/memory/search.py +381 -0
  108. claude_mpm/commander/memory/store.py +657 -0
  109. claude_mpm/commander/models/__init__.py +18 -0
  110. claude_mpm/commander/models/events.py +121 -0
  111. claude_mpm/commander/models/project.py +162 -0
  112. claude_mpm/commander/models/work.py +214 -0
  113. claude_mpm/commander/parsing/__init__.py +20 -0
  114. claude_mpm/commander/parsing/extractor.py +132 -0
  115. claude_mpm/commander/parsing/output_parser.py +270 -0
  116. claude_mpm/commander/parsing/patterns.py +100 -0
  117. claude_mpm/commander/persistence/__init__.py +11 -0
  118. claude_mpm/commander/persistence/event_store.py +274 -0
  119. claude_mpm/commander/persistence/state_store.py +309 -0
  120. claude_mpm/commander/persistence/work_store.py +164 -0
  121. claude_mpm/commander/polling/__init__.py +13 -0
  122. claude_mpm/commander/polling/event_detector.py +104 -0
  123. claude_mpm/commander/polling/output_buffer.py +49 -0
  124. claude_mpm/commander/polling/output_poller.py +153 -0
  125. claude_mpm/commander/project_session.py +268 -0
  126. claude_mpm/commander/proxy/__init__.py +12 -0
  127. claude_mpm/commander/proxy/formatter.py +89 -0
  128. claude_mpm/commander/proxy/output_handler.py +191 -0
  129. claude_mpm/commander/proxy/relay.py +155 -0
  130. claude_mpm/commander/registry.py +410 -0
  131. claude_mpm/commander/runtime/__init__.py +10 -0
  132. claude_mpm/commander/runtime/executor.py +191 -0
  133. claude_mpm/commander/runtime/monitor.py +346 -0
  134. claude_mpm/commander/session/__init__.py +6 -0
  135. claude_mpm/commander/session/context.py +81 -0
  136. claude_mpm/commander/session/manager.py +59 -0
  137. claude_mpm/commander/tmux_orchestrator.py +361 -0
  138. claude_mpm/commander/web/__init__.py +1 -0
  139. claude_mpm/commander/work/__init__.py +30 -0
  140. claude_mpm/commander/work/executor.py +207 -0
  141. claude_mpm/commander/work/queue.py +405 -0
  142. claude_mpm/commander/workflow/__init__.py +27 -0
  143. claude_mpm/commander/workflow/event_handler.py +241 -0
  144. claude_mpm/commander/workflow/notifier.py +146 -0
  145. claude_mpm/commands/mpm-config.md +36 -0
  146. claude_mpm/commands/mpm-doctor.md +16 -21
  147. claude_mpm/commands/mpm-help.md +12 -286
  148. claude_mpm/commands/mpm-init.md +88 -506
  149. claude_mpm/commands/mpm-monitor.md +22 -401
  150. claude_mpm/commands/mpm-organize.md +128 -0
  151. claude_mpm/commands/mpm-postmortem.md +13 -107
  152. claude_mpm/commands/mpm-session-resume.md +20 -363
  153. claude_mpm/commands/mpm-status.md +13 -69
  154. claude_mpm/commands/mpm-ticket-view.md +60 -495
  155. claude_mpm/commands/mpm-version.md +13 -107
  156. claude_mpm/commands/mpm.md +8 -0
  157. claude_mpm/config/agent_presets.py +8 -7
  158. claude_mpm/config/agent_sources.py +27 -0
  159. claude_mpm/config/skill_sources.py +16 -0
  160. claude_mpm/constants.py +1 -0
  161. claude_mpm/core/claude_runner.py +154 -2
  162. claude_mpm/core/config.py +37 -26
  163. claude_mpm/core/config_constants.py +74 -9
  164. claude_mpm/core/constants.py +56 -12
  165. claude_mpm/core/framework/formatters/content_formatter.py +3 -13
  166. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  167. claude_mpm/core/framework/loaders/instruction_loader.py +52 -11
  168. claude_mpm/core/framework_loader.py +4 -2
  169. claude_mpm/core/hook_manager.py +51 -3
  170. claude_mpm/core/interactive_session.py +12 -11
  171. claude_mpm/core/logger.py +39 -9
  172. claude_mpm/core/logging_utils.py +35 -11
  173. claude_mpm/core/network_config.py +148 -0
  174. claude_mpm/core/oneshot_session.py +7 -6
  175. claude_mpm/core/optimized_startup.py +61 -0
  176. claude_mpm/core/output_style_manager.py +219 -44
  177. claude_mpm/core/shared/config_loader.py +3 -1
  178. claude_mpm/core/socketio_pool.py +16 -8
  179. claude_mpm/core/unified_agent_registry.py +134 -16
  180. claude_mpm/core/unified_config.py +76 -8
  181. claude_mpm/core/unified_paths.py +95 -90
  182. claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
  183. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css +1 -0
  184. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css +1 -0
  185. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/1WZnGYqX.js +24 -0
  186. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/67pF3qNn.js +1 -0
  187. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/6RxdMKe4.js +1 -0
  188. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/8cZrfX0h.js +60 -0
  189. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/9a6T2nm-.js +7 -0
  190. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B443AUzu.js +1 -0
  191. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B8AwtY2H.js +1 -0
  192. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BF15LAsF.js +1 -0
  193. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
  194. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BRcwIQNr.js +4 -0
  195. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BSNlmTZj.js +1 -0
  196. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BV6nKitt.js +43 -0
  197. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BViJ8lZt.js +128 -0
  198. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BcQ-Q0FE.js +1 -0
  199. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bpyvgze_.js +30 -0
  200. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BzTRqg-z.js +1 -0
  201. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C0Fr8dve.js +1 -0
  202. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C3rbW_a-.js +1 -0
  203. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C8WYN38h.js +1 -0
  204. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C9I8FlXH.js +61 -0
  205. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIQcWgO2.js +36 -0
  206. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIctN7YN.js +7 -0
  207. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CKrS_JZW.js +145 -0
  208. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CR6P9C4A.js +89 -0
  209. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRRR9MD_.js +2 -0
  210. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
  211. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CSXtMOf0.js +1 -0
  212. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CT-sbxSk.js +1 -0
  213. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWm6DJsp.js +1 -0
  214. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
  215. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CpqQ1Kzn.js +1 -0
  216. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
  217. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D2nGpDRe.js +1 -0
  218. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9iCMida.js +267 -0
  219. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9ykgMoY.js +10 -0
  220. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DL2Ldur1.js +1 -0
  221. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DPfltzjH.js +165 -0
  222. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DR8nis88.js +2 -0
  223. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUliQN2b.js +1 -0
  224. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
  225. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DXlhR01x.js +122 -0
  226. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_lyTybS.js +1 -0
  227. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DngoTTgh.js +1 -0
  228. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DqkmHtDC.js +220 -0
  229. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DsDh8EYs.js +1 -0
  230. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DypDmXgd.js +139 -0
  231. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
  232. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/IPYC-LnN.js +162 -0
  233. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
  234. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JpevfAFt.js +68 -0
  235. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NqQ1dWOy.js +1 -0
  236. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/R8CEIRAd.js +2 -0
  237. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Zxy7qc-l.js +64 -0
  238. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
  239. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/qtd3IeO4.js +15 -0
  240. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ulBFON_C.js +65 -0
  241. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/wQVh1CoA.js +10 -0
  242. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.Dr7t0z2J.js +2 -0
  243. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
  244. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.RgBboRvH.js +1 -0
  245. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DG-KkbDf.js +1 -0
  246. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.D_jnf-x6.js +1 -0
  247. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
  248. claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
  249. claude_mpm/dashboard/static/svelte-build/index.html +36 -0
  250. claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
  251. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
  252. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
  253. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
  254. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
  255. claude_mpm/experimental/cli_enhancements.py +2 -1
  256. claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
  257. claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
  258. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  259. claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc +0 -0
  260. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  261. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  262. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  263. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  264. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  265. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  266. claude_mpm/hooks/claude_hooks/auto_pause_handler.py +485 -0
  267. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  268. claude_mpm/hooks/claude_hooks/event_handlers.py +479 -128
  269. claude_mpm/hooks/claude_hooks/hook_handler.py +254 -83
  270. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
  271. claude_mpm/hooks/claude_hooks/installer.py +149 -18
  272. claude_mpm/hooks/claude_hooks/memory_integration.py +67 -19
  273. claude_mpm/hooks/claude_hooks/response_tracking.py +44 -62
  274. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  275. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  276. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  277. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  278. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  279. claude_mpm/hooks/claude_hooks/services/connection_manager.py +69 -30
  280. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +36 -103
  281. claude_mpm/hooks/claude_hooks/services/state_manager.py +23 -36
  282. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +73 -75
  283. claude_mpm/hooks/kuzu_memory_hook.py +5 -5
  284. claude_mpm/hooks/memory_integration_hook.py +46 -1
  285. claude_mpm/hooks/session_resume_hook.py +89 -1
  286. claude_mpm/hooks/templates/pre_tool_use_template.py +10 -2
  287. claude_mpm/init.py +276 -19
  288. claude_mpm/models/agent_definition.py +7 -0
  289. claude_mpm/models/git_repository.py +3 -3
  290. claude_mpm/scripts/claude-hook-handler.sh +87 -20
  291. claude_mpm/scripts/launch_monitor.py +93 -13
  292. claude_mpm/scripts/start_activity_logging.py +0 -0
  293. claude_mpm/services/agents/agent_builder.py +3 -3
  294. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  295. claude_mpm/services/agents/agent_review_service.py +280 -0
  296. claude_mpm/services/agents/agent_selection_service.py +2 -2
  297. claude_mpm/services/agents/cache_git_manager.py +7 -7
  298. claude_mpm/services/agents/deployment/agent_deployment.py +29 -7
  299. claude_mpm/services/agents/deployment/agent_discovery_service.py +6 -5
  300. claude_mpm/services/agents/deployment/agent_format_converter.py +25 -13
  301. claude_mpm/services/agents/deployment/agent_template_builder.py +42 -20
  302. claude_mpm/services/agents/deployment/agents_directory_resolver.py +2 -2
  303. claude_mpm/services/agents/deployment/async_agent_deployment.py +31 -27
  304. claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
  305. claude_mpm/services/agents/deployment/local_template_deployment.py +3 -1
  306. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +348 -29
  307. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +570 -68
  308. claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
  309. claude_mpm/services/agents/git_source_manager.py +57 -4
  310. claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
  311. claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
  312. claude_mpm/services/agents/recommender.py +5 -3
  313. claude_mpm/services/agents/single_tier_deployment_service.py +6 -6
  314. claude_mpm/services/agents/sources/git_source_sync_service.py +129 -11
  315. claude_mpm/services/agents/startup_sync.py +27 -4
  316. claude_mpm/services/agents/toolchain_detector.py +10 -6
  317. claude_mpm/services/analysis/__init__.py +11 -1
  318. claude_mpm/services/analysis/clone_detector.py +1030 -0
  319. claude_mpm/services/cli/__init__.py +3 -0
  320. claude_mpm/services/cli/incremental_pause_manager.py +561 -0
  321. claude_mpm/services/cli/session_resume_helper.py +10 -2
  322. claude_mpm/services/command_deployment_service.py +81 -10
  323. claude_mpm/services/delegation_detector.py +175 -0
  324. claude_mpm/services/diagnostics/checks/agent_check.py +2 -2
  325. claude_mpm/services/diagnostics/checks/agent_sources_check.py +31 -1
  326. claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
  327. claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
  328. claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
  329. claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
  330. claude_mpm/services/diagnostics/models.py +14 -1
  331. claude_mpm/services/event_bus/config.py +3 -1
  332. claude_mpm/services/event_log.py +325 -0
  333. claude_mpm/services/git/git_operations_service.py +101 -16
  334. claude_mpm/services/infrastructure/__init__.py +4 -0
  335. claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
  336. claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
  337. claude_mpm/services/monitor/daemon.py +9 -2
  338. claude_mpm/services/monitor/daemon_manager.py +54 -7
  339. claude_mpm/services/monitor/management/lifecycle.py +15 -3
  340. claude_mpm/services/monitor/server.py +796 -30
  341. claude_mpm/services/pm_skills_deployer.py +884 -0
  342. claude_mpm/services/profile_manager.py +337 -0
  343. claude_mpm/services/project/project_organizer.py +4 -0
  344. claude_mpm/services/self_upgrade_service.py +120 -12
  345. claude_mpm/services/skills/__init__.py +3 -0
  346. claude_mpm/services/skills/git_skill_source_manager.py +303 -12
  347. claude_mpm/services/skills/selective_skill_deployer.py +869 -0
  348. claude_mpm/services/skills/skill_discovery_service.py +74 -4
  349. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  350. claude_mpm/services/skills_deployer.py +294 -55
  351. claude_mpm/services/socketio/dashboard_server.py +1 -0
  352. claude_mpm/services/socketio/event_normalizer.py +51 -6
  353. claude_mpm/services/socketio/handlers/hook.py +14 -7
  354. claude_mpm/services/socketio/server/core.py +386 -108
  355. claude_mpm/services/socketio/server/main.py +12 -4
  356. claude_mpm/services/version_control/git_operations.py +103 -0
  357. claude_mpm/skills/__init__.py +2 -1
  358. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  359. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  360. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  361. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  362. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  363. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  364. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  365. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  366. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  367. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  368. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  369. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  370. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  371. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  372. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  373. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  374. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  375. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  376. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  377. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  378. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  379. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  380. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  381. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  382. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  383. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  384. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  385. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  386. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  387. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  388. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  389. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  390. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  391. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  392. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  393. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  394. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  395. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  396. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  397. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  398. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  399. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  400. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  401. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  402. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  403. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  404. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  405. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  406. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  407. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  408. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  409. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  410. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  411. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  412. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  413. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  414. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  415. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  416. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  417. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  418. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  419. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  420. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  421. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  422. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  423. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  424. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  425. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  426. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  427. claude_mpm/skills/bundled/pm/mpm/SKILL.md +38 -0
  428. claude_mpm/skills/bundled/pm/mpm-agent-update-workflow/SKILL.md +75 -0
  429. claude_mpm/skills/bundled/pm/mpm-bug-reporting/SKILL.md +248 -0
  430. claude_mpm/skills/bundled/pm/mpm-circuit-breaker-enforcement/SKILL.md +476 -0
  431. claude_mpm/skills/bundled/pm/mpm-config/SKILL.md +29 -0
  432. claude_mpm/skills/bundled/pm/mpm-delegation-patterns/SKILL.md +167 -0
  433. claude_mpm/skills/bundled/pm/mpm-doctor/SKILL.md +53 -0
  434. claude_mpm/skills/bundled/pm/mpm-git-file-tracking/SKILL.md +113 -0
  435. claude_mpm/skills/bundled/pm/mpm-help/SKILL.md +35 -0
  436. claude_mpm/skills/bundled/pm/mpm-init/SKILL.md +125 -0
  437. claude_mpm/skills/bundled/pm/mpm-monitor/SKILL.md +32 -0
  438. claude_mpm/skills/bundled/pm/mpm-organize/SKILL.md +121 -0
  439. claude_mpm/skills/bundled/pm/mpm-postmortem/SKILL.md +22 -0
  440. claude_mpm/skills/bundled/pm/mpm-pr-workflow/SKILL.md +124 -0
  441. claude_mpm/skills/bundled/pm/mpm-session-management/SKILL.md +312 -0
  442. claude_mpm/skills/bundled/pm/mpm-session-pause/SKILL.md +170 -0
  443. claude_mpm/skills/bundled/pm/mpm-session-resume/SKILL.md +31 -0
  444. claude_mpm/skills/bundled/pm/mpm-status/SKILL.md +37 -0
  445. claude_mpm/skills/bundled/pm/mpm-teaching-mode/SKILL.md +657 -0
  446. claude_mpm/skills/bundled/pm/mpm-ticket-view/SKILL.md +110 -0
  447. claude_mpm/skills/bundled/pm/mpm-ticketing-integration/SKILL.md +154 -0
  448. claude_mpm/skills/bundled/pm/mpm-tool-usage-guide/SKILL.md +386 -0
  449. claude_mpm/skills/bundled/pm/mpm-verification-protocols/SKILL.md +198 -0
  450. claude_mpm/skills/bundled/pm/mpm-version/SKILL.md +21 -0
  451. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  452. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  453. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  454. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  455. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  456. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  457. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  458. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  459. claude_mpm/skills/bundled/security-scanning.md +112 -0
  460. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  461. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  462. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  463. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  464. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  465. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  466. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  467. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  468. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  469. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  470. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  471. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  472. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  473. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  474. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  475. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  476. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  477. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  478. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  479. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  480. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  481. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  482. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  483. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  484. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  485. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  486. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  487. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  488. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  489. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  490. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  491. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  492. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  493. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  494. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  495. claude_mpm/skills/registry.py +295 -90
  496. claude_mpm/skills/skill_manager.py +98 -3
  497. claude_mpm/templates/.pre-commit-config.yaml +112 -0
  498. claude_mpm/utils/agent_dependency_loader.py +115 -4
  499. claude_mpm/utils/agent_filters.py +17 -44
  500. claude_mpm/utils/gitignore.py +3 -0
  501. claude_mpm/utils/migration.py +4 -4
  502. claude_mpm/utils/robust_installer.py +86 -21
  503. claude_mpm-5.6.23.dist-info/METADATA +393 -0
  504. {claude_mpm-5.0.9.dist-info → claude_mpm-5.6.23.dist-info}/RECORD +508 -261
  505. claude_mpm-5.6.23.dist-info/entry_points.txt +5 -0
  506. claude_mpm-5.6.23.dist-info/licenses/LICENSE +94 -0
  507. claude_mpm-5.6.23.dist-info/licenses/LICENSE-FAQ.md +153 -0
  508. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
  509. claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
  510. claude_mpm/agents/BASE_OPS.md +0 -219
  511. claude_mpm/agents/BASE_PM.md +0 -480
  512. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
  513. claude_mpm/agents/BASE_QA.md +0 -167
  514. claude_mpm/agents/BASE_RESEARCH.md +0 -53
  515. claude_mpm/agents/OUTPUT_STYLE.md +0 -290
  516. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +0 -1322
  517. claude_mpm/agents/base_agent_loader.py +0 -601
  518. claude_mpm/cli/commands/agents_detect.py +0 -380
  519. claude_mpm/cli/commands/agents_recommend.py +0 -309
  520. claude_mpm/cli/ticket_cli.py +0 -35
  521. claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
  522. claude_mpm/commands/mpm-agents-detect.md +0 -177
  523. claude_mpm/commands/mpm-agents-list.md +0 -131
  524. claude_mpm/commands/mpm-agents-recommend.md +0 -223
  525. claude_mpm/commands/mpm-config-view.md +0 -150
  526. claude_mpm/commands/mpm-ticket-organize.md +0 -304
  527. claude_mpm/dashboard/analysis_runner.py +0 -455
  528. claude_mpm/dashboard/index.html +0 -13
  529. claude_mpm/dashboard/open_dashboard.py +0 -66
  530. claude_mpm/dashboard/static/css/activity.css +0 -1958
  531. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  532. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  533. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  534. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  535. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  536. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  537. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  538. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  539. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  540. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  541. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  542. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  543. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  544. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  545. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  546. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  547. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  548. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  549. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  550. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  551. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  552. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  553. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  554. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  555. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  556. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  557. claude_mpm/dashboard/static/js/dashboard.js +0 -1914
  558. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  559. claude_mpm/dashboard/static/js/socket-client.js +0 -1474
  560. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  561. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  562. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  563. claude_mpm/dashboard/templates/code_simple.html +0 -153
  564. claude_mpm/dashboard/templates/index.html +0 -606
  565. claude_mpm/dashboard/test_dashboard.html +0 -372
  566. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  567. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  568. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  569. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  570. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  571. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  572. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  573. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  574. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  575. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  576. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  577. claude_mpm/scripts/mcp_server.py +0 -75
  578. claude_mpm/scripts/mcp_wrapper.py +0 -39
  579. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  580. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  581. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  582. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  583. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  584. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  585. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  586. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  587. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  588. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  589. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
  590. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  591. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  592. claude_mpm/services/mcp_gateway/main.py +0 -589
  593. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  594. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  595. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  596. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  597. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
  598. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  599. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
  600. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  601. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  602. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  603. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  604. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  605. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  606. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
  607. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  608. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  609. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  610. claude_mpm-5.0.9.dist-info/METADATA +0 -1028
  611. claude_mpm-5.0.9.dist-info/entry_points.txt +0 -10
  612. claude_mpm-5.0.9.dist-info/licenses/LICENSE +0 -21
  613. {claude_mpm-5.0.9.dist-info → claude_mpm-5.6.23.dist-info}/WHEEL +0 -0
  614. {claude_mpm-5.0.9.dist-info → claude_mpm-5.6.23.dist-info}/top_level.txt +0 -0
@@ -59,12 +59,15 @@ class AgentDisplay:
59
59
  Shows:
60
60
  - Agent ID (for selection)
61
61
  - Name and description
62
- - Enable/disable status
62
+ - Installed/Available status
63
63
  - Model or tools information
64
64
 
65
65
  Args:
66
66
  agents: List of agent configurations to display
67
67
  """
68
+
69
+ from ...utils.agent_filters import get_deployed_agent_ids
70
+
68
71
  table = Table(
69
72
  title=f"Available Agents ({len(agents)} total)",
70
73
  box=ROUNDED,
@@ -77,12 +80,25 @@ class AgentDisplay:
77
80
  table.add_column("Description", style="bold", width=45)
78
81
  table.add_column("Model/Tools", style="dim", width=20)
79
82
 
83
+ # Get deployed agent IDs
84
+ deployed_ids = get_deployed_agent_ids()
85
+
86
+ # Track installed count for summary
87
+ installed_count = 0
88
+
80
89
  for idx, agent in enumerate(agents, 1):
81
- # Check if agent is enabled
82
- is_enabled = self.agent_manager.is_agent_enabled(agent.name)
83
- status = (
84
- "[green]✓ Enabled[/green]" if is_enabled else "[red]✗ Disabled[/red]"
85
- )
90
+ # Check if agent is deployed to .claude/agents/
91
+ # Use agent_id (technical ID) for comparison, not display name
92
+ agent_id = getattr(agent, "agent_id", agent.name)
93
+ agent_leaf_name = agent_id.split("/")[-1]
94
+ is_deployed = agent_leaf_name in deployed_ids
95
+
96
+ # Increment installed count
97
+ if is_deployed:
98
+ installed_count += 1
99
+
100
+ # Show "Installed" for deployed agents, "Available" otherwise
101
+ status = "[green]Installed[/green]" if is_deployed else "Available"
86
102
 
87
103
  # Format tools/dependencies - show first 2 tools
88
104
  tools_display = ""
@@ -115,6 +131,11 @@ class AgentDisplay:
115
131
 
116
132
  self.console.print(table)
117
133
 
134
+ # Display summary count
135
+ self.console.print(
136
+ f"\n📊 Agents: {installed_count} Installed / {len(agents)} Total"
137
+ )
138
+
118
139
  def display_agents_with_pending_states(self, agents: List[AgentConfig]) -> None:
119
140
  """Display agents table with pending state indicators.
120
141
 
@@ -57,33 +57,33 @@ def list_errors(format, hook_type):
57
57
 
58
58
  if not errors:
59
59
  if hook_type:
60
- click.echo(f"No errors recorded for hook type: {hook_type}")
60
+ click.echo(f"No errors recorded for hook type: {hook_type}", err=True)
61
61
  else:
62
- click.echo("No errors recorded. Hook system is healthy! ✅")
62
+ click.echo("No errors recorded. Hook system is healthy! ✅", err=True)
63
63
  return
64
64
 
65
65
  if format == "json":
66
66
  # JSON output
67
- click.echo(json.dumps(errors, indent=2))
67
+ click.echo(json.dumps(errors, indent=2), err=True)
68
68
  else:
69
69
  # Table output
70
- click.echo("\n" + "=" * 80)
71
- click.echo("Hook Error Memory Report")
72
- click.echo("=" * 80)
70
+ click.echo("\n" + "=" * 80, err=True)
71
+ click.echo("Hook Error Memory Report", err=True)
72
+ click.echo("=" * 80, err=True)
73
73
 
74
74
  for key, data in errors.items():
75
- click.echo(f"\n🔴 Error: {data['type']}")
76
- click.echo(f" Hook Type: {data['hook_type']}")
77
- click.echo(f" Details: {data['details']}")
78
- click.echo(f" Match: {data['match']}")
79
- click.echo(f" Count: {data['count']} occurrences")
80
- click.echo(f" First Seen: {data['first_seen']}")
81
- click.echo(f" Last Seen: {data['last_seen']}")
75
+ click.echo(f"\n🔴 Error: {data['type']}", err=True)
76
+ click.echo(f" Hook Type: {data['hook_type']}", err=True)
77
+ click.echo(f" Details: {data['details']}", err=True)
78
+ click.echo(f" Match: {data['match']}", err=True)
79
+ click.echo(f" Count: {data['count']} occurrences", err=True)
80
+ click.echo(f" First Seen: {data['first_seen']}", err=True)
81
+ click.echo(f" Last Seen: {data['last_seen']}", err=True)
82
82
 
83
- click.echo("\n" + "=" * 80)
84
- click.echo(f"Total unique errors: {len(errors)}")
85
- click.echo(f"Memory file: {error_memory.memory_file}")
86
- click.echo("\nTo clear errors: claude-mpm hook-errors clear")
83
+ click.echo("\n" + "=" * 80, err=True)
84
+ click.echo(f"Total unique errors: {len(errors)}", err=True)
85
+ click.echo(f"Memory file: {error_memory.memory_file}", err=True)
86
+ click.echo("\nTo clear errors: claude-mpm hook-errors clear", err=True)
87
87
 
88
88
 
89
89
  @hook_errors_group.command(name="summary")
@@ -99,28 +99,28 @@ def show_summary():
99
99
  summary = error_memory.get_error_summary()
100
100
 
101
101
  if summary["total_errors"] == 0:
102
- click.echo("No errors recorded. Hook system is healthy! ✅")
102
+ click.echo("No errors recorded. Hook system is healthy! ✅", err=True)
103
103
  return
104
104
 
105
- click.echo("\n" + "=" * 80)
106
- click.echo("Hook Error Summary")
107
- click.echo("=" * 80)
108
- click.echo("\n📊 Statistics:")
109
- click.echo(f" Total Errors: {summary['total_errors']}")
110
- click.echo(f" Unique Errors: {summary['unique_errors']}")
105
+ click.echo("\n" + "=" * 80, err=True)
106
+ click.echo("Hook Error Summary", err=True)
107
+ click.echo("=" * 80, err=True)
108
+ click.echo("\n📊 Statistics:", err=True)
109
+ click.echo(f" Total Errors: {summary['total_errors']}", err=True)
110
+ click.echo(f" Unique Errors: {summary['unique_errors']}", err=True)
111
111
 
112
112
  if summary["errors_by_type"]:
113
- click.echo("\n🔍 Errors by Type:")
113
+ click.echo("\n🔍 Errors by Type:", err=True)
114
114
  for error_type, count in summary["errors_by_type"].items():
115
- click.echo(f" {error_type}: {count}")
115
+ click.echo(f" {error_type}: {count}", err=True)
116
116
 
117
117
  if summary["errors_by_hook"]:
118
- click.echo("\n🎣 Errors by Hook Type:")
118
+ click.echo("\n🎣 Errors by Hook Type:", err=True)
119
119
  for hook_type, count in summary["errors_by_hook"].items():
120
- click.echo(f" {hook_type}: {count}")
120
+ click.echo(f" {hook_type}: {count}", err=True)
121
121
 
122
- click.echo(f"\n📁 Memory File: {summary['memory_file']}")
123
- click.echo("\nFor detailed list: claude-mpm hook-errors list")
122
+ click.echo(f"\n📁 Memory File: {summary['memory_file']}", err=True)
123
+ click.echo("\nFor detailed list: claude-mpm hook-errors list", err=True)
124
124
 
125
125
 
126
126
  @hook_errors_group.command(name="clear")
@@ -158,21 +158,21 @@ def clear_errors(hook_type, yes):
158
158
  scope = "all hook types"
159
159
 
160
160
  if count == 0:
161
- click.echo(f"No errors to clear {scope}.")
161
+ click.echo(f"No errors to clear {scope}.", err=True)
162
162
  return
163
163
 
164
164
  # Confirm if not using -y flag
165
165
  if not yes:
166
166
  message = f"Clear {count} error(s) {scope}?"
167
167
  if not click.confirm(message):
168
- click.echo("Cancelled.")
168
+ click.echo("Cancelled.", err=True)
169
169
  return
170
170
 
171
171
  # Clear errors
172
172
  error_memory.clear_errors(hook_type)
173
173
 
174
- click.echo(f"✅ Cleared {count} error(s) {scope}.")
175
- click.echo("\nHooks will be retried on next execution.")
174
+ click.echo(f"✅ Cleared {count} error(s) {scope}.", err=True)
175
+ click.echo("\nHooks will be retried on next execution.", err=True)
176
176
 
177
177
 
178
178
  @hook_errors_group.command(name="diagnose")
@@ -201,19 +201,19 @@ def diagnose_errors(hook_type):
201
201
 
202
202
  if not errors:
203
203
  if hook_type:
204
- click.echo(f"No errors to diagnose for hook type: {hook_type}")
204
+ click.echo(f"No errors to diagnose for hook type: {hook_type}", err=True)
205
205
  else:
206
- click.echo("No errors to diagnose. Hook system is healthy! ✅")
206
+ click.echo("No errors to diagnose. Hook system is healthy! ✅", err=True)
207
207
  return
208
208
 
209
- click.echo("\n" + "=" * 80)
210
- click.echo("Hook Error Diagnostics")
211
- click.echo("=" * 80)
209
+ click.echo("\n" + "=" * 80, err=True)
210
+ click.echo("Hook Error Diagnostics", err=True)
211
+ click.echo("=" * 80, err=True)
212
212
 
213
213
  for key, data in errors.items():
214
- click.echo(f"\n🔴 Error: {data['type']}")
215
- click.echo(f" Hook: {data['hook_type']}")
216
- click.echo(f" Count: {data['count']} failures")
214
+ click.echo(f"\n🔴 Error: {data['type']}", err=True)
215
+ click.echo(f" Hook: {data['hook_type']}", err=True)
216
+ click.echo(f" Count: {data['count']} failures", err=True)
217
217
 
218
218
  # Generate and show fix suggestion
219
219
  error_info = {
@@ -223,13 +223,13 @@ def diagnose_errors(hook_type):
223
223
  }
224
224
  suggestion = error_memory.suggest_fix(error_info)
225
225
 
226
- click.echo("\n" + "-" * 80)
227
- click.echo(suggestion)
228
- click.echo("-" * 80)
226
+ click.echo("\n" + "-" * 80, err=True)
227
+ click.echo(suggestion, err=True)
228
+ click.echo("-" * 80, err=True)
229
229
 
230
- click.echo("\n" + "=" * 80)
231
- click.echo("After fixing issues, clear errors to retry:")
232
- click.echo(" claude-mpm hook-errors clear")
230
+ click.echo("\n" + "=" * 80, err=True)
231
+ click.echo("After fixing issues, clear errors to retry:", err=True)
232
+ click.echo(" claude-mpm hook-errors clear", err=True)
233
233
 
234
234
 
235
235
  @hook_errors_group.command(name="status")
@@ -244,27 +244,27 @@ def show_status():
244
244
  error_memory = get_hook_error_memory()
245
245
  summary = error_memory.get_error_summary()
246
246
 
247
- click.echo("\n📊 Hook Error Memory Status")
248
- click.echo("=" * 80)
247
+ click.echo("\n📊 Hook Error Memory Status", err=True)
248
+ click.echo("=" * 80, err=True)
249
249
 
250
250
  if summary["total_errors"] == 0:
251
- click.echo("✅ Status: Healthy (no errors recorded)")
251
+ click.echo("✅ Status: Healthy (no errors recorded)", err=True)
252
252
  else:
253
- click.echo(f"⚠️ Status: {summary['total_errors']} error(s) recorded")
254
- click.echo(f" Unique errors: {summary['unique_errors']}")
253
+ click.echo(f"⚠️ Status: {summary['total_errors']} error(s) recorded", err=True)
254
+ click.echo(f" Unique errors: {summary['unique_errors']}", err=True)
255
255
 
256
256
  # Show which hooks are affected
257
257
  if summary["errors_by_hook"]:
258
258
  affected_hooks = list(summary["errors_by_hook"].keys())
259
- click.echo(f" Affected hooks: {', '.join(affected_hooks)}")
259
+ click.echo(f" Affected hooks: {', '.join(affected_hooks)}", err=True)
260
260
 
261
- click.echo(f"\n📁 Memory file: {summary['memory_file']}")
262
- click.echo(f" Exists: {Path(summary['memory_file']).exists()}")
261
+ click.echo(f"\n📁 Memory file: {summary['memory_file']}", err=True)
262
+ click.echo(f" Exists: {Path(summary['memory_file']).exists()}", err=True)
263
263
 
264
- click.echo("\nCommands:")
265
- click.echo(" claude-mpm hook-errors list # View detailed errors")
266
- click.echo(" claude-mpm hook-errors diagnose # Get fix suggestions")
267
- click.echo(" claude-mpm hook-errors clear # Clear and retry")
264
+ click.echo("\nCommands:", err=True)
265
+ click.echo(" claude-mpm hook-errors list # View detailed errors", err=True)
266
+ click.echo(" claude-mpm hook-errors diagnose # Get fix suggestions", err=True)
267
+ click.echo(" claude-mpm hook-errors clear # Clear and retry", err=True)
268
268
 
269
269
 
270
270
  # Register the command group
@@ -118,7 +118,7 @@ class MonitorCommand(BaseCommand):
118
118
  # Check if it's actually running
119
119
  if not self.daemon.lifecycle.is_running():
120
120
  return CommandResult.error_result(
121
- "Monitor daemon failed to start. Check ~/.claude-mpm/monitor-daemon.log for details."
121
+ "Monitor daemon failed to start. Check ~/.claude-mpm/logs/monitor-daemon-*.log for details."
122
122
  )
123
123
 
124
124
  # Get the actual PID
@@ -146,7 +146,7 @@ class MonitorCommand(BaseCommand):
146
146
  pass
147
147
 
148
148
  return CommandResult.error_result(
149
- "Failed to start unified monitor daemon. Check ~/.claude-mpm/monitor-daemon.log for details."
149
+ "Failed to start unified monitor daemon. Check ~/.claude-mpm/logs/monitor-daemon-*.log for details."
150
150
  )
151
151
 
152
152
  def _stop_monitor(self, args) -> CommandResult:
@@ -24,6 +24,7 @@ from claude_mpm.utils.display_helper import DisplayHelper
24
24
 
25
25
  # Import from sibling modules in the mpm_init package
26
26
  from . import display, git_activity, modes, prompts
27
+ from .knowledge_extractor import ProjectKnowledgeExtractor
27
28
 
28
29
  logger = get_logger(__name__)
29
30
 
@@ -34,6 +35,7 @@ class MPMInitCommand:
34
35
  def __init__(self, project_path: Optional[Path] = None):
35
36
  """Initialize the MPM-Init command."""
36
37
  self.project_path = project_path or Path.cwd()
38
+ self.claude_mpm_dir = self.project_path / ".claude-mpm"
37
39
  self.claude_mpm_script = self._find_claude_mpm_script()
38
40
  self.console = Console()
39
41
 
@@ -155,9 +157,8 @@ class MPMInitCommand:
155
157
  if pre_check_result.get("status") == OperationResult.ERROR:
156
158
  return pre_check_result
157
159
 
158
- # Update .gitignore to exclude claude-mpm configuration directories
159
- if not review_only and not dry_run:
160
- self._update_gitignore()
160
+ # Note: .gitignore recommendations are now shown in 'mpm config' command
161
+ # instead of automatic updates during initialization
161
162
 
162
163
  # Build the delegation prompt
163
164
  if update_mode:
@@ -202,6 +203,10 @@ class MPMInitCommand:
202
203
  if update_mode and result.get("status") == OperationResult.SUCCESS:
203
204
  self._handle_update_post_processing()
204
205
 
206
+ # Deploy PM skills after successful initialization
207
+ if result.get("status") == OperationResult.SUCCESS:
208
+ self._deploy_pm_skills()
209
+
205
210
  return result
206
211
 
207
212
  except Exception as e:
@@ -399,48 +404,6 @@ class MPMInitCommand:
399
404
  "warnings": warnings,
400
405
  }
401
406
 
402
- def _update_gitignore(self) -> None:
403
- """Update .gitignore to exclude claude-mpm configuration directories.
404
-
405
- Ensures that claude-mpm configuration directories are added to .gitignore
406
- to prevent them from being committed to version control.
407
-
408
- This is a non-destructive operation that:
409
- - Creates .gitignore if it doesn't exist
410
- - Appends missing entries only (never duplicates)
411
- - Preserves all existing content
412
-
413
- Standard entries added:
414
- - .claude-mpm/: Main configuration directory
415
- - .claude/agents/: Agent runtime files
416
- """
417
- from claude_mpm.utils.gitignore import ensure_claude_mpm_gitignore
418
-
419
- try:
420
- result = ensure_claude_mpm_gitignore(str(self.project_path))
421
-
422
- if result.get("status") == "success":
423
- if result.get("added"):
424
- self.console.print(
425
- f"[green]✓[/green] Updated .gitignore: {', '.join(result['added'])}"
426
- )
427
- logger.info(f"Added to .gitignore: {result['added']}")
428
- elif result.get("existing"):
429
- logger.debug(f".gitignore already contains: {result['existing']}")
430
- else:
431
- # Non-critical error - log but don't fail initialization
432
- logger.warning(
433
- f"Could not update .gitignore: {result.get('error', 'Unknown error')}"
434
- )
435
- self.console.print(
436
- f"[yellow]⚠️ Could not update .gitignore: {result.get('error')}[/yellow]"
437
- )
438
-
439
- except Exception as e:
440
- # Non-critical error - log but don't fail initialization
441
- logger.warning(f"Error updating .gitignore: {e}")
442
- self.console.print(f"[yellow]⚠️ Could not update .gitignore: {e}[/yellow]")
443
-
444
407
  def _build_initialization_prompt(
445
408
  self,
446
409
  project_type: Optional[str] = None,
@@ -452,6 +415,10 @@ class MPMInitCommand:
452
415
  self.project_path, project_type, framework, ast_analysis
453
416
  )
454
417
 
418
+ def _is_initialized(self) -> bool:
419
+ """Check if project is already initialized with .claude-mpm directory."""
420
+ return self.claude_mpm_dir.exists()
421
+
455
422
  def _build_update_prompt(
456
423
  self,
457
424
  project_type: Optional[str],
@@ -459,10 +426,65 @@ class MPMInitCommand:
459
426
  ast_analysis: bool,
460
427
  preserve_custom: bool,
461
428
  ) -> str:
462
- """Build prompt for update mode."""
429
+ """Build prompt for update mode with optional knowledge extraction."""
463
430
  # Get existing content analysis
464
431
  doc_analysis = self.doc_manager.analyze_existing_content()
465
432
 
433
+ # Check if project is initialized (.claude-mpm exists)
434
+ # If so, use enhanced update mode with knowledge extraction
435
+ if self._is_initialized():
436
+ self.console.print(
437
+ "[cyan]✓ Detected initialized project - activating enhanced update mode[/cyan]"
438
+ )
439
+
440
+ # Extract knowledge from all sources
441
+ extractor = ProjectKnowledgeExtractor(self.project_path)
442
+
443
+ self.console.print("[cyan]✓ Analyzing git history (last 90 days)...[/cyan]")
444
+ git_insights = extractor.extract_from_git(days=90)
445
+
446
+ if git_insights.get("available"):
447
+ arch_count = len(git_insights.get("architectural_decisions", []))
448
+ workflow_count = len(git_insights.get("workflow_patterns", []))
449
+ self.console.print(f" - Found {arch_count} architectural decisions")
450
+ self.console.print(f" - Detected {workflow_count} workflow patterns")
451
+
452
+ self.console.print("[cyan]✓ Analyzing session logs...[/cyan]")
453
+ log_insights = extractor.extract_from_logs()
454
+
455
+ if log_insights.get("available"):
456
+ learning_count = len(log_insights.get("learnings", []))
457
+ self.console.print(f" - Found {learning_count} learning entries")
458
+
459
+ self.console.print("[cyan]✓ Analyzing memory files...[/cyan]")
460
+ memory_insights = extractor.extract_from_memory()
461
+
462
+ if memory_insights.get("available"):
463
+ total_insights = (
464
+ len(memory_insights.get("architectural_knowledge", []))
465
+ + len(memory_insights.get("implementation_guidelines", []))
466
+ + len(memory_insights.get("common_mistakes", []))
467
+ + len(memory_insights.get("technical_context", []))
468
+ )
469
+ self.console.print(f" - Found {total_insights} accumulated insights")
470
+
471
+ self.console.print(
472
+ "[green]✓ Knowledge extraction complete - building enhanced prompt[/green]\n"
473
+ )
474
+
475
+ # Build enhanced prompt with extracted knowledge
476
+ return prompts.build_enhanced_update_prompt(
477
+ self.project_path,
478
+ doc_analysis,
479
+ git_insights,
480
+ log_insights,
481
+ memory_insights,
482
+ project_type,
483
+ framework,
484
+ ast_analysis,
485
+ preserve_custom,
486
+ )
487
+ # Standard update mode (no .claude-mpm directory)
466
488
  return prompts.build_update_prompt(
467
489
  self.project_path,
468
490
  doc_analysis,
@@ -548,6 +570,11 @@ class MPMInitCommand:
548
570
  self.archive_manager,
549
571
  )
550
572
 
573
+ # Optimize CLAUDE.md with prompt-engineer if it exists
574
+ claude_md = self.project_path / "CLAUDE.md"
575
+ if claude_md.exists():
576
+ self._optimize_claude_md_with_prompt_engineer()
577
+
551
578
  def _display_results(self, result: Dict, verbose: bool):
552
579
  """Display initialization results."""
553
580
  display.display_results(self.display, self.console, result, verbose)
@@ -569,5 +596,164 @@ class MPMInitCommand:
569
596
  """Build structured Research agent delegation prompt from git analysis."""
570
597
  return prompts.build_research_context_prompt(git_analysis, days)
571
598
 
599
+ def _optimize_claude_md_with_prompt_engineer(self) -> None:
600
+ """Optimize CLAUDE.md with prompt-engineer for conciseness and clarity."""
601
+ claude_md_path = self.project_path / "CLAUDE.md"
602
+ if not claude_md_path.exists():
603
+ return
604
+
605
+ try:
606
+ # Read current content
607
+ original_content = claude_md_path.read_text()
608
+ original_tokens = self._estimate_tokens(original_content)
609
+
610
+ # Create backup
611
+ backup_path = self.archive_manager.auto_archive_before_update(
612
+ claude_md_path, update_reason="Before prompt-engineer optimization"
613
+ )
614
+
615
+ if not backup_path:
616
+ logger.warning("Could not create backup before optimization")
617
+ self.console.print(
618
+ "[yellow]⚠️ Skipping optimization - backup failed[/yellow]"
619
+ )
620
+ return
621
+
622
+ self.console.print(
623
+ "\n[cyan]✓ Optimizing CLAUDE.md with prompt-engineer...[/cyan]"
624
+ )
625
+ self.console.print(f" - Original: {original_tokens:,} tokens (estimated)")
626
+ self.console.print(f" - Backup created: {backup_path}")
627
+
628
+ # Build optimization prompt
629
+ prompt = prompts.build_prompt_engineer_optimization_prompt(
630
+ original_content, original_tokens
631
+ )
632
+
633
+ # Run optimization through subprocess
634
+ with Progress(
635
+ SpinnerColumn(),
636
+ TextColumn("[progress.description]{task.description}"),
637
+ console=self.console,
638
+ ) as progress:
639
+ task = progress.add_task(
640
+ "[cyan]Running prompt-engineer optimization...", total=None
641
+ )
642
+
643
+ result = self._run_initialization(
644
+ prompt, verbose=False, update_mode=True
645
+ )
646
+
647
+ progress.update(task, description="[green]✓ Optimization complete")
648
+
649
+ # Check if optimization succeeded
650
+ if result.get("status") == OperationResult.SUCCESS:
651
+ # Read optimized content
652
+ optimized_content = claude_md_path.read_text()
653
+ optimized_tokens = self._estimate_tokens(optimized_content)
654
+
655
+ # Calculate reduction
656
+ token_reduction = original_tokens - optimized_tokens
657
+ reduction_percent = (
658
+ (token_reduction / original_tokens * 100)
659
+ if original_tokens > 0
660
+ else 0
661
+ )
662
+
663
+ self.console.print(
664
+ f" - Optimized: {optimized_tokens:,} tokens ({reduction_percent:.1f}% reduction)"
665
+ )
666
+ self.console.print("[green]✓ CLAUDE.md optimization complete[/green]\n")
667
+ # Restore from backup on failure
668
+ elif backup_path and backup_path.exists():
669
+ import shutil
670
+
671
+ shutil.copy2(backup_path, claude_md_path)
672
+ self.console.print(
673
+ "[yellow]⚠️ Optimization failed - restored from backup[/yellow]\n"
674
+ )
675
+
676
+ except Exception as e:
677
+ logger.error(f"Failed to optimize CLAUDE.md: {e}")
678
+ self.console.print(
679
+ f"[yellow]⚠️ Could not optimize CLAUDE.md: {e}[/yellow]\n"
680
+ )
681
+
682
+ def _estimate_tokens(self, text: str) -> int:
683
+ """Estimate token count for text (rough approximation).
684
+
685
+ Uses a simple heuristic: ~4 characters per token for English text.
686
+ This is a rough estimate but sufficient for displaying progress.
687
+ """
688
+ return len(text) // 4
689
+
690
+ def _deploy_pm_skills(self) -> None:
691
+ """Deploy PM skills templates to project .claude directory.
692
+
693
+ Copies PM skills from bundled templates to .claude/skills/
694
+ with version tracking and checksum validation.
695
+ """
696
+ try:
697
+ from rich.progress import (
698
+ BarColumn,
699
+ Progress,
700
+ TaskProgressColumn,
701
+ TextColumn,
702
+ )
703
+
704
+ from claude_mpm.services.pm_skills_deployer import PMSkillsDeployerService
705
+
706
+ deployer = PMSkillsDeployerService()
707
+
708
+ # Use progress bar for deployment
709
+ with Progress(
710
+ TextColumn("[cyan]Deploying PM skills[/cyan]"),
711
+ BarColumn(bar_width=30),
712
+ TaskProgressColumn(),
713
+ TextColumn("[dim]{task.description}[/dim]"),
714
+ console=self.console,
715
+ ) as progress:
716
+ task = progress.add_task("", total=None) # Unknown total initially
717
+
718
+ def update_progress(skill_name: str, current: int, total: int) -> None:
719
+ progress.update(
720
+ task, total=total, completed=current, description=skill_name
721
+ )
722
+
723
+ result = deployer.deploy_pm_skills(
724
+ self.project_path, progress_callback=update_progress
725
+ )
726
+
727
+ if result.success:
728
+ if result.deployed:
729
+ self.console.print(
730
+ f"[green]✓ Deployed {len(result.deployed)} PM skills[/green]"
731
+ )
732
+
733
+ if result.skipped:
734
+ self.console.print(
735
+ f"[dim] Skipped {len(result.skipped)} (already deployed)[/dim]"
736
+ )
737
+
738
+ if result.errors:
739
+ self.console.print(
740
+ f"[yellow]⚠️ {len(result.errors)} errors:[/yellow]"
741
+ )
742
+ for error in result.errors[:3]: # Show first 3 errors
743
+ self.console.print(f" • {error['skill']}: {error['error']}")
744
+ else:
745
+ self.console.print(
746
+ f"[yellow]⚠️ PM skills deployment had errors: {result.message}[/yellow]"
747
+ )
748
+
749
+ except ImportError as e:
750
+ logger.warning(f"PM skills deployer not available: {e}")
751
+ self.console.print(
752
+ "[yellow]⚠️ PM skills deployment skipped (service not available)[/yellow]"
753
+ )
754
+ except Exception as e:
755
+ logger.error(f"Failed to deploy PM skills: {e}")
756
+ self.console.print(f"[yellow]⚠️ PM skills deployment failed: {e}[/yellow]")
757
+
572
758
 
573
759
  __all__ = ["MPMInitCommand"]