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,511 +0,0 @@
1
- """Run-guarded command implementation for memory-aware Claude execution.
2
-
3
- WHY: This experimental command provides memory monitoring and automatic restart
4
- capabilities for Claude Code sessions, preventing memory-related crashes.
5
-
6
- DESIGN DECISION: This is kept completely separate from the main run command to
7
- ensure stability. It extends ClaudeRunner through MemoryAwareClaudeRunner without
8
- modifying the base implementation.
9
-
10
- STATUS: EXPERIMENTAL - This feature is in beta and may change or have issues.
11
- """
12
-
13
- import argparse
14
- import asyncio
15
- import os
16
- import sys
17
- from pathlib import Path
18
- from typing import Optional, Dict, Any
19
-
20
- from claude_mpm.core.memory_aware_runner import MemoryAwareClaudeRunner
21
- from claude_mpm.core.logging_config import get_logger
22
- from claude_mpm.cli.utils import setup_logging
23
- from claude_mpm.config.experimental_features import get_experimental_features
24
- from claude_mpm.config.memory_guardian_config import (
25
- MemoryGuardianConfig,
26
- MemoryThresholds,
27
- RestartPolicy,
28
- MonitoringConfig,
29
- get_default_config
30
- )
31
- from claude_mpm.constants import LogLevel
32
-
33
-
34
- logger = get_logger(__name__)
35
-
36
-
37
- def add_run_guarded_parser(subparsers) -> argparse.ArgumentParser:
38
- """Add run-guarded command parser.
39
-
40
- Args:
41
- subparsers: Subparsers object from main parser
42
-
43
- Returns:
44
- The run-guarded parser for further configuration
45
- """
46
- parser = subparsers.add_parser(
47
- 'run-guarded',
48
- help='(EXPERIMENTAL) Run Claude with memory monitoring and automatic restart',
49
- description=(
50
- '⚠️ EXPERIMENTAL FEATURE\n\n'
51
- 'Run Claude Code with memory monitoring and automatic restart capabilities. '
52
- 'This command monitors memory usage and performs controlled restarts when '
53
- 'thresholds are exceeded, preserving conversation state across restarts.\n\n'
54
- 'NOTE: This is a beta feature. Use with caution in production environments.'
55
- ),
56
- formatter_class=argparse.RawDescriptionHelpFormatter,
57
- epilog="""
58
- Examples:
59
- # Run with default settings (18GB threshold, 30s checks)
60
- claude-mpm run-guarded
61
-
62
- # Custom memory threshold (in MB)
63
- claude-mpm run-guarded --memory-threshold 16000
64
-
65
- # Faster monitoring for development
66
- claude-mpm run-guarded --check-interval 10
67
-
68
- # Limit restart attempts
69
- claude-mpm run-guarded --max-restarts 5
70
-
71
- # Disable state preservation (faster restarts)
72
- claude-mpm run-guarded --no-state-preservation
73
-
74
- # Use configuration file
75
- claude-mpm run-guarded --config ~/.claude-mpm/memory-guardian.yaml
76
-
77
- Memory thresholds:
78
- - Warning: 80% of threshold (logs warning)
79
- - Critical: 100% of threshold (triggers restart)
80
- - Emergency: 120% of threshold (immediate restart)
81
-
82
- State preservation:
83
- When enabled, the runner captures and restores:
84
- - Current conversation context
85
- - Open files and working directory
86
- - Environment variables
87
- - Recent command history
88
- """
89
- )
90
-
91
- # Memory monitoring options
92
- memory_group = parser.add_argument_group('memory monitoring')
93
- memory_group.add_argument(
94
- '--memory-threshold',
95
- type=float,
96
- default=18000, # 18GB in MB
97
- help='Memory threshold in MB before restart (default: 18000MB/18GB)'
98
- )
99
- memory_group.add_argument(
100
- '--check-interval',
101
- type=int,
102
- default=30,
103
- help='Memory check interval in seconds (default: 30)'
104
- )
105
- memory_group.add_argument(
106
- '--warning-threshold',
107
- type=float,
108
- help='Warning threshold in MB (default: 80%% of memory threshold)'
109
- )
110
- memory_group.add_argument(
111
- '--emergency-threshold',
112
- type=float,
113
- help='Emergency threshold in MB (default: 120%% of memory threshold)'
114
- )
115
-
116
- # Restart policy options
117
- restart_group = parser.add_argument_group('restart policy')
118
- restart_group.add_argument(
119
- '--max-restarts',
120
- type=int,
121
- default=3,
122
- help='Maximum number of automatic restarts (default: 3)'
123
- )
124
- restart_group.add_argument(
125
- '--restart-cooldown',
126
- type=int,
127
- default=10,
128
- help='Cooldown period between restarts in seconds (default: 10)'
129
- )
130
- restart_group.add_argument(
131
- '--graceful-timeout',
132
- type=int,
133
- default=30,
134
- help='Timeout for graceful shutdown in seconds (default: 30)'
135
- )
136
-
137
- # State preservation options
138
- state_group = parser.add_argument_group('state preservation')
139
- state_group.add_argument(
140
- '--enable-state-preservation',
141
- action='store_true',
142
- default=True,
143
- dest='state_preservation',
144
- help='Enable state preservation across restarts (default: enabled)'
145
- )
146
- state_group.add_argument(
147
- '--no-state-preservation',
148
- action='store_false',
149
- dest='state_preservation',
150
- help='Disable state preservation for faster restarts'
151
- )
152
- state_group.add_argument(
153
- '--state-dir',
154
- type=Path,
155
- help='Directory for state files (default: ~/.claude-mpm/state)'
156
- )
157
-
158
- # Configuration file
159
- parser.add_argument(
160
- '--config',
161
- '--config-file',
162
- type=Path,
163
- dest='config_file',
164
- help='Path to memory guardian configuration file (YAML)'
165
- )
166
-
167
- # Monitoring display options
168
- display_group = parser.add_argument_group('display options')
169
- display_group.add_argument(
170
- '--quiet',
171
- action='store_true',
172
- help='Minimal output, only show critical events'
173
- )
174
- display_group.add_argument(
175
- '--verbose',
176
- action='store_true',
177
- help='Verbose output with detailed monitoring information'
178
- )
179
- display_group.add_argument(
180
- '--show-stats',
181
- action='store_true',
182
- help='Display memory statistics periodically'
183
- )
184
- display_group.add_argument(
185
- '--stats-interval',
186
- type=int,
187
- default=60,
188
- help='Statistics display interval in seconds (default: 60)'
189
- )
190
-
191
- # Claude runner options (inherited from run command)
192
- run_group = parser.add_argument_group('claude options')
193
- run_group.add_argument(
194
- '--no-hooks',
195
- action='store_true',
196
- help='Disable hook service'
197
- )
198
- run_group.add_argument(
199
- '--no-tickets',
200
- action='store_true',
201
- help='Disable automatic ticket creation'
202
- )
203
- run_group.add_argument(
204
- '--no-native-agents',
205
- action='store_true',
206
- help='Disable deployment of Claude Code native agents'
207
- )
208
- run_group.add_argument(
209
- '--websocket-port',
210
- type=int,
211
- default=8765,
212
- help='WebSocket server port (default: 8765)'
213
- )
214
-
215
- # Input/output options
216
- io_group = parser.add_argument_group('input/output')
217
- io_group.add_argument(
218
- '-i', '--input',
219
- type=str,
220
- help='Input text or file path for initial context'
221
- )
222
- io_group.add_argument(
223
- '--non-interactive',
224
- action='store_true',
225
- help='Run in non-interactive mode'
226
- )
227
-
228
- # Logging options
229
- logging_group = parser.add_argument_group('logging')
230
- logging_group.add_argument(
231
- '--logging',
232
- choices=[level.value for level in LogLevel],
233
- default=LogLevel.INFO.value,
234
- help='Logging level (default: INFO)'
235
- )
236
- logging_group.add_argument(
237
- '--log-dir',
238
- type=Path,
239
- help='Custom log directory'
240
- )
241
-
242
- # Experimental feature control
243
- experimental_group = parser.add_argument_group('experimental control')
244
- experimental_group.add_argument(
245
- '--accept-experimental',
246
- action='store_true',
247
- help='Accept experimental status and suppress warning'
248
- )
249
- experimental_group.add_argument(
250
- '--force-experimental',
251
- action='store_true',
252
- help='Force run even if experimental features are disabled'
253
- )
254
-
255
- # Claude CLI arguments
256
- parser.add_argument(
257
- 'claude_args',
258
- nargs=argparse.REMAINDER,
259
- help='Additional arguments to pass to Claude CLI'
260
- )
261
-
262
- return parser
263
-
264
-
265
- def load_config_file(config_path: Path) -> Optional[MemoryGuardianConfig]:
266
- """Load memory guardian configuration from YAML file.
267
-
268
- Args:
269
- config_path: Path to configuration file
270
-
271
- Returns:
272
- MemoryGuardianConfig or None if loading failed
273
- """
274
- try:
275
- import yaml
276
-
277
- if not config_path.exists():
278
- logger.warning(f"Configuration file not found: {config_path}")
279
- return None
280
-
281
- with open(config_path, 'r') as f:
282
- config_data = yaml.safe_load(f)
283
-
284
- # Create configuration from YAML data
285
- config = MemoryGuardianConfig()
286
-
287
- # Update thresholds
288
- if 'thresholds' in config_data:
289
- t = config_data['thresholds']
290
- config.thresholds = MemoryThresholds(
291
- warning=t.get('warning', config.thresholds.warning),
292
- critical=t.get('critical', config.thresholds.critical),
293
- emergency=t.get('emergency', config.thresholds.emergency)
294
- )
295
-
296
- # Update monitoring settings
297
- if 'monitoring' in config_data:
298
- m = config_data['monitoring']
299
- config.monitoring = MonitoringConfig(
300
- normal_interval=m.get('normal_interval', config.monitoring.normal_interval),
301
- warning_interval=m.get('warning_interval', config.monitoring.warning_interval),
302
- critical_interval=m.get('critical_interval', config.monitoring.critical_interval),
303
- log_memory_stats=m.get('log_memory_stats', config.monitoring.log_memory_stats),
304
- log_interval=m.get('log_interval', config.monitoring.log_interval)
305
- )
306
-
307
- # Update restart policy
308
- if 'restart_policy' in config_data:
309
- r = config_data['restart_policy']
310
- config.restart_policy = RestartPolicy(
311
- max_attempts=r.get('max_attempts', config.restart_policy.max_attempts),
312
- attempt_window=r.get('attempt_window', config.restart_policy.attempt_window),
313
- initial_cooldown=r.get('initial_cooldown', config.restart_policy.initial_cooldown),
314
- cooldown_multiplier=r.get('cooldown_multiplier', config.restart_policy.cooldown_multiplier),
315
- max_cooldown=r.get('max_cooldown', config.restart_policy.max_cooldown),
316
- graceful_timeout=r.get('graceful_timeout', config.restart_policy.graceful_timeout),
317
- force_kill_timeout=r.get('force_kill_timeout', config.restart_policy.force_kill_timeout)
318
- )
319
-
320
- # Update general settings
321
- config.enabled = config_data.get('enabled', True)
322
- config.auto_start = config_data.get('auto_start', True)
323
- config.persist_state = config_data.get('persist_state', True)
324
-
325
- logger.info(f"Loaded configuration from {config_path}")
326
- return config
327
-
328
- except ImportError:
329
- logger.error("PyYAML not installed. Install with: pip install pyyaml")
330
- return None
331
- except Exception as e:
332
- logger.error(f"Failed to load configuration file: {e}")
333
- return None
334
-
335
-
336
- def execute_run_guarded(args: argparse.Namespace) -> int:
337
- """Execute the run-guarded command.
338
-
339
- WHY: This is the entry point for the experimental memory-guarded execution mode.
340
- It checks experimental feature flags and shows appropriate warnings before
341
- delegating to MemoryAwareClaudeRunner.
342
-
343
- DESIGN DECISION: All experimental checks happen here, before any actual work,
344
- to ensure users are aware they're using beta functionality.
345
-
346
- Args:
347
- args: Parsed command line arguments
348
-
349
- Returns:
350
- Exit code (0 for success, non-zero for failure)
351
- """
352
- try:
353
- # Setup logging
354
- log_level = getattr(args, 'logging', 'INFO')
355
- log_dir = getattr(args, 'log_dir', None)
356
- setup_logging(log_level, log_dir)
357
-
358
- # Check experimental features
359
- experimental = get_experimental_features()
360
-
361
- # Check if Memory Guardian is enabled
362
- if not experimental.is_enabled('memory_guardian') and not getattr(args, 'force_experimental', False):
363
- logger.error("Memory Guardian is an experimental feature that is currently disabled.")
364
- print("\n❌ Memory Guardian is disabled in experimental features configuration.")
365
- print("\nTo enable it:")
366
- print(" 1. Set environment variable: export CLAUDE_MPM_EXPERIMENTAL_ENABLE_MEMORY_GUARDIAN=true")
367
- print(" 2. Or use --force-experimental flag to override")
368
- print(" 3. Or enable in ~/.claude-mpm/experimental.json")
369
- return 1
370
-
371
- # Show experimental warning unless suppressed
372
- if not getattr(args, 'accept_experimental', False):
373
- if experimental.should_show_warning('memory_guardian'):
374
- warning = experimental.get_warning('memory_guardian')
375
- if warning:
376
- print("\n" + warning)
377
- print("\nThis feature is experimental and may:")
378
- print(" • Have bugs or stability issues")
379
- print(" • Change significantly in future versions")
380
- print(" • Not work as expected in all environments")
381
- print("\nContinue? [y/N]: ", end="")
382
-
383
- try:
384
- response = input().strip().lower()
385
- if response != 'y':
386
- print("\n✅ Cancelled. Use the stable 'run' command instead.")
387
- return 0
388
- # Mark as accepted for this session
389
- experimental.mark_accepted('memory_guardian')
390
- except (EOFError, KeyboardInterrupt):
391
- print("\n✅ Cancelled.")
392
- return 0
393
-
394
- logger.info("Starting experimental run-guarded command")
395
-
396
- # Load configuration
397
- config = None
398
- if hasattr(args, 'config_file') and args.config_file:
399
- config = load_config_file(args.config_file)
400
-
401
- if config is None:
402
- # Create configuration from command line arguments
403
- config = MemoryGuardianConfig()
404
-
405
- # Set thresholds
406
- config.thresholds.critical = args.memory_threshold
407
-
408
- if hasattr(args, 'warning_threshold') and args.warning_threshold:
409
- config.thresholds.warning = args.warning_threshold
410
- else:
411
- config.thresholds.warning = args.memory_threshold * 0.8
412
-
413
- if hasattr(args, 'emergency_threshold') and args.emergency_threshold:
414
- config.thresholds.emergency = args.emergency_threshold
415
- else:
416
- config.thresholds.emergency = args.memory_threshold * 1.2
417
-
418
- # Set monitoring settings
419
- config.monitoring.normal_interval = args.check_interval
420
- config.monitoring.log_memory_stats = args.show_stats if hasattr(args, 'show_stats') else False
421
-
422
- if hasattr(args, 'stats_interval'):
423
- config.monitoring.log_interval = args.stats_interval
424
-
425
- # Set restart policy
426
- config.restart_policy.max_attempts = args.max_restarts
427
-
428
- if hasattr(args, 'restart_cooldown'):
429
- config.restart_policy.initial_cooldown = args.restart_cooldown
430
-
431
- if hasattr(args, 'graceful_timeout'):
432
- config.restart_policy.graceful_timeout = args.graceful_timeout
433
-
434
- # Override config with CLI arguments
435
- if hasattr(args, 'memory_threshold'):
436
- config.thresholds.critical = args.memory_threshold
437
-
438
- if hasattr(args, 'check_interval'):
439
- config.monitoring.normal_interval = args.check_interval
440
-
441
- if hasattr(args, 'max_restarts'):
442
- config.restart_policy.max_attempts = args.max_restarts
443
-
444
- # Check mode early to avoid unnecessary setup
445
- if getattr(args, 'non_interactive', False):
446
- logger.error("Non-interactive mode not yet supported for run-guarded")
447
- return 1
448
-
449
- # Determine verbosity
450
- if hasattr(args, 'quiet') and args.quiet:
451
- log_level = 'WARNING'
452
- elif hasattr(args, 'verbose') and args.verbose:
453
- log_level = 'DEBUG'
454
-
455
- # Create runner
456
- runner = MemoryAwareClaudeRunner(
457
- enable_tickets=not getattr(args, 'no_tickets', False),
458
- log_level=log_level,
459
- claude_args=getattr(args, 'claude_args', []),
460
- launch_method='subprocess', # Always subprocess for monitoring
461
- enable_websocket=False, # Could be enabled in future
462
- websocket_port=getattr(args, 'websocket_port', 8765),
463
- memory_config=config,
464
- enable_monitoring=True,
465
- state_dir=getattr(args, 'state_dir', None)
466
- )
467
-
468
- # Deploy agents if not disabled
469
- if not getattr(args, 'no_native_agents', False):
470
- if not runner.setup_agents():
471
- logger.warning("Failed to deploy some agents, continuing anyway")
472
-
473
- # Get initial context if provided
474
- initial_context = None
475
- if hasattr(args, 'input') and args.input:
476
- if Path(args.input).exists():
477
- with open(args.input, 'r') as f:
478
- initial_context = f.read()
479
- else:
480
- initial_context = args.input
481
-
482
- # Run with monitoring
483
- runner.run_interactive_with_monitoring(
484
- initial_context=initial_context,
485
- memory_threshold=config.thresholds.critical,
486
- check_interval=config.monitoring.normal_interval,
487
- max_restarts=config.restart_policy.max_attempts,
488
- enable_state_preservation=getattr(args, 'state_preservation', True)
489
- )
490
-
491
- return 0
492
-
493
- except KeyboardInterrupt:
494
- logger.info("Run-guarded interrupted by user")
495
- return 130 # Standard exit code for SIGINT
496
- except Exception as e:
497
- logger.error(f"Run-guarded failed: {e}", exc_info=True)
498
- return 1
499
-
500
-
501
- # Convenience function for direct module execution
502
- def main():
503
- """Main entry point for run-guarded command."""
504
- parser = argparse.ArgumentParser(description='Run Claude with memory monitoring')
505
- add_run_guarded_parser(parser._subparsers)
506
- args = parser.parse_args()
507
- sys.exit(execute_run_guarded(args))
508
-
509
-
510
- if __name__ == '__main__':
511
- main()