claude-mpm 3.9.11__py3-none-any.whl → 4.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +2 -2
  3. claude_mpm/__main__.py +3 -2
  4. claude_mpm/agents/__init__.py +85 -79
  5. claude_mpm/agents/agent_loader.py +464 -1003
  6. claude_mpm/agents/agent_loader_integration.py +45 -45
  7. claude_mpm/agents/agents_metadata.py +29 -30
  8. claude_mpm/agents/async_agent_loader.py +156 -138
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/base_agent_loader.py +179 -151
  11. claude_mpm/agents/frontmatter_validator.py +229 -130
  12. claude_mpm/agents/schema/agent_schema.json +1 -1
  13. claude_mpm/agents/system_agent_config.py +213 -147
  14. claude_mpm/agents/templates/__init__.py +13 -13
  15. claude_mpm/agents/templates/code_analyzer.json +2 -2
  16. claude_mpm/agents/templates/data_engineer.json +1 -1
  17. claude_mpm/agents/templates/documentation.json +23 -11
  18. claude_mpm/agents/templates/engineer.json +22 -6
  19. claude_mpm/agents/templates/memory_manager.json +1 -1
  20. claude_mpm/agents/templates/ops.json +2 -2
  21. claude_mpm/agents/templates/project_organizer.json +1 -1
  22. claude_mpm/agents/templates/qa.json +1 -1
  23. claude_mpm/agents/templates/refactoring_engineer.json +222 -0
  24. claude_mpm/agents/templates/research.json +20 -14
  25. claude_mpm/agents/templates/security.json +1 -1
  26. claude_mpm/agents/templates/ticketing.json +1 -1
  27. claude_mpm/agents/templates/version_control.json +1 -1
  28. claude_mpm/agents/templates/web_qa.json +3 -1
  29. claude_mpm/agents/templates/web_ui.json +2 -2
  30. claude_mpm/cli/__init__.py +79 -51
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +20 -20
  33. claude_mpm/cli/commands/agents.py +279 -247
  34. claude_mpm/cli/commands/aggregate.py +138 -157
  35. claude_mpm/cli/commands/cleanup.py +147 -147
  36. claude_mpm/cli/commands/config.py +93 -76
  37. claude_mpm/cli/commands/info.py +17 -16
  38. claude_mpm/cli/commands/mcp.py +140 -905
  39. claude_mpm/cli/commands/mcp_command_router.py +139 -0
  40. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  41. claude_mpm/cli/commands/mcp_install_commands.py +20 -0
  42. claude_mpm/cli/commands/mcp_server_commands.py +175 -0
  43. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  44. claude_mpm/cli/commands/memory.py +239 -203
  45. claude_mpm/cli/commands/monitor.py +203 -81
  46. claude_mpm/cli/commands/run.py +380 -429
  47. claude_mpm/cli/commands/run_config_checker.py +160 -0
  48. claude_mpm/cli/commands/socketio_monitor.py +235 -0
  49. claude_mpm/cli/commands/tickets.py +305 -197
  50. claude_mpm/cli/parser.py +24 -1156
  51. claude_mpm/cli/parsers/__init__.py +29 -0
  52. claude_mpm/cli/parsers/agents_parser.py +136 -0
  53. claude_mpm/cli/parsers/base_parser.py +331 -0
  54. claude_mpm/cli/parsers/config_parser.py +85 -0
  55. claude_mpm/cli/parsers/mcp_parser.py +152 -0
  56. claude_mpm/cli/parsers/memory_parser.py +138 -0
  57. claude_mpm/cli/parsers/monitor_parser.py +104 -0
  58. claude_mpm/cli/parsers/run_parser.py +147 -0
  59. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  60. claude_mpm/cli/ticket_cli.py +7 -3
  61. claude_mpm/cli/utils.py +55 -37
  62. claude_mpm/cli_module/__init__.py +6 -6
  63. claude_mpm/cli_module/args.py +188 -140
  64. claude_mpm/cli_module/commands.py +79 -70
  65. claude_mpm/cli_module/migration_example.py +38 -60
  66. claude_mpm/config/__init__.py +32 -25
  67. claude_mpm/config/agent_config.py +151 -119
  68. claude_mpm/config/experimental_features.py +71 -73
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +35 -18
  72. claude_mpm/core/__init__.py +9 -6
  73. claude_mpm/core/agent_name_normalizer.py +68 -71
  74. claude_mpm/core/agent_registry.py +372 -521
  75. claude_mpm/core/agent_session_manager.py +74 -63
  76. claude_mpm/core/base_service.py +116 -87
  77. claude_mpm/core/cache.py +119 -153
  78. claude_mpm/core/claude_runner.py +425 -1120
  79. claude_mpm/core/config.py +263 -168
  80. claude_mpm/core/config_aliases.py +69 -61
  81. claude_mpm/core/config_constants.py +292 -0
  82. claude_mpm/core/constants.py +57 -99
  83. claude_mpm/core/container.py +211 -178
  84. claude_mpm/core/exceptions.py +233 -89
  85. claude_mpm/core/factories.py +92 -54
  86. claude_mpm/core/framework_loader.py +378 -220
  87. claude_mpm/core/hook_manager.py +198 -83
  88. claude_mpm/core/hook_performance_config.py +136 -0
  89. claude_mpm/core/injectable_service.py +61 -55
  90. claude_mpm/core/interactive_session.py +165 -155
  91. claude_mpm/core/interfaces.py +221 -195
  92. claude_mpm/core/lazy.py +96 -96
  93. claude_mpm/core/logger.py +133 -107
  94. claude_mpm/core/logging_config.py +185 -157
  95. claude_mpm/core/minimal_framework_loader.py +20 -15
  96. claude_mpm/core/mixins.py +30 -29
  97. claude_mpm/core/oneshot_session.py +215 -181
  98. claude_mpm/core/optimized_agent_loader.py +134 -138
  99. claude_mpm/core/optimized_startup.py +159 -157
  100. claude_mpm/core/pm_hook_interceptor.py +85 -72
  101. claude_mpm/core/service_registry.py +103 -101
  102. claude_mpm/core/session_manager.py +97 -87
  103. claude_mpm/core/socketio_pool.py +212 -158
  104. claude_mpm/core/tool_access_control.py +58 -51
  105. claude_mpm/core/types.py +46 -24
  106. claude_mpm/core/typing_utils.py +166 -82
  107. claude_mpm/core/unified_agent_registry.py +721 -0
  108. claude_mpm/core/unified_config.py +550 -0
  109. claude_mpm/core/unified_paths.py +549 -0
  110. claude_mpm/dashboard/index.html +1 -1
  111. claude_mpm/dashboard/open_dashboard.py +51 -17
  112. claude_mpm/dashboard/static/css/dashboard.css +27 -8
  113. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  114. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  115. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  116. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  117. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  118. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  119. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  120. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  121. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  122. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  123. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  124. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  125. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  126. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  127. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  128. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  129. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  130. claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
  131. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  132. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
  133. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  134. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  135. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  136. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  137. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  138. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  139. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  140. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  141. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  142. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  143. claude_mpm/dashboard/static/js/socket-client.js +120 -54
  144. claude_mpm/dashboard/templates/index.html +40 -50
  145. claude_mpm/experimental/cli_enhancements.py +60 -58
  146. claude_mpm/generators/__init__.py +1 -1
  147. claude_mpm/generators/agent_profile_generator.py +75 -65
  148. claude_mpm/hooks/__init__.py +1 -1
  149. claude_mpm/hooks/base_hook.py +33 -28
  150. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  151. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  152. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  153. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  154. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  155. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  156. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  157. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  158. claude_mpm/hooks/memory_integration_hook.py +140 -100
  159. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  160. claude_mpm/hooks/validation_hooks.py +57 -49
  161. claude_mpm/init.py +145 -121
  162. claude_mpm/models/__init__.py +9 -9
  163. claude_mpm/models/agent_definition.py +33 -23
  164. claude_mpm/models/agent_session.py +228 -200
  165. claude_mpm/scripts/__init__.py +1 -1
  166. claude_mpm/scripts/socketio_daemon.py +192 -75
  167. claude_mpm/scripts/socketio_server_manager.py +328 -0
  168. claude_mpm/scripts/start_activity_logging.py +25 -22
  169. claude_mpm/services/__init__.py +68 -43
  170. claude_mpm/services/agent_capabilities_service.py +271 -0
  171. claude_mpm/services/agents/__init__.py +23 -32
  172. claude_mpm/services/agents/deployment/__init__.py +3 -3
  173. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  174. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  175. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  176. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  177. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  178. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  179. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  180. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  181. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  182. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  183. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  184. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  185. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  186. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  187. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  188. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  189. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  190. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  191. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  192. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  193. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  194. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  195. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  196. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  197. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  198. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  199. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  200. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  201. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  202. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  203. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  204. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  205. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  206. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  207. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  208. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  209. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  210. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  211. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  212. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  213. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  214. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  215. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  216. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  217. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  218. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  219. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  220. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  221. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  222. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  223. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  224. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  225. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  226. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  227. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  228. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  229. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  230. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  231. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  232. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  233. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  234. claude_mpm/services/agents/loading/__init__.py +2 -2
  235. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  236. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  237. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  238. claude_mpm/services/agents/management/__init__.py +2 -2
  239. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  240. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  241. claude_mpm/services/agents/memory/__init__.py +9 -6
  242. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  243. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  244. claude_mpm/services/agents/memory/analyzer.py +430 -0
  245. claude_mpm/services/agents/memory/content_manager.py +376 -0
  246. claude_mpm/services/agents/memory/template_generator.py +468 -0
  247. claude_mpm/services/agents/registry/__init__.py +7 -10
  248. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  249. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  250. claude_mpm/services/async_session_logger.py +187 -153
  251. claude_mpm/services/claude_session_logger.py +87 -72
  252. claude_mpm/services/command_handler_service.py +217 -0
  253. claude_mpm/services/communication/__init__.py +3 -2
  254. claude_mpm/services/core/__init__.py +50 -97
  255. claude_mpm/services/core/base.py +60 -53
  256. claude_mpm/services/core/interfaces/__init__.py +188 -0
  257. claude_mpm/services/core/interfaces/agent.py +351 -0
  258. claude_mpm/services/core/interfaces/communication.py +343 -0
  259. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  260. claude_mpm/services/core/interfaces/service.py +434 -0
  261. claude_mpm/services/core/interfaces.py +19 -944
  262. claude_mpm/services/event_aggregator.py +208 -170
  263. claude_mpm/services/exceptions.py +387 -308
  264. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  265. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  266. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  267. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  268. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  269. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  270. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  271. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  272. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  273. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  274. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  275. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  276. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  277. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  278. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  279. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  280. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  281. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  282. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  283. claude_mpm/services/hook_service.py +106 -114
  284. claude_mpm/services/infrastructure/__init__.py +7 -5
  285. claude_mpm/services/infrastructure/context_preservation.py +233 -199
  286. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  287. claude_mpm/services/infrastructure/logging.py +83 -76
  288. claude_mpm/services/infrastructure/monitoring.py +547 -404
  289. claude_mpm/services/mcp_gateway/__init__.py +30 -13
  290. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  291. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  292. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  293. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  294. claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
  295. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  296. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  297. claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
  298. claude_mpm/services/mcp_gateway/main.py +287 -137
  299. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  300. claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
  301. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  302. claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
  303. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
  304. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  305. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  306. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  307. claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
  308. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  309. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  310. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  311. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  312. claude_mpm/services/memory/__init__.py +2 -2
  313. claude_mpm/services/memory/builder.py +451 -362
  314. claude_mpm/services/memory/cache/__init__.py +2 -2
  315. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  316. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  317. claude_mpm/services/memory/indexed_memory.py +195 -193
  318. claude_mpm/services/memory/optimizer.py +267 -234
  319. claude_mpm/services/memory/router.py +571 -263
  320. claude_mpm/services/memory_hook_service.py +237 -0
  321. claude_mpm/services/port_manager.py +223 -0
  322. claude_mpm/services/project/__init__.py +3 -3
  323. claude_mpm/services/project/analyzer.py +451 -305
  324. claude_mpm/services/project/registry.py +262 -240
  325. claude_mpm/services/recovery_manager.py +287 -231
  326. claude_mpm/services/response_tracker.py +87 -67
  327. claude_mpm/services/runner_configuration_service.py +587 -0
  328. claude_mpm/services/session_management_service.py +304 -0
  329. claude_mpm/services/socketio/__init__.py +4 -4
  330. claude_mpm/services/socketio/client_proxy.py +174 -0
  331. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  332. claude_mpm/services/socketio/handlers/base.py +44 -30
  333. claude_mpm/services/socketio/handlers/connection.py +145 -65
  334. claude_mpm/services/socketio/handlers/file.py +123 -108
  335. claude_mpm/services/socketio/handlers/git.py +607 -373
  336. claude_mpm/services/socketio/handlers/hook.py +170 -0
  337. claude_mpm/services/socketio/handlers/memory.py +4 -4
  338. claude_mpm/services/socketio/handlers/project.py +4 -4
  339. claude_mpm/services/socketio/handlers/registry.py +53 -38
  340. claude_mpm/services/socketio/server/__init__.py +18 -0
  341. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  342. claude_mpm/services/socketio/server/core.py +399 -0
  343. claude_mpm/services/socketio/server/main.py +323 -0
  344. claude_mpm/services/socketio_client_manager.py +160 -133
  345. claude_mpm/services/socketio_server.py +36 -1885
  346. claude_mpm/services/subprocess_launcher_service.py +316 -0
  347. claude_mpm/services/system_instructions_service.py +258 -0
  348. claude_mpm/services/ticket_manager.py +19 -533
  349. claude_mpm/services/utility_service.py +285 -0
  350. claude_mpm/services/version_control/__init__.py +18 -21
  351. claude_mpm/services/version_control/branch_strategy.py +20 -10
  352. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  353. claude_mpm/services/version_control/git_operations.py +52 -21
  354. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  355. claude_mpm/services/version_control/version_parser.py +145 -125
  356. claude_mpm/services/version_service.py +270 -0
  357. claude_mpm/storage/__init__.py +2 -2
  358. claude_mpm/storage/state_storage.py +177 -181
  359. claude_mpm/ticket_wrapper.py +2 -2
  360. claude_mpm/utils/__init__.py +2 -2
  361. claude_mpm/utils/agent_dependency_loader.py +453 -243
  362. claude_mpm/utils/config_manager.py +157 -118
  363. claude_mpm/utils/console.py +1 -1
  364. claude_mpm/utils/dependency_cache.py +102 -107
  365. claude_mpm/utils/dependency_manager.py +52 -47
  366. claude_mpm/utils/dependency_strategies.py +131 -96
  367. claude_mpm/utils/environment_context.py +110 -102
  368. claude_mpm/utils/error_handler.py +75 -55
  369. claude_mpm/utils/file_utils.py +80 -67
  370. claude_mpm/utils/framework_detection.py +12 -11
  371. claude_mpm/utils/import_migration_example.py +12 -60
  372. claude_mpm/utils/imports.py +48 -45
  373. claude_mpm/utils/path_operations.py +100 -93
  374. claude_mpm/utils/robust_installer.py +172 -164
  375. claude_mpm/utils/session_logging.py +30 -23
  376. claude_mpm/utils/subprocess_utils.py +99 -61
  377. claude_mpm/validation/__init__.py +1 -1
  378. claude_mpm/validation/agent_validator.py +151 -111
  379. claude_mpm/validation/frontmatter_validator.py +92 -71
  380. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +27 -1
  381. claude_mpm-4.0.3.dist-info/RECORD +402 -0
  382. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
  383. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
  384. claude_mpm/cli/commands/run_guarded.py +0 -511
  385. claude_mpm/config/memory_guardian_config.py +0 -325
  386. claude_mpm/config/memory_guardian_yaml.py +0 -335
  387. claude_mpm/core/config_paths.py +0 -150
  388. claude_mpm/core/memory_aware_runner.py +0 -353
  389. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  390. claude_mpm/deployment_paths.py +0 -261
  391. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  392. claude_mpm/models/state_models.py +0 -433
  393. claude_mpm/services/agent/__init__.py +0 -24
  394. claude_mpm/services/agent/deployment.py +0 -2548
  395. claude_mpm/services/agent/management.py +0 -598
  396. claude_mpm/services/agent/registry.py +0 -813
  397. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  398. claude_mpm/services/communication/socketio.py +0 -1935
  399. claude_mpm/services/communication/websocket.py +0 -479
  400. claude_mpm/services/framework_claude_md_generator.py +0 -624
  401. claude_mpm/services/health_monitor.py +0 -893
  402. claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
  403. claude_mpm/services/infrastructure/health_monitor.py +0 -775
  404. claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
  405. claude_mpm/services/infrastructure/memory_guardian.py +0 -944
  406. claude_mpm/services/infrastructure/restart_protection.py +0 -642
  407. claude_mpm/services/infrastructure/state_manager.py +0 -774
  408. claude_mpm/services/mcp_gateway/manager.py +0 -334
  409. claude_mpm/services/optimized_hook_service.py +0 -542
  410. claude_mpm/services/project_analyzer.py +0 -864
  411. claude_mpm/services/project_registry.py +0 -608
  412. claude_mpm/services/standalone_socketio_server.py +0 -1300
  413. claude_mpm/services/ticket_manager_di.py +0 -318
  414. claude_mpm/services/ticketing_service_original.py +0 -510
  415. claude_mpm/utils/paths.py +0 -395
  416. claude_mpm/utils/platform_memory.py +0 -524
  417. claude_mpm-3.9.11.dist-info/RECORD +0 -306
  418. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
  419. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
@@ -1,317 +1,203 @@
1
1
  """
2
2
  Centralized path management for claude-mpm.
3
3
 
4
+ This module provides the primary interface for path management operations.
5
+ All functionality has been consolidated into the unified path management system.
6
+
4
7
  This module provides a consistent, reliable way to access project paths
5
8
  without fragile parent.parent.parent patterns.
6
9
  """
7
10
 
8
- import os
11
+ import logging
9
12
  import sys
10
13
  from pathlib import Path
11
14
  from typing import Optional, Union
12
- from functools import cached_property
13
- import logging
15
+
16
+ # Import from the unified path management system
17
+ from ..core.unified_paths import get_path_manager
14
18
 
15
19
  logger = logging.getLogger(__name__)
16
20
 
17
21
 
18
22
  class ClaudeMPMPaths:
19
23
  """
20
- Centralized path management for the claude-mpm project.
21
-
22
- This class provides a singleton instance with properties for all common paths
23
- in the project, eliminating the need for fragile Path(__file__).parent.parent patterns.
24
-
24
+ Primary interface for the unified path management system.
25
+
26
+ This class provides access to all path operations through the UnifiedPathManager.
27
+
25
28
  Usage:
26
29
  from claude_mpm.config.paths import paths
27
-
30
+
28
31
  # Access common paths
29
32
  project_root = paths.project_root
30
33
  agents_dir = paths.agents_dir
31
34
  config_file = paths.config_dir / "some_config.yaml"
32
35
  """
33
-
34
- _instance: Optional['ClaudeMPMPaths'] = None
35
- _project_root: Optional[Path] = None
36
- _is_installed: bool = False
37
-
38
- def __new__(cls) -> 'ClaudeMPMPaths':
36
+
37
+ _instance: Optional["ClaudeMPMPaths"] = None
38
+ _path_manager = None
39
+
40
+ def __new__(cls) -> "ClaudeMPMPaths":
39
41
  """Singleton pattern to ensure single instance."""
40
42
  if cls._instance is None:
41
43
  cls._instance = super().__new__(cls)
42
44
  return cls._instance
43
-
45
+
44
46
  def __init__(self):
45
- """Initialize paths if not already done."""
46
- if self._project_root is None:
47
- self._is_installed = False
48
- self._detect_project_root()
49
-
50
- def _detect_project_root(self) -> None:
51
- """
52
- Detect the project root directory.
53
-
54
- Strategy:
55
- 1. Look for definitive project markers (pyproject.toml, setup.py)
56
- 2. Look for combination of markers to ensure we're at the right level
57
- 3. Walk up from current file location
58
- 4. Handle both development and installed environments
59
- """
60
- # Start from this file's location
61
- current = Path(__file__).resolve()
62
-
63
- # Check if we're in an installed environment (site-packages)
64
- # In pip/pipx installs, the package is directly in site-packages
65
- if 'site-packages' in str(current) or 'dist-packages' in str(current):
66
- # We're in an installed environment
67
- # The claude_mpm package directory itself is the "root" for resources
68
- import claude_mpm
69
- self._project_root = Path(claude_mpm.__file__).parent
70
- self._is_installed = True
71
- logger.debug(f"Installed environment detected, using package dir: {self._project_root}")
72
- return
73
-
74
- # We're in a development environment, look for project markers
75
- for parent in current.parents:
76
- # Check for definitive project root indicators
77
- # Prioritize pyproject.toml and setup.py as they're only at root
78
- if (parent / 'pyproject.toml').exists() or (parent / 'setup.py').exists():
79
- self._project_root = parent
80
- self._is_installed = False
81
- logger.debug(f"Project root detected at: {parent} (found pyproject.toml or setup.py)")
82
- return
83
-
84
- # Secondary check: .git directory + VERSION file together
85
- # This combination is more likely to be the real project root
86
- if (parent / '.git').exists() and (parent / 'VERSION').exists():
87
- self._project_root = parent
88
- self._is_installed = False
89
- logger.debug(f"Project root detected at: {parent} (found .git and VERSION)")
90
- return
91
-
92
- # Fallback: walk up to find claude-mpm directory name
93
- for parent in current.parents:
94
- if parent.name == 'claude-mpm':
95
- self._project_root = parent
96
- self._is_installed = False
97
- logger.debug(f"Project root detected at: {parent} (by directory name)")
98
- return
99
-
100
- # Last resort fallback: 3 levels up from this file
101
- # paths.py is in src/claude_mpm/config/
102
- self._project_root = current.parent.parent.parent
103
- self._is_installed = False
104
- logger.warning(f"Project root fallback to: {self._project_root}")
105
-
47
+ """Initialize paths using the unified path manager."""
48
+ if self._path_manager is None:
49
+ self._path_manager = get_path_manager()
50
+
51
+ # ========================================================================
52
+ # Compatibility Properties - Delegate to UnifiedPathManager
53
+ # ========================================================================
54
+
106
55
  @property
107
56
  def project_root(self) -> Path:
108
57
  """Get the project root directory."""
109
- if self._project_root is None:
110
- self._detect_project_root()
111
- return self._project_root
112
-
58
+ return self._path_manager.project_root
59
+
60
+ @property
61
+ def framework_root(self) -> Path:
62
+ """Get the framework root directory."""
63
+ return self._path_manager.framework_root
64
+
113
65
  @property
114
66
  def src_dir(self) -> Path:
115
67
  """Get the src directory."""
116
- if hasattr(self, '_is_installed') and self._is_installed:
117
- # In installed environment, there's no src directory
118
- # Return the package directory itself
119
- return self.project_root.parent
120
- return self.project_root / "src"
121
-
68
+ return self._path_manager.framework_root / "src"
69
+
122
70
  @property
123
71
  def claude_mpm_dir(self) -> Path:
124
72
  """Get the main claude_mpm package directory."""
125
- if hasattr(self, '_is_installed') and self._is_installed:
126
- # In installed environment, project_root IS the claude_mpm directory
127
- return self.project_root
128
- return self.src_dir / "claude_mpm"
129
-
73
+ return self._path_manager.package_root
74
+
130
75
  @property
131
76
  def agents_dir(self) -> Path:
132
77
  """Get the agents directory."""
133
- if hasattr(self, '_is_installed') and self._is_installed:
134
- # In installed environment, agents is directly under the package
135
- return self.project_root / "agents"
136
- return self.claude_mpm_dir / "agents"
137
-
78
+ return self._path_manager.get_agents_dir("framework")
79
+
138
80
  @property
139
81
  def services_dir(self) -> Path:
140
82
  """Get the services directory."""
141
- return self.claude_mpm_dir / "services"
142
-
83
+ return self._path_manager.package_root / "services"
84
+
143
85
  @property
144
86
  def hooks_dir(self) -> Path:
145
87
  """Get the hooks directory."""
146
- return self.claude_mpm_dir / "hooks"
147
-
88
+ return self._path_manager.package_root / "hooks"
89
+
148
90
  @property
149
91
  def config_dir(self) -> Path:
150
92
  """Get the config directory."""
151
- return self.claude_mpm_dir / "config"
152
-
93
+ return self._path_manager.package_root / "config"
94
+
153
95
  @property
154
96
  def cli_dir(self) -> Path:
155
97
  """Get the CLI directory."""
156
- return self.claude_mpm_dir / "cli"
157
-
98
+ return self._path_manager.package_root / "cli"
99
+
158
100
  @property
159
101
  def core_dir(self) -> Path:
160
102
  """Get the core directory."""
161
- return self.claude_mpm_dir / "core"
162
-
103
+ return self._path_manager.package_root / "core"
104
+
163
105
  @property
164
106
  def schemas_dir(self) -> Path:
165
107
  """Get the schemas directory."""
166
- return self.claude_mpm_dir / "schemas"
167
-
108
+ return self._path_manager.package_root / "schemas"
109
+
168
110
  @property
169
111
  def scripts_dir(self) -> Path:
170
112
  """Get the scripts directory."""
171
- if hasattr(self, '_is_installed') and self._is_installed:
172
- # In installed environment, scripts might be in a different location or not exist
173
- # Return a path that won't cause issues but indicates it's not available
174
- return Path.home() / '.claude-mpm' / 'scripts'
175
- return self.project_root / "scripts"
176
-
113
+ return self._path_manager.get_scripts_dir()
114
+
177
115
  @property
178
116
  def tests_dir(self) -> Path:
179
117
  """Get the tests directory."""
180
- if hasattr(self, '_is_installed') and self._is_installed:
181
- # Tests aren't distributed with installed packages
182
- return Path.home() / '.claude-mpm' / 'tests'
183
- return self.project_root / "tests"
184
-
118
+ return self._path_manager.project_root / "tests"
119
+
185
120
  @property
186
121
  def docs_dir(self) -> Path:
187
122
  """Get the documentation directory."""
188
- if hasattr(self, '_is_installed') and self._is_installed:
189
- # Docs might be installed separately or not at all
190
- return Path.home() / '.claude-mpm' / 'docs'
191
- return self.project_root / "docs"
192
-
123
+ return self._path_manager.project_root / "docs"
124
+
193
125
  @property
194
126
  def logs_dir(self) -> Path:
195
127
  """Get the logs directory (creates if doesn't exist)."""
196
- if hasattr(self, '_is_installed') and self._is_installed:
197
- # Use user's home directory for logs in installed environment
198
- logs = Path.home() / '.claude-mpm' / 'logs'
199
- else:
200
- logs = self.project_root / "logs"
201
- logs.mkdir(parents=True, exist_ok=True)
202
- return logs
203
-
128
+ logs_dir = self._path_manager.get_logs_dir("project")
129
+ self._path_manager.ensure_directory(logs_dir)
130
+ return logs_dir
131
+
204
132
  @property
205
133
  def temp_dir(self) -> Path:
206
134
  """Get the temporary files directory (creates if doesn't exist)."""
207
- if hasattr(self, '_is_installed') and self._is_installed:
208
- # Use user's home directory for temp files in installed environment
209
- temp = Path.home() / '.claude-mpm' / '.tmp'
210
- else:
211
- temp = self.project_root / ".tmp"
212
- temp.mkdir(parents=True, exist_ok=True)
213
- return temp
214
-
135
+ temp_dir = self._path_manager.project_root / ".tmp"
136
+ self._path_manager.ensure_directory(temp_dir)
137
+ return temp_dir
138
+
215
139
  @property
216
140
  def claude_mpm_dir_hidden(self) -> Path:
217
141
  """Get the hidden .claude-mpm directory (creates if doesn't exist)."""
218
- if hasattr(self, '_is_installed') and self._is_installed:
219
- # Use current working directory in installed environment
220
- hidden = Path.cwd() / ".claude-mpm"
221
- else:
222
- hidden = self.project_root / ".claude-mpm"
223
- hidden.mkdir(exist_ok=True)
224
- return hidden
225
-
226
- @cached_property
142
+ hidden_dir = self._path_manager.get_config_dir("project")
143
+ self._path_manager.ensure_directory(hidden_dir)
144
+ return hidden_dir
145
+
146
+ @property
227
147
  def version_file(self) -> Path:
228
148
  """Get the VERSION file path."""
229
- return self.project_root / "VERSION"
230
-
231
- @cached_property
149
+ return self._path_manager.project_root / "VERSION"
150
+
151
+ @property
232
152
  def pyproject_file(self) -> Path:
233
153
  """Get the pyproject.toml file path."""
234
- return self.project_root / "pyproject.toml"
235
-
236
- @cached_property
154
+ return self._path_manager.project_root / "pyproject.toml"
155
+
156
+ @property
237
157
  def package_json_file(self) -> Path:
238
158
  """Get the package.json file path."""
239
- return self.project_root / "package.json"
240
-
241
- @cached_property
159
+ return self._path_manager.project_root / "package.json"
160
+
161
+ @property
242
162
  def claude_md_file(self) -> Path:
243
163
  """Get the CLAUDE.md file path."""
244
- return self.project_root / "CLAUDE.md"
245
-
164
+ return self._path_manager.project_root / "CLAUDE.md"
165
+
246
166
  def get_version(self) -> str:
247
- """
248
- Get the project version from various sources.
249
-
250
- Returns:
251
- Version string or 'unknown' if not found.
252
- """
253
- # Try VERSION file first
254
- if self.version_file.exists():
255
- return self.version_file.read_text().strip()
256
-
257
- # Try package metadata
258
- try:
259
- from importlib.metadata import version
260
- return version('claude-mpm')
261
- except Exception:
262
- pass
263
-
264
- return 'unknown'
265
-
167
+ """Get the project version from various sources."""
168
+ return self._path_manager.get_version()
169
+
266
170
  def ensure_in_path(self) -> None:
267
171
  """Ensure src directory is in Python path."""
268
- src_str = str(self.src_dir)
269
- if src_str not in sys.path:
270
- sys.path.insert(0, src_str)
271
-
172
+ self._path_manager.ensure_src_in_path()
173
+
272
174
  def relative_to_project(self, path: Union[str, Path]) -> Path:
273
- """
274
- Get a path relative to the project root.
275
-
276
- Args:
277
- path: Path to make relative
278
-
279
- Returns:
280
- Path relative to project root
281
- """
175
+ """Get a path relative to the project root."""
282
176
  abs_path = Path(path).resolve()
283
177
  try:
284
178
  return abs_path.relative_to(self.project_root)
285
179
  except ValueError:
286
180
  return abs_path
287
-
181
+
288
182
  def resolve_config_path(self, config_name: str) -> Path:
289
- """
290
- Resolve a configuration file path.
291
-
292
- Args:
293
- config_name: Name of the config file
294
-
295
- Returns:
296
- Full path to the config file
297
- """
183
+ """Resolve a configuration file path."""
298
184
  # Check in config directory first
299
185
  config_path = self.config_dir / config_name
300
186
  if config_path.exists():
301
187
  return config_path
302
-
188
+
303
189
  # Check in project root
304
190
  root_path = self.project_root / config_name
305
191
  if root_path.exists():
306
192
  return root_path
307
-
193
+
308
194
  # Return config dir path as default
309
195
  return config_path
310
-
196
+
311
197
  def __str__(self) -> str:
312
198
  """String representation."""
313
199
  return f"ClaudeMPMPaths(root={self.project_root})"
314
-
200
+
315
201
  def __repr__(self) -> str:
316
202
  """Developer representation."""
317
203
  return (
@@ -369,4 +255,4 @@ def ensure_src_in_path() -> None:
369
255
 
370
256
 
371
257
  # Auto-ensure src is in path when module is imported
372
- ensure_src_in_path()
258
+ ensure_src_in_path()