claude-mpm 3.4.10__py3-none-any.whl → 5.4.55__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (950) hide show
  1. claude_mpm/BUILD_NUMBER +1 -0
  2. claude_mpm/VERSION +1 -0
  3. claude_mpm/__init__.py +50 -12
  4. claude_mpm/__main__.py +7 -2
  5. claude_mpm/agents/BASE_AGENT.md +164 -0
  6. claude_mpm/agents/BASE_ENGINEER.md +658 -0
  7. claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +290 -0
  8. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
  9. claude_mpm/agents/MEMORY.md +72 -0
  10. claude_mpm/agents/PM_INSTRUCTIONS.md +1402 -0
  11. claude_mpm/agents/WORKFLOW.md +111 -0
  12. claude_mpm/agents/__init__.py +92 -80
  13. claude_mpm/agents/agent-template.yaml +83 -0
  14. claude_mpm/agents/agent_loader.py +560 -745
  15. claude_mpm/agents/agent_loader_integration.py +53 -55
  16. claude_mpm/agents/agents_metadata.py +186 -27
  17. claude_mpm/agents/async_agent_loader.py +436 -0
  18. claude_mpm/agents/base_agent.json +8 -4
  19. claude_mpm/agents/frontmatter_validator.py +754 -0
  20. claude_mpm/agents/system_agent_config.py +222 -155
  21. claude_mpm/agents/templates/README.md +465 -0
  22. claude_mpm/agents/templates/__init__.py +17 -13
  23. claude_mpm/agents/templates/circuit-breakers.md +1391 -0
  24. claude_mpm/agents/templates/context-management-examples.md +544 -0
  25. claude_mpm/agents/templates/git-file-tracking.md +584 -0
  26. claude_mpm/agents/templates/pm-examples.md +474 -0
  27. claude_mpm/agents/templates/pm-red-flags.md +310 -0
  28. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  29. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  30. claude_mpm/agents/templates/response-format.md +583 -0
  31. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  32. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  33. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  34. claude_mpm/agents/templates/validation-templates.md +312 -0
  35. claude_mpm/cli/__init__.py +90 -128
  36. claude_mpm/cli/__main__.py +33 -0
  37. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  38. claude_mpm/cli/commands/__init__.py +36 -12
  39. claude_mpm/cli/commands/agent_manager.py +1403 -0
  40. claude_mpm/cli/commands/agent_source.py +774 -0
  41. claude_mpm/cli/commands/agent_state_manager.py +335 -0
  42. claude_mpm/cli/commands/agents.py +2503 -168
  43. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  44. claude_mpm/cli/commands/agents_discover.py +338 -0
  45. claude_mpm/cli/commands/aggregate.py +540 -0
  46. claude_mpm/cli/commands/analyze.py +553 -0
  47. claude_mpm/cli/commands/analyze_code.py +528 -0
  48. claude_mpm/cli/commands/auto_configure.py +1053 -0
  49. claude_mpm/cli/commands/cleanup.py +588 -0
  50. claude_mpm/cli/commands/cleanup_orphaned_agents.py +150 -0
  51. claude_mpm/cli/commands/config.py +586 -0
  52. claude_mpm/cli/commands/configure.py +2654 -0
  53. claude_mpm/cli/commands/configure_agent_display.py +282 -0
  54. claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
  55. claude_mpm/cli/commands/configure_hook_manager.py +225 -0
  56. claude_mpm/cli/commands/configure_models.py +18 -0
  57. claude_mpm/cli/commands/configure_navigation.py +184 -0
  58. claude_mpm/cli/commands/configure_paths.py +104 -0
  59. claude_mpm/cli/commands/configure_persistence.py +254 -0
  60. claude_mpm/cli/commands/configure_startup_manager.py +646 -0
  61. claude_mpm/cli/commands/configure_template_editor.py +497 -0
  62. claude_mpm/cli/commands/configure_validators.py +73 -0
  63. claude_mpm/cli/commands/dashboard.py +286 -0
  64. claude_mpm/cli/commands/debug.py +1386 -0
  65. claude_mpm/cli/commands/doctor.py +243 -0
  66. claude_mpm/cli/commands/hook_errors.py +277 -0
  67. claude_mpm/cli/commands/info.py +195 -74
  68. claude_mpm/cli/commands/local_deploy.py +534 -0
  69. claude_mpm/cli/commands/mcp.py +205 -0
  70. claude_mpm/cli/commands/mcp_command_router.py +161 -0
  71. claude_mpm/cli/commands/mcp_config.py +154 -0
  72. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  73. claude_mpm/cli/commands/mcp_external_commands.py +249 -0
  74. claude_mpm/cli/commands/mcp_install_commands.py +346 -0
  75. claude_mpm/cli/commands/mcp_pipx_config.py +208 -0
  76. claude_mpm/cli/commands/mcp_server_commands.py +155 -0
  77. claude_mpm/cli/commands/mcp_setup_external.py +868 -0
  78. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  79. claude_mpm/cli/commands/memory.py +585 -846
  80. claude_mpm/cli/commands/monitor.py +228 -310
  81. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  82. claude_mpm/cli/commands/mpm_init/core.py +759 -0
  83. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  84. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  85. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  86. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  87. claude_mpm/cli/commands/mpm_init/prompts.py +722 -0
  88. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  89. claude_mpm/cli/commands/mpm_init_handler.py +195 -0
  90. claude_mpm/cli/commands/postmortem.py +401 -0
  91. claude_mpm/cli/commands/profile.py +276 -0
  92. claude_mpm/cli/commands/run.py +910 -488
  93. claude_mpm/cli/commands/search.py +458 -0
  94. claude_mpm/cli/commands/skill_source.py +694 -0
  95. claude_mpm/cli/commands/skills.py +1246 -0
  96. claude_mpm/cli/commands/summarize.py +413 -0
  97. claude_mpm/cli/commands/tickets.py +536 -53
  98. claude_mpm/cli/commands/uninstall.py +176 -0
  99. claude_mpm/cli/commands/upgrade.py +152 -0
  100. claude_mpm/cli/commands/verify.py +119 -0
  101. claude_mpm/cli/executor.py +297 -0
  102. claude_mpm/cli/helpers.py +105 -0
  103. claude_mpm/cli/interactive/__init__.py +21 -0
  104. claude_mpm/cli/interactive/agent_wizard.py +1947 -0
  105. claude_mpm/cli/interactive/skills_wizard.py +491 -0
  106. claude_mpm/cli/parser.py +87 -563
  107. claude_mpm/cli/parsers/__init__.py +35 -0
  108. claude_mpm/cli/parsers/agent_manager_parser.py +393 -0
  109. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  110. claude_mpm/cli/parsers/agents_parser.py +575 -0
  111. claude_mpm/cli/parsers/analyze_code_parser.py +170 -0
  112. claude_mpm/cli/parsers/analyze_parser.py +135 -0
  113. claude_mpm/cli/parsers/auto_configure_parser.py +120 -0
  114. claude_mpm/cli/parsers/base_parser.py +644 -0
  115. claude_mpm/cli/parsers/config_parser.py +208 -0
  116. claude_mpm/cli/parsers/configure_parser.py +138 -0
  117. claude_mpm/cli/parsers/dashboard_parser.py +113 -0
  118. claude_mpm/cli/parsers/debug_parser.py +319 -0
  119. claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
  120. claude_mpm/cli/parsers/mcp_parser.py +195 -0
  121. claude_mpm/cli/parsers/memory_parser.py +138 -0
  122. claude_mpm/cli/parsers/monitor_parser.py +142 -0
  123. claude_mpm/cli/parsers/mpm_init_parser.py +311 -0
  124. claude_mpm/cli/parsers/profile_parser.py +147 -0
  125. claude_mpm/cli/parsers/run_parser.py +157 -0
  126. claude_mpm/cli/parsers/search_parser.py +245 -0
  127. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  128. claude_mpm/cli/parsers/skills_parser.py +277 -0
  129. claude_mpm/cli/parsers/source_parser.py +138 -0
  130. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  131. claude_mpm/cli/shared/__init__.py +40 -0
  132. claude_mpm/cli/shared/argument_patterns.py +205 -0
  133. claude_mpm/cli/shared/base_command.py +242 -0
  134. claude_mpm/cli/shared/error_handling.py +242 -0
  135. claude_mpm/cli/shared/output_formatters.py +241 -0
  136. claude_mpm/cli/startup.py +1743 -0
  137. claude_mpm/cli/startup_display.py +480 -0
  138. claude_mpm/cli/startup_logging.py +839 -0
  139. claude_mpm/cli/utils.py +136 -47
  140. claude_mpm/cli_module/__init__.py +6 -6
  141. claude_mpm/cli_module/args.py +188 -140
  142. claude_mpm/cli_module/commands.py +79 -70
  143. claude_mpm/cli_module/migration_example.py +42 -64
  144. claude_mpm/commands/__init__.py +14 -0
  145. claude_mpm/commands/mpm-config.md +28 -0
  146. claude_mpm/commands/mpm-doctor.md +20 -0
  147. claude_mpm/commands/mpm-help.md +20 -0
  148. claude_mpm/commands/mpm-init.md +120 -0
  149. claude_mpm/commands/mpm-monitor.md +31 -0
  150. claude_mpm/commands/mpm-organize.md +120 -0
  151. claude_mpm/commands/mpm-postmortem.md +21 -0
  152. claude_mpm/commands/mpm-session-resume.md +30 -0
  153. claude_mpm/commands/mpm-status.md +20 -0
  154. claude_mpm/commands/mpm-ticket-view.md +109 -0
  155. claude_mpm/commands/mpm-version.md +20 -0
  156. claude_mpm/commands/mpm.md +31 -0
  157. claude_mpm/config/__init__.py +42 -2
  158. claude_mpm/config/agent_config.py +402 -0
  159. claude_mpm/config/agent_presets.py +488 -0
  160. claude_mpm/config/agent_sources.py +352 -0
  161. claude_mpm/config/experimental_features.py +217 -0
  162. claude_mpm/config/model_config.py +428 -0
  163. claude_mpm/config/paths.py +258 -0
  164. claude_mpm/config/skill_presets.py +392 -0
  165. claude_mpm/config/skill_sources.py +590 -0
  166. claude_mpm/config/socketio_config.py +125 -83
  167. claude_mpm/constants.py +132 -22
  168. claude_mpm/core/__init__.py +62 -36
  169. claude_mpm/core/agent_name_normalizer.py +71 -73
  170. claude_mpm/core/agent_registry.py +385 -492
  171. claude_mpm/core/agent_session_manager.py +81 -70
  172. claude_mpm/core/api_validator.py +330 -0
  173. claude_mpm/core/base_service.py +159 -122
  174. claude_mpm/core/cache.py +560 -0
  175. claude_mpm/core/claude_runner.py +696 -916
  176. claude_mpm/core/config.py +613 -122
  177. claude_mpm/core/config_aliases.py +74 -73
  178. claude_mpm/core/config_constants.py +314 -0
  179. claude_mpm/core/constants.py +361 -0
  180. claude_mpm/core/container.py +646 -104
  181. claude_mpm/core/enums.py +452 -0
  182. claude_mpm/core/error_handler.py +623 -0
  183. claude_mpm/core/exceptions.py +536 -0
  184. claude_mpm/core/factories.py +105 -109
  185. claude_mpm/core/file_utils.py +764 -0
  186. claude_mpm/core/framework/__init__.py +25 -0
  187. claude_mpm/core/framework/formatters/__init__.py +11 -0
  188. claude_mpm/core/framework/formatters/capability_generator.py +367 -0
  189. claude_mpm/core/framework/formatters/content_formatter.py +278 -0
  190. claude_mpm/core/framework/formatters/context_generator.py +185 -0
  191. claude_mpm/core/framework/loaders/__init__.py +13 -0
  192. claude_mpm/core/framework/loaders/agent_loader.py +213 -0
  193. claude_mpm/core/framework/loaders/file_loader.py +176 -0
  194. claude_mpm/core/framework/loaders/instruction_loader.py +222 -0
  195. claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
  196. claude_mpm/core/framework/processors/__init__.py +11 -0
  197. claude_mpm/core/framework/processors/memory_processor.py +230 -0
  198. claude_mpm/core/framework/processors/metadata_processor.py +146 -0
  199. claude_mpm/core/framework/processors/template_processor.py +244 -0
  200. claude_mpm/core/framework_loader.py +485 -414
  201. claude_mpm/core/hook_error_memory.py +381 -0
  202. claude_mpm/core/hook_manager.py +246 -86
  203. claude_mpm/core/hook_performance_config.py +147 -0
  204. claude_mpm/core/injectable_service.py +72 -63
  205. claude_mpm/core/instruction_reinforcement_hook.py +267 -0
  206. claude_mpm/core/interactive_session.py +670 -0
  207. claude_mpm/core/interfaces.py +570 -164
  208. claude_mpm/core/lazy.py +467 -0
  209. claude_mpm/core/log_manager.py +707 -0
  210. claude_mpm/core/logger.py +295 -134
  211. claude_mpm/core/logging_config.py +474 -0
  212. claude_mpm/core/logging_utils.py +520 -0
  213. claude_mpm/core/minimal_framework_loader.py +24 -22
  214. claude_mpm/core/mixins.py +30 -29
  215. claude_mpm/core/oneshot_session.py +594 -0
  216. claude_mpm/core/optimized_agent_loader.py +479 -0
  217. claude_mpm/core/optimized_startup.py +554 -0
  218. claude_mpm/core/output_style_manager.py +483 -0
  219. claude_mpm/core/pm_hook_interceptor.py +197 -82
  220. claude_mpm/core/protocols/__init__.py +23 -0
  221. claude_mpm/core/protocols/runner_protocol.py +103 -0
  222. claude_mpm/core/protocols/session_protocol.py +131 -0
  223. claude_mpm/core/service_registry.py +153 -116
  224. claude_mpm/core/session_manager.py +179 -64
  225. claude_mpm/core/shared/__init__.py +17 -0
  226. claude_mpm/core/shared/config_loader.py +326 -0
  227. claude_mpm/core/shared/path_resolver.py +281 -0
  228. claude_mpm/core/shared/singleton_manager.py +221 -0
  229. claude_mpm/core/socketio_pool.py +400 -137
  230. claude_mpm/core/system_context.py +38 -0
  231. claude_mpm/core/tool_access_control.py +64 -57
  232. claude_mpm/core/types.py +307 -0
  233. claude_mpm/core/typing_utils.py +553 -0
  234. claude_mpm/core/unified_agent_registry.py +969 -0
  235. claude_mpm/core/unified_config.py +570 -0
  236. claude_mpm/core/unified_paths.py +941 -0
  237. claude_mpm/dashboard/__init__.py +12 -0
  238. claude_mpm/dashboard/api/simple_directory.py +261 -0
  239. claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
  240. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +1 -0
  241. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +1 -0
  242. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/4TdZjIqw.js +1 -0
  243. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +24 -0
  244. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B0uc0UOD.js +36 -0
  245. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7RN905-.js +1 -0
  246. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7xVLGWV.js +2 -0
  247. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BIF9m_hv.js +61 -0
  248. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +1 -0
  249. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BPYeabCQ.js +1 -0
  250. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
  251. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BSNlmTZj.js +1 -0
  252. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Be7GpZd6.js +7 -0
  253. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bh0LDWpI.js +145 -0
  254. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BofRWZRR.js +10 -0
  255. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BovzEFCE.js +30 -0
  256. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C30mlcqg.js +165 -0
  257. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4B-KCzX.js +1 -0
  258. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4JcI4KD.js +122 -0
  259. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CBBdVcY8.js +1 -0
  260. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CDuw-vjf.js +1 -0
  261. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C_Usid8X.js +15 -0
  262. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cfqx1Qun.js +10 -0
  263. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CiIAseT4.js +128 -0
  264. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
  265. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CnA0NrzZ.js +1 -0
  266. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cs_tUR18.js +24 -0
  267. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
  268. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CyWMqx4W.js +43 -0
  269. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzZX-COe.js +220 -0
  270. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzeYkLYB.js +65 -0
  271. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D3k0OPJN.js +4 -0
  272. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9lljYKQ.js +1 -0
  273. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DGkLK5U1.js +267 -0
  274. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DI7hHRFL.js +1 -0
  275. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DLVjFsZ3.js +139 -0
  276. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUrLdbGD.js +89 -0
  277. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
  278. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DY1XQ8fi.js +2 -0
  279. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DZX00Y4g.js +1 -0
  280. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +1 -0
  281. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DaimHw_p.js +68 -0
  282. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +323 -0
  283. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dhb8PKl3.js +1 -0
  284. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dle-35c7.js +64 -0
  285. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DmxopI1J.js +1 -0
  286. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DwBR2MJi.js +60 -0
  287. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/GYwsonyD.js +1 -0
  288. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
  289. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NqQ1dWOy.js +1 -0
  290. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/RJiighC3.js +1 -0
  291. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Vzk33B_K.js +2 -0
  292. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ZGh7QtNv.js +7 -0
  293. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bT1r9zLR.js +1 -0
  294. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bTOqqlTd.js +1 -0
  295. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/eNVUfhuA.js +1 -0
  296. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/iEWssX7S.js +162 -0
  297. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/sQeU3Y1z.js +1 -0
  298. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uuIeMWc-.js +1 -0
  299. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.D6-I5TpK.js +2 -0
  300. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +1 -0
  301. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.m1gL8KXf.js +1 -0
  302. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.CgNOuw-d.js +1 -0
  303. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +1 -0
  304. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
  305. claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
  306. claude_mpm/dashboard/static/svelte-build/index.html +36 -0
  307. claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
  308. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
  309. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
  310. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
  311. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
  312. claude_mpm/experimental/__init__.py +10 -0
  313. claude_mpm/experimental/cli_enhancements.py +104 -89
  314. claude_mpm/generators/__init__.py +1 -1
  315. claude_mpm/generators/agent_profile_generator.py +76 -66
  316. claude_mpm/hooks/__init__.py +37 -1
  317. claude_mpm/hooks/base_hook.py +37 -32
  318. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  319. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  320. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  321. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  322. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  323. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
  324. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  325. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  326. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  327. claude_mpm/hooks/claude_hooks/connection_pool.py +250 -0
  328. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  329. claude_mpm/hooks/claude_hooks/event_handlers.py +888 -0
  330. claude_mpm/hooks/claude_hooks/hook_handler.py +652 -875
  331. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +10 -7
  332. claude_mpm/hooks/claude_hooks/installer.py +806 -0
  333. claude_mpm/hooks/claude_hooks/memory_integration.py +249 -0
  334. claude_mpm/hooks/claude_hooks/response_tracking.py +412 -0
  335. claude_mpm/hooks/claude_hooks/services/__init__.py +15 -0
  336. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  337. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  338. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  339. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  340. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  341. claude_mpm/hooks/claude_hooks/services/connection_manager.py +229 -0
  342. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +254 -0
  343. claude_mpm/hooks/claude_hooks/services/duplicate_detector.py +106 -0
  344. claude_mpm/hooks/claude_hooks/services/state_manager.py +284 -0
  345. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +374 -0
  346. claude_mpm/hooks/claude_hooks/tool_analysis.py +224 -0
  347. claude_mpm/hooks/failure_learning/__init__.py +54 -0
  348. claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
  349. claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
  350. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -0
  351. claude_mpm/hooks/instruction_reinforcement.py +301 -0
  352. claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
  353. claude_mpm/hooks/kuzu_memory_hook.py +386 -0
  354. claude_mpm/hooks/kuzu_response_hook.py +179 -0
  355. claude_mpm/hooks/memory_integration_hook.py +201 -107
  356. claude_mpm/hooks/session_resume_hook.py +121 -0
  357. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  358. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  359. claude_mpm/hooks/tool_call_interceptor.py +92 -76
  360. claude_mpm/hooks/validation_hooks.py +62 -54
  361. claude_mpm/init.py +518 -83
  362. claude_mpm/models/__init__.py +9 -9
  363. claude_mpm/models/agent_definition.py +40 -23
  364. claude_mpm/models/agent_session.py +538 -0
  365. claude_mpm/models/git_repository.py +198 -0
  366. claude_mpm/models/resume_log.py +340 -0
  367. claude_mpm/schemas/__init__.py +12 -0
  368. claude_mpm/scripts/__init__.py +15 -0
  369. claude_mpm/scripts/claude-hook-handler.sh +227 -0
  370. claude_mpm/scripts/launch_monitor.py +165 -0
  371. claude_mpm/scripts/mpm_doctor.py +322 -0
  372. claude_mpm/scripts/socketio_daemon.py +189 -200
  373. claude_mpm/scripts/start_activity_logging.py +91 -0
  374. claude_mpm/services/__init__.py +208 -39
  375. claude_mpm/services/agent_capabilities_service.py +266 -0
  376. claude_mpm/services/agents/__init__.py +89 -0
  377. claude_mpm/services/agents/agent_builder.py +514 -0
  378. claude_mpm/services/agents/agent_preset_service.py +238 -0
  379. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  380. claude_mpm/services/agents/agent_review_service.py +280 -0
  381. claude_mpm/services/agents/agent_selection_service.py +484 -0
  382. claude_mpm/services/agents/auto_config_manager.py +796 -0
  383. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  384. claude_mpm/services/agents/cache_git_manager.py +621 -0
  385. claude_mpm/services/agents/deployment/__init__.py +21 -0
  386. claude_mpm/services/agents/deployment/agent_config_provider.py +410 -0
  387. claude_mpm/services/agents/deployment/agent_configuration_manager.py +358 -0
  388. claude_mpm/services/agents/deployment/agent_definition_factory.py +80 -0
  389. claude_mpm/services/agents/deployment/agent_deployment.py +1037 -0
  390. claude_mpm/services/agents/deployment/agent_discovery_service.py +546 -0
  391. claude_mpm/services/agents/deployment/agent_environment_manager.py +288 -0
  392. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +383 -0
  393. claude_mpm/services/agents/deployment/agent_format_converter.py +505 -0
  394. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +160 -0
  395. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +957 -0
  396. claude_mpm/services/agents/deployment/agent_metrics_collector.py +273 -0
  397. claude_mpm/services/agents/deployment/agent_operation_service.py +573 -0
  398. claude_mpm/services/agents/deployment/agent_record_service.py +418 -0
  399. claude_mpm/services/agents/deployment/agent_restore_handler.py +84 -0
  400. claude_mpm/services/agents/deployment/agent_state_service.py +381 -0
  401. claude_mpm/services/agents/deployment/agent_template_builder.py +1369 -0
  402. claude_mpm/services/agents/deployment/agent_validator.py +376 -0
  403. claude_mpm/services/agents/deployment/agent_version_manager.py +322 -0
  404. claude_mpm/services/{agent_versioning.py → agents/deployment/agent_versioning.py} +10 -13
  405. claude_mpm/services/agents/deployment/agents_directory_resolver.py +149 -0
  406. claude_mpm/services/agents/deployment/async_agent_deployment.py +768 -0
  407. claude_mpm/services/agents/deployment/base_agent_locator.py +132 -0
  408. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  409. claude_mpm/services/agents/deployment/config/deployment_config.py +181 -0
  410. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  411. claude_mpm/services/agents/deployment/deployment_config_loader.py +178 -0
  412. claude_mpm/services/agents/deployment/deployment_results_manager.py +185 -0
  413. claude_mpm/services/agents/deployment/deployment_type_detector.py +120 -0
  414. claude_mpm/services/agents/deployment/deployment_wrapper.py +129 -0
  415. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  416. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  417. claude_mpm/services/agents/deployment/facade/deployment_executor.py +70 -0
  418. claude_mpm/services/agents/deployment/facade/deployment_facade.py +269 -0
  419. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  420. claude_mpm/services/agents/deployment/interface_adapter.py +226 -0
  421. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  422. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  423. claude_mpm/services/agents/deployment/local_template_deployment.py +362 -0
  424. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +1478 -0
  425. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  426. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  427. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +162 -0
  428. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  429. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  430. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +240 -0
  431. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +110 -0
  432. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +80 -0
  433. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +92 -0
  434. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +101 -0
  435. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  436. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +102 -0
  437. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  438. claude_mpm/services/agents/deployment/processors/agent_processor.py +269 -0
  439. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +311 -0
  440. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +862 -0
  441. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  442. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  443. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  444. claude_mpm/services/agents/deployment/single_agent_deployer.py +315 -0
  445. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  446. claude_mpm/services/agents/deployment/strategies/base_strategy.py +113 -0
  447. claude_mpm/services/agents/deployment/strategies/project_strategy.py +148 -0
  448. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  449. claude_mpm/services/agents/deployment/strategies/system_strategy.py +131 -0
  450. claude_mpm/services/agents/deployment/strategies/user_strategy.py +130 -0
  451. claude_mpm/services/agents/deployment/system_instructions_deployer.py +228 -0
  452. claude_mpm/services/agents/deployment/validation/__init__.py +21 -0
  453. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  454. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  455. claude_mpm/services/agents/deployment/validation/template_validator.py +319 -0
  456. claude_mpm/services/agents/deployment/validation/validation_result.py +214 -0
  457. claude_mpm/services/agents/git_source_manager.py +682 -0
  458. claude_mpm/services/agents/loading/__init__.py +11 -0
  459. claude_mpm/services/{agent_profile_loader.py → agents/loading/agent_profile_loader.py} +306 -228
  460. claude_mpm/services/{base_agent_manager.py → agents/loading/base_agent_manager.py} +106 -91
  461. claude_mpm/services/agents/loading/framework_agent_loader.py +433 -0
  462. claude_mpm/services/agents/local_template_manager.py +784 -0
  463. claude_mpm/services/agents/management/__init__.py +9 -0
  464. claude_mpm/services/{agent_capabilities_generator.py → agents/management/agent_capabilities_generator.py} +92 -69
  465. claude_mpm/services/{agent_management_service.py → agents/management/agent_management_service.py} +219 -168
  466. claude_mpm/services/agents/memory/__init__.py +22 -0
  467. claude_mpm/services/agents/memory/agent_memory_manager.py +784 -0
  468. claude_mpm/services/{agent_persistence_service.py → agents/memory/agent_persistence_service.py} +20 -18
  469. claude_mpm/services/agents/memory/content_manager.py +470 -0
  470. claude_mpm/services/agents/memory/memory_categorization_service.py +167 -0
  471. claude_mpm/services/agents/memory/memory_file_service.py +129 -0
  472. claude_mpm/services/agents/memory/memory_format_service.py +201 -0
  473. claude_mpm/services/agents/memory/memory_limits_service.py +101 -0
  474. claude_mpm/services/agents/memory/template_generator.py +83 -0
  475. claude_mpm/services/agents/observers.py +547 -0
  476. claude_mpm/services/agents/recommender.py +617 -0
  477. claude_mpm/services/agents/registry/__init__.py +30 -0
  478. claude_mpm/services/agents/registry/deployed_agent_discovery.py +273 -0
  479. claude_mpm/services/{agent_modification_tracker.py → agents/registry/modification_tracker.py} +370 -295
  480. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  481. claude_mpm/services/agents/sources/__init__.py +13 -0
  482. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  483. claude_mpm/services/agents/sources/git_source_sync_service.py +1202 -0
  484. claude_mpm/services/agents/startup_sync.py +259 -0
  485. claude_mpm/services/agents/toolchain_detector.py +478 -0
  486. claude_mpm/services/analysis/__init__.py +35 -0
  487. claude_mpm/services/analysis/clone_detector.py +1030 -0
  488. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  489. claude_mpm/services/analysis/postmortem_service.py +765 -0
  490. claude_mpm/services/async_session_logger.py +665 -0
  491. claude_mpm/services/claude_session_logger.py +321 -0
  492. claude_mpm/services/cli/__init__.py +18 -0
  493. claude_mpm/services/cli/agent_cleanup_service.py +408 -0
  494. claude_mpm/services/cli/agent_dependency_service.py +395 -0
  495. claude_mpm/services/cli/agent_listing_service.py +463 -0
  496. claude_mpm/services/cli/agent_output_formatter.py +605 -0
  497. claude_mpm/services/cli/agent_validation_service.py +590 -0
  498. claude_mpm/services/cli/memory_crud_service.py +622 -0
  499. claude_mpm/services/cli/memory_output_formatter.py +604 -0
  500. claude_mpm/services/cli/resume_service.py +617 -0
  501. claude_mpm/services/cli/session_manager.py +604 -0
  502. claude_mpm/services/cli/session_pause_manager.py +504 -0
  503. claude_mpm/services/cli/session_resume_helper.py +372 -0
  504. claude_mpm/services/cli/startup_checker.py +362 -0
  505. claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
  506. claude_mpm/services/command_deployment_service.py +446 -0
  507. claude_mpm/services/command_handler_service.py +221 -0
  508. claude_mpm/services/communication/__init__.py +22 -0
  509. claude_mpm/services/core/__init__.py +108 -0
  510. claude_mpm/services/core/base.py +269 -0
  511. claude_mpm/services/core/cache_manager.py +309 -0
  512. claude_mpm/services/core/interfaces/__init__.py +273 -0
  513. claude_mpm/services/core/interfaces/agent.py +514 -0
  514. claude_mpm/services/core/interfaces/communication.py +316 -0
  515. claude_mpm/services/core/interfaces/health.py +169 -0
  516. claude_mpm/services/core/interfaces/infrastructure.py +357 -0
  517. claude_mpm/services/core/interfaces/model.py +281 -0
  518. claude_mpm/services/core/interfaces/process.py +372 -0
  519. claude_mpm/services/core/interfaces/project.py +121 -0
  520. claude_mpm/services/core/interfaces/restart.py +307 -0
  521. claude_mpm/services/core/interfaces/service.py +405 -0
  522. claude_mpm/services/core/interfaces/stability.py +260 -0
  523. claude_mpm/services/core/interfaces.py +81 -0
  524. claude_mpm/services/core/memory_manager.py +682 -0
  525. claude_mpm/services/core/models/__init__.py +70 -0
  526. claude_mpm/services/core/models/agent_config.py +384 -0
  527. claude_mpm/services/core/models/health.py +162 -0
  528. claude_mpm/services/core/models/process.py +239 -0
  529. claude_mpm/services/core/models/restart.py +302 -0
  530. claude_mpm/services/core/models/stability.py +264 -0
  531. claude_mpm/services/core/models/toolchain.py +306 -0
  532. claude_mpm/services/core/path_resolver.py +517 -0
  533. claude_mpm/services/core/service_container.py +520 -0
  534. claude_mpm/services/core/service_interfaces.py +436 -0
  535. claude_mpm/services/diagnostics/__init__.py +18 -0
  536. claude_mpm/services/diagnostics/checks/__init__.py +38 -0
  537. claude_mpm/services/diagnostics/checks/agent_check.py +370 -0
  538. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  539. claude_mpm/services/diagnostics/checks/base_check.py +60 -0
  540. claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
  541. claude_mpm/services/diagnostics/checks/common_issues_check.py +363 -0
  542. claude_mpm/services/diagnostics/checks/configuration_check.py +306 -0
  543. claude_mpm/services/diagnostics/checks/filesystem_check.py +233 -0
  544. claude_mpm/services/diagnostics/checks/installation_check.py +520 -0
  545. claude_mpm/services/diagnostics/checks/instructions_check.py +415 -0
  546. claude_mpm/services/diagnostics/checks/mcp_check.py +330 -0
  547. claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
  548. claude_mpm/services/diagnostics/checks/monitor_check.py +281 -0
  549. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  550. claude_mpm/services/diagnostics/checks/startup_log_check.py +319 -0
  551. claude_mpm/services/diagnostics/diagnostic_runner.py +286 -0
  552. claude_mpm/services/diagnostics/doctor_reporter.py +578 -0
  553. claude_mpm/services/diagnostics/models.py +138 -0
  554. claude_mpm/services/event_aggregator.py +582 -0
  555. claude_mpm/services/event_bus/__init__.py +18 -0
  556. claude_mpm/services/event_bus/config.py +186 -0
  557. claude_mpm/services/event_bus/direct_relay.py +312 -0
  558. claude_mpm/services/event_bus/event_bus.py +396 -0
  559. claude_mpm/services/event_bus/relay.py +326 -0
  560. claude_mpm/services/events/__init__.py +44 -0
  561. claude_mpm/services/events/consumers/__init__.py +18 -0
  562. claude_mpm/services/events/consumers/dead_letter.py +306 -0
  563. claude_mpm/services/events/consumers/logging.py +184 -0
  564. claude_mpm/services/events/consumers/metrics.py +241 -0
  565. claude_mpm/services/events/consumers/socketio.py +377 -0
  566. claude_mpm/services/events/core.py +480 -0
  567. claude_mpm/services/events/interfaces.py +214 -0
  568. claude_mpm/services/events/producers/__init__.py +14 -0
  569. claude_mpm/services/events/producers/hook.py +269 -0
  570. claude_mpm/services/events/producers/system.py +329 -0
  571. claude_mpm/services/exceptions.py +433 -353
  572. claude_mpm/services/framework_claude_md_generator/__init__.py +81 -80
  573. claude_mpm/services/framework_claude_md_generator/content_assembler.py +74 -67
  574. claude_mpm/services/framework_claude_md_generator/content_validator.py +66 -62
  575. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +82 -60
  576. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +36 -37
  577. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +41 -40
  578. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +15 -15
  579. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +5 -4
  580. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  581. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  582. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  583. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  584. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +5 -4
  585. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  586. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  587. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +26 -30
  588. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +6 -5
  589. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  590. claude_mpm/services/framework_claude_md_generator/version_manager.py +31 -30
  591. claude_mpm/services/git/__init__.py +21 -0
  592. claude_mpm/services/git/git_operations_service.py +579 -0
  593. claude_mpm/services/github/__init__.py +21 -0
  594. claude_mpm/services/github/github_cli_service.py +397 -0
  595. claude_mpm/services/hook_installer_service.py +506 -0
  596. claude_mpm/services/hook_service.py +159 -111
  597. claude_mpm/services/infrastructure/__init__.py +52 -0
  598. claude_mpm/services/infrastructure/context_preservation.py +569 -0
  599. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  600. claude_mpm/services/infrastructure/logging.py +209 -0
  601. claude_mpm/services/infrastructure/monitoring/__init__.py +39 -0
  602. claude_mpm/services/infrastructure/monitoring/aggregator.py +432 -0
  603. claude_mpm/services/infrastructure/monitoring/base.py +122 -0
  604. claude_mpm/services/infrastructure/monitoring/legacy.py +203 -0
  605. claude_mpm/services/infrastructure/monitoring/network.py +219 -0
  606. claude_mpm/services/infrastructure/monitoring/process.py +343 -0
  607. claude_mpm/services/infrastructure/monitoring/resources.py +244 -0
  608. claude_mpm/services/infrastructure/monitoring/service.py +368 -0
  609. claude_mpm/services/infrastructure/monitoring.py +71 -0
  610. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  611. claude_mpm/services/instructions/__init__.py +9 -0
  612. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  613. claude_mpm/services/local_ops/__init__.py +155 -0
  614. claude_mpm/services/local_ops/crash_detector.py +257 -0
  615. claude_mpm/services/local_ops/health_checks/__init__.py +26 -0
  616. claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
  617. claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
  618. claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
  619. claude_mpm/services/local_ops/health_manager.py +427 -0
  620. claude_mpm/services/local_ops/log_monitor.py +396 -0
  621. claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
  622. claude_mpm/services/local_ops/process_manager.py +595 -0
  623. claude_mpm/services/local_ops/resource_monitor.py +331 -0
  624. claude_mpm/services/local_ops/restart_manager.py +401 -0
  625. claude_mpm/services/local_ops/restart_policy.py +387 -0
  626. claude_mpm/services/local_ops/state_manager.py +372 -0
  627. claude_mpm/services/local_ops/unified_manager.py +600 -0
  628. claude_mpm/services/mcp_config_manager.py +1542 -0
  629. claude_mpm/services/mcp_service_verifier.py +732 -0
  630. claude_mpm/services/memory/__init__.py +19 -0
  631. claude_mpm/services/{memory_builder.py → memory/builder.py} +465 -373
  632. claude_mpm/services/memory/cache/__init__.py +14 -0
  633. claude_mpm/services/{shared_prompt_cache.py → memory/cache/shared_prompt_cache.py} +237 -200
  634. claude_mpm/services/memory/cache/simple_cache.py +331 -0
  635. claude_mpm/services/memory/failure_tracker.py +578 -0
  636. claude_mpm/services/memory/indexed_memory.py +648 -0
  637. claude_mpm/services/{memory_optimizer.py → memory/optimizer.py} +272 -243
  638. claude_mpm/services/memory/router.py +951 -0
  639. claude_mpm/services/memory_hook_service.py +470 -0
  640. claude_mpm/services/model/__init__.py +147 -0
  641. claude_mpm/services/model/base_provider.py +365 -0
  642. claude_mpm/services/model/claude_provider.py +412 -0
  643. claude_mpm/services/model/model_router.py +452 -0
  644. claude_mpm/services/model/ollama_provider.py +415 -0
  645. claude_mpm/services/monitor/__init__.py +20 -0
  646. claude_mpm/services/monitor/daemon.py +698 -0
  647. claude_mpm/services/monitor/daemon_manager.py +1076 -0
  648. claude_mpm/services/monitor/event_emitter.py +350 -0
  649. claude_mpm/services/monitor/handlers/__init__.py +21 -0
  650. claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
  651. claude_mpm/services/monitor/handlers/dashboard.py +299 -0
  652. claude_mpm/services/monitor/handlers/file.py +264 -0
  653. claude_mpm/services/monitor/handlers/hooks.py +512 -0
  654. claude_mpm/services/monitor/management/__init__.py +18 -0
  655. claude_mpm/services/monitor/management/health.py +124 -0
  656. claude_mpm/services/monitor/management/lifecycle.py +730 -0
  657. claude_mpm/services/monitor/server.py +1493 -0
  658. claude_mpm/services/monitor_build_service.py +349 -0
  659. claude_mpm/services/native_agent_converter.py +356 -0
  660. claude_mpm/services/orphan_detection.py +786 -0
  661. claude_mpm/services/pm_skills_deployer.py +707 -0
  662. claude_mpm/services/port_manager.py +597 -0
  663. claude_mpm/services/pr/__init__.py +14 -0
  664. claude_mpm/services/pr/pr_template_service.py +329 -0
  665. claude_mpm/services/profile_manager.py +337 -0
  666. claude_mpm/services/project/__init__.py +44 -0
  667. claude_mpm/services/{project_analyzer.py → project/analyzer.py} +541 -291
  668. claude_mpm/services/project/analyzer_v2.py +566 -0
  669. claude_mpm/services/project/architecture_analyzer.py +461 -0
  670. claude_mpm/services/project/archive_manager.py +1045 -0
  671. claude_mpm/services/project/dependency_analyzer.py +462 -0
  672. claude_mpm/services/project/detection_strategies.py +719 -0
  673. claude_mpm/services/project/documentation_manager.py +554 -0
  674. claude_mpm/services/project/enhanced_analyzer.py +572 -0
  675. claude_mpm/services/project/language_analyzer.py +265 -0
  676. claude_mpm/services/project/metrics_collector.py +407 -0
  677. claude_mpm/services/project/project_organizer.py +1009 -0
  678. claude_mpm/services/project/registry.py +636 -0
  679. claude_mpm/services/project/toolchain_analyzer.py +583 -0
  680. claude_mpm/services/project_port_allocator.py +596 -0
  681. claude_mpm/services/recovery_manager.py +293 -240
  682. claude_mpm/services/response_tracker.py +267 -0
  683. claude_mpm/services/runner_configuration_service.py +605 -0
  684. claude_mpm/services/self_upgrade_service.py +608 -0
  685. claude_mpm/services/session_management_service.py +314 -0
  686. claude_mpm/services/session_manager.py +380 -0
  687. claude_mpm/services/shared/__init__.py +21 -0
  688. claude_mpm/services/shared/async_service_base.py +216 -0
  689. claude_mpm/services/shared/config_service_base.py +301 -0
  690. claude_mpm/services/shared/lifecycle_service_base.py +308 -0
  691. claude_mpm/services/shared/manager_base.py +315 -0
  692. claude_mpm/services/shared/service_factory.py +309 -0
  693. claude_mpm/services/skills/__init__.py +21 -0
  694. claude_mpm/services/skills/git_skill_source_manager.py +1324 -0
  695. claude_mpm/services/skills/selective_skill_deployer.py +744 -0
  696. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  697. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  698. claude_mpm/services/skills_config.py +547 -0
  699. claude_mpm/services/skills_deployer.py +1168 -0
  700. claude_mpm/services/socketio/__init__.py +25 -0
  701. claude_mpm/services/socketio/client_proxy.py +229 -0
  702. claude_mpm/services/socketio/dashboard_server.py +362 -0
  703. claude_mpm/services/socketio/event_normalizer.py +798 -0
  704. claude_mpm/services/socketio/handlers/__init__.py +30 -0
  705. claude_mpm/services/socketio/handlers/base.py +136 -0
  706. claude_mpm/services/socketio/handlers/code_analysis.py +682 -0
  707. claude_mpm/services/socketio/handlers/connection.py +643 -0
  708. claude_mpm/services/socketio/handlers/connection_handler.py +333 -0
  709. claude_mpm/services/socketio/handlers/file.py +263 -0
  710. claude_mpm/services/socketio/handlers/git.py +962 -0
  711. claude_mpm/services/socketio/handlers/hook.py +211 -0
  712. claude_mpm/services/socketio/handlers/memory.py +26 -0
  713. claude_mpm/services/socketio/handlers/project.py +24 -0
  714. claude_mpm/services/socketio/handlers/registry.py +214 -0
  715. claude_mpm/services/socketio/migration_utils.py +343 -0
  716. claude_mpm/services/socketio/monitor_client.py +364 -0
  717. claude_mpm/services/socketio/server/__init__.py +18 -0
  718. claude_mpm/services/socketio/server/broadcaster.py +569 -0
  719. claude_mpm/services/socketio/server/connection_manager.py +579 -0
  720. claude_mpm/services/socketio/server/core.py +1079 -0
  721. claude_mpm/services/socketio/server/eventbus_integration.py +245 -0
  722. claude_mpm/services/socketio/server/main.py +501 -0
  723. claude_mpm/services/socketio_client_manager.py +173 -143
  724. claude_mpm/services/socketio_server.py +38 -1657
  725. claude_mpm/services/subprocess_launcher_service.py +322 -0
  726. claude_mpm/services/system_instructions_service.py +270 -0
  727. claude_mpm/services/ticket_manager.py +25 -209
  728. claude_mpm/services/ticket_services/__init__.py +26 -0
  729. claude_mpm/services/ticket_services/crud_service.py +328 -0
  730. claude_mpm/services/ticket_services/formatter_service.py +290 -0
  731. claude_mpm/services/ticket_services/search_service.py +324 -0
  732. claude_mpm/services/ticket_services/validation_service.py +303 -0
  733. claude_mpm/services/ticket_services/workflow_service.py +244 -0
  734. claude_mpm/services/unified/__init__.py +65 -0
  735. claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
  736. claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
  737. claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
  738. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +900 -0
  739. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -0
  740. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
  741. claude_mpm/services/unified/config_strategies/__init__.py +175 -0
  742. claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
  743. claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
  744. claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
  745. claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
  746. claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
  747. claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
  748. claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
  749. claude_mpm/services/unified/deployment_strategies/base.py +553 -0
  750. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
  751. claude_mpm/services/unified/deployment_strategies/local.py +607 -0
  752. claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
  753. claude_mpm/services/unified/deployment_strategies/vercel.py +471 -0
  754. claude_mpm/services/unified/interfaces.py +475 -0
  755. claude_mpm/services/unified/migration.py +509 -0
  756. claude_mpm/services/unified/strategies.py +534 -0
  757. claude_mpm/services/unified/unified_analyzer.py +542 -0
  758. claude_mpm/services/unified/unified_config.py +691 -0
  759. claude_mpm/services/unified/unified_deployment.py +466 -0
  760. claude_mpm/services/utility_service.py +280 -0
  761. claude_mpm/services/version_control/__init__.py +34 -37
  762. claude_mpm/services/version_control/branch_strategy.py +26 -17
  763. claude_mpm/services/version_control/conflict_resolution.py +52 -36
  764. claude_mpm/services/version_control/git_operations.py +183 -49
  765. claude_mpm/services/version_control/semantic_versioning.py +172 -61
  766. claude_mpm/services/version_control/version_parser.py +546 -0
  767. claude_mpm/services/version_service.py +379 -0
  768. claude_mpm/services/visualization/__init__.py +15 -0
  769. claude_mpm/services/visualization/mermaid_generator.py +937 -0
  770. claude_mpm/skills/__init__.py +42 -0
  771. claude_mpm/skills/agent_skills_injector.py +324 -0
  772. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  773. claude_mpm/skills/bundled/__init__.py +6 -0
  774. claude_mpm/skills/bundled/api-documentation.md +393 -0
  775. claude_mpm/skills/bundled/async-testing.md +571 -0
  776. claude_mpm/skills/bundled/code-review.md +143 -0
  777. claude_mpm/skills/bundled/database-migration.md +199 -0
  778. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  779. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  780. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  781. claude_mpm/skills/bundled/git-workflow.md +414 -0
  782. claude_mpm/skills/bundled/imagemagick.md +204 -0
  783. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  784. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  785. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  786. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  787. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  788. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  789. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  790. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  791. claude_mpm/skills/bundled/pdf.md +141 -0
  792. claude_mpm/skills/bundled/performance-profiling.md +573 -0
  793. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  794. claude_mpm/skills/bundled/security-scanning.md +439 -0
  795. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  796. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  797. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  798. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  799. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  800. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  801. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  802. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  803. claude_mpm/skills/bundled/xlsx.md +157 -0
  804. claude_mpm/skills/registry.py +286 -0
  805. claude_mpm/skills/skill_manager.py +405 -0
  806. claude_mpm/skills/skills_registry.py +347 -0
  807. claude_mpm/skills/skills_service.py +739 -0
  808. claude_mpm/storage/__init__.py +9 -0
  809. claude_mpm/storage/state_storage.py +546 -0
  810. claude_mpm/templates/.pre-commit-config.yaml +112 -0
  811. claude_mpm/templates/questions/__init__.py +38 -0
  812. claude_mpm/templates/questions/base.py +193 -0
  813. claude_mpm/templates/questions/pr_strategy.py +311 -0
  814. claude_mpm/templates/questions/project_init.py +385 -0
  815. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  816. claude_mpm/ticket_wrapper.py +2 -2
  817. claude_mpm/tools/__init__.py +10 -0
  818. claude_mpm/tools/__main__.py +208 -0
  819. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  820. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  821. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  822. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  823. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  824. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  825. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  826. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  827. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  828. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  829. claude_mpm/tools/code_tree_builder.py +631 -0
  830. claude_mpm/tools/code_tree_events.py +420 -0
  831. claude_mpm/tools/socketio_debug.py +671 -0
  832. claude_mpm/utils/__init__.py +8 -8
  833. claude_mpm/utils/agent_dependency_loader.py +1090 -0
  834. claude_mpm/utils/agent_filters.py +261 -0
  835. claude_mpm/utils/common.py +544 -0
  836. claude_mpm/utils/config_manager.py +168 -126
  837. claude_mpm/utils/console.py +11 -0
  838. claude_mpm/utils/database_connector.py +298 -0
  839. claude_mpm/utils/dependency_cache.py +373 -0
  840. claude_mpm/utils/dependency_manager.py +60 -59
  841. claude_mpm/utils/dependency_strategies.py +381 -0
  842. claude_mpm/utils/display_helper.py +260 -0
  843. claude_mpm/utils/environment_context.py +313 -0
  844. claude_mpm/utils/error_handler.py +78 -66
  845. claude_mpm/utils/file_utils.py +305 -0
  846. claude_mpm/utils/framework_detection.py +12 -11
  847. claude_mpm/utils/git_analyzer.py +407 -0
  848. claude_mpm/utils/gitignore.py +244 -0
  849. claude_mpm/utils/import_migration_example.py +12 -60
  850. claude_mpm/utils/imports.py +48 -45
  851. claude_mpm/utils/log_cleanup.py +627 -0
  852. claude_mpm/utils/migration.py +372 -0
  853. claude_mpm/utils/path_operations.py +110 -104
  854. claude_mpm/utils/progress.py +387 -0
  855. claude_mpm/utils/robust_installer.py +823 -0
  856. claude_mpm/utils/session_logging.py +121 -0
  857. claude_mpm/utils/structured_questions.py +619 -0
  858. claude_mpm/utils/subprocess_utils.py +343 -0
  859. claude_mpm/validation/__init__.py +1 -1
  860. claude_mpm/validation/agent_validator.py +214 -108
  861. claude_mpm/validation/frontmatter_validator.py +252 -0
  862. claude_mpm-5.4.55.dist-info/METADATA +999 -0
  863. claude_mpm-5.4.55.dist-info/RECORD +868 -0
  864. {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/entry_points.txt +1 -3
  865. claude_mpm-5.4.55.dist-info/licenses/LICENSE +94 -0
  866. claude_mpm-5.4.55.dist-info/licenses/LICENSE-FAQ.md +153 -0
  867. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -88
  868. claude_mpm/agents/INSTRUCTIONS.md +0 -352
  869. claude_mpm/agents/backups/INSTRUCTIONS.md +0 -352
  870. claude_mpm/agents/base_agent_loader.py +0 -529
  871. claude_mpm/agents/schema/agent_schema.json +0 -314
  872. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -36
  873. claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +0 -46
  874. claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json +0 -45
  875. claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json +0 -49
  876. claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json +0 -46
  877. claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json +0 -45
  878. claude_mpm/agents/templates/backup/research_agent_20250726_234551.json +0 -49
  879. claude_mpm/agents/templates/backup/security_agent_20250726_234551.json +0 -46
  880. claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json +0 -46
  881. claude_mpm/agents/templates/data_engineer.json +0 -110
  882. claude_mpm/agents/templates/documentation.json +0 -109
  883. claude_mpm/agents/templates/engineer.json +0 -113
  884. claude_mpm/agents/templates/ops.json +0 -109
  885. claude_mpm/agents/templates/pm.json +0 -25
  886. claude_mpm/agents/templates/qa.json +0 -111
  887. claude_mpm/agents/templates/research.json +0 -65
  888. claude_mpm/agents/templates/security.json +0 -113
  889. claude_mpm/agents/templates/test_integration.json +0 -112
  890. claude_mpm/agents/templates/version_control.json +0 -107
  891. claude_mpm/cli/commands/ui.py +0 -57
  892. claude_mpm/core/simple_runner.py +0 -1046
  893. claude_mpm/dashboard/open_dashboard.py +0 -34
  894. claude_mpm/deployment_paths.py +0 -261
  895. claude_mpm/hooks/builtin/__init__.py +0 -1
  896. claude_mpm/hooks/builtin/logging_hook_example.py +0 -165
  897. claude_mpm/hooks/builtin/memory_hooks_example.py +0 -67
  898. claude_mpm/hooks/builtin/mpm_command_hook.py +0 -125
  899. claude_mpm/hooks/builtin/post_delegation_hook_example.py +0 -124
  900. claude_mpm/hooks/builtin/pre_delegation_hook_example.py +0 -125
  901. claude_mpm/hooks/builtin/submit_hook_example.py +0 -100
  902. claude_mpm/hooks/builtin/ticket_extraction_hook_example.py +0 -237
  903. claude_mpm/hooks/builtin/todo_agent_prefix_hook.py +0 -240
  904. claude_mpm/hooks/builtin/workflow_start_hook.py +0 -181
  905. claude_mpm/orchestration/__init__.py +0 -6
  906. claude_mpm/orchestration/archive/direct_orchestrator.py +0 -195
  907. claude_mpm/orchestration/archive/factory.py +0 -215
  908. claude_mpm/orchestration/archive/hook_enabled_orchestrator.py +0 -188
  909. claude_mpm/orchestration/archive/hook_integration_example.py +0 -178
  910. claude_mpm/orchestration/archive/interactive_subprocess_orchestrator.py +0 -826
  911. claude_mpm/orchestration/archive/orchestrator.py +0 -501
  912. claude_mpm/orchestration/archive/pexpect_orchestrator.py +0 -252
  913. claude_mpm/orchestration/archive/pty_orchestrator.py +0 -270
  914. claude_mpm/orchestration/archive/simple_orchestrator.py +0 -82
  915. claude_mpm/orchestration/archive/subprocess_orchestrator.py +0 -801
  916. claude_mpm/orchestration/archive/system_prompt_orchestrator.py +0 -278
  917. claude_mpm/orchestration/archive/wrapper_orchestrator.py +0 -187
  918. claude_mpm/schemas/workflow_validator.py +0 -411
  919. claude_mpm/services/agent_deployment.py +0 -1534
  920. claude_mpm/services/agent_lifecycle_manager.py +0 -1169
  921. claude_mpm/services/agent_memory_manager.py +0 -1415
  922. claude_mpm/services/agent_registry.py +0 -676
  923. claude_mpm/services/deployed_agent_discovery.py +0 -226
  924. claude_mpm/services/framework_agent_loader.py +0 -337
  925. claude_mpm/services/framework_claude_md_generator.py +0 -621
  926. claude_mpm/services/health_monitor.py +0 -892
  927. claude_mpm/services/memory_router.py +0 -538
  928. claude_mpm/services/parent_directory_manager/__init__.py +0 -577
  929. claude_mpm/services/parent_directory_manager/backup_manager.py +0 -258
  930. claude_mpm/services/parent_directory_manager/config_manager.py +0 -210
  931. claude_mpm/services/parent_directory_manager/deduplication_manager.py +0 -279
  932. claude_mpm/services/parent_directory_manager/framework_protector.py +0 -143
  933. claude_mpm/services/parent_directory_manager/operations.py +0 -186
  934. claude_mpm/services/parent_directory_manager/state_manager.py +0 -624
  935. claude_mpm/services/parent_directory_manager/template_deployer.py +0 -579
  936. claude_mpm/services/parent_directory_manager/validation_manager.py +0 -378
  937. claude_mpm/services/parent_directory_manager/version_control_helper.py +0 -339
  938. claude_mpm/services/parent_directory_manager/version_manager.py +0 -222
  939. claude_mpm/services/standalone_socketio_server.py +0 -1300
  940. claude_mpm/services/ticket_manager_di.py +0 -318
  941. claude_mpm/services/ticketing_service_original.py +0 -508
  942. claude_mpm/ui/__init__.py +0 -1
  943. claude_mpm/ui/rich_terminal_ui.py +0 -295
  944. claude_mpm/ui/terminal_ui.py +0 -328
  945. claude_mpm/utils/paths.py +0 -289
  946. claude_mpm-3.4.10.dist-info/METADATA +0 -183
  947. claude_mpm-3.4.10.dist-info/RECORD +0 -201
  948. claude_mpm-3.4.10.dist-info/licenses/LICENSE +0 -21
  949. {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/WHEEL +0 -0
  950. {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/top_level.txt +0 -0
@@ -1,24 +1,36 @@
1
1
  """
2
2
  Consolidated Agent Registry for Claude MPM.
3
3
 
4
- This module combines functionality from:
5
- - agent_registry.py (current working implementation)
6
- - agent_registry_original.py (legacy convenience functions)
4
+ This module provides the primary interface for agent discovery and management.
5
+ All functionality has been consolidated into the unified agent registry system.
7
6
 
8
- Provides:
7
+ This module provides:
9
8
  - Agent discovery from the framework
10
9
  - Agent listing and selection
11
10
  - Compatibility with both sync and async interfaces
12
11
  - Legacy function names for backwards compatibility
13
12
  """
14
13
 
15
- import os
16
- import sys
17
- from pathlib import Path
18
- from typing import Optional, Dict, Any, List, Set
19
- import importlib.util
20
- from datetime import datetime
14
+ import contextlib
15
+ import warnings
21
16
  from dataclasses import dataclass
17
+ from datetime import datetime, timezone
18
+ from pathlib import Path
19
+ from typing import Any, Dict, List, Optional, Set
20
+
21
+ # Import from the unified agent registry system
22
+ from .unified_agent_registry import (
23
+ AgentMetadata as UnifiedAgentMetadata,
24
+ AgentTier,
25
+ AgentType,
26
+ discover_agents as unified_discover_agents,
27
+ get_agent as unified_get_agent,
28
+ get_agent_registry,
29
+ get_core_agents as unified_get_core_agents,
30
+ get_registry_stats as unified_get_registry_stats,
31
+ get_specialized_agents as unified_get_specialized_agents,
32
+ list_agents as unified_list_agents,
33
+ )
22
34
 
23
35
  try:
24
36
  from ..core.logger import get_logger
@@ -26,9 +38,19 @@ except ImportError:
26
38
  from core.logger import get_logger
27
39
 
28
40
 
41
+ # ============================================================================
42
+ # Compatibility Classes - Delegate to Unified Agent Registry
43
+ # ============================================================================
44
+
45
+
29
46
  @dataclass
30
47
  class AgentMetadata:
31
- """Metadata for an agent."""
48
+ """
49
+ COMPATIBILITY WRAPPER for agent metadata.
50
+
51
+ This class now delegates to the UnifiedAgentRegistry system.
52
+ """
53
+
32
54
  name: str
33
55
  type: str
34
56
  path: str
@@ -36,421 +58,329 @@ class AgentMetadata:
36
58
  last_modified: float = 0.0
37
59
  specializations: List[str] = None
38
60
  description: str = ""
39
-
61
+
40
62
  def __post_init__(self):
41
63
  if self.specializations is None:
42
64
  self.specializations = []
43
65
 
66
+ @classmethod
67
+ def from_unified(cls, unified_metadata: UnifiedAgentMetadata) -> "AgentMetadata":
68
+ """Create compatibility metadata from unified metadata."""
69
+ return cls(
70
+ name=unified_metadata.name,
71
+ type=unified_metadata.agent_type.value,
72
+ path=unified_metadata.path,
73
+ tier=unified_metadata.tier.value,
74
+ last_modified=unified_metadata.last_modified,
75
+ specializations=unified_metadata.specializations,
76
+ description=unified_metadata.description,
77
+ )
78
+
44
79
 
45
80
  class SimpleAgentRegistry:
46
- """Simple agent registry implementation."""
47
-
48
- def __init__(self, framework_path: Path):
81
+ """
82
+ COMPATIBILITY WRAPPER for simple agent registry.
83
+
84
+ This class now delegates to the UnifiedAgentRegistry system.
85
+ """
86
+
87
+ def __init__(self, framework_path: Optional[Path] = None):
88
+ """Initialize with optional framework path (ignored in new implementation)."""
49
89
  self.framework_path = framework_path
90
+ self._unified_registry = get_agent_registry()
50
91
  self.agents = {}
51
92
  self._discover_agents()
52
-
93
+
53
94
  def _discover_agents(self):
54
- """Discover agents from the framework."""
55
- # Check multiple possible locations
56
- agent_locations = [
57
- self.framework_path / "src" / "claude_mpm" / "agents" / "templates",
58
- self.framework_path / "src" / "claude_mpm" / "agents",
59
- self.framework_path / "agents",
60
- ]
61
-
62
- for agents_dir in agent_locations:
63
- if agents_dir.exists():
64
- # Look for both .md and .json files
65
- for pattern in ["*.md", "*.json"]:
66
- for agent_file in agents_dir.glob(pattern):
67
- agent_id = agent_file.stem
68
- self.agents[agent_id] = {
69
- 'name': agent_id,
70
- 'type': agent_id,
71
- 'path': str(agent_file),
72
- 'last_modified': agent_file.stat().st_mtime,
73
- 'tier': self._determine_tier(agent_file),
74
- 'specializations': self._extract_specializations(agent_id),
75
- 'description': self._extract_description(agent_id)
76
- }
77
-
95
+ """Discover agents using the unified registry."""
96
+ unified_agents = self._unified_registry.discover_agents()
97
+
98
+ # Convert to old format for compatibility
99
+ self.agents = {}
100
+ for name, unified_metadata in unified_agents.items():
101
+ self.agents[name] = {
102
+ "name": unified_metadata.name,
103
+ "type": unified_metadata.agent_type.value,
104
+ "path": unified_metadata.path,
105
+ "last_modified": unified_metadata.last_modified,
106
+ "tier": unified_metadata.tier.value,
107
+ "specializations": unified_metadata.specializations,
108
+ "description": unified_metadata.description,
109
+ }
110
+
78
111
  def _determine_tier(self, agent_path: Path) -> str:
79
- """Determine agent tier based on path."""
80
- path_str = str(agent_path)
81
- if 'project' in path_str or '.claude-mpm' in path_str:
82
- return 'project'
83
- elif 'user' in path_str or str(Path.home()) in path_str:
84
- return 'user'
85
- else:
86
- return 'system'
87
-
112
+ """Determine agent tier based on path (compatibility method)."""
113
+ # Delegate to unified registry logic
114
+ if (
115
+ "project" in str(agent_path)
116
+ or ".claude-mpm" in str(agent_path)
117
+ or ".claude/agents" in str(agent_path)
118
+ ):
119
+ return "project"
120
+ if "user" in str(agent_path) or str(Path.home()) in str(agent_path):
121
+ return "user"
122
+ return "system"
123
+
88
124
  def _extract_specializations(self, agent_id: str) -> List[str]:
89
- """Extract specializations based on agent type."""
125
+ """Extract specializations based on agent type (compatibility method)."""
90
126
  specialization_map = {
91
- 'engineer': ['coding', 'architecture', 'implementation'],
92
- 'documentation': ['docs', 'api', 'guides'],
93
- 'qa': ['testing', 'quality', 'validation'],
94
- 'research': ['analysis', 'investigation', 'exploration'],
95
- 'ops': ['deployment', 'monitoring', 'infrastructure'],
96
- 'security': ['security', 'audit', 'compliance'],
97
- 'version_control': ['git', 'versioning', 'releases'],
98
- 'data_engineer': ['data', 'etl', 'analytics']
127
+ "engineer": ["coding", "architecture", "implementation"],
128
+ "documentation": ["docs", "api", "guides"],
129
+ "qa": ["testing", "quality", "validation"],
130
+ "research": ["analysis", "investigation", "exploration"],
131
+ "ops": ["deployment", "monitoring", "infrastructure"],
132
+ "security": ["security", "audit", "compliance"],
133
+ "version_control": ["git", "versioning", "releases"],
134
+ "data_engineer": ["data", "etl", "analytics"],
99
135
  }
100
136
  return specialization_map.get(agent_id, [])
101
-
137
+
102
138
  def _extract_description(self, agent_id: str) -> str:
103
- """Extract description for agent."""
139
+ """Extract description for agent (compatibility method)."""
104
140
  descriptions = {
105
- 'engineer': 'Software engineering and implementation',
106
- 'documentation': 'Documentation creation and maintenance',
107
- 'qa': 'Quality assurance and testing',
108
- 'research': 'Research and investigation',
109
- 'ops': 'Operations and deployment',
110
- 'security': 'Security analysis and compliance',
111
- 'version_control': 'Version control and release management',
112
- 'data_engineer': 'Data engineering and analytics'
141
+ "engineer": "Software engineering and implementation",
142
+ "documentation": "Documentation creation and maintenance",
143
+ "qa": "Quality assurance and testing",
144
+ "research": "Research and investigation",
145
+ "ops": "Operations and deployment",
146
+ "security": "Security analysis and compliance",
147
+ "version_control": "Version control and release management",
148
+ "data_engineer": "Data engineering and analytics",
113
149
  }
114
- return descriptions.get(agent_id, f'{agent_id.title()} agent')
115
-
116
- def listAgents(self, **kwargs) -> Dict[str, Any]:
117
- """List all agents (camelCase for compatibility)."""
150
+ return descriptions.get(agent_id, f"{agent_id.title()} agent")
151
+
152
+ def list_agents(self, **kwargs) -> Dict[str, Any]:
153
+ """List all agents (compatibility method)."""
118
154
  return self.agents
119
-
120
- def list_agents(self, agent_type: Optional[str] = None, tier: Optional[str] = None) -> List[AgentMetadata]:
121
- """List agents with optional filtering."""
122
- results = []
123
- for agent_id, metadata in self.agents.items():
124
- if agent_type and metadata.get('type') != agent_type:
125
- continue
126
- if tier and metadata.get('tier') != tier:
127
- continue
128
-
129
- results.append(AgentMetadata(
130
- name=metadata['name'],
131
- type=metadata['type'],
132
- path=metadata['path'],
133
- tier=metadata.get('tier', 'system'),
134
- last_modified=metadata.get('last_modified', 0),
135
- specializations=metadata.get('specializations', []),
136
- description=metadata.get('description', '')
137
- ))
138
- return results
139
-
155
+
156
+ def listAgents(self, **kwargs) -> Dict[str, Any]:
157
+ """DEPRECATED: Use list_agents() instead. Kept for backward compatibility."""
158
+ warnings.warn(
159
+ "listAgents() is deprecated, use list_agents() instead",
160
+ DeprecationWarning,
161
+ stacklevel=2,
162
+ )
163
+ return self.list_agents(**kwargs)
164
+
165
+ def list_agents_filtered(
166
+ self, agent_type: Optional[str] = None, tier: Optional[str] = None
167
+ ) -> List[AgentMetadata]:
168
+ """List agents with optional filtering (compatibility method)."""
169
+ # Use unified registry for filtering
170
+ unified_tier = None
171
+ unified_agent_type = None
172
+
173
+ if tier:
174
+ unified_tier = AgentTier(tier)
175
+ if agent_type:
176
+ try:
177
+ unified_agent_type = AgentType(agent_type)
178
+ except ValueError:
179
+ # Handle legacy agent types
180
+ unified_agent_type = None
181
+
182
+ unified_agents = self._unified_registry.list_agents(
183
+ tier=unified_tier, agent_type=unified_agent_type
184
+ )
185
+
186
+ return [AgentMetadata.from_unified(agent) for agent in unified_agents]
187
+
140
188
  def get_agent(self, agent_name: str) -> Optional[AgentMetadata]:
141
- """Get a specific agent."""
142
- metadata = self.agents.get(agent_name)
143
- if metadata:
144
- return AgentMetadata(
145
- name=metadata['name'],
146
- type=metadata['type'],
147
- path=metadata['path'],
148
- tier=metadata.get('tier', 'system'),
149
- last_modified=metadata.get('last_modified', 0),
150
- specializations=metadata.get('specializations', []),
151
- description=metadata.get('description', '')
152
- )
189
+ """Get a specific agent (compatibility method)."""
190
+ unified_agent = self._unified_registry.get_agent(agent_name)
191
+ if unified_agent:
192
+ return AgentMetadata.from_unified(unified_agent)
153
193
  return None
154
-
194
+
155
195
  def discover_agents(self, force_refresh: bool = False) -> Dict[str, AgentMetadata]:
156
- """Discover agents (optionally refresh)."""
157
- if force_refresh:
158
- self.agents.clear()
159
- self._discover_agents()
160
-
196
+ """Discover agents (compatibility method)."""
197
+ unified_agents = self._unified_registry.discover_agents(
198
+ force_refresh=force_refresh
199
+ )
200
+
201
+ # Update internal agents dict for compatibility
202
+ self.agents = {}
203
+ for name, unified_metadata in unified_agents.items():
204
+ self.agents[name] = {
205
+ "name": unified_metadata.name,
206
+ "type": unified_metadata.agent_type.value,
207
+ "path": unified_metadata.path,
208
+ "last_modified": unified_metadata.last_modified,
209
+ "tier": unified_metadata.tier.value,
210
+ "specializations": unified_metadata.specializations,
211
+ "description": unified_metadata.description,
212
+ }
213
+
214
+ # Return compatibility format
161
215
  return {
162
- agent_id: AgentMetadata(
163
- name=metadata['name'],
164
- type=metadata['type'],
165
- path=metadata['path'],
166
- tier=metadata.get('tier', 'system'),
167
- last_modified=metadata.get('last_modified', 0),
168
- specializations=metadata.get('specializations', []),
169
- description=metadata.get('description', '')
170
- )
171
- for agent_id, metadata in self.agents.items()
216
+ name: AgentMetadata.from_unified(unified_metadata)
217
+ for name, unified_metadata in unified_agents.items()
172
218
  }
173
-
219
+
174
220
  @property
175
221
  def core_agent_types(self) -> Set[str]:
176
- """Get core agent types."""
222
+ """Get core agent types (compatibility property)."""
177
223
  return {
178
- 'documentation',
179
- 'engineer',
180
- 'qa',
181
- 'research',
182
- 'ops',
183
- 'security',
184
- 'version_control',
185
- 'data_engineer'
224
+ "documentation",
225
+ "engineer",
226
+ "qa",
227
+ "research",
228
+ "ops",
229
+ "security",
230
+ "version_control",
231
+ "data_engineer",
186
232
  }
187
-
233
+
188
234
  @property
189
235
  def specialized_agent_types(self) -> Set[str]:
190
- """Get specialized agent types beyond core."""
191
- all_types = set(metadata['type'] for metadata in self.agents.values())
236
+ """Get specialized agent types beyond core (compatibility property)."""
237
+ all_types = {metadata["type"] for metadata in self.agents.values()}
192
238
  return all_types - self.core_agent_types
193
239
 
194
240
 
195
241
  class AgentRegistryAdapter:
196
242
  """
197
- Adapter to integrate agent registry functionality.
198
-
199
- This adapter:
200
- 1. Locates the claude-mpm installation
201
- 2. Provides a clean interface for agent operations
202
- 3. Maintains backwards compatibility
243
+ COMPATIBILITY WRAPPER for agent registry adapter.
244
+
245
+ This adapter now delegates to the UnifiedAgentRegistry system.
203
246
  """
204
-
247
+
205
248
  def __init__(self, framework_path: Optional[Path] = None):
206
- """
207
- Initialize the agent registry adapter.
208
-
209
- Args:
210
- framework_path: Path to claude-mpm (auto-detected if None)
211
- """
249
+ """Initialize the agent registry adapter (framework_path ignored in new implementation)."""
212
250
  self.logger = get_logger("agent_registry")
213
- self.framework_path = framework_path or self._find_framework()
214
- self.registry = None
215
- self._initialize_registry()
216
-
251
+ self.framework_path = framework_path # Kept for compatibility
252
+ self._unified_registry = get_agent_registry()
253
+ self.registry = SimpleAgentRegistry(framework_path)
254
+
217
255
  def _find_framework(self) -> Optional[Path]:
218
- """Find claude-mpm installation.
219
-
220
- Search order:
221
- 1. CLAUDE_MPM_PATH environment variable
222
- 2. Current working directory (if it's claude-mpm)
223
- 3. Walk up from current file location
224
- 4. Common development locations
225
- """
226
- # Check environment variable first
227
- env_path = os.environ.get("CLAUDE_MPM_PATH")
228
- if env_path:
229
- candidate = Path(env_path)
230
- if self._is_valid_framework_path(candidate):
231
- self.logger.info(f"Using claude-mpm from CLAUDE_MPM_PATH: {candidate}")
232
- return candidate
233
- else:
234
- self.logger.warning(f"CLAUDE_MPM_PATH is set but invalid: {env_path}")
235
-
236
- # Check current working directory
237
- cwd = Path.cwd()
238
- if self._is_valid_framework_path(cwd):
239
- return cwd
240
-
241
- # Check if we're running from within the installed package
242
- current_file = Path(__file__).resolve()
243
- for parent in current_file.parents:
244
- if self._is_valid_framework_path(parent):
245
- return parent
246
- # Stop at site-packages or similar
247
- if parent.name in ("site-packages", "dist-packages", "lib"):
248
- break
249
-
250
- # Check common development locations
251
- candidates = [
252
- Path.home() / "Projects" / "claude-mpm",
253
- Path.home() / "claude-mpm",
254
- ]
255
-
256
- for candidate in candidates:
257
- if self._is_valid_framework_path(candidate):
258
- self.logger.info(f"Found claude-mpm at: {candidate}")
259
- return candidate
260
-
261
- return None
262
-
256
+ """Find claude-mpm installation (compatibility method)."""
257
+ # Delegate to unified path manager
258
+ from .unified_paths import get_path_manager
259
+
260
+ return get_path_manager().framework_root
261
+
263
262
  def _is_valid_framework_path(self, path: Path) -> bool:
264
- """Check if a path is a valid claude-mpm installation."""
265
- return (
266
- path.exists() and
267
- (path / "src" / "claude_mpm").exists()
268
- )
269
-
263
+ """Check if a path is a valid claude-mpm installation (compatibility method)."""
264
+ return path.exists() and (path / "src" / "claude_mpm").exists()
265
+
270
266
  def _initialize_registry(self):
271
- """Initialize the agent registry."""
272
- if not self.framework_path:
273
- self.logger.warning("No framework path, registry unavailable")
274
- return
275
-
276
- try:
277
- self.registry = SimpleAgentRegistry(self.framework_path)
278
- self.logger.info("Agent registry initialized successfully")
279
-
280
- except Exception as e:
281
- self.logger.error(f"Failed to initialize registry: {e}")
282
-
267
+ """Initialize the agent registry (compatibility method)."""
268
+ # Registry is already initialized in __init__
269
+
283
270
  def list_agents(self, **kwargs) -> Dict[str, Any]:
284
- """
285
- List available agents.
286
-
287
- Args:
288
- **kwargs: Arguments to pass to registry
289
-
290
- Returns:
291
- Dictionary of agents with metadata
292
- """
293
- if not self.registry:
294
- return {}
295
-
271
+ """List available agents (compatibility method)."""
296
272
  try:
297
- return self.registry.listAgents(**kwargs)
273
+ return self.registry.list_agents(**kwargs)
298
274
  except Exception as e:
299
275
  self.logger.error(f"Error listing agents: {e}")
300
276
  return {}
301
-
277
+
302
278
  def get_agent_definition(self, agent_name: str) -> Optional[str]:
303
- """
304
- Get agent definition by name.
305
-
306
- Args:
307
- agent_name: Name of the agent
308
-
309
- Returns:
310
- Agent definition content or None
311
- """
312
- if not self.registry:
313
- return None
314
-
279
+ """Get agent definition by name (compatibility method)."""
315
280
  try:
316
- # Try to load agent definition
317
- agents = self.registry.listAgents()
318
- for agent_id, metadata in agents.items():
319
- if agent_name in agent_id or agent_name == metadata.get('type'):
320
- # Load the agent file
321
- agent_path = Path(metadata['path'])
322
- if agent_path.exists():
323
- return agent_path.read_text()
324
-
281
+ unified_agent = self._unified_registry.get_agent(agent_name)
282
+ if unified_agent:
283
+ agent_path = Path(unified_agent.path)
284
+ if agent_path.exists():
285
+ return agent_path.read_text()
325
286
  return None
326
-
327
287
  except Exception as e:
328
288
  self.logger.error(f"Error getting agent definition: {e}")
329
289
  return None
330
-
331
- def select_agent_for_task(self, task_description: str, required_specializations: Optional[List[str]] = None) -> Optional[Dict[str, Any]]:
332
- """
333
- Select optimal agent for a task.
334
-
335
- Args:
336
- task_description: Description of the task
337
- required_specializations: Required agent specializations
338
-
339
- Returns:
340
- Agent metadata or None
341
- """
342
- if not self.registry:
343
- return None
344
-
290
+
291
+ def select_agent_for_task(
292
+ self,
293
+ task_description: str,
294
+ required_specializations: Optional[List[str]] = None,
295
+ ) -> Optional[Dict[str, Any]]:
296
+ """Select optimal agent for a task (compatibility method)."""
345
297
  try:
346
- # Get agents with required specializations
347
- agents = self.registry.listAgents()
348
-
298
+ # Get all agents from unified registry
299
+ unified_agents = self._unified_registry.list_agents()
300
+
349
301
  if required_specializations:
350
302
  # Filter by specializations
351
- filtered = {}
352
- for agent_id, metadata in agents.items():
353
- agent_specs = set(metadata.get('specializations', []))
303
+ filtered = []
304
+ for agent in unified_agents:
305
+ agent_specs = set(agent.specializations)
354
306
  if any(spec in agent_specs for spec in required_specializations):
355
- filtered[agent_id] = metadata
356
- agents = filtered
357
-
358
- if not agents:
307
+ filtered.append(agent)
308
+ unified_agents = filtered
309
+
310
+ if not unified_agents:
359
311
  return None
360
-
361
- # For now, return the first matching agent
362
- # In future, could implement more sophisticated selection
363
- agent_id = next(iter(agents))
312
+
313
+ # Return the first matching agent in compatibility format
314
+ agent = unified_agents[0]
364
315
  return {
365
- 'id': agent_id,
366
- 'metadata': agents[agent_id]
316
+ "id": agent.name,
317
+ "metadata": {
318
+ "name": agent.name,
319
+ "type": agent.agent_type.value,
320
+ "path": agent.path,
321
+ "tier": agent.tier.value,
322
+ "specializations": agent.specializations,
323
+ "description": agent.description,
324
+ },
367
325
  }
368
-
326
+
369
327
  except Exception as e:
370
328
  self.logger.error(f"Error selecting agent: {e}")
371
329
  return None
372
-
330
+
373
331
  def get_agent_hierarchy(self) -> Dict[str, List[str]]:
374
- """
375
- Get agent hierarchy (project → user → system).
376
-
377
- Returns:
378
- Dictionary with hierarchy levels and agent names
379
- """
380
- if not self.registry:
381
- return {
382
- 'project': [],
383
- 'user': [],
384
- 'system': []
385
- }
386
-
332
+ """Get agent hierarchy (compatibility method)."""
387
333
  try:
388
- # Get all agents
389
- all_agents = self.registry.listAgents()
390
-
391
- hierarchy = {
392
- 'project': [],
393
- 'user': [],
394
- 'system': []
395
- }
396
-
397
- # Categorize by tier
398
- for agent_id, metadata in all_agents.items():
399
- tier = metadata.get('tier', 'system')
400
- hierarchy[tier].append(agent_id)
401
-
334
+ hierarchy = {"project": [], "user": [], "system": []}
335
+
336
+ # Get agents by tier from unified registry
337
+ for tier in [AgentTier.PROJECT, AgentTier.USER, AgentTier.SYSTEM]:
338
+ agents = self._unified_registry.list_agents(tier=tier)
339
+ hierarchy[tier.value] = [agent.name for agent in agents]
340
+
402
341
  return hierarchy
403
-
342
+
404
343
  except Exception as e:
405
344
  self.logger.error(f"Error getting hierarchy: {e}")
406
- return {'project': [], 'user': [], 'system': []}
407
-
345
+ return {"project": [], "user": [], "system": []}
346
+
408
347
  def get_core_agents(self) -> List[str]:
409
- """
410
- Get list of core system agents.
411
-
412
- Returns:
413
- List of core agent names
414
- """
415
- return [
416
- 'documentation',
417
- 'engineer',
418
- 'qa',
419
- 'research',
420
- 'ops',
421
- 'security',
422
- 'version_control',
423
- 'data_engineer'
424
- ]
425
-
426
- def format_agent_for_task_tool(self, agent_name: str, task: str, context: str = "") -> str:
427
- """
428
- Format agent delegation for Task Tool.
429
-
430
- Args:
431
- agent_name: Name of the agent
432
- task: Task description
433
- context: Additional context
434
-
435
- Returns:
436
- Formatted Task Tool prompt
437
- """
348
+ """Get list of core system agents (compatibility method)."""
349
+ try:
350
+ core_agents = self._unified_registry.get_core_agents()
351
+ return [agent.name for agent in core_agents]
352
+ except Exception as e:
353
+ self.logger.error(f"Error getting core agents: {e}")
354
+ return [
355
+ "documentation",
356
+ "engineer",
357
+ "qa",
358
+ "research",
359
+ "ops",
360
+ "security",
361
+ "version_control",
362
+ "data_engineer",
363
+ ]
364
+
365
+ def format_agent_for_task_tool(
366
+ self, agent_name: str, task: str, context: str = ""
367
+ ) -> str:
368
+ """Format agent delegation for Task Tool (compatibility method)."""
438
369
  # Map agent names to nicknames
439
370
  nicknames = {
440
- 'documentation': 'Documenter',
441
- 'engineer': 'Engineer',
442
- 'qa': 'QA',
443
- 'research': 'Researcher',
444
- 'ops': 'Ops',
445
- 'security': 'Security',
446
- 'version_control': 'Versioner',
447
- 'data_engineer': 'Data Engineer'
371
+ "documentation": "Documenter",
372
+ "engineer": "Engineer",
373
+ "qa": "QA",
374
+ "research": "Researcher",
375
+ "ops": "Ops",
376
+ "security": "Security",
377
+ "version_control": "Versioner",
378
+ "data_engineer": "Data Engineer",
448
379
  }
449
-
380
+
450
381
  nickname = nicknames.get(agent_name, agent_name.title())
451
-
452
- today = datetime.now().strftime("%Y-%m-%d")
453
-
382
+ today = datetime.now(timezone.utc).strftime("%Y-%m-%d")
383
+
454
384
  return f"""**{nickname}**: {task}
455
385
 
456
386
  TEMPORAL CONTEXT: Today is {today}. Apply date awareness to task execution.
@@ -463,165 +393,128 @@ TEMPORAL CONTEXT: Today is {today}. Apply date awareness to task execution.
463
393
  **Expected Results**: Completed task with operational insights"""
464
394
 
465
395
 
396
+ # ============================================================================
397
+ # Compatibility Functions - Delegate to Unified Agent Registry
398
+ # ============================================================================
399
+
466
400
  # Export main class as AgentRegistry for compatibility
467
401
  AgentRegistry = SimpleAgentRegistry
468
402
 
469
- # Convenience functions for backwards compatibility
470
- def create_agent_registry(cache_service: Any = None, framework_path: Optional[Path] = None) -> AgentRegistry:
471
- """
472
- Create a new AgentRegistry instance
473
-
474
- Args:
475
- cache_service: Ignored for compatibility
476
- framework_path: Path to framework (auto-detected if None)
477
-
478
- Returns:
479
- AgentRegistry instance
480
- """
481
- if not framework_path:
482
- adapter = AgentRegistryAdapter()
483
- framework_path = adapter.framework_path
484
-
485
- if framework_path:
486
- return AgentRegistry(framework_path)
487
- else:
488
- raise ValueError("Could not find claude-mpm framework path")
403
+
404
+ def create_agent_registry(
405
+ cache_service: Any = None, framework_path: Optional[Path] = None
406
+ ) -> AgentRegistry:
407
+ """Create a new AgentRegistry instance (compatibility function)."""
408
+ # Ignore parameters and use unified registry
409
+ return AgentRegistry(framework_path)
410
+
489
411
 
490
412
  def discover_agents(force_refresh: bool = False) -> Dict[str, AgentMetadata]:
491
- """
492
- Convenience function for synchronous agent discovery
493
-
494
- Args:
495
- force_refresh: Force cache refresh
496
-
497
- Returns:
498
- Dictionary of discovered agents
499
- """
500
- adapter = AgentRegistryAdapter()
501
- if adapter.registry:
502
- return adapter.registry.discover_agents(force_refresh=force_refresh)
503
- return {}
413
+ """Convenience function for synchronous agent discovery (compatibility function)."""
414
+ return unified_discover_agents()
415
+
504
416
 
505
417
  def get_core_agent_types() -> Set[str]:
506
- """
507
- Get the set of core agent types
508
-
509
- Returns:
510
- Set of core agent type names
511
- """
512
- adapter = AgentRegistryAdapter()
513
- if adapter.registry:
514
- return adapter.registry.core_agent_types
515
- return set()
418
+ """Get the set of core agent types (compatibility function)."""
419
+ core_agents = unified_get_core_agents()
420
+ return {agent.name for agent in core_agents}
421
+
516
422
 
517
423
  def get_specialized_agent_types() -> Set[str]:
518
- """
519
- Get the set of specialized agent types beyond core 9
520
-
521
- Returns:
522
- Set of specialized agent type names
523
- """
524
- adapter = AgentRegistryAdapter()
525
- if adapter.registry:
526
- return adapter.registry.specialized_agent_types
527
- return set()
424
+ """Get the set of specialized agent types (compatibility function)."""
425
+ specialized_agents = unified_get_specialized_agents()
426
+ return {agent.name for agent in specialized_agents}
427
+
428
+
429
+ def list_agents_all() -> Dict[str, Dict[str, Any]]:
430
+ """Synchronous function for listing all agents (compatibility function)."""
431
+ unified_agents = unified_discover_agents()
432
+ return {
433
+ name: {
434
+ "name": metadata.name,
435
+ "type": metadata.agent_type.value,
436
+ "path": metadata.path,
437
+ "tier": metadata.tier.value,
438
+ "last_modified": metadata.last_modified,
439
+ "specializations": metadata.specializations,
440
+ "description": metadata.description,
441
+ }
442
+ for name, metadata in unified_agents.items()
443
+ }
444
+
528
445
 
529
446
  def listAgents() -> Dict[str, Dict[str, Any]]:
530
- """
531
- Synchronous function for listing all agents (camelCase compatibility)
532
-
533
- Returns:
534
- Dictionary of agent name -> agent metadata
535
- """
536
- adapter = AgentRegistryAdapter()
537
- if adapter.registry:
538
- return adapter.registry.listAgents()
539
- return {}
447
+ """DEPRECATED: Use list_agents_all() instead (compatibility function)."""
448
+ warnings.warn(
449
+ "listAgents() is deprecated, use list_agents_all() instead",
450
+ DeprecationWarning,
451
+ stacklevel=2,
452
+ )
453
+ return list_agents_all()
454
+
455
+
456
+ def list_agents(
457
+ agent_type: Optional[str] = None, tier: Optional[str] = None
458
+ ) -> List[AgentMetadata]:
459
+ """Synchronous function to list agents with optional filtering (compatibility function)."""
460
+ # Convert parameters to unified types
461
+ unified_tier = None
462
+ unified_agent_type = None
463
+
464
+ if tier:
465
+ with contextlib.suppress(ValueError):
466
+ unified_tier = AgentTier(tier)
467
+
468
+ if agent_type:
469
+ with contextlib.suppress(ValueError):
470
+ unified_agent_type = AgentType(agent_type)
471
+
472
+ unified_agents = unified_list_agents(
473
+ tier=unified_tier, agent_type=unified_agent_type
474
+ )
475
+ return [AgentMetadata.from_unified(agent) for agent in unified_agents]
540
476
 
541
- def list_agents(agent_type: Optional[str] = None, tier: Optional[str] = None) -> List[AgentMetadata]:
542
- """
543
- Synchronous function to list agents with optional filtering
544
-
545
- Args:
546
- agent_type: Filter by agent type
547
- tier: Filter by hierarchy tier
548
-
549
- Returns:
550
- List of agent metadata dictionaries
551
- """
552
- adapter = AgentRegistryAdapter()
553
- if adapter.registry:
554
- return adapter.registry.list_agents(agent_type=agent_type, tier=tier)
555
- return []
556
477
 
557
478
  def discover_agents_sync(force_refresh: bool = False) -> Dict[str, AgentMetadata]:
558
- """
559
- Synchronous function for agent discovery
560
-
561
- Args:
562
- force_refresh: Force cache refresh
563
-
564
- Returns:
565
- Dictionary of discovered agents
566
- """
479
+ """Synchronous function for agent discovery (compatibility function)."""
567
480
  return discover_agents(force_refresh)
568
481
 
482
+
569
483
  def get_agent(agent_name: str) -> Optional[Dict[str, Any]]:
570
- """
571
- Synchronous function to get a specific agent
572
-
573
- Args:
574
- agent_name: Name of agent to retrieve
575
-
576
- Returns:
577
- Agent metadata or None
578
- """
579
- adapter = AgentRegistryAdapter()
580
- if adapter.registry:
581
- agent = adapter.registry.get_agent(agent_name)
582
- if agent:
583
- return {
584
- 'name': agent.name,
585
- 'type': agent.type,
586
- 'path': agent.path,
587
- 'tier': agent.tier,
588
- 'last_modified': agent.last_modified,
589
- 'specializations': agent.specializations,
590
- 'description': agent.description
591
- }
484
+ """Synchronous function to get a specific agent (compatibility function)."""
485
+ unified_agent = unified_get_agent(agent_name)
486
+ if unified_agent:
487
+ return {
488
+ "name": unified_agent.name,
489
+ "type": unified_agent.agent_type.value,
490
+ "path": unified_agent.path,
491
+ "tier": unified_agent.tier.value,
492
+ "last_modified": unified_agent.last_modified,
493
+ "specializations": unified_agent.specializations,
494
+ "description": unified_agent.description,
495
+ }
592
496
  return None
593
497
 
498
+
594
499
  def get_registry_stats() -> Dict[str, Any]:
595
- """
596
- Synchronous function to get registry statistics
597
-
598
- Returns:
599
- Dictionary of registry statistics
600
- """
601
- adapter = AgentRegistryAdapter()
602
- if adapter.registry:
603
- agents = adapter.registry.list_agents()
604
- return {
605
- 'total_agents': len(agents),
606
- 'agent_types': len(set(a.type for a in agents)),
607
- 'tiers': list(set(a.tier for a in agents))
608
- }
609
- return {'total_agents': 0, 'agent_types': 0, 'tiers': []}
500
+ """Synchronous function to get registry statistics (compatibility function)."""
501
+ return unified_get_registry_stats()
610
502
 
611
503
 
612
504
  # Export all public symbols
613
505
  __all__ = [
614
- 'AgentRegistry',
615
- 'AgentRegistryAdapter',
616
- 'AgentMetadata',
617
- 'SimpleAgentRegistry',
618
- 'create_agent_registry',
619
- 'discover_agents',
620
- 'get_core_agent_types',
621
- 'get_specialized_agent_types',
622
- 'listAgents',
623
- 'list_agents',
624
- 'discover_agents_sync',
625
- 'get_agent',
626
- 'get_registry_stats'
627
- ]
506
+ "AgentMetadata",
507
+ "AgentRegistry",
508
+ "AgentRegistryAdapter",
509
+ "SimpleAgentRegistry",
510
+ "create_agent_registry",
511
+ "discover_agents",
512
+ "discover_agents_sync",
513
+ "get_agent",
514
+ "get_core_agent_types",
515
+ "get_registry_stats",
516
+ "get_specialized_agent_types",
517
+ "listAgents", # Deprecated
518
+ "list_agents",
519
+ "list_agents_all",
520
+ ]