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
claude_mpm/utils/paths.py DELETED
@@ -1,395 +0,0 @@
1
- """Path resolution utilities for Claude MPM.
2
-
3
- This module provides centralized path discovery and resolution logic
4
- to avoid duplication across the codebase.
5
- """
6
-
7
- import os
8
- import sys
9
- from pathlib import Path
10
- from typing import Optional, Union, List
11
- from functools import lru_cache
12
- import logging
13
-
14
- from claude_mpm.core.config_paths import ConfigPaths
15
-
16
- logger = logging.getLogger(__name__)
17
-
18
-
19
- class PathResolver:
20
- """Centralized path resolution for Claude MPM.
21
-
22
- This class consolidates all path discovery logic to avoid duplication
23
- across different modules. It handles various scenarios including:
24
- - Running from different directories
25
- - Installed vs development mode
26
- - Missing directories
27
-
28
- All methods use caching to improve performance for repeated lookups.
29
- """
30
-
31
- @classmethod
32
- @lru_cache(maxsize=1)
33
- def get_framework_root(cls) -> Path:
34
- """Find the framework root directory.
35
-
36
- This method searches for the framework root by looking for marker files
37
- like pyproject.toml or the claude_mpm package directory.
38
-
39
- Returns:
40
- Path: The framework root directory
41
-
42
- Raises:
43
- FileNotFoundError: If framework root cannot be determined
44
- """
45
- # First, try to find via the module location
46
- try:
47
- import claude_mpm
48
- module_path = Path(claude_mpm.__file__).parent
49
-
50
- # Check if we're in a development environment (has src/ directory)
51
- if module_path.parent.name == 'src':
52
- # Development structure: project_root/src/claude_mpm/
53
- return module_path.parent.parent
54
-
55
- # Check if we're in an installed environment (site-packages)
56
- # In this case, the module itself IS the framework root for resources
57
- # No src/ directory exists in installed packages
58
- return module_path
59
-
60
- except ImportError:
61
- pass
62
-
63
- # Fallback: search upward for pyproject.toml
64
- current = Path.cwd()
65
- while current != current.parent:
66
- if (current / 'pyproject.toml').exists():
67
- # Verify this is our project
68
- if (current / 'src' / 'claude_mpm').exists():
69
- return current
70
- current = current.parent
71
-
72
- raise FileNotFoundError(
73
- "Could not determine framework root. Please run from within "
74
- "the claude-mpm project or ensure it's properly installed."
75
- )
76
-
77
- @classmethod
78
- @lru_cache(maxsize=1)
79
- def get_agents_dir(cls) -> Path:
80
- """Get the agents directory path.
81
-
82
- Returns:
83
- Path: The agents directory within the framework
84
-
85
- Raises:
86
- FileNotFoundError: If agents directory doesn't exist
87
- """
88
- # Try using importlib.resources first (Python 3.9+)
89
- try:
90
- if sys.version_info >= (3, 9):
91
- from importlib.resources import files
92
- agents_path = files('claude_mpm').joinpath('agents')
93
- if agents_path.exists():
94
- return Path(str(agents_path))
95
- else:
96
- # For Python 3.7-3.8, use the backport approach
97
- from importlib import resources
98
- with resources.path('claude_mpm', 'agents') as agents_path:
99
- if agents_path.exists():
100
- return agents_path
101
- except (ImportError, ModuleNotFoundError, TypeError):
102
- # Fall back to manual detection if importlib.resources fails
103
- pass
104
-
105
- # Fallback to manual detection
106
- framework_root = cls.get_framework_root()
107
-
108
- # First check if we're in development structure (framework_root is project root)
109
- # This happens when framework_root has a src/ directory
110
- if (framework_root / 'src').exists():
111
- agents_dir = framework_root / 'src' / 'claude_mpm' / 'agents'
112
- if agents_dir.exists():
113
- return agents_dir
114
-
115
- # Otherwise we're in installed structure (framework_root is claude_mpm package)
116
- # In pip/pipx installs, framework_root already points to claude_mpm package
117
- agents_dir = framework_root / 'agents'
118
- if agents_dir.exists():
119
- return agents_dir
120
-
121
- # Last fallback for edge cases
122
- agents_dir = framework_root / 'claude_mpm' / 'agents'
123
- if agents_dir.exists():
124
- return agents_dir
125
-
126
- raise FileNotFoundError(
127
- f"Agents directory not found. Searched in:\n"
128
- f" - importlib.resources lookup\n"
129
- f" - {framework_root / 'src' / 'claude_mpm' / 'agents'} (development)\n"
130
- f" - {framework_root / 'agents'} (installed)\n"
131
- f" - {framework_root / 'claude_mpm' / 'agents'} (fallback)"
132
- )
133
-
134
- @classmethod
135
- @lru_cache(maxsize=1)
136
- def get_project_root(cls) -> Path:
137
- """Find the current project root.
138
-
139
- Searches for project markers like .git, pyproject.toml, package.json, etc.
140
-
141
- Returns:
142
- Path: The current project root directory
143
-
144
- Raises:
145
- FileNotFoundError: If no project root can be determined
146
- """
147
- # Project root markers in order of preference
148
- markers = ['.git', 'pyproject.toml', 'package.json', 'Cargo.toml',
149
- 'go.mod', 'pom.xml', 'build.gradle', ConfigPaths.CONFIG_DIR]
150
-
151
- current = Path.cwd()
152
- while current != current.parent:
153
- for marker in markers:
154
- if (current / marker).exists():
155
- logger.debug(f"Found project root at {current} via {marker}")
156
- return current
157
- current = current.parent
158
-
159
- # If no markers found, use current directory
160
- logger.warning("No project markers found, using current directory as project root")
161
- return Path.cwd()
162
-
163
- @classmethod
164
- @lru_cache(maxsize=4)
165
- def get_config_dir(cls, scope: str = 'project') -> Path:
166
- """Get configuration directory for the specified scope.
167
-
168
- Args:
169
- scope: One of 'project', 'user', 'system', or 'framework'
170
-
171
- Returns:
172
- Path: The configuration directory
173
-
174
- Raises:
175
- ValueError: If scope is invalid
176
- FileNotFoundError: If directory cannot be determined
177
- """
178
- if scope == 'project':
179
- return cls.get_project_root() / ConfigPaths.CONFIG_DIR
180
- elif scope == 'user':
181
- # Support XDG_CONFIG_HOME if set
182
- xdg_config = os.environ.get('XDG_CONFIG_HOME')
183
- if xdg_config:
184
- return Path(xdg_config) / 'claude-mpm'
185
- return Path.home() / '.config' / 'claude-mpm'
186
- elif scope == 'system':
187
- # System-wide configuration
188
- if os.name == 'posix':
189
- return Path('/etc/claude-mpm')
190
- else:
191
- # Windows: Use ProgramData
192
- return Path(os.environ.get('ProgramData', 'C:\\ProgramData')) / 'claude-mpm'
193
- elif scope == 'framework':
194
- return cls.get_framework_root() / ConfigPaths.CONFIG_DIR
195
- else:
196
- raise ValueError(f"Invalid scope: {scope}. Must be one of: project, user, system, framework")
197
-
198
- @classmethod
199
- def find_file_upwards(cls, filename: str, start_path: Optional[Path] = None) -> Optional[Path]:
200
- """Generic upward file search.
201
-
202
- Searches for a file by traversing up the directory tree.
203
-
204
- Args:
205
- filename: Name of the file to search for
206
- start_path: Starting directory (defaults to current directory)
207
-
208
- Returns:
209
- Path: Full path to the found file, or None if not found
210
- """
211
- current = Path(start_path) if start_path else Path.cwd()
212
-
213
- while current != current.parent:
214
- target = current / filename
215
- if target.exists():
216
- logger.debug(f"Found {filename} at {target}")
217
- return target
218
- current = current.parent
219
-
220
- logger.debug(f"Could not find {filename} in any parent directory")
221
- return None
222
-
223
- @classmethod
224
- @lru_cache(maxsize=8)
225
- def get_claude_pm_dir(cls, base_path: Optional[Path] = None) -> Optional[Path]:
226
- """Find .claude-mpm directory starting from base_path.
227
-
228
- Args:
229
- base_path: Starting directory (defaults to current directory)
230
-
231
- Returns:
232
- Path: The .claude-mpm directory, or None if not found
233
- """
234
- result = cls.find_file_upwards(ConfigPaths.CONFIG_DIR, base_path)
235
- return result if result and result.is_dir() else None
236
-
237
- @classmethod
238
- def ensure_directory(cls, path: Path) -> Path:
239
- """Ensure a directory exists, creating it if necessary.
240
-
241
- Args:
242
- path: Directory path to ensure exists
243
-
244
- Returns:
245
- Path: The directory path
246
-
247
- Raises:
248
- OSError: If directory cannot be created
249
- """
250
- try:
251
- path.mkdir(parents=True, exist_ok=True)
252
- return path
253
- except OSError as e:
254
- logger.error(f"Failed to create directory {path}: {e}")
255
- raise
256
-
257
- @classmethod
258
- def get_relative_to_root(cls, path: Union[str, Path], root_type: str = 'project') -> Path:
259
- """Get a path relative to a specific root.
260
-
261
- Args:
262
- path: Relative path within the root
263
- root_type: Type of root ('project' or 'framework')
264
-
265
- Returns:
266
- Path: Full path relative to the specified root
267
-
268
- Raises:
269
- ValueError: If root_type is invalid
270
- """
271
- if root_type == 'project':
272
- root = cls.get_project_root()
273
- elif root_type == 'framework':
274
- root = cls.get_framework_root()
275
- else:
276
- raise ValueError(f"Invalid root_type: {root_type}. Must be 'project' or 'framework'")
277
-
278
- return root / path
279
-
280
- @classmethod
281
- def find_files_by_pattern(cls, pattern: str, root: Optional[Path] = None) -> List[Path]:
282
- """Find all files matching a pattern within a directory tree.
283
-
284
- Args:
285
- pattern: Glob pattern to match (e.g., '*.py', '**/*.md')
286
- root: Root directory to search (defaults to project root)
287
-
288
- Returns:
289
- List[Path]: List of matching file paths
290
- """
291
- if root is None:
292
- root = cls.get_project_root()
293
-
294
- matches = list(root.glob(pattern))
295
- logger.debug(f"Found {len(matches)} files matching '{pattern}' in {root}")
296
- return matches
297
-
298
- @classmethod
299
- def get_package_resource_path(cls, resource_path: str) -> Path:
300
- """Get the path to a resource within the claude_mpm package.
301
-
302
- This method handles both development and installed environments correctly.
303
-
304
- Args:
305
- resource_path: Relative path within the claude_mpm package (e.g., 'agents/templates')
306
-
307
- Returns:
308
- Path: Full path to the resource
309
-
310
- Raises:
311
- FileNotFoundError: If the resource doesn't exist
312
- """
313
- # Try using importlib.resources first (most reliable for installed packages)
314
- try:
315
- if sys.version_info >= (3, 9):
316
- from importlib.resources import files
317
- resource = files('claude_mpm').joinpath(resource_path)
318
- if resource.exists():
319
- return Path(str(resource))
320
- else:
321
- # For Python 3.7-3.8
322
- from importlib import resources
323
- parts = resource_path.split('/')
324
- if len(parts) == 1:
325
- with resources.path('claude_mpm', parts[0]) as p:
326
- if p.exists():
327
- return p
328
- else:
329
- # For nested paths, navigate step by step
330
- package = 'claude_mpm'
331
- for part in parts[:-1]:
332
- package = f"{package}.{part}"
333
- with resources.path(package, parts[-1]) as p:
334
- if p.exists():
335
- return p
336
- except (ImportError, ModuleNotFoundError, TypeError, AttributeError):
337
- # Fall back to file system detection
338
- pass
339
-
340
- # Fallback: Use file system detection
341
- import claude_mpm
342
- module_path = Path(claude_mpm.__file__).parent
343
- resource = module_path / resource_path
344
-
345
- if resource.exists():
346
- return resource
347
-
348
- # Try with framework root
349
- framework_root = cls.get_framework_root()
350
- if (framework_root / 'src').exists():
351
- # Development environment
352
- resource = framework_root / 'src' / 'claude_mpm' / resource_path
353
- else:
354
- # Installed environment
355
- resource = framework_root / resource_path
356
-
357
- if resource.exists():
358
- return resource
359
-
360
- raise FileNotFoundError(f"Resource not found: {resource_path}")
361
-
362
- @classmethod
363
- def clear_cache(cls):
364
- """Clear all cached path lookups.
365
-
366
- Useful for testing or when the file system structure changes.
367
- """
368
- # Clear all lru_cache instances
369
- cls.get_framework_root.cache_clear()
370
- cls.get_agents_dir.cache_clear()
371
- cls.get_project_root.cache_clear()
372
- cls.get_config_dir.cache_clear()
373
- cls.get_claude_pm_dir.cache_clear()
374
- logger.debug("Cleared all PathResolver caches")
375
-
376
-
377
- # Convenience functions for backward compatibility
378
- def get_framework_root() -> Path:
379
- """Get the framework root directory."""
380
- return PathResolver.get_framework_root()
381
-
382
-
383
- def get_project_root() -> Path:
384
- """Get the current project root directory."""
385
- return PathResolver.get_project_root()
386
-
387
-
388
- def find_file_upwards(filename: str, start_path: Optional[Path] = None) -> Optional[Path]:
389
- """Search for a file by traversing up the directory tree."""
390
- return PathResolver.find_file_upwards(filename, start_path)
391
-
392
-
393
- def get_package_resource_path(resource_path: str) -> Path:
394
- """Get the path to a resource within the claude_mpm package."""
395
- return PathResolver.get_package_resource_path(resource_path)