claude-mpm 4.1.0__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 (358) 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 +133 -58
  21. claude_mpm/agents/templates/web_ui.json +3 -3
  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 +271 -268
  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 +192 -141
  39. claude_mpm/cli/commands/monitor.py +117 -88
  40. claude_mpm/cli/commands/run.py +120 -84
  41. claude_mpm/cli/commands/run_config_checker.py +4 -5
  42. claude_mpm/cli/commands/socketio_monitor.py +17 -19
  43. claude_mpm/cli/commands/tickets.py +92 -92
  44. claude_mpm/cli/parser.py +1 -5
  45. claude_mpm/cli/parsers/__init__.py +1 -1
  46. claude_mpm/cli/parsers/agent_manager_parser.py +50 -98
  47. claude_mpm/cli/parsers/agents_parser.py +2 -3
  48. claude_mpm/cli/parsers/base_parser.py +7 -5
  49. claude_mpm/cli/parsers/mcp_parser.py +4 -2
  50. claude_mpm/cli/parsers/monitor_parser.py +26 -18
  51. claude_mpm/cli/shared/__init__.py +10 -10
  52. claude_mpm/cli/shared/argument_patterns.py +57 -71
  53. claude_mpm/cli/shared/base_command.py +61 -53
  54. claude_mpm/cli/shared/error_handling.py +62 -58
  55. claude_mpm/cli/shared/output_formatters.py +78 -77
  56. claude_mpm/cli/startup_logging.py +204 -172
  57. claude_mpm/cli/utils.py +10 -11
  58. claude_mpm/cli_module/__init__.py +1 -1
  59. claude_mpm/cli_module/args.py +1 -1
  60. claude_mpm/cli_module/migration_example.py +5 -5
  61. claude_mpm/config/__init__.py +9 -9
  62. claude_mpm/config/agent_config.py +15 -14
  63. claude_mpm/config/experimental_features.py +4 -4
  64. claude_mpm/config/paths.py +0 -1
  65. claude_mpm/config/socketio_config.py +5 -6
  66. claude_mpm/constants.py +1 -2
  67. claude_mpm/core/__init__.py +8 -8
  68. claude_mpm/core/agent_name_normalizer.py +1 -1
  69. claude_mpm/core/agent_registry.py +20 -23
  70. claude_mpm/core/agent_session_manager.py +3 -3
  71. claude_mpm/core/base_service.py +7 -15
  72. claude_mpm/core/cache.py +4 -6
  73. claude_mpm/core/claude_runner.py +85 -113
  74. claude_mpm/core/config.py +43 -28
  75. claude_mpm/core/config_aliases.py +0 -9
  76. claude_mpm/core/config_constants.py +52 -30
  77. claude_mpm/core/constants.py +0 -1
  78. claude_mpm/core/container.py +18 -27
  79. claude_mpm/core/exceptions.py +2 -2
  80. claude_mpm/core/factories.py +10 -12
  81. claude_mpm/core/framework_loader.py +581 -280
  82. claude_mpm/core/hook_manager.py +26 -22
  83. claude_mpm/core/hook_performance_config.py +58 -47
  84. claude_mpm/core/injectable_service.py +1 -1
  85. claude_mpm/core/interactive_session.py +61 -152
  86. claude_mpm/core/interfaces.py +1 -100
  87. claude_mpm/core/lazy.py +5 -5
  88. claude_mpm/core/log_manager.py +587 -0
  89. claude_mpm/core/logger.py +125 -8
  90. claude_mpm/core/logging_config.py +15 -15
  91. claude_mpm/core/minimal_framework_loader.py +5 -8
  92. claude_mpm/core/oneshot_session.py +15 -33
  93. claude_mpm/core/optimized_agent_loader.py +4 -6
  94. claude_mpm/core/optimized_startup.py +2 -1
  95. claude_mpm/core/output_style_manager.py +147 -106
  96. claude_mpm/core/pm_hook_interceptor.py +0 -1
  97. claude_mpm/core/service_registry.py +11 -8
  98. claude_mpm/core/session_manager.py +1 -2
  99. claude_mpm/core/shared/__init__.py +1 -1
  100. claude_mpm/core/shared/config_loader.py +101 -97
  101. claude_mpm/core/shared/path_resolver.py +72 -68
  102. claude_mpm/core/shared/singleton_manager.py +56 -50
  103. claude_mpm/core/socketio_pool.py +26 -6
  104. claude_mpm/core/tool_access_control.py +4 -5
  105. claude_mpm/core/typing_utils.py +50 -59
  106. claude_mpm/core/unified_agent_registry.py +14 -19
  107. claude_mpm/core/unified_config.py +4 -6
  108. claude_mpm/core/unified_paths.py +197 -109
  109. claude_mpm/dashboard/open_dashboard.py +2 -4
  110. claude_mpm/experimental/cli_enhancements.py +51 -36
  111. claude_mpm/generators/agent_profile_generator.py +2 -4
  112. claude_mpm/hooks/base_hook.py +1 -2
  113. claude_mpm/hooks/claude_hooks/connection_pool.py +72 -26
  114. claude_mpm/hooks/claude_hooks/event_handlers.py +93 -38
  115. claude_mpm/hooks/claude_hooks/hook_handler.py +130 -76
  116. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +104 -77
  117. claude_mpm/hooks/claude_hooks/memory_integration.py +2 -4
  118. claude_mpm/hooks/claude_hooks/response_tracking.py +15 -11
  119. claude_mpm/hooks/claude_hooks/tool_analysis.py +12 -18
  120. claude_mpm/hooks/memory_integration_hook.py +5 -5
  121. claude_mpm/hooks/tool_call_interceptor.py +1 -1
  122. claude_mpm/hooks/validation_hooks.py +4 -4
  123. claude_mpm/init.py +4 -9
  124. claude_mpm/models/__init__.py +2 -2
  125. claude_mpm/models/agent_session.py +11 -14
  126. claude_mpm/scripts/mcp_server.py +20 -11
  127. claude_mpm/scripts/mcp_wrapper.py +5 -5
  128. claude_mpm/scripts/mpm_doctor.py +321 -0
  129. claude_mpm/scripts/socketio_daemon.py +28 -25
  130. claude_mpm/scripts/socketio_daemon_hardened.py +298 -258
  131. claude_mpm/scripts/socketio_server_manager.py +116 -95
  132. claude_mpm/services/__init__.py +49 -49
  133. claude_mpm/services/agent_capabilities_service.py +12 -18
  134. claude_mpm/services/agents/__init__.py +22 -22
  135. claude_mpm/services/agents/agent_builder.py +140 -119
  136. claude_mpm/services/agents/deployment/__init__.py +3 -3
  137. claude_mpm/services/agents/deployment/agent_config_provider.py +9 -9
  138. claude_mpm/services/agents/deployment/agent_configuration_manager.py +19 -20
  139. claude_mpm/services/agents/deployment/agent_definition_factory.py +1 -5
  140. claude_mpm/services/agents/deployment/agent_deployment.py +136 -106
  141. claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -8
  142. claude_mpm/services/agents/deployment/agent_environment_manager.py +2 -7
  143. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +6 -10
  144. claude_mpm/services/agents/deployment/agent_format_converter.py +11 -15
  145. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +2 -3
  146. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -5
  147. claude_mpm/services/agents/deployment/agent_metrics_collector.py +13 -19
  148. claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -1
  149. claude_mpm/services/agents/deployment/agent_template_builder.py +26 -35
  150. claude_mpm/services/agents/deployment/agent_validator.py +0 -1
  151. claude_mpm/services/agents/deployment/agent_version_manager.py +7 -9
  152. claude_mpm/services/agents/deployment/agent_versioning.py +3 -3
  153. claude_mpm/services/agents/deployment/agents_directory_resolver.py +6 -7
  154. claude_mpm/services/agents/deployment/async_agent_deployment.py +51 -38
  155. claude_mpm/services/agents/deployment/config/__init__.py +1 -1
  156. claude_mpm/services/agents/deployment/config/deployment_config.py +7 -8
  157. claude_mpm/services/agents/deployment/deployment_type_detector.py +1 -1
  158. claude_mpm/services/agents/deployment/deployment_wrapper.py +18 -18
  159. claude_mpm/services/agents/deployment/facade/__init__.py +1 -1
  160. claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -3
  161. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -4
  162. claude_mpm/services/agents/deployment/interface_adapter.py +5 -7
  163. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +345 -276
  164. claude_mpm/services/agents/deployment/pipeline/__init__.py +2 -2
  165. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +1 -1
  166. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +6 -4
  167. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +3 -3
  168. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +2 -2
  169. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +14 -13
  170. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -1
  171. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +1 -1
  172. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +8 -9
  173. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +1 -1
  174. claude_mpm/services/agents/deployment/processors/__init__.py +1 -1
  175. claude_mpm/services/agents/deployment/processors/agent_processor.py +20 -16
  176. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +5 -12
  177. claude_mpm/services/agents/deployment/results/__init__.py +1 -1
  178. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +1 -1
  179. claude_mpm/services/agents/deployment/strategies/__init__.py +2 -2
  180. claude_mpm/services/agents/deployment/strategies/base_strategy.py +1 -7
  181. claude_mpm/services/agents/deployment/strategies/project_strategy.py +1 -4
  182. claude_mpm/services/agents/deployment/strategies/system_strategy.py +2 -3
  183. claude_mpm/services/agents/deployment/strategies/user_strategy.py +3 -7
  184. claude_mpm/services/agents/deployment/validation/__init__.py +1 -1
  185. claude_mpm/services/agents/deployment/validation/agent_validator.py +1 -1
  186. claude_mpm/services/agents/deployment/validation/template_validator.py +2 -2
  187. claude_mpm/services/agents/deployment/validation/validation_result.py +2 -6
  188. claude_mpm/services/agents/loading/__init__.py +1 -1
  189. claude_mpm/services/agents/loading/agent_profile_loader.py +6 -12
  190. claude_mpm/services/agents/loading/base_agent_manager.py +5 -5
  191. claude_mpm/services/agents/loading/framework_agent_loader.py +2 -4
  192. claude_mpm/services/agents/management/__init__.py +1 -1
  193. claude_mpm/services/agents/management/agent_capabilities_generator.py +1 -3
  194. claude_mpm/services/agents/management/agent_management_service.py +5 -9
  195. claude_mpm/services/agents/memory/__init__.py +4 -4
  196. claude_mpm/services/agents/memory/agent_memory_manager.py +280 -160
  197. claude_mpm/services/agents/memory/agent_persistence_service.py +0 -2
  198. claude_mpm/services/agents/memory/content_manager.py +44 -38
  199. claude_mpm/services/agents/memory/template_generator.py +4 -6
  200. claude_mpm/services/agents/registry/__init__.py +10 -6
  201. claude_mpm/services/agents/registry/deployed_agent_discovery.py +30 -27
  202. claude_mpm/services/agents/registry/modification_tracker.py +3 -6
  203. claude_mpm/services/async_session_logger.py +1 -2
  204. claude_mpm/services/claude_session_logger.py +1 -2
  205. claude_mpm/services/command_deployment_service.py +173 -0
  206. claude_mpm/services/command_handler_service.py +20 -22
  207. claude_mpm/services/core/__init__.py +25 -25
  208. claude_mpm/services/core/base.py +0 -5
  209. claude_mpm/services/core/interfaces/__init__.py +32 -32
  210. claude_mpm/services/core/interfaces/agent.py +0 -21
  211. claude_mpm/services/core/interfaces/communication.py +0 -27
  212. claude_mpm/services/core/interfaces/infrastructure.py +0 -56
  213. claude_mpm/services/core/interfaces/service.py +0 -29
  214. claude_mpm/services/diagnostics/__init__.py +1 -1
  215. claude_mpm/services/diagnostics/checks/__init__.py +6 -6
  216. claude_mpm/services/diagnostics/checks/agent_check.py +89 -80
  217. claude_mpm/services/diagnostics/checks/base_check.py +12 -16
  218. claude_mpm/services/diagnostics/checks/claude_desktop_check.py +84 -81
  219. claude_mpm/services/diagnostics/checks/common_issues_check.py +99 -91
  220. claude_mpm/services/diagnostics/checks/configuration_check.py +82 -77
  221. claude_mpm/services/diagnostics/checks/filesystem_check.py +67 -68
  222. claude_mpm/services/diagnostics/checks/installation_check.py +254 -94
  223. claude_mpm/services/diagnostics/checks/mcp_check.py +90 -88
  224. claude_mpm/services/diagnostics/checks/monitor_check.py +75 -76
  225. claude_mpm/services/diagnostics/checks/startup_log_check.py +67 -73
  226. claude_mpm/services/diagnostics/diagnostic_runner.py +67 -59
  227. claude_mpm/services/diagnostics/doctor_reporter.py +107 -70
  228. claude_mpm/services/diagnostics/models.py +21 -19
  229. claude_mpm/services/event_aggregator.py +10 -17
  230. claude_mpm/services/event_bus/__init__.py +1 -1
  231. claude_mpm/services/event_bus/config.py +54 -35
  232. claude_mpm/services/event_bus/event_bus.py +76 -71
  233. claude_mpm/services/event_bus/relay.py +74 -64
  234. claude_mpm/services/events/__init__.py +11 -11
  235. claude_mpm/services/events/consumers/__init__.py +3 -3
  236. claude_mpm/services/events/consumers/dead_letter.py +71 -63
  237. claude_mpm/services/events/consumers/logging.py +39 -37
  238. claude_mpm/services/events/consumers/metrics.py +56 -57
  239. claude_mpm/services/events/consumers/socketio.py +82 -81
  240. claude_mpm/services/events/core.py +110 -99
  241. claude_mpm/services/events/interfaces.py +56 -72
  242. claude_mpm/services/events/producers/__init__.py +1 -1
  243. claude_mpm/services/events/producers/hook.py +38 -38
  244. claude_mpm/services/events/producers/system.py +46 -44
  245. claude_mpm/services/exceptions.py +81 -80
  246. claude_mpm/services/framework_claude_md_generator/__init__.py +2 -4
  247. claude_mpm/services/framework_claude_md_generator/content_assembler.py +3 -5
  248. claude_mpm/services/framework_claude_md_generator/content_validator.py +1 -1
  249. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +4 -4
  250. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -1
  251. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -2
  252. claude_mpm/services/framework_claude_md_generator/version_manager.py +4 -5
  253. claude_mpm/services/hook_service.py +6 -9
  254. claude_mpm/services/infrastructure/__init__.py +1 -1
  255. claude_mpm/services/infrastructure/context_preservation.py +8 -12
  256. claude_mpm/services/infrastructure/monitoring.py +21 -23
  257. claude_mpm/services/mcp_gateway/__init__.py +37 -37
  258. claude_mpm/services/mcp_gateway/auto_configure.py +95 -103
  259. claude_mpm/services/mcp_gateway/config/__init__.py +1 -1
  260. claude_mpm/services/mcp_gateway/config/config_loader.py +23 -25
  261. claude_mpm/services/mcp_gateway/config/config_schema.py +5 -5
  262. claude_mpm/services/mcp_gateway/config/configuration.py +9 -6
  263. claude_mpm/services/mcp_gateway/core/__init__.py +10 -10
  264. claude_mpm/services/mcp_gateway/core/base.py +0 -3
  265. claude_mpm/services/mcp_gateway/core/interfaces.py +1 -38
  266. claude_mpm/services/mcp_gateway/core/process_pool.py +99 -93
  267. claude_mpm/services/mcp_gateway/core/singleton_manager.py +65 -62
  268. claude_mpm/services/mcp_gateway/core/startup_verification.py +75 -74
  269. claude_mpm/services/mcp_gateway/main.py +2 -1
  270. claude_mpm/services/mcp_gateway/registry/service_registry.py +5 -8
  271. claude_mpm/services/mcp_gateway/registry/tool_registry.py +1 -1
  272. claude_mpm/services/mcp_gateway/server/__init__.py +1 -1
  273. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +12 -19
  274. claude_mpm/services/mcp_gateway/server/stdio_handler.py +4 -3
  275. claude_mpm/services/mcp_gateway/server/stdio_server.py +79 -71
  276. claude_mpm/services/mcp_gateway/tools/__init__.py +2 -2
  277. claude_mpm/services/mcp_gateway/tools/base_adapter.py +5 -6
  278. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +13 -22
  279. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +79 -78
  280. claude_mpm/services/mcp_gateway/tools/hello_world.py +12 -14
  281. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +42 -49
  282. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +51 -55
  283. claude_mpm/services/memory/__init__.py +3 -3
  284. claude_mpm/services/memory/builder.py +3 -6
  285. claude_mpm/services/memory/cache/__init__.py +1 -1
  286. claude_mpm/services/memory/cache/shared_prompt_cache.py +3 -5
  287. claude_mpm/services/memory/cache/simple_cache.py +1 -1
  288. claude_mpm/services/memory/indexed_memory.py +5 -7
  289. claude_mpm/services/memory/optimizer.py +7 -10
  290. claude_mpm/services/memory/router.py +8 -9
  291. claude_mpm/services/memory_hook_service.py +48 -34
  292. claude_mpm/services/monitor_build_service.py +77 -73
  293. claude_mpm/services/port_manager.py +130 -108
  294. claude_mpm/services/project/analyzer.py +12 -10
  295. claude_mpm/services/project/registry.py +11 -11
  296. claude_mpm/services/recovery_manager.py +10 -19
  297. claude_mpm/services/response_tracker.py +0 -1
  298. claude_mpm/services/runner_configuration_service.py +19 -20
  299. claude_mpm/services/session_management_service.py +7 -11
  300. claude_mpm/services/shared/__init__.py +1 -1
  301. claude_mpm/services/shared/async_service_base.py +58 -50
  302. claude_mpm/services/shared/config_service_base.py +73 -67
  303. claude_mpm/services/shared/lifecycle_service_base.py +82 -78
  304. claude_mpm/services/shared/manager_base.py +94 -82
  305. claude_mpm/services/shared/service_factory.py +96 -98
  306. claude_mpm/services/socketio/__init__.py +3 -3
  307. claude_mpm/services/socketio/client_proxy.py +5 -5
  308. claude_mpm/services/socketio/event_normalizer.py +199 -181
  309. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  310. claude_mpm/services/socketio/handlers/base.py +5 -4
  311. claude_mpm/services/socketio/handlers/connection.py +163 -136
  312. claude_mpm/services/socketio/handlers/file.py +13 -14
  313. claude_mpm/services/socketio/handlers/git.py +12 -7
  314. claude_mpm/services/socketio/handlers/hook.py +49 -44
  315. claude_mpm/services/socketio/handlers/memory.py +0 -1
  316. claude_mpm/services/socketio/handlers/project.py +0 -1
  317. claude_mpm/services/socketio/handlers/registry.py +37 -19
  318. claude_mpm/services/socketio/migration_utils.py +98 -84
  319. claude_mpm/services/socketio/server/__init__.py +1 -1
  320. claude_mpm/services/socketio/server/broadcaster.py +81 -87
  321. claude_mpm/services/socketio/server/core.py +65 -54
  322. claude_mpm/services/socketio/server/eventbus_integration.py +95 -56
  323. claude_mpm/services/socketio/server/main.py +64 -38
  324. claude_mpm/services/socketio_client_manager.py +10 -12
  325. claude_mpm/services/subprocess_launcher_service.py +4 -7
  326. claude_mpm/services/system_instructions_service.py +13 -14
  327. claude_mpm/services/ticket_manager.py +2 -2
  328. claude_mpm/services/utility_service.py +5 -13
  329. claude_mpm/services/version_control/__init__.py +16 -16
  330. claude_mpm/services/version_control/branch_strategy.py +5 -8
  331. claude_mpm/services/version_control/conflict_resolution.py +9 -23
  332. claude_mpm/services/version_control/git_operations.py +5 -7
  333. claude_mpm/services/version_control/semantic_versioning.py +16 -17
  334. claude_mpm/services/version_control/version_parser.py +13 -18
  335. claude_mpm/services/version_service.py +10 -11
  336. claude_mpm/storage/__init__.py +1 -1
  337. claude_mpm/storage/state_storage.py +22 -28
  338. claude_mpm/utils/__init__.py +6 -6
  339. claude_mpm/utils/agent_dependency_loader.py +47 -33
  340. claude_mpm/utils/config_manager.py +11 -14
  341. claude_mpm/utils/dependency_cache.py +1 -1
  342. claude_mpm/utils/dependency_manager.py +13 -17
  343. claude_mpm/utils/dependency_strategies.py +8 -10
  344. claude_mpm/utils/environment_context.py +3 -9
  345. claude_mpm/utils/error_handler.py +3 -13
  346. claude_mpm/utils/file_utils.py +1 -1
  347. claude_mpm/utils/path_operations.py +8 -12
  348. claude_mpm/utils/robust_installer.py +110 -33
  349. claude_mpm/utils/subprocess_utils.py +5 -6
  350. claude_mpm/validation/agent_validator.py +3 -6
  351. claude_mpm/validation/frontmatter_validator.py +1 -1
  352. {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/METADATA +1 -1
  353. claude_mpm-4.1.2.dist-info/RECORD +498 -0
  354. claude_mpm-4.1.0.dist-info/RECORD +0 -494
  355. {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/WHEEL +0 -0
  356. {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/entry_points.txt +0 -0
  357. {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/licenses/LICENSE +0 -0
  358. {claude_mpm-4.1.0.dist-info → claude_mpm-4.1.2.dist-info}/top_level.txt +0 -0
@@ -35,27 +35,22 @@ class IServiceContainer(ABC):
35
35
  self, service_type: type, implementation: type, singleton: bool = True
36
36
  ) -> None:
37
37
  """Register a service implementation"""
38
- pass
39
38
 
40
39
  @abstractmethod
41
40
  def register_instance(self, service_type: type, instance: Any) -> None:
42
41
  """Register a service instance"""
43
- pass
44
42
 
45
43
  @abstractmethod
46
44
  def resolve(self, service_type: type) -> Any:
47
45
  """Resolve a service by type"""
48
- pass
49
46
 
50
47
  @abstractmethod
51
48
  def resolve_all(self, service_type: type) -> List[Any]:
52
49
  """Resolve all implementations of a service type"""
53
- pass
54
50
 
55
51
  @abstractmethod
56
52
  def is_registered(self, service_type: type) -> bool:
57
53
  """Check if a service type is registered"""
58
- pass
59
54
 
60
55
 
61
56
  # Configuration management interfaces
@@ -65,22 +60,18 @@ class IConfigurationService(ABC):
65
60
  @abstractmethod
66
61
  def get(self, key: str, default: Any = None) -> Any:
67
62
  """Get configuration value by key"""
68
- pass
69
63
 
70
64
  @abstractmethod
71
65
  def set(self, key: str, value: Any) -> None:
72
66
  """Set configuration value"""
73
- pass
74
67
 
75
68
  @abstractmethod
76
69
  def reload(self) -> None:
77
70
  """Reload configuration from source"""
78
- pass
79
71
 
80
72
  @abstractmethod
81
73
  def shutdown(self) -> None:
82
74
  """Shutdown configuration service"""
83
- pass
84
75
 
85
76
 
86
77
  class IConfigurationManager(ABC):
@@ -89,32 +80,26 @@ class IConfigurationManager(ABC):
89
80
  @abstractmethod
90
81
  def get(self, key: str, default: Any = None) -> Any:
91
82
  """Get configuration value by key"""
92
- pass
93
83
 
94
84
  @abstractmethod
95
85
  def set(self, key: str, value: Any) -> None:
96
86
  """Set configuration value"""
97
- pass
98
87
 
99
88
  @abstractmethod
100
89
  def validate_config(self, config: Dict[str, Any]) -> Tuple[bool, List[str]]:
101
90
  """Validate configuration structure and values"""
102
- pass
103
91
 
104
92
  @abstractmethod
105
93
  def load_from_file(self, config_path: Path) -> None:
106
94
  """Load configuration from file"""
107
- pass
108
95
 
109
96
  @abstractmethod
110
97
  def save_to_file(self, config_path: Path) -> None:
111
98
  """Save configuration to file"""
112
- pass
113
99
 
114
100
  @abstractmethod
115
101
  def watch_changes(self, callback: callable) -> None:
116
102
  """Watch for configuration changes"""
117
- pass
118
103
 
119
104
 
120
105
  # Cache service interface
@@ -124,32 +109,26 @@ class ICacheService(ABC):
124
109
  @abstractmethod
125
110
  def get(self, key: str) -> Any:
126
111
  """Get value from cache"""
127
- pass
128
112
 
129
113
  @abstractmethod
130
114
  def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
131
115
  """Set value in cache with optional TTL"""
132
- pass
133
116
 
134
117
  @abstractmethod
135
118
  def delete(self, key: str) -> bool:
136
119
  """Delete key from cache"""
137
- pass
138
120
 
139
121
  @abstractmethod
140
122
  def invalidate(self, pattern: str) -> int:
141
123
  """Invalidate keys matching pattern"""
142
- pass
143
124
 
144
125
  @abstractmethod
145
126
  def clear(self) -> None:
146
127
  """Clear all cache entries"""
147
- pass
148
128
 
149
129
  @abstractmethod
150
130
  def get_cache_metrics(self) -> Dict[str, Any]:
151
131
  """Get cache performance metrics"""
152
- pass
153
132
 
154
133
 
155
134
  # Health monitoring interface
@@ -170,22 +149,18 @@ class IHealthMonitor(ABC):
170
149
  @abstractmethod
171
150
  async def check_health(self, service_name: str) -> HealthStatus:
172
151
  """Check health of a specific service"""
173
- pass
174
152
 
175
153
  @abstractmethod
176
154
  async def check_all_services(self) -> Dict[str, HealthStatus]:
177
155
  """Check health of all registered services"""
178
- pass
179
156
 
180
157
  @abstractmethod
181
158
  def register_health_check(self, service_name: str, check_func: callable) -> None:
182
159
  """Register a health check function for a service"""
183
- pass
184
160
 
185
161
  @abstractmethod
186
162
  def get_health_summary(self) -> Dict[str, Any]:
187
163
  """Get overall health summary"""
188
- pass
189
164
 
190
165
 
191
166
  # Prompt cache interface
@@ -211,27 +186,22 @@ class IPromptCache(ABC):
211
186
  @abstractmethod
212
187
  def get(self, key: str) -> Optional[Any]:
213
188
  """Get cached value by key"""
214
- pass
215
189
 
216
190
  @abstractmethod
217
191
  def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
218
192
  """Set cached value with optional TTL"""
219
- pass
220
193
 
221
194
  @abstractmethod
222
195
  def invalidate(self, pattern: str) -> int:
223
196
  """Invalidate cache entries matching pattern"""
224
- pass
225
197
 
226
198
  @abstractmethod
227
199
  def get_stats(self) -> Dict[str, Any]:
228
200
  """Get cache statistics"""
229
- pass
230
201
 
231
202
  @abstractmethod
232
203
  def clear(self) -> None:
233
204
  """Clear all cache entries"""
234
- pass
235
205
 
236
206
 
237
207
  # Template management interface
@@ -253,17 +223,14 @@ class ITemplateManager(ABC):
253
223
  self, template_content: str, context: TemplateRenderContext
254
224
  ) -> str:
255
225
  """Render template with given context"""
256
- pass
257
226
 
258
227
  @abstractmethod
259
228
  async def load_template(self, template_path: Path) -> str:
260
229
  """Load template from file"""
261
- pass
262
230
 
263
231
  @abstractmethod
264
232
  def register_function(self, name: str, func: callable) -> None:
265
233
  """Register custom template function"""
266
- pass
267
234
 
268
235
 
269
236
  # Service factory interface
@@ -273,17 +240,14 @@ class IServiceFactory(Generic[ServiceType], ABC):
273
240
  @abstractmethod
274
241
  def create(self, **kwargs) -> ServiceType:
275
242
  """Create service instance"""
276
- pass
277
243
 
278
244
  @abstractmethod
279
245
  def get_service_type(self) -> type:
280
246
  """Get the service type this factory creates"""
281
- pass
282
247
 
283
248
  @abstractmethod
284
249
  def supports(self, service_type: type) -> bool:
285
250
  """Check if factory supports service type"""
286
- pass
287
251
 
288
252
 
289
253
  # Logging interface
@@ -293,27 +257,22 @@ class IStructuredLogger(ABC):
293
257
  @abstractmethod
294
258
  def debug(self, message: str, **kwargs) -> None:
295
259
  """Log debug message with structured data"""
296
- pass
297
260
 
298
261
  @abstractmethod
299
262
  def info(self, message: str, **kwargs) -> None:
300
263
  """Log info message with structured data"""
301
- pass
302
264
 
303
265
  @abstractmethod
304
266
  def warning(self, message: str, **kwargs) -> None:
305
267
  """Log warning message with structured data"""
306
- pass
307
268
 
308
269
  @abstractmethod
309
270
  def error(self, message: str, **kwargs) -> None:
310
271
  """Log error message with structured data"""
311
- pass
312
272
 
313
273
  @abstractmethod
314
274
  def set_context(self, **kwargs) -> None:
315
275
  """Set logging context for all subsequent messages"""
316
- pass
317
276
 
318
277
 
319
278
  # Service lifecycle interface
@@ -323,27 +282,22 @@ class IServiceLifecycle(ABC):
323
282
  @abstractmethod
324
283
  async def initialize(self) -> None:
325
284
  """Initialize the service"""
326
- pass
327
285
 
328
286
  @abstractmethod
329
287
  async def start(self) -> None:
330
288
  """Start the service"""
331
- pass
332
289
 
333
290
  @abstractmethod
334
291
  async def stop(self) -> None:
335
292
  """Stop the service"""
336
- pass
337
293
 
338
294
  @abstractmethod
339
295
  async def restart(self) -> None:
340
296
  """Restart the service"""
341
- pass
342
297
 
343
298
  @abstractmethod
344
299
  def is_running(self) -> bool:
345
300
  """Check if service is running"""
346
- pass
347
301
 
348
302
 
349
303
  # Error handling interface
@@ -353,12 +307,10 @@ class IErrorHandler(ABC):
353
307
  @abstractmethod
354
308
  def handle_error(self, error: Exception, context: Dict[str, Any]) -> None:
355
309
  """Handle error with context"""
356
- pass
357
310
 
358
311
  @abstractmethod
359
312
  def get_error_stats(self) -> Dict[str, Any]:
360
313
  """Get error statistics"""
361
- pass
362
314
 
363
315
 
364
316
  # Performance monitoring interface
@@ -368,24 +320,20 @@ class IPerformanceMonitor(ABC):
368
320
  @abstractmethod
369
321
  def start_timer(self, operation: str) -> str:
370
322
  """Start timing an operation"""
371
- pass
372
323
 
373
324
  @abstractmethod
374
325
  def end_timer(self, timer_id: str) -> float:
375
326
  """End timing and return duration"""
376
- pass
377
327
 
378
328
  @abstractmethod
379
329
  def record_metric(
380
330
  self, name: str, value: float, tags: Optional[Dict[str, str]] = None
381
331
  ) -> None:
382
332
  """Record a performance metric"""
383
- pass
384
333
 
385
334
  @abstractmethod
386
335
  def get_metrics(self) -> Dict[str, Any]:
387
336
  """Get performance metrics"""
388
- pass
389
337
 
390
338
 
391
339
  # Event system interface
@@ -395,19 +343,15 @@ class IEventBus(ABC):
395
343
  @abstractmethod
396
344
  def publish(self, event_type: str, data: Any) -> None:
397
345
  """Publish an event"""
398
- pass
399
346
 
400
347
  @abstractmethod
401
348
  def subscribe(self, event_type: str, handler: callable) -> str:
402
349
  """Subscribe to an event type"""
403
- pass
404
350
 
405
351
  @abstractmethod
406
352
  def unsubscribe(self, subscription_id: str) -> None:
407
353
  """Unsubscribe from events"""
408
- pass
409
354
 
410
355
  @abstractmethod
411
356
  async def publish_async(self, event_type: str, data: Any) -> None:
412
357
  """Publish an event asynchronously"""
413
- pass
@@ -41,7 +41,6 @@ class VersionServiceInterface(ABC):
41
41
  Returns:
42
42
  Version string in semantic version format
43
43
  """
44
- pass
45
44
 
46
45
  @abstractmethod
47
46
  def get_version_info(self) -> Dict[str, Any]:
@@ -50,7 +49,6 @@ class VersionServiceInterface(ABC):
50
49
  Returns:
51
50
  Dictionary with version details and metadata
52
51
  """
53
- pass
54
52
 
55
53
  @abstractmethod
56
54
  def format_version_display(self, include_build: bool = False) -> str:
@@ -62,7 +60,6 @@ class VersionServiceInterface(ABC):
62
60
  Returns:
63
61
  Formatted version string for display
64
62
  """
65
- pass
66
63
 
67
64
  @abstractmethod
68
65
  def check_for_updates(self) -> Dict[str, Any]:
@@ -71,7 +68,6 @@ class VersionServiceInterface(ABC):
71
68
  Returns:
72
69
  Dictionary with update information
73
70
  """
74
- pass
75
71
 
76
72
 
77
73
  # Command handler interface
@@ -97,7 +93,6 @@ class CommandHandlerInterface(ABC):
97
93
  Returns:
98
94
  Dictionary with command execution results
99
95
  """
100
- pass
101
96
 
102
97
  @abstractmethod
103
98
  def get_available_commands(self) -> List[str]:
@@ -106,7 +101,6 @@ class CommandHandlerInterface(ABC):
106
101
  Returns:
107
102
  List of available command names
108
103
  """
109
- pass
110
104
 
111
105
  @abstractmethod
112
106
  def get_command_help(self, command: str) -> str:
@@ -118,7 +112,6 @@ class CommandHandlerInterface(ABC):
118
112
  Returns:
119
113
  Help text for the command
120
114
  """
121
- pass
122
115
 
123
116
 
124
117
  # Memory hook interface
@@ -136,12 +129,10 @@ class MemoryHookInterface(ABC):
136
129
  @abstractmethod
137
130
  def register_memory_hooks(self):
138
131
  """Register memory-related hooks with the hook service."""
139
- pass
140
132
 
141
133
  @abstractmethod
142
134
  def unregister_memory_hooks(self):
143
135
  """Unregister memory-related hooks from the hook service."""
144
- pass
145
136
 
146
137
  @abstractmethod
147
138
  def get_hook_status(self) -> Dict[str, Any]:
@@ -150,7 +141,6 @@ class MemoryHookInterface(ABC):
150
141
  Returns:
151
142
  Dictionary with hook status information
152
143
  """
153
- pass
154
144
 
155
145
 
156
146
  # Session management interface
@@ -175,7 +165,6 @@ class SessionManagementInterface(ABC):
175
165
  Returns:
176
166
  Session ID
177
167
  """
178
- pass
179
168
 
180
169
  @abstractmethod
181
170
  def end_session(self, session_id: str) -> bool:
@@ -187,7 +176,6 @@ class SessionManagementInterface(ABC):
187
176
  Returns:
188
177
  True if session ended successfully
189
178
  """
190
- pass
191
179
 
192
180
  @abstractmethod
193
181
  def get_session_status(self, session_id: str) -> Dict[str, Any]:
@@ -199,7 +187,6 @@ class SessionManagementInterface(ABC):
199
187
  Returns:
200
188
  Dictionary with session status information
201
189
  """
202
- pass
203
190
 
204
191
  @abstractmethod
205
192
  def list_active_sessions(self) -> List[str]:
@@ -208,7 +195,6 @@ class SessionManagementInterface(ABC):
208
195
  Returns:
209
196
  List of active session IDs
210
197
  """
211
- pass
212
198
 
213
199
  @abstractmethod
214
200
  async def cleanup_sessions(self) -> int:
@@ -217,7 +203,6 @@ class SessionManagementInterface(ABC):
217
203
  Returns:
218
204
  Number of sessions cleaned up
219
205
  """
220
- pass
221
206
 
222
207
 
223
208
  # Utility service interface
@@ -242,7 +227,6 @@ class UtilityServiceInterface(ABC):
242
227
  Returns:
243
228
  Formatted size string (e.g., "1.5 MB")
244
229
  """
245
- pass
246
230
 
247
231
  @abstractmethod
248
232
  def format_duration(self, seconds: float) -> str:
@@ -254,7 +238,6 @@ class UtilityServiceInterface(ABC):
254
238
  Returns:
255
239
  Formatted duration string (e.g., "2m 30s")
256
240
  """
257
- pass
258
241
 
259
242
  @abstractmethod
260
243
  def sanitize_filename(self, filename: str) -> str:
@@ -266,7 +249,6 @@ class UtilityServiceInterface(ABC):
266
249
  Returns:
267
250
  Sanitized filename
268
251
  """
269
- pass
270
252
 
271
253
  @abstractmethod
272
254
  def generate_unique_id(self, prefix: str = "") -> str:
@@ -278,7 +260,6 @@ class UtilityServiceInterface(ABC):
278
260
  Returns:
279
261
  Unique identifier string
280
262
  """
281
- pass
282
263
 
283
264
  @abstractmethod
284
265
  def validate_path(self, path: Path) -> Tuple[bool, Optional[str]]:
@@ -290,7 +271,6 @@ class UtilityServiceInterface(ABC):
290
271
  Returns:
291
272
  Tuple of (is_valid, error_message)
292
273
  """
293
- pass
294
274
 
295
275
 
296
276
  # Memory service interface
@@ -315,7 +295,6 @@ class MemoryServiceInterface(ABC):
315
295
  Returns:
316
296
  Memory content as string or None if not found
317
297
  """
318
- pass
319
298
 
320
299
  @abstractmethod
321
300
  def save_memory(self, agent_id: str, content: str) -> bool:
@@ -328,7 +307,6 @@ class MemoryServiceInterface(ABC):
328
307
  Returns:
329
308
  True if save successful
330
309
  """
331
- pass
332
310
 
333
311
  @abstractmethod
334
312
  def validate_memory_size(self, content: str) -> Tuple[bool, Optional[str]]:
@@ -340,7 +318,6 @@ class MemoryServiceInterface(ABC):
340
318
  Returns:
341
319
  Tuple of (is_valid, error_message)
342
320
  """
343
- pass
344
321
 
345
322
  @abstractmethod
346
323
  def optimize_memory(self, agent_id: str) -> bool:
@@ -352,7 +329,6 @@ class MemoryServiceInterface(ABC):
352
329
  Returns:
353
330
  True if optimization successful
354
331
  """
355
- pass
356
332
 
357
333
  @abstractmethod
358
334
  def get_memory_stats(self, agent_id: str) -> Dict[str, Any]:
@@ -364,7 +340,6 @@ class MemoryServiceInterface(ABC):
364
340
  Returns:
365
341
  Dictionary with memory statistics
366
342
  """
367
- pass
368
343
 
369
344
 
370
345
  # Hook service interface
@@ -393,7 +368,6 @@ class HookServiceInterface(ABC):
393
368
  Returns:
394
369
  Hook registration ID
395
370
  """
396
- pass
397
371
 
398
372
  @abstractmethod
399
373
  def unregister_hook(self, registration_id: str) -> bool:
@@ -405,7 +379,6 @@ class HookServiceInterface(ABC):
405
379
  Returns:
406
380
  True if unregistration successful
407
381
  """
408
- pass
409
382
 
410
383
  @abstractmethod
411
384
  def execute_hook(self, hook_name: str, *args, **kwargs) -> List[Any]:
@@ -419,7 +392,6 @@ class HookServiceInterface(ABC):
419
392
  Returns:
420
393
  List of callback return values
421
394
  """
422
- pass
423
395
 
424
396
  @abstractmethod
425
397
  def get_hook_info(self, hook_name: str) -> Dict[str, Any]:
@@ -431,4 +403,3 @@ class HookServiceInterface(ABC):
431
403
  Returns:
432
404
  Dictionary with hook information
433
405
  """
434
- pass
@@ -15,4 +15,4 @@ from .diagnostic_runner import DiagnosticRunner
15
15
  from .doctor_reporter import DoctorReporter
16
16
  from .models import DiagnosticResult, DiagnosticStatus
17
17
 
18
- __all__ = ["DiagnosticRunner", "DoctorReporter", "DiagnosticResult", "DiagnosticStatus"]
18
+ __all__ = ["DiagnosticResult", "DiagnosticRunner", "DiagnosticStatus", "DoctorReporter"]
@@ -17,14 +17,14 @@ from .monitor_check import MonitorCheck
17
17
  from .startup_log_check import StartupLogCheck
18
18
 
19
19
  __all__ = [
20
+ "AgentCheck",
20
21
  "BaseDiagnosticCheck",
21
- "InstallationCheck",
22
- "ConfigurationCheck",
23
22
  "ClaudeDesktopCheck",
24
- "AgentCheck",
23
+ "CommonIssuesCheck",
24
+ "ConfigurationCheck",
25
+ "FilesystemCheck",
26
+ "InstallationCheck",
25
27
  "MCPCheck",
26
28
  "MonitorCheck",
27
- "FilesystemCheck",
28
- "CommonIssuesCheck",
29
29
  "StartupLogCheck",
30
- ]
30
+ ]