claude-mpm 3.9.11__py3-none-any.whl → 4.0.3__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 (419) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +2 -2
  3. claude_mpm/__main__.py +3 -2
  4. claude_mpm/agents/__init__.py +85 -79
  5. claude_mpm/agents/agent_loader.py +464 -1003
  6. claude_mpm/agents/agent_loader_integration.py +45 -45
  7. claude_mpm/agents/agents_metadata.py +29 -30
  8. claude_mpm/agents/async_agent_loader.py +156 -138
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/base_agent_loader.py +179 -151
  11. claude_mpm/agents/frontmatter_validator.py +229 -130
  12. claude_mpm/agents/schema/agent_schema.json +1 -1
  13. claude_mpm/agents/system_agent_config.py +213 -147
  14. claude_mpm/agents/templates/__init__.py +13 -13
  15. claude_mpm/agents/templates/code_analyzer.json +2 -2
  16. claude_mpm/agents/templates/data_engineer.json +1 -1
  17. claude_mpm/agents/templates/documentation.json +23 -11
  18. claude_mpm/agents/templates/engineer.json +22 -6
  19. claude_mpm/agents/templates/memory_manager.json +1 -1
  20. claude_mpm/agents/templates/ops.json +2 -2
  21. claude_mpm/agents/templates/project_organizer.json +1 -1
  22. claude_mpm/agents/templates/qa.json +1 -1
  23. claude_mpm/agents/templates/refactoring_engineer.json +222 -0
  24. claude_mpm/agents/templates/research.json +20 -14
  25. claude_mpm/agents/templates/security.json +1 -1
  26. claude_mpm/agents/templates/ticketing.json +1 -1
  27. claude_mpm/agents/templates/version_control.json +1 -1
  28. claude_mpm/agents/templates/web_qa.json +3 -1
  29. claude_mpm/agents/templates/web_ui.json +2 -2
  30. claude_mpm/cli/__init__.py +79 -51
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +20 -20
  33. claude_mpm/cli/commands/agents.py +279 -247
  34. claude_mpm/cli/commands/aggregate.py +138 -157
  35. claude_mpm/cli/commands/cleanup.py +147 -147
  36. claude_mpm/cli/commands/config.py +93 -76
  37. claude_mpm/cli/commands/info.py +17 -16
  38. claude_mpm/cli/commands/mcp.py +140 -905
  39. claude_mpm/cli/commands/mcp_command_router.py +139 -0
  40. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  41. claude_mpm/cli/commands/mcp_install_commands.py +20 -0
  42. claude_mpm/cli/commands/mcp_server_commands.py +175 -0
  43. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  44. claude_mpm/cli/commands/memory.py +239 -203
  45. claude_mpm/cli/commands/monitor.py +203 -81
  46. claude_mpm/cli/commands/run.py +380 -429
  47. claude_mpm/cli/commands/run_config_checker.py +160 -0
  48. claude_mpm/cli/commands/socketio_monitor.py +235 -0
  49. claude_mpm/cli/commands/tickets.py +305 -197
  50. claude_mpm/cli/parser.py +24 -1156
  51. claude_mpm/cli/parsers/__init__.py +29 -0
  52. claude_mpm/cli/parsers/agents_parser.py +136 -0
  53. claude_mpm/cli/parsers/base_parser.py +331 -0
  54. claude_mpm/cli/parsers/config_parser.py +85 -0
  55. claude_mpm/cli/parsers/mcp_parser.py +152 -0
  56. claude_mpm/cli/parsers/memory_parser.py +138 -0
  57. claude_mpm/cli/parsers/monitor_parser.py +104 -0
  58. claude_mpm/cli/parsers/run_parser.py +147 -0
  59. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  60. claude_mpm/cli/ticket_cli.py +7 -3
  61. claude_mpm/cli/utils.py +55 -37
  62. claude_mpm/cli_module/__init__.py +6 -6
  63. claude_mpm/cli_module/args.py +188 -140
  64. claude_mpm/cli_module/commands.py +79 -70
  65. claude_mpm/cli_module/migration_example.py +38 -60
  66. claude_mpm/config/__init__.py +32 -25
  67. claude_mpm/config/agent_config.py +151 -119
  68. claude_mpm/config/experimental_features.py +71 -73
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +35 -18
  72. claude_mpm/core/__init__.py +9 -6
  73. claude_mpm/core/agent_name_normalizer.py +68 -71
  74. claude_mpm/core/agent_registry.py +372 -521
  75. claude_mpm/core/agent_session_manager.py +74 -63
  76. claude_mpm/core/base_service.py +116 -87
  77. claude_mpm/core/cache.py +119 -153
  78. claude_mpm/core/claude_runner.py +425 -1120
  79. claude_mpm/core/config.py +263 -168
  80. claude_mpm/core/config_aliases.py +69 -61
  81. claude_mpm/core/config_constants.py +292 -0
  82. claude_mpm/core/constants.py +57 -99
  83. claude_mpm/core/container.py +211 -178
  84. claude_mpm/core/exceptions.py +233 -89
  85. claude_mpm/core/factories.py +92 -54
  86. claude_mpm/core/framework_loader.py +378 -220
  87. claude_mpm/core/hook_manager.py +198 -83
  88. claude_mpm/core/hook_performance_config.py +136 -0
  89. claude_mpm/core/injectable_service.py +61 -55
  90. claude_mpm/core/interactive_session.py +165 -155
  91. claude_mpm/core/interfaces.py +221 -195
  92. claude_mpm/core/lazy.py +96 -96
  93. claude_mpm/core/logger.py +133 -107
  94. claude_mpm/core/logging_config.py +185 -157
  95. claude_mpm/core/minimal_framework_loader.py +20 -15
  96. claude_mpm/core/mixins.py +30 -29
  97. claude_mpm/core/oneshot_session.py +215 -181
  98. claude_mpm/core/optimized_agent_loader.py +134 -138
  99. claude_mpm/core/optimized_startup.py +159 -157
  100. claude_mpm/core/pm_hook_interceptor.py +85 -72
  101. claude_mpm/core/service_registry.py +103 -101
  102. claude_mpm/core/session_manager.py +97 -87
  103. claude_mpm/core/socketio_pool.py +212 -158
  104. claude_mpm/core/tool_access_control.py +58 -51
  105. claude_mpm/core/types.py +46 -24
  106. claude_mpm/core/typing_utils.py +166 -82
  107. claude_mpm/core/unified_agent_registry.py +721 -0
  108. claude_mpm/core/unified_config.py +550 -0
  109. claude_mpm/core/unified_paths.py +549 -0
  110. claude_mpm/dashboard/index.html +1 -1
  111. claude_mpm/dashboard/open_dashboard.py +51 -17
  112. claude_mpm/dashboard/static/css/dashboard.css +27 -8
  113. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  114. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  115. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  116. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  117. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  118. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  119. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  120. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  121. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  122. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  123. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  124. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  125. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  126. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  127. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  128. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  129. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  130. claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
  131. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  132. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
  133. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  134. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  135. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  136. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  137. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  138. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  139. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  140. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  141. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  142. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  143. claude_mpm/dashboard/static/js/socket-client.js +120 -54
  144. claude_mpm/dashboard/templates/index.html +40 -50
  145. claude_mpm/experimental/cli_enhancements.py +60 -58
  146. claude_mpm/generators/__init__.py +1 -1
  147. claude_mpm/generators/agent_profile_generator.py +75 -65
  148. claude_mpm/hooks/__init__.py +1 -1
  149. claude_mpm/hooks/base_hook.py +33 -28
  150. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  151. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  152. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  153. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  154. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  155. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  156. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  157. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  158. claude_mpm/hooks/memory_integration_hook.py +140 -100
  159. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  160. claude_mpm/hooks/validation_hooks.py +57 -49
  161. claude_mpm/init.py +145 -121
  162. claude_mpm/models/__init__.py +9 -9
  163. claude_mpm/models/agent_definition.py +33 -23
  164. claude_mpm/models/agent_session.py +228 -200
  165. claude_mpm/scripts/__init__.py +1 -1
  166. claude_mpm/scripts/socketio_daemon.py +192 -75
  167. claude_mpm/scripts/socketio_server_manager.py +328 -0
  168. claude_mpm/scripts/start_activity_logging.py +25 -22
  169. claude_mpm/services/__init__.py +68 -43
  170. claude_mpm/services/agent_capabilities_service.py +271 -0
  171. claude_mpm/services/agents/__init__.py +23 -32
  172. claude_mpm/services/agents/deployment/__init__.py +3 -3
  173. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  174. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  175. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  176. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  177. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  178. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  179. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  180. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  181. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  182. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  183. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  184. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  185. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  186. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  187. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  188. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  189. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  190. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  191. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  192. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  193. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  194. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  195. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  196. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  197. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  198. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  199. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  200. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  201. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  202. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  203. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  204. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  205. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  206. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  207. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  208. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  209. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  210. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  211. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  212. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  213. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  214. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  215. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  216. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  217. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  218. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  219. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  220. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  221. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  222. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  223. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  224. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  225. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  226. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  227. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  228. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  229. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  230. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  231. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  232. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  233. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  234. claude_mpm/services/agents/loading/__init__.py +2 -2
  235. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  236. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  237. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  238. claude_mpm/services/agents/management/__init__.py +2 -2
  239. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  240. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  241. claude_mpm/services/agents/memory/__init__.py +9 -6
  242. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  243. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  244. claude_mpm/services/agents/memory/analyzer.py +430 -0
  245. claude_mpm/services/agents/memory/content_manager.py +376 -0
  246. claude_mpm/services/agents/memory/template_generator.py +468 -0
  247. claude_mpm/services/agents/registry/__init__.py +7 -10
  248. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  249. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  250. claude_mpm/services/async_session_logger.py +187 -153
  251. claude_mpm/services/claude_session_logger.py +87 -72
  252. claude_mpm/services/command_handler_service.py +217 -0
  253. claude_mpm/services/communication/__init__.py +3 -2
  254. claude_mpm/services/core/__init__.py +50 -97
  255. claude_mpm/services/core/base.py +60 -53
  256. claude_mpm/services/core/interfaces/__init__.py +188 -0
  257. claude_mpm/services/core/interfaces/agent.py +351 -0
  258. claude_mpm/services/core/interfaces/communication.py +343 -0
  259. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  260. claude_mpm/services/core/interfaces/service.py +434 -0
  261. claude_mpm/services/core/interfaces.py +19 -944
  262. claude_mpm/services/event_aggregator.py +208 -170
  263. claude_mpm/services/exceptions.py +387 -308
  264. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  265. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  266. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  267. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  268. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  269. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  270. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  271. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  272. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  273. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  274. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  275. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  276. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  277. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  278. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  279. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  280. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  281. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  282. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  283. claude_mpm/services/hook_service.py +106 -114
  284. claude_mpm/services/infrastructure/__init__.py +7 -5
  285. claude_mpm/services/infrastructure/context_preservation.py +233 -199
  286. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  287. claude_mpm/services/infrastructure/logging.py +83 -76
  288. claude_mpm/services/infrastructure/monitoring.py +547 -404
  289. claude_mpm/services/mcp_gateway/__init__.py +30 -13
  290. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  291. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  292. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  293. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  294. claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
  295. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  296. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  297. claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
  298. claude_mpm/services/mcp_gateway/main.py +287 -137
  299. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  300. claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
  301. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  302. claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
  303. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
  304. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  305. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  306. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  307. claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
  308. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  309. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  310. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  311. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  312. claude_mpm/services/memory/__init__.py +2 -2
  313. claude_mpm/services/memory/builder.py +451 -362
  314. claude_mpm/services/memory/cache/__init__.py +2 -2
  315. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  316. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  317. claude_mpm/services/memory/indexed_memory.py +195 -193
  318. claude_mpm/services/memory/optimizer.py +267 -234
  319. claude_mpm/services/memory/router.py +571 -263
  320. claude_mpm/services/memory_hook_service.py +237 -0
  321. claude_mpm/services/port_manager.py +223 -0
  322. claude_mpm/services/project/__init__.py +3 -3
  323. claude_mpm/services/project/analyzer.py +451 -305
  324. claude_mpm/services/project/registry.py +262 -240
  325. claude_mpm/services/recovery_manager.py +287 -231
  326. claude_mpm/services/response_tracker.py +87 -67
  327. claude_mpm/services/runner_configuration_service.py +587 -0
  328. claude_mpm/services/session_management_service.py +304 -0
  329. claude_mpm/services/socketio/__init__.py +4 -4
  330. claude_mpm/services/socketio/client_proxy.py +174 -0
  331. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  332. claude_mpm/services/socketio/handlers/base.py +44 -30
  333. claude_mpm/services/socketio/handlers/connection.py +145 -65
  334. claude_mpm/services/socketio/handlers/file.py +123 -108
  335. claude_mpm/services/socketio/handlers/git.py +607 -373
  336. claude_mpm/services/socketio/handlers/hook.py +170 -0
  337. claude_mpm/services/socketio/handlers/memory.py +4 -4
  338. claude_mpm/services/socketio/handlers/project.py +4 -4
  339. claude_mpm/services/socketio/handlers/registry.py +53 -38
  340. claude_mpm/services/socketio/server/__init__.py +18 -0
  341. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  342. claude_mpm/services/socketio/server/core.py +399 -0
  343. claude_mpm/services/socketio/server/main.py +323 -0
  344. claude_mpm/services/socketio_client_manager.py +160 -133
  345. claude_mpm/services/socketio_server.py +36 -1885
  346. claude_mpm/services/subprocess_launcher_service.py +316 -0
  347. claude_mpm/services/system_instructions_service.py +258 -0
  348. claude_mpm/services/ticket_manager.py +19 -533
  349. claude_mpm/services/utility_service.py +285 -0
  350. claude_mpm/services/version_control/__init__.py +18 -21
  351. claude_mpm/services/version_control/branch_strategy.py +20 -10
  352. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  353. claude_mpm/services/version_control/git_operations.py +52 -21
  354. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  355. claude_mpm/services/version_control/version_parser.py +145 -125
  356. claude_mpm/services/version_service.py +270 -0
  357. claude_mpm/storage/__init__.py +2 -2
  358. claude_mpm/storage/state_storage.py +177 -181
  359. claude_mpm/ticket_wrapper.py +2 -2
  360. claude_mpm/utils/__init__.py +2 -2
  361. claude_mpm/utils/agent_dependency_loader.py +453 -243
  362. claude_mpm/utils/config_manager.py +157 -118
  363. claude_mpm/utils/console.py +1 -1
  364. claude_mpm/utils/dependency_cache.py +102 -107
  365. claude_mpm/utils/dependency_manager.py +52 -47
  366. claude_mpm/utils/dependency_strategies.py +131 -96
  367. claude_mpm/utils/environment_context.py +110 -102
  368. claude_mpm/utils/error_handler.py +75 -55
  369. claude_mpm/utils/file_utils.py +80 -67
  370. claude_mpm/utils/framework_detection.py +12 -11
  371. claude_mpm/utils/import_migration_example.py +12 -60
  372. claude_mpm/utils/imports.py +48 -45
  373. claude_mpm/utils/path_operations.py +100 -93
  374. claude_mpm/utils/robust_installer.py +172 -164
  375. claude_mpm/utils/session_logging.py +30 -23
  376. claude_mpm/utils/subprocess_utils.py +99 -61
  377. claude_mpm/validation/__init__.py +1 -1
  378. claude_mpm/validation/agent_validator.py +151 -111
  379. claude_mpm/validation/frontmatter_validator.py +92 -71
  380. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +27 -1
  381. claude_mpm-4.0.3.dist-info/RECORD +402 -0
  382. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
  383. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
  384. claude_mpm/cli/commands/run_guarded.py +0 -511
  385. claude_mpm/config/memory_guardian_config.py +0 -325
  386. claude_mpm/config/memory_guardian_yaml.py +0 -335
  387. claude_mpm/core/config_paths.py +0 -150
  388. claude_mpm/core/memory_aware_runner.py +0 -353
  389. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  390. claude_mpm/deployment_paths.py +0 -261
  391. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  392. claude_mpm/models/state_models.py +0 -433
  393. claude_mpm/services/agent/__init__.py +0 -24
  394. claude_mpm/services/agent/deployment.py +0 -2548
  395. claude_mpm/services/agent/management.py +0 -598
  396. claude_mpm/services/agent/registry.py +0 -813
  397. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  398. claude_mpm/services/communication/socketio.py +0 -1935
  399. claude_mpm/services/communication/websocket.py +0 -479
  400. claude_mpm/services/framework_claude_md_generator.py +0 -624
  401. claude_mpm/services/health_monitor.py +0 -893
  402. claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
  403. claude_mpm/services/infrastructure/health_monitor.py +0 -775
  404. claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
  405. claude_mpm/services/infrastructure/memory_guardian.py +0 -944
  406. claude_mpm/services/infrastructure/restart_protection.py +0 -642
  407. claude_mpm/services/infrastructure/state_manager.py +0 -774
  408. claude_mpm/services/mcp_gateway/manager.py +0 -334
  409. claude_mpm/services/optimized_hook_service.py +0 -542
  410. claude_mpm/services/project_analyzer.py +0 -864
  411. claude_mpm/services/project_registry.py +0 -608
  412. claude_mpm/services/standalone_socketio_server.py +0 -1300
  413. claude_mpm/services/ticket_manager_di.py +0 -318
  414. claude_mpm/services/ticketing_service_original.py +0 -510
  415. claude_mpm/utils/paths.py +0 -395
  416. claude_mpm/utils/platform_memory.py +0 -524
  417. claude_mpm-3.9.11.dist-info/RECORD +0 -306
  418. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
  419. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
@@ -1,479 +0,0 @@
1
- """Memory monitoring dashboard for Memory Guardian system.
2
-
3
- Provides real-time memory usage display, restart history, and metrics export.
4
- """
5
-
6
- import asyncio
7
- import json
8
- import time
9
- from dataclasses import dataclass
10
- from datetime import datetime, timedelta
11
- from pathlib import Path
12
- from typing import Dict, List, Optional, Any, Tuple
13
-
14
- from claude_mpm.services.core.base import BaseService
15
- from claude_mpm.services.infrastructure.memory_guardian import MemoryGuardian, MemoryState
16
- from claude_mpm.services.infrastructure.restart_protection import RestartProtection
17
- from claude_mpm.services.infrastructure.health_monitor import HealthMonitor
18
- from claude_mpm.services.infrastructure.graceful_degradation import GracefulDegradation
19
-
20
-
21
- @dataclass
22
- class DashboardMetrics:
23
- """Dashboard metrics snapshot."""
24
- timestamp: float
25
- memory_current_mb: float
26
- memory_peak_mb: float
27
- memory_average_mb: float
28
- memory_state: str
29
- process_state: str
30
- process_uptime_hours: float
31
- total_restarts: int
32
- recent_restarts: int
33
- health_status: str
34
- degradation_level: str
35
- active_features: int
36
- degraded_features: int
37
-
38
- def to_dict(self) -> Dict[str, Any]:
39
- """Convert to dictionary."""
40
- return {
41
- 'timestamp': self.timestamp,
42
- 'timestamp_iso': datetime.fromtimestamp(self.timestamp).isoformat(),
43
- 'memory': {
44
- 'current_mb': round(self.memory_current_mb, 2),
45
- 'peak_mb': round(self.memory_peak_mb, 2),
46
- 'average_mb': round(self.memory_average_mb, 2),
47
- 'state': self.memory_state
48
- },
49
- 'process': {
50
- 'state': self.process_state,
51
- 'uptime_hours': round(self.process_uptime_hours, 2)
52
- },
53
- 'restarts': {
54
- 'total': self.total_restarts,
55
- 'recent': self.recent_restarts
56
- },
57
- 'health': {
58
- 'status': self.health_status,
59
- 'degradation_level': self.degradation_level,
60
- 'active_features': self.active_features,
61
- 'degraded_features': self.degraded_features
62
- }
63
- }
64
-
65
-
66
- class MemoryDashboard(BaseService):
67
- """Dashboard service for memory monitoring visualization and metrics."""
68
-
69
- def __init__(
70
- self,
71
- memory_guardian: Optional[MemoryGuardian] = None,
72
- restart_protection: Optional[RestartProtection] = None,
73
- health_monitor: Optional[HealthMonitor] = None,
74
- graceful_degradation: Optional[GracefulDegradation] = None,
75
- metrics_file: Optional[Path] = None,
76
- export_interval_seconds: int = 60
77
- ):
78
- """Initialize memory dashboard service.
79
-
80
- Args:
81
- memory_guardian: MemoryGuardian service instance
82
- restart_protection: RestartProtection service instance
83
- health_monitor: HealthMonitor service instance
84
- graceful_degradation: GracefulDegradation service instance
85
- metrics_file: Optional file for metrics export
86
- export_interval_seconds: Interval for metrics export
87
- """
88
- super().__init__("MemoryDashboard")
89
-
90
- # Service dependencies
91
- self.memory_guardian = memory_guardian
92
- self.restart_protection = restart_protection
93
- self.health_monitor = health_monitor
94
- self.graceful_degradation = graceful_degradation
95
-
96
- # Configuration
97
- self.metrics_file = metrics_file
98
- self.export_interval = export_interval_seconds
99
-
100
- # Metrics tracking
101
- self.metrics_history: List[DashboardMetrics] = []
102
- self.export_task: Optional[asyncio.Task] = None
103
- self.dashboard_active = False
104
-
105
- self.log_info("Memory dashboard initialized")
106
-
107
- async def initialize(self) -> bool:
108
- """Initialize the memory dashboard service.
109
-
110
- Returns:
111
- True if initialization successful
112
- """
113
- try:
114
- self.log_info("Initializing memory dashboard service")
115
-
116
- # Verify service dependencies
117
- if not self.memory_guardian:
118
- self.log_warning("Memory Guardian not available, dashboard running in limited mode")
119
-
120
- # Start metrics export if configured
121
- if self.metrics_file and self.export_interval > 0:
122
- self.export_task = asyncio.create_task(self._export_metrics_loop())
123
-
124
- self._initialized = True
125
- self.log_info("Memory dashboard service initialized successfully")
126
- return True
127
-
128
- except Exception as e:
129
- self.log_error(f"Failed to initialize memory dashboard: {e}")
130
- return False
131
-
132
- async def shutdown(self) -> None:
133
- """Shutdown the memory dashboard service."""
134
- try:
135
- self.log_info("Shutting down memory dashboard service")
136
-
137
- # Stop export task
138
- if self.export_task:
139
- self.export_task.cancel()
140
- try:
141
- await self.export_task
142
- except asyncio.CancelledError:
143
- pass
144
-
145
- # Export final metrics
146
- if self.metrics_file:
147
- self._export_metrics()
148
-
149
- self._shutdown = True
150
- self.log_info("Memory dashboard service shutdown complete")
151
-
152
- except Exception as e:
153
- self.log_error(f"Error during memory dashboard shutdown: {e}")
154
-
155
- def get_current_metrics(self) -> DashboardMetrics:
156
- """Get current system metrics.
157
-
158
- Returns:
159
- DashboardMetrics snapshot
160
- """
161
- # Get memory metrics
162
- memory_current = 0.0
163
- memory_peak = 0.0
164
- memory_average = 0.0
165
- memory_state = "unknown"
166
- process_state = "unknown"
167
- process_uptime = 0.0
168
- total_restarts = 0
169
-
170
- if self.memory_guardian:
171
- status = self.memory_guardian.get_status()
172
- memory_current = status['memory']['current_mb']
173
- memory_peak = status['memory']['peak_mb']
174
- memory_average = status['memory']['average_mb']
175
- memory_state = status['memory']['state']
176
- process_state = status['process']['state']
177
- process_uptime = status['process']['uptime_hours']
178
- total_restarts = status['restarts']['total']
179
-
180
- # Get restart metrics
181
- recent_restarts = 0
182
- if self.restart_protection:
183
- stats = self.restart_protection.get_restart_statistics()
184
- recent_restarts = len([
185
- r for r in self.restart_protection.restart_history
186
- if r.timestamp >= time.time() - 3600
187
- ])
188
-
189
- # Get health metrics
190
- health_status = "unknown"
191
- if self.health_monitor:
192
- health = self.health_monitor.get_health_status()
193
- if health:
194
- health_status = health.status.value
195
-
196
- # Get degradation metrics
197
- degradation_level = "normal"
198
- active_features = 0
199
- degraded_features = 0
200
- if self.graceful_degradation:
201
- status = self.graceful_degradation.get_status()
202
- degradation_level = status.level.value
203
- active_features = status.available_features
204
- degraded_features = status.degraded_features
205
-
206
- return DashboardMetrics(
207
- timestamp=time.time(),
208
- memory_current_mb=memory_current,
209
- memory_peak_mb=memory_peak,
210
- memory_average_mb=memory_average,
211
- memory_state=memory_state,
212
- process_state=process_state,
213
- process_uptime_hours=process_uptime,
214
- total_restarts=total_restarts,
215
- recent_restarts=recent_restarts,
216
- health_status=health_status,
217
- degradation_level=degradation_level,
218
- active_features=active_features,
219
- degraded_features=degraded_features
220
- )
221
-
222
- def get_dashboard_data(self) -> Dict[str, Any]:
223
- """Get comprehensive dashboard data.
224
-
225
- Returns:
226
- Dictionary with all dashboard information
227
- """
228
- current_metrics = self.get_current_metrics()
229
-
230
- # Get restart history
231
- restart_history = []
232
- if self.restart_protection:
233
- stats = self.restart_protection.get_restart_statistics()
234
- restart_history = [
235
- r.to_dict() for r in
236
- list(self.restart_protection.restart_history)[-10:]
237
- ]
238
-
239
- # Get health checks
240
- health_checks = []
241
- if self.health_monitor:
242
- health = self.health_monitor.get_health_status()
243
- if health:
244
- health_checks = [c.to_dict() for c in health.checks]
245
-
246
- # Get feature status
247
- features = []
248
- if self.graceful_degradation:
249
- status = self.graceful_degradation.get_status()
250
- features = [f.to_dict() for f in status.features]
251
-
252
- # Get thresholds
253
- thresholds = {}
254
- if self.memory_guardian:
255
- config = self.memory_guardian.config
256
- thresholds = {
257
- 'warning_mb': config.thresholds.warning,
258
- 'critical_mb': config.thresholds.critical,
259
- 'emergency_mb': config.thresholds.emergency
260
- }
261
-
262
- return {
263
- 'current_metrics': current_metrics.to_dict(),
264
- 'thresholds': thresholds,
265
- 'restart_history': restart_history,
266
- 'health_checks': health_checks,
267
- 'features': features,
268
- 'metrics_history': [m.to_dict() for m in self.metrics_history[-50:]],
269
- 'timestamp': time.time()
270
- }
271
-
272
- def get_summary(self) -> str:
273
- """Get a text summary of current status.
274
-
275
- Returns:
276
- Human-readable status summary
277
- """
278
- metrics = self.get_current_metrics()
279
-
280
- lines = [
281
- "=" * 60,
282
- "MEMORY GUARDIAN DASHBOARD",
283
- "=" * 60,
284
- "",
285
- "MEMORY STATUS",
286
- "-" * 30,
287
- f"Current: {metrics.memory_current_mb:8.2f} MB",
288
- f"Peak: {metrics.memory_peak_mb:8.2f} MB",
289
- f"Average: {metrics.memory_average_mb:8.2f} MB",
290
- f"State: {metrics.memory_state.upper()}",
291
- "",
292
- "PROCESS STATUS",
293
- "-" * 30,
294
- f"State: {metrics.process_state}",
295
- f"Uptime: {metrics.process_uptime_hours:.2f} hours",
296
- "",
297
- "RESTART STATISTICS",
298
- "-" * 30,
299
- f"Total: {metrics.total_restarts}",
300
- f"Recent: {metrics.recent_restarts} (last hour)",
301
- ""
302
- ]
303
-
304
- # Add restart protection info
305
- if self.restart_protection:
306
- stats = self.restart_protection.get_restart_statistics()
307
- lines.extend([
308
- "RESTART PROTECTION",
309
- "-" * 30,
310
- f"Circuit: {stats.circuit_state.value}",
311
- f"Failures: {stats.consecutive_failures}",
312
- ""
313
- ])
314
-
315
- # Add memory trend if available
316
- if stats.memory_trend and stats.memory_trend.is_leak_suspected:
317
- lines.extend([
318
- "⚠️ MEMORY LEAK SUSPECTED",
319
- f"Growth: {stats.memory_trend.slope_mb_per_min:.2f} MB/min",
320
- ""
321
- ])
322
-
323
- # Add health status
324
- lines.extend([
325
- "SYSTEM HEALTH",
326
- "-" * 30,
327
- f"Status: {metrics.health_status}",
328
- f"Level: {metrics.degradation_level}",
329
- ""
330
- ])
331
-
332
- # Add feature status if degraded
333
- if metrics.degraded_features > 0:
334
- lines.extend([
335
- "DEGRADED FEATURES",
336
- "-" * 30
337
- ])
338
-
339
- if self.graceful_degradation:
340
- status = self.graceful_degradation.get_status()
341
- for feature in status.features:
342
- if feature.state.value != 'available':
343
- lines.append(f"• {feature.name}: {feature.state.value}")
344
-
345
- lines.append("")
346
-
347
- # Add timestamp
348
- lines.extend([
349
- "-" * 60,
350
- f"Updated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
351
- ])
352
-
353
- return "\n".join(lines)
354
-
355
- def export_prometheus_metrics(self) -> str:
356
- """Export metrics in Prometheus format.
357
-
358
- Returns:
359
- Prometheus-formatted metrics string
360
- """
361
- metrics = self.get_current_metrics()
362
- timestamp = int(metrics.timestamp * 1000)
363
-
364
- lines = [
365
- "# HELP memory_current_mb Current memory usage in megabytes",
366
- "# TYPE memory_current_mb gauge",
367
- f"memory_current_mb {metrics.memory_current_mb} {timestamp}",
368
- "",
369
- "# HELP memory_peak_mb Peak memory usage in megabytes",
370
- "# TYPE memory_peak_mb gauge",
371
- f"memory_peak_mb {metrics.memory_peak_mb} {timestamp}",
372
- "",
373
- "# HELP memory_average_mb Average memory usage in megabytes",
374
- "# TYPE memory_average_mb gauge",
375
- f"memory_average_mb {metrics.memory_average_mb} {timestamp}",
376
- "",
377
- "# HELP process_uptime_hours Process uptime in hours",
378
- "# TYPE process_uptime_hours counter",
379
- f"process_uptime_hours {metrics.process_uptime_hours} {timestamp}",
380
- "",
381
- "# HELP total_restarts Total number of process restarts",
382
- "# TYPE total_restarts counter",
383
- f"total_restarts {metrics.total_restarts} {timestamp}",
384
- "",
385
- "# HELP recent_restarts Number of restarts in the last hour",
386
- "# TYPE recent_restarts gauge",
387
- f"recent_restarts {metrics.recent_restarts} {timestamp}",
388
- "",
389
- "# HELP degraded_features Number of degraded system features",
390
- "# TYPE degraded_features gauge",
391
- f"degraded_features {metrics.degraded_features} {timestamp}",
392
- ""
393
- ]
394
-
395
- # Add memory state as labeled metric
396
- memory_state_value = {
397
- 'normal': 0,
398
- 'warning': 1,
399
- 'critical': 2,
400
- 'emergency': 3
401
- }.get(metrics.memory_state.lower(), -1)
402
-
403
- lines.extend([
404
- "# HELP memory_state Current memory state (0=normal, 1=warning, 2=critical, 3=emergency)",
405
- "# TYPE memory_state gauge",
406
- f"memory_state {memory_state_value} {timestamp}",
407
- ""
408
- ])
409
-
410
- # Add health status as labeled metric
411
- health_value = {
412
- 'healthy': 0,
413
- 'degraded': 1,
414
- 'unhealthy': 2,
415
- 'critical': 3
416
- }.get(metrics.health_status.lower(), -1)
417
-
418
- lines.extend([
419
- "# HELP health_status System health status (0=healthy, 1=degraded, 2=unhealthy, 3=critical)",
420
- "# TYPE health_status gauge",
421
- f"health_status {health_value} {timestamp}"
422
- ])
423
-
424
- return "\n".join(lines)
425
-
426
- def export_json_metrics(self) -> str:
427
- """Export metrics in JSON format.
428
-
429
- Returns:
430
- JSON-formatted metrics string
431
- """
432
- data = self.get_dashboard_data()
433
- return json.dumps(data, indent=2)
434
-
435
- async def _export_metrics_loop(self) -> None:
436
- """Background task to export metrics periodically."""
437
- while not self._shutdown:
438
- try:
439
- # Collect metrics
440
- metrics = self.get_current_metrics()
441
- self.metrics_history.append(metrics)
442
-
443
- # Trim history
444
- if len(self.metrics_history) > 1440: # Keep 24 hours at 1-minute intervals
445
- self.metrics_history = self.metrics_history[-1440:]
446
-
447
- # Export to file
448
- if self.metrics_file:
449
- self._export_metrics()
450
-
451
- await asyncio.sleep(self.export_interval)
452
-
453
- except Exception as e:
454
- self.log_error(f"Error in metrics export loop: {e}")
455
- await asyncio.sleep(self.export_interval)
456
-
457
- def _export_metrics(self) -> None:
458
- """Export metrics to file."""
459
- if not self.metrics_file:
460
- return
461
-
462
- try:
463
- # Determine format from file extension
464
- if self.metrics_file.suffix == '.json':
465
- content = self.export_json_metrics()
466
- elif self.metrics_file.suffix == '.prom':
467
- content = self.export_prometheus_metrics()
468
- else:
469
- # Default to JSON
470
- content = self.export_json_metrics()
471
-
472
- # Write to file
473
- self.metrics_file.parent.mkdir(parents=True, exist_ok=True)
474
- self.metrics_file.write_text(content)
475
-
476
- self.log_debug(f"Exported metrics to {self.metrics_file}")
477
-
478
- except Exception as e:
479
- self.log_error(f"Failed to export metrics: {e}")