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
@@ -0,0 +1,436 @@
1
+ """
2
+ Consolidated Core Service Interfaces
3
+ ====================================
4
+
5
+ WHY: This module consolidates all core service interfaces from across the codebase
6
+ to provide a single source of truth for service contracts. This enables better
7
+ dependency injection and service management.
8
+
9
+ DESIGN DECISION: Rather than having interfaces scattered across multiple files,
10
+ we consolidate them here while maintaining backward compatibility through imports
11
+ in the original locations.
12
+
13
+ INCLUDES:
14
+ - ICacheManager (from cache_manager.py)
15
+ - IPathResolver (new)
16
+ - IMemoryManager (new)
17
+ - IFrameworkLoader (new)
18
+ - Other core service interfaces needed for DI
19
+ """
20
+
21
+ from abc import ABC, abstractmethod
22
+ from pathlib import Path
23
+ from typing import Any, Dict, List, Optional, Set, Tuple
24
+
25
+ # Import CLI service interfaces
26
+
27
+ # Re-export infrastructure interfaces for convenience
28
+
29
+
30
+ # Cache Manager Interface (moved from cache_manager.py)
31
+ class ICacheManager(ABC):
32
+ """Interface for framework-specific cache management service."""
33
+
34
+ @abstractmethod
35
+ def get_capabilities(self) -> Optional[str]:
36
+ """Get cached agent capabilities."""
37
+
38
+ @abstractmethod
39
+ def set_capabilities(self, value: str) -> None:
40
+ """Set agent capabilities cache."""
41
+
42
+ @abstractmethod
43
+ def get_deployed_agents(self) -> Optional[Set[str]]:
44
+ """Get cached deployed agents set."""
45
+
46
+ @abstractmethod
47
+ def set_deployed_agents(self, agents: Set[str]) -> None:
48
+ """Set deployed agents cache."""
49
+
50
+ @abstractmethod
51
+ def get_agent_metadata(
52
+ self, agent_file: str
53
+ ) -> Optional[Tuple[Optional[Dict[str, Any]], float]]:
54
+ """Get cached agent metadata for a specific file."""
55
+
56
+ @abstractmethod
57
+ def set_agent_metadata(
58
+ self, agent_file: str, metadata: Optional[Dict[str, Any]], mtime: float
59
+ ) -> None:
60
+ """Set agent metadata cache for a specific file."""
61
+
62
+ @abstractmethod
63
+ def get_memories(self) -> Optional[Dict[str, Any]]:
64
+ """Get cached memories."""
65
+
66
+ @abstractmethod
67
+ def set_memories(self, memories: Dict[str, Any]) -> None:
68
+ """Set memories cache."""
69
+
70
+ @abstractmethod
71
+ def clear_all(self) -> None:
72
+ """Clear all caches."""
73
+
74
+ @abstractmethod
75
+ def clear_agent_caches(self) -> None:
76
+ """Clear agent-related caches only."""
77
+
78
+ @abstractmethod
79
+ def clear_memory_caches(self) -> None:
80
+ """Clear memory-related caches only."""
81
+
82
+ @abstractmethod
83
+ def is_cache_valid(self, cache_time: float, ttl: float) -> bool:
84
+ """Check if a cache entry is still valid based on its timestamp and TTL."""
85
+
86
+
87
+ # Path Resolution Interface
88
+ class IPathResolver(ABC):
89
+ """Interface for path resolution and validation service."""
90
+
91
+ @abstractmethod
92
+ def resolve_path(self, path: str, base_dir: Optional[Path] = None) -> Path:
93
+ """
94
+ Resolve a path relative to a base directory.
95
+
96
+ Args:
97
+ path: The path to resolve (can be relative or absolute)
98
+ base_dir: Base directory for relative paths (defaults to cwd)
99
+
100
+ Returns:
101
+ The resolved absolute path
102
+ """
103
+
104
+ @abstractmethod
105
+ def validate_path(self, path: Path, must_exist: bool = False) -> bool:
106
+ """
107
+ Validate a path for security and existence.
108
+
109
+ Args:
110
+ path: The path to validate
111
+ must_exist: Whether the path must exist
112
+
113
+ Returns:
114
+ True if path is valid, False otherwise
115
+ """
116
+
117
+ @abstractmethod
118
+ def ensure_directory(self, path: Path) -> Path:
119
+ """
120
+ Ensure a directory exists, creating it if necessary.
121
+
122
+ Args:
123
+ path: The directory path
124
+
125
+ Returns:
126
+ The directory path
127
+ """
128
+
129
+ @abstractmethod
130
+ def find_project_root(self, start_path: Optional[Path] = None) -> Optional[Path]:
131
+ """
132
+ Find the project root directory.
133
+
134
+ Args:
135
+ start_path: Starting path for search (defaults to cwd)
136
+
137
+ Returns:
138
+ Project root path or None if not found
139
+ """
140
+
141
+
142
+ # Memory Management Interface
143
+ class IMemoryManager(ABC):
144
+ """Interface for agent memory management service."""
145
+
146
+ @abstractmethod
147
+ def load_memories(self, agent_name: Optional[str] = None) -> Dict[str, Any]:
148
+ """
149
+ Load memories for an agent or all agents.
150
+
151
+ Args:
152
+ agent_name: Specific agent name or None for all
153
+
154
+ Returns:
155
+ Dictionary of memories
156
+ """
157
+
158
+ @abstractmethod
159
+ def save_memory(
160
+ self, key: str, value: Any, agent_name: Optional[str] = None
161
+ ) -> None:
162
+ """
163
+ Save a memory entry.
164
+
165
+ Args:
166
+ key: Memory key
167
+ value: Memory value
168
+ agent_name: Agent name or None for global
169
+ """
170
+
171
+ @abstractmethod
172
+ def search_memories(
173
+ self, query: str, agent_name: Optional[str] = None
174
+ ) -> List[Dict[str, Any]]:
175
+ """
176
+ Search memories by query.
177
+
178
+ Args:
179
+ query: Search query
180
+ agent_name: Specific agent or None for all
181
+
182
+ Returns:
183
+ List of matching memory entries
184
+ """
185
+
186
+ @abstractmethod
187
+ def clear_memories(self, agent_name: Optional[str] = None) -> None:
188
+ """
189
+ Clear memories for an agent or all agents.
190
+
191
+ Args:
192
+ agent_name: Specific agent or None for all
193
+ """
194
+
195
+ @abstractmethod
196
+ def get_memory_stats(self) -> Dict[str, Any]:
197
+ """
198
+ Get memory system statistics.
199
+
200
+ Returns:
201
+ Dictionary with memory statistics
202
+ """
203
+
204
+
205
+ # Framework Loader Interface
206
+ class IFrameworkLoader(ABC):
207
+ """Interface for framework loading and instruction management."""
208
+
209
+ @abstractmethod
210
+ def load_instructions(self) -> str:
211
+ """
212
+ Load and format framework instructions.
213
+
214
+ Returns:
215
+ Formatted instructions for injection
216
+ """
217
+
218
+ @abstractmethod
219
+ def get_agent_capabilities(self) -> str:
220
+ """
221
+ Get formatted agent capabilities.
222
+
223
+ Returns:
224
+ Agent capabilities text
225
+ """
226
+
227
+ @abstractmethod
228
+ def get_deployed_agents(self) -> Set[str]:
229
+ """
230
+ Get set of deployed agent names.
231
+
232
+ Returns:
233
+ Set of agent names
234
+ """
235
+
236
+ @abstractmethod
237
+ def reload(self) -> None:
238
+ """Reload framework instructions and clear caches."""
239
+
240
+ @abstractmethod
241
+ def get_version(self) -> Optional[str]:
242
+ """
243
+ Get framework version.
244
+
245
+ Returns:
246
+ Version string or None
247
+ """
248
+
249
+
250
+ # File System Service Interface
251
+ class IFileSystemService(ABC):
252
+ """Interface for file system operations."""
253
+
254
+ @abstractmethod
255
+ def read_file(self, path: Path, encoding: str = "utf-8") -> str:
256
+ """
257
+ Read file contents.
258
+
259
+ Args:
260
+ path: File path
261
+ encoding: File encoding
262
+
263
+ Returns:
264
+ File contents
265
+ """
266
+
267
+ @abstractmethod
268
+ def write_file(self, path: Path, content: str, encoding: str = "utf-8") -> None:
269
+ """
270
+ Write content to file.
271
+
272
+ Args:
273
+ path: File path
274
+ content: Content to write
275
+ encoding: File encoding
276
+ """
277
+
278
+ @abstractmethod
279
+ def copy_file(self, source: Path, destination: Path) -> None:
280
+ """
281
+ Copy file from source to destination.
282
+
283
+ Args:
284
+ source: Source file path
285
+ destination: Destination file path
286
+ """
287
+
288
+ @abstractmethod
289
+ def delete_file(self, path: Path) -> bool:
290
+ """
291
+ Delete a file.
292
+
293
+ Args:
294
+ path: File path
295
+
296
+ Returns:
297
+ True if deleted, False if not found
298
+ """
299
+
300
+ @abstractmethod
301
+ def list_directory(self, path: Path, pattern: Optional[str] = None) -> List[Path]:
302
+ """
303
+ List directory contents.
304
+
305
+ Args:
306
+ path: Directory path
307
+ pattern: Optional glob pattern
308
+
309
+ Returns:
310
+ List of paths
311
+ """
312
+
313
+
314
+ # Environment Service Interface
315
+ class IEnvironmentService(ABC):
316
+ """Interface for environment and configuration management."""
317
+
318
+ @abstractmethod
319
+ def get_env(self, key: str, default: Optional[str] = None) -> Optional[str]:
320
+ """
321
+ Get environment variable.
322
+
323
+ Args:
324
+ key: Environment variable key
325
+ default: Default value if not found
326
+
327
+ Returns:
328
+ Environment value or default
329
+ """
330
+
331
+ @abstractmethod
332
+ def set_env(self, key: str, value: str) -> None:
333
+ """
334
+ Set environment variable.
335
+
336
+ Args:
337
+ key: Environment variable key
338
+ value: Value to set
339
+ """
340
+
341
+ @abstractmethod
342
+ def get_config_dir(self) -> Path:
343
+ """
344
+ Get configuration directory.
345
+
346
+ Returns:
347
+ Configuration directory path
348
+ """
349
+
350
+ @abstractmethod
351
+ def get_data_dir(self) -> Path:
352
+ """
353
+ Get data directory.
354
+
355
+ Returns:
356
+ Data directory path
357
+ """
358
+
359
+ @abstractmethod
360
+ def get_cache_dir(self) -> Path:
361
+ """
362
+ Get cache directory.
363
+
364
+ Returns:
365
+ Cache directory path
366
+ """
367
+
368
+
369
+ # Process Management Interface
370
+ class IProcessManager(ABC):
371
+ """Interface for process and subprocess management."""
372
+
373
+ @abstractmethod
374
+ def run_command(
375
+ self,
376
+ command: List[str],
377
+ cwd: Optional[Path] = None,
378
+ env: Optional[Dict[str, str]] = None,
379
+ timeout: Optional[float] = None,
380
+ ) -> Tuple[int, str, str]:
381
+ """
382
+ Run a command and return result.
383
+
384
+ Args:
385
+ command: Command and arguments
386
+ cwd: Working directory
387
+ env: Environment variables
388
+ timeout: Command timeout in seconds
389
+
390
+ Returns:
391
+ Tuple of (return_code, stdout, stderr)
392
+ """
393
+
394
+ @abstractmethod
395
+ def start_process(
396
+ self,
397
+ command: List[str],
398
+ cwd: Optional[Path] = None,
399
+ env: Optional[Dict[str, str]] = None,
400
+ ) -> int:
401
+ """
402
+ Start a background process.
403
+
404
+ Args:
405
+ command: Command and arguments
406
+ cwd: Working directory
407
+ env: Environment variables
408
+
409
+ Returns:
410
+ Process ID
411
+ """
412
+
413
+ @abstractmethod
414
+ def stop_process(self, pid: int, timeout: float = 5.0) -> bool:
415
+ """
416
+ Stop a process.
417
+
418
+ Args:
419
+ pid: Process ID
420
+ timeout: Timeout for graceful shutdown
421
+
422
+ Returns:
423
+ True if stopped successfully
424
+ """
425
+
426
+ @abstractmethod
427
+ def is_process_running(self, pid: int) -> bool:
428
+ """
429
+ Check if process is running.
430
+
431
+ Args:
432
+ pid: Process ID
433
+
434
+ Returns:
435
+ True if process is running
436
+ """
@@ -15,4 +15,4 @@ from .diagnostic_runner import DiagnosticRunner
15
15
  from .doctor_reporter import DoctorReporter
16
16
  from .models import DiagnosticResult, DiagnosticStatus
17
17
 
18
- __all__ = ["DiagnosticRunner", "DoctorReporter", "DiagnosticResult", "DiagnosticStatus"]
18
+ __all__ = ["DiagnosticResult", "DiagnosticRunner", "DiagnosticStatus", "DoctorReporter"]
@@ -17,14 +17,14 @@ from .monitor_check import MonitorCheck
17
17
  from .startup_log_check import StartupLogCheck
18
18
 
19
19
  __all__ = [
20
+ "AgentCheck",
20
21
  "BaseDiagnosticCheck",
21
- "InstallationCheck",
22
- "ConfigurationCheck",
23
22
  "ClaudeDesktopCheck",
24
- "AgentCheck",
23
+ "CommonIssuesCheck",
24
+ "ConfigurationCheck",
25
+ "FilesystemCheck",
26
+ "InstallationCheck",
25
27
  "MCPCheck",
26
28
  "MonitorCheck",
27
- "FilesystemCheck",
28
- "CommonIssuesCheck",
29
29
  "StartupLogCheck",
30
- ]
30
+ ]