claude-mpm 4.1.1__py3-none-any.whl → 4.1.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 (389) hide show
  1. claude_mpm/BUILD_NUMBER +1 -1
  2. claude_mpm/VERSION +1 -1
  3. claude_mpm/__main__.py +1 -1
  4. claude_mpm/agents/BASE_PM.md +74 -46
  5. claude_mpm/agents/INSTRUCTIONS.md +11 -153
  6. claude_mpm/agents/WORKFLOW.md +61 -321
  7. claude_mpm/agents/__init__.py +11 -11
  8. claude_mpm/agents/agent_loader.py +23 -20
  9. claude_mpm/agents/agent_loader_integration.py +1 -1
  10. claude_mpm/agents/agents_metadata.py +27 -0
  11. claude_mpm/agents/async_agent_loader.py +5 -8
  12. claude_mpm/agents/base_agent_loader.py +36 -25
  13. claude_mpm/agents/frontmatter_validator.py +6 -6
  14. claude_mpm/agents/schema/agent_schema.json +1 -1
  15. claude_mpm/agents/system_agent_config.py +9 -9
  16. claude_mpm/agents/templates/api_qa.json +47 -2
  17. claude_mpm/agents/templates/engineer.json +33 -11
  18. claude_mpm/agents/templates/imagemagick.json +256 -0
  19. claude_mpm/agents/templates/qa.json +41 -2
  20. claude_mpm/agents/templates/ticketing.json +5 -5
  21. claude_mpm/agents/templates/web_qa.json +50 -2
  22. claude_mpm/cli/__init__.py +51 -46
  23. claude_mpm/cli/__main__.py +1 -1
  24. claude_mpm/cli/commands/__init__.py +10 -12
  25. claude_mpm/cli/commands/agent_manager.py +186 -181
  26. claude_mpm/cli/commands/agents.py +648 -1098
  27. claude_mpm/cli/commands/aggregate.py +30 -29
  28. claude_mpm/cli/commands/cleanup.py +50 -44
  29. claude_mpm/cli/commands/cleanup_orphaned_agents.py +25 -25
  30. claude_mpm/cli/commands/config.py +162 -127
  31. claude_mpm/cli/commands/doctor.py +52 -62
  32. claude_mpm/cli/commands/info.py +37 -25
  33. claude_mpm/cli/commands/mcp.py +3 -7
  34. claude_mpm/cli/commands/mcp_command_router.py +14 -18
  35. claude_mpm/cli/commands/mcp_install_commands.py +28 -23
  36. claude_mpm/cli/commands/mcp_pipx_config.py +58 -49
  37. claude_mpm/cli/commands/mcp_server_commands.py +23 -17
  38. claude_mpm/cli/commands/memory.py +339 -967
  39. claude_mpm/cli/commands/monitor.py +117 -88
  40. claude_mpm/cli/commands/run.py +233 -542
  41. claude_mpm/cli/commands/socketio_monitor.py +17 -19
  42. claude_mpm/cli/commands/tickets.py +92 -92
  43. claude_mpm/cli/parser.py +1 -5
  44. claude_mpm/cli/parsers/__init__.py +1 -1
  45. claude_mpm/cli/parsers/agent_manager_parser.py +50 -98
  46. claude_mpm/cli/parsers/agents_parser.py +2 -3
  47. claude_mpm/cli/parsers/base_parser.py +7 -5
  48. claude_mpm/cli/parsers/mcp_parser.py +4 -2
  49. claude_mpm/cli/parsers/monitor_parser.py +26 -18
  50. claude_mpm/cli/shared/__init__.py +10 -10
  51. claude_mpm/cli/shared/argument_patterns.py +57 -71
  52. claude_mpm/cli/shared/base_command.py +61 -53
  53. claude_mpm/cli/shared/error_handling.py +62 -58
  54. claude_mpm/cli/shared/output_formatters.py +78 -77
  55. claude_mpm/cli/startup_logging.py +280 -172
  56. claude_mpm/cli/utils.py +10 -11
  57. claude_mpm/cli_module/__init__.py +1 -1
  58. claude_mpm/cli_module/args.py +1 -1
  59. claude_mpm/cli_module/migration_example.py +5 -5
  60. claude_mpm/config/__init__.py +9 -9
  61. claude_mpm/config/agent_config.py +15 -14
  62. claude_mpm/config/experimental_features.py +4 -4
  63. claude_mpm/config/paths.py +0 -1
  64. claude_mpm/config/socketio_config.py +5 -6
  65. claude_mpm/constants.py +1 -2
  66. claude_mpm/core/__init__.py +8 -8
  67. claude_mpm/core/agent_name_normalizer.py +1 -1
  68. claude_mpm/core/agent_registry.py +22 -29
  69. claude_mpm/core/agent_session_manager.py +3 -3
  70. claude_mpm/core/base_service.py +7 -15
  71. claude_mpm/core/cache.py +4 -6
  72. claude_mpm/core/claude_runner.py +85 -113
  73. claude_mpm/core/config.py +43 -28
  74. claude_mpm/core/config_aliases.py +0 -9
  75. claude_mpm/core/config_constants.py +52 -30
  76. claude_mpm/core/constants.py +0 -1
  77. claude_mpm/core/container.py +18 -27
  78. claude_mpm/core/exceptions.py +2 -2
  79. claude_mpm/core/factories.py +10 -12
  80. claude_mpm/core/framework_loader.py +500 -680
  81. claude_mpm/core/hook_manager.py +26 -22
  82. claude_mpm/core/hook_performance_config.py +58 -47
  83. claude_mpm/core/injectable_service.py +1 -1
  84. claude_mpm/core/interactive_session.py +61 -152
  85. claude_mpm/core/interfaces.py +1 -100
  86. claude_mpm/core/lazy.py +5 -5
  87. claude_mpm/core/log_manager.py +587 -0
  88. claude_mpm/core/logger.py +125 -8
  89. claude_mpm/core/logging_config.py +15 -17
  90. claude_mpm/core/minimal_framework_loader.py +5 -8
  91. claude_mpm/core/oneshot_session.py +15 -33
  92. claude_mpm/core/optimized_agent_loader.py +4 -6
  93. claude_mpm/core/optimized_startup.py +2 -1
  94. claude_mpm/core/output_style_manager.py +147 -106
  95. claude_mpm/core/pm_hook_interceptor.py +0 -1
  96. claude_mpm/core/service_registry.py +11 -8
  97. claude_mpm/core/session_manager.py +1 -2
  98. claude_mpm/core/shared/__init__.py +1 -1
  99. claude_mpm/core/shared/config_loader.py +101 -97
  100. claude_mpm/core/shared/path_resolver.py +72 -68
  101. claude_mpm/core/shared/singleton_manager.py +56 -50
  102. claude_mpm/core/socketio_pool.py +26 -6
  103. claude_mpm/core/tool_access_control.py +4 -5
  104. claude_mpm/core/typing_utils.py +50 -59
  105. claude_mpm/core/unified_agent_registry.py +14 -19
  106. claude_mpm/core/unified_config.py +4 -6
  107. claude_mpm/core/unified_paths.py +197 -109
  108. claude_mpm/dashboard/open_dashboard.py +2 -4
  109. claude_mpm/experimental/cli_enhancements.py +51 -36
  110. claude_mpm/generators/agent_profile_generator.py +2 -4
  111. claude_mpm/hooks/base_hook.py +1 -2
  112. claude_mpm/hooks/claude_hooks/connection_pool.py +72 -26
  113. claude_mpm/hooks/claude_hooks/event_handlers.py +99 -154
  114. claude_mpm/hooks/claude_hooks/hook_handler.py +110 -720
  115. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +104 -77
  116. claude_mpm/hooks/claude_hooks/hook_handler_original.py +1040 -0
  117. claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +347 -0
  118. claude_mpm/hooks/claude_hooks/memory_integration.py +2 -4
  119. claude_mpm/hooks/claude_hooks/response_tracking.py +15 -11
  120. claude_mpm/hooks/claude_hooks/services/__init__.py +13 -0
  121. claude_mpm/hooks/claude_hooks/services/connection_manager.py +190 -0
  122. claude_mpm/hooks/claude_hooks/services/duplicate_detector.py +106 -0
  123. claude_mpm/hooks/claude_hooks/services/state_manager.py +282 -0
  124. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +374 -0
  125. claude_mpm/hooks/claude_hooks/tool_analysis.py +12 -18
  126. claude_mpm/hooks/memory_integration_hook.py +5 -5
  127. claude_mpm/hooks/tool_call_interceptor.py +1 -1
  128. claude_mpm/hooks/validation_hooks.py +4 -4
  129. claude_mpm/init.py +4 -9
  130. claude_mpm/models/__init__.py +2 -2
  131. claude_mpm/models/agent_session.py +11 -14
  132. claude_mpm/scripts/mcp_server.py +20 -11
  133. claude_mpm/scripts/mcp_wrapper.py +5 -5
  134. claude_mpm/scripts/mpm_doctor.py +321 -0
  135. claude_mpm/scripts/socketio_daemon.py +28 -25
  136. claude_mpm/scripts/socketio_daemon_hardened.py +298 -258
  137. claude_mpm/scripts/socketio_server_manager.py +116 -95
  138. claude_mpm/services/__init__.py +49 -49
  139. claude_mpm/services/agent_capabilities_service.py +12 -18
  140. claude_mpm/services/agents/__init__.py +22 -22
  141. claude_mpm/services/agents/agent_builder.py +140 -119
  142. claude_mpm/services/agents/deployment/__init__.py +3 -3
  143. claude_mpm/services/agents/deployment/agent_config_provider.py +9 -9
  144. claude_mpm/services/agents/deployment/agent_configuration_manager.py +19 -20
  145. claude_mpm/services/agents/deployment/agent_definition_factory.py +1 -5
  146. claude_mpm/services/agents/deployment/agent_deployment.py +129 -511
  147. claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -8
  148. claude_mpm/services/agents/deployment/agent_environment_manager.py +2 -7
  149. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +6 -10
  150. claude_mpm/services/agents/deployment/agent_format_converter.py +11 -15
  151. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +2 -3
  152. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -5
  153. claude_mpm/services/agents/deployment/agent_metrics_collector.py +13 -19
  154. claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -1
  155. claude_mpm/services/agents/deployment/agent_template_builder.py +26 -35
  156. claude_mpm/services/agents/deployment/agent_validator.py +0 -1
  157. claude_mpm/services/agents/deployment/agent_version_manager.py +7 -9
  158. claude_mpm/services/agents/deployment/agent_versioning.py +3 -3
  159. claude_mpm/services/agents/deployment/agents_directory_resolver.py +6 -7
  160. claude_mpm/services/agents/deployment/async_agent_deployment.py +51 -38
  161. claude_mpm/services/agents/deployment/base_agent_locator.py +132 -0
  162. claude_mpm/services/agents/deployment/config/__init__.py +1 -1
  163. claude_mpm/services/agents/deployment/config/deployment_config.py +7 -8
  164. claude_mpm/services/agents/deployment/deployment_results_manager.py +185 -0
  165. claude_mpm/services/agents/deployment/deployment_type_detector.py +1 -1
  166. claude_mpm/services/agents/deployment/deployment_wrapper.py +18 -18
  167. claude_mpm/services/agents/deployment/facade/__init__.py +1 -1
  168. claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -3
  169. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -4
  170. claude_mpm/services/agents/deployment/interface_adapter.py +5 -7
  171. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +345 -276
  172. claude_mpm/services/agents/deployment/pipeline/__init__.py +2 -2
  173. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +1 -1
  174. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +6 -4
  175. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +3 -3
  176. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +2 -2
  177. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +14 -13
  178. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -1
  179. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +1 -1
  180. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +8 -9
  181. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +1 -1
  182. claude_mpm/services/agents/deployment/processors/__init__.py +1 -1
  183. claude_mpm/services/agents/deployment/processors/agent_processor.py +20 -16
  184. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +5 -12
  185. claude_mpm/services/agents/deployment/results/__init__.py +1 -1
  186. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +1 -1
  187. claude_mpm/services/agents/deployment/single_agent_deployer.py +315 -0
  188. claude_mpm/services/agents/deployment/strategies/__init__.py +2 -2
  189. claude_mpm/services/agents/deployment/strategies/base_strategy.py +1 -7
  190. claude_mpm/services/agents/deployment/strategies/project_strategy.py +1 -4
  191. claude_mpm/services/agents/deployment/strategies/system_strategy.py +2 -3
  192. claude_mpm/services/agents/deployment/strategies/user_strategy.py +3 -7
  193. claude_mpm/services/agents/deployment/validation/__init__.py +1 -1
  194. claude_mpm/services/agents/deployment/validation/agent_validator.py +1 -1
  195. claude_mpm/services/agents/deployment/validation/template_validator.py +2 -2
  196. claude_mpm/services/agents/deployment/validation/validation_result.py +2 -6
  197. claude_mpm/services/agents/loading/__init__.py +1 -1
  198. claude_mpm/services/agents/loading/agent_profile_loader.py +6 -12
  199. claude_mpm/services/agents/loading/base_agent_manager.py +5 -5
  200. claude_mpm/services/agents/loading/framework_agent_loader.py +2 -4
  201. claude_mpm/services/agents/management/__init__.py +1 -1
  202. claude_mpm/services/agents/management/agent_capabilities_generator.py +1 -3
  203. claude_mpm/services/agents/management/agent_management_service.py +5 -9
  204. claude_mpm/services/agents/memory/__init__.py +4 -4
  205. claude_mpm/services/agents/memory/agent_memory_manager.py +157 -503
  206. claude_mpm/services/agents/memory/agent_persistence_service.py +0 -2
  207. claude_mpm/services/agents/memory/content_manager.py +44 -38
  208. claude_mpm/services/agents/memory/memory_categorization_service.py +165 -0
  209. claude_mpm/services/agents/memory/memory_file_service.py +103 -0
  210. claude_mpm/services/agents/memory/memory_format_service.py +201 -0
  211. claude_mpm/services/agents/memory/memory_limits_service.py +99 -0
  212. claude_mpm/services/agents/memory/template_generator.py +4 -6
  213. claude_mpm/services/agents/registry/__init__.py +11 -7
  214. claude_mpm/services/agents/registry/deployed_agent_discovery.py +30 -27
  215. claude_mpm/services/agents/registry/modification_tracker.py +3 -6
  216. claude_mpm/services/async_session_logger.py +1 -2
  217. claude_mpm/services/claude_session_logger.py +1 -2
  218. claude_mpm/services/cli/__init__.py +18 -0
  219. claude_mpm/services/cli/agent_cleanup_service.py +407 -0
  220. claude_mpm/services/cli/agent_dependency_service.py +395 -0
  221. claude_mpm/services/cli/agent_listing_service.py +463 -0
  222. claude_mpm/services/cli/agent_output_formatter.py +605 -0
  223. claude_mpm/services/cli/agent_validation_service.py +589 -0
  224. claude_mpm/services/cli/dashboard_launcher.py +424 -0
  225. claude_mpm/services/cli/memory_crud_service.py +617 -0
  226. claude_mpm/services/cli/memory_output_formatter.py +604 -0
  227. claude_mpm/services/cli/session_manager.py +513 -0
  228. claude_mpm/services/cli/socketio_manager.py +498 -0
  229. claude_mpm/services/cli/startup_checker.py +370 -0
  230. claude_mpm/services/command_deployment_service.py +173 -0
  231. claude_mpm/services/command_handler_service.py +20 -22
  232. claude_mpm/services/core/__init__.py +25 -25
  233. claude_mpm/services/core/base.py +0 -5
  234. claude_mpm/services/core/cache_manager.py +311 -0
  235. claude_mpm/services/core/interfaces/__init__.py +32 -32
  236. claude_mpm/services/core/interfaces/agent.py +0 -21
  237. claude_mpm/services/core/interfaces/communication.py +0 -27
  238. claude_mpm/services/core/interfaces/infrastructure.py +0 -56
  239. claude_mpm/services/core/interfaces/service.py +0 -29
  240. claude_mpm/services/core/memory_manager.py +637 -0
  241. claude_mpm/services/core/path_resolver.py +498 -0
  242. claude_mpm/services/core/service_container.py +520 -0
  243. claude_mpm/services/core/service_interfaces.py +436 -0
  244. claude_mpm/services/diagnostics/__init__.py +1 -1
  245. claude_mpm/services/diagnostics/checks/__init__.py +6 -6
  246. claude_mpm/services/diagnostics/checks/agent_check.py +152 -97
  247. claude_mpm/services/diagnostics/checks/base_check.py +12 -16
  248. claude_mpm/services/diagnostics/checks/claude_desktop_check.py +84 -81
  249. claude_mpm/services/diagnostics/checks/common_issues_check.py +99 -91
  250. claude_mpm/services/diagnostics/checks/configuration_check.py +82 -77
  251. claude_mpm/services/diagnostics/checks/filesystem_check.py +67 -68
  252. claude_mpm/services/diagnostics/checks/installation_check.py +254 -94
  253. claude_mpm/services/diagnostics/checks/mcp_check.py +90 -88
  254. claude_mpm/services/diagnostics/checks/monitor_check.py +75 -76
  255. claude_mpm/services/diagnostics/checks/startup_log_check.py +67 -73
  256. claude_mpm/services/diagnostics/diagnostic_runner.py +67 -59
  257. claude_mpm/services/diagnostics/doctor_reporter.py +107 -70
  258. claude_mpm/services/diagnostics/models.py +21 -19
  259. claude_mpm/services/event_aggregator.py +10 -17
  260. claude_mpm/services/event_bus/__init__.py +1 -1
  261. claude_mpm/services/event_bus/config.py +54 -35
  262. claude_mpm/services/event_bus/event_bus.py +76 -71
  263. claude_mpm/services/event_bus/relay.py +74 -64
  264. claude_mpm/services/events/__init__.py +11 -11
  265. claude_mpm/services/events/consumers/__init__.py +3 -3
  266. claude_mpm/services/events/consumers/dead_letter.py +71 -63
  267. claude_mpm/services/events/consumers/logging.py +39 -37
  268. claude_mpm/services/events/consumers/metrics.py +56 -57
  269. claude_mpm/services/events/consumers/socketio.py +82 -81
  270. claude_mpm/services/events/core.py +110 -99
  271. claude_mpm/services/events/interfaces.py +56 -72
  272. claude_mpm/services/events/producers/__init__.py +1 -1
  273. claude_mpm/services/events/producers/hook.py +38 -38
  274. claude_mpm/services/events/producers/system.py +46 -44
  275. claude_mpm/services/exceptions.py +81 -80
  276. claude_mpm/services/framework_claude_md_generator/__init__.py +2 -4
  277. claude_mpm/services/framework_claude_md_generator/content_assembler.py +3 -5
  278. claude_mpm/services/framework_claude_md_generator/content_validator.py +1 -1
  279. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +4 -4
  280. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -1
  281. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -2
  282. claude_mpm/services/framework_claude_md_generator/version_manager.py +4 -5
  283. claude_mpm/services/hook_service.py +6 -9
  284. claude_mpm/services/infrastructure/__init__.py +1 -1
  285. claude_mpm/services/infrastructure/context_preservation.py +8 -12
  286. claude_mpm/services/infrastructure/monitoring.py +21 -23
  287. claude_mpm/services/mcp_gateway/__init__.py +37 -37
  288. claude_mpm/services/mcp_gateway/auto_configure.py +95 -103
  289. claude_mpm/services/mcp_gateway/config/__init__.py +1 -1
  290. claude_mpm/services/mcp_gateway/config/config_loader.py +23 -25
  291. claude_mpm/services/mcp_gateway/config/config_schema.py +5 -5
  292. claude_mpm/services/mcp_gateway/config/configuration.py +9 -6
  293. claude_mpm/services/mcp_gateway/core/__init__.py +10 -10
  294. claude_mpm/services/mcp_gateway/core/base.py +0 -3
  295. claude_mpm/services/mcp_gateway/core/interfaces.py +1 -38
  296. claude_mpm/services/mcp_gateway/core/process_pool.py +99 -93
  297. claude_mpm/services/mcp_gateway/core/singleton_manager.py +65 -62
  298. claude_mpm/services/mcp_gateway/core/startup_verification.py +75 -74
  299. claude_mpm/services/mcp_gateway/main.py +2 -1
  300. claude_mpm/services/mcp_gateway/registry/service_registry.py +5 -8
  301. claude_mpm/services/mcp_gateway/registry/tool_registry.py +1 -1
  302. claude_mpm/services/mcp_gateway/server/__init__.py +1 -1
  303. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +12 -19
  304. claude_mpm/services/mcp_gateway/server/stdio_handler.py +4 -3
  305. claude_mpm/services/mcp_gateway/server/stdio_server.py +79 -71
  306. claude_mpm/services/mcp_gateway/tools/__init__.py +2 -2
  307. claude_mpm/services/mcp_gateway/tools/base_adapter.py +5 -6
  308. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +13 -22
  309. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +79 -78
  310. claude_mpm/services/mcp_gateway/tools/hello_world.py +12 -14
  311. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +42 -49
  312. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +51 -55
  313. claude_mpm/services/memory/__init__.py +3 -3
  314. claude_mpm/services/memory/builder.py +3 -6
  315. claude_mpm/services/memory/cache/__init__.py +1 -1
  316. claude_mpm/services/memory/cache/shared_prompt_cache.py +3 -5
  317. claude_mpm/services/memory/cache/simple_cache.py +1 -1
  318. claude_mpm/services/memory/indexed_memory.py +5 -7
  319. claude_mpm/services/memory/optimizer.py +7 -10
  320. claude_mpm/services/memory/router.py +8 -9
  321. claude_mpm/services/memory_hook_service.py +48 -34
  322. claude_mpm/services/monitor_build_service.py +77 -73
  323. claude_mpm/services/port_manager.py +130 -108
  324. claude_mpm/services/project/analyzer.py +12 -10
  325. claude_mpm/services/project/registry.py +11 -11
  326. claude_mpm/services/recovery_manager.py +10 -19
  327. claude_mpm/services/response_tracker.py +0 -1
  328. claude_mpm/services/runner_configuration_service.py +19 -20
  329. claude_mpm/services/session_management_service.py +7 -11
  330. claude_mpm/services/shared/__init__.py +1 -1
  331. claude_mpm/services/shared/async_service_base.py +58 -50
  332. claude_mpm/services/shared/config_service_base.py +73 -67
  333. claude_mpm/services/shared/lifecycle_service_base.py +82 -78
  334. claude_mpm/services/shared/manager_base.py +94 -82
  335. claude_mpm/services/shared/service_factory.py +96 -98
  336. claude_mpm/services/socketio/__init__.py +3 -3
  337. claude_mpm/services/socketio/client_proxy.py +5 -5
  338. claude_mpm/services/socketio/event_normalizer.py +199 -181
  339. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  340. claude_mpm/services/socketio/handlers/base.py +5 -4
  341. claude_mpm/services/socketio/handlers/connection.py +163 -136
  342. claude_mpm/services/socketio/handlers/file.py +13 -14
  343. claude_mpm/services/socketio/handlers/git.py +12 -7
  344. claude_mpm/services/socketio/handlers/hook.py +49 -44
  345. claude_mpm/services/socketio/handlers/memory.py +0 -1
  346. claude_mpm/services/socketio/handlers/project.py +0 -1
  347. claude_mpm/services/socketio/handlers/registry.py +37 -19
  348. claude_mpm/services/socketio/migration_utils.py +98 -84
  349. claude_mpm/services/socketio/server/__init__.py +1 -1
  350. claude_mpm/services/socketio/server/broadcaster.py +81 -87
  351. claude_mpm/services/socketio/server/core.py +65 -54
  352. claude_mpm/services/socketio/server/eventbus_integration.py +95 -56
  353. claude_mpm/services/socketio/server/main.py +64 -38
  354. claude_mpm/services/socketio_client_manager.py +10 -12
  355. claude_mpm/services/subprocess_launcher_service.py +4 -7
  356. claude_mpm/services/system_instructions_service.py +13 -14
  357. claude_mpm/services/ticket_manager.py +2 -2
  358. claude_mpm/services/utility_service.py +5 -13
  359. claude_mpm/services/version_control/__init__.py +16 -16
  360. claude_mpm/services/version_control/branch_strategy.py +5 -8
  361. claude_mpm/services/version_control/conflict_resolution.py +9 -23
  362. claude_mpm/services/version_control/git_operations.py +5 -7
  363. claude_mpm/services/version_control/semantic_versioning.py +16 -17
  364. claude_mpm/services/version_control/version_parser.py +13 -18
  365. claude_mpm/services/version_service.py +10 -11
  366. claude_mpm/storage/__init__.py +1 -1
  367. claude_mpm/storage/state_storage.py +22 -28
  368. claude_mpm/utils/__init__.py +6 -6
  369. claude_mpm/utils/agent_dependency_loader.py +47 -33
  370. claude_mpm/utils/config_manager.py +11 -14
  371. claude_mpm/utils/dependency_cache.py +1 -1
  372. claude_mpm/utils/dependency_manager.py +13 -17
  373. claude_mpm/utils/dependency_strategies.py +8 -10
  374. claude_mpm/utils/environment_context.py +3 -9
  375. claude_mpm/utils/error_handler.py +3 -13
  376. claude_mpm/utils/file_utils.py +1 -1
  377. claude_mpm/utils/path_operations.py +8 -12
  378. claude_mpm/utils/robust_installer.py +110 -33
  379. claude_mpm/utils/subprocess_utils.py +5 -6
  380. claude_mpm/validation/agent_validator.py +3 -6
  381. claude_mpm/validation/frontmatter_validator.py +1 -1
  382. {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/METADATA +1 -1
  383. claude_mpm-4.1.3.dist-info/RECORD +528 -0
  384. claude_mpm/cli/commands/run_config_checker.py +0 -160
  385. claude_mpm-4.1.1.dist-info/RECORD +0 -494
  386. {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/WHEEL +0 -0
  387. {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/entry_points.txt +0 -0
  388. {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/licenses/LICENSE +0 -0
  389. {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.3.dist-info}/top_level.txt +0 -0
@@ -36,12 +36,10 @@ class SocketIOServiceInterface(ABC):
36
36
  @abstractmethod
37
37
  def start_sync(self) -> None:
38
38
  """Start the WebSocket server synchronously."""
39
- pass
40
39
 
41
40
  @abstractmethod
42
41
  def stop_sync(self) -> None:
43
42
  """Stop the WebSocket server synchronously."""
44
- pass
45
43
 
46
44
  @abstractmethod
47
45
  def broadcast_event(self, event_type: str, data: Dict[str, Any]) -> None:
@@ -51,7 +49,6 @@ class SocketIOServiceInterface(ABC):
51
49
  event_type: Type of event to broadcast
52
50
  data: Event data to send
53
51
  """
54
- pass
55
52
 
56
53
  @abstractmethod
57
54
  def send_to_client(
@@ -67,7 +64,6 @@ class SocketIOServiceInterface(ABC):
67
64
  Returns:
68
65
  True if message sent successfully
69
66
  """
70
- pass
71
67
 
72
68
  @abstractmethod
73
69
  def get_connection_count(self) -> int:
@@ -76,7 +72,6 @@ class SocketIOServiceInterface(ABC):
76
72
  Returns:
77
73
  Number of connected clients
78
74
  """
79
- pass
80
75
 
81
76
  @abstractmethod
82
77
  def is_running(self) -> bool:
@@ -85,7 +80,6 @@ class SocketIOServiceInterface(ABC):
85
80
  Returns:
86
81
  True if server is active
87
82
  """
88
- pass
89
83
 
90
84
  @abstractmethod
91
85
  def session_started(
@@ -98,12 +92,10 @@ class SocketIOServiceInterface(ABC):
98
92
  launch_method: Method used to launch the session
99
93
  working_dir: Working directory of the session
100
94
  """
101
- pass
102
95
 
103
96
  @abstractmethod
104
97
  def session_ended(self) -> None:
105
98
  """Notify that a session has ended."""
106
- pass
107
99
 
108
100
  @abstractmethod
109
101
  def claude_status_changed(
@@ -116,7 +108,6 @@ class SocketIOServiceInterface(ABC):
116
108
  pid: Process ID if applicable
117
109
  message: Optional status message
118
110
  """
119
- pass
120
111
 
121
112
  @abstractmethod
122
113
  def agent_delegated(self, agent: str, task: str, status: str = "started") -> None:
@@ -127,7 +118,6 @@ class SocketIOServiceInterface(ABC):
127
118
  task: Task assigned to the agent
128
119
  status: Status of the delegation
129
120
  """
130
- pass
131
121
 
132
122
  @abstractmethod
133
123
  def todo_updated(self, todos: List[Dict[str, Any]]) -> None:
@@ -136,7 +126,6 @@ class SocketIOServiceInterface(ABC):
136
126
  Args:
137
127
  todos: Updated list of todo items
138
128
  """
139
- pass
140
129
 
141
130
 
142
131
  # Project analyzer interface
@@ -161,7 +150,6 @@ class ProjectAnalyzerInterface(ABC):
161
150
  Returns:
162
151
  Dictionary with project analysis results
163
152
  """
164
- pass
165
153
 
166
154
  @abstractmethod
167
155
  def detect_technology_stack(self) -> List[str]:
@@ -170,7 +158,6 @@ class ProjectAnalyzerInterface(ABC):
170
158
  Returns:
171
159
  List of detected technologies
172
160
  """
173
- pass
174
161
 
175
162
  @abstractmethod
176
163
  def analyze_code_patterns(self) -> Dict[str, Any]:
@@ -179,7 +166,6 @@ class ProjectAnalyzerInterface(ABC):
179
166
  Returns:
180
167
  Dictionary of pattern analysis results
181
168
  """
182
- pass
183
169
 
184
170
  @abstractmethod
185
171
  def get_project_structure(self) -> Dict[str, Any]:
@@ -188,7 +174,6 @@ class ProjectAnalyzerInterface(ABC):
188
174
  Returns:
189
175
  Dictionary representing project structure
190
176
  """
191
- pass
192
177
 
193
178
  @abstractmethod
194
179
  def identify_entry_points(self) -> List[Path]:
@@ -197,7 +182,6 @@ class ProjectAnalyzerInterface(ABC):
197
182
  Returns:
198
183
  List of entry point paths
199
184
  """
200
- pass
201
185
 
202
186
  @abstractmethod
203
187
  def get_dependencies(self) -> Dict[str, List[str]]:
@@ -206,7 +190,6 @@ class ProjectAnalyzerInterface(ABC):
206
190
  Returns:
207
191
  Dictionary mapping dependency types to lists of dependencies
208
192
  """
209
- pass
210
193
 
211
194
  @abstractmethod
212
195
  def analyze_test_coverage(self) -> Dict[str, Any]:
@@ -215,7 +198,6 @@ class ProjectAnalyzerInterface(ABC):
215
198
  Returns:
216
199
  Dictionary with test coverage information
217
200
  """
218
- pass
219
201
 
220
202
  @abstractmethod
221
203
  def get_build_configuration(self) -> Dict[str, Any]:
@@ -224,7 +206,6 @@ class ProjectAnalyzerInterface(ABC):
224
206
  Returns:
225
207
  Dictionary with build configuration details
226
208
  """
227
- pass
228
209
 
229
210
 
230
211
  # Ticket manager interface
@@ -253,7 +234,6 @@ class TicketManagerInterface(ABC):
253
234
  Returns:
254
235
  Ticket ID
255
236
  """
256
- pass
257
237
 
258
238
  @abstractmethod
259
239
  def get_ticket(self, ticket_id: str) -> Optional[Dict[str, Any]]:
@@ -265,7 +245,6 @@ class TicketManagerInterface(ABC):
265
245
  Returns:
266
246
  Ticket data or None if not found
267
247
  """
268
- pass
269
248
 
270
249
  @abstractmethod
271
250
  def update_ticket(self, ticket_id: str, updates: Dict[str, Any]) -> bool:
@@ -278,7 +257,6 @@ class TicketManagerInterface(ABC):
278
257
  Returns:
279
258
  True if update successful
280
259
  """
281
- pass
282
260
 
283
261
  @abstractmethod
284
262
  def list_tickets(
@@ -293,7 +271,6 @@ class TicketManagerInterface(ABC):
293
271
  Returns:
294
272
  List of ticket data
295
273
  """
296
- pass
297
274
 
298
275
  @abstractmethod
299
276
  def assign_ticket(self, ticket_id: str, assignee: str) -> bool:
@@ -306,7 +283,6 @@ class TicketManagerInterface(ABC):
306
283
  Returns:
307
284
  True if assignment successful
308
285
  """
309
- pass
310
286
 
311
287
  @abstractmethod
312
288
  def close_ticket(self, ticket_id: str, resolution: Optional[str] = None) -> bool:
@@ -319,7 +295,6 @@ class TicketManagerInterface(ABC):
319
295
  Returns:
320
296
  True if close successful
321
297
  """
322
- pass
323
298
 
324
299
  @abstractmethod
325
300
  def search_tickets(self, query: str) -> List[Dict[str, Any]]:
@@ -331,7 +306,6 @@ class TicketManagerInterface(ABC):
331
306
  Returns:
332
307
  List of matching ticket data
333
308
  """
334
- pass
335
309
 
336
310
  @abstractmethod
337
311
  def get_ticket_statistics(self) -> Dict[str, Any]:
@@ -340,4 +314,3 @@ class TicketManagerInterface(ABC):
340
314
  Returns:
341
315
  Dictionary with ticket statistics
342
316
  """
343
- pass
@@ -35,27 +35,22 @@ class IServiceContainer(ABC):
35
35
  self, service_type: type, implementation: type, singleton: bool = True
36
36
  ) -> None:
37
37
  """Register a service implementation"""
38
- pass
39
38
 
40
39
  @abstractmethod
41
40
  def register_instance(self, service_type: type, instance: Any) -> None:
42
41
  """Register a service instance"""
43
- pass
44
42
 
45
43
  @abstractmethod
46
44
  def resolve(self, service_type: type) -> Any:
47
45
  """Resolve a service by type"""
48
- pass
49
46
 
50
47
  @abstractmethod
51
48
  def resolve_all(self, service_type: type) -> List[Any]:
52
49
  """Resolve all implementations of a service type"""
53
- pass
54
50
 
55
51
  @abstractmethod
56
52
  def is_registered(self, service_type: type) -> bool:
57
53
  """Check if a service type is registered"""
58
- pass
59
54
 
60
55
 
61
56
  # Configuration management interfaces
@@ -65,22 +60,18 @@ class IConfigurationService(ABC):
65
60
  @abstractmethod
66
61
  def get(self, key: str, default: Any = None) -> Any:
67
62
  """Get configuration value by key"""
68
- pass
69
63
 
70
64
  @abstractmethod
71
65
  def set(self, key: str, value: Any) -> None:
72
66
  """Set configuration value"""
73
- pass
74
67
 
75
68
  @abstractmethod
76
69
  def reload(self) -> None:
77
70
  """Reload configuration from source"""
78
- pass
79
71
 
80
72
  @abstractmethod
81
73
  def shutdown(self) -> None:
82
74
  """Shutdown configuration service"""
83
- pass
84
75
 
85
76
 
86
77
  class IConfigurationManager(ABC):
@@ -89,32 +80,26 @@ class IConfigurationManager(ABC):
89
80
  @abstractmethod
90
81
  def get(self, key: str, default: Any = None) -> Any:
91
82
  """Get configuration value by key"""
92
- pass
93
83
 
94
84
  @abstractmethod
95
85
  def set(self, key: str, value: Any) -> None:
96
86
  """Set configuration value"""
97
- pass
98
87
 
99
88
  @abstractmethod
100
89
  def validate_config(self, config: Dict[str, Any]) -> Tuple[bool, List[str]]:
101
90
  """Validate configuration structure and values"""
102
- pass
103
91
 
104
92
  @abstractmethod
105
93
  def load_from_file(self, config_path: Path) -> None:
106
94
  """Load configuration from file"""
107
- pass
108
95
 
109
96
  @abstractmethod
110
97
  def save_to_file(self, config_path: Path) -> None:
111
98
  """Save configuration to file"""
112
- pass
113
99
 
114
100
  @abstractmethod
115
101
  def watch_changes(self, callback: callable) -> None:
116
102
  """Watch for configuration changes"""
117
- pass
118
103
 
119
104
 
120
105
  # Cache service interface
@@ -124,32 +109,26 @@ class ICacheService(ABC):
124
109
  @abstractmethod
125
110
  def get(self, key: str) -> Any:
126
111
  """Get value from cache"""
127
- pass
128
112
 
129
113
  @abstractmethod
130
114
  def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
131
115
  """Set value in cache with optional TTL"""
132
- pass
133
116
 
134
117
  @abstractmethod
135
118
  def delete(self, key: str) -> bool:
136
119
  """Delete key from cache"""
137
- pass
138
120
 
139
121
  @abstractmethod
140
122
  def invalidate(self, pattern: str) -> int:
141
123
  """Invalidate keys matching pattern"""
142
- pass
143
124
 
144
125
  @abstractmethod
145
126
  def clear(self) -> None:
146
127
  """Clear all cache entries"""
147
- pass
148
128
 
149
129
  @abstractmethod
150
130
  def get_cache_metrics(self) -> Dict[str, Any]:
151
131
  """Get cache performance metrics"""
152
- pass
153
132
 
154
133
 
155
134
  # Health monitoring interface
@@ -170,22 +149,18 @@ class IHealthMonitor(ABC):
170
149
  @abstractmethod
171
150
  async def check_health(self, service_name: str) -> HealthStatus:
172
151
  """Check health of a specific service"""
173
- pass
174
152
 
175
153
  @abstractmethod
176
154
  async def check_all_services(self) -> Dict[str, HealthStatus]:
177
155
  """Check health of all registered services"""
178
- pass
179
156
 
180
157
  @abstractmethod
181
158
  def register_health_check(self, service_name: str, check_func: callable) -> None:
182
159
  """Register a health check function for a service"""
183
- pass
184
160
 
185
161
  @abstractmethod
186
162
  def get_health_summary(self) -> Dict[str, Any]:
187
163
  """Get overall health summary"""
188
- pass
189
164
 
190
165
 
191
166
  # Prompt cache interface
@@ -211,27 +186,22 @@ class IPromptCache(ABC):
211
186
  @abstractmethod
212
187
  def get(self, key: str) -> Optional[Any]:
213
188
  """Get cached value by key"""
214
- pass
215
189
 
216
190
  @abstractmethod
217
191
  def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
218
192
  """Set cached value with optional TTL"""
219
- pass
220
193
 
221
194
  @abstractmethod
222
195
  def invalidate(self, pattern: str) -> int:
223
196
  """Invalidate cache entries matching pattern"""
224
- pass
225
197
 
226
198
  @abstractmethod
227
199
  def get_stats(self) -> Dict[str, Any]:
228
200
  """Get cache statistics"""
229
- pass
230
201
 
231
202
  @abstractmethod
232
203
  def clear(self) -> None:
233
204
  """Clear all cache entries"""
234
- pass
235
205
 
236
206
 
237
207
  # Template management interface
@@ -253,17 +223,14 @@ class ITemplateManager(ABC):
253
223
  self, template_content: str, context: TemplateRenderContext
254
224
  ) -> str:
255
225
  """Render template with given context"""
256
- pass
257
226
 
258
227
  @abstractmethod
259
228
  async def load_template(self, template_path: Path) -> str:
260
229
  """Load template from file"""
261
- pass
262
230
 
263
231
  @abstractmethod
264
232
  def register_function(self, name: str, func: callable) -> None:
265
233
  """Register custom template function"""
266
- pass
267
234
 
268
235
 
269
236
  # Service factory interface
@@ -273,17 +240,14 @@ class IServiceFactory(Generic[ServiceType], ABC):
273
240
  @abstractmethod
274
241
  def create(self, **kwargs) -> ServiceType:
275
242
  """Create service instance"""
276
- pass
277
243
 
278
244
  @abstractmethod
279
245
  def get_service_type(self) -> type:
280
246
  """Get the service type this factory creates"""
281
- pass
282
247
 
283
248
  @abstractmethod
284
249
  def supports(self, service_type: type) -> bool:
285
250
  """Check if factory supports service type"""
286
- pass
287
251
 
288
252
 
289
253
  # Logging interface
@@ -293,27 +257,22 @@ class IStructuredLogger(ABC):
293
257
  @abstractmethod
294
258
  def debug(self, message: str, **kwargs) -> None:
295
259
  """Log debug message with structured data"""
296
- pass
297
260
 
298
261
  @abstractmethod
299
262
  def info(self, message: str, **kwargs) -> None:
300
263
  """Log info message with structured data"""
301
- pass
302
264
 
303
265
  @abstractmethod
304
266
  def warning(self, message: str, **kwargs) -> None:
305
267
  """Log warning message with structured data"""
306
- pass
307
268
 
308
269
  @abstractmethod
309
270
  def error(self, message: str, **kwargs) -> None:
310
271
  """Log error message with structured data"""
311
- pass
312
272
 
313
273
  @abstractmethod
314
274
  def set_context(self, **kwargs) -> None:
315
275
  """Set logging context for all subsequent messages"""
316
- pass
317
276
 
318
277
 
319
278
  # Service lifecycle interface
@@ -323,27 +282,22 @@ class IServiceLifecycle(ABC):
323
282
  @abstractmethod
324
283
  async def initialize(self) -> None:
325
284
  """Initialize the service"""
326
- pass
327
285
 
328
286
  @abstractmethod
329
287
  async def start(self) -> None:
330
288
  """Start the service"""
331
- pass
332
289
 
333
290
  @abstractmethod
334
291
  async def stop(self) -> None:
335
292
  """Stop the service"""
336
- pass
337
293
 
338
294
  @abstractmethod
339
295
  async def restart(self) -> None:
340
296
  """Restart the service"""
341
- pass
342
297
 
343
298
  @abstractmethod
344
299
  def is_running(self) -> bool:
345
300
  """Check if service is running"""
346
- pass
347
301
 
348
302
 
349
303
  # Error handling interface
@@ -353,12 +307,10 @@ class IErrorHandler(ABC):
353
307
  @abstractmethod
354
308
  def handle_error(self, error: Exception, context: Dict[str, Any]) -> None:
355
309
  """Handle error with context"""
356
- pass
357
310
 
358
311
  @abstractmethod
359
312
  def get_error_stats(self) -> Dict[str, Any]:
360
313
  """Get error statistics"""
361
- pass
362
314
 
363
315
 
364
316
  # Performance monitoring interface
@@ -368,24 +320,20 @@ class IPerformanceMonitor(ABC):
368
320
  @abstractmethod
369
321
  def start_timer(self, operation: str) -> str:
370
322
  """Start timing an operation"""
371
- pass
372
323
 
373
324
  @abstractmethod
374
325
  def end_timer(self, timer_id: str) -> float:
375
326
  """End timing and return duration"""
376
- pass
377
327
 
378
328
  @abstractmethod
379
329
  def record_metric(
380
330
  self, name: str, value: float, tags: Optional[Dict[str, str]] = None
381
331
  ) -> None:
382
332
  """Record a performance metric"""
383
- pass
384
333
 
385
334
  @abstractmethod
386
335
  def get_metrics(self) -> Dict[str, Any]:
387
336
  """Get performance metrics"""
388
- pass
389
337
 
390
338
 
391
339
  # Event system interface
@@ -395,19 +343,15 @@ class IEventBus(ABC):
395
343
  @abstractmethod
396
344
  def publish(self, event_type: str, data: Any) -> None:
397
345
  """Publish an event"""
398
- pass
399
346
 
400
347
  @abstractmethod
401
348
  def subscribe(self, event_type: str, handler: callable) -> str:
402
349
  """Subscribe to an event type"""
403
- pass
404
350
 
405
351
  @abstractmethod
406
352
  def unsubscribe(self, subscription_id: str) -> None:
407
353
  """Unsubscribe from events"""
408
- pass
409
354
 
410
355
  @abstractmethod
411
356
  async def publish_async(self, event_type: str, data: Any) -> None:
412
357
  """Publish an event asynchronously"""
413
- pass