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,150 +0,0 @@
1
- """
2
- Centralized configuration paths for claude-mpm.
3
-
4
- This module provides a single source of truth for all configuration-related paths
5
- throughout the codebase. All modules should import and use these constants
6
- instead of hardcoding directory names.
7
- """
8
-
9
- from enum import Enum
10
- from pathlib import Path
11
- from typing import Optional
12
-
13
-
14
- class ConfigDirName(Enum):
15
- """Enum for configuration directory names to ensure type safety."""
16
- CLAUDE_MPM = ".claude-mpm"
17
-
18
-
19
- # Core configuration directory name - MUST be consistent everywhere
20
- CONFIG_DIR_NAME = ConfigDirName.CLAUDE_MPM.value
21
-
22
- # Legacy name that should NOT be used (kept for reference during migration)
23
- _LEGACY_CONFIG_DIR_NAME = ".claude-pm" # DO NOT USE THIS
24
-
25
-
26
- class ConfigPaths:
27
- """Centralized configuration path constants."""
28
-
29
- # Base directory names
30
- CONFIG_DIR = ConfigDirName.CLAUDE_MPM.value
31
- AGENTS_DIR = "agents"
32
- BACKUPS_DIR = "backups"
33
- TRACKING_DIR = "agent_tracking"
34
- MEMORIES_DIR = "memories"
35
- RESPONSES_DIR = "responses"
36
-
37
- # Agent subdirectories
38
- AGENT_USER_AGENTS = "user-agents"
39
- AGENT_USER_DEFINED = "user-defined"
40
- AGENT_SYSTEM = "templates"
41
-
42
- # Configuration files
43
- CONFIG_FILE = "config.json"
44
- CONFIGURATION_YAML = "configuration.yaml"
45
- LIFECYCLE_RECORDS = "lifecycle_records.json"
46
- VERSION_FILE = "VERSION"
47
- INSTRUCTIONS_FILE = "INSTRUCTIONS.md"
48
-
49
- @classmethod
50
- def get_user_config_dir(cls) -> Path:
51
- """Get the user-level configuration directory."""
52
- return Path.home() / cls.CONFIG_DIR
53
-
54
- @classmethod
55
- def get_project_config_dir(cls, project_root: Optional[Path] = None) -> Path:
56
- """Get the project-level configuration directory."""
57
- root = project_root or Path.cwd()
58
- return root / cls.CONFIG_DIR
59
-
60
- @classmethod
61
- def get_framework_config_dir(cls, framework_root: Path) -> Path:
62
- """Get the framework-level configuration directory."""
63
- return framework_root / cls.CONFIG_DIR
64
-
65
- @classmethod
66
- def get_user_agents_dir(cls) -> Path:
67
- """Get the user-level agents directory."""
68
- return cls.get_user_config_dir() / cls.AGENTS_DIR
69
-
70
- @classmethod
71
- def get_project_agents_dir(cls, project_root: Optional[Path] = None) -> Path:
72
- """Get the project-level agents directory."""
73
- return cls.get_project_config_dir(project_root) / cls.AGENTS_DIR
74
-
75
- @classmethod
76
- def get_tracking_dir(cls) -> Path:
77
- """Get the agent tracking directory."""
78
- return cls.get_user_config_dir() / cls.TRACKING_DIR
79
-
80
- @classmethod
81
- def get_backups_dir(cls, base_dir: Optional[Path] = None) -> Path:
82
- """Get the backups directory."""
83
- if base_dir:
84
- return base_dir / cls.CONFIG_DIR / cls.BACKUPS_DIR
85
- return cls.get_user_config_dir() / cls.BACKUPS_DIR
86
-
87
- @classmethod
88
- def get_memories_dir(cls, base_dir: Optional[Path] = None) -> Path:
89
- """Get the memories directory."""
90
- if base_dir:
91
- return base_dir / cls.CONFIG_DIR / cls.MEMORIES_DIR
92
- return cls.get_project_config_dir() / cls.MEMORIES_DIR
93
-
94
- @classmethod
95
- def get_responses_dir(cls, base_dir: Optional[Path] = None) -> Path:
96
- """Get the responses directory."""
97
- if base_dir:
98
- return base_dir / cls.CONFIG_DIR / cls.RESPONSES_DIR
99
- return cls.get_project_config_dir() / cls.RESPONSES_DIR
100
-
101
- @classmethod
102
- def find_config_dir(cls, start_path: Optional[Path] = None) -> Optional[Path]:
103
- """
104
- Find the nearest configuration directory by walking up the directory tree.
105
-
106
- Args:
107
- start_path: Starting directory (defaults to current working directory)
108
-
109
- Returns:
110
- Path to the configuration directory if found, None otherwise
111
- """
112
- current = start_path or Path.cwd()
113
-
114
- # Check current directory and parents
115
- for path in [current] + list(current.parents):
116
- config_dir = path / cls.CONFIG_DIR
117
- if config_dir.exists():
118
- return config_dir
119
-
120
- return None
121
-
122
- @classmethod
123
- def validate_not_legacy(cls, path: Path) -> bool:
124
- """
125
- Check if a path contains the legacy configuration directory name.
126
-
127
- Args:
128
- path: Path to check
129
-
130
- Returns:
131
- True if path is valid (not legacy), False if it contains legacy name
132
- """
133
- path_str = str(path)
134
- return _LEGACY_CONFIG_DIR_NAME not in path_str
135
-
136
-
137
- # Export commonly used paths as module-level constants for convenience
138
- USER_CONFIG_DIR = ConfigPaths.get_user_config_dir()
139
- USER_AGENTS_DIR = ConfigPaths.get_user_agents_dir()
140
- USER_TRACKING_DIR = ConfigPaths.get_tracking_dir()
141
-
142
- # Export all public symbols
143
- __all__ = [
144
- "ConfigDirName",
145
- "ConfigPaths",
146
- "CONFIG_DIR_NAME",
147
- "USER_CONFIG_DIR",
148
- "USER_AGENTS_DIR",
149
- "USER_TRACKING_DIR",
150
- ]
@@ -1,353 +0,0 @@
1
- """Memory-aware Claude runner with automatic restart capabilities.
2
-
3
- This runner extends ClaudeRunner to add memory monitoring and automatic
4
- restart capabilities when memory thresholds are exceeded.
5
-
6
- Design Principles:
7
- - Seamless integration with existing ClaudeRunner
8
- - State preservation across restarts
9
- - Configurable memory thresholds and policies
10
- - Minimal overhead when monitoring is disabled
11
- """
12
-
13
- import asyncio
14
- import json
15
- import os
16
- import sys
17
- import time
18
- from pathlib import Path
19
- from typing import Optional, Dict, Any, List
20
- from datetime import datetime
21
-
22
- from claude_mpm.core.claude_runner import ClaudeRunner
23
- from claude_mpm.core.logging_config import get_logger
24
- from claude_mpm.services.infrastructure.memory_guardian import MemoryGuardian
25
- from claude_mpm.services.infrastructure.state_manager import StateManager
26
- from claude_mpm.config.memory_guardian_config import (
27
- MemoryGuardianConfig,
28
- MemoryThresholds,
29
- RestartPolicy,
30
- MonitoringConfig,
31
- get_default_config
32
- )
33
-
34
-
35
- class MemoryAwareClaudeRunner(ClaudeRunner):
36
- """Claude runner with memory monitoring and automatic restart capabilities.
37
-
38
- This class extends ClaudeRunner to add memory monitoring through the
39
- MemoryGuardian service. When memory thresholds are exceeded, it can
40
- automatically restart Claude Code while preserving conversation state.
41
-
42
- WHY: Large conversation histories in .claude.json can consume 2GB+ of memory,
43
- causing system instability. This runner monitors memory usage and performs
44
- controlled restarts with state preservation.
45
-
46
- DESIGN DECISION: We extend ClaudeRunner rather than wrap it to maintain
47
- full compatibility with existing code while adding new capabilities.
48
- """
49
-
50
- def __init__(
51
- self,
52
- enable_tickets: bool = True,
53
- log_level: str = "OFF",
54
- claude_args: Optional[list] = None,
55
- launch_method: str = "subprocess", # Default to subprocess for monitoring
56
- enable_websocket: bool = False,
57
- websocket_port: int = 8765,
58
- memory_config: Optional[MemoryGuardianConfig] = None,
59
- enable_monitoring: bool = True,
60
- state_dir: Optional[Path] = None
61
- ):
62
- """Initialize memory-aware Claude runner.
63
-
64
- Args:
65
- enable_tickets: Enable ticket extraction
66
- log_level: Logging level
67
- claude_args: Additional arguments for Claude
68
- launch_method: Launch method (subprocess required for monitoring)
69
- enable_websocket: Enable WebSocket server
70
- websocket_port: WebSocket server port
71
- memory_config: Memory guardian configuration
72
- enable_monitoring: Enable memory monitoring
73
- state_dir: Directory for state preservation
74
- """
75
- # Force subprocess mode if monitoring is enabled
76
- if enable_monitoring and launch_method == "exec":
77
- launch_method = "subprocess"
78
- get_logger(__name__).info(
79
- "Switching to subprocess launch method for memory monitoring"
80
- )
81
-
82
- # Initialize parent
83
- super().__init__(
84
- enable_tickets=enable_tickets,
85
- log_level=log_level,
86
- claude_args=claude_args,
87
- launch_method=launch_method,
88
- enable_websocket=enable_websocket,
89
- websocket_port=websocket_port
90
- )
91
-
92
- # Memory monitoring configuration
93
- self.enable_monitoring = enable_monitoring
94
- self.memory_config = memory_config or get_default_config()
95
- self.memory_config.enabled = enable_monitoring
96
-
97
- # State management
98
- self.state_dir = state_dir or Path.home() / ".claude-mpm" / "state"
99
- self.state_manager: Optional[StateManager] = None
100
- self.memory_guardian: Optional[MemoryGuardian] = None
101
-
102
- # Monitoring state
103
- self.monitoring_task: Optional[asyncio.Task] = None
104
- self.restart_count = 0
105
- self.max_restarts = 3 # Default max restarts
106
-
107
- self.logger.info(f"Memory-aware runner initialized with monitoring: {enable_monitoring}")
108
-
109
- def run_interactive_with_monitoring(
110
- self,
111
- initial_context: Optional[str] = None,
112
- memory_threshold: Optional[float] = None,
113
- check_interval: Optional[int] = None,
114
- max_restarts: Optional[int] = None,
115
- enable_state_preservation: bool = True
116
- ):
117
- """Run Claude in interactive mode with memory monitoring.
118
-
119
- This method wraps the standard interactive session with memory monitoring
120
- and automatic restart capabilities.
121
-
122
- Args:
123
- initial_context: Optional initial context
124
- memory_threshold: Override memory threshold in MB
125
- check_interval: Override check interval in seconds
126
- max_restarts: Maximum number of automatic restarts
127
- enable_state_preservation: Enable state preservation across restarts
128
- """
129
- if not self.enable_monitoring:
130
- # Fall back to standard interactive mode
131
- self.logger.info("Memory monitoring disabled, using standard interactive mode")
132
- return self.run_interactive(initial_context)
133
-
134
- # Update configuration with overrides
135
- if memory_threshold:
136
- self.memory_config.thresholds.critical = memory_threshold
137
- self.memory_config.thresholds.emergency = memory_threshold * 1.2
138
-
139
- if check_interval:
140
- self.memory_config.monitoring.normal_interval = check_interval
141
-
142
- if max_restarts is not None:
143
- self.max_restarts = max_restarts
144
- self.memory_config.restart_policy.max_attempts = max_restarts
145
-
146
- # Run async monitoring loop
147
- try:
148
- asyncio.run(self._run_with_monitoring_async(
149
- initial_context,
150
- enable_state_preservation
151
- ))
152
- except KeyboardInterrupt:
153
- self.logger.info("Interactive session interrupted by user")
154
- except Exception as e:
155
- self.logger.error(f"Error in monitored session: {e}")
156
- raise
157
-
158
- async def _run_with_monitoring_async(
159
- self,
160
- initial_context: Optional[str],
161
- enable_state_preservation: bool
162
- ):
163
- """Async implementation of monitored interactive session.
164
-
165
- This method sets up the memory monitoring infrastructure and manages
166
- the Claude subprocess lifecycle with automatic restarts.
167
- """
168
- try:
169
- # Initialize services
170
- await self._initialize_monitoring_services(enable_state_preservation)
171
-
172
- # Display monitoring information
173
- self._display_monitoring_info()
174
-
175
- # Start monitoring loop
176
- while self.restart_count <= self.max_restarts:
177
- try:
178
- # Run Claude subprocess
179
- await self._run_monitored_subprocess(initial_context)
180
-
181
- # If we exit normally, break the loop
182
- break
183
-
184
- except MemoryThresholdExceeded as e:
185
- self.logger.warning(f"Memory threshold exceeded: {e}")
186
-
187
- if self.restart_count >= self.max_restarts:
188
- self.logger.error("Maximum restart attempts reached")
189
- break
190
-
191
- # Perform controlled restart
192
- await self._perform_controlled_restart()
193
- self.restart_count += 1
194
-
195
- # Clear initial context after first run
196
- initial_context = None
197
-
198
- except Exception as e:
199
- self.logger.error(f"Unexpected error in monitored session: {e}")
200
- break
201
-
202
- finally:
203
- # Cleanup
204
- await self._cleanup_monitoring_services()
205
-
206
- async def _initialize_monitoring_services(self, enable_state_preservation: bool):
207
- """Initialize memory guardian and state manager services."""
208
- self.logger.info("Initializing monitoring services")
209
-
210
- # Initialize state manager if enabled
211
- if enable_state_preservation:
212
- self.state_manager = StateManager(self.state_dir)
213
- await self.state_manager.initialize()
214
- self.logger.info("State preservation enabled")
215
-
216
- # Initialize memory guardian
217
- self.memory_guardian = MemoryGuardian(self.memory_config)
218
- if self.state_manager:
219
- self.memory_guardian.set_state_manager(self.state_manager)
220
- await self.memory_guardian.initialize()
221
-
222
- self.logger.info("Monitoring services initialized")
223
-
224
- async def _cleanup_monitoring_services(self):
225
- """Cleanup monitoring services."""
226
- self.logger.info("Cleaning up monitoring services")
227
-
228
- if self.memory_guardian:
229
- await self.memory_guardian.shutdown()
230
-
231
- if self.state_manager:
232
- await self.state_manager.shutdown()
233
-
234
- async def _run_monitored_subprocess(self, initial_context: Optional[str]):
235
- """Run Claude subprocess with memory monitoring.
236
-
237
- This method launches Claude as a subprocess and monitors its memory usage,
238
- triggering restarts when thresholds are exceeded.
239
- """
240
- # Set up the process command
241
- cmd = self._build_claude_command(initial_context)
242
-
243
- # Configure memory guardian with our command
244
- self.memory_config.process_command = cmd
245
- self.memory_config.working_directory = os.getcwd()
246
-
247
- # Start the process through memory guardian
248
- success = await self.memory_guardian.start_process()
249
- if not success:
250
- raise RuntimeError("Failed to start Claude process")
251
-
252
- # Start memory monitoring
253
- self.memory_guardian.start_monitoring()
254
-
255
- # Wait for process to complete or be restarted
256
- while self.memory_guardian.process_state.value == "running":
257
- await asyncio.sleep(1)
258
-
259
- # Check for memory threshold exceeded
260
- if self.memory_guardian.memory_state.value in ["critical", "emergency"]:
261
- raise MemoryThresholdExceeded(
262
- f"Memory state: {self.memory_guardian.memory_state.value}, "
263
- f"Current: {self.memory_guardian.memory_stats.current_mb:.2f}MB"
264
- )
265
-
266
- async def _perform_controlled_restart(self):
267
- """Perform a controlled restart with state preservation."""
268
- self.logger.info(f"Performing controlled restart (attempt {self.restart_count + 1}/{self.max_restarts})")
269
-
270
- # Capture state before restart
271
- if self.state_manager:
272
- state = await self.state_manager.capture_state(
273
- restart_reason=f"Memory threshold exceeded (restart {self.restart_count + 1})"
274
- )
275
- if state:
276
- await self.state_manager.persist_state(state)
277
- self.logger.info("State captured and persisted")
278
-
279
- # Restart through memory guardian
280
- success = await self.memory_guardian.restart_process(
281
- reason=f"Memory threshold exceeded (automatic restart {self.restart_count + 1})"
282
- )
283
-
284
- if not success:
285
- raise RuntimeError("Failed to restart Claude process")
286
-
287
- # Restore state after restart
288
- if self.state_manager:
289
- restored = await self.state_manager.restore_state()
290
- if restored:
291
- self.logger.info("State restored successfully")
292
-
293
- def _build_claude_command(self, initial_context: Optional[str]) -> List[str]:
294
- """Build the Claude command line.
295
-
296
- Returns:
297
- List of command arguments
298
- """
299
- # Find Claude CLI executable
300
- claude_cli = "claude" # Assume it's in PATH
301
-
302
- # Build command
303
- cmd = [claude_cli]
304
-
305
- # Add context if provided
306
- if initial_context:
307
- # Save context to temp file
308
- import tempfile
309
- with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as f:
310
- f.write(initial_context)
311
- context_file = f.name
312
-
313
- cmd.extend(['--context-file', context_file])
314
-
315
- # Add any additional Claude arguments
316
- if self.claude_args:
317
- cmd.extend(self.claude_args)
318
-
319
- return cmd
320
-
321
- def _display_monitoring_info(self):
322
- """Display memory monitoring configuration to user."""
323
- print("\n" + "="*60)
324
- print("🛡️ Memory Guardian Active")
325
- print("="*60)
326
- print(f"Memory Thresholds:")
327
- print(f" • Warning: {self.memory_config.thresholds.warning:,.0f} MB")
328
- print(f" • Critical: {self.memory_config.thresholds.critical:,.0f} MB")
329
- print(f" • Emergency: {self.memory_config.thresholds.emergency:,.0f} MB")
330
- print(f"Monitoring:")
331
- print(f" • Check Interval: {self.memory_config.monitoring.normal_interval} seconds")
332
- print(f" • Max Restarts: {self.max_restarts}")
333
- print(f" • State Preservation: {'Enabled' if self.state_manager else 'Disabled'}")
334
- print("="*60 + "\n")
335
-
336
- def get_monitoring_status(self) -> Dict[str, Any]:
337
- """Get current monitoring status.
338
-
339
- Returns:
340
- Dictionary containing monitoring status
341
- """
342
- if not self.memory_guardian:
343
- return {
344
- 'enabled': False,
345
- 'message': 'Memory monitoring not initialized'
346
- }
347
-
348
- return self.memory_guardian.get_status()
349
-
350
-
351
- class MemoryThresholdExceeded(Exception):
352
- """Exception raised when memory threshold is exceeded."""
353
- pass