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
@@ -22,11 +22,11 @@ from .steps import (
22
22
  )
23
23
 
24
24
  __all__ = [
25
+ "BaseDeploymentStep",
26
+ "ConfigurationLoadStep",
25
27
  "DeploymentPipelineBuilder",
26
28
  "DeploymentPipelineExecutor",
27
29
  "PipelineContext",
28
- "BaseDeploymentStep",
29
30
  "StepResult",
30
- "ConfigurationLoadStep",
31
31
  "TargetDirectorySetupStep",
32
32
  ]
@@ -1,6 +1,6 @@
1
1
  """Pipeline builder for creating deployment pipelines."""
2
2
 
3
- from typing import Any, Dict, List, Type
3
+ from typing import Dict, List, Type
4
4
 
5
5
  from claude_mpm.core.logger import get_logger
6
6
 
@@ -42,7 +42,9 @@ class PipelineContext:
42
42
  template_files: List[Path] = field(default_factory=list)
43
43
  base_agent_data: Optional[Dict[str, Any]] = None
44
44
  base_agent_version: Optional[tuple] = None
45
- agent_sources: Dict[str, str] = field(default_factory=dict) # Maps agent names to sources
45
+ agent_sources: Dict[str, str] = field(
46
+ default_factory=dict
47
+ ) # Maps agent names to sources
46
48
 
47
49
  # Deployment results
48
50
  results: Dict[str, Any] = field(default_factory=dict)
@@ -110,9 +112,9 @@ class PipelineContext:
110
112
  """Initialize the results dictionary with default structure."""
111
113
  if not self.results:
112
114
  self.results = {
113
- "target_dir": str(self.actual_target_dir)
114
- if self.actual_target_dir
115
- else "",
115
+ "target_dir": (
116
+ str(self.actual_target_dir) if self.actual_target_dir else ""
117
+ ),
116
118
  "deployed": [],
117
119
  "updated": [],
118
120
  "migrated": [],
@@ -6,7 +6,7 @@ from typing import Any, Dict, List
6
6
  from claude_mpm.core.logger import get_logger
7
7
 
8
8
  from .pipeline_context import PipelineContext
9
- from .steps.base_step import BaseDeploymentStep, StepResult, StepStatus
9
+ from .steps.base_step import BaseDeploymentStep
10
10
 
11
11
 
12
12
  class DeploymentPipelineExecutor:
@@ -93,7 +93,7 @@ class DeploymentPipelineExecutor:
93
93
  step_execution_time = time.time() - step_start_time
94
94
  context.step_timings[step.name] = step_execution_time
95
95
 
96
- error_msg = f"Unexpected error in step {step.name}: {str(e)}"
96
+ error_msg = f"Unexpected error in step {step.name}: {e!s}"
97
97
  self.logger.error(error_msg, exc_info=True)
98
98
  context.add_error(error_msg)
99
99
  failed_steps.append(step.name)
@@ -152,7 +152,7 @@ class DeploymentPipelineExecutor:
152
152
 
153
153
  # Check for duplicate step names
154
154
  step_names = [step.name for step in steps]
155
- duplicates = set([name for name in step_names if step_names.count(name) > 1])
155
+ duplicates = {name for name in step_names if step_names.count(name) > 1}
156
156
  if duplicates:
157
157
  errors.append(f"Duplicate step names found: {duplicates}")
158
158
 
@@ -11,9 +11,9 @@ from .configuration_step import ConfigurationLoadStep
11
11
  from .target_directory_step import TargetDirectorySetupStep
12
12
 
13
13
  __all__ = [
14
+ "AgentProcessingStep",
14
15
  "BaseDeploymentStep",
15
- "StepResult",
16
16
  "ConfigurationLoadStep",
17
+ "StepResult",
17
18
  "TargetDirectorySetupStep",
18
- "AgentProcessingStep",
19
19
  ]
@@ -1,7 +1,6 @@
1
1
  """Agent processing step for deployment pipeline."""
2
2
 
3
3
  import time
4
-
5
4
  from pathlib import Path
6
5
 
7
6
  from claude_mpm.services.agents.deployment.processors import (
@@ -57,7 +56,7 @@ class AgentProcessingStep(BaseDeploymentStep):
57
56
  source_info = context.agent_sources[agent_name]
58
57
  else:
59
58
  source_info = self._determine_agent_source(template_file)
60
-
59
+
61
60
  # Create agent deployment context
62
61
  agent_context = AgentDeploymentContext.from_template_file(
63
62
  template_file=template_file,
@@ -93,9 +92,7 @@ class AgentProcessingStep(BaseDeploymentStep):
93
92
  failed_count += 1
94
93
 
95
94
  except Exception as e:
96
- error_msg = (
97
- f"Failed to process agent {template_file.stem}: {str(e)}"
98
- )
95
+ error_msg = f"Failed to process agent {template_file.stem}: {e!s}"
99
96
  self.logger.error(error_msg, exc_info=True)
100
97
  context.add_error(error_msg)
101
98
  failed_count += 1
@@ -125,7 +122,7 @@ class AgentProcessingStep(BaseDeploymentStep):
125
122
  execution_time = time.time() - start_time
126
123
  context.step_timings[self.name] = execution_time
127
124
 
128
- error_msg = f"Agent processing step failed: {str(e)}"
125
+ error_msg = f"Agent processing step failed: {e!s}"
129
126
  self.logger.error(error_msg, exc_info=True)
130
127
  context.add_error(error_msg)
131
128
 
@@ -207,32 +204,36 @@ class AgentProcessingStep(BaseDeploymentStep):
207
204
 
208
205
  def _determine_agent_source(self, template_path: Path) -> str:
209
206
  """Determine the source of an agent from its template path.
210
-
207
+
211
208
  Args:
212
209
  template_path: Path to the agent template
213
-
210
+
214
211
  Returns:
215
212
  Source string (system/project/user/unknown)
216
213
  """
217
214
  template_str = str(template_path.resolve())
218
-
215
+
219
216
  # Check if it's a system template
220
- if "/claude_mpm/agents/templates/" in template_str or "/src/claude_mpm/agents/templates/" in template_str:
217
+ if (
218
+ "/claude_mpm/agents/templates/" in template_str
219
+ or "/src/claude_mpm/agents/templates/" in template_str
220
+ ):
221
221
  return "system"
222
-
222
+
223
223
  # Check if it's a project agent
224
224
  if "/.claude-mpm/agents/" in template_str:
225
225
  # Check if it's in the current working directory
226
226
  try:
227
227
  from pathlib import Path
228
+
228
229
  cwd = Path.cwd()
229
230
  if str(cwd) in template_str:
230
231
  return "project"
231
232
  except:
232
233
  pass
233
-
234
+
234
235
  # Check if it's a user agent
235
236
  if "/.claude/agents/" in template_str:
236
237
  return "user"
237
-
238
+
238
239
  return "unknown"
@@ -76,7 +76,6 @@ class BaseDeploymentStep(ABC):
76
76
  Returns:
77
77
  Result of executing this step
78
78
  """
79
- pass
80
79
 
81
80
  def should_execute(self, context) -> bool:
82
81
  """Check if this step should be executed.
@@ -63,7 +63,7 @@ class ConfigurationLoadStep(BaseDeploymentStep):
63
63
  execution_time = time.time() - start_time
64
64
  context.step_timings[self.name] = execution_time
65
65
 
66
- error_msg = f"Failed to load configuration: {str(e)}"
66
+ error_msg = f"Failed to load configuration: {e!s}"
67
67
  self.logger.error(error_msg)
68
68
  context.add_error(error_msg)
69
69
 
@@ -32,14 +32,13 @@ class TargetDirectorySetupStep(BaseDeploymentStep):
32
32
  context.actual_target_dir = context.strategy.determine_target_directory(
33
33
  context # Pass the context which has the DeploymentContext interface
34
34
  )
35
+ # Fallback logic if no strategy is set
36
+ elif context.target_dir:
37
+ context.actual_target_dir = context.target_dir
35
38
  else:
36
- # Fallback logic if no strategy is set
37
- if context.target_dir:
38
- context.actual_target_dir = context.target_dir
39
- else:
40
- # MODIFIED: Default to project .claude/agents directory
41
- # All agents now deploy to the project level
42
- context.actual_target_dir = Path.cwd() / ".claude" / "agents"
39
+ # MODIFIED: Default to project .claude/agents directory
40
+ # All agents now deploy to the project level
41
+ context.actual_target_dir = Path.cwd() / ".claude" / "agents"
43
42
 
44
43
  # Create target directory if it doesn't exist
45
44
  context.actual_target_dir.mkdir(parents=True, exist_ok=True)
@@ -49,7 +48,7 @@ class TargetDirectorySetupStep(BaseDeploymentStep):
49
48
  try:
50
49
  test_file.write_text("test")
51
50
  test_file.unlink()
52
- except Exception as e:
51
+ except Exception:
53
52
  raise PermissionError(
54
53
  f"Target directory is not writable: {context.actual_target_dir}"
55
54
  )
@@ -69,7 +68,7 @@ class TargetDirectorySetupStep(BaseDeploymentStep):
69
68
  execution_time = time.time() - start_time
70
69
  context.step_timings[self.name] = execution_time
71
70
 
72
- error_msg = f"Failed to set up target directory: {str(e)}"
71
+ error_msg = f"Failed to set up target directory: {e!s}"
73
72
  self.logger.error(error_msg)
74
73
  context.add_error(error_msg)
75
74
 
@@ -68,7 +68,7 @@ class ValidationStep(BaseDeploymentStep):
68
68
  execution_time = time.time() - start_time
69
69
  context.step_timings[self.name] = execution_time
70
70
 
71
- error_msg = f"Validation step failed: {str(e)}"
71
+ error_msg = f"Validation step failed: {e!s}"
72
72
  self.logger.error(error_msg, exc_info=True)
73
73
  context.add_error(error_msg)
74
74
 
@@ -9,7 +9,7 @@ from .agent_deployment_result import AgentDeploymentResult
9
9
  from .agent_processor import AgentProcessor
10
10
 
11
11
  __all__ = [
12
- "AgentProcessor",
13
12
  "AgentDeploymentContext",
14
13
  "AgentDeploymentResult",
14
+ "AgentProcessor",
15
15
  ]
@@ -6,7 +6,7 @@ from claude_mpm.core.exceptions import AgentDeploymentError
6
6
  from claude_mpm.core.logger import get_logger
7
7
 
8
8
  from .agent_deployment_context import AgentDeploymentContext
9
- from .agent_deployment_result import AgentDeploymentResult, AgentDeploymentStatus
9
+ from .agent_deployment_result import AgentDeploymentResult
10
10
 
11
11
 
12
12
  class AgentProcessor:
@@ -77,7 +77,7 @@ class AgentProcessor:
77
77
  deployment_time_ms,
78
78
  reason,
79
79
  )
80
- elif context.is_update():
80
+ if context.is_update():
81
81
  self.logger.debug(f"Updated agent: {context.agent_name}")
82
82
  return AgentDeploymentResult.updated(
83
83
  context.agent_name,
@@ -86,21 +86,18 @@ class AgentProcessor:
86
86
  deployment_time_ms,
87
87
  reason,
88
88
  )
89
- else:
90
- self.logger.debug(f"Deployed new agent: {context.agent_name}")
91
- return AgentDeploymentResult.deployed(
92
- context.agent_name,
93
- context.template_file,
94
- context.target_file,
95
- deployment_time_ms,
96
- )
89
+ self.logger.debug(f"Deployed new agent: {context.agent_name}")
90
+ return AgentDeploymentResult.deployed(
91
+ context.agent_name,
92
+ context.template_file,
93
+ context.target_file,
94
+ deployment_time_ms,
95
+ )
97
96
 
98
97
  except AgentDeploymentError as e:
99
98
  # Re-raise our custom exceptions
100
99
  deployment_time_ms = (time.time() - start_time) * 1000
101
- self.logger.error(
102
- f"Agent deployment error for {context.agent_name}: {str(e)}"
103
- )
100
+ self.logger.error(f"Agent deployment error for {context.agent_name}: {e!s}")
104
101
  return AgentDeploymentResult.failed(
105
102
  context.agent_name,
106
103
  context.template_file,
@@ -151,11 +148,15 @@ class AgentProcessor:
151
148
  # File doesn't exist, needs to be deployed
152
149
  needs_update = True
153
150
  reason = "New agent deployment"
154
- self.logger.debug(f"Agent {context.agent_name} doesn't exist, will deploy")
151
+ self.logger.debug(
152
+ f"Agent {context.agent_name} doesn't exist, will deploy"
153
+ )
155
154
  else:
156
155
  # File exists, check version compatibility
157
156
  needs_update, reason = self.version_manager.check_agent_needs_update(
158
- context.target_file, context.template_file, context.base_agent_version
157
+ context.target_file,
158
+ context.template_file,
159
+ context.base_agent_version,
159
160
  )
160
161
  if needs_update:
161
162
  # Check if this is a migration from old format
@@ -185,7 +186,10 @@ class AgentProcessor:
185
186
  """
186
187
  try:
187
188
  return self.template_builder.build_agent_markdown(
188
- context.agent_name, context.template_file, context.base_agent_data, context.source_info
189
+ context.agent_name,
190
+ context.template_file,
191
+ context.base_agent_data,
192
+ context.source_info,
189
193
  )
190
194
  except Exception as e:
191
195
  raise AgentDeploymentError(
@@ -3,7 +3,6 @@
3
3
  from pathlib import Path
4
4
  from typing import Any, Dict, List, Optional, Tuple
5
5
 
6
- from claude_mpm.core.config import Config
7
6
  from claude_mpm.core.interfaces import AgentDeploymentInterface
8
7
  from claude_mpm.core.logger import get_logger
9
8
 
@@ -12,10 +11,8 @@ from .facade import DeploymentFacade
12
11
  from .pipeline import (
13
12
  DeploymentPipelineBuilder,
14
13
  DeploymentPipelineExecutor,
15
- PipelineContext,
16
14
  )
17
- from .processors import AgentProcessor
18
- from .results import DeploymentMetrics, DeploymentResultBuilder
15
+ from .results import DeploymentResultBuilder
19
16
 
20
17
  # Import refactored components
21
18
  from .strategies import DeploymentContext, DeploymentStrategySelector
@@ -69,7 +66,7 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
69
66
  self.pipeline_builder, self.pipeline_executor
70
67
  )
71
68
 
72
- self.logger.info(f"Refactored deployment service initialized")
69
+ self.logger.info("Refactored deployment service initialized")
73
70
  self.logger.info(f"Templates directory: {self.templates_dir}")
74
71
  self.logger.info(f"Base agent path: {self.base_agent_path}")
75
72
  self.logger.info(f"Working directory: {self.working_directory}")
@@ -167,7 +164,7 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
167
164
 
168
165
  except Exception as e:
169
166
  self.logger.error(f"Agent validation failed: {e}", exc_info=True)
170
- return False, [f"Validation error: {str(e)}"]
167
+ return False, [f"Validation error: {e!s}"]
171
168
 
172
169
  def clean_deployment(self, preserve_user_agents: bool = True) -> bool:
173
170
  """Clean up deployed agents.
@@ -236,7 +233,7 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
236
233
  available_executors = self.deployment_facade.get_available_executors()
237
234
 
238
235
  # Build status information
239
- status = {
236
+ return {
240
237
  "service_version": "refactored-1.0.0",
241
238
  "status": "ready",
242
239
  "templates_dir": str(self.templates_dir),
@@ -254,8 +251,6 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
254
251
  },
255
252
  }
256
253
 
257
- return status
258
-
259
254
  except Exception as e:
260
255
  self.logger.error(f"Failed to get deployment status: {e}", exc_info=True)
261
256
  return {
@@ -292,7 +287,7 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
292
287
  strategy = self.strategy_selector.select_strategy(deployment_context)
293
288
 
294
289
  # Use facade with synchronous deployment for reliability
295
- results = self.deployment_facade.deploy_agents(
290
+ return self.deployment_facade.deploy_agents(
296
291
  templates_dir=self.templates_dir,
297
292
  base_agent_path=self.base_agent_path,
298
293
  working_directory=self.working_directory,
@@ -303,8 +298,6 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
303
298
  use_async=False, # Use synchronous deployment to ensure agents are ready when Claude Code launches
304
299
  )
305
300
 
306
- return results
307
-
308
301
  except Exception as e:
309
302
  self.logger.error(f"Async deployment failed: {e}", exc_info=True)
310
303
  return {
@@ -8,6 +8,6 @@ from .deployment_metrics import DeploymentMetrics
8
8
  from .deployment_result_builder import DeploymentResultBuilder
9
9
 
10
10
  __all__ = [
11
- "DeploymentResultBuilder",
12
11
  "DeploymentMetrics",
12
+ "DeploymentResultBuilder",
13
13
  ]
@@ -1,7 +1,7 @@
1
1
  """Deployment result builder for creating structured deployment results."""
2
2
 
3
3
  from pathlib import Path
4
- from typing import Any, Dict, List, Optional
4
+ from typing import Any, Dict, Optional
5
5
 
6
6
  from claude_mpm.core.logger import get_logger
7
7