claude-mpm 3.9.11__py3-none-any.whl → 4.0.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 (419) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +2 -2
  3. claude_mpm/__main__.py +3 -2
  4. claude_mpm/agents/__init__.py +85 -79
  5. claude_mpm/agents/agent_loader.py +464 -1003
  6. claude_mpm/agents/agent_loader_integration.py +45 -45
  7. claude_mpm/agents/agents_metadata.py +29 -30
  8. claude_mpm/agents/async_agent_loader.py +156 -138
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/base_agent_loader.py +179 -151
  11. claude_mpm/agents/frontmatter_validator.py +229 -130
  12. claude_mpm/agents/schema/agent_schema.json +1 -1
  13. claude_mpm/agents/system_agent_config.py +213 -147
  14. claude_mpm/agents/templates/__init__.py +13 -13
  15. claude_mpm/agents/templates/code_analyzer.json +2 -2
  16. claude_mpm/agents/templates/data_engineer.json +1 -1
  17. claude_mpm/agents/templates/documentation.json +23 -11
  18. claude_mpm/agents/templates/engineer.json +22 -6
  19. claude_mpm/agents/templates/memory_manager.json +1 -1
  20. claude_mpm/agents/templates/ops.json +2 -2
  21. claude_mpm/agents/templates/project_organizer.json +1 -1
  22. claude_mpm/agents/templates/qa.json +1 -1
  23. claude_mpm/agents/templates/refactoring_engineer.json +222 -0
  24. claude_mpm/agents/templates/research.json +20 -14
  25. claude_mpm/agents/templates/security.json +1 -1
  26. claude_mpm/agents/templates/ticketing.json +1 -1
  27. claude_mpm/agents/templates/version_control.json +1 -1
  28. claude_mpm/agents/templates/web_qa.json +3 -1
  29. claude_mpm/agents/templates/web_ui.json +2 -2
  30. claude_mpm/cli/__init__.py +79 -51
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +20 -20
  33. claude_mpm/cli/commands/agents.py +279 -247
  34. claude_mpm/cli/commands/aggregate.py +138 -157
  35. claude_mpm/cli/commands/cleanup.py +147 -147
  36. claude_mpm/cli/commands/config.py +93 -76
  37. claude_mpm/cli/commands/info.py +17 -16
  38. claude_mpm/cli/commands/mcp.py +140 -905
  39. claude_mpm/cli/commands/mcp_command_router.py +139 -0
  40. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  41. claude_mpm/cli/commands/mcp_install_commands.py +20 -0
  42. claude_mpm/cli/commands/mcp_server_commands.py +175 -0
  43. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  44. claude_mpm/cli/commands/memory.py +239 -203
  45. claude_mpm/cli/commands/monitor.py +203 -81
  46. claude_mpm/cli/commands/run.py +380 -429
  47. claude_mpm/cli/commands/run_config_checker.py +160 -0
  48. claude_mpm/cli/commands/socketio_monitor.py +235 -0
  49. claude_mpm/cli/commands/tickets.py +305 -197
  50. claude_mpm/cli/parser.py +24 -1156
  51. claude_mpm/cli/parsers/__init__.py +29 -0
  52. claude_mpm/cli/parsers/agents_parser.py +136 -0
  53. claude_mpm/cli/parsers/base_parser.py +331 -0
  54. claude_mpm/cli/parsers/config_parser.py +85 -0
  55. claude_mpm/cli/parsers/mcp_parser.py +152 -0
  56. claude_mpm/cli/parsers/memory_parser.py +138 -0
  57. claude_mpm/cli/parsers/monitor_parser.py +104 -0
  58. claude_mpm/cli/parsers/run_parser.py +147 -0
  59. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  60. claude_mpm/cli/ticket_cli.py +7 -3
  61. claude_mpm/cli/utils.py +55 -37
  62. claude_mpm/cli_module/__init__.py +6 -6
  63. claude_mpm/cli_module/args.py +188 -140
  64. claude_mpm/cli_module/commands.py +79 -70
  65. claude_mpm/cli_module/migration_example.py +38 -60
  66. claude_mpm/config/__init__.py +32 -25
  67. claude_mpm/config/agent_config.py +151 -119
  68. claude_mpm/config/experimental_features.py +71 -73
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +35 -18
  72. claude_mpm/core/__init__.py +9 -6
  73. claude_mpm/core/agent_name_normalizer.py +68 -71
  74. claude_mpm/core/agent_registry.py +372 -521
  75. claude_mpm/core/agent_session_manager.py +74 -63
  76. claude_mpm/core/base_service.py +116 -87
  77. claude_mpm/core/cache.py +119 -153
  78. claude_mpm/core/claude_runner.py +425 -1120
  79. claude_mpm/core/config.py +263 -168
  80. claude_mpm/core/config_aliases.py +69 -61
  81. claude_mpm/core/config_constants.py +292 -0
  82. claude_mpm/core/constants.py +57 -99
  83. claude_mpm/core/container.py +211 -178
  84. claude_mpm/core/exceptions.py +233 -89
  85. claude_mpm/core/factories.py +92 -54
  86. claude_mpm/core/framework_loader.py +378 -220
  87. claude_mpm/core/hook_manager.py +198 -83
  88. claude_mpm/core/hook_performance_config.py +136 -0
  89. claude_mpm/core/injectable_service.py +61 -55
  90. claude_mpm/core/interactive_session.py +165 -155
  91. claude_mpm/core/interfaces.py +221 -195
  92. claude_mpm/core/lazy.py +96 -96
  93. claude_mpm/core/logger.py +133 -107
  94. claude_mpm/core/logging_config.py +185 -157
  95. claude_mpm/core/minimal_framework_loader.py +20 -15
  96. claude_mpm/core/mixins.py +30 -29
  97. claude_mpm/core/oneshot_session.py +215 -181
  98. claude_mpm/core/optimized_agent_loader.py +134 -138
  99. claude_mpm/core/optimized_startup.py +159 -157
  100. claude_mpm/core/pm_hook_interceptor.py +85 -72
  101. claude_mpm/core/service_registry.py +103 -101
  102. claude_mpm/core/session_manager.py +97 -87
  103. claude_mpm/core/socketio_pool.py +212 -158
  104. claude_mpm/core/tool_access_control.py +58 -51
  105. claude_mpm/core/types.py +46 -24
  106. claude_mpm/core/typing_utils.py +166 -82
  107. claude_mpm/core/unified_agent_registry.py +721 -0
  108. claude_mpm/core/unified_config.py +550 -0
  109. claude_mpm/core/unified_paths.py +549 -0
  110. claude_mpm/dashboard/index.html +1 -1
  111. claude_mpm/dashboard/open_dashboard.py +51 -17
  112. claude_mpm/dashboard/static/css/dashboard.css +27 -8
  113. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  114. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  115. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  116. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  117. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  118. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  119. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  120. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  121. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  122. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  123. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  124. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  125. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  126. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  127. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  128. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  129. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  130. claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
  131. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  132. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
  133. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  134. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  135. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  136. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  137. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  138. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  139. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  140. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  141. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  142. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  143. claude_mpm/dashboard/static/js/socket-client.js +120 -54
  144. claude_mpm/dashboard/templates/index.html +40 -50
  145. claude_mpm/experimental/cli_enhancements.py +60 -58
  146. claude_mpm/generators/__init__.py +1 -1
  147. claude_mpm/generators/agent_profile_generator.py +75 -65
  148. claude_mpm/hooks/__init__.py +1 -1
  149. claude_mpm/hooks/base_hook.py +33 -28
  150. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  151. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  152. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  153. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  154. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  155. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  156. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  157. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  158. claude_mpm/hooks/memory_integration_hook.py +140 -100
  159. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  160. claude_mpm/hooks/validation_hooks.py +57 -49
  161. claude_mpm/init.py +145 -121
  162. claude_mpm/models/__init__.py +9 -9
  163. claude_mpm/models/agent_definition.py +33 -23
  164. claude_mpm/models/agent_session.py +228 -200
  165. claude_mpm/scripts/__init__.py +1 -1
  166. claude_mpm/scripts/socketio_daemon.py +192 -75
  167. claude_mpm/scripts/socketio_server_manager.py +328 -0
  168. claude_mpm/scripts/start_activity_logging.py +25 -22
  169. claude_mpm/services/__init__.py +68 -43
  170. claude_mpm/services/agent_capabilities_service.py +271 -0
  171. claude_mpm/services/agents/__init__.py +23 -32
  172. claude_mpm/services/agents/deployment/__init__.py +3 -3
  173. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  174. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  175. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  176. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  177. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  178. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  179. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  180. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  181. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  182. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  183. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  184. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  185. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  186. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  187. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  188. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  189. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  190. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  191. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  192. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  193. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  194. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  195. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  196. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  197. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  198. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  199. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  200. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  201. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  202. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  203. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  204. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  205. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  206. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  207. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  208. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  209. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  210. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  211. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  212. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  213. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  214. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  215. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  216. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  217. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  218. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  219. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  220. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  221. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  222. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  223. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  224. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  225. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  226. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  227. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  228. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  229. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  230. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  231. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  232. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  233. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  234. claude_mpm/services/agents/loading/__init__.py +2 -2
  235. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  236. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  237. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  238. claude_mpm/services/agents/management/__init__.py +2 -2
  239. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  240. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  241. claude_mpm/services/agents/memory/__init__.py +9 -6
  242. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  243. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  244. claude_mpm/services/agents/memory/analyzer.py +430 -0
  245. claude_mpm/services/agents/memory/content_manager.py +376 -0
  246. claude_mpm/services/agents/memory/template_generator.py +468 -0
  247. claude_mpm/services/agents/registry/__init__.py +7 -10
  248. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  249. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  250. claude_mpm/services/async_session_logger.py +187 -153
  251. claude_mpm/services/claude_session_logger.py +87 -72
  252. claude_mpm/services/command_handler_service.py +217 -0
  253. claude_mpm/services/communication/__init__.py +3 -2
  254. claude_mpm/services/core/__init__.py +50 -97
  255. claude_mpm/services/core/base.py +60 -53
  256. claude_mpm/services/core/interfaces/__init__.py +188 -0
  257. claude_mpm/services/core/interfaces/agent.py +351 -0
  258. claude_mpm/services/core/interfaces/communication.py +343 -0
  259. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  260. claude_mpm/services/core/interfaces/service.py +434 -0
  261. claude_mpm/services/core/interfaces.py +19 -944
  262. claude_mpm/services/event_aggregator.py +208 -170
  263. claude_mpm/services/exceptions.py +387 -308
  264. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  265. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  266. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  267. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  268. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  269. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  270. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  271. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  272. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  273. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  274. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  275. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  276. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  277. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  278. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  279. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  280. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  281. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  282. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  283. claude_mpm/services/hook_service.py +106 -114
  284. claude_mpm/services/infrastructure/__init__.py +7 -5
  285. claude_mpm/services/infrastructure/context_preservation.py +233 -199
  286. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  287. claude_mpm/services/infrastructure/logging.py +83 -76
  288. claude_mpm/services/infrastructure/monitoring.py +547 -404
  289. claude_mpm/services/mcp_gateway/__init__.py +30 -13
  290. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  291. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  292. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  293. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  294. claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
  295. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  296. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  297. claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
  298. claude_mpm/services/mcp_gateway/main.py +287 -137
  299. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  300. claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
  301. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  302. claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
  303. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
  304. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  305. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  306. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  307. claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
  308. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  309. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  310. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  311. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  312. claude_mpm/services/memory/__init__.py +2 -2
  313. claude_mpm/services/memory/builder.py +451 -362
  314. claude_mpm/services/memory/cache/__init__.py +2 -2
  315. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  316. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  317. claude_mpm/services/memory/indexed_memory.py +195 -193
  318. claude_mpm/services/memory/optimizer.py +267 -234
  319. claude_mpm/services/memory/router.py +571 -263
  320. claude_mpm/services/memory_hook_service.py +237 -0
  321. claude_mpm/services/port_manager.py +223 -0
  322. claude_mpm/services/project/__init__.py +3 -3
  323. claude_mpm/services/project/analyzer.py +451 -305
  324. claude_mpm/services/project/registry.py +262 -240
  325. claude_mpm/services/recovery_manager.py +287 -231
  326. claude_mpm/services/response_tracker.py +87 -67
  327. claude_mpm/services/runner_configuration_service.py +587 -0
  328. claude_mpm/services/session_management_service.py +304 -0
  329. claude_mpm/services/socketio/__init__.py +4 -4
  330. claude_mpm/services/socketio/client_proxy.py +174 -0
  331. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  332. claude_mpm/services/socketio/handlers/base.py +44 -30
  333. claude_mpm/services/socketio/handlers/connection.py +145 -65
  334. claude_mpm/services/socketio/handlers/file.py +123 -108
  335. claude_mpm/services/socketio/handlers/git.py +607 -373
  336. claude_mpm/services/socketio/handlers/hook.py +170 -0
  337. claude_mpm/services/socketio/handlers/memory.py +4 -4
  338. claude_mpm/services/socketio/handlers/project.py +4 -4
  339. claude_mpm/services/socketio/handlers/registry.py +53 -38
  340. claude_mpm/services/socketio/server/__init__.py +18 -0
  341. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  342. claude_mpm/services/socketio/server/core.py +399 -0
  343. claude_mpm/services/socketio/server/main.py +323 -0
  344. claude_mpm/services/socketio_client_manager.py +160 -133
  345. claude_mpm/services/socketio_server.py +36 -1885
  346. claude_mpm/services/subprocess_launcher_service.py +316 -0
  347. claude_mpm/services/system_instructions_service.py +258 -0
  348. claude_mpm/services/ticket_manager.py +19 -533
  349. claude_mpm/services/utility_service.py +285 -0
  350. claude_mpm/services/version_control/__init__.py +18 -21
  351. claude_mpm/services/version_control/branch_strategy.py +20 -10
  352. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  353. claude_mpm/services/version_control/git_operations.py +52 -21
  354. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  355. claude_mpm/services/version_control/version_parser.py +145 -125
  356. claude_mpm/services/version_service.py +270 -0
  357. claude_mpm/storage/__init__.py +2 -2
  358. claude_mpm/storage/state_storage.py +177 -181
  359. claude_mpm/ticket_wrapper.py +2 -2
  360. claude_mpm/utils/__init__.py +2 -2
  361. claude_mpm/utils/agent_dependency_loader.py +453 -243
  362. claude_mpm/utils/config_manager.py +157 -118
  363. claude_mpm/utils/console.py +1 -1
  364. claude_mpm/utils/dependency_cache.py +102 -107
  365. claude_mpm/utils/dependency_manager.py +52 -47
  366. claude_mpm/utils/dependency_strategies.py +131 -96
  367. claude_mpm/utils/environment_context.py +110 -102
  368. claude_mpm/utils/error_handler.py +75 -55
  369. claude_mpm/utils/file_utils.py +80 -67
  370. claude_mpm/utils/framework_detection.py +12 -11
  371. claude_mpm/utils/import_migration_example.py +12 -60
  372. claude_mpm/utils/imports.py +48 -45
  373. claude_mpm/utils/path_operations.py +100 -93
  374. claude_mpm/utils/robust_installer.py +172 -164
  375. claude_mpm/utils/session_logging.py +30 -23
  376. claude_mpm/utils/subprocess_utils.py +99 -61
  377. claude_mpm/validation/__init__.py +1 -1
  378. claude_mpm/validation/agent_validator.py +151 -111
  379. claude_mpm/validation/frontmatter_validator.py +92 -71
  380. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +27 -1
  381. claude_mpm-4.0.3.dist-info/RECORD +402 -0
  382. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
  383. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
  384. claude_mpm/cli/commands/run_guarded.py +0 -511
  385. claude_mpm/config/memory_guardian_config.py +0 -325
  386. claude_mpm/config/memory_guardian_yaml.py +0 -335
  387. claude_mpm/core/config_paths.py +0 -150
  388. claude_mpm/core/memory_aware_runner.py +0 -353
  389. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  390. claude_mpm/deployment_paths.py +0 -261
  391. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  392. claude_mpm/models/state_models.py +0 -433
  393. claude_mpm/services/agent/__init__.py +0 -24
  394. claude_mpm/services/agent/deployment.py +0 -2548
  395. claude_mpm/services/agent/management.py +0 -598
  396. claude_mpm/services/agent/registry.py +0 -813
  397. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  398. claude_mpm/services/communication/socketio.py +0 -1935
  399. claude_mpm/services/communication/websocket.py +0 -479
  400. claude_mpm/services/framework_claude_md_generator.py +0 -624
  401. claude_mpm/services/health_monitor.py +0 -893
  402. claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
  403. claude_mpm/services/infrastructure/health_monitor.py +0 -775
  404. claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
  405. claude_mpm/services/infrastructure/memory_guardian.py +0 -944
  406. claude_mpm/services/infrastructure/restart_protection.py +0 -642
  407. claude_mpm/services/infrastructure/state_manager.py +0 -774
  408. claude_mpm/services/mcp_gateway/manager.py +0 -334
  409. claude_mpm/services/optimized_hook_service.py +0 -542
  410. claude_mpm/services/project_analyzer.py +0 -864
  411. claude_mpm/services/project_registry.py +0 -608
  412. claude_mpm/services/standalone_socketio_server.py +0 -1300
  413. claude_mpm/services/ticket_manager_di.py +0 -318
  414. claude_mpm/services/ticketing_service_original.py +0 -510
  415. claude_mpm/utils/paths.py +0 -395
  416. claude_mpm/utils/platform_memory.py +0 -524
  417. claude_mpm-3.9.11.dist-info/RECORD +0 -306
  418. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
  419. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,5 @@
1
+ from pathlib import Path
2
+
1
3
  """
2
4
  MCP Gateway Configuration Implementation
3
5
  ========================================
@@ -9,27 +11,27 @@ Part of ISS-0034: Infrastructure Setup - MCP Gateway Project Foundation
9
11
 
10
12
  import os
11
13
  from typing import Any, Dict, Optional
12
- from pathlib import Path
14
+
13
15
  import yaml
14
16
 
15
- from claude_mpm.services.mcp_gateway.core.interfaces import IMCPConfiguration
16
17
  from claude_mpm.services.mcp_gateway.core.base import BaseMCPService
17
18
  from claude_mpm.services.mcp_gateway.core.exceptions import MCPConfigurationError
19
+ from claude_mpm.services.mcp_gateway.core.interfaces import IMCPConfiguration
18
20
 
19
21
 
20
22
  class MCPConfiguration(BaseMCPService, IMCPConfiguration):
21
23
  """
22
24
  MCP Gateway configuration management service.
23
-
25
+
24
26
  This service handles loading, validation, and access to MCP Gateway configuration.
25
27
  It supports YAML-based configuration files and environment variable overrides.
26
-
28
+
27
29
  WHY: Configuration is centralized in a service to ensure consistent access
28
30
  patterns, validation, and the ability to reload configuration at runtime.
29
31
  The service pattern also allows for dependency injection of configuration
30
32
  into other MCP services.
31
33
  """
32
-
34
+
33
35
  DEFAULT_CONFIG = {
34
36
  "mcp": {
35
37
  "server": {
@@ -44,7 +46,7 @@ class MCPConfiguration(BaseMCPService, IMCPConfiguration):
44
46
  "capabilities": {
45
47
  "tools": True,
46
48
  "resources": False, # Not yet implemented
47
- "prompts": False, # Not yet implemented
49
+ "prompts": False, # Not yet implemented
48
50
  },
49
51
  },
50
52
  "tools": {
@@ -73,11 +75,11 @@ class MCPConfiguration(BaseMCPService, IMCPConfiguration):
73
75
  },
74
76
  }
75
77
  }
76
-
78
+
77
79
  def __init__(self, config_path: Optional[Path] = None):
78
80
  """
79
81
  Initialize MCP configuration service.
80
-
82
+
81
83
  Args:
82
84
  config_path: Optional path to configuration file
83
85
  """
@@ -85,76 +87,76 @@ class MCPConfiguration(BaseMCPService, IMCPConfiguration):
85
87
  self._config_path = config_path
86
88
  self._config_data: Dict[str, Any] = {}
87
89
  self._is_loaded = False
88
-
90
+
89
91
  async def _do_initialize(self) -> bool:
90
92
  """
91
93
  Initialize the configuration service.
92
-
94
+
93
95
  Returns:
94
96
  True if initialization successful
95
97
  """
96
98
  # Start with default configuration
97
99
  self._config_data = self.DEFAULT_CONFIG.copy()
98
-
100
+
99
101
  # Load from file if path provided
100
102
  if self._config_path:
101
103
  if not self.load_config(self._config_path):
102
104
  return False
103
-
105
+
104
106
  # Apply environment variable overrides
105
107
  self._apply_env_overrides()
106
-
108
+
107
109
  # Validate configuration
108
110
  if not self.validate():
109
111
  return False
110
-
112
+
111
113
  self._is_loaded = True
112
114
  self.log_info("Configuration initialized successfully")
113
115
  return True
114
-
116
+
115
117
  def load_config(self, config_path: Path) -> bool:
116
118
  """
117
119
  Load configuration from a file.
118
-
120
+
119
121
  Args:
120
122
  config_path: Path to configuration file
121
-
123
+
122
124
  Returns:
123
125
  True if configuration loaded successfully
124
126
  """
125
127
  try:
126
128
  # Expand user path
127
129
  config_path = Path(config_path).expanduser()
128
-
130
+
129
131
  if not config_path.exists():
130
132
  self.log_warning(f"Configuration file not found: {config_path}")
131
133
  return True # Not an error, use defaults
132
-
133
- with open(config_path, 'r') as f:
134
- if config_path.suffix in ['.yaml', '.yml']:
134
+
135
+ with open(config_path, "r") as f:
136
+ if config_path.suffix in [".yaml", ".yml"]:
135
137
  loaded_config = yaml.safe_load(f) or {}
136
138
  else:
137
139
  raise MCPConfigurationError(
138
140
  f"Unsupported configuration file format: {config_path.suffix}"
139
141
  )
140
-
142
+
141
143
  # Merge with existing configuration
142
144
  self._merge_config(self._config_data, loaded_config)
143
145
  self._config_path = config_path
144
-
146
+
145
147
  self.log_info(f"Configuration loaded from {config_path}")
146
148
  return True
147
-
149
+
148
150
  except yaml.YAMLError as e:
149
151
  raise MCPConfigurationError(f"Failed to parse YAML configuration: {e}")
150
152
  except Exception as e:
151
153
  self.log_error(f"Failed to load configuration: {e}")
152
154
  return False
153
-
155
+
154
156
  def _merge_config(self, base: Dict[str, Any], overlay: Dict[str, Any]) -> None:
155
157
  """
156
158
  Recursively merge overlay configuration into base.
157
-
159
+
158
160
  Args:
159
161
  base: Base configuration dictionary
160
162
  overlay: Configuration to merge in
@@ -164,30 +166,32 @@ class MCPConfiguration(BaseMCPService, IMCPConfiguration):
164
166
  self._merge_config(base[key], value)
165
167
  else:
166
168
  base[key] = value
167
-
169
+
168
170
  def _apply_env_overrides(self) -> None:
169
171
  """
170
172
  Apply environment variable overrides to configuration.
171
-
173
+
172
174
  Environment variables follow the pattern: MCP_GATEWAY_<SECTION>_<KEY>
173
175
  For example: MCP_GATEWAY_SERVER_NAME=my-server
174
176
  """
175
177
  prefix = "MCP_GATEWAY_"
176
-
178
+
177
179
  for env_key, env_value in os.environ.items():
178
180
  if not env_key.startswith(prefix):
179
181
  continue
180
-
182
+
181
183
  # Parse environment variable into configuration path
182
- config_path = env_key[len(prefix):].lower().split('_')
183
-
184
+ config_path = env_key[len(prefix) :].lower().split("_")
185
+
184
186
  # Navigate to the configuration location
185
187
  current = self._config_data
186
188
  for i, part in enumerate(config_path[:-1]):
187
189
  if part not in current:
188
190
  current[part] = {}
189
191
  elif not isinstance(current[part], dict):
190
- self.log_warning(f"Cannot override non-dict config at {'.'.join(config_path[:i+1])}")
192
+ self.log_warning(
193
+ f"Cannot override non-dict config at {'.'.join(config_path[:i+1])}"
194
+ )
191
195
  break
192
196
  current = current[part]
193
197
  else:
@@ -196,46 +200,47 @@ class MCPConfiguration(BaseMCPService, IMCPConfiguration):
196
200
  # Try to parse as JSON for complex types
197
201
  try:
198
202
  import json
203
+
199
204
  current[key] = json.loads(env_value)
200
205
  except:
201
206
  # Fall back to string value
202
207
  current[key] = env_value
203
-
208
+
204
209
  self.log_debug(f"Applied environment override: {env_key}")
205
-
210
+
206
211
  def get(self, key: str, default: Any = None) -> Any:
207
212
  """
208
213
  Get configuration value by key.
209
-
214
+
210
215
  Args:
211
216
  key: Configuration key (supports dot notation, e.g., "mcp.server.name")
212
217
  default: Default value if key not found
213
-
218
+
214
219
  Returns:
215
220
  Configuration value or default
216
221
  """
217
- parts = key.split('.')
222
+ parts = key.split(".")
218
223
  current = self._config_data
219
-
224
+
220
225
  for part in parts:
221
226
  if isinstance(current, dict) and part in current:
222
227
  current = current[part]
223
228
  else:
224
229
  return default
225
-
230
+
226
231
  return current
227
-
232
+
228
233
  def set(self, key: str, value: Any) -> None:
229
234
  """
230
235
  Set configuration value.
231
-
236
+
232
237
  Args:
233
238
  key: Configuration key (supports dot notation)
234
239
  value: Configuration value
235
240
  """
236
- parts = key.split('.')
241
+ parts = key.split(".")
237
242
  current = self._config_data
238
-
243
+
239
244
  # Navigate to parent
240
245
  for part in parts[:-1]:
241
246
  if part not in current:
@@ -245,15 +250,15 @@ class MCPConfiguration(BaseMCPService, IMCPConfiguration):
245
250
  f"Cannot set value at {key}: parent is not a dictionary"
246
251
  )
247
252
  current = current[part]
248
-
253
+
249
254
  # Set the value
250
255
  current[parts[-1]] = value
251
256
  self.log_debug(f"Configuration updated: {key} = {value}")
252
-
257
+
253
258
  def validate(self) -> bool:
254
259
  """
255
260
  Validate the current configuration.
256
-
261
+
257
262
  Returns:
258
263
  True if configuration is valid
259
264
  """
@@ -264,66 +269,66 @@ class MCPConfiguration(BaseMCPService, IMCPConfiguration):
264
269
  "mcp.server.version",
265
270
  "mcp.server.communication.type",
266
271
  ]
267
-
272
+
268
273
  for field in required_fields:
269
274
  if self.get(field) is None:
270
275
  raise MCPConfigurationError(
271
276
  f"Required configuration field missing: {field}",
272
- config_key=field
277
+ config_key=field,
273
278
  )
274
-
279
+
275
280
  # Validate communication type
276
281
  comm_type = self.get("mcp.server.communication.type")
277
282
  if comm_type not in ["stdio", "websocket", "http"]:
278
283
  raise MCPConfigurationError(
279
284
  f"Invalid communication type: {comm_type}",
280
285
  config_key="mcp.server.communication.type",
281
- expected_type="stdio|websocket|http"
286
+ expected_type="stdio|websocket|http",
282
287
  )
283
-
288
+
284
289
  # Validate numeric fields
285
290
  timeout = self.get("mcp.server.communication.timeout")
286
291
  if not isinstance(timeout, (int, float)) or timeout <= 0:
287
292
  raise MCPConfigurationError(
288
293
  "Invalid timeout value",
289
294
  config_key="mcp.server.communication.timeout",
290
- expected_type="positive number"
295
+ expected_type="positive number",
291
296
  )
292
-
297
+
293
298
  self.log_debug("Configuration validation successful")
294
299
  return True
295
-
300
+
296
301
  except MCPConfigurationError:
297
302
  raise
298
303
  except Exception as e:
299
304
  self.log_error(f"Configuration validation failed: {e}")
300
305
  return False
301
-
306
+
302
307
  def get_server_config(self) -> Dict[str, Any]:
303
308
  """
304
309
  Get MCP server configuration.
305
-
310
+
306
311
  Returns:
307
312
  Server configuration dictionary
308
313
  """
309
314
  return self.get("mcp.server", {})
310
-
315
+
311
316
  def get_tools_config(self) -> Dict[str, Any]:
312
317
  """
313
318
  Get tools configuration.
314
-
319
+
315
320
  Returns:
316
321
  Tools configuration dictionary
317
322
  """
318
323
  return self.get("mcp.tools", {})
319
-
324
+
320
325
  def save_config(self, path: Optional[Path] = None) -> bool:
321
326
  """
322
327
  Save current configuration to file.
323
-
328
+
324
329
  Args:
325
330
  path: Path to save configuration (uses loaded path if not specified)
326
-
331
+
327
332
  Returns:
328
333
  True if save successful
329
334
  """
@@ -331,41 +336,43 @@ class MCPConfiguration(BaseMCPService, IMCPConfiguration):
331
336
  if not save_path:
332
337
  self.log_error("No path specified for saving configuration")
333
338
  return False
334
-
339
+
335
340
  try:
336
341
  save_path = Path(save_path).expanduser()
337
342
  save_path.parent.mkdir(parents=True, exist_ok=True)
338
-
339
- with open(save_path, 'w') as f:
340
- yaml.dump(self._config_data, f, default_flow_style=False, sort_keys=True)
341
-
343
+
344
+ with open(save_path, "w") as f:
345
+ yaml.dump(
346
+ self._config_data, f, default_flow_style=False, sort_keys=True
347
+ )
348
+
342
349
  self.log_info(f"Configuration saved to {save_path}")
343
350
  return True
344
-
351
+
345
352
  except Exception as e:
346
353
  self.log_error(f"Failed to save configuration: {e}")
347
354
  return False
348
-
355
+
349
356
  def reload(self) -> bool:
350
357
  """
351
358
  Reload configuration from file.
352
-
359
+
353
360
  Returns:
354
361
  True if reload successful
355
362
  """
356
363
  if not self._config_path:
357
364
  self.log_warning("No configuration file to reload")
358
365
  return True
359
-
366
+
360
367
  # Reset to defaults
361
368
  self._config_data = self.DEFAULT_CONFIG.copy()
362
-
369
+
363
370
  # Reload from file
364
371
  if not self.load_config(self._config_path):
365
372
  return False
366
-
373
+
367
374
  # Reapply environment overrides
368
375
  self._apply_env_overrides()
369
-
376
+
370
377
  # Revalidate
371
- return self.validate()
378
+ return self.validate()
@@ -5,28 +5,23 @@ MCP Gateway Core Module
5
5
  Core interfaces and base classes for the MCP Gateway service.
6
6
  """
7
7
 
8
- from .interfaces import (
9
- IMCPGateway,
10
- IMCPToolRegistry,
11
- IMCPConfiguration,
12
- IMCPToolAdapter,
13
- IMCPLifecycle,
14
- IMCPCommunication,
15
- )
16
-
17
- from .base import (
18
- BaseMCPService,
19
- MCPServiceState,
20
- )
21
-
8
+ from .base import BaseMCPService, MCPServiceState
22
9
  from .exceptions import (
23
- MCPException,
10
+ MCPCommunicationError,
24
11
  MCPConfigurationError,
25
- MCPToolNotFoundError,
12
+ MCPException,
26
13
  MCPServerError,
27
- MCPCommunicationError,
14
+ MCPToolNotFoundError,
28
15
  MCPValidationError,
29
16
  )
17
+ from .interfaces import (
18
+ IMCPCommunication,
19
+ IMCPConfiguration,
20
+ IMCPGateway,
21
+ IMCPLifecycle,
22
+ IMCPToolAdapter,
23
+ IMCPToolRegistry,
24
+ )
30
25
 
31
26
  __all__ = [
32
27
  # Interfaces
@@ -36,11 +31,9 @@ __all__ = [
36
31
  "IMCPToolAdapter",
37
32
  "IMCPLifecycle",
38
33
  "IMCPCommunication",
39
-
40
34
  # Base classes
41
35
  "BaseMCPService",
42
36
  "MCPServiceState",
43
-
44
37
  # Exceptions
45
38
  "MCPException",
46
39
  "MCPConfigurationError",
@@ -48,4 +41,4 @@ __all__ = [
48
41
  "MCPServerError",
49
42
  "MCPCommunicationError",
50
43
  "MCPValidationError",
51
- ]
44
+ ]