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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +2 -2
  3. claude_mpm/__main__.py +3 -2
  4. claude_mpm/agents/__init__.py +85 -79
  5. claude_mpm/agents/agent_loader.py +464 -1003
  6. claude_mpm/agents/agent_loader_integration.py +45 -45
  7. claude_mpm/agents/agents_metadata.py +29 -30
  8. claude_mpm/agents/async_agent_loader.py +156 -138
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/base_agent_loader.py +179 -151
  11. claude_mpm/agents/frontmatter_validator.py +229 -130
  12. claude_mpm/agents/schema/agent_schema.json +1 -1
  13. claude_mpm/agents/system_agent_config.py +213 -147
  14. claude_mpm/agents/templates/__init__.py +13 -13
  15. claude_mpm/agents/templates/code_analyzer.json +2 -2
  16. claude_mpm/agents/templates/data_engineer.json +1 -1
  17. claude_mpm/agents/templates/documentation.json +23 -11
  18. claude_mpm/agents/templates/engineer.json +22 -6
  19. claude_mpm/agents/templates/memory_manager.json +1 -1
  20. claude_mpm/agents/templates/ops.json +2 -2
  21. claude_mpm/agents/templates/project_organizer.json +1 -1
  22. claude_mpm/agents/templates/qa.json +1 -1
  23. claude_mpm/agents/templates/refactoring_engineer.json +222 -0
  24. claude_mpm/agents/templates/research.json +20 -14
  25. claude_mpm/agents/templates/security.json +1 -1
  26. claude_mpm/agents/templates/ticketing.json +2 -2
  27. claude_mpm/agents/templates/version_control.json +1 -1
  28. claude_mpm/agents/templates/web_qa.json +3 -1
  29. claude_mpm/agents/templates/web_ui.json +2 -2
  30. claude_mpm/cli/__init__.py +79 -51
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +20 -20
  33. claude_mpm/cli/commands/agents.py +279 -247
  34. claude_mpm/cli/commands/aggregate.py +138 -157
  35. claude_mpm/cli/commands/cleanup.py +147 -147
  36. claude_mpm/cli/commands/config.py +93 -76
  37. claude_mpm/cli/commands/info.py +17 -16
  38. claude_mpm/cli/commands/mcp.py +140 -905
  39. claude_mpm/cli/commands/mcp_command_router.py +139 -0
  40. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  41. claude_mpm/cli/commands/mcp_install_commands.py +20 -0
  42. claude_mpm/cli/commands/mcp_server_commands.py +175 -0
  43. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  44. claude_mpm/cli/commands/memory.py +239 -203
  45. claude_mpm/cli/commands/monitor.py +330 -86
  46. claude_mpm/cli/commands/run.py +380 -429
  47. claude_mpm/cli/commands/run_config_checker.py +160 -0
  48. claude_mpm/cli/commands/socketio_monitor.py +235 -0
  49. claude_mpm/cli/commands/tickets.py +363 -220
  50. claude_mpm/cli/parser.py +24 -1156
  51. claude_mpm/cli/parsers/__init__.py +29 -0
  52. claude_mpm/cli/parsers/agents_parser.py +136 -0
  53. claude_mpm/cli/parsers/base_parser.py +331 -0
  54. claude_mpm/cli/parsers/config_parser.py +85 -0
  55. claude_mpm/cli/parsers/mcp_parser.py +152 -0
  56. claude_mpm/cli/parsers/memory_parser.py +138 -0
  57. claude_mpm/cli/parsers/monitor_parser.py +124 -0
  58. claude_mpm/cli/parsers/run_parser.py +147 -0
  59. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  60. claude_mpm/cli/ticket_cli.py +7 -3
  61. claude_mpm/cli/utils.py +55 -37
  62. claude_mpm/cli_module/__init__.py +6 -6
  63. claude_mpm/cli_module/args.py +188 -140
  64. claude_mpm/cli_module/commands.py +79 -70
  65. claude_mpm/cli_module/migration_example.py +38 -60
  66. claude_mpm/config/__init__.py +32 -25
  67. claude_mpm/config/agent_config.py +151 -119
  68. claude_mpm/config/experimental_features.py +71 -73
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +35 -18
  72. claude_mpm/core/__init__.py +9 -6
  73. claude_mpm/core/agent_name_normalizer.py +68 -71
  74. claude_mpm/core/agent_registry.py +372 -521
  75. claude_mpm/core/agent_session_manager.py +74 -63
  76. claude_mpm/core/base_service.py +116 -87
  77. claude_mpm/core/cache.py +119 -153
  78. claude_mpm/core/claude_runner.py +425 -1120
  79. claude_mpm/core/config.py +263 -168
  80. claude_mpm/core/config_aliases.py +69 -61
  81. claude_mpm/core/config_constants.py +292 -0
  82. claude_mpm/core/constants.py +57 -99
  83. claude_mpm/core/container.py +211 -178
  84. claude_mpm/core/exceptions.py +233 -89
  85. claude_mpm/core/factories.py +92 -54
  86. claude_mpm/core/framework_loader.py +378 -220
  87. claude_mpm/core/hook_manager.py +198 -83
  88. claude_mpm/core/hook_performance_config.py +136 -0
  89. claude_mpm/core/injectable_service.py +61 -55
  90. claude_mpm/core/interactive_session.py +165 -155
  91. claude_mpm/core/interfaces.py +221 -195
  92. claude_mpm/core/lazy.py +96 -96
  93. claude_mpm/core/logger.py +133 -107
  94. claude_mpm/core/logging_config.py +185 -157
  95. claude_mpm/core/minimal_framework_loader.py +20 -15
  96. claude_mpm/core/mixins.py +30 -29
  97. claude_mpm/core/oneshot_session.py +215 -181
  98. claude_mpm/core/optimized_agent_loader.py +134 -138
  99. claude_mpm/core/optimized_startup.py +159 -157
  100. claude_mpm/core/pm_hook_interceptor.py +85 -72
  101. claude_mpm/core/service_registry.py +103 -101
  102. claude_mpm/core/session_manager.py +97 -87
  103. claude_mpm/core/socketio_pool.py +212 -158
  104. claude_mpm/core/tool_access_control.py +58 -51
  105. claude_mpm/core/types.py +46 -24
  106. claude_mpm/core/typing_utils.py +166 -82
  107. claude_mpm/core/unified_agent_registry.py +721 -0
  108. claude_mpm/core/unified_config.py +550 -0
  109. claude_mpm/core/unified_paths.py +549 -0
  110. claude_mpm/dashboard/index.html +1 -1
  111. claude_mpm/dashboard/open_dashboard.py +51 -17
  112. claude_mpm/dashboard/static/built/components/agent-inference.js +2 -0
  113. claude_mpm/dashboard/static/built/components/event-processor.js +2 -0
  114. claude_mpm/dashboard/static/built/components/event-viewer.js +2 -0
  115. claude_mpm/dashboard/static/built/components/export-manager.js +2 -0
  116. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +2 -0
  117. claude_mpm/dashboard/static/built/components/hud-library-loader.js +2 -0
  118. claude_mpm/dashboard/static/built/components/hud-manager.js +2 -0
  119. claude_mpm/dashboard/static/built/components/hud-visualizer.js +2 -0
  120. claude_mpm/dashboard/static/built/components/module-viewer.js +2 -0
  121. claude_mpm/dashboard/static/built/components/session-manager.js +2 -0
  122. claude_mpm/dashboard/static/built/components/socket-manager.js +2 -0
  123. claude_mpm/dashboard/static/built/components/ui-state-manager.js +2 -0
  124. claude_mpm/dashboard/static/built/components/working-directory.js +2 -0
  125. claude_mpm/dashboard/static/built/dashboard.js +2 -0
  126. claude_mpm/dashboard/static/built/socket-client.js +2 -0
  127. claude_mpm/dashboard/static/css/dashboard.css +27 -8
  128. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  129. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  130. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  131. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  132. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  133. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  134. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  135. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  136. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  137. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  138. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  139. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  140. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  141. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  142. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  143. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  144. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  145. claude_mpm/dashboard/static/js/components/event-viewer.js +93 -72
  146. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  147. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +110 -96
  148. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  149. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  150. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  151. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  152. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  153. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  154. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  155. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  156. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  157. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  158. claude_mpm/dashboard/static/js/socket-client.js +133 -53
  159. claude_mpm/dashboard/templates/index.html +40 -50
  160. claude_mpm/experimental/cli_enhancements.py +60 -58
  161. claude_mpm/generators/__init__.py +1 -1
  162. claude_mpm/generators/agent_profile_generator.py +75 -65
  163. claude_mpm/hooks/__init__.py +1 -1
  164. claude_mpm/hooks/base_hook.py +33 -28
  165. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  166. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  167. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  168. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  169. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  170. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  171. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  172. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  173. claude_mpm/hooks/memory_integration_hook.py +140 -100
  174. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  175. claude_mpm/hooks/validation_hooks.py +57 -49
  176. claude_mpm/init.py +145 -121
  177. claude_mpm/models/__init__.py +9 -9
  178. claude_mpm/models/agent_definition.py +33 -23
  179. claude_mpm/models/agent_session.py +228 -200
  180. claude_mpm/scripts/__init__.py +1 -1
  181. claude_mpm/scripts/socketio_daemon.py +192 -75
  182. claude_mpm/scripts/socketio_server_manager.py +328 -0
  183. claude_mpm/scripts/start_activity_logging.py +25 -22
  184. claude_mpm/services/__init__.py +68 -43
  185. claude_mpm/services/agent_capabilities_service.py +271 -0
  186. claude_mpm/services/agents/__init__.py +23 -32
  187. claude_mpm/services/agents/deployment/__init__.py +3 -3
  188. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  189. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  190. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  191. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  192. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  193. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  194. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  195. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  196. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  197. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  198. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  199. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  200. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  201. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  202. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  203. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  204. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  205. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  206. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  207. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  208. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  209. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  210. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  211. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  212. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  213. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  214. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  215. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  216. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  217. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  218. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  219. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  220. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  221. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  222. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  223. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  224. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  225. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  226. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  227. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  228. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  229. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  230. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  231. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  232. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  233. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  234. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  235. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  236. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  237. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  238. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  239. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  240. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  241. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  242. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  243. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  244. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  245. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  246. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  247. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  248. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  249. claude_mpm/services/agents/loading/__init__.py +2 -2
  250. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  251. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  252. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  253. claude_mpm/services/agents/management/__init__.py +2 -2
  254. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  255. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  256. claude_mpm/services/agents/memory/__init__.py +9 -6
  257. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  258. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  259. claude_mpm/services/agents/memory/analyzer.py +430 -0
  260. claude_mpm/services/agents/memory/content_manager.py +376 -0
  261. claude_mpm/services/agents/memory/template_generator.py +468 -0
  262. claude_mpm/services/agents/registry/__init__.py +7 -10
  263. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  264. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  265. claude_mpm/services/async_session_logger.py +187 -153
  266. claude_mpm/services/claude_session_logger.py +87 -72
  267. claude_mpm/services/command_handler_service.py +217 -0
  268. claude_mpm/services/communication/__init__.py +3 -2
  269. claude_mpm/services/core/__init__.py +50 -97
  270. claude_mpm/services/core/base.py +60 -53
  271. claude_mpm/services/core/interfaces/__init__.py +188 -0
  272. claude_mpm/services/core/interfaces/agent.py +351 -0
  273. claude_mpm/services/core/interfaces/communication.py +343 -0
  274. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  275. claude_mpm/services/core/interfaces/service.py +434 -0
  276. claude_mpm/services/core/interfaces.py +19 -944
  277. claude_mpm/services/event_aggregator.py +208 -170
  278. claude_mpm/services/exceptions.py +387 -308
  279. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  280. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  281. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  282. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  283. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  284. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  285. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  286. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  287. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  288. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  289. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  290. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  291. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  292. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  293. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  294. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  295. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  296. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  297. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  298. claude_mpm/services/hook_service.py +106 -114
  299. claude_mpm/services/infrastructure/__init__.py +7 -5
  300. claude_mpm/services/infrastructure/context_preservation.py +233 -199
  301. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  302. claude_mpm/services/infrastructure/logging.py +83 -76
  303. claude_mpm/services/infrastructure/monitoring.py +547 -404
  304. claude_mpm/services/mcp_gateway/__init__.py +30 -13
  305. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  306. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  307. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  308. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  309. claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
  310. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  311. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  312. claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
  313. claude_mpm/services/mcp_gateway/main.py +287 -137
  314. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  315. claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
  316. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  317. claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
  318. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
  319. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  320. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  321. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  322. claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
  323. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  324. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  325. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  326. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  327. claude_mpm/services/memory/__init__.py +2 -2
  328. claude_mpm/services/memory/builder.py +451 -362
  329. claude_mpm/services/memory/cache/__init__.py +2 -2
  330. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  331. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  332. claude_mpm/services/memory/indexed_memory.py +195 -193
  333. claude_mpm/services/memory/optimizer.py +267 -234
  334. claude_mpm/services/memory/router.py +571 -263
  335. claude_mpm/services/memory_hook_service.py +237 -0
  336. claude_mpm/services/port_manager.py +575 -0
  337. claude_mpm/services/project/__init__.py +3 -3
  338. claude_mpm/services/project/analyzer.py +451 -305
  339. claude_mpm/services/project/registry.py +262 -240
  340. claude_mpm/services/recovery_manager.py +287 -231
  341. claude_mpm/services/response_tracker.py +87 -67
  342. claude_mpm/services/runner_configuration_service.py +587 -0
  343. claude_mpm/services/session_management_service.py +304 -0
  344. claude_mpm/services/socketio/__init__.py +4 -4
  345. claude_mpm/services/socketio/client_proxy.py +174 -0
  346. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  347. claude_mpm/services/socketio/handlers/base.py +44 -30
  348. claude_mpm/services/socketio/handlers/connection.py +166 -64
  349. claude_mpm/services/socketio/handlers/file.py +123 -108
  350. claude_mpm/services/socketio/handlers/git.py +607 -373
  351. claude_mpm/services/socketio/handlers/hook.py +185 -0
  352. claude_mpm/services/socketio/handlers/memory.py +4 -4
  353. claude_mpm/services/socketio/handlers/project.py +4 -4
  354. claude_mpm/services/socketio/handlers/registry.py +53 -38
  355. claude_mpm/services/socketio/server/__init__.py +18 -0
  356. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  357. claude_mpm/services/socketio/server/core.py +399 -0
  358. claude_mpm/services/socketio/server/main.py +323 -0
  359. claude_mpm/services/socketio_client_manager.py +160 -133
  360. claude_mpm/services/socketio_server.py +36 -1885
  361. claude_mpm/services/subprocess_launcher_service.py +316 -0
  362. claude_mpm/services/system_instructions_service.py +258 -0
  363. claude_mpm/services/ticket_manager.py +19 -533
  364. claude_mpm/services/utility_service.py +285 -0
  365. claude_mpm/services/version_control/__init__.py +18 -21
  366. claude_mpm/services/version_control/branch_strategy.py +20 -10
  367. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  368. claude_mpm/services/version_control/git_operations.py +52 -21
  369. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  370. claude_mpm/services/version_control/version_parser.py +145 -125
  371. claude_mpm/services/version_service.py +270 -0
  372. claude_mpm/storage/__init__.py +2 -2
  373. claude_mpm/storage/state_storage.py +177 -181
  374. claude_mpm/ticket_wrapper.py +2 -2
  375. claude_mpm/utils/__init__.py +2 -2
  376. claude_mpm/utils/agent_dependency_loader.py +453 -243
  377. claude_mpm/utils/config_manager.py +157 -118
  378. claude_mpm/utils/console.py +1 -1
  379. claude_mpm/utils/dependency_cache.py +102 -107
  380. claude_mpm/utils/dependency_manager.py +52 -47
  381. claude_mpm/utils/dependency_strategies.py +131 -96
  382. claude_mpm/utils/environment_context.py +110 -102
  383. claude_mpm/utils/error_handler.py +75 -55
  384. claude_mpm/utils/file_utils.py +80 -67
  385. claude_mpm/utils/framework_detection.py +12 -11
  386. claude_mpm/utils/import_migration_example.py +12 -60
  387. claude_mpm/utils/imports.py +48 -45
  388. claude_mpm/utils/path_operations.py +100 -93
  389. claude_mpm/utils/robust_installer.py +172 -164
  390. claude_mpm/utils/session_logging.py +30 -23
  391. claude_mpm/utils/subprocess_utils.py +99 -61
  392. claude_mpm/validation/__init__.py +1 -1
  393. claude_mpm/validation/agent_validator.py +151 -111
  394. claude_mpm/validation/frontmatter_validator.py +92 -71
  395. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/METADATA +90 -22
  396. claude_mpm-4.0.4.dist-info/RECORD +417 -0
  397. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/entry_points.txt +1 -0
  398. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/licenses/LICENSE +1 -1
  399. claude_mpm/cli/commands/run_guarded.py +0 -511
  400. claude_mpm/config/memory_guardian_config.py +0 -325
  401. claude_mpm/config/memory_guardian_yaml.py +0 -335
  402. claude_mpm/core/config_paths.py +0 -150
  403. claude_mpm/core/memory_aware_runner.py +0 -353
  404. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  405. claude_mpm/deployment_paths.py +0 -261
  406. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  407. claude_mpm/models/state_models.py +0 -433
  408. claude_mpm/services/agent/__init__.py +0 -24
  409. claude_mpm/services/agent/deployment.py +0 -2548
  410. claude_mpm/services/agent/management.py +0 -598
  411. claude_mpm/services/agent/registry.py +0 -813
  412. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  413. claude_mpm/services/communication/socketio.py +0 -1935
  414. claude_mpm/services/communication/websocket.py +0 -479
  415. claude_mpm/services/framework_claude_md_generator.py +0 -624
  416. claude_mpm/services/health_monitor.py +0 -893
  417. claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
  418. claude_mpm/services/infrastructure/health_monitor.py +0 -775
  419. claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
  420. claude_mpm/services/infrastructure/memory_guardian.py +0 -944
  421. claude_mpm/services/infrastructure/restart_protection.py +0 -642
  422. claude_mpm/services/infrastructure/state_manager.py +0 -774
  423. claude_mpm/services/mcp_gateway/manager.py +0 -334
  424. claude_mpm/services/optimized_hook_service.py +0 -542
  425. claude_mpm/services/project_analyzer.py +0 -864
  426. claude_mpm/services/project_registry.py +0 -608
  427. claude_mpm/services/standalone_socketio_server.py +0 -1300
  428. claude_mpm/services/ticket_manager_di.py +0 -318
  429. claude_mpm/services/ticketing_service_original.py +0 -510
  430. claude_mpm/utils/paths.py +0 -395
  431. claude_mpm/utils/platform_memory.py +0 -524
  432. claude_mpm-3.9.11.dist-info/RECORD +0 -306
  433. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/WHEEL +0 -0
  434. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,29 @@
1
+ """
2
+ CLI parsers package for claude-mpm.
3
+
4
+ This package contains modular parser components that were extracted from the
5
+ monolithic parser.py file to improve maintainability and organization.
6
+
7
+ WHY: The original parser.py was 1,166 lines with a single 961-line function.
8
+ Breaking it into focused modules makes it easier to maintain and test.
9
+
10
+ DESIGN DECISION: Each parser module handles a specific command domain:
11
+ - base_parser.py: Common arguments and main parser setup
12
+ - run_parser.py: Run command arguments
13
+ - agent_parser.py: Agent management commands
14
+ - memory_parser.py: Memory management commands
15
+ - tickets_parser.py: Ticket management commands
16
+ - config_parser.py: Configuration commands
17
+ - monitor_parser.py: Monitoring commands
18
+ - mcp_parser.py: MCP Gateway commands
19
+ """
20
+
21
+ from .base_parser import add_common_arguments, create_parser, preprocess_args
22
+ from .run_parser import add_run_arguments
23
+
24
+ __all__ = [
25
+ "create_parser",
26
+ "add_common_arguments",
27
+ "add_run_arguments",
28
+ "preprocess_args",
29
+ ]
@@ -0,0 +1,136 @@
1
+ from pathlib import Path
2
+
3
+ """
4
+ Agents command parser for claude-mpm CLI.
5
+
6
+ WHY: This module contains all arguments specific to agent management commands,
7
+ extracted from the monolithic parser.py for better organization.
8
+
9
+ DESIGN DECISION: Agent commands are complex with multiple subcommands for
10
+ deployment, listing, validation, etc., warranting their own module.
11
+ """
12
+
13
+ import argparse
14
+
15
+ from ...constants import AgentCommands, CLICommands
16
+ from .base_parser import add_common_arguments
17
+
18
+
19
+ def add_agents_subparser(subparsers) -> argparse.ArgumentParser:
20
+ """
21
+ Add the agents subparser with all agent management commands.
22
+
23
+ WHY: Agent management has multiple complex subcommands (list, deploy, validate, etc.)
24
+ that need their own argument structures.
25
+
26
+ Args:
27
+ subparsers: The subparsers object from the main parser
28
+
29
+ Returns:
30
+ The configured agents subparser
31
+ """
32
+ # Agents command with subcommands
33
+ agents_parser = subparsers.add_parser(
34
+ CLICommands.AGENTS.value, help="Manage agents and deployment"
35
+ )
36
+ add_common_arguments(agents_parser)
37
+
38
+ agents_subparsers = agents_parser.add_subparsers(
39
+ dest="agents_command", help="Agent commands", metavar="SUBCOMMAND"
40
+ )
41
+
42
+ # List agents
43
+ list_agents_parser = agents_subparsers.add_parser(
44
+ AgentCommands.LIST.value, help="List available agents"
45
+ )
46
+ list_agents_parser.add_argument(
47
+ "--system", action="store_true", help="List system agents"
48
+ )
49
+ list_agents_parser.add_argument(
50
+ "--deployed", action="store_true", help="List deployed agents"
51
+ )
52
+ list_agents_parser.add_argument(
53
+ "--by-tier",
54
+ action="store_true",
55
+ help="List agents grouped by precedence tier (PROJECT > USER > SYSTEM)",
56
+ )
57
+
58
+ # View agent details
59
+ view_agent_parser = agents_subparsers.add_parser(
60
+ AgentCommands.VIEW.value,
61
+ help="View detailed information about a specific agent",
62
+ )
63
+ view_agent_parser.add_argument("agent_name", help="Name of the agent to view")
64
+ view_agent_parser.add_argument(
65
+ "--show-dependencies", action="store_true", help="Show agent dependencies"
66
+ )
67
+ view_agent_parser.add_argument(
68
+ "--show-config", action="store_true", help="Show agent configuration"
69
+ )
70
+
71
+ # Deploy agents
72
+ deploy_agents_parser = agents_subparsers.add_parser(
73
+ AgentCommands.DEPLOY.value, help="Deploy agents to target directory"
74
+ )
75
+ deploy_agents_parser.add_argument(
76
+ "--target", type=Path, help="Target directory (default: .claude/)"
77
+ )
78
+ deploy_agents_parser.add_argument(
79
+ "--agents", nargs="*", help="Specific agents to deploy (default: all)"
80
+ )
81
+ deploy_agents_parser.add_argument(
82
+ "--force", action="store_true", help="Force deployment even if target exists"
83
+ )
84
+ deploy_agents_parser.add_argument(
85
+ "--dry-run",
86
+ action="store_true",
87
+ help="Show what would be deployed without actually deploying",
88
+ )
89
+
90
+ # Validate agents
91
+ validate_agents_parser = agents_subparsers.add_parser(
92
+ AgentCommands.FIX.value, help="Validate agent configurations"
93
+ )
94
+ validate_agents_parser.add_argument(
95
+ "--agents", nargs="*", help="Specific agents to validate (default: all)"
96
+ )
97
+ validate_agents_parser.add_argument(
98
+ "--strict", action="store_true", help="Use strict validation rules"
99
+ )
100
+
101
+ # Clean agents
102
+ clean_agents_parser = agents_subparsers.add_parser(
103
+ AgentCommands.CLEAN.value, help="Remove deployed system agents"
104
+ )
105
+ clean_agents_parser.add_argument(
106
+ "--target", type=Path, help="Target directory (default: .claude/)"
107
+ )
108
+
109
+ # Dependencies management
110
+ deps_list_parser = agents_subparsers.add_parser(
111
+ "deps-list", help="List agent dependencies and their status"
112
+ )
113
+ deps_list_parser.add_argument(
114
+ "--agents", nargs="*", help="Specific agents to check (default: all)"
115
+ )
116
+ deps_list_parser.add_argument(
117
+ "--missing-only", action="store_true", help="Show only missing dependencies"
118
+ )
119
+ deps_list_parser.add_argument(
120
+ "--format",
121
+ choices=["text", "pip", "json"],
122
+ default="text",
123
+ help="Output format for dependency list",
124
+ )
125
+
126
+ deps_fix_parser = agents_subparsers.add_parser(
127
+ "deps-fix", help="Fix missing agent dependencies with robust retry logic"
128
+ )
129
+ deps_fix_parser.add_argument(
130
+ "--max-retries",
131
+ type=int,
132
+ default=3,
133
+ help="Maximum retry attempts per package (default: 3)",
134
+ )
135
+
136
+ return agents_parser
@@ -0,0 +1,331 @@
1
+ from pathlib import Path
2
+
3
+ """
4
+ Base parser module for claude-mpm CLI.
5
+
6
+ WHY: This module contains the main parser factory and common argument definitions
7
+ that are shared across all commands. Extracted from the monolithic parser.py.
8
+
9
+ DESIGN DECISION: Common arguments are defined once and reused to ensure consistency
10
+ and reduce duplication across command parsers.
11
+ """
12
+
13
+ import argparse
14
+ from typing import List, Optional
15
+
16
+ from ...constants import CLICommands, CLIPrefix, LogLevel
17
+
18
+
19
+ def add_common_arguments(parser: argparse.ArgumentParser, version: str = None) -> None:
20
+ """
21
+ Add common arguments that apply to all commands.
22
+
23
+ WHY: These arguments are needed across multiple commands, so we centralize them
24
+ to ensure consistency and avoid duplication.
25
+
26
+ Args:
27
+ parser: The argument parser to add arguments to
28
+ version: Version string to display (only needed for main parser)
29
+ """
30
+ # Version - only add to main parser, not subparsers
31
+ if version is not None:
32
+ parser.add_argument(
33
+ "--version", action="version", version=f"%(prog)s {version}"
34
+ )
35
+
36
+ # Logging arguments
37
+ logging_group = parser.add_argument_group("logging options")
38
+ logging_group.add_argument(
39
+ "-d",
40
+ "--debug",
41
+ action="store_true",
42
+ help="Enable debug logging (deprecated, use --logging DEBUG)",
43
+ )
44
+ logging_group.add_argument(
45
+ "-v",
46
+ "--verbose",
47
+ action="store_true",
48
+ help="Enable verbose logging (deprecated, use --logging INFO)",
49
+ )
50
+ logging_group.add_argument(
51
+ "-q",
52
+ "--quiet",
53
+ action="store_true",
54
+ help="Suppress all output except errors (deprecated, use --logging ERROR)",
55
+ )
56
+ logging_group.add_argument(
57
+ "--logging",
58
+ choices=[level.value for level in LogLevel],
59
+ help="Set logging level (overrides -d, -v, -q flags)",
60
+ )
61
+
62
+ # Configuration arguments
63
+ config_group = parser.add_argument_group("configuration options")
64
+ config_group.add_argument("--config", type=Path, help="Path to configuration file")
65
+ config_group.add_argument(
66
+ "--project-dir", type=Path, help="Project directory (overrides auto-detection)"
67
+ )
68
+
69
+
70
+ def create_main_parser(
71
+ prog_name: str = "claude-mpm", version: str = "0.0.0"
72
+ ) -> argparse.ArgumentParser:
73
+ """
74
+ Create the main argument parser with basic setup.
75
+
76
+ WHY: This creates the foundation parser that other modules will extend
77
+ with their specific subcommands and arguments.
78
+
79
+ Args:
80
+ prog_name: The program name to use
81
+ version: The version string to display
82
+
83
+ Returns:
84
+ Configured ArgumentParser instance ready for subparser addition
85
+ """
86
+ # Main parser
87
+ parser = argparse.ArgumentParser(
88
+ prog=prog_name,
89
+ description=f"Claude Multi-Agent Project Manager v{version} - Orchestrate Claude with agent delegation and ticket tracking",
90
+ epilog="By default, runs an orchestrated Claude session. Use 'claude-mpm' for interactive mode or 'claude-mpm -i \"prompt\"' for non-interactive mode.\n\nTo pass arguments to Claude CLI, use -- separator: claude-mpm run -- --model sonnet --temperature 0.1",
91
+ formatter_class=argparse.RawDescriptionHelpFormatter,
92
+ )
93
+
94
+ # Add common arguments to main parser with version
95
+ add_common_arguments(parser, version=version)
96
+
97
+ return parser
98
+
99
+
100
+ def add_top_level_run_arguments(parser: argparse.ArgumentParser) -> None:
101
+ """
102
+ Add run-specific arguments at top level for backward compatibility.
103
+
104
+ WHY: This maintains backward compatibility - users can run `claude-mpm -i "prompt"`
105
+ without specifying the 'run' command.
106
+
107
+ Args:
108
+ parser: The argument parser to add arguments to
109
+ """
110
+ # Add run-specific arguments at top level for default behavior
111
+ # NOTE: We don't add claude_args here because REMAINDER interferes with subcommands
112
+ run_group = parser.add_argument_group("run options (when no command specified)")
113
+
114
+ run_group.add_argument(
115
+ "--no-hooks",
116
+ action="store_true",
117
+ help="Disable hook service (runs without hooks)",
118
+ )
119
+ run_group.add_argument(
120
+ "--no-tickets", action="store_true", help="Disable automatic ticket creation"
121
+ )
122
+ run_group.add_argument(
123
+ "--intercept-commands",
124
+ action="store_true",
125
+ help="Enable command interception in interactive mode (intercepts /mpm: commands)",
126
+ )
127
+ run_group.add_argument(
128
+ "--no-native-agents",
129
+ action="store_true",
130
+ help="Disable deployment of Claude Code native agents",
131
+ )
132
+ run_group.add_argument(
133
+ "--launch-method",
134
+ choices=["exec", "subprocess"],
135
+ default="exec",
136
+ help="Method to launch Claude: exec (replace process) or subprocess (child process)",
137
+ )
138
+ # Monitor options - consolidated monitoring and management interface
139
+ run_group.add_argument(
140
+ "--monitor",
141
+ action="store_true",
142
+ help="Enable monitoring and management interface with WebSocket server and dashboard (default port: 8765)",
143
+ )
144
+ run_group.add_argument(
145
+ "--websocket-port",
146
+ type=int,
147
+ default=8765,
148
+ help="WebSocket server port (default: 8765)",
149
+ )
150
+ run_group.add_argument(
151
+ "--resume",
152
+ type=str,
153
+ nargs="?",
154
+ const="last",
155
+ help="Resume a session (last session if no ID specified, or specific session ID)",
156
+ )
157
+ run_group.add_argument(
158
+ "--force",
159
+ action="store_true",
160
+ help="Force operations even with warnings (e.g., large .claude.json file)",
161
+ )
162
+
163
+ # Dependency checking options (for backward compatibility at top level)
164
+ dep_group_top = parser.add_argument_group(
165
+ "dependency options (when no command specified)"
166
+ )
167
+ dep_group_top.add_argument(
168
+ "--no-check-dependencies",
169
+ action="store_false",
170
+ dest="check_dependencies",
171
+ help="Skip agent dependency checking at startup",
172
+ )
173
+ dep_group_top.add_argument(
174
+ "--force-check-dependencies",
175
+ action="store_true",
176
+ help="Force dependency checking even if cached results exist",
177
+ )
178
+ dep_group_top.add_argument(
179
+ "--no-prompt",
180
+ action="store_true",
181
+ help="Never prompt for dependency installation (non-interactive mode)",
182
+ )
183
+ dep_group_top.add_argument(
184
+ "--force-prompt",
185
+ action="store_true",
186
+ help="Force interactive prompting even in non-TTY environments (use with caution)",
187
+ )
188
+
189
+ # Input/output options
190
+ io_group = parser.add_argument_group(
191
+ "input/output options (when no command specified)"
192
+ )
193
+ io_group.add_argument(
194
+ "-i",
195
+ "--input",
196
+ type=str,
197
+ help="Input text or file path (for non-interactive mode)",
198
+ )
199
+ io_group.add_argument(
200
+ "--non-interactive",
201
+ action="store_true",
202
+ help="Run in non-interactive mode (read from stdin or --input)",
203
+ )
204
+
205
+
206
+ def create_parser(
207
+ prog_name: str = "claude-mpm", version: str = "0.0.0"
208
+ ) -> argparse.ArgumentParser:
209
+ """
210
+ Create the main argument parser with all subcommands.
211
+
212
+ WHY: This factory function creates a complete parser with all commands and their
213
+ arguments. It's the single entry point for creating the CLI parser, ensuring
214
+ consistency across the application.
215
+
216
+ DESIGN DECISION: We use subparsers for commands to provide a clean, git-like
217
+ interface while maintaining backward compatibility with the original CLI.
218
+
219
+ Args:
220
+ prog_name: The program name to use
221
+ version: The version string to display
222
+
223
+ Returns:
224
+ Configured ArgumentParser instance
225
+ """
226
+ # Create main parser
227
+ parser = create_main_parser(prog_name, version)
228
+
229
+ # Add top-level run arguments for backward compatibility
230
+ add_top_level_run_arguments(parser)
231
+
232
+ # Create subparsers for commands
233
+ subparsers = parser.add_subparsers(
234
+ dest="command", help="Available commands", metavar="COMMAND"
235
+ )
236
+
237
+ # Import and add core subparsers one by one to avoid issues
238
+ try:
239
+ from .run_parser import add_run_subparser
240
+
241
+ add_run_subparser(subparsers)
242
+ except ImportError:
243
+ pass
244
+
245
+ try:
246
+ from .tickets_parser import add_tickets_subparser
247
+
248
+ add_tickets_subparser(subparsers)
249
+ except ImportError:
250
+ pass
251
+
252
+ try:
253
+ from .agents_parser import add_agents_subparser
254
+
255
+ add_agents_subparser(subparsers)
256
+ except ImportError:
257
+ pass
258
+
259
+ try:
260
+ from .memory_parser import add_memory_subparser
261
+
262
+ add_memory_subparser(subparsers)
263
+ except ImportError:
264
+ pass
265
+
266
+ try:
267
+ from .config_parser import add_config_subparser
268
+
269
+ add_config_subparser(subparsers)
270
+ except ImportError:
271
+ pass
272
+
273
+ try:
274
+ from .monitor_parser import add_monitor_subparser
275
+
276
+ add_monitor_subparser(subparsers)
277
+ except ImportError:
278
+ pass
279
+
280
+ try:
281
+ from .mcp_parser import add_mcp_subparser
282
+
283
+ add_mcp_subparser(subparsers)
284
+ except ImportError:
285
+ pass
286
+
287
+ # Import and add additional command parsers from commands module
288
+ try:
289
+ from ..commands.aggregate import add_aggregate_parser
290
+
291
+ add_aggregate_parser(subparsers)
292
+
293
+ from ..commands.cleanup import add_cleanup_parser
294
+
295
+ add_cleanup_parser(subparsers)
296
+ except ImportError:
297
+ # Commands module may not be available during testing or refactoring
298
+ pass
299
+
300
+ return parser
301
+
302
+
303
+ def preprocess_args(argv: Optional[List[str]] = None) -> List[str]:
304
+ """
305
+ Preprocess arguments to handle --mpm: prefix commands.
306
+
307
+ WHY: We support both --mpm:command and regular command syntax for flexibility
308
+ and backward compatibility. This function normalizes the input.
309
+
310
+ Args:
311
+ argv: List of command line arguments, or None to use sys.argv[1:]
312
+
313
+ Returns:
314
+ Processed list of arguments with prefixes removed
315
+ """
316
+ import sys
317
+
318
+ if argv is None:
319
+ argv = sys.argv[1:]
320
+
321
+ # Convert --mpm:command to command for argparse compatibility
322
+ processed_args = []
323
+ for arg in argv:
324
+ if arg.startswith(CLIPrefix.MPM.value):
325
+ # Extract command after prefix
326
+ command = arg[len(CLIPrefix.MPM.value) :]
327
+ processed_args.append(command)
328
+ else:
329
+ processed_args.append(arg)
330
+
331
+ return processed_args
@@ -0,0 +1,85 @@
1
+ from pathlib import Path
2
+
3
+ """
4
+ Config command parser for claude-mpm CLI.
5
+
6
+ WHY: This module contains all arguments specific to configuration management,
7
+ extracted from the monolithic parser.py for better organization.
8
+
9
+ DESIGN DECISION: Configuration commands handle validation and management
10
+ of claude-mpm settings and warrant their own module.
11
+ """
12
+
13
+ import argparse
14
+
15
+ from ...constants import CLICommands, ConfigCommands
16
+ from .base_parser import add_common_arguments
17
+
18
+
19
+ def add_config_subparser(subparsers) -> argparse.ArgumentParser:
20
+ """
21
+ Add the config subparser with all configuration management commands.
22
+
23
+ WHY: Configuration management has multiple subcommands for validation,
24
+ viewing, and editing that need their own argument structures.
25
+
26
+ Args:
27
+ subparsers: The subparsers object from the main parser
28
+
29
+ Returns:
30
+ The configured config subparser
31
+ """
32
+ # Config command with subcommands
33
+ config_parser = subparsers.add_parser(
34
+ CLICommands.CONFIG.value, help="Validate and manage configuration"
35
+ )
36
+ add_common_arguments(config_parser)
37
+
38
+ config_subparsers = config_parser.add_subparsers(
39
+ dest="config_command", help="Config commands", metavar="SUBCOMMAND"
40
+ )
41
+
42
+ # Validate config
43
+ validate_config_parser = config_subparsers.add_parser(
44
+ ConfigCommands.VALIDATE.value, help="Validate configuration files"
45
+ )
46
+ validate_config_parser.add_argument(
47
+ "--config-file",
48
+ type=Path,
49
+ help="Specific config file to validate (default: all)",
50
+ )
51
+ validate_config_parser.add_argument(
52
+ "--strict", action="store_true", help="Use strict validation rules"
53
+ )
54
+ validate_config_parser.add_argument(
55
+ "--fix",
56
+ action="store_true",
57
+ help="Attempt to fix validation errors automatically",
58
+ )
59
+
60
+ # View config
61
+ view_config_parser = config_subparsers.add_parser(
62
+ ConfigCommands.VIEW.value, help="View current configuration"
63
+ )
64
+ view_config_parser.add_argument(
65
+ "--section", help="Specific configuration section to view"
66
+ )
67
+ view_config_parser.add_argument(
68
+ "--format",
69
+ choices=["yaml", "json", "table"],
70
+ default="yaml",
71
+ help="Output format (default: yaml)",
72
+ )
73
+ view_config_parser.add_argument(
74
+ "--show-defaults", action="store_true", help="Include default values in output"
75
+ )
76
+
77
+ # Status config
78
+ status_config_parser = config_subparsers.add_parser(
79
+ ConfigCommands.STATUS.value, help="Show configuration status"
80
+ )
81
+ status_config_parser.add_argument(
82
+ "--verbose", action="store_true", help="Show detailed status information"
83
+ )
84
+
85
+ return config_parser