claude-mpm 4.1.1__py3-none-any.whl → 4.1.2__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 (357) 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/imagemagick.json +256 -0
  18. claude_mpm/agents/templates/qa.json +41 -2
  19. claude_mpm/agents/templates/ticketing.json +5 -5
  20. claude_mpm/agents/templates/web_qa.json +50 -2
  21. claude_mpm/cli/__init__.py +51 -46
  22. claude_mpm/cli/__main__.py +1 -1
  23. claude_mpm/cli/commands/__init__.py +10 -12
  24. claude_mpm/cli/commands/agent_manager.py +186 -181
  25. claude_mpm/cli/commands/agents.py +271 -268
  26. claude_mpm/cli/commands/aggregate.py +30 -29
  27. claude_mpm/cli/commands/cleanup.py +50 -44
  28. claude_mpm/cli/commands/cleanup_orphaned_agents.py +25 -25
  29. claude_mpm/cli/commands/config.py +162 -127
  30. claude_mpm/cli/commands/doctor.py +52 -62
  31. claude_mpm/cli/commands/info.py +37 -25
  32. claude_mpm/cli/commands/mcp.py +3 -7
  33. claude_mpm/cli/commands/mcp_command_router.py +14 -18
  34. claude_mpm/cli/commands/mcp_install_commands.py +28 -23
  35. claude_mpm/cli/commands/mcp_pipx_config.py +58 -49
  36. claude_mpm/cli/commands/mcp_server_commands.py +23 -17
  37. claude_mpm/cli/commands/memory.py +192 -141
  38. claude_mpm/cli/commands/monitor.py +117 -88
  39. claude_mpm/cli/commands/run.py +120 -84
  40. claude_mpm/cli/commands/run_config_checker.py +4 -5
  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 +204 -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 +20 -23
  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 +581 -280
  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 -15
  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 +93 -38
  114. claude_mpm/hooks/claude_hooks/hook_handler.py +130 -76
  115. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +104 -77
  116. claude_mpm/hooks/claude_hooks/memory_integration.py +2 -4
  117. claude_mpm/hooks/claude_hooks/response_tracking.py +15 -11
  118. claude_mpm/hooks/claude_hooks/tool_analysis.py +12 -18
  119. claude_mpm/hooks/memory_integration_hook.py +5 -5
  120. claude_mpm/hooks/tool_call_interceptor.py +1 -1
  121. claude_mpm/hooks/validation_hooks.py +4 -4
  122. claude_mpm/init.py +4 -9
  123. claude_mpm/models/__init__.py +2 -2
  124. claude_mpm/models/agent_session.py +11 -14
  125. claude_mpm/scripts/mcp_server.py +20 -11
  126. claude_mpm/scripts/mcp_wrapper.py +5 -5
  127. claude_mpm/scripts/mpm_doctor.py +321 -0
  128. claude_mpm/scripts/socketio_daemon.py +28 -25
  129. claude_mpm/scripts/socketio_daemon_hardened.py +298 -258
  130. claude_mpm/scripts/socketio_server_manager.py +116 -95
  131. claude_mpm/services/__init__.py +49 -49
  132. claude_mpm/services/agent_capabilities_service.py +12 -18
  133. claude_mpm/services/agents/__init__.py +22 -22
  134. claude_mpm/services/agents/agent_builder.py +140 -119
  135. claude_mpm/services/agents/deployment/__init__.py +3 -3
  136. claude_mpm/services/agents/deployment/agent_config_provider.py +9 -9
  137. claude_mpm/services/agents/deployment/agent_configuration_manager.py +19 -20
  138. claude_mpm/services/agents/deployment/agent_definition_factory.py +1 -5
  139. claude_mpm/services/agents/deployment/agent_deployment.py +136 -106
  140. claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -8
  141. claude_mpm/services/agents/deployment/agent_environment_manager.py +2 -7
  142. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +6 -10
  143. claude_mpm/services/agents/deployment/agent_format_converter.py +11 -15
  144. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +2 -3
  145. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -5
  146. claude_mpm/services/agents/deployment/agent_metrics_collector.py +13 -19
  147. claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -1
  148. claude_mpm/services/agents/deployment/agent_template_builder.py +26 -35
  149. claude_mpm/services/agents/deployment/agent_validator.py +0 -1
  150. claude_mpm/services/agents/deployment/agent_version_manager.py +7 -9
  151. claude_mpm/services/agents/deployment/agent_versioning.py +3 -3
  152. claude_mpm/services/agents/deployment/agents_directory_resolver.py +6 -7
  153. claude_mpm/services/agents/deployment/async_agent_deployment.py +51 -38
  154. claude_mpm/services/agents/deployment/config/__init__.py +1 -1
  155. claude_mpm/services/agents/deployment/config/deployment_config.py +7 -8
  156. claude_mpm/services/agents/deployment/deployment_type_detector.py +1 -1
  157. claude_mpm/services/agents/deployment/deployment_wrapper.py +18 -18
  158. claude_mpm/services/agents/deployment/facade/__init__.py +1 -1
  159. claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -3
  160. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -4
  161. claude_mpm/services/agents/deployment/interface_adapter.py +5 -7
  162. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +345 -276
  163. claude_mpm/services/agents/deployment/pipeline/__init__.py +2 -2
  164. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +1 -1
  165. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +6 -4
  166. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +3 -3
  167. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +2 -2
  168. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +14 -13
  169. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -1
  170. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +1 -1
  171. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +8 -9
  172. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +1 -1
  173. claude_mpm/services/agents/deployment/processors/__init__.py +1 -1
  174. claude_mpm/services/agents/deployment/processors/agent_processor.py +20 -16
  175. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +5 -12
  176. claude_mpm/services/agents/deployment/results/__init__.py +1 -1
  177. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +1 -1
  178. claude_mpm/services/agents/deployment/strategies/__init__.py +2 -2
  179. claude_mpm/services/agents/deployment/strategies/base_strategy.py +1 -7
  180. claude_mpm/services/agents/deployment/strategies/project_strategy.py +1 -4
  181. claude_mpm/services/agents/deployment/strategies/system_strategy.py +2 -3
  182. claude_mpm/services/agents/deployment/strategies/user_strategy.py +3 -7
  183. claude_mpm/services/agents/deployment/validation/__init__.py +1 -1
  184. claude_mpm/services/agents/deployment/validation/agent_validator.py +1 -1
  185. claude_mpm/services/agents/deployment/validation/template_validator.py +2 -2
  186. claude_mpm/services/agents/deployment/validation/validation_result.py +2 -6
  187. claude_mpm/services/agents/loading/__init__.py +1 -1
  188. claude_mpm/services/agents/loading/agent_profile_loader.py +6 -12
  189. claude_mpm/services/agents/loading/base_agent_manager.py +5 -5
  190. claude_mpm/services/agents/loading/framework_agent_loader.py +2 -4
  191. claude_mpm/services/agents/management/__init__.py +1 -1
  192. claude_mpm/services/agents/management/agent_capabilities_generator.py +1 -3
  193. claude_mpm/services/agents/management/agent_management_service.py +5 -9
  194. claude_mpm/services/agents/memory/__init__.py +4 -4
  195. claude_mpm/services/agents/memory/agent_memory_manager.py +280 -160
  196. claude_mpm/services/agents/memory/agent_persistence_service.py +0 -2
  197. claude_mpm/services/agents/memory/content_manager.py +44 -38
  198. claude_mpm/services/agents/memory/template_generator.py +4 -6
  199. claude_mpm/services/agents/registry/__init__.py +10 -6
  200. claude_mpm/services/agents/registry/deployed_agent_discovery.py +30 -27
  201. claude_mpm/services/agents/registry/modification_tracker.py +3 -6
  202. claude_mpm/services/async_session_logger.py +1 -2
  203. claude_mpm/services/claude_session_logger.py +1 -2
  204. claude_mpm/services/command_deployment_service.py +173 -0
  205. claude_mpm/services/command_handler_service.py +20 -22
  206. claude_mpm/services/core/__init__.py +25 -25
  207. claude_mpm/services/core/base.py +0 -5
  208. claude_mpm/services/core/interfaces/__init__.py +32 -32
  209. claude_mpm/services/core/interfaces/agent.py +0 -21
  210. claude_mpm/services/core/interfaces/communication.py +0 -27
  211. claude_mpm/services/core/interfaces/infrastructure.py +0 -56
  212. claude_mpm/services/core/interfaces/service.py +0 -29
  213. claude_mpm/services/diagnostics/__init__.py +1 -1
  214. claude_mpm/services/diagnostics/checks/__init__.py +6 -6
  215. claude_mpm/services/diagnostics/checks/agent_check.py +89 -80
  216. claude_mpm/services/diagnostics/checks/base_check.py +12 -16
  217. claude_mpm/services/diagnostics/checks/claude_desktop_check.py +84 -81
  218. claude_mpm/services/diagnostics/checks/common_issues_check.py +99 -91
  219. claude_mpm/services/diagnostics/checks/configuration_check.py +82 -77
  220. claude_mpm/services/diagnostics/checks/filesystem_check.py +67 -68
  221. claude_mpm/services/diagnostics/checks/installation_check.py +254 -94
  222. claude_mpm/services/diagnostics/checks/mcp_check.py +90 -88
  223. claude_mpm/services/diagnostics/checks/monitor_check.py +75 -76
  224. claude_mpm/services/diagnostics/checks/startup_log_check.py +67 -73
  225. claude_mpm/services/diagnostics/diagnostic_runner.py +67 -59
  226. claude_mpm/services/diagnostics/doctor_reporter.py +107 -70
  227. claude_mpm/services/diagnostics/models.py +21 -19
  228. claude_mpm/services/event_aggregator.py +10 -17
  229. claude_mpm/services/event_bus/__init__.py +1 -1
  230. claude_mpm/services/event_bus/config.py +54 -35
  231. claude_mpm/services/event_bus/event_bus.py +76 -71
  232. claude_mpm/services/event_bus/relay.py +74 -64
  233. claude_mpm/services/events/__init__.py +11 -11
  234. claude_mpm/services/events/consumers/__init__.py +3 -3
  235. claude_mpm/services/events/consumers/dead_letter.py +71 -63
  236. claude_mpm/services/events/consumers/logging.py +39 -37
  237. claude_mpm/services/events/consumers/metrics.py +56 -57
  238. claude_mpm/services/events/consumers/socketio.py +82 -81
  239. claude_mpm/services/events/core.py +110 -99
  240. claude_mpm/services/events/interfaces.py +56 -72
  241. claude_mpm/services/events/producers/__init__.py +1 -1
  242. claude_mpm/services/events/producers/hook.py +38 -38
  243. claude_mpm/services/events/producers/system.py +46 -44
  244. claude_mpm/services/exceptions.py +81 -80
  245. claude_mpm/services/framework_claude_md_generator/__init__.py +2 -4
  246. claude_mpm/services/framework_claude_md_generator/content_assembler.py +3 -5
  247. claude_mpm/services/framework_claude_md_generator/content_validator.py +1 -1
  248. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +4 -4
  249. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -1
  250. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -2
  251. claude_mpm/services/framework_claude_md_generator/version_manager.py +4 -5
  252. claude_mpm/services/hook_service.py +6 -9
  253. claude_mpm/services/infrastructure/__init__.py +1 -1
  254. claude_mpm/services/infrastructure/context_preservation.py +8 -12
  255. claude_mpm/services/infrastructure/monitoring.py +21 -23
  256. claude_mpm/services/mcp_gateway/__init__.py +37 -37
  257. claude_mpm/services/mcp_gateway/auto_configure.py +95 -103
  258. claude_mpm/services/mcp_gateway/config/__init__.py +1 -1
  259. claude_mpm/services/mcp_gateway/config/config_loader.py +23 -25
  260. claude_mpm/services/mcp_gateway/config/config_schema.py +5 -5
  261. claude_mpm/services/mcp_gateway/config/configuration.py +9 -6
  262. claude_mpm/services/mcp_gateway/core/__init__.py +10 -10
  263. claude_mpm/services/mcp_gateway/core/base.py +0 -3
  264. claude_mpm/services/mcp_gateway/core/interfaces.py +1 -38
  265. claude_mpm/services/mcp_gateway/core/process_pool.py +99 -93
  266. claude_mpm/services/mcp_gateway/core/singleton_manager.py +65 -62
  267. claude_mpm/services/mcp_gateway/core/startup_verification.py +75 -74
  268. claude_mpm/services/mcp_gateway/main.py +2 -1
  269. claude_mpm/services/mcp_gateway/registry/service_registry.py +5 -8
  270. claude_mpm/services/mcp_gateway/registry/tool_registry.py +1 -1
  271. claude_mpm/services/mcp_gateway/server/__init__.py +1 -1
  272. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +12 -19
  273. claude_mpm/services/mcp_gateway/server/stdio_handler.py +4 -3
  274. claude_mpm/services/mcp_gateway/server/stdio_server.py +79 -71
  275. claude_mpm/services/mcp_gateway/tools/__init__.py +2 -2
  276. claude_mpm/services/mcp_gateway/tools/base_adapter.py +5 -6
  277. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +13 -22
  278. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +79 -78
  279. claude_mpm/services/mcp_gateway/tools/hello_world.py +12 -14
  280. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +42 -49
  281. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +51 -55
  282. claude_mpm/services/memory/__init__.py +3 -3
  283. claude_mpm/services/memory/builder.py +3 -6
  284. claude_mpm/services/memory/cache/__init__.py +1 -1
  285. claude_mpm/services/memory/cache/shared_prompt_cache.py +3 -5
  286. claude_mpm/services/memory/cache/simple_cache.py +1 -1
  287. claude_mpm/services/memory/indexed_memory.py +5 -7
  288. claude_mpm/services/memory/optimizer.py +7 -10
  289. claude_mpm/services/memory/router.py +8 -9
  290. claude_mpm/services/memory_hook_service.py +48 -34
  291. claude_mpm/services/monitor_build_service.py +77 -73
  292. claude_mpm/services/port_manager.py +130 -108
  293. claude_mpm/services/project/analyzer.py +12 -10
  294. claude_mpm/services/project/registry.py +11 -11
  295. claude_mpm/services/recovery_manager.py +10 -19
  296. claude_mpm/services/response_tracker.py +0 -1
  297. claude_mpm/services/runner_configuration_service.py +19 -20
  298. claude_mpm/services/session_management_service.py +7 -11
  299. claude_mpm/services/shared/__init__.py +1 -1
  300. claude_mpm/services/shared/async_service_base.py +58 -50
  301. claude_mpm/services/shared/config_service_base.py +73 -67
  302. claude_mpm/services/shared/lifecycle_service_base.py +82 -78
  303. claude_mpm/services/shared/manager_base.py +94 -82
  304. claude_mpm/services/shared/service_factory.py +96 -98
  305. claude_mpm/services/socketio/__init__.py +3 -3
  306. claude_mpm/services/socketio/client_proxy.py +5 -5
  307. claude_mpm/services/socketio/event_normalizer.py +199 -181
  308. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  309. claude_mpm/services/socketio/handlers/base.py +5 -4
  310. claude_mpm/services/socketio/handlers/connection.py +163 -136
  311. claude_mpm/services/socketio/handlers/file.py +13 -14
  312. claude_mpm/services/socketio/handlers/git.py +12 -7
  313. claude_mpm/services/socketio/handlers/hook.py +49 -44
  314. claude_mpm/services/socketio/handlers/memory.py +0 -1
  315. claude_mpm/services/socketio/handlers/project.py +0 -1
  316. claude_mpm/services/socketio/handlers/registry.py +37 -19
  317. claude_mpm/services/socketio/migration_utils.py +98 -84
  318. claude_mpm/services/socketio/server/__init__.py +1 -1
  319. claude_mpm/services/socketio/server/broadcaster.py +81 -87
  320. claude_mpm/services/socketio/server/core.py +65 -54
  321. claude_mpm/services/socketio/server/eventbus_integration.py +95 -56
  322. claude_mpm/services/socketio/server/main.py +64 -38
  323. claude_mpm/services/socketio_client_manager.py +10 -12
  324. claude_mpm/services/subprocess_launcher_service.py +4 -7
  325. claude_mpm/services/system_instructions_service.py +13 -14
  326. claude_mpm/services/ticket_manager.py +2 -2
  327. claude_mpm/services/utility_service.py +5 -13
  328. claude_mpm/services/version_control/__init__.py +16 -16
  329. claude_mpm/services/version_control/branch_strategy.py +5 -8
  330. claude_mpm/services/version_control/conflict_resolution.py +9 -23
  331. claude_mpm/services/version_control/git_operations.py +5 -7
  332. claude_mpm/services/version_control/semantic_versioning.py +16 -17
  333. claude_mpm/services/version_control/version_parser.py +13 -18
  334. claude_mpm/services/version_service.py +10 -11
  335. claude_mpm/storage/__init__.py +1 -1
  336. claude_mpm/storage/state_storage.py +22 -28
  337. claude_mpm/utils/__init__.py +6 -6
  338. claude_mpm/utils/agent_dependency_loader.py +47 -33
  339. claude_mpm/utils/config_manager.py +11 -14
  340. claude_mpm/utils/dependency_cache.py +1 -1
  341. claude_mpm/utils/dependency_manager.py +13 -17
  342. claude_mpm/utils/dependency_strategies.py +8 -10
  343. claude_mpm/utils/environment_context.py +3 -9
  344. claude_mpm/utils/error_handler.py +3 -13
  345. claude_mpm/utils/file_utils.py +1 -1
  346. claude_mpm/utils/path_operations.py +8 -12
  347. claude_mpm/utils/robust_installer.py +110 -33
  348. claude_mpm/utils/subprocess_utils.py +5 -6
  349. claude_mpm/validation/agent_validator.py +3 -6
  350. claude_mpm/validation/frontmatter_validator.py +1 -1
  351. {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.2.dist-info}/METADATA +1 -1
  352. claude_mpm-4.1.2.dist-info/RECORD +498 -0
  353. claude_mpm-4.1.1.dist-info/RECORD +0 -494
  354. {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.2.dist-info}/WHEEL +0 -0
  355. {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.2.dist-info}/entry_points.txt +0 -0
  356. {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.2.dist-info}/licenses/LICENSE +0 -0
  357. {claude_mpm-4.1.1.dist-info → claude_mpm-4.1.2.dist-info}/top_level.txt +0 -0
@@ -29,11 +29,9 @@ class CommandHandlerService(BaseService, CommandHandlerInterface):
29
29
 
30
30
  async def _initialize(self) -> None:
31
31
  """Initialize the service. No special initialization needed."""
32
- pass
33
32
 
34
33
  async def _cleanup(self) -> None:
35
34
  """Cleanup service resources. No cleanup needed."""
36
- pass
37
35
 
38
36
  def handle_mpm_command(self, prompt: str) -> bool:
39
37
  """Handle /mpm: commands directly without going to Claude.
@@ -59,12 +57,11 @@ class CommandHandlerService(BaseService, CommandHandlerInterface):
59
57
  # Route to appropriate handler
60
58
  if command == "test":
61
59
  return self._handle_test_command(args)
62
- elif command == "agents":
60
+ if command == "agents":
63
61
  return self._handle_agents_command(args)
64
- else:
65
- print(f"Unknown command: {command}")
66
- print("Available commands: test, agents")
67
- return True
62
+ print(f"Unknown command: {command}")
63
+ print("Available commands: test, agents")
64
+ return True
68
65
 
69
66
  except KeyboardInterrupt:
70
67
  print("\nCommand interrupted")
@@ -175,28 +172,29 @@ class CommandHandlerService(BaseService, CommandHandlerInterface):
175
172
  "success": success,
176
173
  "command": command,
177
174
  "args": args,
178
- "message": "Test command executed"
179
- if success
180
- else "Test command failed",
175
+ "message": (
176
+ "Test command executed" if success else "Test command failed"
177
+ ),
181
178
  }
182
- elif command == "agents":
179
+ if command == "agents":
183
180
  success = self._handle_agents_command(args)
184
181
  return {
185
182
  "success": success,
186
183
  "command": command,
187
184
  "args": args,
188
- "message": "Agents command executed"
189
- if success
190
- else "Agents command failed",
191
- }
192
- else:
193
- return {
194
- "success": False,
195
- "command": command,
196
- "args": args,
197
- "error": f"Unknown command: {command}",
198
- "available_commands": self.get_available_commands(),
185
+ "message": (
186
+ "Agents command executed"
187
+ if success
188
+ else "Agents command failed"
189
+ ),
199
190
  }
191
+ return {
192
+ "success": False,
193
+ "command": command,
194
+ "args": args,
195
+ "error": f"Unknown command: {command}",
196
+ "available_commands": self.get_available_commands(),
197
+ }
200
198
  except Exception as e:
201
199
  return {"success": False, "command": command, "args": args, "error": str(e)}
202
200
 
@@ -40,37 +40,37 @@ from .interfaces import ( # Core dependency injection; Configuration management
40
40
  )
41
41
 
42
42
  __all__ = [
43
- # Core interfaces
44
- "IServiceContainer",
45
- "ServiceType",
46
- "IConfigurationService",
47
- "IConfigurationManager",
48
- "IAgentRegistry",
43
+ # Service interfaces
44
+ "AgentDeploymentInterface",
49
45
  "AgentMetadata",
50
- "IHealthMonitor",
46
+ # Base classes
47
+ "BaseService",
48
+ "CacheEntry",
51
49
  "HealthStatus",
50
+ "HookServiceInterface",
51
+ "IAgentRegistry",
52
+ "ICacheService",
53
+ "IConfigurationManager",
54
+ "IConfigurationService",
55
+ "IErrorHandler",
56
+ "IEventBus",
57
+ "IHealthMonitor",
58
+ "IPerformanceMonitor",
52
59
  "IPromptCache",
53
- "CacheEntry",
54
- "ITemplateManager",
55
- "TemplateRenderContext",
60
+ # Core interfaces
61
+ "IServiceContainer",
56
62
  "IServiceFactory",
57
- "IEventBus",
58
- "IStructuredLogger",
59
63
  "IServiceLifecycle",
60
- "IErrorHandler",
61
- "IPerformanceMonitor",
62
- "ICacheService",
63
- # Service interfaces
64
- "AgentDeploymentInterface",
65
- "MemoryServiceInterface",
66
- "HookServiceInterface",
67
- "SocketIOServiceInterface",
68
- "ProjectAnalyzerInterface",
69
- "TicketManagerInterface",
64
+ "IStructuredLogger",
65
+ "ITemplateManager",
70
66
  # Registry
71
67
  "InterfaceRegistry",
72
- # Base classes
73
- "BaseService",
74
- "SyncBaseService",
68
+ "MemoryServiceInterface",
69
+ "ProjectAnalyzerInterface",
70
+ "ServiceType",
75
71
  "SingletonService",
72
+ "SocketIOServiceInterface",
73
+ "SyncBaseService",
74
+ "TemplateRenderContext",
75
+ "TicketManagerInterface",
76
76
  ]
@@ -9,7 +9,6 @@ and lifecycle management.
9
9
  Part of TSK-0046: Service Layer Architecture Reorganization
10
10
  """
11
11
 
12
- import logging
13
12
  from abc import ABC, abstractmethod
14
13
  from typing import Any, Dict, Optional
15
14
 
@@ -56,7 +55,6 @@ class BaseService(ABC):
56
55
  Returns:
57
56
  True if initialization successful, False otherwise
58
57
  """
59
- pass
60
58
 
61
59
  @abstractmethod
62
60
  async def shutdown(self) -> None:
@@ -65,7 +63,6 @@ class BaseService(ABC):
65
63
 
66
64
  This method should clean up any resources held by the service.
67
65
  """
68
- pass
69
66
 
70
67
  def get_config(self, key: str, default: Any = None) -> Any:
71
68
  """
@@ -157,7 +154,6 @@ class SyncBaseService(ABC):
157
154
  Returns:
158
155
  True if initialization successful, False otherwise
159
156
  """
160
- pass
161
157
 
162
158
  @abstractmethod
163
159
  def shutdown(self) -> None:
@@ -166,7 +162,6 @@ class SyncBaseService(ABC):
166
162
 
167
163
  This method should clean up any resources held by the service.
168
164
  """
169
- pass
170
165
 
171
166
  def get_config(self, key: str, default: Any = None) -> Any:
172
167
  """
@@ -143,46 +143,46 @@ class InterfaceRegistry:
143
143
 
144
144
  # Re-export everything for backward compatibility
145
145
  __all__ = [
146
- # Type variables
147
- "T",
148
- "ServiceType",
149
- # Infrastructure interfaces
150
- "IServiceContainer",
151
- "IConfigurationService",
152
- "IConfigurationManager",
153
- "ICacheService",
154
- "IPromptCache",
146
+ "AgentCapabilitiesInterface",
147
+ "AgentDeploymentInterface",
148
+ "AgentMetadata",
155
149
  "CacheEntry",
156
- "IHealthMonitor",
150
+ "CommandHandlerInterface",
157
151
  "HealthStatus",
158
- "ITemplateManager",
159
- "TemplateRenderContext",
160
- "IServiceFactory",
161
- "IStructuredLogger",
162
- "IServiceLifecycle",
163
- "IErrorHandler",
164
- "IPerformanceMonitor",
165
- "IEventBus",
152
+ "HookServiceInterface",
166
153
  # Agent interfaces
167
154
  "IAgentRegistry",
168
- "AgentMetadata",
169
- "AgentDeploymentInterface",
170
- "AgentCapabilitiesInterface",
171
- "SystemInstructionsInterface",
172
- "SubprocessLauncherInterface",
173
- "RunnerConfigurationInterface",
174
- # Service interfaces
175
- "VersionServiceInterface",
176
- "CommandHandlerInterface",
155
+ "ICacheService",
156
+ "IConfigurationManager",
157
+ "IConfigurationService",
158
+ "IErrorHandler",
159
+ "IEventBus",
160
+ "IHealthMonitor",
161
+ "IPerformanceMonitor",
162
+ "IPromptCache",
163
+ # Infrastructure interfaces
164
+ "IServiceContainer",
165
+ "IServiceFactory",
166
+ "IServiceLifecycle",
167
+ "IStructuredLogger",
168
+ "ITemplateManager",
169
+ # Registry
170
+ "InterfaceRegistry",
177
171
  "MemoryHookInterface",
178
172
  "MemoryServiceInterface",
173
+ "ProjectAnalyzerInterface",
174
+ "RunnerConfigurationInterface",
175
+ "ServiceType",
179
176
  "SessionManagementInterface",
180
- "UtilityServiceInterface",
181
- "HookServiceInterface",
182
177
  # Communication interfaces
183
178
  "SocketIOServiceInterface",
184
- "ProjectAnalyzerInterface",
179
+ "SubprocessLauncherInterface",
180
+ "SystemInstructionsInterface",
181
+ # Type variables
182
+ "T",
183
+ "TemplateRenderContext",
185
184
  "TicketManagerInterface",
186
- # Registry
187
- "InterfaceRegistry",
185
+ "UtilityServiceInterface",
186
+ # Service interfaces
187
+ "VersionServiceInterface",
188
188
  ]
@@ -68,29 +68,24 @@ class IAgentRegistry(ABC):
68
68
  self, force_refresh: bool = False
69
69
  ) -> Dict[str, AgentMetadata]:
70
70
  """Discover all available agents"""
71
- pass
72
71
 
73
72
  @abstractmethod
74
73
  async def get_agent(self, agent_name: str) -> Optional[AgentMetadata]:
75
74
  """Get specific agent metadata"""
76
- pass
77
75
 
78
76
  @abstractmethod
79
77
  async def list_agents(
80
78
  self, agent_type: Optional[str] = None, tier: Optional[str] = None
81
79
  ) -> List[AgentMetadata]:
82
80
  """List agents with optional filtering"""
83
- pass
84
81
 
85
82
  @abstractmethod
86
83
  async def get_specialized_agents(self, agent_type: str) -> List[AgentMetadata]:
87
84
  """Get agents of a specific specialized type"""
88
- pass
89
85
 
90
86
  @abstractmethod
91
87
  async def refresh_agent_cache(self) -> None:
92
88
  """Refresh the agent metadata cache"""
93
- pass
94
89
 
95
90
 
96
91
  # Agent deployment interface
@@ -118,7 +113,6 @@ class AgentDeploymentInterface(ABC):
118
113
  Returns:
119
114
  Dictionary with deployment results and status
120
115
  """
121
- pass
122
116
 
123
117
  @abstractmethod
124
118
  def validate_agent(self, agent_path: Path) -> Tuple[bool, List[str]]:
@@ -130,7 +124,6 @@ class AgentDeploymentInterface(ABC):
130
124
  Returns:
131
125
  Tuple of (is_valid, list_of_errors)
132
126
  """
133
- pass
134
127
 
135
128
  @abstractmethod
136
129
  def get_deployment_status(self, agent_name: str) -> Dict[str, Any]:
@@ -142,7 +135,6 @@ class AgentDeploymentInterface(ABC):
142
135
  Returns:
143
136
  Dictionary with deployment status information
144
137
  """
145
- pass
146
138
 
147
139
 
148
140
  # Agent capabilities interface
@@ -168,7 +160,6 @@ class AgentCapabilitiesInterface(ABC):
168
160
  Returns:
169
161
  Formatted capabilities string for Claude consumption
170
162
  """
171
- pass
172
163
 
173
164
 
174
165
  # System instructions interface
@@ -194,7 +185,6 @@ class SystemInstructionsInterface(ABC):
194
185
  Returns:
195
186
  Processed system instructions string
196
187
  """
197
- pass
198
188
 
199
189
  @abstractmethod
200
190
  def get_available_instruction_types(self) -> List[str]:
@@ -203,7 +193,6 @@ class SystemInstructionsInterface(ABC):
203
193
  Returns:
204
194
  List of available instruction type names
205
195
  """
206
- pass
207
196
 
208
197
  @abstractmethod
209
198
  def validate_instructions(self, instructions: str) -> Tuple[bool, List[str]]:
@@ -215,7 +204,6 @@ class SystemInstructionsInterface(ABC):
215
204
  Returns:
216
205
  Tuple of (is_valid, list_of_errors)
217
206
  """
218
- pass
219
207
 
220
208
 
221
209
  # Subprocess launcher interface
@@ -241,7 +229,6 @@ class SubprocessLauncherInterface(ABC):
241
229
  Returns:
242
230
  Dictionary with subprocess information and handles
243
231
  """
244
- pass
245
232
 
246
233
  @abstractmethod
247
234
  async def launch_subprocess_async(
@@ -256,7 +243,6 @@ class SubprocessLauncherInterface(ABC):
256
243
  Returns:
257
244
  Dictionary with subprocess information and handles
258
245
  """
259
- pass
260
246
 
261
247
  @abstractmethod
262
248
  def terminate_subprocess(self, process_id: str) -> bool:
@@ -268,7 +254,6 @@ class SubprocessLauncherInterface(ABC):
268
254
  Returns:
269
255
  True if termination successful
270
256
  """
271
- pass
272
257
 
273
258
  @abstractmethod
274
259
  def get_subprocess_status(self, process_id: str) -> Dict[str, Any]:
@@ -280,7 +265,6 @@ class SubprocessLauncherInterface(ABC):
280
265
  Returns:
281
266
  Dictionary with process status information
282
267
  """
283
- pass
284
268
 
285
269
 
286
270
  # Runner configuration interface
@@ -306,7 +290,6 @@ class RunnerConfigurationInterface(ABC):
306
290
  Returns:
307
291
  Dictionary with initialization results
308
292
  """
309
- pass
310
293
 
311
294
  @abstractmethod
312
295
  def register_services(self, service_container) -> None:
@@ -315,7 +298,6 @@ class RunnerConfigurationInterface(ABC):
315
298
  Args:
316
299
  service_container: Service container for registration
317
300
  """
318
- pass
319
301
 
320
302
  @abstractmethod
321
303
  def load_configuration(self, config_path: Optional[Path] = None) -> Dict[str, Any]:
@@ -327,7 +309,6 @@ class RunnerConfigurationInterface(ABC):
327
309
  Returns:
328
310
  Loaded configuration dictionary
329
311
  """
330
- pass
331
312
 
332
313
  @abstractmethod
333
314
  def validate_configuration(self, config: Dict[str, Any]) -> Tuple[bool, List[str]]:
@@ -339,7 +320,6 @@ class RunnerConfigurationInterface(ABC):
339
320
  Returns:
340
321
  Tuple of (is_valid, list_of_errors)
341
322
  """
342
- pass
343
323
 
344
324
  @abstractmethod
345
325
  def setup_logging(self, config: Dict[str, Any]) -> None:
@@ -348,4 +328,3 @@ class RunnerConfigurationInterface(ABC):
348
328
  Args:
349
329
  config: Logging configuration
350
330
  """
351
- pass
@@ -36,12 +36,10 @@ class SocketIOServiceInterface(ABC):
36
36
  @abstractmethod
37
37
  def start_sync(self) -> None:
38
38
  """Start the WebSocket server synchronously."""
39
- pass
40
39
 
41
40
  @abstractmethod
42
41
  def stop_sync(self) -> None:
43
42
  """Stop the WebSocket server synchronously."""
44
- pass
45
43
 
46
44
  @abstractmethod
47
45
  def broadcast_event(self, event_type: str, data: Dict[str, Any]) -> None:
@@ -51,7 +49,6 @@ class SocketIOServiceInterface(ABC):
51
49
  event_type: Type of event to broadcast
52
50
  data: Event data to send
53
51
  """
54
- pass
55
52
 
56
53
  @abstractmethod
57
54
  def send_to_client(
@@ -67,7 +64,6 @@ class SocketIOServiceInterface(ABC):
67
64
  Returns:
68
65
  True if message sent successfully
69
66
  """
70
- pass
71
67
 
72
68
  @abstractmethod
73
69
  def get_connection_count(self) -> int:
@@ -76,7 +72,6 @@ class SocketIOServiceInterface(ABC):
76
72
  Returns:
77
73
  Number of connected clients
78
74
  """
79
- pass
80
75
 
81
76
  @abstractmethod
82
77
  def is_running(self) -> bool:
@@ -85,7 +80,6 @@ class SocketIOServiceInterface(ABC):
85
80
  Returns:
86
81
  True if server is active
87
82
  """
88
- pass
89
83
 
90
84
  @abstractmethod
91
85
  def session_started(
@@ -98,12 +92,10 @@ class SocketIOServiceInterface(ABC):
98
92
  launch_method: Method used to launch the session
99
93
  working_dir: Working directory of the session
100
94
  """
101
- pass
102
95
 
103
96
  @abstractmethod
104
97
  def session_ended(self) -> None:
105
98
  """Notify that a session has ended."""
106
- pass
107
99
 
108
100
  @abstractmethod
109
101
  def claude_status_changed(
@@ -116,7 +108,6 @@ class SocketIOServiceInterface(ABC):
116
108
  pid: Process ID if applicable
117
109
  message: Optional status message
118
110
  """
119
- pass
120
111
 
121
112
  @abstractmethod
122
113
  def agent_delegated(self, agent: str, task: str, status: str = "started") -> None:
@@ -127,7 +118,6 @@ class SocketIOServiceInterface(ABC):
127
118
  task: Task assigned to the agent
128
119
  status: Status of the delegation
129
120
  """
130
- pass
131
121
 
132
122
  @abstractmethod
133
123
  def todo_updated(self, todos: List[Dict[str, Any]]) -> None:
@@ -136,7 +126,6 @@ class SocketIOServiceInterface(ABC):
136
126
  Args:
137
127
  todos: Updated list of todo items
138
128
  """
139
- pass
140
129
 
141
130
 
142
131
  # Project analyzer interface
@@ -161,7 +150,6 @@ class ProjectAnalyzerInterface(ABC):
161
150
  Returns:
162
151
  Dictionary with project analysis results
163
152
  """
164
- pass
165
153
 
166
154
  @abstractmethod
167
155
  def detect_technology_stack(self) -> List[str]:
@@ -170,7 +158,6 @@ class ProjectAnalyzerInterface(ABC):
170
158
  Returns:
171
159
  List of detected technologies
172
160
  """
173
- pass
174
161
 
175
162
  @abstractmethod
176
163
  def analyze_code_patterns(self) -> Dict[str, Any]:
@@ -179,7 +166,6 @@ class ProjectAnalyzerInterface(ABC):
179
166
  Returns:
180
167
  Dictionary of pattern analysis results
181
168
  """
182
- pass
183
169
 
184
170
  @abstractmethod
185
171
  def get_project_structure(self) -> Dict[str, Any]:
@@ -188,7 +174,6 @@ class ProjectAnalyzerInterface(ABC):
188
174
  Returns:
189
175
  Dictionary representing project structure
190
176
  """
191
- pass
192
177
 
193
178
  @abstractmethod
194
179
  def identify_entry_points(self) -> List[Path]:
@@ -197,7 +182,6 @@ class ProjectAnalyzerInterface(ABC):
197
182
  Returns:
198
183
  List of entry point paths
199
184
  """
200
- pass
201
185
 
202
186
  @abstractmethod
203
187
  def get_dependencies(self) -> Dict[str, List[str]]:
@@ -206,7 +190,6 @@ class ProjectAnalyzerInterface(ABC):
206
190
  Returns:
207
191
  Dictionary mapping dependency types to lists of dependencies
208
192
  """
209
- pass
210
193
 
211
194
  @abstractmethod
212
195
  def analyze_test_coverage(self) -> Dict[str, Any]:
@@ -215,7 +198,6 @@ class ProjectAnalyzerInterface(ABC):
215
198
  Returns:
216
199
  Dictionary with test coverage information
217
200
  """
218
- pass
219
201
 
220
202
  @abstractmethod
221
203
  def get_build_configuration(self) -> Dict[str, Any]:
@@ -224,7 +206,6 @@ class ProjectAnalyzerInterface(ABC):
224
206
  Returns:
225
207
  Dictionary with build configuration details
226
208
  """
227
- pass
228
209
 
229
210
 
230
211
  # Ticket manager interface
@@ -253,7 +234,6 @@ class TicketManagerInterface(ABC):
253
234
  Returns:
254
235
  Ticket ID
255
236
  """
256
- pass
257
237
 
258
238
  @abstractmethod
259
239
  def get_ticket(self, ticket_id: str) -> Optional[Dict[str, Any]]:
@@ -265,7 +245,6 @@ class TicketManagerInterface(ABC):
265
245
  Returns:
266
246
  Ticket data or None if not found
267
247
  """
268
- pass
269
248
 
270
249
  @abstractmethod
271
250
  def update_ticket(self, ticket_id: str, updates: Dict[str, Any]) -> bool:
@@ -278,7 +257,6 @@ class TicketManagerInterface(ABC):
278
257
  Returns:
279
258
  True if update successful
280
259
  """
281
- pass
282
260
 
283
261
  @abstractmethod
284
262
  def list_tickets(
@@ -293,7 +271,6 @@ class TicketManagerInterface(ABC):
293
271
  Returns:
294
272
  List of ticket data
295
273
  """
296
- pass
297
274
 
298
275
  @abstractmethod
299
276
  def assign_ticket(self, ticket_id: str, assignee: str) -> bool:
@@ -306,7 +283,6 @@ class TicketManagerInterface(ABC):
306
283
  Returns:
307
284
  True if assignment successful
308
285
  """
309
- pass
310
286
 
311
287
  @abstractmethod
312
288
  def close_ticket(self, ticket_id: str, resolution: Optional[str] = None) -> bool:
@@ -319,7 +295,6 @@ class TicketManagerInterface(ABC):
319
295
  Returns:
320
296
  True if close successful
321
297
  """
322
- pass
323
298
 
324
299
  @abstractmethod
325
300
  def search_tickets(self, query: str) -> List[Dict[str, Any]]:
@@ -331,7 +306,6 @@ class TicketManagerInterface(ABC):
331
306
  Returns:
332
307
  List of matching ticket data
333
308
  """
334
- pass
335
309
 
336
310
  @abstractmethod
337
311
  def get_ticket_statistics(self) -> Dict[str, Any]:
@@ -340,4 +314,3 @@ class TicketManagerInterface(ABC):
340
314
  Returns:
341
315
  Dictionary with ticket statistics
342
316
  """
343
- pass