claude-mpm 3.9.9__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 (411) 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 +155 -0
  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 +90 -49
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +21 -18
  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 +143 -762
  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 -1150
  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 +217 -0
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +36 -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 +571 -0
  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 +40 -23
  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 +14 -21
  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 +97 -93
  298. claude_mpm/services/mcp_gateway/main.py +307 -127
  299. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  300. claude_mpm/services/mcp_gateway/registry/service_registry.py +100 -101
  301. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  302. claude_mpm/services/mcp_gateway/server/__init__.py +4 -4
  303. claude_mpm/services/mcp_gateway/server/{mcp_server.py → mcp_gateway.py} +149 -153
  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 +110 -121
  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 +20 -534
  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 +9 -0
  358. claude_mpm/storage/state_storage.py +552 -0
  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.9.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +51 -2
  381. claude_mpm-4.0.3.dist-info/RECORD +402 -0
  382. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
  383. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
  384. claude_mpm/config/memory_guardian_config.py +0 -325
  385. claude_mpm/core/config_paths.py +0 -150
  386. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  387. claude_mpm/deployment_paths.py +0 -261
  388. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  389. claude_mpm/models/state_models.py +0 -433
  390. claude_mpm/services/agent/__init__.py +0 -24
  391. claude_mpm/services/agent/deployment.py +0 -2548
  392. claude_mpm/services/agent/management.py +0 -598
  393. claude_mpm/services/agent/registry.py +0 -813
  394. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  395. claude_mpm/services/communication/socketio.py +0 -1935
  396. claude_mpm/services/communication/websocket.py +0 -479
  397. claude_mpm/services/framework_claude_md_generator.py +0 -624
  398. claude_mpm/services/health_monitor.py +0 -893
  399. claude_mpm/services/infrastructure/memory_guardian.py +0 -770
  400. claude_mpm/services/mcp_gateway/server/mcp_server_simple.py +0 -444
  401. claude_mpm/services/optimized_hook_service.py +0 -542
  402. claude_mpm/services/project_analyzer.py +0 -864
  403. claude_mpm/services/project_registry.py +0 -608
  404. claude_mpm/services/standalone_socketio_server.py +0 -1300
  405. claude_mpm/services/ticket_manager_di.py +0 -318
  406. claude_mpm/services/ticketing_service_original.py +0 -510
  407. claude_mpm/utils/paths.py +0 -395
  408. claude_mpm/utils/platform_memory.py +0 -524
  409. claude_mpm-3.9.9.dist-info/RECORD +0 -293
  410. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
  411. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
@@ -24,115 +24,132 @@ Structure:
24
24
  # Version information
25
25
  __version__ = "0.1.0"
26
26
 
27
+
27
28
  # Lazy imports to prevent circular dependencies and improve startup performance
28
29
  def __getattr__(name):
29
30
  """Lazy import mechanism for MCP Gateway components."""
30
-
31
+
31
32
  # Core interfaces and base classes
32
- if name == "IMCPServer":
33
- from .core.interfaces import IMCPServer
34
- return IMCPServer
33
+ if name == "IMCPGateway":
34
+ from .core.interfaces import IMCPGateway
35
+
36
+ return IMCPGateway
35
37
  elif name == "IMCPToolRegistry":
36
38
  from .core.interfaces import IMCPToolRegistry
39
+
37
40
  return IMCPToolRegistry
38
41
  elif name == "IMCPConfiguration":
39
42
  from .core.interfaces import IMCPConfiguration
43
+
40
44
  return IMCPConfiguration
41
45
  elif name == "IMCPToolAdapter":
42
46
  from .core.interfaces import IMCPToolAdapter
47
+
43
48
  return IMCPToolAdapter
44
49
  elif name == "BaseMCPService":
45
50
  from .core.base import BaseMCPService
51
+
46
52
  return BaseMCPService
47
-
48
- # Server implementations
49
- elif name == "MCPServer":
50
- from .server.mcp_server import MCPServer
51
- return MCPServer
53
+
54
+ # Gateway implementations
55
+ elif name == "MCPGateway":
56
+ from .server.mcp_gateway import MCPGateway
57
+
58
+ return MCPGateway
52
59
  elif name == "StdioHandler":
53
60
  from .server.stdio_handler import StdioHandler
61
+
54
62
  return StdioHandler
55
63
  elif name == "AlternativeStdioHandler":
56
64
  from .server.stdio_handler import AlternativeStdioHandler
65
+
57
66
  return AlternativeStdioHandler
58
-
67
+
59
68
  # Tool registry and adapters
60
69
  elif name == "ToolRegistry":
61
70
  from .registry.tool_registry import ToolRegistry
71
+
62
72
  return ToolRegistry
63
73
  elif name == "BaseToolAdapter":
64
74
  from .tools.base_adapter import BaseToolAdapter
75
+
65
76
  return BaseToolAdapter
66
77
  elif name == "EchoToolAdapter":
67
78
  from .tools.base_adapter import EchoToolAdapter
79
+
68
80
  return EchoToolAdapter
69
81
  elif name == "CalculatorToolAdapter":
70
82
  from .tools.base_adapter import CalculatorToolAdapter
83
+
71
84
  return CalculatorToolAdapter
72
85
  elif name == "SystemInfoToolAdapter":
73
86
  from .tools.base_adapter import SystemInfoToolAdapter
87
+
74
88
  return SystemInfoToolAdapter
75
-
89
+
76
90
  # Configuration management
77
91
  elif name == "MCPConfiguration":
78
92
  from .config.configuration import MCPConfiguration
93
+
79
94
  return MCPConfiguration
80
95
  elif name == "MCPConfigLoader":
81
96
  from .config.config_loader import MCPConfigLoader
97
+
82
98
  return MCPConfigLoader
83
-
99
+
84
100
  # Service registry
85
101
  elif name == "MCPServiceRegistry":
86
102
  from .registry.service_registry import MCPServiceRegistry
103
+
87
104
  return MCPServiceRegistry
88
-
105
+
89
106
  # Exceptions
90
107
  elif name == "MCPException":
91
108
  from .core.exceptions import MCPException
109
+
92
110
  return MCPException
93
111
  elif name == "MCPConfigurationError":
94
112
  from .core.exceptions import MCPConfigurationError
113
+
95
114
  return MCPConfigurationError
96
115
  elif name == "MCPToolNotFoundError":
97
116
  from .core.exceptions import MCPToolNotFoundError
117
+
98
118
  return MCPToolNotFoundError
99
119
  elif name == "MCPServerError":
100
120
  from .core.exceptions import MCPServerError
121
+
101
122
  return MCPServerError
102
-
123
+
103
124
  raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
104
125
 
126
+
105
127
  # Public API exports
106
128
  __all__ = [
107
129
  # Core interfaces
108
- "IMCPServer",
130
+ "IMCPGateway",
109
131
  "IMCPToolRegistry",
110
132
  "IMCPConfiguration",
111
133
  "IMCPToolAdapter",
112
134
  "BaseMCPService",
113
-
114
- # Server implementations
115
- "MCPServer",
135
+ # Gateway implementations
136
+ "MCPGateway",
116
137
  "StdioHandler",
117
138
  "AlternativeStdioHandler",
118
-
119
139
  # Tool management
120
140
  "ToolRegistry",
121
141
  "BaseToolAdapter",
122
142
  "EchoToolAdapter",
123
143
  "CalculatorToolAdapter",
124
144
  "SystemInfoToolAdapter",
125
-
126
145
  # Configuration
127
146
  "MCPConfiguration",
128
147
  "MCPConfigLoader",
129
-
130
148
  # Service registry
131
149
  "MCPServiceRegistry",
132
-
133
150
  # Exceptions
134
151
  "MCPException",
135
152
  "MCPConfigurationError",
136
153
  "MCPToolNotFoundError",
137
154
  "MCPServerError",
138
- ]
155
+ ]
@@ -5,13 +5,13 @@ MCP Gateway Configuration Module
5
5
  Configuration management for the MCP Gateway service.
6
6
  """
7
7
 
8
- from .configuration import MCPConfiguration
9
8
  from .config_loader import MCPConfigLoader
10
9
  from .config_schema import MCPConfigSchema, validate_config
10
+ from .configuration import MCPConfiguration
11
11
 
12
12
  __all__ = [
13
13
  "MCPConfiguration",
14
14
  "MCPConfigLoader",
15
15
  "MCPConfigSchema",
16
16
  "validate_config",
17
- ]
17
+ ]
@@ -1,3 +1,5 @@
1
+ from pathlib import Path
2
+
1
3
  """
2
4
  MCP Gateway Configuration Loader
3
5
  ================================
@@ -8,8 +10,8 @@ Part of ISS-0034: Infrastructure Setup - MCP Gateway Project Foundation
8
10
  """
9
11
 
10
12
  import os
11
- from pathlib import Path
12
- from typing import Optional, List
13
+ from typing import List, Optional
14
+
13
15
  import yaml
14
16
 
15
17
  from claude_mpm.core.logger import get_logger
@@ -18,42 +20,40 @@ from claude_mpm.core.logger import get_logger
18
20
  class MCPConfigLoader:
19
21
  """
20
22
  Configuration loader for MCP Gateway.
21
-
23
+
22
24
  This class handles discovering and loading configuration files from
23
25
  standard locations, supporting both user and system configurations.
24
-
26
+
25
27
  WHY: We separate configuration loading from the main configuration
26
28
  service to support multiple configuration sources and provide a clean
27
29
  abstraction for configuration discovery.
28
30
  """
29
-
31
+
30
32
  # Standard configuration file search paths
31
33
  CONFIG_SEARCH_PATHS = [
32
34
  # User-specific configurations
33
35
  Path("~/.claude/mcp/config.yaml"),
34
36
  Path("~/.claude/mcp_gateway.yaml"),
35
37
  Path("~/.config/claude-mpm/mcp_gateway.yaml"),
36
-
37
38
  # Project-specific configurations
38
39
  Path("./mcp_gateway.yaml"),
39
40
  Path("./config/mcp_gateway.yaml"),
40
41
  Path("./.claude/mcp_gateway.yaml"),
41
-
42
42
  # System-wide configurations
43
43
  Path("/etc/claude-mpm/mcp_gateway.yaml"),
44
44
  ]
45
-
45
+
46
46
  def __init__(self):
47
47
  """Initialize configuration loader."""
48
48
  self.logger = get_logger("MCPConfigLoader")
49
-
49
+
50
50
  def find_config_file(self) -> Optional[Path]:
51
51
  """
52
52
  Find the first available configuration file.
53
-
53
+
54
54
  Searches through standard locations and returns the first
55
55
  existing configuration file.
56
-
56
+
57
57
  Returns:
58
58
  Path to configuration file if found, None otherwise
59
59
  """
@@ -62,171 +62,176 @@ class MCPConfigLoader:
62
62
  if expanded_path.exists() and expanded_path.is_file():
63
63
  self.logger.info(f"Found configuration file: {expanded_path}")
64
64
  return expanded_path
65
-
65
+
66
66
  self.logger.debug("No configuration file found in standard locations")
67
67
  return None
68
-
68
+
69
69
  def load_from_file(self, config_path: Path) -> Optional[dict]:
70
70
  """
71
71
  Load configuration from a specific file.
72
-
72
+
73
73
  Args:
74
74
  config_path: Path to configuration file
75
-
75
+
76
76
  Returns:
77
77
  Configuration dictionary if successful, None otherwise
78
78
  """
79
79
  try:
80
80
  expanded_path = config_path.expanduser()
81
-
81
+
82
82
  if not expanded_path.exists():
83
83
  self.logger.error(f"Configuration file not found: {expanded_path}")
84
84
  return None
85
-
86
- with open(expanded_path, 'r') as f:
85
+
86
+ with open(expanded_path, "r") as f:
87
87
  config = yaml.safe_load(f)
88
-
88
+
89
89
  self.logger.info(f"Configuration loaded from {expanded_path}")
90
90
  return config or {}
91
-
91
+
92
92
  except yaml.YAMLError as e:
93
93
  self.logger.error(f"Failed to parse YAML configuration: {e}")
94
94
  return None
95
95
  except Exception as e:
96
96
  self.logger.error(f"Failed to load configuration: {e}")
97
97
  return None
98
-
98
+
99
99
  def load_from_env(self) -> dict:
100
100
  """
101
101
  Load configuration from environment variables.
102
-
102
+
103
103
  Environment variables follow the pattern: MCP_GATEWAY_<SECTION>_<KEY>
104
-
104
+
105
105
  Returns:
106
106
  Configuration dictionary built from environment variables
107
107
  """
108
108
  config = {}
109
109
  prefix = "MCP_GATEWAY_"
110
-
110
+
111
111
  for env_key, env_value in os.environ.items():
112
112
  if not env_key.startswith(prefix):
113
113
  continue
114
-
114
+
115
115
  # Parse environment variable into configuration path
116
- config_path = env_key[len(prefix):].lower().split('_')
117
-
116
+ config_path = env_key[len(prefix) :].lower().split("_")
117
+
118
118
  # Build nested configuration structure
119
119
  current = config
120
120
  for part in config_path[:-1]:
121
121
  if part not in current:
122
122
  current[part] = {}
123
123
  current = current[part]
124
-
124
+
125
125
  # Set the value
126
126
  key = config_path[-1]
127
127
  try:
128
128
  # Try to parse as JSON for complex types
129
129
  import json
130
+
130
131
  current[key] = json.loads(env_value)
131
132
  except:
132
133
  # Fall back to string value
133
134
  current[key] = env_value
134
-
135
+
135
136
  self.logger.debug(f"Loaded from environment: {env_key}")
136
-
137
+
137
138
  return config
138
-
139
+
139
140
  def load(self, config_path: Optional[Path] = None) -> dict:
140
141
  """
141
142
  Load configuration from all sources.
142
-
143
+
143
144
  Loads configuration in the following priority order:
144
145
  1. Default configuration
145
146
  2. File configuration (if found or specified)
146
147
  3. Environment variable overrides
147
-
148
+
148
149
  Args:
149
150
  config_path: Optional specific configuration file path
150
-
151
+
151
152
  Returns:
152
153
  Merged configuration dictionary
153
154
  """
154
155
  from .configuration import MCPConfiguration
155
-
156
+
156
157
  # Start with defaults
157
158
  config = MCPConfiguration.DEFAULT_CONFIG.copy()
158
-
159
+
159
160
  # Load from file
160
161
  file_path = config_path or self.find_config_file()
161
162
  if file_path:
162
163
  file_config = self.load_from_file(file_path)
163
164
  if file_config:
164
165
  config = self._merge_configs(config, file_config)
165
-
166
+
166
167
  # Apply environment overrides
167
168
  env_config = self.load_from_env()
168
169
  if env_config:
169
170
  config = self._merge_configs(config, env_config)
170
-
171
+
171
172
  return config
172
-
173
+
173
174
  def _merge_configs(self, base: dict, overlay: dict) -> dict:
174
175
  """
175
176
  Recursively merge two configuration dictionaries.
176
-
177
+
177
178
  Args:
178
179
  base: Base configuration
179
180
  overlay: Configuration to merge in
180
-
181
+
181
182
  Returns:
182
183
  Merged configuration
183
184
  """
184
185
  result = base.copy()
185
-
186
+
186
187
  for key, value in overlay.items():
187
- if key in result and isinstance(result[key], dict) and isinstance(value, dict):
188
+ if (
189
+ key in result
190
+ and isinstance(result[key], dict)
191
+ and isinstance(value, dict)
192
+ ):
188
193
  result[key] = self._merge_configs(result[key], value)
189
194
  else:
190
195
  result[key] = value
191
-
196
+
192
197
  return result
193
-
198
+
194
199
  def create_default_config(self, path: Path) -> bool:
195
200
  """
196
201
  Create a default configuration file.
197
-
202
+
198
203
  Args:
199
204
  path: Path where to create the configuration file
200
-
205
+
201
206
  Returns:
202
207
  True if file created successfully
203
208
  """
204
209
  from .configuration import MCPConfiguration
205
-
210
+
206
211
  try:
207
212
  expanded_path = path.expanduser()
208
213
  expanded_path.parent.mkdir(parents=True, exist_ok=True)
209
-
210
- with open(expanded_path, 'w') as f:
214
+
215
+ with open(expanded_path, "w") as f:
211
216
  yaml.dump(
212
217
  MCPConfiguration.DEFAULT_CONFIG,
213
218
  f,
214
219
  default_flow_style=False,
215
- sort_keys=True
220
+ sort_keys=True,
216
221
  )
217
-
222
+
218
223
  self.logger.info(f"Created default configuration at {expanded_path}")
219
224
  return True
220
-
225
+
221
226
  except Exception as e:
222
227
  self.logger.error(f"Failed to create default configuration: {e}")
223
228
  return False
224
-
229
+
225
230
  def list_config_locations(self) -> List[str]:
226
231
  """
227
232
  List all configuration file search locations.
228
-
233
+
229
234
  Returns:
230
235
  List of configuration file paths (as strings)
231
236
  """
232
- return [str(path.expanduser()) for path in self.CONFIG_SEARCH_PATHS]
237
+ return [str(path.expanduser()) for path in self.CONFIG_SEARCH_PATHS]