claude-mpm 3.9.11__py3-none-any.whl → 4.0.4__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 (434) 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 +2 -2
  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 +330 -86
  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 +363 -220
  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 +124 -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/built/components/agent-inference.js +2 -0
  113. claude_mpm/dashboard/static/built/components/event-processor.js +2 -0
  114. claude_mpm/dashboard/static/built/components/event-viewer.js +2 -0
  115. claude_mpm/dashboard/static/built/components/export-manager.js +2 -0
  116. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +2 -0
  117. claude_mpm/dashboard/static/built/components/hud-library-loader.js +2 -0
  118. claude_mpm/dashboard/static/built/components/hud-manager.js +2 -0
  119. claude_mpm/dashboard/static/built/components/hud-visualizer.js +2 -0
  120. claude_mpm/dashboard/static/built/components/module-viewer.js +2 -0
  121. claude_mpm/dashboard/static/built/components/session-manager.js +2 -0
  122. claude_mpm/dashboard/static/built/components/socket-manager.js +2 -0
  123. claude_mpm/dashboard/static/built/components/ui-state-manager.js +2 -0
  124. claude_mpm/dashboard/static/built/components/working-directory.js +2 -0
  125. claude_mpm/dashboard/static/built/dashboard.js +2 -0
  126. claude_mpm/dashboard/static/built/socket-client.js +2 -0
  127. claude_mpm/dashboard/static/css/dashboard.css +27 -8
  128. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  129. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  130. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  131. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  132. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  133. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  134. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  135. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  136. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  137. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  138. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  139. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  140. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  141. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  142. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  143. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  144. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  145. claude_mpm/dashboard/static/js/components/event-viewer.js +93 -72
  146. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  147. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +110 -96
  148. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  149. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  150. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  151. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  152. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  153. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  154. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  155. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  156. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  157. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  158. claude_mpm/dashboard/static/js/socket-client.js +133 -53
  159. claude_mpm/dashboard/templates/index.html +40 -50
  160. claude_mpm/experimental/cli_enhancements.py +60 -58
  161. claude_mpm/generators/__init__.py +1 -1
  162. claude_mpm/generators/agent_profile_generator.py +75 -65
  163. claude_mpm/hooks/__init__.py +1 -1
  164. claude_mpm/hooks/base_hook.py +33 -28
  165. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  166. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  167. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  168. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  169. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  170. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  171. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  172. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  173. claude_mpm/hooks/memory_integration_hook.py +140 -100
  174. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  175. claude_mpm/hooks/validation_hooks.py +57 -49
  176. claude_mpm/init.py +145 -121
  177. claude_mpm/models/__init__.py +9 -9
  178. claude_mpm/models/agent_definition.py +33 -23
  179. claude_mpm/models/agent_session.py +228 -200
  180. claude_mpm/scripts/__init__.py +1 -1
  181. claude_mpm/scripts/socketio_daemon.py +192 -75
  182. claude_mpm/scripts/socketio_server_manager.py +328 -0
  183. claude_mpm/scripts/start_activity_logging.py +25 -22
  184. claude_mpm/services/__init__.py +68 -43
  185. claude_mpm/services/agent_capabilities_service.py +271 -0
  186. claude_mpm/services/agents/__init__.py +23 -32
  187. claude_mpm/services/agents/deployment/__init__.py +3 -3
  188. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  189. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  190. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  191. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  192. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  193. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  194. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  195. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  196. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  197. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  198. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  199. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  200. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  201. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  202. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  203. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  204. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  205. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  206. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  207. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  208. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  209. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  210. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  211. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  212. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  213. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  214. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  215. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  216. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  217. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  218. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  219. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  220. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  221. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  222. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  223. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  224. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  225. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  226. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  227. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  228. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  229. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  230. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  231. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  232. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  233. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  234. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  235. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  236. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  237. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  238. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  239. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  240. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  241. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  242. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  243. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  244. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  245. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  246. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  247. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  248. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  249. claude_mpm/services/agents/loading/__init__.py +2 -2
  250. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  251. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  252. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  253. claude_mpm/services/agents/management/__init__.py +2 -2
  254. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  255. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  256. claude_mpm/services/agents/memory/__init__.py +9 -6
  257. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  258. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  259. claude_mpm/services/agents/memory/analyzer.py +430 -0
  260. claude_mpm/services/agents/memory/content_manager.py +376 -0
  261. claude_mpm/services/agents/memory/template_generator.py +468 -0
  262. claude_mpm/services/agents/registry/__init__.py +7 -10
  263. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  264. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  265. claude_mpm/services/async_session_logger.py +187 -153
  266. claude_mpm/services/claude_session_logger.py +87 -72
  267. claude_mpm/services/command_handler_service.py +217 -0
  268. claude_mpm/services/communication/__init__.py +3 -2
  269. claude_mpm/services/core/__init__.py +50 -97
  270. claude_mpm/services/core/base.py +60 -53
  271. claude_mpm/services/core/interfaces/__init__.py +188 -0
  272. claude_mpm/services/core/interfaces/agent.py +351 -0
  273. claude_mpm/services/core/interfaces/communication.py +343 -0
  274. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  275. claude_mpm/services/core/interfaces/service.py +434 -0
  276. claude_mpm/services/core/interfaces.py +19 -944
  277. claude_mpm/services/event_aggregator.py +208 -170
  278. claude_mpm/services/exceptions.py +387 -308
  279. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  280. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  281. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  282. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  283. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  284. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  285. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  286. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  287. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  288. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  289. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  290. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  291. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  292. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  293. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  294. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  295. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  296. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  297. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  298. claude_mpm/services/hook_service.py +106 -114
  299. claude_mpm/services/infrastructure/__init__.py +7 -5
  300. claude_mpm/services/infrastructure/context_preservation.py +233 -199
  301. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  302. claude_mpm/services/infrastructure/logging.py +83 -76
  303. claude_mpm/services/infrastructure/monitoring.py +547 -404
  304. claude_mpm/services/mcp_gateway/__init__.py +30 -13
  305. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  306. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  307. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  308. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  309. claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
  310. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  311. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  312. claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
  313. claude_mpm/services/mcp_gateway/main.py +287 -137
  314. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  315. claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
  316. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  317. claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
  318. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
  319. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  320. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  321. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  322. claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
  323. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  324. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  325. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  326. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  327. claude_mpm/services/memory/__init__.py +2 -2
  328. claude_mpm/services/memory/builder.py +451 -362
  329. claude_mpm/services/memory/cache/__init__.py +2 -2
  330. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  331. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  332. claude_mpm/services/memory/indexed_memory.py +195 -193
  333. claude_mpm/services/memory/optimizer.py +267 -234
  334. claude_mpm/services/memory/router.py +571 -263
  335. claude_mpm/services/memory_hook_service.py +237 -0
  336. claude_mpm/services/port_manager.py +575 -0
  337. claude_mpm/services/project/__init__.py +3 -3
  338. claude_mpm/services/project/analyzer.py +451 -305
  339. claude_mpm/services/project/registry.py +262 -240
  340. claude_mpm/services/recovery_manager.py +287 -231
  341. claude_mpm/services/response_tracker.py +87 -67
  342. claude_mpm/services/runner_configuration_service.py +587 -0
  343. claude_mpm/services/session_management_service.py +304 -0
  344. claude_mpm/services/socketio/__init__.py +4 -4
  345. claude_mpm/services/socketio/client_proxy.py +174 -0
  346. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  347. claude_mpm/services/socketio/handlers/base.py +44 -30
  348. claude_mpm/services/socketio/handlers/connection.py +166 -64
  349. claude_mpm/services/socketio/handlers/file.py +123 -108
  350. claude_mpm/services/socketio/handlers/git.py +607 -373
  351. claude_mpm/services/socketio/handlers/hook.py +185 -0
  352. claude_mpm/services/socketio/handlers/memory.py +4 -4
  353. claude_mpm/services/socketio/handlers/project.py +4 -4
  354. claude_mpm/services/socketio/handlers/registry.py +53 -38
  355. claude_mpm/services/socketio/server/__init__.py +18 -0
  356. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  357. claude_mpm/services/socketio/server/core.py +399 -0
  358. claude_mpm/services/socketio/server/main.py +323 -0
  359. claude_mpm/services/socketio_client_manager.py +160 -133
  360. claude_mpm/services/socketio_server.py +36 -1885
  361. claude_mpm/services/subprocess_launcher_service.py +316 -0
  362. claude_mpm/services/system_instructions_service.py +258 -0
  363. claude_mpm/services/ticket_manager.py +19 -533
  364. claude_mpm/services/utility_service.py +285 -0
  365. claude_mpm/services/version_control/__init__.py +18 -21
  366. claude_mpm/services/version_control/branch_strategy.py +20 -10
  367. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  368. claude_mpm/services/version_control/git_operations.py +52 -21
  369. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  370. claude_mpm/services/version_control/version_parser.py +145 -125
  371. claude_mpm/services/version_service.py +270 -0
  372. claude_mpm/storage/__init__.py +2 -2
  373. claude_mpm/storage/state_storage.py +177 -181
  374. claude_mpm/ticket_wrapper.py +2 -2
  375. claude_mpm/utils/__init__.py +2 -2
  376. claude_mpm/utils/agent_dependency_loader.py +453 -243
  377. claude_mpm/utils/config_manager.py +157 -118
  378. claude_mpm/utils/console.py +1 -1
  379. claude_mpm/utils/dependency_cache.py +102 -107
  380. claude_mpm/utils/dependency_manager.py +52 -47
  381. claude_mpm/utils/dependency_strategies.py +131 -96
  382. claude_mpm/utils/environment_context.py +110 -102
  383. claude_mpm/utils/error_handler.py +75 -55
  384. claude_mpm/utils/file_utils.py +80 -67
  385. claude_mpm/utils/framework_detection.py +12 -11
  386. claude_mpm/utils/import_migration_example.py +12 -60
  387. claude_mpm/utils/imports.py +48 -45
  388. claude_mpm/utils/path_operations.py +100 -93
  389. claude_mpm/utils/robust_installer.py +172 -164
  390. claude_mpm/utils/session_logging.py +30 -23
  391. claude_mpm/utils/subprocess_utils.py +99 -61
  392. claude_mpm/validation/__init__.py +1 -1
  393. claude_mpm/validation/agent_validator.py +151 -111
  394. claude_mpm/validation/frontmatter_validator.py +92 -71
  395. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/METADATA +90 -22
  396. claude_mpm-4.0.4.dist-info/RECORD +417 -0
  397. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/entry_points.txt +1 -0
  398. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/licenses/LICENSE +1 -1
  399. claude_mpm/cli/commands/run_guarded.py +0 -511
  400. claude_mpm/config/memory_guardian_config.py +0 -325
  401. claude_mpm/config/memory_guardian_yaml.py +0 -335
  402. claude_mpm/core/config_paths.py +0 -150
  403. claude_mpm/core/memory_aware_runner.py +0 -353
  404. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  405. claude_mpm/deployment_paths.py +0 -261
  406. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  407. claude_mpm/models/state_models.py +0 -433
  408. claude_mpm/services/agent/__init__.py +0 -24
  409. claude_mpm/services/agent/deployment.py +0 -2548
  410. claude_mpm/services/agent/management.py +0 -598
  411. claude_mpm/services/agent/registry.py +0 -813
  412. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  413. claude_mpm/services/communication/socketio.py +0 -1935
  414. claude_mpm/services/communication/websocket.py +0 -479
  415. claude_mpm/services/framework_claude_md_generator.py +0 -624
  416. claude_mpm/services/health_monitor.py +0 -893
  417. claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
  418. claude_mpm/services/infrastructure/health_monitor.py +0 -775
  419. claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
  420. claude_mpm/services/infrastructure/memory_guardian.py +0 -944
  421. claude_mpm/services/infrastructure/restart_protection.py +0 -642
  422. claude_mpm/services/infrastructure/state_manager.py +0 -774
  423. claude_mpm/services/mcp_gateway/manager.py +0 -334
  424. claude_mpm/services/optimized_hook_service.py +0 -542
  425. claude_mpm/services/project_analyzer.py +0 -864
  426. claude_mpm/services/project_registry.py +0 -608
  427. claude_mpm/services/standalone_socketio_server.py +0 -1300
  428. claude_mpm/services/ticket_manager_di.py +0 -318
  429. claude_mpm/services/ticketing_service_original.py +0 -510
  430. claude_mpm/utils/paths.py +0 -395
  431. claude_mpm/utils/platform_memory.py +0 -524
  432. claude_mpm-3.9.11.dist-info/RECORD +0 -306
  433. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/WHEEL +0 -0
  434. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/top_level.txt +0 -0
@@ -4,36 +4,38 @@ MCP Gateway Implementation
4
4
 
5
5
  MCP protocol gateway using Anthropic's official MCP package.
6
6
  Handles stdio-based communication, request routing, and tool invocation.
7
- Acts as a bridge between Claude Desktop and internal tools.
7
+ Acts as a bridge between Claude Code and internal tools.
8
+
9
+ NOTE: MCP is ONLY for Claude Code - NOT for Claude Desktop.
10
+ Claude Desktop uses a different system for agent deployment.
8
11
 
9
12
  Part of ISS-0035: MCP Gateway Implementation - Core Gateway and Tool Registry
10
13
  """
11
14
 
12
15
  import asyncio
13
16
  import json
14
- import sys
15
- from typing import Any, Dict, List, Optional, Callable, Set
16
- from datetime import datetime
17
17
  import traceback
18
+ from datetime import datetime
19
+ from typing import Any, Callable, Dict, List, Optional, Set, Union
18
20
 
19
21
  # Import from the official MCP package
20
- from mcp.server import Server, NotificationOptions
22
+ from mcp.server import NotificationOptions, Server
21
23
  from mcp.types import (
24
+ EmbeddedResource,
25
+ ImageContent,
22
26
  InitializeResult,
23
- Tool,
24
27
  TextContent,
25
- ImageContent,
26
- EmbeddedResource
28
+ Tool,
27
29
  )
28
30
 
31
+ from claude_mpm.services.mcp_gateway.core.base import BaseMCPService, MCPServiceState
29
32
  from claude_mpm.services.mcp_gateway.core.interfaces import (
33
+ IMCPCommunication,
30
34
  IMCPGateway,
31
35
  IMCPToolRegistry,
32
- IMCPCommunication,
33
36
  MCPToolInvocation,
34
37
  MCPToolResult,
35
38
  )
36
- from claude_mpm.services.mcp_gateway.core.base import BaseMCPService, MCPServiceState
37
39
 
38
40
 
39
41
  class MCPGateway(BaseMCPService, IMCPGateway):
@@ -41,8 +43,8 @@ class MCPGateway(BaseMCPService, IMCPGateway):
41
43
  MCP Protocol Gateway implementation using Anthropic's official MCP package.
42
44
 
43
45
  WHY: We use the official MCP package to ensure protocol compliance and
44
- compatibility with Claude Desktop. The stdio-based communication model allows
45
- seamless integration with Claude Desktop's MCP client as a protocol bridge.
46
+ compatibility with Claude Code. The stdio-based communication model allows
47
+ seamless integration with Claude Code's MCP client as a protocol bridge.
46
48
 
47
49
  DESIGN DECISIONS:
48
50
  - Use asyncio for all I/O operations to handle concurrent requests efficiently
@@ -50,7 +52,7 @@ class MCPGateway(BaseMCPService, IMCPGateway):
50
52
  - Implement comprehensive error handling to prevent gateway crashes
51
53
  - Use structured logging for debugging and monitoring
52
54
  """
53
-
55
+
54
56
  def __init__(self, gateway_name: str = "claude-mpm-mcp", version: str = "1.0.0"):
55
57
  """
56
58
  Initialize MCP Gateway.
@@ -60,7 +62,7 @@ class MCPGateway(BaseMCPService, IMCPGateway):
60
62
  version: Gateway version
61
63
  """
62
64
  super().__init__(f"MCPGateway-{gateway_name}")
63
-
65
+
64
66
  # Gateway configuration
65
67
  self.gateway_name = gateway_name
66
68
  self.server_name = gateway_name # Keep for compatibility
@@ -68,193 +70,200 @@ class MCPGateway(BaseMCPService, IMCPGateway):
68
70
 
69
71
  # MCP Server instance from official package
70
72
  self.mcp_server = Server(gateway_name)
71
-
73
+
72
74
  # Dependencies (injected via setters)
73
75
  self._tool_registry: Optional[IMCPToolRegistry] = None
74
76
  self._communication: Optional[IMCPCommunication] = None
75
-
77
+
76
78
  # Request handlers
77
79
  self._handlers: Dict[str, Callable] = {}
78
-
80
+
79
81
  # Server capabilities
80
82
  self._capabilities = {
81
83
  "tools": {},
82
84
  "prompts": {},
83
85
  "resources": {},
84
- "experimental": {}
86
+ "experimental": {},
85
87
  }
86
-
88
+
87
89
  # Metrics
88
90
  self._metrics = {
89
91
  "requests_handled": 0,
90
92
  "errors": 0,
91
93
  "tool_invocations": 0,
92
94
  "start_time": None,
93
- "last_request_time": None
95
+ "last_request_time": None,
94
96
  }
95
-
97
+
96
98
  # Running state
97
99
  self._run_task: Optional[asyncio.Task] = None
98
100
  self._shutdown_event = asyncio.Event()
99
-
101
+
100
102
  # Setup default handlers
101
103
  self._setup_default_handlers()
102
-
104
+
103
105
  def _setup_default_handlers(self) -> None:
104
106
  """
105
107
  Setup default MCP protocol handlers.
106
-
108
+
107
109
  WHY: The MCP protocol requires specific handlers for initialization,
108
110
  tool discovery, and tool invocation. We set these up to ensure
109
111
  protocol compliance.
110
112
  """
113
+
111
114
  # Initialize handler
112
115
  @self.mcp_server.list_tools()
113
116
  async def handle_list_tools() -> List[Tool]:
114
117
  """Handle tools/list request."""
115
118
  self.log_info("Handling tools/list request")
116
-
119
+
117
120
  if not self._tool_registry:
118
121
  self.log_warning("No tool registry available")
119
122
  return []
120
-
123
+
121
124
  tools = []
122
125
  for tool_def in self._tool_registry.list_tools():
123
126
  tool = Tool(
124
127
  name=tool_def.name,
125
128
  description=tool_def.description,
126
- inputSchema=tool_def.input_schema
129
+ inputSchema=tool_def.input_schema,
127
130
  )
128
131
  tools.append(tool)
129
-
132
+
130
133
  self.log_info(f"Returning {len(tools)} tools")
131
134
  return tools
132
-
135
+
133
136
  @self.mcp_server.call_tool()
134
- async def handle_call_tool(name: str, arguments: Dict[str, Any]) -> List[TextContent | ImageContent | EmbeddedResource]:
137
+ async def handle_call_tool(
138
+ name: str, arguments: Dict[str, Any]
139
+ ) -> List[Union[TextContent, ImageContent, EmbeddedResource]]:
135
140
  """Handle tools/call request."""
136
141
  self.log_info(f"Handling tools/call request for tool: {name}")
137
-
142
+
138
143
  if not self._tool_registry:
139
144
  error_msg = "No tool registry available"
140
145
  self.log_error(error_msg)
141
146
  return [TextContent(type="text", text=f"Error: {error_msg}")]
142
-
147
+
143
148
  # Create invocation request
144
149
  invocation = MCPToolInvocation(
145
150
  tool_name=name,
146
151
  parameters=arguments,
147
- request_id=f"req_{datetime.now().timestamp()}"
152
+ request_id=f"req_{datetime.now().timestamp()}",
148
153
  )
149
-
154
+
150
155
  try:
151
156
  # Invoke tool through registry
152
157
  result = await self._tool_registry.invoke_tool(invocation)
153
-
158
+
154
159
  # Update metrics
155
160
  self._metrics["tool_invocations"] += 1
156
-
161
+
157
162
  # Log invocation
158
163
  self.log_tool_invocation(name, result.success, result.execution_time)
159
-
164
+
160
165
  if result.success:
161
166
  # Return successful result
162
167
  if isinstance(result.data, str):
163
168
  return [TextContent(type="text", text=result.data)]
164
169
  else:
165
- return [TextContent(type="text", text=json.dumps(result.data, indent=2))]
170
+ return [
171
+ TextContent(
172
+ type="text", text=json.dumps(result.data, indent=2)
173
+ )
174
+ ]
166
175
  else:
167
176
  # Return error
168
177
  return [TextContent(type="text", text=f"Error: {result.error}")]
169
-
178
+
170
179
  except Exception as e:
171
180
  error_msg = f"Failed to invoke tool {name}: {str(e)}"
172
181
  self.log_error(error_msg)
173
182
  self._metrics["errors"] += 1
174
183
  return [TextContent(type="text", text=f"Error: {error_msg}")]
175
-
184
+
176
185
  def set_tool_registry(self, registry: IMCPToolRegistry) -> None:
177
186
  """
178
187
  Set the tool registry for the server.
179
-
188
+
180
189
  Args:
181
190
  registry: Tool registry to use
182
191
  """
183
192
  self._tool_registry = registry
184
193
  self.log_info("Tool registry set")
185
-
194
+
186
195
  def set_communication(self, communication: IMCPCommunication) -> None:
187
196
  """
188
197
  Set the communication handler.
189
-
198
+
190
199
  Args:
191
200
  communication: Communication handler to use
192
201
  """
193
202
  self._communication = communication
194
203
  self.log_info("Communication handler set")
195
-
204
+
196
205
  async def _do_initialize(self) -> bool:
197
206
  """
198
207
  Perform server initialization.
199
-
208
+
200
209
  Returns:
201
210
  True if initialization successful
202
211
  """
203
212
  try:
204
213
  self.log_info("Initializing MCP server components")
205
-
214
+
206
215
  # Validate dependencies
207
216
  if not self._tool_registry:
208
217
  self.log_warning("No tool registry set - server will have no tools")
209
-
218
+
210
219
  # Initialize metrics
211
220
  self._metrics["start_time"] = datetime.now().isoformat()
212
-
221
+
213
222
  # Update capabilities based on registry
214
223
  if self._tool_registry:
215
224
  tools = self._tool_registry.list_tools()
216
225
  self._capabilities["tools"]["available"] = len(tools)
217
226
  self._capabilities["tools"]["names"] = [t.name for t in tools]
218
-
227
+
219
228
  self.log_info("MCP server initialization complete")
220
229
  return True
221
-
230
+
222
231
  except Exception as e:
223
232
  self.log_error(f"Failed to initialize MCP server: {e}")
224
233
  return False
225
-
234
+
226
235
  async def _do_start(self) -> bool:
227
236
  """
228
237
  Start the MCP server.
229
-
238
+
230
239
  Returns:
231
240
  True if startup successful
232
241
  """
233
242
  try:
234
243
  self.log_info("Starting MCP server")
235
-
244
+
236
245
  # Clear shutdown event
237
246
  self._shutdown_event.clear()
238
-
247
+
239
248
  # Start the run task
240
249
  self._run_task = asyncio.create_task(self.run())
241
-
250
+
242
251
  self.log_info("MCP server started successfully")
243
252
  return True
244
-
253
+
245
254
  except Exception as e:
246
255
  self.log_error(f"Failed to start MCP server: {e}")
247
256
  return False
248
-
257
+
249
258
  async def _do_shutdown(self) -> None:
250
259
  """
251
260
  Shutdown the MCP server gracefully.
252
261
  """
253
262
  self.log_info("Shutting down MCP server")
254
-
263
+
255
264
  # Signal shutdown
256
265
  self._shutdown_event.set()
257
-
266
+
258
267
  # Cancel run task if active
259
268
  if self._run_task and not self._run_task.done():
260
269
  self._run_task.cancel()
@@ -262,23 +271,23 @@ class MCPGateway(BaseMCPService, IMCPGateway):
262
271
  await self._run_task
263
272
  except asyncio.CancelledError:
264
273
  pass
265
-
274
+
266
275
  # Clean up resources
267
276
  if self._tool_registry:
268
277
  self.log_info("Cleaning up tool registry")
269
278
  # Tool registry cleanup if needed
270
-
279
+
271
280
  self.log_info("MCP server shutdown complete")
272
-
281
+
273
282
  async def handle_request(self, request: Dict[str, Any]) -> Dict[str, Any]:
274
283
  """
275
284
  Handle an MCP request.
276
-
285
+
277
286
  This method routes requests to appropriate handlers based on the method.
278
-
287
+
279
288
  Args:
280
289
  request: MCP request message
281
-
290
+
282
291
  Returns:
283
292
  Response message
284
293
  """
@@ -286,70 +295,60 @@ class MCPGateway(BaseMCPService, IMCPGateway):
286
295
  # Update metrics
287
296
  self._metrics["requests_handled"] += 1
288
297
  self._metrics["last_request_time"] = datetime.now().isoformat()
289
-
298
+
290
299
  # Extract request details
291
300
  method = request.get("method", "")
292
301
  params = request.get("params", {})
293
302
  request_id = request.get("id")
294
-
303
+
295
304
  self.log_debug(f"Handling request: {method}")
296
-
305
+
297
306
  # Check for custom handler
298
307
  if method in self._handlers:
299
308
  handler = self._handlers[method]
300
309
  result = await handler(params)
301
-
310
+
302
311
  # Build response
303
- response = {
304
- "jsonrpc": "2.0",
305
- "id": request_id,
306
- "result": result
307
- }
312
+ response = {"jsonrpc": "2.0", "id": request_id, "result": result}
308
313
  else:
309
314
  # Unknown method
310
315
  self.log_warning(f"Unknown method: {method}")
311
316
  response = {
312
317
  "jsonrpc": "2.0",
313
318
  "id": request_id,
314
- "error": {
315
- "code": -32601,
316
- "message": f"Method not found: {method}"
317
- }
319
+ "error": {"code": -32601, "message": f"Method not found: {method}"},
318
320
  }
319
-
321
+
320
322
  return response
321
-
323
+
322
324
  except Exception as e:
323
325
  self.log_error(f"Error handling request: {e}")
324
326
  self._metrics["errors"] += 1
325
-
327
+
326
328
  return {
327
329
  "jsonrpc": "2.0",
328
330
  "id": request.get("id"),
329
- "error": {
330
- "code": -32603,
331
- "message": f"Internal error: {str(e)}"
332
- }
331
+ "error": {"code": -32603, "message": f"Internal error: {str(e)}"},
333
332
  }
334
-
333
+
335
334
  async def run(self) -> None:
336
335
  """
337
336
  Run the MCP server main loop.
338
-
337
+
339
338
  This method uses the official MCP Server's stdio-based communication
340
339
  to handle incoming requests from Claude Code.
341
-
340
+
342
341
  WHY: We use stdio (stdin/stdout) as it's the standard communication
343
342
  method for MCP servers in Claude Desktop. This ensures compatibility
344
343
  and allows the server to be launched as a subprocess.
345
344
  """
346
345
  try:
347
346
  self.log_info("Starting MCP server main loop")
348
-
347
+
349
348
  # Import the stdio server function
350
- from mcp.server.stdio import stdio_server
351
- from mcp.server.models import InitializationOptions
352
349
  from mcp.server.lowlevel import NotificationOptions
350
+ from mcp.server.models import InitializationOptions
351
+ from mcp.server.stdio import stdio_server
353
352
 
354
353
  # Create initialization options
355
354
  init_options = InitializationOptions(
@@ -366,66 +365,62 @@ class MCPGateway(BaseMCPService, IMCPGateway):
366
365
  self.log_info("MCP server stdio connection established")
367
366
 
368
367
  # Run the server
369
- await self.mcp_server.run(
370
- read_stream,
371
- write_stream,
372
- init_options
373
- )
374
-
368
+ await self.mcp_server.run(read_stream, write_stream, init_options)
369
+
375
370
  self.log_info("MCP server main loop ended")
376
-
371
+
377
372
  except Exception as e:
378
373
  self.log_error(f"Error in MCP server main loop: {e}")
379
374
  self.log_error(f"Traceback: {traceback.format_exc()}")
380
375
  self._metrics["errors"] += 1
381
376
  raise
382
-
377
+
383
378
  def register_handler(self, method: str, handler: Callable) -> None:
384
379
  """
385
380
  Register a custom request handler.
386
-
381
+
387
382
  Args:
388
383
  method: Method name to handle
389
384
  handler: Handler function
390
385
  """
391
386
  self._handlers[method] = handler
392
387
  self.log_info(f"Registered handler for method: {method}")
393
-
388
+
394
389
  def get_capabilities(self) -> Dict[str, Any]:
395
390
  """
396
391
  Get server capabilities.
397
-
392
+
398
393
  Returns:
399
394
  Dictionary of server capabilities formatted for MCP protocol
400
395
  """
401
396
  capabilities = {}
402
-
397
+
403
398
  # Add tool capabilities if registry is available
404
399
  if self._tool_registry:
405
400
  capabilities["tools"] = {}
406
-
401
+
407
402
  # Add experimental features
408
403
  capabilities["experimental"] = {}
409
-
404
+
410
405
  return capabilities
411
-
406
+
412
407
  def get_metrics(self) -> Dict[str, Any]:
413
408
  """
414
409
  Get server metrics.
415
-
410
+
416
411
  Returns:
417
412
  Server metrics dictionary
418
413
  """
419
414
  return self._metrics.copy()
420
-
415
+
421
416
  async def stop(self) -> None:
422
417
  """
423
418
  Stop the MCP service gracefully.
424
-
419
+
425
420
  This implements the IMCPLifecycle interface method.
426
421
  """
427
422
  await self.shutdown()
428
423
 
429
424
 
430
425
  # Backward compatibility alias
431
- MCPServer = MCPGateway
426
+ MCPServer = MCPGateway