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
@@ -9,68 +9,68 @@ that dispatches to specific subcommand handlers, maintaining consistency
9
9
  with other command modules like agents.py and memory.py.
10
10
  """
11
11
 
12
+ import subprocess
12
13
  import sys
13
- from pathlib import Path
14
14
 
15
- from ...core.logger import get_logger
16
15
  from ...constants import MonitorCommands
16
+ from ...core.logger import get_logger
17
17
 
18
18
 
19
19
  def manage_monitor(args):
20
20
  """
21
21
  Manage Socket.IO monitoring server.
22
-
22
+
23
23
  WHY: The monitoring server provides real-time insights into Claude MPM sessions,
24
24
  websocket connections, and system performance. This command provides a unified
25
25
  interface for all monitor-related operations.
26
-
26
+
27
27
  DESIGN DECISION: When no subcommand is provided, we show the server status
28
28
  as the default action, giving users a quick overview of the monitoring system.
29
-
29
+
30
30
  Args:
31
31
  args: Parsed command line arguments with monitor_command attribute
32
32
  """
33
33
  logger = get_logger("cli")
34
-
34
+
35
35
  try:
36
36
  # Import ServerManager from socketio_server_manager.py
37
37
  from ...scripts.socketio_server_manager import ServerManager
38
+
38
39
  server_manager = ServerManager()
39
-
40
+
40
41
  if not args.monitor_command:
41
- # No subcommand - show help
42
- # WHY: Since we removed status, show help instead when no subcommand is provided
43
- print("Available monitor commands:")
44
- print(" start - Start the Socket.IO monitoring server")
45
- print(" stop - Stop the Socket.IO monitoring server")
46
- print(" restart - Restart the Socket.IO monitoring server")
47
- print(" port <N> - Start/restart on specific port")
48
- print()
49
- print("Use 'claude-mpm monitor <command> --help' for more information")
50
- return 0
51
-
42
+ # No subcommand - show status as default
43
+ # WHY: Status is the most common operation users want when running monitor without args
44
+ args.verbose = False # Set default for verbose flag
45
+ success = _status_server(args, server_manager)
46
+ return 0 if success else 1
47
+
52
48
  if args.monitor_command == MonitorCommands.START.value:
53
49
  success = _start_server(args, server_manager)
54
50
  return 0 if success else 1
55
-
51
+
56
52
  elif args.monitor_command == MonitorCommands.STOP.value:
57
53
  success = _stop_server(args, server_manager)
58
54
  return 0 if success else 1
59
-
55
+
60
56
  elif args.monitor_command == MonitorCommands.RESTART.value:
61
57
  success = _restart_server(args, server_manager)
62
58
  return 0 if success else 1
63
-
59
+
60
+ elif args.monitor_command == MonitorCommands.STATUS.value:
61
+ success = _status_server(args, server_manager)
62
+ return 0 if success else 1
63
+
64
64
  elif args.monitor_command == MonitorCommands.PORT.value:
65
65
  success = _port_server(args, server_manager)
66
66
  return 0 if success else 1
67
-
67
+
68
68
  else:
69
69
  logger.error(f"Unknown monitor command: {args.monitor_command}")
70
70
  print(f"Unknown monitor command: {args.monitor_command}")
71
- print("Available commands: start, stop, restart, port")
71
+ print("Available commands: start, stop, restart, status, port")
72
72
  return 1
73
-
73
+
74
74
  except ImportError as e:
75
75
  logger.error(f"Server manager not available: {e}")
76
76
  print("Error: Socket.IO server manager not available")
@@ -80,39 +80,39 @@ def manage_monitor(args):
80
80
  logger.error(f"Error managing monitor: {e}")
81
81
  print(f"Error: {e}")
82
82
  return 1
83
-
83
+
84
84
  return 0
85
85
 
86
86
 
87
87
  def _port_server(args, server_manager):
88
88
  """
89
89
  Start or restart the Socket.IO monitoring server on a specific port.
90
-
90
+
91
91
  WHY: Users need to be able to start/restart the monitoring server on a specific
92
92
  port, either if no server is running (start) or if a server is already running
93
93
  on a different port (restart).
94
-
94
+
95
95
  Args:
96
96
  args: Command arguments with required port and optional host
97
97
  server_manager: ServerManager instance
98
-
98
+
99
99
  Returns:
100
100
  bool: True if server started/restarted successfully, False otherwise
101
101
  """
102
102
  port = args.port
103
- host = getattr(args, 'host', 'localhost')
104
-
103
+ host = getattr(args, "host", "localhost")
104
+
105
105
  print(f"Managing Socket.IO monitoring server on port {port}...")
106
106
  print(f"Target: {host}:{port}")
107
107
  print()
108
-
108
+
109
109
  try:
110
110
  # Check if there are any running servers
111
111
  running_servers = server_manager.list_running_servers()
112
-
112
+
113
113
  # Check if server is already running on this port
114
- server_on_port = any(server.get('port') == port for server in running_servers)
115
-
114
+ server_on_port = any(server.get("port") == port for server in running_servers)
115
+
116
116
  if server_on_port:
117
117
  print(f"Server already running on port {port}. Restarting...")
118
118
  success = server_manager.restart_server(port=port)
@@ -122,17 +122,19 @@ def _port_server(args, server_manager):
122
122
  if running_servers:
123
123
  print("Servers running on other ports:")
124
124
  for server in running_servers:
125
- server_port = server.get('port')
126
- server_id = server.get('server_id', 'unknown')
125
+ server_port = server.get("port")
126
+ server_id = server.get("server_id", "unknown")
127
127
  print(f" • Server '{server_id}' on port {server_port}")
128
128
  print()
129
129
  print(f"Starting new server on port {port}...")
130
130
  else:
131
131
  print("No servers currently running. Starting new server...")
132
-
133
- success = server_manager.start_server(port=port, host=host, server_id="monitor-server")
132
+
133
+ success = server_manager.start_server(
134
+ port=port, host=host, server_id="monitor-server"
135
+ )
134
136
  action = "started"
135
-
137
+
136
138
  if success:
137
139
  print()
138
140
  print(f"Monitor server {action} successfully on port {port}")
@@ -150,9 +152,9 @@ def _port_server(args, server_manager):
150
152
  print(f" • Check if port {port} is available: lsof -i :{port}")
151
153
  print(f" • Try a different port: claude-mpm monitor port {port + 1}")
152
154
  print(" • Check system resources: free -h && df -h")
153
-
155
+
154
156
  return success
155
-
157
+
156
158
  except Exception as e:
157
159
  print(f"Error managing server on port {port}: {e}")
158
160
  print()
@@ -166,27 +168,29 @@ def _port_server(args, server_manager):
166
168
  def _start_server(args, server_manager):
167
169
  """
168
170
  Start the Socket.IO monitoring server.
169
-
171
+
170
172
  WHY: Users need to start the monitoring server to enable real-time monitoring
171
173
  of Claude MPM sessions and websocket connections.
172
-
174
+
173
175
  Args:
174
176
  args: Command arguments with optional port and host
175
177
  server_manager: ServerManager instance
176
-
178
+
177
179
  Returns:
178
180
  bool: True if server started successfully, False otherwise
179
181
  """
180
- port = getattr(args, 'port', 8765)
181
- host = getattr(args, 'host', 'localhost')
182
-
182
+ port = getattr(args, "port", 8765)
183
+ host = getattr(args, "host", "localhost")
184
+
183
185
  print(f"Starting Socket.IO monitoring server...")
184
186
  print(f"Target: {host}:{port}")
185
187
  print()
186
-
188
+
187
189
  try:
188
- success = server_manager.start_server(port=port, host=host, server_id="monitor-server")
189
-
190
+ success = server_manager.start_server(
191
+ port=port, host=host, server_id="monitor-server"
192
+ )
193
+
190
194
  if success:
191
195
  print()
192
196
  print("Monitor server management commands:")
@@ -195,9 +199,9 @@ def _start_server(args, server_manager):
195
199
  print(f" Restart: claude-mpm monitor restart")
196
200
  print()
197
201
  print(f"WebSocket URL: ws://{host}:{port}")
198
-
202
+
199
203
  return success
200
-
204
+
201
205
  except Exception as e:
202
206
  print(f"Failed to start monitoring server: {e}")
203
207
  print()
@@ -211,21 +215,21 @@ def _start_server(args, server_manager):
211
215
  def _stop_server(args, server_manager):
212
216
  """
213
217
  Stop the Socket.IO monitoring server.
214
-
218
+
215
219
  WHY: Users need to stop the monitoring server when it's no longer needed
216
220
  or when troubleshooting connection issues.
217
-
221
+
218
222
  Args:
219
223
  args: Command arguments with optional port
220
224
  server_manager: ServerManager instance
221
-
225
+
222
226
  Returns:
223
227
  bool: True if server stopped successfully, False otherwise
224
228
  """
225
- port = getattr(args, 'port', None)
226
-
229
+ port = getattr(args, "port", None)
230
+
227
231
  print("Stopping Socket.IO monitoring server...")
228
-
232
+
229
233
  try:
230
234
  # If no port specified, try to find running servers and stop them
231
235
  if port is None:
@@ -233,23 +237,23 @@ def _stop_server(args, server_manager):
233
237
  if not running_servers:
234
238
  print("No running servers found to stop")
235
239
  return True
236
-
240
+
237
241
  # Stop the first server (or all if multiple)
238
242
  success = True
239
243
  for server in running_servers:
240
- server_port = server.get('port')
241
- server_id = server.get('server_id', 'unknown')
244
+ server_port = server.get("port")
245
+ server_id = server.get("server_id", "unknown")
242
246
  print(f"Stopping server '{server_id}' on port {server_port}...")
243
-
247
+
244
248
  if not server_manager.stop_server(port=server_port):
245
249
  print(f"Failed to stop server on port {server_port}")
246
250
  success = False
247
-
251
+
248
252
  return success
249
253
  else:
250
254
  # Stop specific server on given port
251
255
  success = server_manager.stop_server(port=port)
252
-
256
+
253
257
  if success:
254
258
  print(f"Monitor server stopped on port {port}")
255
259
  else:
@@ -258,49 +262,167 @@ def _stop_server(args, server_manager):
258
262
  print("Troubleshooting:")
259
263
  print(f" • Check if server is running: claude-mpm monitor status")
260
264
  print(f" • Try force kill: kill $(lsof -ti :{port})")
261
-
265
+
262
266
  return success
263
-
267
+
264
268
  except Exception as e:
265
269
  print(f"Error stopping server: {e}")
266
270
  return False
267
271
 
268
272
 
273
+ def _status_server(args, server_manager):
274
+ """
275
+ Check the status of Socket.IO monitoring servers.
276
+
277
+ WHY: Users need to check if the monitoring server is running, what port
278
+ it's using, and other diagnostic information without starting/stopping it.
279
+
280
+ Args:
281
+ args: Command arguments with optional verbose flag
282
+ server_manager: ServerManager instance
283
+
284
+ Returns:
285
+ bool: True if status check succeeded, False otherwise
286
+ """
287
+ verbose = getattr(args, "verbose", False)
288
+
289
+ print("Checking Socket.IO monitoring server status...")
290
+ print()
291
+
292
+ try:
293
+ # Check for daemon server using socketio_daemon.py
294
+ daemon_script = server_manager.daemon_script
295
+ if daemon_script and daemon_script.exists():
296
+ # Try to get status from daemon
297
+ result = subprocess.run(
298
+ [sys.executable, str(daemon_script), "status"],
299
+ capture_output=True,
300
+ text=True
301
+ )
302
+
303
+ if result.returncode == 0 and result.stdout:
304
+ # Daemon provided status information
305
+ print(result.stdout)
306
+
307
+ if verbose:
308
+ # Show additional information
309
+ print("\nAdditional Details:")
310
+ print("─" * 40)
311
+
312
+ # List all running servers from ServerManager
313
+ running_servers = server_manager.list_running_servers()
314
+ if running_servers:
315
+ print(f"Found {len(running_servers)} running server(s):")
316
+ for server in running_servers:
317
+ server_port = server.get("port", "unknown")
318
+ server_id = server.get("server_id", "unknown")
319
+ server_pid = server.get("pid", "unknown")
320
+ print(f" • Server '{server_id}'")
321
+ print(f" Port: {server_port}")
322
+ print(f" PID: {server_pid}")
323
+ else:
324
+ print("No additional servers found via ServerManager")
325
+
326
+ return True
327
+
328
+ # Fall back to ServerManager's list_running_servers
329
+ running_servers = server_manager.list_running_servers()
330
+
331
+ if not running_servers:
332
+ print("❌ No Socket.IO monitoring servers are currently running")
333
+ print()
334
+ print("To start a server:")
335
+ print(" claude-mpm monitor start")
336
+ print(" claude-mpm monitor start --port 8765")
337
+ return True
338
+
339
+ # Display server information
340
+ print(f"✅ Found {len(running_servers)} running server(s):")
341
+ print()
342
+
343
+ for server in running_servers:
344
+ server_port = server.get("port", "unknown")
345
+ server_id = server.get("server_id", "unknown")
346
+ server_pid = server.get("pid", "unknown")
347
+ server_host = server.get("host", "localhost")
348
+
349
+ print(f"Server: {server_id}")
350
+ print(f" • PID: {server_pid}")
351
+ print(f" • Port: {server_port}")
352
+ print(f" • Host: {server_host}")
353
+ print(f" • WebSocket URL: ws://{server_host}:{server_port}")
354
+
355
+ if verbose:
356
+ # Check if port is actually listening
357
+ try:
358
+ import socket
359
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
360
+ result = sock.connect_ex((server_host, server_port))
361
+ sock.close()
362
+ if result == 0:
363
+ print(f" • Status: ✅ Listening")
364
+ else:
365
+ print(f" • Status: ⚠️ Not responding on port")
366
+ except Exception as e:
367
+ print(f" • Status: ❌ Error checking: {e}")
368
+
369
+ print()
370
+
371
+ print("Server management commands:")
372
+ print(" Stop all: claude-mpm monitor stop")
373
+ print(" Restart: claude-mpm monitor restart")
374
+ if len(running_servers) == 1:
375
+ port = running_servers[0].get("port", 8765)
376
+ print(f" Stop this: claude-mpm monitor stop --port {port}")
377
+
378
+ return True
379
+
380
+ except Exception as e:
381
+ print(f"Error checking server status: {e}")
382
+ print()
383
+ print("Try manual checks:")
384
+ print(" • Process list: ps aux | grep socketio")
385
+ print(" • Port usage: lsof -i :8765")
386
+ return False
387
+
388
+
269
389
  def _restart_server(args, server_manager):
270
390
  """
271
391
  Restart the Socket.IO monitoring server.
272
-
392
+
273
393
  WHY: Users need to restart the monitoring server to apply configuration
274
394
  changes or recover from error states.
275
-
395
+
276
396
  Args:
277
397
  args: Command arguments with optional port
278
398
  server_manager: ServerManager instance
279
-
399
+
280
400
  Returns:
281
401
  bool: True if server restarted successfully, False otherwise
282
402
  """
283
- port = getattr(args, 'port', None)
284
-
403
+ port = getattr(args, "port", None)
404
+
285
405
  print("Restarting Socket.IO monitoring server...")
286
-
406
+
287
407
  try:
288
408
  # If no port specified, find running servers to restart
289
409
  if port is None:
290
410
  running_servers = server_manager.list_running_servers()
291
411
  if not running_servers:
292
- print("No running servers found. Starting new server on default port...")
412
+ print(
413
+ "No running servers found. Starting new server on default port..."
414
+ )
293
415
  return _start_server(args, server_manager)
294
-
416
+
295
417
  # Restart the first server found
296
418
  server = running_servers[0]
297
- port = server.get('port', 8765)
298
-
419
+ port = server.get("port", 8765)
420
+
299
421
  print(f"Using port {port} for restart...")
300
-
422
+
301
423
  # Use ServerManager's restart method
302
424
  success = server_manager.restart_server(port=port)
303
-
425
+
304
426
  if success:
305
427
  print(f"Monitor server restarted successfully on port {port}")
306
428
  print()
@@ -316,13 +438,13 @@ def _restart_server(args, server_manager):
316
438
  print(f" claude-mpm monitor stop --port {port}")
317
439
  print(f" claude-mpm monitor start --port {port}")
318
440
  print(" • Check server logs for errors")
319
-
441
+
320
442
  return success
321
-
443
+
322
444
  except Exception as e:
323
445
  print(f"Error restarting server: {e}")
324
446
  print()
325
447
  print("Fallback options:")
326
448
  print(" • Manual restart: stop then start")
327
449
  print(" • Check system resources and try again")
328
- return False
450
+ return False