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
@@ -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
  """
@@ -0,0 +1,311 @@
1
+ """
2
+ Cache Manager Service for Framework Loader
3
+ ==========================================
4
+
5
+ WHY: This service extracts and centralizes cache management logic from the FrameworkLoader,
6
+ providing a clean interface for managing multiple cache types with different TTLs.
7
+
8
+ DESIGN DECISION: Built on top of the existing FileSystemCache infrastructure while
9
+ providing a specialized interface for framework-specific caching needs.
10
+
11
+ EXTRACTED FROM: core/framework_loader.py (lines 89-140)
12
+ - Reduces FrameworkLoader complexity by ~50 lines
13
+ - Provides thread-safe, type-specific cache management
14
+
15
+ NOTE: The ICacheManager interface has been moved to service_interfaces.py for
16
+ better organization and to support dependency injection.
17
+ """
18
+
19
+ import threading
20
+ import time
21
+ from typing import Any, Dict, Optional, Set, Tuple
22
+
23
+ from claude_mpm.core.cache import FileSystemCache
24
+ from claude_mpm.core.logger import get_logger
25
+
26
+ # Import interface from consolidated location
27
+ from .service_interfaces import ICacheManager
28
+
29
+
30
+ class CacheManager(ICacheManager):
31
+ """
32
+ Centralized cache management service for framework loader.
33
+
34
+ This service manages multiple cache types with different TTLs:
35
+ - Agent capabilities (60s TTL)
36
+ - Deployed agents (30s TTL)
37
+ - Agent metadata (60s TTL)
38
+ - Memories (60s TTL)
39
+
40
+ Thread-safe implementation using locks for concurrent access.
41
+ """
42
+
43
+ # Default TTL values (in seconds)
44
+ DEFAULT_CAPABILITIES_TTL = 60
45
+ DEFAULT_DEPLOYED_AGENTS_TTL = 30
46
+ DEFAULT_METADATA_TTL = 60
47
+ DEFAULT_MEMORIES_TTL = 60
48
+
49
+ def __init__(
50
+ self,
51
+ capabilities_ttl: float = DEFAULT_CAPABILITIES_TTL,
52
+ deployed_agents_ttl: float = DEFAULT_DEPLOYED_AGENTS_TTL,
53
+ metadata_ttl: float = DEFAULT_METADATA_TTL,
54
+ memories_ttl: float = DEFAULT_MEMORIES_TTL,
55
+ ):
56
+ """
57
+ Initialize cache manager with configurable TTLs.
58
+
59
+ Args:
60
+ capabilities_ttl: TTL for agent capabilities cache
61
+ deployed_agents_ttl: TTL for deployed agents cache
62
+ metadata_ttl: TTL for agent metadata cache
63
+ memories_ttl: TTL for memories cache
64
+ """
65
+ self.logger = get_logger("cache_manager")
66
+
67
+ # TTL configuration
68
+ self.capabilities_ttl = capabilities_ttl
69
+ self.deployed_agents_ttl = deployed_agents_ttl
70
+ self.metadata_ttl = metadata_ttl
71
+ self.memories_ttl = memories_ttl
72
+
73
+ # Cache storage with timestamps
74
+ self._capabilities_cache: Optional[str] = None
75
+ self._capabilities_cache_time: float = 0
76
+
77
+ self._deployed_agents_cache: Optional[Set[str]] = None
78
+ self._deployed_agents_cache_time: float = 0
79
+
80
+ self._agent_metadata_cache: Dict[
81
+ str, Tuple[Optional[Dict[str, Any]], float]
82
+ ] = {}
83
+
84
+ self._memories_cache: Optional[Dict[str, Any]] = None
85
+ self._memories_cache_time: float = 0
86
+
87
+ # Thread safety
88
+ self._lock = threading.RLock()
89
+
90
+ # Underlying file system cache (optional, for persistence)
91
+ self._fs_cache = FileSystemCache(
92
+ max_size_mb=50, # 50MB for framework caches
93
+ default_ttl=max(
94
+ capabilities_ttl, deployed_agents_ttl, metadata_ttl, memories_ttl
95
+ ),
96
+ )
97
+
98
+ self.logger.debug(
99
+ f"Cache manager initialized with TTLs: "
100
+ f"capabilities={capabilities_ttl}s, "
101
+ f"deployed_agents={deployed_agents_ttl}s, "
102
+ f"metadata={metadata_ttl}s, "
103
+ f"memories={memories_ttl}s"
104
+ )
105
+
106
+ def is_cache_valid(self, cache_time: float, ttl: float) -> bool:
107
+ """Check if a cache entry is still valid based on its timestamp and TTL."""
108
+ current_time = time.time()
109
+ age = current_time - cache_time
110
+ return age < ttl
111
+
112
+ # Agent capabilities cache
113
+ def get_capabilities(self) -> Optional[str]:
114
+ """Get cached agent capabilities."""
115
+ with self._lock:
116
+ if self._capabilities_cache is not None and self.is_cache_valid(
117
+ self._capabilities_cache_time, self.capabilities_ttl
118
+ ):
119
+ age = time.time() - self._capabilities_cache_time
120
+ self.logger.debug(f"Cache hit: agent capabilities (age: {age:.1f}s)")
121
+ return self._capabilities_cache
122
+
123
+ self.logger.debug("Cache miss: agent capabilities")
124
+ return None
125
+
126
+ def set_capabilities(self, value: str) -> None:
127
+ """Set agent capabilities cache."""
128
+ with self._lock:
129
+ self._capabilities_cache = value
130
+ self._capabilities_cache_time = time.time()
131
+ self.logger.debug("Updated agent capabilities cache")
132
+
133
+ # Deployed agents cache
134
+ def get_deployed_agents(self) -> Optional[Set[str]]:
135
+ """Get cached deployed agents set."""
136
+ with self._lock:
137
+ if self._deployed_agents_cache is not None and self.is_cache_valid(
138
+ self._deployed_agents_cache_time, self.deployed_agents_ttl
139
+ ):
140
+ age = time.time() - self._deployed_agents_cache_time
141
+ self.logger.debug(f"Cache hit: deployed agents (age: {age:.1f}s)")
142
+ return (
143
+ self._deployed_agents_cache.copy()
144
+ ) # Return a copy to prevent external modification
145
+
146
+ self.logger.debug("Cache miss: deployed agents")
147
+ return None
148
+
149
+ def set_deployed_agents(self, agents: Set[str]) -> None:
150
+ """Set deployed agents cache."""
151
+ with self._lock:
152
+ self._deployed_agents_cache = agents.copy() # Store a copy
153
+ self._deployed_agents_cache_time = time.time()
154
+ self.logger.debug(
155
+ f"Updated deployed agents cache with {len(agents)} agents"
156
+ )
157
+
158
+ # Agent metadata cache
159
+ def get_agent_metadata(
160
+ self, agent_file: str
161
+ ) -> Optional[Tuple[Optional[Dict[str, Any]], float]]:
162
+ """Get cached agent metadata for a specific file."""
163
+ with self._lock:
164
+ if agent_file in self._agent_metadata_cache:
165
+ cached_data, cached_mtime = self._agent_metadata_cache[agent_file]
166
+ # Check if cache is still valid
167
+ if self.is_cache_valid(cached_mtime, self.metadata_ttl):
168
+ self.logger.debug(f"Cache hit: metadata for {agent_file}")
169
+ return cached_data, cached_mtime
170
+
171
+ self.logger.debug(f"Cache miss: metadata for {agent_file}")
172
+ return None
173
+
174
+ def set_agent_metadata(
175
+ self, agent_file: str, metadata: Optional[Dict[str, Any]], mtime: float
176
+ ) -> None:
177
+ """Set agent metadata cache for a specific file."""
178
+ with self._lock:
179
+ self._agent_metadata_cache[agent_file] = (metadata, mtime)
180
+ self.logger.debug(f"Updated metadata cache for {agent_file}")
181
+
182
+ # Memories cache
183
+ def get_memories(self) -> Optional[Dict[str, Any]]:
184
+ """Get cached memories."""
185
+ with self._lock:
186
+ if self._memories_cache is not None and self.is_cache_valid(
187
+ self._memories_cache_time, self.memories_ttl
188
+ ):
189
+ age = time.time() - self._memories_cache_time
190
+ self.logger.debug(f"Cache hit: memories (age: {age:.1f}s)")
191
+ return self._memories_cache.copy() # Return a copy
192
+
193
+ self.logger.debug("Cache miss: memories")
194
+ return None
195
+
196
+ def set_memories(self, memories: Dict[str, Any]) -> None:
197
+ """Set memories cache."""
198
+ with self._lock:
199
+ self._memories_cache = memories.copy() # Store a copy
200
+ self._memories_cache_time = time.time()
201
+ self.logger.debug("Updated memories cache")
202
+
203
+ # Cache clearing methods
204
+ def clear_all(self) -> None:
205
+ """Clear all caches."""
206
+ with self._lock:
207
+ self.logger.info("Clearing all caches")
208
+
209
+ # Clear capabilities
210
+ self._capabilities_cache = None
211
+ self._capabilities_cache_time = 0
212
+
213
+ # Clear deployed agents
214
+ self._deployed_agents_cache = None
215
+ self._deployed_agents_cache_time = 0
216
+
217
+ # Clear metadata
218
+ self._agent_metadata_cache.clear()
219
+
220
+ # Clear memories
221
+ self._memories_cache = None
222
+ self._memories_cache_time = 0
223
+
224
+ # Clear underlying file system cache
225
+ self._fs_cache.clear()
226
+
227
+ def clear_agent_caches(self) -> None:
228
+ """Clear agent-related caches only."""
229
+ with self._lock:
230
+ self.logger.info("Clearing agent-related caches")
231
+
232
+ # Clear capabilities
233
+ self._capabilities_cache = None
234
+ self._capabilities_cache_time = 0
235
+
236
+ # Clear deployed agents
237
+ self._deployed_agents_cache = None
238
+ self._deployed_agents_cache_time = 0
239
+
240
+ # Clear metadata
241
+ self._agent_metadata_cache.clear()
242
+
243
+ def clear_memory_caches(self) -> None:
244
+ """Clear memory-related caches only."""
245
+ with self._lock:
246
+ self.logger.info("Clearing memory caches")
247
+
248
+ self._memories_cache = None
249
+ self._memories_cache_time = 0
250
+
251
+ def get_stats(self) -> Dict[str, Any]:
252
+ """Get cache statistics."""
253
+ with self._lock:
254
+ current_time = time.time()
255
+
256
+ stats = {
257
+ "capabilities": {
258
+ "cached": self._capabilities_cache is not None,
259
+ "age": (
260
+ current_time - self._capabilities_cache_time
261
+ if self._capabilities_cache
262
+ else None
263
+ ),
264
+ "valid": (
265
+ self.is_cache_valid(
266
+ self._capabilities_cache_time, self.capabilities_ttl
267
+ )
268
+ if self._capabilities_cache
269
+ else False
270
+ ),
271
+ },
272
+ "deployed_agents": {
273
+ "cached": self._deployed_agents_cache is not None,
274
+ "count": (
275
+ len(self._deployed_agents_cache)
276
+ if self._deployed_agents_cache
277
+ else 0
278
+ ),
279
+ "age": (
280
+ current_time - self._deployed_agents_cache_time
281
+ if self._deployed_agents_cache
282
+ else None
283
+ ),
284
+ "valid": (
285
+ self.is_cache_valid(
286
+ self._deployed_agents_cache_time, self.deployed_agents_ttl
287
+ )
288
+ if self._deployed_agents_cache
289
+ else False
290
+ ),
291
+ },
292
+ "metadata": {"entries": len(self._agent_metadata_cache)},
293
+ "memories": {
294
+ "cached": self._memories_cache is not None,
295
+ "age": (
296
+ current_time - self._memories_cache_time
297
+ if self._memories_cache
298
+ else None
299
+ ),
300
+ "valid": (
301
+ self.is_cache_valid(
302
+ self._memories_cache_time, self.memories_ttl
303
+ )
304
+ if self._memories_cache
305
+ else False
306
+ ),
307
+ },
308
+ "fs_cache": self._fs_cache.get_stats() if self._fs_cache else {},
309
+ }
310
+
311
+ return stats
@@ -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