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
@@ -0,0 +1,152 @@
1
+ from pathlib import Path
2
+
3
+ """
4
+ MCP command parser for claude-mpm CLI.
5
+
6
+ WHY: This module contains all arguments specific to MCP Gateway management,
7
+ extracted from the monolithic parser.py for better organization.
8
+
9
+ DESIGN DECISION: MCP commands handle Model Context Protocol Gateway server
10
+ and tool management with complex subcommand structures.
11
+ """
12
+
13
+ import argparse
14
+
15
+ from ...constants import CLICommands, MCPCommands
16
+ from .base_parser import add_common_arguments
17
+
18
+
19
+ def add_mcp_subparser(subparsers) -> argparse.ArgumentParser:
20
+ """
21
+ Add the MCP subparser with all MCP Gateway management commands.
22
+
23
+ WHY: MCP management has multiple complex subcommands for server management,
24
+ tool registration, and configuration that need their own structures.
25
+
26
+ Args:
27
+ subparsers: The subparsers object from the main parser
28
+
29
+ Returns:
30
+ The configured MCP subparser
31
+ """
32
+ # MCP command with subcommands
33
+ mcp_parser = subparsers.add_parser(
34
+ CLICommands.MCP.value, help="Manage MCP Gateway server and tools"
35
+ )
36
+ add_common_arguments(mcp_parser)
37
+
38
+ mcp_subparsers = mcp_parser.add_subparsers(
39
+ dest="mcp_command", help="MCP commands", metavar="SUBCOMMAND"
40
+ )
41
+
42
+ # Install MCP Gateway
43
+ install_mcp_parser = mcp_subparsers.add_parser(
44
+ MCPCommands.INSTALL.value, help="Install and configure MCP Gateway"
45
+ )
46
+ install_mcp_parser.add_argument(
47
+ "--force", action="store_true", help="Force overwrite existing configuration"
48
+ )
49
+
50
+ # Start MCP server
51
+ start_mcp_parser = mcp_subparsers.add_parser(
52
+ MCPCommands.START.value, help="Start the MCP Gateway server"
53
+ )
54
+ start_mcp_parser.add_argument(
55
+ "--mode",
56
+ choices=["stdio", "standalone"],
57
+ default="stdio",
58
+ help="Server mode: stdio for Claude integration, standalone for testing (default: stdio)",
59
+ )
60
+ start_mcp_parser.add_argument(
61
+ "--port",
62
+ type=int,
63
+ default=8766,
64
+ help="Port for standalone mode (default: 8766)",
65
+ )
66
+ start_mcp_parser.add_argument(
67
+ "--config-file", type=Path, help="Path to MCP configuration file"
68
+ )
69
+ start_mcp_parser.add_argument(
70
+ "--test", action="store_true", help="Run in test mode with debug output"
71
+ )
72
+ start_mcp_parser.add_argument(
73
+ "--instructions",
74
+ action="store_true",
75
+ help="Show setup instructions instead of running server",
76
+ )
77
+ start_mcp_parser.add_argument(
78
+ "--daemon", action="store_true", help="Run as daemon (not recommended for MCP)"
79
+ )
80
+
81
+ # Stop MCP server
82
+ stop_mcp_parser = mcp_subparsers.add_parser(
83
+ MCPCommands.STOP.value, help="Stop the MCP Gateway server"
84
+ )
85
+
86
+ # MCP status
87
+ status_mcp_parser = mcp_subparsers.add_parser(
88
+ MCPCommands.STATUS.value, help="Check server and tool status"
89
+ )
90
+ status_mcp_parser.add_argument(
91
+ "--verbose", action="store_true", help="Show detailed status information"
92
+ )
93
+
94
+ # List/manage tools
95
+ tools_mcp_parser = mcp_subparsers.add_parser(
96
+ MCPCommands.TOOLS.value, help="List and manage registered tools"
97
+ )
98
+ tools_mcp_parser.add_argument(
99
+ "tool_action",
100
+ nargs="?",
101
+ choices=["list", "enable", "disable"],
102
+ default="list",
103
+ help="Tool action (default: list)",
104
+ )
105
+ tools_mcp_parser.add_argument(
106
+ "tool_name", nargs="?", help="Tool name for enable/disable actions"
107
+ )
108
+ tools_mcp_parser.add_argument(
109
+ "--verbose",
110
+ action="store_true",
111
+ help="Show detailed tool information including schemas",
112
+ )
113
+
114
+ # Register new tool
115
+ register_mcp_parser = mcp_subparsers.add_parser(
116
+ MCPCommands.REGISTER.value, help="Register a new MCP tool"
117
+ )
118
+ register_mcp_parser.add_argument("name", help="Tool name")
119
+ register_mcp_parser.add_argument("description", help="Tool description")
120
+ register_mcp_parser.add_argument(
121
+ "--schema-file", type=Path, help="Path to JSON schema file for tool input"
122
+ )
123
+ register_mcp_parser.add_argument(
124
+ "--adapter", help="Path to custom tool adapter module"
125
+ )
126
+ register_mcp_parser.add_argument(
127
+ "--save", action="store_true", help="Save tool to configuration"
128
+ )
129
+
130
+ # Test tool invocation
131
+ test_mcp_parser = mcp_subparsers.add_parser(
132
+ MCPCommands.TEST.value, help="Test MCP tool invocation"
133
+ )
134
+ test_mcp_parser.add_argument("tool_name", help="Name of tool to test")
135
+ test_mcp_parser.add_argument("--args", help="Tool arguments as JSON string")
136
+ test_mcp_parser.add_argument(
137
+ "--args-file", type=Path, help="Path to JSON file containing tool arguments"
138
+ )
139
+
140
+ # Manage configuration
141
+ config_mcp_parser = mcp_subparsers.add_parser(
142
+ MCPCommands.CONFIG.value, help="View and manage MCP configuration"
143
+ )
144
+ config_mcp_parser.add_argument(
145
+ "config_action",
146
+ nargs="?",
147
+ choices=["view", "edit", "reset"],
148
+ default="view",
149
+ help="Configuration action (default: view)",
150
+ )
151
+
152
+ return mcp_parser
@@ -0,0 +1,138 @@
1
+ """
2
+ Memory command parser for claude-mpm CLI.
3
+
4
+ WHY: This module contains all arguments specific to memory management commands,
5
+ extracted from the monolithic parser.py for better organization.
6
+
7
+ DESIGN DECISION: Memory commands handle agent memory files and have their own
8
+ subcommand structure that benefits from separation.
9
+ """
10
+
11
+ import argparse
12
+
13
+ from ...constants import CLICommands, MemoryCommands
14
+ from .base_parser import add_common_arguments
15
+
16
+
17
+ def add_memory_subparser(subparsers) -> argparse.ArgumentParser:
18
+ """
19
+ Add the memory subparser with all memory management commands.
20
+
21
+ WHY: Memory management has multiple subcommands for initialization,
22
+ listing, and management that need their own argument structures.
23
+
24
+ Args:
25
+ subparsers: The subparsers object from the main parser
26
+
27
+ Returns:
28
+ The configured memory subparser
29
+ """
30
+ # Memory command with subcommands
31
+ memory_parser = subparsers.add_parser(
32
+ CLICommands.MEMORY.value, help="Manage agent memory files"
33
+ )
34
+ add_common_arguments(memory_parser)
35
+
36
+ memory_subparsers = memory_parser.add_subparsers(
37
+ dest="memory_command", help="Memory commands", metavar="SUBCOMMAND"
38
+ )
39
+
40
+ # Init command
41
+ init_parser = memory_subparsers.add_parser(
42
+ MemoryCommands.INIT.value,
43
+ help="Initialize project-specific memories via PM agent",
44
+ )
45
+ init_parser.add_argument(
46
+ "--force",
47
+ action="store_true",
48
+ help="Force initialization even if memories already exist",
49
+ )
50
+ init_parser.add_argument(
51
+ "--template", help="Memory template to use for initialization"
52
+ )
53
+
54
+ # List command
55
+ list_parser = memory_subparsers.add_parser(
56
+ MemoryCommands.SHOW.value, help="List available memory files"
57
+ )
58
+ list_parser.add_argument(
59
+ "--type", choices=["project", "user", "system"], help="Filter by memory type"
60
+ )
61
+ list_parser.add_argument(
62
+ "--verbose", action="store_true", help="Show detailed memory information"
63
+ )
64
+
65
+ # View command
66
+ view_parser = memory_subparsers.add_parser(
67
+ MemoryCommands.VIEW.value, help="View memory file contents"
68
+ )
69
+ view_parser.add_argument("memory_name", help="Name of the memory file to view")
70
+ view_parser.add_argument(
71
+ "--raw", action="store_true", help="Show raw memory content without formatting"
72
+ )
73
+
74
+ # Edit command
75
+ edit_parser = memory_subparsers.add_parser(
76
+ MemoryCommands.ADD.value, help="Edit memory file"
77
+ )
78
+ edit_parser.add_argument("memory_name", help="Name of the memory file to edit")
79
+ edit_parser.add_argument("--editor", help="Editor to use (overrides default)")
80
+
81
+ # Create command
82
+ create_parser = memory_subparsers.add_parser(
83
+ MemoryCommands.BUILD.value, help="Create new memory file"
84
+ )
85
+ create_parser.add_argument("memory_name", help="Name of the memory file to create")
86
+ create_parser.add_argument(
87
+ "--type",
88
+ choices=["project", "user"],
89
+ default="project",
90
+ help="Type of memory to create (default: project)",
91
+ )
92
+ create_parser.add_argument("--template", help="Template to use for the new memory")
93
+ create_parser.add_argument("--content", help="Initial content for the memory file")
94
+
95
+ # Delete command
96
+ delete_parser = memory_subparsers.add_parser(
97
+ MemoryCommands.CLEAN.value, help="Delete memory file"
98
+ )
99
+ delete_parser.add_argument("memory_name", help="Name of the memory file to delete")
100
+ delete_parser.add_argument(
101
+ "--force", action="store_true", help="Force deletion without confirmation"
102
+ )
103
+ delete_parser.add_argument(
104
+ "--backup", action="store_true", help="Create backup before deletion"
105
+ )
106
+
107
+ # Sync command
108
+ sync_parser = memory_subparsers.add_parser(
109
+ MemoryCommands.OPTIMIZE.value, help="Sync memory files across environments"
110
+ )
111
+ sync_parser.add_argument(
112
+ "--source",
113
+ choices=["project", "user", "system"],
114
+ help="Source memory type to sync from",
115
+ )
116
+ sync_parser.add_argument(
117
+ "--target", choices=["project", "user"], help="Target memory type to sync to"
118
+ )
119
+ sync_parser.add_argument(
120
+ "--dry-run",
121
+ action="store_true",
122
+ help="Show what would be synced without actually syncing",
123
+ )
124
+
125
+ # Validate command
126
+ validate_parser = memory_subparsers.add_parser(
127
+ MemoryCommands.STATUS.value, help="Validate memory file format and content"
128
+ )
129
+ validate_parser.add_argument(
130
+ "memory_name",
131
+ nargs="?",
132
+ help="Name of specific memory file to validate (default: all)",
133
+ )
134
+ validate_parser.add_argument(
135
+ "--strict", action="store_true", help="Use strict validation rules"
136
+ )
137
+
138
+ return memory_parser
@@ -0,0 +1,104 @@
1
+ """
2
+ Monitor command parser for claude-mpm CLI.
3
+
4
+ WHY: This module contains all arguments specific to monitoring server management,
5
+ extracted from the monolithic parser.py for better organization.
6
+
7
+ DESIGN DECISION: Monitor commands handle Socket.IO server management and
8
+ have their own subcommand structure.
9
+ """
10
+
11
+ import argparse
12
+
13
+ from ...constants import CLICommands, MonitorCommands
14
+ from .base_parser import add_common_arguments
15
+
16
+
17
+ def add_monitor_subparser(subparsers) -> argparse.ArgumentParser:
18
+ """
19
+ Add the monitor subparser with all monitoring server commands.
20
+
21
+ WHY: Monitor management has multiple subcommands for starting, stopping,
22
+ and managing the Socket.IO monitoring server.
23
+
24
+ Args:
25
+ subparsers: The subparsers object from the main parser
26
+
27
+ Returns:
28
+ The configured monitor subparser
29
+ """
30
+ # Monitor command with subcommands
31
+ monitor_parser = subparsers.add_parser(
32
+ CLICommands.MONITOR.value, help="Manage Socket.IO monitoring server"
33
+ )
34
+ add_common_arguments(monitor_parser)
35
+
36
+ monitor_subparsers = monitor_parser.add_subparsers(
37
+ dest="monitor_command", help="Monitor commands", metavar="SUBCOMMAND"
38
+ )
39
+
40
+ # Start monitor
41
+ start_monitor_parser = monitor_subparsers.add_parser(
42
+ MonitorCommands.START.value, help="Start Socket.IO monitoring server"
43
+ )
44
+ start_monitor_parser.add_argument(
45
+ "--port", type=int, default=8765, help="Port to start server on (default: 8765)"
46
+ )
47
+ start_monitor_parser.add_argument(
48
+ "--host", default="localhost", help="Host to bind to (default: localhost)"
49
+ )
50
+ start_monitor_parser.add_argument(
51
+ "--dashboard", action="store_true", help="Enable web dashboard interface"
52
+ )
53
+ start_monitor_parser.add_argument(
54
+ "--dashboard-port",
55
+ type=int,
56
+ default=8766,
57
+ help="Dashboard port (default: 8766)",
58
+ )
59
+ start_monitor_parser.add_argument(
60
+ "--background", action="store_true", help="Run server in background"
61
+ )
62
+
63
+ # Stop monitor
64
+ stop_monitor_parser = monitor_subparsers.add_parser(
65
+ MonitorCommands.STOP.value, help="Stop Socket.IO monitoring server"
66
+ )
67
+ stop_monitor_parser.add_argument(
68
+ "--port", type=int, default=8765, help="Port of server to stop (default: 8765)"
69
+ )
70
+ stop_monitor_parser.add_argument(
71
+ "--force", action="store_true", help="Force stop even if clients are connected"
72
+ )
73
+
74
+ # Restart monitor
75
+ restart_monitor_parser = monitor_subparsers.add_parser(
76
+ MonitorCommands.RESTART.value, help="Restart Socket.IO monitoring server"
77
+ )
78
+ restart_monitor_parser.add_argument(
79
+ "--port", type=int, help="Port to restart on"
80
+ )
81
+ restart_monitor_parser.add_argument(
82
+ "--host", default="localhost", help="Host to bind to (default: localhost)"
83
+ )
84
+
85
+ # Status monitor
86
+ status_monitor_parser = monitor_subparsers.add_parser(
87
+ MonitorCommands.STATUS.value, help="Check monitoring server status"
88
+ )
89
+ status_monitor_parser.add_argument(
90
+ "--verbose", action="store_true", help="Show detailed status information"
91
+ )
92
+
93
+ # Port monitor (start/restart on specific port)
94
+ port_monitor_parser = monitor_subparsers.add_parser(
95
+ MonitorCommands.PORT.value, help="Start/restart monitoring server on specific port"
96
+ )
97
+ port_monitor_parser.add_argument(
98
+ "port", type=int, help="Port number to use"
99
+ )
100
+ port_monitor_parser.add_argument(
101
+ "--host", default="localhost", help="Host to bind to (default: localhost)"
102
+ )
103
+
104
+ return monitor_parser
@@ -0,0 +1,147 @@
1
+ """
2
+ Run command parser for claude-mpm CLI.
3
+
4
+ WHY: This module contains all arguments specific to the run command,
5
+ extracted from the monolithic parser.py for better organization.
6
+
7
+ DESIGN DECISION: Run command arguments are complex enough to warrant
8
+ their own module, including hook management, ticket creation, and
9
+ interaction modes.
10
+ """
11
+
12
+ import argparse
13
+
14
+ from ...constants import CLICommands
15
+ from .base_parser import add_common_arguments
16
+
17
+
18
+ def add_run_arguments(parser: argparse.ArgumentParser) -> None:
19
+ """
20
+ Add arguments specific to the run command.
21
+
22
+ WHY: The run command has specific arguments for controlling how Claude sessions
23
+ are executed, including hook management, ticket creation, and interaction modes.
24
+
25
+ Args:
26
+ parser: The argument parser to add arguments to
27
+ """
28
+ run_group = parser.add_argument_group("run options")
29
+
30
+ run_group.add_argument(
31
+ "--no-hooks",
32
+ action="store_true",
33
+ help="Disable hook service (runs without hooks)",
34
+ )
35
+ run_group.add_argument(
36
+ "--no-tickets", action="store_true", help="Disable automatic ticket creation"
37
+ )
38
+ run_group.add_argument(
39
+ "--intercept-commands",
40
+ action="store_true",
41
+ help="Enable command interception in interactive mode (intercepts /mpm: commands)",
42
+ )
43
+ run_group.add_argument(
44
+ "--no-native-agents",
45
+ action="store_true",
46
+ help="Disable deployment of Claude Code native agents",
47
+ )
48
+ run_group.add_argument(
49
+ "--launch-method",
50
+ choices=["exec", "subprocess"],
51
+ default="exec",
52
+ help="Method to launch Claude: exec (replace process) or subprocess (child process)",
53
+ )
54
+ # Monitor options - consolidated monitoring and management interface
55
+ run_group.add_argument(
56
+ "--monitor",
57
+ action="store_true",
58
+ help="Enable monitoring and management interface with WebSocket server and dashboard (default port: 8765)",
59
+ )
60
+ run_group.add_argument(
61
+ "--websocket-port",
62
+ type=int,
63
+ default=8765,
64
+ help="WebSocket server port (default: 8765)",
65
+ )
66
+ run_group.add_argument(
67
+ "--force",
68
+ action="store_true",
69
+ help="Force operations even with warnings (e.g., large .claude.json file)",
70
+ )
71
+ run_group.add_argument(
72
+ "--resume",
73
+ type=str,
74
+ nargs="?",
75
+ const="last",
76
+ help="Resume a session (last session if no ID specified, or specific session ID)",
77
+ )
78
+
79
+ # Dependency checking options
80
+ dep_group = parser.add_argument_group("dependency options")
81
+ dep_group.add_argument(
82
+ "--no-check-dependencies",
83
+ action="store_false",
84
+ dest="check_dependencies",
85
+ help="Skip agent dependency checking at startup",
86
+ )
87
+ dep_group.add_argument(
88
+ "--force-check-dependencies",
89
+ action="store_true",
90
+ help="Force dependency checking even if cached results exist",
91
+ )
92
+ dep_group.add_argument(
93
+ "--no-prompt",
94
+ action="store_true",
95
+ help="Never prompt for dependency installation (non-interactive mode)",
96
+ )
97
+ dep_group.add_argument(
98
+ "--force-prompt",
99
+ action="store_true",
100
+ help="Force interactive prompting even in non-TTY environments (use with caution)",
101
+ )
102
+
103
+ # Input/output options
104
+ io_group = parser.add_argument_group("input/output options")
105
+ io_group.add_argument(
106
+ "-i",
107
+ "--input",
108
+ type=str,
109
+ help="Input text or file path (for non-interactive mode)",
110
+ )
111
+ io_group.add_argument(
112
+ "--non-interactive",
113
+ action="store_true",
114
+ help="Run in non-interactive mode (read from stdin or --input)",
115
+ )
116
+
117
+ # Claude CLI arguments
118
+ parser.add_argument(
119
+ "claude_args",
120
+ nargs=argparse.REMAINDER,
121
+ help="Additional arguments to pass to Claude CLI (use -- before Claude args)",
122
+ )
123
+
124
+
125
+ def add_run_subparser(subparsers) -> argparse.ArgumentParser:
126
+ """
127
+ Add the run subparser to the main parser.
128
+
129
+ WHY: This creates the explicit 'run' command subparser with all
130
+ run-specific arguments.
131
+
132
+ Args:
133
+ subparsers: The subparsers object from the main parser
134
+
135
+ Returns:
136
+ The configured run subparser
137
+ """
138
+ # Run command (explicit)
139
+ run_parser = subparsers.add_parser(
140
+ CLICommands.RUN.value,
141
+ help="Run orchestrated Claude session (default)",
142
+ formatter_class=argparse.RawDescriptionHelpFormatter,
143
+ )
144
+ add_common_arguments(run_parser)
145
+ add_run_arguments(run_parser)
146
+
147
+ return run_parser