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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +2 -2
  3. claude_mpm/__main__.py +3 -2
  4. claude_mpm/agents/__init__.py +85 -79
  5. claude_mpm/agents/agent_loader.py +464 -1003
  6. claude_mpm/agents/agent_loader_integration.py +45 -45
  7. claude_mpm/agents/agents_metadata.py +29 -30
  8. claude_mpm/agents/async_agent_loader.py +156 -138
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/base_agent_loader.py +179 -151
  11. claude_mpm/agents/frontmatter_validator.py +229 -130
  12. claude_mpm/agents/schema/agent_schema.json +1 -1
  13. claude_mpm/agents/system_agent_config.py +213 -147
  14. claude_mpm/agents/templates/__init__.py +13 -13
  15. claude_mpm/agents/templates/code_analyzer.json +2 -2
  16. claude_mpm/agents/templates/data_engineer.json +1 -1
  17. claude_mpm/agents/templates/documentation.json +23 -11
  18. claude_mpm/agents/templates/engineer.json +22 -6
  19. claude_mpm/agents/templates/memory_manager.json +155 -0
  20. claude_mpm/agents/templates/ops.json +2 -2
  21. claude_mpm/agents/templates/project_organizer.json +1 -1
  22. claude_mpm/agents/templates/qa.json +1 -1
  23. claude_mpm/agents/templates/refactoring_engineer.json +222 -0
  24. claude_mpm/agents/templates/research.json +20 -14
  25. claude_mpm/agents/templates/security.json +1 -1
  26. claude_mpm/agents/templates/ticketing.json +1 -1
  27. claude_mpm/agents/templates/version_control.json +1 -1
  28. claude_mpm/agents/templates/web_qa.json +3 -1
  29. claude_mpm/agents/templates/web_ui.json +2 -2
  30. claude_mpm/cli/__init__.py +90 -49
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +21 -18
  33. claude_mpm/cli/commands/agents.py +279 -247
  34. claude_mpm/cli/commands/aggregate.py +138 -157
  35. claude_mpm/cli/commands/cleanup.py +147 -147
  36. claude_mpm/cli/commands/config.py +93 -76
  37. claude_mpm/cli/commands/info.py +17 -16
  38. claude_mpm/cli/commands/mcp.py +143 -762
  39. claude_mpm/cli/commands/mcp_command_router.py +139 -0
  40. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  41. claude_mpm/cli/commands/mcp_install_commands.py +20 -0
  42. claude_mpm/cli/commands/mcp_server_commands.py +175 -0
  43. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  44. claude_mpm/cli/commands/memory.py +239 -203
  45. claude_mpm/cli/commands/monitor.py +203 -81
  46. claude_mpm/cli/commands/run.py +380 -429
  47. claude_mpm/cli/commands/run_config_checker.py +160 -0
  48. claude_mpm/cli/commands/socketio_monitor.py +235 -0
  49. claude_mpm/cli/commands/tickets.py +305 -197
  50. claude_mpm/cli/parser.py +24 -1150
  51. claude_mpm/cli/parsers/__init__.py +29 -0
  52. claude_mpm/cli/parsers/agents_parser.py +136 -0
  53. claude_mpm/cli/parsers/base_parser.py +331 -0
  54. claude_mpm/cli/parsers/config_parser.py +85 -0
  55. claude_mpm/cli/parsers/mcp_parser.py +152 -0
  56. claude_mpm/cli/parsers/memory_parser.py +138 -0
  57. claude_mpm/cli/parsers/monitor_parser.py +104 -0
  58. claude_mpm/cli/parsers/run_parser.py +147 -0
  59. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  60. claude_mpm/cli/ticket_cli.py +7 -3
  61. claude_mpm/cli/utils.py +55 -37
  62. claude_mpm/cli_module/__init__.py +6 -6
  63. claude_mpm/cli_module/args.py +188 -140
  64. claude_mpm/cli_module/commands.py +79 -70
  65. claude_mpm/cli_module/migration_example.py +38 -60
  66. claude_mpm/config/__init__.py +32 -25
  67. claude_mpm/config/agent_config.py +151 -119
  68. claude_mpm/config/experimental_features.py +217 -0
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +36 -18
  72. claude_mpm/core/__init__.py +9 -6
  73. claude_mpm/core/agent_name_normalizer.py +68 -71
  74. claude_mpm/core/agent_registry.py +372 -521
  75. claude_mpm/core/agent_session_manager.py +74 -63
  76. claude_mpm/core/base_service.py +116 -87
  77. claude_mpm/core/cache.py +119 -153
  78. claude_mpm/core/claude_runner.py +425 -1120
  79. claude_mpm/core/config.py +263 -168
  80. claude_mpm/core/config_aliases.py +69 -61
  81. claude_mpm/core/config_constants.py +292 -0
  82. claude_mpm/core/constants.py +57 -99
  83. claude_mpm/core/container.py +211 -178
  84. claude_mpm/core/exceptions.py +233 -89
  85. claude_mpm/core/factories.py +92 -54
  86. claude_mpm/core/framework_loader.py +378 -220
  87. claude_mpm/core/hook_manager.py +198 -83
  88. claude_mpm/core/hook_performance_config.py +136 -0
  89. claude_mpm/core/injectable_service.py +61 -55
  90. claude_mpm/core/interactive_session.py +165 -155
  91. claude_mpm/core/interfaces.py +221 -195
  92. claude_mpm/core/lazy.py +96 -96
  93. claude_mpm/core/logger.py +133 -107
  94. claude_mpm/core/logging_config.py +185 -157
  95. claude_mpm/core/minimal_framework_loader.py +20 -15
  96. claude_mpm/core/mixins.py +30 -29
  97. claude_mpm/core/oneshot_session.py +215 -181
  98. claude_mpm/core/optimized_agent_loader.py +134 -138
  99. claude_mpm/core/optimized_startup.py +159 -157
  100. claude_mpm/core/pm_hook_interceptor.py +85 -72
  101. claude_mpm/core/service_registry.py +103 -101
  102. claude_mpm/core/session_manager.py +97 -87
  103. claude_mpm/core/socketio_pool.py +212 -158
  104. claude_mpm/core/tool_access_control.py +58 -51
  105. claude_mpm/core/types.py +46 -24
  106. claude_mpm/core/typing_utils.py +166 -82
  107. claude_mpm/core/unified_agent_registry.py +721 -0
  108. claude_mpm/core/unified_config.py +550 -0
  109. claude_mpm/core/unified_paths.py +549 -0
  110. claude_mpm/dashboard/index.html +1 -1
  111. claude_mpm/dashboard/open_dashboard.py +51 -17
  112. claude_mpm/dashboard/static/css/dashboard.css +27 -8
  113. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  114. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  115. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  116. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  117. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  118. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  119. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  120. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  121. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  122. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  123. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  124. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  125. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  126. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  127. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  128. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  129. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  130. claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
  131. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  132. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
  133. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  134. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  135. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  136. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  137. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  138. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  139. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  140. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  141. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  142. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  143. claude_mpm/dashboard/static/js/socket-client.js +120 -54
  144. claude_mpm/dashboard/templates/index.html +40 -50
  145. claude_mpm/experimental/cli_enhancements.py +60 -58
  146. claude_mpm/generators/__init__.py +1 -1
  147. claude_mpm/generators/agent_profile_generator.py +75 -65
  148. claude_mpm/hooks/__init__.py +1 -1
  149. claude_mpm/hooks/base_hook.py +33 -28
  150. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  151. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  152. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  153. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  154. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  155. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  156. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  157. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  158. claude_mpm/hooks/memory_integration_hook.py +140 -100
  159. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  160. claude_mpm/hooks/validation_hooks.py +57 -49
  161. claude_mpm/init.py +145 -121
  162. claude_mpm/models/__init__.py +9 -9
  163. claude_mpm/models/agent_definition.py +33 -23
  164. claude_mpm/models/agent_session.py +228 -200
  165. claude_mpm/scripts/__init__.py +1 -1
  166. claude_mpm/scripts/socketio_daemon.py +192 -75
  167. claude_mpm/scripts/socketio_server_manager.py +328 -0
  168. claude_mpm/scripts/start_activity_logging.py +25 -22
  169. claude_mpm/services/__init__.py +68 -43
  170. claude_mpm/services/agent_capabilities_service.py +271 -0
  171. claude_mpm/services/agents/__init__.py +23 -32
  172. claude_mpm/services/agents/deployment/__init__.py +3 -3
  173. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  174. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  175. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  176. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  177. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  178. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  179. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  180. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  181. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  182. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  183. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  184. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  185. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  186. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  187. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  188. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  189. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  190. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  191. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  192. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  193. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  194. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  195. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  196. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  197. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  198. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  199. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  200. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  201. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  202. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  203. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  204. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  205. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  206. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  207. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  208. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  209. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  210. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  211. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  212. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  213. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  214. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  215. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  216. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  217. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  218. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  219. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  220. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  221. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  222. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  223. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  224. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  225. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  226. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  227. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  228. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  229. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  230. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  231. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  232. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  233. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  234. claude_mpm/services/agents/loading/__init__.py +2 -2
  235. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  236. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  237. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  238. claude_mpm/services/agents/management/__init__.py +2 -2
  239. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  240. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  241. claude_mpm/services/agents/memory/__init__.py +9 -6
  242. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  243. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  244. claude_mpm/services/agents/memory/analyzer.py +430 -0
  245. claude_mpm/services/agents/memory/content_manager.py +376 -0
  246. claude_mpm/services/agents/memory/template_generator.py +468 -0
  247. claude_mpm/services/agents/registry/__init__.py +7 -10
  248. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  249. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  250. claude_mpm/services/async_session_logger.py +187 -153
  251. claude_mpm/services/claude_session_logger.py +87 -72
  252. claude_mpm/services/command_handler_service.py +217 -0
  253. claude_mpm/services/communication/__init__.py +3 -2
  254. claude_mpm/services/core/__init__.py +50 -97
  255. claude_mpm/services/core/base.py +60 -53
  256. claude_mpm/services/core/interfaces/__init__.py +188 -0
  257. claude_mpm/services/core/interfaces/agent.py +351 -0
  258. claude_mpm/services/core/interfaces/communication.py +343 -0
  259. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  260. claude_mpm/services/core/interfaces/service.py +434 -0
  261. claude_mpm/services/core/interfaces.py +19 -944
  262. claude_mpm/services/event_aggregator.py +208 -170
  263. claude_mpm/services/exceptions.py +387 -308
  264. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  265. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  266. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  267. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  268. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  269. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  270. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  271. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  272. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  273. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  274. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  275. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  276. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  277. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  278. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  279. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  280. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  281. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  282. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  283. claude_mpm/services/hook_service.py +106 -114
  284. claude_mpm/services/infrastructure/__init__.py +7 -5
  285. claude_mpm/services/infrastructure/context_preservation.py +571 -0
  286. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  287. claude_mpm/services/infrastructure/logging.py +83 -76
  288. claude_mpm/services/infrastructure/monitoring.py +547 -404
  289. claude_mpm/services/mcp_gateway/__init__.py +40 -23
  290. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  291. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  292. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  293. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  294. claude_mpm/services/mcp_gateway/core/__init__.py +14 -21
  295. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  296. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  297. claude_mpm/services/mcp_gateway/core/interfaces.py +97 -93
  298. claude_mpm/services/mcp_gateway/main.py +307 -127
  299. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  300. claude_mpm/services/mcp_gateway/registry/service_registry.py +100 -101
  301. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  302. claude_mpm/services/mcp_gateway/server/__init__.py +4 -4
  303. claude_mpm/services/mcp_gateway/server/{mcp_server.py → mcp_gateway.py} +149 -153
  304. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  305. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  306. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  307. claude_mpm/services/mcp_gateway/tools/base_adapter.py +110 -121
  308. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  309. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  310. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  311. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  312. claude_mpm/services/memory/__init__.py +2 -2
  313. claude_mpm/services/memory/builder.py +451 -362
  314. claude_mpm/services/memory/cache/__init__.py +2 -2
  315. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  316. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  317. claude_mpm/services/memory/indexed_memory.py +195 -193
  318. claude_mpm/services/memory/optimizer.py +267 -234
  319. claude_mpm/services/memory/router.py +571 -263
  320. claude_mpm/services/memory_hook_service.py +237 -0
  321. claude_mpm/services/port_manager.py +223 -0
  322. claude_mpm/services/project/__init__.py +3 -3
  323. claude_mpm/services/project/analyzer.py +451 -305
  324. claude_mpm/services/project/registry.py +262 -240
  325. claude_mpm/services/recovery_manager.py +287 -231
  326. claude_mpm/services/response_tracker.py +87 -67
  327. claude_mpm/services/runner_configuration_service.py +587 -0
  328. claude_mpm/services/session_management_service.py +304 -0
  329. claude_mpm/services/socketio/__init__.py +4 -4
  330. claude_mpm/services/socketio/client_proxy.py +174 -0
  331. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  332. claude_mpm/services/socketio/handlers/base.py +44 -30
  333. claude_mpm/services/socketio/handlers/connection.py +145 -65
  334. claude_mpm/services/socketio/handlers/file.py +123 -108
  335. claude_mpm/services/socketio/handlers/git.py +607 -373
  336. claude_mpm/services/socketio/handlers/hook.py +170 -0
  337. claude_mpm/services/socketio/handlers/memory.py +4 -4
  338. claude_mpm/services/socketio/handlers/project.py +4 -4
  339. claude_mpm/services/socketio/handlers/registry.py +53 -38
  340. claude_mpm/services/socketio/server/__init__.py +18 -0
  341. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  342. claude_mpm/services/socketio/server/core.py +399 -0
  343. claude_mpm/services/socketio/server/main.py +323 -0
  344. claude_mpm/services/socketio_client_manager.py +160 -133
  345. claude_mpm/services/socketio_server.py +36 -1885
  346. claude_mpm/services/subprocess_launcher_service.py +316 -0
  347. claude_mpm/services/system_instructions_service.py +258 -0
  348. claude_mpm/services/ticket_manager.py +20 -534
  349. claude_mpm/services/utility_service.py +285 -0
  350. claude_mpm/services/version_control/__init__.py +18 -21
  351. claude_mpm/services/version_control/branch_strategy.py +20 -10
  352. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  353. claude_mpm/services/version_control/git_operations.py +52 -21
  354. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  355. claude_mpm/services/version_control/version_parser.py +145 -125
  356. claude_mpm/services/version_service.py +270 -0
  357. claude_mpm/storage/__init__.py +9 -0
  358. claude_mpm/storage/state_storage.py +552 -0
  359. claude_mpm/ticket_wrapper.py +2 -2
  360. claude_mpm/utils/__init__.py +2 -2
  361. claude_mpm/utils/agent_dependency_loader.py +453 -243
  362. claude_mpm/utils/config_manager.py +157 -118
  363. claude_mpm/utils/console.py +1 -1
  364. claude_mpm/utils/dependency_cache.py +102 -107
  365. claude_mpm/utils/dependency_manager.py +52 -47
  366. claude_mpm/utils/dependency_strategies.py +131 -96
  367. claude_mpm/utils/environment_context.py +110 -102
  368. claude_mpm/utils/error_handler.py +75 -55
  369. claude_mpm/utils/file_utils.py +80 -67
  370. claude_mpm/utils/framework_detection.py +12 -11
  371. claude_mpm/utils/import_migration_example.py +12 -60
  372. claude_mpm/utils/imports.py +48 -45
  373. claude_mpm/utils/path_operations.py +100 -93
  374. claude_mpm/utils/robust_installer.py +172 -164
  375. claude_mpm/utils/session_logging.py +30 -23
  376. claude_mpm/utils/subprocess_utils.py +99 -61
  377. claude_mpm/validation/__init__.py +1 -1
  378. claude_mpm/validation/agent_validator.py +151 -111
  379. claude_mpm/validation/frontmatter_validator.py +92 -71
  380. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +51 -2
  381. claude_mpm-4.0.3.dist-info/RECORD +402 -0
  382. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
  383. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
  384. claude_mpm/config/memory_guardian_config.py +0 -325
  385. claude_mpm/core/config_paths.py +0 -150
  386. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  387. claude_mpm/deployment_paths.py +0 -261
  388. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  389. claude_mpm/models/state_models.py +0 -433
  390. claude_mpm/services/agent/__init__.py +0 -24
  391. claude_mpm/services/agent/deployment.py +0 -2548
  392. claude_mpm/services/agent/management.py +0 -598
  393. claude_mpm/services/agent/registry.py +0 -813
  394. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  395. claude_mpm/services/communication/socketio.py +0 -1935
  396. claude_mpm/services/communication/websocket.py +0 -479
  397. claude_mpm/services/framework_claude_md_generator.py +0 -624
  398. claude_mpm/services/health_monitor.py +0 -893
  399. claude_mpm/services/infrastructure/memory_guardian.py +0 -770
  400. claude_mpm/services/mcp_gateway/server/mcp_server_simple.py +0 -444
  401. claude_mpm/services/optimized_hook_service.py +0 -542
  402. claude_mpm/services/project_analyzer.py +0 -864
  403. claude_mpm/services/project_registry.py +0 -608
  404. claude_mpm/services/standalone_socketio_server.py +0 -1300
  405. claude_mpm/services/ticket_manager_di.py +0 -318
  406. claude_mpm/services/ticketing_service_original.py +0 -510
  407. claude_mpm/utils/paths.py +0 -395
  408. claude_mpm/utils/platform_memory.py +0 -524
  409. claude_mpm-3.9.9.dist-info/RECORD +0 -293
  410. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
  411. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,203 @@
1
+ """
2
+ Tickets command parser for claude-mpm CLI.
3
+
4
+ WHY: This module contains all arguments specific to ticket management commands,
5
+ extracted from the monolithic parser.py for better organization.
6
+
7
+ DESIGN DECISION: Ticket commands have their own complex subcommand structure
8
+ that warrants a dedicated module.
9
+ """
10
+
11
+ import argparse
12
+
13
+ from ...constants import CLICommands, TicketCommands
14
+ from .base_parser import add_common_arguments
15
+
16
+
17
+ def add_tickets_subparser(subparsers) -> argparse.ArgumentParser:
18
+ """
19
+ Add the tickets subparser with all ticket management commands.
20
+
21
+ WHY: Ticket management has multiple subcommands (create, list, view, etc.)
22
+ that need their own argument structures.
23
+
24
+ Args:
25
+ subparsers: The subparsers object from the main parser
26
+
27
+ Returns:
28
+ The configured tickets subparser
29
+ """
30
+ # Tickets command with subcommands
31
+ tickets_parser = subparsers.add_parser(
32
+ CLICommands.TICKETS.value, help="Manage tickets and tracking"
33
+ )
34
+ add_common_arguments(tickets_parser)
35
+
36
+ tickets_subparsers = tickets_parser.add_subparsers(
37
+ dest="tickets_command", help="Ticket commands", metavar="SUBCOMMAND"
38
+ )
39
+
40
+ # Create ticket
41
+ create_ticket_parser = tickets_subparsers.add_parser(
42
+ TicketCommands.CREATE.value, help="Create a new ticket"
43
+ )
44
+ create_ticket_parser.add_argument("title", help="Ticket title")
45
+ create_ticket_parser.add_argument(
46
+ "-t",
47
+ "--type",
48
+ default="task",
49
+ choices=["task", "bug", "feature", "issue", "epic"],
50
+ help="Ticket type (default: task)",
51
+ )
52
+ create_ticket_parser.add_argument(
53
+ "-p",
54
+ "--priority",
55
+ default="medium",
56
+ choices=["low", "medium", "high", "critical"],
57
+ help="Priority level (default: medium)",
58
+ )
59
+ create_ticket_parser.add_argument(
60
+ "-d",
61
+ "--description",
62
+ nargs="*",
63
+ help="Ticket description (multiple words allowed)",
64
+ )
65
+ create_ticket_parser.add_argument("--tags", help="Comma-separated list of tags")
66
+ create_ticket_parser.add_argument(
67
+ "--parent-epic", help="Parent epic ID for this ticket"
68
+ )
69
+ create_ticket_parser.add_argument(
70
+ "--parent-issue", help="Parent issue ID for this ticket"
71
+ )
72
+
73
+ # List tickets
74
+ list_tickets_parser = tickets_subparsers.add_parser(
75
+ TicketCommands.LIST.value, help="List tickets"
76
+ )
77
+ list_tickets_parser.add_argument(
78
+ "-t",
79
+ "--type",
80
+ choices=["task", "bug", "feature", "issue", "epic"],
81
+ help="Filter by ticket type",
82
+ )
83
+ list_tickets_parser.add_argument(
84
+ "-s",
85
+ "--status",
86
+ choices=["open", "in_progress", "closed", "all"],
87
+ default="open",
88
+ help="Filter by status (default: open)",
89
+ )
90
+ list_tickets_parser.add_argument(
91
+ "-p",
92
+ "--priority",
93
+ choices=["low", "medium", "high", "critical"],
94
+ help="Filter by priority",
95
+ )
96
+ list_tickets_parser.add_argument(
97
+ "--limit",
98
+ type=int,
99
+ default=20,
100
+ help="Maximum number of tickets to show (default: 20)",
101
+ )
102
+ list_tickets_parser.add_argument(
103
+ "--page", type=int, default=1, help="Page number for pagination (default: 1)"
104
+ )
105
+ list_tickets_parser.add_argument(
106
+ "--page-size",
107
+ type=int,
108
+ default=20,
109
+ help="Number of tickets per page (default: 20)",
110
+ )
111
+ list_tickets_parser.add_argument(
112
+ "--verbose", action="store_true", help="Show detailed ticket information"
113
+ )
114
+
115
+ # View ticket
116
+ view_ticket_parser = tickets_subparsers.add_parser(
117
+ TicketCommands.VIEW.value, help="View ticket details"
118
+ )
119
+ view_ticket_parser.add_argument("ticket_id", help="Ticket ID to view")
120
+ view_ticket_parser.add_argument(
121
+ "--with-comments", action="store_true", help="Include comments in the view"
122
+ )
123
+
124
+ # Update ticket
125
+ update_ticket_parser = tickets_subparsers.add_parser(
126
+ TicketCommands.UPDATE.value, help="Update ticket"
127
+ )
128
+ update_ticket_parser.add_argument("ticket_id", help="Ticket ID to update")
129
+ update_ticket_parser.add_argument(
130
+ "-p",
131
+ "--priority",
132
+ choices=["low", "medium", "high", "critical"],
133
+ help="Update priority",
134
+ )
135
+ update_ticket_parser.add_argument(
136
+ "-s",
137
+ "--status",
138
+ choices=["open", "in_progress", "closed"],
139
+ help="Update status",
140
+ )
141
+ update_ticket_parser.add_argument("--title", help="Update title")
142
+ update_ticket_parser.add_argument("--description", help="Update description")
143
+ update_ticket_parser.add_argument("--add-tags", help="Comma-separated tags to add")
144
+ update_ticket_parser.add_argument(
145
+ "--remove-tags", help="Comma-separated tags to remove"
146
+ )
147
+
148
+ # Close ticket
149
+ close_ticket_parser = tickets_subparsers.add_parser(
150
+ TicketCommands.CLOSE.value, help="Close ticket"
151
+ )
152
+ close_ticket_parser.add_argument("ticket_id", help="Ticket ID to close")
153
+ close_ticket_parser.add_argument("--comment", help="Closing comment")
154
+
155
+ # Delete ticket
156
+ delete_ticket_parser = tickets_subparsers.add_parser(
157
+ TicketCommands.DELETE.value, help="Delete ticket"
158
+ )
159
+ delete_ticket_parser.add_argument("ticket_id", help="Ticket ID to delete")
160
+ delete_ticket_parser.add_argument(
161
+ "--force", action="store_true", help="Force deletion without confirmation"
162
+ )
163
+ delete_ticket_parser.add_argument(
164
+ "--archive", action="store_true", help="Archive instead of permanent deletion"
165
+ )
166
+
167
+ # Search tickets
168
+ search_tickets_parser = tickets_subparsers.add_parser(
169
+ TicketCommands.SEARCH.value, help="Search tickets"
170
+ )
171
+ search_tickets_parser.add_argument(
172
+ "query", help="Search query (searches title and description)"
173
+ )
174
+ search_tickets_parser.add_argument(
175
+ "-t",
176
+ "--type",
177
+ choices=["task", "bug", "feature", "issue", "epic"],
178
+ help="Filter by ticket type",
179
+ )
180
+ search_tickets_parser.add_argument(
181
+ "--limit", type=int, default=10, help="Maximum number of results (default: 10)"
182
+ )
183
+
184
+ # Comment on ticket
185
+ comment_ticket_parser = tickets_subparsers.add_parser(
186
+ TicketCommands.COMMENT.value, help="Add comment to ticket"
187
+ )
188
+ comment_ticket_parser.add_argument("ticket_id", help="Ticket ID to comment on")
189
+ comment_ticket_parser.add_argument("comment", help="Comment text")
190
+
191
+ # Workflow management
192
+ workflow_ticket_parser = tickets_subparsers.add_parser(
193
+ TicketCommands.WORKFLOW.value, help="Manage ticket workflow"
194
+ )
195
+ workflow_ticket_parser.add_argument("ticket_id", help="Ticket ID")
196
+ workflow_ticket_parser.add_argument(
197
+ "state",
198
+ choices=["open", "in_progress", "review", "testing", "closed"],
199
+ help="New workflow state",
200
+ )
201
+ workflow_ticket_parser.add_argument("--comment", help="Workflow transition comment")
202
+
203
+ return tickets_parser
@@ -1,4 +1,6 @@
1
- #\!/usr/bin/env python3
1
+ from pathlib import Path
2
+
3
+ # \!/usr/bin/env python3
2
4
  """
3
5
  Ticket CLI module for claude-mpm.
4
6
 
@@ -7,7 +9,7 @@ It delegates to the scripts/ticket.py module for implementation.
7
9
  """
8
10
 
9
11
  import sys
10
- from pathlib import Path
12
+
11
13
 
12
14
  def main():
13
15
  """Main entry point for ticket CLI alias."""
@@ -16,8 +18,9 @@ def main():
16
18
  # Try to import from scripts
17
19
  scripts_dir = Path(__file__).parent.parent.parent.parent / "scripts"
18
20
  sys.path.insert(0, str(scripts_dir))
19
-
21
+
20
22
  from ticket import main as ticket_main
23
+
21
24
  return ticket_main()
22
25
  except ImportError:
23
26
  print("Error: Ticket functionality not available")
@@ -27,5 +30,6 @@ def main():
27
30
  print(f"Error running ticket command: {e}")
28
31
  return 1
29
32
 
33
+
30
34
  if __name__ == "__main__":
31
35
  sys.exit(main())
claude_mpm/cli/utils.py CHANGED
@@ -7,7 +7,6 @@ for common CLI operations.
7
7
  """
8
8
 
9
9
  import sys
10
- from pathlib import Path
11
10
  from typing import Optional
12
11
 
13
12
  from ..core.logger import get_logger
@@ -16,19 +15,19 @@ from ..core.logger import get_logger
16
15
  def get_user_input(input_arg: Optional[str], logger) -> str:
17
16
  """
18
17
  Get user input based on command line arguments.
19
-
18
+
20
19
  WHY: This function handles the three ways users can provide input:
21
20
  1. Direct text via -i/--input
22
21
  2. File path via -i/--input
23
22
  3. stdin (for piping)
24
-
23
+
25
24
  DESIGN DECISION: We check if the input is a file path first, then fall back
26
25
  to treating it as direct text. This allows maximum flexibility.
27
-
26
+
28
27
  Args:
29
28
  input_arg: The value of the -i/--input argument
30
29
  logger: Logger instance for output
31
-
30
+
32
31
  Returns:
33
32
  The user input as a string
34
33
  """
@@ -50,64 +49,74 @@ def get_user_input(input_arg: Optional[str], logger) -> str:
50
49
  def get_agent_versions_display() -> Optional[str]:
51
50
  """
52
51
  Get formatted agent versions display as a string.
53
-
52
+
54
53
  WHY: This function provides a single source of truth for agent version
55
54
  information that can be displayed both at startup and on-demand via the
56
55
  /mpm agents command. This ensures consistency in how agent versions are
57
56
  presented to users.
58
-
57
+
59
58
  Returns:
60
59
  Formatted string containing agent version information, or None if failed
61
60
  """
62
61
  try:
63
- from ..services import AgentDeploymentService
64
62
  import os
65
63
  from pathlib import Path
66
-
64
+
65
+ from ..services import AgentDeploymentService
66
+
67
67
  # Determine the user's working directory from environment
68
68
  user_working_dir = None
69
- if 'CLAUDE_MPM_USER_PWD' in os.environ:
70
- user_working_dir = Path(os.environ['CLAUDE_MPM_USER_PWD'])
71
-
69
+ if "CLAUDE_MPM_USER_PWD" in os.environ:
70
+ user_working_dir = Path(os.environ["CLAUDE_MPM_USER_PWD"])
71
+
72
72
  deployment_service = AgentDeploymentService(working_directory=user_working_dir)
73
-
73
+
74
74
  # Get deployed agents
75
75
  verification = deployment_service.verify_deployment()
76
76
  if not verification.get("agents_found"):
77
77
  return None
78
-
78
+
79
79
  output_lines = []
80
80
  output_lines.append("\nDeployed Agent Versions:")
81
81
  output_lines.append("-" * 40)
82
-
82
+
83
83
  # Sort agents by name for consistent display
84
- agents = sorted(verification["agents_found"], key=lambda x: x.get('name', x.get('file', '')))
85
-
84
+ agents = sorted(
85
+ verification["agents_found"], key=lambda x: x.get("name", x.get("file", ""))
86
+ )
87
+
86
88
  for agent in agents:
87
- name = agent.get('name', 'unknown')
88
- version = agent.get('version', 'unknown')
89
+ name = agent.get("name", "unknown")
90
+ version = agent.get("version", "unknown")
89
91
  # Format: name (version)
90
92
  output_lines.append(f" {name:<20} {version}")
91
-
93
+
92
94
  # Add base agent version info
93
95
  try:
94
96
  import json
97
+
95
98
  base_agent_path = deployment_service.base_agent_path
96
99
  if base_agent_path.exists():
97
100
  base_data = json.loads(base_agent_path.read_text())
98
101
  # Parse version the same way as AgentDeploymentService
99
- raw_version = base_data.get('base_version') or base_data.get('version', 0)
102
+ raw_version = base_data.get("base_version") or base_data.get(
103
+ "version", 0
104
+ )
100
105
  base_version_tuple = deployment_service._parse_version(raw_version)
101
- base_version_str = deployment_service._format_version_display(base_version_tuple)
106
+ base_version_str = deployment_service._format_version_display(
107
+ base_version_tuple
108
+ )
102
109
  output_lines.append(f"\n Base Agent Version: {base_version_str}")
103
110
  except:
104
111
  pass
105
-
112
+
106
113
  # Check for agents needing migration
107
114
  if verification.get("agents_needing_migration"):
108
- output_lines.append(f"\n ⚠️ {len(verification['agents_needing_migration'])} agent(s) need migration to semantic versioning")
115
+ output_lines.append(
116
+ f"\n ⚠️ {len(verification['agents_needing_migration'])} agent(s) need migration to semantic versioning"
117
+ )
109
118
  output_lines.append(f" Run 'claude-mpm agents deploy' to update")
110
-
119
+
111
120
  output_lines.append("-" * 40)
112
121
  return "\n".join(output_lines)
113
122
  except Exception as e:
@@ -120,7 +129,7 @@ def get_agent_versions_display() -> Optional[str]:
120
129
  def list_agent_versions_at_startup() -> None:
121
130
  """
122
131
  List deployed agent versions at startup.
123
-
132
+
124
133
  WHY: Users want to see what agents are available when they start a session.
125
134
  This provides immediate feedback about the deployed agent environment.
126
135
  """
@@ -133,47 +142,56 @@ def list_agent_versions_at_startup() -> None:
133
142
  def setup_logging(args) -> object:
134
143
  """
135
144
  Set up logging based on parsed arguments.
136
-
145
+
137
146
  WHY: This centralizes logging setup logic, handling the deprecated --debug flag
138
147
  and the new --logging argument consistently across all commands.
139
-
148
+
140
149
  Args:
141
150
  args: Parsed command line arguments
142
-
151
+
143
152
  Returns:
144
153
  Logger instance
145
154
  """
146
- from ..core.logger import setup_logging as core_setup_logging, get_logger
147
155
  from ..constants import LogLevel
148
-
156
+ from ..core.logger import get_logger
157
+ from ..core.logger import setup_logging as core_setup_logging
158
+
159
+ # Set default logging level if not specified
160
+ if not hasattr(args, "logging") or args.logging is None:
161
+ args.logging = LogLevel.INFO.value
162
+
149
163
  # Handle deprecated --debug flag
150
- if hasattr(args, 'debug') and args.debug and args.logging == LogLevel.INFO.value:
164
+ if hasattr(args, "debug") and args.debug and args.logging == LogLevel.INFO.value:
151
165
  args.logging = LogLevel.DEBUG.value
152
-
166
+
153
167
  # Only setup logging if not OFF
154
168
  if args.logging != LogLevel.OFF.value:
155
- logger = core_setup_logging(level=args.logging, log_dir=args.log_dir)
169
+ logger = core_setup_logging(
170
+ level=args.logging, log_dir=getattr(args, "log_dir", None)
171
+ )
156
172
  else:
157
173
  # Minimal logger for CLI feedback
158
174
  import logging
175
+
159
176
  logger = logging.getLogger("cli")
160
177
  logger.setLevel(logging.WARNING)
161
-
178
+
162
179
  return logger
163
180
 
164
181
 
165
182
  def ensure_directories() -> None:
166
183
  """
167
184
  Ensure required directories exist on first run.
168
-
185
+
169
186
  WHY: Claude-mpm needs certain directories to function properly. Rather than
170
187
  failing when they don't exist, we create them automatically for a better
171
188
  user experience.
172
189
  """
173
190
  try:
174
191
  from ..init import ensure_directories as init_ensure_directories
192
+
175
193
  init_ensure_directories()
176
194
  except Exception:
177
195
  # Continue even if initialization fails
178
196
  # The individual commands will handle missing directories as needed
179
- pass
197
+ pass
@@ -5,11 +5,11 @@ to reduce complexity in the main CLI function.
5
5
  """
6
6
 
7
7
  from .args import ArgumentRegistry
8
- from .commands import CommandRegistry, CommandDefinition, register_standard_commands
8
+ from .commands import CommandDefinition, CommandRegistry, register_standard_commands
9
9
 
10
10
  __all__ = [
11
- 'ArgumentRegistry',
12
- 'CommandRegistry',
13
- 'CommandDefinition',
14
- 'register_standard_commands'
15
- ]
11
+ "ArgumentRegistry",
12
+ "CommandRegistry",
13
+ "CommandDefinition",
14
+ "register_standard_commands",
15
+ ]