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
@@ -18,7 +18,7 @@ Usage:
18
18
  cache_size = ConfigConstants.get_cache_setting('max_size_mb')
19
19
  """
20
20
 
21
- from typing import Any, Dict, Optional
21
+ from typing import Any, Optional
22
22
 
23
23
  from .unified_config import ConfigurationService
24
24
 
@@ -79,6 +79,11 @@ class ConfigConstants:
79
79
  "max_file_size_mb": 10,
80
80
  "max_memory_usage_mb": 1024,
81
81
  },
82
+ # Logging configuration
83
+ "logging": {
84
+ "startup_logs_retention_count": 10,
85
+ "mpm_logs_retention_count": 10,
86
+ },
82
87
  }
83
88
 
84
89
  @classmethod
@@ -109,18 +114,17 @@ class ConfigConstants:
109
114
 
110
115
  if timeout_type == "hook_execution":
111
116
  return config.performance.hook_timeout_seconds
112
- elif timeout_type == "session_default":
117
+ if timeout_type == "session_default":
113
118
  return config.performance.session_timeout_seconds
114
- elif timeout_type == "session_extended":
119
+ if timeout_type == "session_extended":
115
120
  return config.sessions.session_timeout_minutes * 60
116
- elif timeout_type == "agent_loading":
121
+ if timeout_type == "agent_loading":
117
122
  return config.performance.agent_load_timeout_seconds
118
- elif timeout_type == "startup":
123
+ if timeout_type == "startup":
119
124
  return config.performance.startup_timeout
120
- elif timeout_type == "graceful_shutdown":
125
+ if timeout_type == "graceful_shutdown":
121
126
  return config.performance.graceful_shutdown_timeout
122
- else:
123
- return cls.DEFAULT_VALUES["timeouts"].get(timeout_type, 30)
127
+ return cls.DEFAULT_VALUES["timeouts"].get(timeout_type, 30)
124
128
  except Exception:
125
129
  return cls.DEFAULT_VALUES["timeouts"].get(timeout_type, 30)
126
130
 
@@ -140,12 +144,11 @@ class ConfigConstants:
140
144
 
141
145
  if port_type == "socketio_default":
142
146
  return config.network.socketio_port
143
- elif port_type == "socketio_range_start":
147
+ if port_type == "socketio_range_start":
144
148
  return config.network.socketio_port_range[0]
145
- elif port_type == "socketio_range_end":
149
+ if port_type == "socketio_range_end":
146
150
  return config.network.socketio_port_range[1]
147
- else:
148
- return cls.DEFAULT_VALUES["ports"].get(port_type, 8765)
151
+ return cls.DEFAULT_VALUES["ports"].get(port_type, 8765)
149
152
  except Exception:
150
153
  return cls.DEFAULT_VALUES["ports"].get(port_type, 8765)
151
154
 
@@ -165,15 +168,38 @@ class ConfigConstants:
165
168
 
166
169
  if setting_name == "max_size_mb":
167
170
  return config.performance.cache_max_size_mb
168
- elif setting_name == "max_entries":
171
+ if setting_name == "max_entries":
169
172
  return config.performance.cache_max_entries
170
- elif setting_name == "default_ttl_seconds":
173
+ if setting_name == "default_ttl_seconds":
171
174
  return config.performance.cache_default_ttl_seconds
172
- else:
173
- return cls.DEFAULT_VALUES["cache"].get(setting_name)
175
+ return cls.DEFAULT_VALUES["cache"].get(setting_name)
174
176
  except Exception:
175
177
  return cls.DEFAULT_VALUES["cache"].get(setting_name)
176
178
 
179
+ @classmethod
180
+ def get_logging_setting(cls, setting_name: str) -> Any:
181
+ """
182
+ Get logging setting by name.
183
+
184
+ Args:
185
+ setting_name: Name of logging setting
186
+
187
+ Returns:
188
+ Logging setting value
189
+ """
190
+ try:
191
+ # For now, just return from DEFAULT_VALUES
192
+ # Can be extended to read from unified config later
193
+ return cls.DEFAULT_VALUES["logging"].get(setting_name)
194
+ except Exception:
195
+ # Fallback to default values
196
+ if setting_name in {
197
+ "startup_logs_retention_count",
198
+ "mpm_logs_retention_count",
199
+ }:
200
+ return 10
201
+ return None
202
+
177
203
  @classmethod
178
204
  def get_session_setting(cls, setting_name: str) -> Any:
179
205
  """
@@ -190,12 +216,11 @@ class ConfigConstants:
190
216
 
191
217
  if setting_name == "max_age_minutes":
192
218
  return config.sessions.max_age_minutes
193
- elif setting_name == "cleanup_max_age_hours":
219
+ if setting_name == "cleanup_max_age_hours":
194
220
  return config.sessions.cleanup_max_age_hours
195
- elif setting_name == "timeout_minutes":
221
+ if setting_name == "timeout_minutes":
196
222
  return config.sessions.session_timeout_minutes
197
- else:
198
- return cls.DEFAULT_VALUES["sessions"].get(setting_name)
223
+ return cls.DEFAULT_VALUES["sessions"].get(setting_name)
199
224
  except Exception:
200
225
  return cls.DEFAULT_VALUES["sessions"].get(setting_name)
201
226
 
@@ -215,10 +240,9 @@ class ConfigConstants:
215
240
 
216
241
  if setting_name == "max_restarts":
217
242
  return config.performance.max_restarts
218
- elif setting_name == "max_recovery_attempts":
243
+ if setting_name == "max_recovery_attempts":
219
244
  return config.performance.max_recovery_attempts
220
- else:
221
- return cls.DEFAULT_VALUES["recovery"].get(setting_name, 3)
245
+ return cls.DEFAULT_VALUES["recovery"].get(setting_name, 3)
222
246
  except Exception:
223
247
  return cls.DEFAULT_VALUES["recovery"].get(setting_name, 3)
224
248
 
@@ -238,12 +262,11 @@ class ConfigConstants:
238
262
 
239
263
  if interval_type == "health_check":
240
264
  return config.performance.health_check_interval_seconds
241
- elif interval_type == "polling":
265
+ if interval_type == "polling":
242
266
  return config.performance.polling_interval_seconds
243
- elif interval_type == "batch_window_ms":
267
+ if interval_type == "batch_window_ms":
244
268
  return config.performance.batch_window_ms / 1000.0
245
- else:
246
- return cls.DEFAULT_VALUES["intervals"].get(interval_type, 1.0)
269
+ return cls.DEFAULT_VALUES["intervals"].get(interval_type, 1.0)
247
270
  except Exception:
248
271
  return cls.DEFAULT_VALUES["intervals"].get(interval_type, 1.0)
249
272
 
@@ -263,10 +286,9 @@ class ConfigConstants:
263
286
 
264
287
  if limit_type == "max_file_size_mb":
265
288
  return config.security.max_file_size_mb
266
- elif limit_type == "max_memory_usage_mb":
289
+ if limit_type == "max_memory_usage_mb":
267
290
  return config.performance.max_memory_usage_mb
268
- else:
269
- return cls.DEFAULT_VALUES["limits"].get(limit_type, 100)
291
+ return cls.DEFAULT_VALUES["limits"].get(limit_type, 100)
270
292
  except Exception:
271
293
  return cls.DEFAULT_VALUES["limits"].get(limit_type, 100)
272
294
 
@@ -4,7 +4,6 @@ This module consolidates all magic numbers and configuration constants
4
4
  that were previously scattered throughout the codebase.
5
5
  """
6
6
 
7
- from enum import Enum
8
7
  from typing import Tuple
9
8
 
10
9
 
@@ -13,7 +13,6 @@ that supports:
13
13
 
14
14
  import inspect
15
15
  import threading
16
- from abc import ABC
17
16
  from enum import Enum
18
17
  from typing import Any, Callable, Dict, List, Optional, Set, Type, TypeVar, Union
19
18
 
@@ -76,22 +75,17 @@ class ServiceRegistration:
76
75
  # Get constructor parameters
77
76
  if inspect.isclass(self.implementation):
78
77
  return container.create_instance(self.implementation, self.dependencies)
79
- else:
80
- # It's already an instance or callable
81
- return self.implementation
78
+ # It's already an instance or callable
79
+ return self.implementation
82
80
 
83
81
 
84
82
  class CircularDependencyError(Exception):
85
83
  """Raised when circular dependencies are detected."""
86
84
 
87
- pass
88
-
89
85
 
90
86
  class ServiceNotFoundError(Exception):
91
87
  """Raised when a requested service is not registered."""
92
88
 
93
- pass
94
-
95
89
 
96
90
  class ServiceScope:
97
91
  """
@@ -337,17 +331,16 @@ class DIContainer(IServiceContainer):
337
331
  if not hasattr(self, "_named_singletons"):
338
332
  self._named_singletons = {}
339
333
  self._named_singletons[named_key] = instance
334
+ # Normal registration without name
335
+ elif instance is not None:
336
+ self._register_internal(interface, instance=instance)
337
+ elif implementation is not None and not inspect.isclass(implementation):
338
+ # It's an instance passed as implementation (backward compatibility)
339
+ self._register_internal(interface, instance=implementation)
340
340
  else:
341
- # Normal registration without name
342
- if instance is not None:
343
- self._register_internal(interface, instance=instance)
344
- elif implementation is not None and not inspect.isclass(implementation):
345
- # It's an instance passed as implementation (backward compatibility)
346
- self._register_internal(interface, instance=implementation)
347
- else:
348
- self._register_internal(
349
- interface, implementation, lifetime=ServiceLifetime.SINGLETON
350
- )
341
+ self._register_internal(
342
+ interface, implementation, lifetime=ServiceLifetime.SINGLETON
343
+ )
351
344
 
352
345
  # Handle disposal handler
353
346
  if dispose_handler:
@@ -485,12 +478,11 @@ class DIContainer(IServiceContainer):
485
478
  registration = self._named_registrations[name]
486
479
  if registration.instance is not None:
487
480
  return registration.instance
488
- elif registration.factory:
481
+ if registration.factory:
489
482
  return registration.factory(self)
490
- else:
491
- return self.create_instance(
492
- registration.implementation, registration.dependencies
493
- )
483
+ return self.create_instance(
484
+ registration.implementation, registration.dependencies
485
+ )
494
486
 
495
487
  return self._resolve_internal(interface)
496
488
 
@@ -669,8 +661,7 @@ class DIContainer(IServiceContainer):
669
661
  raise CircularDependencyError(
670
662
  f"Circular dependency detected: {cycle}"
671
663
  )
672
- else:
673
- kwargs[param_name] = self.resolve(param_type)
664
+ kwargs[param_name] = self.resolve(param_type)
674
665
  elif param.default != param.empty:
675
666
  # Use default value
676
667
  kwargs[param_name] = param.default
@@ -813,7 +804,7 @@ class DIContainer(IServiceContainer):
813
804
  type_name = service_type.__name__.lower()
814
805
  similar = []
815
806
 
816
- for registered_type in self._registrations.keys():
807
+ for registered_type in self._registrations:
817
808
  registered_name = registered_type.__name__
818
809
  registered_lower = registered_name.lower()
819
810
 
@@ -845,7 +836,7 @@ class DIContainer(IServiceContainer):
845
836
  name_lower = name.lower()
846
837
  similar = []
847
838
 
848
- for registered_name in self._named_registrations.keys():
839
+ for registered_name in self._named_registrations:
849
840
  registered_lower = registered_name.lower()
850
841
 
851
842
  # Check for substring match
@@ -24,7 +24,7 @@ Usage:
24
24
  raise AgentDeploymentError("Failed to deploy agent to .claude/agents directory")
25
25
  """
26
26
 
27
- from typing import Any, Dict, List, Optional
27
+ from typing import Any, Dict, Optional
28
28
 
29
29
 
30
30
  class MPMError(Exception):
@@ -429,7 +429,7 @@ class ProcessError(MPMError):
429
429
  self.message = f"[Command: {context['command']}] {message}"
430
430
  if "exit_code" in context:
431
431
  self.message += f"\nExit code: {context['exit_code']}"
432
- if "stderr" in context and context["stderr"]:
432
+ if context.get("stderr"):
433
433
  stderr_preview = str(context["stderr"])[:200]
434
434
  self.message += f"\nError output: {stderr_preview}"
435
435
  if len(str(context["stderr"])) > 200:
@@ -7,14 +7,18 @@ Provides factory patterns for services that require complex initialization
7
7
  or have multiple configuration options.
8
8
  """
9
9
 
10
+ import os
10
11
  from abc import ABC, abstractmethod
11
- from typing import Any, Dict, Optional, Type, TypeVar
12
+ from typing import TYPE_CHECKING, Any, Dict, Optional, TypeVar
12
13
 
13
14
  from ..services import AgentDeploymentService
14
15
  from .config import Config
15
16
  from .container import DIContainer
16
17
  from .logger import get_logger
17
18
 
19
+ if TYPE_CHECKING:
20
+ from .unified_config import ConfigurationService
21
+
18
22
  # Note: Orchestration functionality has been replaced by claude_runner
19
23
 
20
24
  logger = get_logger(__name__)
@@ -28,7 +32,6 @@ class ServiceFactory(ABC):
28
32
  @abstractmethod
29
33
  def create(self, container: DIContainer, **kwargs) -> Any:
30
34
  """Create a service instance."""
31
- pass
32
35
 
33
36
 
34
37
  # OrchestratorFactoryWrapper has been removed - orchestration replaced by claude_runner
@@ -57,8 +60,6 @@ class AgentServiceFactory(ServiceFactory):
57
60
  config = container.resolve(Config)
58
61
 
59
62
  # Get directories from config if not provided
60
- import os
61
-
62
63
  if framework_dir is None:
63
64
  framework_dir = Path(config.get("framework.dir", "framework"))
64
65
 
@@ -112,14 +113,13 @@ class SessionManagerFactory(ServiceFactory):
112
113
  return AgentSessionManager(
113
114
  session_dir=session_dir, max_sessions_per_agent=max_sessions
114
115
  )
115
- else:
116
- from ..core.session_manager import SessionManager
116
+ from ..core.session_manager import SessionManager
117
117
 
118
- session_dir = kwargs.get("session_dir") or Path(
119
- config.get("session.dir", ".claude-mpm/sessions")
120
- )
118
+ session_dir = kwargs.get("session_dir") or Path(
119
+ config.get("session.dir", ".claude-mpm/sessions")
120
+ )
121
121
 
122
- return SessionManager(session_dir=session_dir)
122
+ return SessionManager(session_dir=session_dir)
123
123
 
124
124
 
125
125
  class ConfigurationFactory(ServiceFactory):
@@ -148,8 +148,6 @@ class ConfigurationFactory(ServiceFactory):
148
148
  config = Config(config_data or {}, config_path)
149
149
 
150
150
  # Load environment variables
151
- import os
152
-
153
151
  for key, value in os.environ.items():
154
152
  if key.startswith(env_prefix):
155
153
  # Convert CLAUDE_MPM_FOO_BAR to foo.bar