claude-mpm 5.4.36__py3-none-any.whl → 5.4.62__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 (254) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +5 -0
  3. claude_mpm/agents/PM_INSTRUCTIONS.md +489 -177
  4. claude_mpm/agents/base_agent.json +1 -1
  5. claude_mpm/agents/frontmatter_validator.py +2 -2
  6. claude_mpm/cli/commands/configure_agent_display.py +12 -0
  7. claude_mpm/cli/commands/mpm_init/core.py +72 -0
  8. claude_mpm/cli/commands/profile.py +276 -0
  9. claude_mpm/cli/commands/skills.py +14 -18
  10. claude_mpm/cli/executor.py +10 -0
  11. claude_mpm/cli/parsers/base_parser.py +7 -0
  12. claude_mpm/cli/parsers/profile_parser.py +147 -0
  13. claude_mpm/cli/parsers/skills_parser.py +0 -6
  14. claude_mpm/cli/startup.py +433 -147
  15. claude_mpm/commands/mpm-config.md +13 -250
  16. claude_mpm/commands/mpm-doctor.md +9 -22
  17. claude_mpm/commands/mpm-help.md +5 -206
  18. claude_mpm/commands/mpm-init.md +81 -507
  19. claude_mpm/commands/mpm-monitor.md +15 -402
  20. claude_mpm/commands/mpm-organize.md +61 -441
  21. claude_mpm/commands/mpm-postmortem.md +6 -108
  22. claude_mpm/commands/mpm-session-resume.md +12 -363
  23. claude_mpm/commands/mpm-status.md +5 -69
  24. claude_mpm/commands/mpm-ticket-view.md +52 -495
  25. claude_mpm/commands/mpm-version.md +5 -107
  26. claude_mpm/core/optimized_startup.py +61 -0
  27. claude_mpm/core/shared/config_loader.py +3 -1
  28. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +1 -0
  29. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +1 -0
  30. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CWc5urbQ.js → 4TdZjIqw.js} +1 -1
  31. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +24 -0
  32. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B0uc0UOD.js +36 -0
  33. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7RN905-.js +1 -0
  34. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7xVLGWV.js +2 -0
  35. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BIF9m_hv.js +61 -0
  36. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +1 -0
  37. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BPYeabCQ.js +1 -0
  38. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
  39. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uj46x2Wr.js → BSNlmTZj.js} +1 -1
  40. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Be7GpZd6.js +7 -0
  41. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bh0LDWpI.js +145 -0
  42. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BofRWZRR.js +10 -0
  43. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BovzEFCE.js +30 -0
  44. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C30mlcqg.js +165 -0
  45. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4B-KCzX.js +1 -0
  46. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4JcI4KD.js +122 -0
  47. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CBBdVcY8.js +1 -0
  48. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CDuw-vjf.js +1 -0
  49. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C_Usid8X.js +15 -0
  50. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cfqx1Qun.js +10 -0
  51. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CiIAseT4.js +128 -0
  52. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
  53. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CnA0NrzZ.js +1 -0
  54. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cs_tUR18.js +24 -0
  55. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
  56. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CyWMqx4W.js +43 -0
  57. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzZX-COe.js +220 -0
  58. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzeYkLYB.js +65 -0
  59. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D3k0OPJN.js +4 -0
  60. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9lljYKQ.js +1 -0
  61. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DGkLK5U1.js +267 -0
  62. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DI7hHRFL.js +1 -0
  63. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DLVjFsZ3.js +139 -0
  64. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUrLdbGD.js +89 -0
  65. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
  66. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DY1XQ8fi.js +2 -0
  67. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DZX00Y4g.js +1 -0
  68. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +1 -0
  69. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DaimHw_p.js +68 -0
  70. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +323 -0
  71. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dhb8PKl3.js +1 -0
  72. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dle-35c7.js +64 -0
  73. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DmxopI1J.js +1 -0
  74. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DwBR2MJi.js +60 -0
  75. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/GYwsonyD.js +1 -0
  76. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
  77. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DjhvlsAc.js → NqQ1dWOy.js} +1 -1
  78. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/RJiighC3.js +1 -0
  79. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{N4qtv3Hx.js → Vzk33B_K.js} +1 -1
  80. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ZGh7QtNv.js +7 -0
  81. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bT1r9zLR.js +1 -0
  82. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bTOqqlTd.js +1 -0
  83. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/eNVUfhuA.js +1 -0
  84. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/iEWssX7S.js +162 -0
  85. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/sQeU3Y1z.js +1 -0
  86. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uuIeMWc-.js +1 -0
  87. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.D6-I5TpK.js +2 -0
  88. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +1 -0
  89. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.CAGBuiOw.js → 0.m1gL8KXf.js} +1 -1
  90. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.CgNOuw-d.js +1 -0
  91. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +1 -0
  92. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -1
  93. claude_mpm/dashboard/static/svelte-build/index.html +10 -10
  94. claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
  95. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
  96. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
  97. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
  98. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
  99. claude_mpm/hooks/kuzu_memory_hook.py +5 -5
  100. claude_mpm/init.py +276 -0
  101. claude_mpm/services/agents/agent_builder.py +3 -3
  102. claude_mpm/services/agents/deployment/agent_deployment.py +22 -0
  103. claude_mpm/services/agents/deployment/agent_discovery_service.py +3 -1
  104. claude_mpm/services/agents/deployment/agent_format_converter.py +25 -13
  105. claude_mpm/services/agents/deployment/agent_template_builder.py +37 -17
  106. claude_mpm/services/agents/deployment/async_agent_deployment.py +31 -27
  107. claude_mpm/services/agents/deployment/local_template_deployment.py +3 -1
  108. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +149 -4
  109. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +47 -26
  110. claude_mpm/services/agents/git_source_manager.py +21 -2
  111. claude_mpm/services/agents/sources/git_source_sync_service.py +116 -5
  112. claude_mpm/services/monitor/management/lifecycle.py +7 -1
  113. claude_mpm/services/pm_skills_deployer.py +711 -0
  114. claude_mpm/services/profile_manager.py +337 -0
  115. claude_mpm/services/skills/git_skill_source_manager.py +148 -11
  116. claude_mpm/services/skills/selective_skill_deployer.py +97 -48
  117. claude_mpm/services/skills_deployer.py +161 -65
  118. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  119. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  120. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  121. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  122. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  123. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  124. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  125. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  126. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  127. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  128. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  129. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  130. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  131. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  132. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  133. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  134. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  135. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  136. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  137. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  138. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  139. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  140. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  141. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  142. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  143. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  144. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  145. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  146. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  147. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  148. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  149. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  150. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  151. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  152. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  153. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  154. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  155. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  156. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  157. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  158. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  159. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  160. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  161. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  162. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  163. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  164. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  165. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  166. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  167. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  168. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  169. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  170. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  171. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  172. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  173. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  174. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  175. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  176. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  177. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  178. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  179. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  180. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  181. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  182. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  183. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  184. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  185. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  186. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  187. claude_mpm/skills/bundled/pm/pm-delegation-patterns/SKILL.md +167 -0
  188. claude_mpm/skills/bundled/pm/pm-git-file-tracking/SKILL.md +113 -0
  189. claude_mpm/skills/bundled/pm/pm-pr-workflow/SKILL.md +124 -0
  190. claude_mpm/skills/bundled/pm/pm-ticketing-integration/SKILL.md +154 -0
  191. claude_mpm/skills/bundled/pm/pm-verification-protocols/SKILL.md +198 -0
  192. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  193. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  194. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  195. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  196. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  197. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  198. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  199. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  200. claude_mpm/skills/bundled/security-scanning.md +112 -0
  201. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  202. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  203. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  204. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  205. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  206. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  207. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  208. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  209. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  210. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  211. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  212. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  213. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  214. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  215. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  216. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  217. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  218. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  219. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  220. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  221. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  222. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  223. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  224. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  225. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  226. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  227. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  228. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  229. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  230. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  231. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  232. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  233. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  234. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  235. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  236. claude_mpm/skills/skill_manager.py +98 -3
  237. claude_mpm/templates/.pre-commit-config.yaml +112 -0
  238. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.62.dist-info}/METADATA +3 -2
  239. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.62.dist-info}/RECORD +244 -68
  240. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +0 -1
  241. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +0 -1
  242. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +0 -1
  243. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +0 -1
  244. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +0 -2
  245. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +0 -2
  246. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +0 -1
  247. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +0 -1
  248. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +0 -10
  249. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
  250. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.62.dist-info}/WHEEL +0 -0
  251. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.62.dist-info}/entry_points.txt +0 -0
  252. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.62.dist-info}/licenses/LICENSE +0 -0
  253. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.62.dist-info}/licenses/LICENSE-FAQ.md +0 -0
  254. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.62.dist-info}/top_level.txt +0 -0
@@ -13,11 +13,16 @@ import logging
13
13
  import time
14
14
  from datetime import datetime, timezone
15
15
  from pathlib import Path
16
- from typing import Any, Dict, List, Optional, Tuple
16
+ from typing import Any, Dict, List, Optional, Set, Tuple
17
17
 
18
18
  import requests
19
19
 
20
20
  from claude_mpm.core.file_utils import get_file_hash
21
+
22
+ # Import normalize function for exclusion filtering
23
+ from claude_mpm.services.agents.deployment.multi_source_deployment_service import (
24
+ _normalize_agent_name,
25
+ )
21
26
  from claude_mpm.services.agents.sources.agent_sync_state import AgentSyncState
22
27
  from claude_mpm.utils.progress import create_progress_bar
23
28
 
@@ -923,6 +928,62 @@ class GitSourceSyncService:
923
928
  """
924
929
  return self.cache_dir
925
930
 
931
+ def _cleanup_excluded_agents(
932
+ self,
933
+ deployment_dir: Path,
934
+ excluded_set: Set[str],
935
+ ) -> Dict[str, List[str]]:
936
+ """Remove excluded agents from deployment directory.
937
+
938
+ Removes any agents in the deployment directory whose normalized
939
+ names match the exclusion list. This ensures that excluded agents
940
+ are cleaned up from previous deployments.
941
+
942
+ Args:
943
+ deployment_dir: Directory containing deployed agents
944
+ excluded_set: Set of normalized agent names to exclude
945
+
946
+ Returns:
947
+ Dictionary with cleanup results:
948
+ - removed: List of agent names that were removed
949
+ """
950
+ cleanup_results: Dict[str, List[str]] = {"removed": []}
951
+
952
+ if not deployment_dir.exists():
953
+ logger.debug("Deployment directory does not exist, no cleanup needed")
954
+ return cleanup_results
955
+
956
+ for item in deployment_dir.iterdir():
957
+ # Only process .md files
958
+ if not item.is_file() or item.suffix != ".md":
959
+ continue
960
+
961
+ # Skip hidden files
962
+ if item.name.startswith("."):
963
+ continue
964
+
965
+ # Normalize agent name for comparison
966
+ agent_name = _normalize_agent_name(item.stem)
967
+
968
+ # Check if this agent is excluded
969
+ if agent_name in excluded_set:
970
+ try:
971
+ item.unlink()
972
+ cleanup_results["removed"].append(item.stem)
973
+ logger.info(f"Removed excluded agent: {item.stem}")
974
+ except PermissionError as e:
975
+ logger.error(f"Permission denied removing {item.stem}: {e}")
976
+ except Exception as e:
977
+ logger.error(f"Failed to remove {item.stem}: {e}")
978
+
979
+ # Log summary
980
+ if cleanup_results["removed"]:
981
+ logger.info(
982
+ f"Cleanup complete: removed {len(cleanup_results['removed'])} excluded agents"
983
+ )
984
+
985
+ return cleanup_results
986
+
926
987
  def deploy_agents_to_project(
927
988
  self,
928
989
  project_dir: Path,
@@ -977,6 +1038,8 @@ class GitSourceSyncService:
977
1038
  """
978
1039
  import shutil
979
1040
 
1041
+ from claude_mpm.core.config import Config
1042
+
980
1043
  # Deploy to .claude/agents/ where Claude Code expects them
981
1044
  deployment_dir = project_dir / ".claude" / "agents"
982
1045
  deployment_dir.mkdir(parents=True, exist_ok=True)
@@ -989,10 +1052,55 @@ class GitSourceSyncService:
989
1052
  "deployment_dir": str(deployment_dir),
990
1053
  }
991
1054
 
1055
+ # Load project config to get exclusion list
1056
+ config_file = project_dir / ".claude-mpm" / "configuration.yaml"
1057
+ if config_file.exists():
1058
+ config = Config(config_file=config_file)
1059
+ excluded_agents = config.get("excluded_agents", [])
1060
+ else:
1061
+ # No project config, no exclusions
1062
+ excluded_agents = []
1063
+
1064
+ # Create normalized exclusion set
1065
+ excluded_set: Set[str] = (
1066
+ {_normalize_agent_name(name) for name in excluded_agents}
1067
+ if excluded_agents
1068
+ else set()
1069
+ )
1070
+
1071
+ if excluded_set:
1072
+ logger.info(
1073
+ f"Applying exclusions: {', '.join(sorted(excluded_agents))} "
1074
+ f"(normalized: {', '.join(sorted(excluded_set))})"
1075
+ )
1076
+
992
1077
  # Get agents from cache or use provided list
993
1078
  if agent_list is None:
994
1079
  agent_list = self._discover_cached_agents()
995
1080
 
1081
+ # Filter out excluded agents
1082
+ if excluded_set:
1083
+ original_count = len(agent_list)
1084
+ agent_list = [
1085
+ agent_path
1086
+ for agent_path in agent_list
1087
+ if _normalize_agent_name(Path(agent_path).stem) not in excluded_set
1088
+ ]
1089
+ filtered_count = original_count - len(agent_list)
1090
+ if filtered_count > 0:
1091
+ logger.info(f"Filtered out {filtered_count} excluded agents")
1092
+
1093
+ # Clean up any previously deployed excluded agents
1094
+ if excluded_set:
1095
+ cleanup_results = self._cleanup_excluded_agents(
1096
+ deployment_dir, excluded_set
1097
+ )
1098
+ if cleanup_results["removed"]:
1099
+ logger.info(
1100
+ f"Cleaned up {len(cleanup_results['removed'])} excluded agents: "
1101
+ f"{', '.join(cleanup_results['removed'])}"
1102
+ )
1103
+
996
1104
  logger.info(
997
1105
  f"Deploying {len(agent_list)} agents from cache to {deployment_dir}"
998
1106
  )
@@ -1010,14 +1118,17 @@ class GitSourceSyncService:
1010
1118
  deploy_filename = Path(agent_path).name
1011
1119
  deploy_file = deployment_dir / deploy_filename
1012
1120
 
1013
- # Check if update needed (compare modification times)
1121
+ # Check if update needed (compare content, not just mtime)
1122
+ # DESIGN: Use content hash comparison for reliable change detection
1123
+ # Mtime comparison can fail when cache downloads have older timestamps
1014
1124
  should_deploy = force
1015
1125
  was_existing = deploy_file.exists()
1016
1126
 
1017
1127
  if not force and was_existing:
1018
- cache_mtime = cache_file.stat().st_mtime
1019
- deploy_mtime = deploy_file.stat().st_mtime
1020
- should_deploy = cache_mtime > deploy_mtime
1128
+ # Compare file contents using hash
1129
+ cache_content = cache_file.read_bytes()
1130
+ deploy_content = deploy_file.read_bytes()
1131
+ should_deploy = cache_content != deploy_content
1021
1132
 
1022
1133
  if not should_deploy and was_existing:
1023
1134
  results["skipped"].append(deploy_filename)
@@ -482,7 +482,13 @@ class DaemonLifecycle:
482
482
  # Configure logger to write to file immediately
483
483
  import logging
484
484
 
485
- file_handler = logging.FileHandler(self.log_file)
485
+ # Use RotatingFileHandler for automatic log rotation
486
+ # 5MB max size, 5 backup files (consistent with project logging standards)
487
+ file_handler = logging.handlers.RotatingFileHandler(
488
+ self.log_file,
489
+ maxBytes=5 * 1024 * 1024, # 5MB
490
+ backupCount=5,
491
+ )
486
492
  file_handler.setLevel(logging.DEBUG)
487
493
  formatter = logging.Formatter(
488
494
  "%(asctime)s - %(name)s - %(levelname)s - %(message)s"