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
@@ -1,511 +0,0 @@
1
- """Run-guarded command implementation for memory-aware Claude execution.
2
-
3
- WHY: This experimental command provides memory monitoring and automatic restart
4
- capabilities for Claude Code sessions, preventing memory-related crashes.
5
-
6
- DESIGN DECISION: This is kept completely separate from the main run command to
7
- ensure stability. It extends ClaudeRunner through MemoryAwareClaudeRunner without
8
- modifying the base implementation.
9
-
10
- STATUS: EXPERIMENTAL - This feature is in beta and may change or have issues.
11
- """
12
-
13
- import argparse
14
- import asyncio
15
- import os
16
- import sys
17
- from pathlib import Path
18
- from typing import Optional, Dict, Any
19
-
20
- from claude_mpm.core.memory_aware_runner import MemoryAwareClaudeRunner
21
- from claude_mpm.core.logging_config import get_logger
22
- from claude_mpm.cli.utils import setup_logging
23
- from claude_mpm.config.experimental_features import get_experimental_features
24
- from claude_mpm.config.memory_guardian_config import (
25
- MemoryGuardianConfig,
26
- MemoryThresholds,
27
- RestartPolicy,
28
- MonitoringConfig,
29
- get_default_config
30
- )
31
- from claude_mpm.constants import LogLevel
32
-
33
-
34
- logger = get_logger(__name__)
35
-
36
-
37
- def add_run_guarded_parser(subparsers) -> argparse.ArgumentParser:
38
- """Add run-guarded command parser.
39
-
40
- Args:
41
- subparsers: Subparsers object from main parser
42
-
43
- Returns:
44
- The run-guarded parser for further configuration
45
- """
46
- parser = subparsers.add_parser(
47
- 'run-guarded',
48
- help='(EXPERIMENTAL) Run Claude with memory monitoring and automatic restart',
49
- description=(
50
- '⚠️ EXPERIMENTAL FEATURE\n\n'
51
- 'Run Claude Code with memory monitoring and automatic restart capabilities. '
52
- 'This command monitors memory usage and performs controlled restarts when '
53
- 'thresholds are exceeded, preserving conversation state across restarts.\n\n'
54
- 'NOTE: This is a beta feature. Use with caution in production environments.'
55
- ),
56
- formatter_class=argparse.RawDescriptionHelpFormatter,
57
- epilog="""
58
- Examples:
59
- # Run with default settings (18GB threshold, 30s checks)
60
- claude-mpm run-guarded
61
-
62
- # Custom memory threshold (in MB)
63
- claude-mpm run-guarded --memory-threshold 16000
64
-
65
- # Faster monitoring for development
66
- claude-mpm run-guarded --check-interval 10
67
-
68
- # Limit restart attempts
69
- claude-mpm run-guarded --max-restarts 5
70
-
71
- # Disable state preservation (faster restarts)
72
- claude-mpm run-guarded --no-state-preservation
73
-
74
- # Use configuration file
75
- claude-mpm run-guarded --config ~/.claude-mpm/memory-guardian.yaml
76
-
77
- Memory thresholds:
78
- - Warning: 80% of threshold (logs warning)
79
- - Critical: 100% of threshold (triggers restart)
80
- - Emergency: 120% of threshold (immediate restart)
81
-
82
- State preservation:
83
- When enabled, the runner captures and restores:
84
- - Current conversation context
85
- - Open files and working directory
86
- - Environment variables
87
- - Recent command history
88
- """
89
- )
90
-
91
- # Memory monitoring options
92
- memory_group = parser.add_argument_group('memory monitoring')
93
- memory_group.add_argument(
94
- '--memory-threshold',
95
- type=float,
96
- default=18000, # 18GB in MB
97
- help='Memory threshold in MB before restart (default: 18000MB/18GB)'
98
- )
99
- memory_group.add_argument(
100
- '--check-interval',
101
- type=int,
102
- default=30,
103
- help='Memory check interval in seconds (default: 30)'
104
- )
105
- memory_group.add_argument(
106
- '--warning-threshold',
107
- type=float,
108
- help='Warning threshold in MB (default: 80%% of memory threshold)'
109
- )
110
- memory_group.add_argument(
111
- '--emergency-threshold',
112
- type=float,
113
- help='Emergency threshold in MB (default: 120%% of memory threshold)'
114
- )
115
-
116
- # Restart policy options
117
- restart_group = parser.add_argument_group('restart policy')
118
- restart_group.add_argument(
119
- '--max-restarts',
120
- type=int,
121
- default=3,
122
- help='Maximum number of automatic restarts (default: 3)'
123
- )
124
- restart_group.add_argument(
125
- '--restart-cooldown',
126
- type=int,
127
- default=10,
128
- help='Cooldown period between restarts in seconds (default: 10)'
129
- )
130
- restart_group.add_argument(
131
- '--graceful-timeout',
132
- type=int,
133
- default=30,
134
- help='Timeout for graceful shutdown in seconds (default: 30)'
135
- )
136
-
137
- # State preservation options
138
- state_group = parser.add_argument_group('state preservation')
139
- state_group.add_argument(
140
- '--enable-state-preservation',
141
- action='store_true',
142
- default=True,
143
- dest='state_preservation',
144
- help='Enable state preservation across restarts (default: enabled)'
145
- )
146
- state_group.add_argument(
147
- '--no-state-preservation',
148
- action='store_false',
149
- dest='state_preservation',
150
- help='Disable state preservation for faster restarts'
151
- )
152
- state_group.add_argument(
153
- '--state-dir',
154
- type=Path,
155
- help='Directory for state files (default: ~/.claude-mpm/state)'
156
- )
157
-
158
- # Configuration file
159
- parser.add_argument(
160
- '--config',
161
- '--config-file',
162
- type=Path,
163
- dest='config_file',
164
- help='Path to memory guardian configuration file (YAML)'
165
- )
166
-
167
- # Monitoring display options
168
- display_group = parser.add_argument_group('display options')
169
- display_group.add_argument(
170
- '--quiet',
171
- action='store_true',
172
- help='Minimal output, only show critical events'
173
- )
174
- display_group.add_argument(
175
- '--verbose',
176
- action='store_true',
177
- help='Verbose output with detailed monitoring information'
178
- )
179
- display_group.add_argument(
180
- '--show-stats',
181
- action='store_true',
182
- help='Display memory statistics periodically'
183
- )
184
- display_group.add_argument(
185
- '--stats-interval',
186
- type=int,
187
- default=60,
188
- help='Statistics display interval in seconds (default: 60)'
189
- )
190
-
191
- # Claude runner options (inherited from run command)
192
- run_group = parser.add_argument_group('claude options')
193
- run_group.add_argument(
194
- '--no-hooks',
195
- action='store_true',
196
- help='Disable hook service'
197
- )
198
- run_group.add_argument(
199
- '--no-tickets',
200
- action='store_true',
201
- help='Disable automatic ticket creation'
202
- )
203
- run_group.add_argument(
204
- '--no-native-agents',
205
- action='store_true',
206
- help='Disable deployment of Claude Code native agents'
207
- )
208
- run_group.add_argument(
209
- '--websocket-port',
210
- type=int,
211
- default=8765,
212
- help='WebSocket server port (default: 8765)'
213
- )
214
-
215
- # Input/output options
216
- io_group = parser.add_argument_group('input/output')
217
- io_group.add_argument(
218
- '-i', '--input',
219
- type=str,
220
- help='Input text or file path for initial context'
221
- )
222
- io_group.add_argument(
223
- '--non-interactive',
224
- action='store_true',
225
- help='Run in non-interactive mode'
226
- )
227
-
228
- # Logging options
229
- logging_group = parser.add_argument_group('logging')
230
- logging_group.add_argument(
231
- '--logging',
232
- choices=[level.value for level in LogLevel],
233
- default=LogLevel.INFO.value,
234
- help='Logging level (default: INFO)'
235
- )
236
- logging_group.add_argument(
237
- '--log-dir',
238
- type=Path,
239
- help='Custom log directory'
240
- )
241
-
242
- # Experimental feature control
243
- experimental_group = parser.add_argument_group('experimental control')
244
- experimental_group.add_argument(
245
- '--accept-experimental',
246
- action='store_true',
247
- help='Accept experimental status and suppress warning'
248
- )
249
- experimental_group.add_argument(
250
- '--force-experimental',
251
- action='store_true',
252
- help='Force run even if experimental features are disabled'
253
- )
254
-
255
- # Claude CLI arguments
256
- parser.add_argument(
257
- 'claude_args',
258
- nargs=argparse.REMAINDER,
259
- help='Additional arguments to pass to Claude CLI'
260
- )
261
-
262
- return parser
263
-
264
-
265
- def load_config_file(config_path: Path) -> Optional[MemoryGuardianConfig]:
266
- """Load memory guardian configuration from YAML file.
267
-
268
- Args:
269
- config_path: Path to configuration file
270
-
271
- Returns:
272
- MemoryGuardianConfig or None if loading failed
273
- """
274
- try:
275
- import yaml
276
-
277
- if not config_path.exists():
278
- logger.warning(f"Configuration file not found: {config_path}")
279
- return None
280
-
281
- with open(config_path, 'r') as f:
282
- config_data = yaml.safe_load(f)
283
-
284
- # Create configuration from YAML data
285
- config = MemoryGuardianConfig()
286
-
287
- # Update thresholds
288
- if 'thresholds' in config_data:
289
- t = config_data['thresholds']
290
- config.thresholds = MemoryThresholds(
291
- warning=t.get('warning', config.thresholds.warning),
292
- critical=t.get('critical', config.thresholds.critical),
293
- emergency=t.get('emergency', config.thresholds.emergency)
294
- )
295
-
296
- # Update monitoring settings
297
- if 'monitoring' in config_data:
298
- m = config_data['monitoring']
299
- config.monitoring = MonitoringConfig(
300
- normal_interval=m.get('normal_interval', config.monitoring.normal_interval),
301
- warning_interval=m.get('warning_interval', config.monitoring.warning_interval),
302
- critical_interval=m.get('critical_interval', config.monitoring.critical_interval),
303
- log_memory_stats=m.get('log_memory_stats', config.monitoring.log_memory_stats),
304
- log_interval=m.get('log_interval', config.monitoring.log_interval)
305
- )
306
-
307
- # Update restart policy
308
- if 'restart_policy' in config_data:
309
- r = config_data['restart_policy']
310
- config.restart_policy = RestartPolicy(
311
- max_attempts=r.get('max_attempts', config.restart_policy.max_attempts),
312
- attempt_window=r.get('attempt_window', config.restart_policy.attempt_window),
313
- initial_cooldown=r.get('initial_cooldown', config.restart_policy.initial_cooldown),
314
- cooldown_multiplier=r.get('cooldown_multiplier', config.restart_policy.cooldown_multiplier),
315
- max_cooldown=r.get('max_cooldown', config.restart_policy.max_cooldown),
316
- graceful_timeout=r.get('graceful_timeout', config.restart_policy.graceful_timeout),
317
- force_kill_timeout=r.get('force_kill_timeout', config.restart_policy.force_kill_timeout)
318
- )
319
-
320
- # Update general settings
321
- config.enabled = config_data.get('enabled', True)
322
- config.auto_start = config_data.get('auto_start', True)
323
- config.persist_state = config_data.get('persist_state', True)
324
-
325
- logger.info(f"Loaded configuration from {config_path}")
326
- return config
327
-
328
- except ImportError:
329
- logger.error("PyYAML not installed. Install with: pip install pyyaml")
330
- return None
331
- except Exception as e:
332
- logger.error(f"Failed to load configuration file: {e}")
333
- return None
334
-
335
-
336
- def execute_run_guarded(args: argparse.Namespace) -> int:
337
- """Execute the run-guarded command.
338
-
339
- WHY: This is the entry point for the experimental memory-guarded execution mode.
340
- It checks experimental feature flags and shows appropriate warnings before
341
- delegating to MemoryAwareClaudeRunner.
342
-
343
- DESIGN DECISION: All experimental checks happen here, before any actual work,
344
- to ensure users are aware they're using beta functionality.
345
-
346
- Args:
347
- args: Parsed command line arguments
348
-
349
- Returns:
350
- Exit code (0 for success, non-zero for failure)
351
- """
352
- try:
353
- # Setup logging
354
- log_level = getattr(args, 'logging', 'INFO')
355
- log_dir = getattr(args, 'log_dir', None)
356
- setup_logging(log_level, log_dir)
357
-
358
- # Check experimental features
359
- experimental = get_experimental_features()
360
-
361
- # Check if Memory Guardian is enabled
362
- if not experimental.is_enabled('memory_guardian') and not getattr(args, 'force_experimental', False):
363
- logger.error("Memory Guardian is an experimental feature that is currently disabled.")
364
- print("\n❌ Memory Guardian is disabled in experimental features configuration.")
365
- print("\nTo enable it:")
366
- print(" 1. Set environment variable: export CLAUDE_MPM_EXPERIMENTAL_ENABLE_MEMORY_GUARDIAN=true")
367
- print(" 2. Or use --force-experimental flag to override")
368
- print(" 3. Or enable in ~/.claude-mpm/experimental.json")
369
- return 1
370
-
371
- # Show experimental warning unless suppressed
372
- if not getattr(args, 'accept_experimental', False):
373
- if experimental.should_show_warning('memory_guardian'):
374
- warning = experimental.get_warning('memory_guardian')
375
- if warning:
376
- print("\n" + warning)
377
- print("\nThis feature is experimental and may:")
378
- print(" • Have bugs or stability issues")
379
- print(" • Change significantly in future versions")
380
- print(" • Not work as expected in all environments")
381
- print("\nContinue? [y/N]: ", end="")
382
-
383
- try:
384
- response = input().strip().lower()
385
- if response != 'y':
386
- print("\n✅ Cancelled. Use the stable 'run' command instead.")
387
- return 0
388
- # Mark as accepted for this session
389
- experimental.mark_accepted('memory_guardian')
390
- except (EOFError, KeyboardInterrupt):
391
- print("\n✅ Cancelled.")
392
- return 0
393
-
394
- logger.info("Starting experimental run-guarded command")
395
-
396
- # Load configuration
397
- config = None
398
- if hasattr(args, 'config_file') and args.config_file:
399
- config = load_config_file(args.config_file)
400
-
401
- if config is None:
402
- # Create configuration from command line arguments
403
- config = MemoryGuardianConfig()
404
-
405
- # Set thresholds
406
- config.thresholds.critical = args.memory_threshold
407
-
408
- if hasattr(args, 'warning_threshold') and args.warning_threshold:
409
- config.thresholds.warning = args.warning_threshold
410
- else:
411
- config.thresholds.warning = args.memory_threshold * 0.8
412
-
413
- if hasattr(args, 'emergency_threshold') and args.emergency_threshold:
414
- config.thresholds.emergency = args.emergency_threshold
415
- else:
416
- config.thresholds.emergency = args.memory_threshold * 1.2
417
-
418
- # Set monitoring settings
419
- config.monitoring.normal_interval = args.check_interval
420
- config.monitoring.log_memory_stats = args.show_stats if hasattr(args, 'show_stats') else False
421
-
422
- if hasattr(args, 'stats_interval'):
423
- config.monitoring.log_interval = args.stats_interval
424
-
425
- # Set restart policy
426
- config.restart_policy.max_attempts = args.max_restarts
427
-
428
- if hasattr(args, 'restart_cooldown'):
429
- config.restart_policy.initial_cooldown = args.restart_cooldown
430
-
431
- if hasattr(args, 'graceful_timeout'):
432
- config.restart_policy.graceful_timeout = args.graceful_timeout
433
-
434
- # Override config with CLI arguments
435
- if hasattr(args, 'memory_threshold'):
436
- config.thresholds.critical = args.memory_threshold
437
-
438
- if hasattr(args, 'check_interval'):
439
- config.monitoring.normal_interval = args.check_interval
440
-
441
- if hasattr(args, 'max_restarts'):
442
- config.restart_policy.max_attempts = args.max_restarts
443
-
444
- # Check mode early to avoid unnecessary setup
445
- if getattr(args, 'non_interactive', False):
446
- logger.error("Non-interactive mode not yet supported for run-guarded")
447
- return 1
448
-
449
- # Determine verbosity
450
- if hasattr(args, 'quiet') and args.quiet:
451
- log_level = 'WARNING'
452
- elif hasattr(args, 'verbose') and args.verbose:
453
- log_level = 'DEBUG'
454
-
455
- # Create runner
456
- runner = MemoryAwareClaudeRunner(
457
- enable_tickets=not getattr(args, 'no_tickets', False),
458
- log_level=log_level,
459
- claude_args=getattr(args, 'claude_args', []),
460
- launch_method='subprocess', # Always subprocess for monitoring
461
- enable_websocket=False, # Could be enabled in future
462
- websocket_port=getattr(args, 'websocket_port', 8765),
463
- memory_config=config,
464
- enable_monitoring=True,
465
- state_dir=getattr(args, 'state_dir', None)
466
- )
467
-
468
- # Deploy agents if not disabled
469
- if not getattr(args, 'no_native_agents', False):
470
- if not runner.setup_agents():
471
- logger.warning("Failed to deploy some agents, continuing anyway")
472
-
473
- # Get initial context if provided
474
- initial_context = None
475
- if hasattr(args, 'input') and args.input:
476
- if Path(args.input).exists():
477
- with open(args.input, 'r') as f:
478
- initial_context = f.read()
479
- else:
480
- initial_context = args.input
481
-
482
- # Run with monitoring
483
- runner.run_interactive_with_monitoring(
484
- initial_context=initial_context,
485
- memory_threshold=config.thresholds.critical,
486
- check_interval=config.monitoring.normal_interval,
487
- max_restarts=config.restart_policy.max_attempts,
488
- enable_state_preservation=getattr(args, 'state_preservation', True)
489
- )
490
-
491
- return 0
492
-
493
- except KeyboardInterrupt:
494
- logger.info("Run-guarded interrupted by user")
495
- return 130 # Standard exit code for SIGINT
496
- except Exception as e:
497
- logger.error(f"Run-guarded failed: {e}", exc_info=True)
498
- return 1
499
-
500
-
501
- # Convenience function for direct module execution
502
- def main():
503
- """Main entry point for run-guarded command."""
504
- parser = argparse.ArgumentParser(description='Run Claude with memory monitoring')
505
- add_run_guarded_parser(parser._subparsers)
506
- args = parser.parse_args()
507
- sys.exit(execute_run_guarded(args))
508
-
509
-
510
- if __name__ == '__main__':
511
- main()