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,433 +0,0 @@
1
- """State models for context preservation across Claude Code restarts.
2
-
3
- This module defines data models for capturing and restoring various aspects
4
- of the Claude Code execution state to enable seamless restarts.
5
-
6
- Design Principles:
7
- - Comprehensive state capture (process, conversation, project, restart info)
8
- - Serialization-friendly data structures
9
- - Validation and sanitization of sensitive data
10
- - Platform-agnostic representations
11
- """
12
-
13
- import os
14
- import json
15
- from dataclasses import dataclass, field, asdict
16
- from datetime import datetime
17
- from pathlib import Path
18
- from typing import Dict, Any, List, Optional, Set
19
- from enum import Enum
20
-
21
-
22
- class StateType(Enum):
23
- """Types of state that can be captured."""
24
- PROCESS = "process"
25
- CONVERSATION = "conversation"
26
- PROJECT = "project"
27
- RESTART = "restart"
28
- FULL = "full"
29
-
30
-
31
- @dataclass
32
- class ProcessState:
33
- """Process execution state information.
34
-
35
- Captures the runtime state of the Claude Code process including
36
- environment, working directory, and command line arguments.
37
- """
38
-
39
- # Process identification
40
- pid: int
41
- parent_pid: int
42
- process_name: str
43
-
44
- # Execution context
45
- command: List[str]
46
- args: List[str]
47
- working_directory: str
48
-
49
- # Environment (filtered for security)
50
- environment: Dict[str, str]
51
-
52
- # Resource usage
53
- memory_mb: float
54
- cpu_percent: float
55
- open_files: List[str]
56
-
57
- # Timing
58
- start_time: float
59
- capture_time: float
60
-
61
- def to_dict(self) -> Dict[str, Any]:
62
- """Convert to dictionary for serialization."""
63
- return {
64
- 'pid': self.pid,
65
- 'parent_pid': self.parent_pid,
66
- 'process_name': self.process_name,
67
- 'command': self.command,
68
- 'args': self.args,
69
- 'working_directory': self.working_directory,
70
- 'environment': self._sanitize_environment(self.environment),
71
- 'memory_mb': round(self.memory_mb, 2),
72
- 'cpu_percent': round(self.cpu_percent, 2),
73
- 'open_files': self.open_files[:100], # Limit to prevent huge lists
74
- 'start_time': self.start_time,
75
- 'start_time_iso': datetime.fromtimestamp(self.start_time).isoformat(),
76
- 'capture_time': self.capture_time,
77
- 'capture_time_iso': datetime.fromtimestamp(self.capture_time).isoformat()
78
- }
79
-
80
- @staticmethod
81
- def _sanitize_environment(env: Dict[str, str]) -> Dict[str, str]:
82
- """Remove sensitive environment variables."""
83
- sensitive_patterns = [
84
- 'TOKEN', 'KEY', 'SECRET', 'PASSWORD', 'CREDENTIAL',
85
- 'API_KEY', 'AUTH', 'PRIVATE'
86
- ]
87
-
88
- sanitized = {}
89
- for key, value in env.items():
90
- # Check if key contains sensitive patterns
91
- is_sensitive = any(pattern in key.upper() for pattern in sensitive_patterns)
92
-
93
- if is_sensitive:
94
- sanitized[key] = '***REDACTED***'
95
- else:
96
- sanitized[key] = value
97
-
98
- return sanitized
99
-
100
- @classmethod
101
- def from_dict(cls, data: Dict[str, Any]) -> 'ProcessState':
102
- """Create from dictionary."""
103
- return cls(
104
- pid=data['pid'],
105
- parent_pid=data['parent_pid'],
106
- process_name=data['process_name'],
107
- command=data['command'],
108
- args=data['args'],
109
- working_directory=data['working_directory'],
110
- environment=data['environment'],
111
- memory_mb=data['memory_mb'],
112
- cpu_percent=data['cpu_percent'],
113
- open_files=data['open_files'],
114
- start_time=data['start_time'],
115
- capture_time=data['capture_time']
116
- )
117
-
118
-
119
- @dataclass
120
- class ConversationContext:
121
- """Represents a single conversation context."""
122
-
123
- conversation_id: str
124
- title: str
125
- created_at: float
126
- updated_at: float
127
- message_count: int
128
-
129
- # Context window information
130
- total_tokens: int
131
- max_tokens: int
132
-
133
- # File references in conversation
134
- referenced_files: List[str]
135
- open_tabs: List[str]
136
-
137
- # Conversation metadata
138
- tags: List[str]
139
- is_active: bool
140
-
141
- def to_dict(self) -> Dict[str, Any]:
142
- """Convert to dictionary."""
143
- return asdict(self)
144
-
145
- @classmethod
146
- def from_dict(cls, data: Dict[str, Any]) -> 'ConversationContext':
147
- """Create from dictionary."""
148
- return cls(**data)
149
-
150
-
151
- @dataclass
152
- class ConversationState:
153
- """Claude conversation state and context.
154
-
155
- Captures the current conversation state including active conversations,
156
- context windows, and file references.
157
- """
158
-
159
- # Active conversation
160
- active_conversation_id: Optional[str]
161
- active_conversation: Optional[ConversationContext]
162
-
163
- # Recent conversations (for context)
164
- recent_conversations: List[ConversationContext]
165
-
166
- # Global context
167
- total_conversations: int
168
- total_storage_mb: float
169
-
170
- # User preferences preserved
171
- preferences: Dict[str, Any]
172
-
173
- # File state
174
- open_files: List[str]
175
- recent_files: List[str]
176
- pinned_files: List[str]
177
-
178
- def to_dict(self) -> Dict[str, Any]:
179
- """Convert to dictionary for serialization."""
180
- return {
181
- 'active_conversation_id': self.active_conversation_id,
182
- 'active_conversation': self.active_conversation.to_dict() if self.active_conversation else None,
183
- 'recent_conversations': [c.to_dict() for c in self.recent_conversations],
184
- 'total_conversations': self.total_conversations,
185
- 'total_storage_mb': round(self.total_storage_mb, 2),
186
- 'preferences': self.preferences,
187
- 'open_files': self.open_files,
188
- 'recent_files': self.recent_files,
189
- 'pinned_files': self.pinned_files
190
- }
191
-
192
- @classmethod
193
- def from_dict(cls, data: Dict[str, Any]) -> 'ConversationState':
194
- """Create from dictionary."""
195
- return cls(
196
- active_conversation_id=data.get('active_conversation_id'),
197
- active_conversation=(
198
- ConversationContext.from_dict(data['active_conversation'])
199
- if data.get('active_conversation') else None
200
- ),
201
- recent_conversations=[
202
- ConversationContext.from_dict(c)
203
- for c in data.get('recent_conversations', [])
204
- ],
205
- total_conversations=data.get('total_conversations', 0),
206
- total_storage_mb=data.get('total_storage_mb', 0.0),
207
- preferences=data.get('preferences', {}),
208
- open_files=data.get('open_files', []),
209
- recent_files=data.get('recent_files', []),
210
- pinned_files=data.get('pinned_files', [])
211
- )
212
-
213
-
214
- @dataclass
215
- class ProjectState:
216
- """Project and Git repository state.
217
-
218
- Captures the current project context including Git branch,
219
- modified files, and project metadata.
220
- """
221
-
222
- # Project identification
223
- project_path: str
224
- project_name: str
225
-
226
- # Git state
227
- git_branch: Optional[str]
228
- git_commit: Optional[str]
229
- git_status: Dict[str, List[str]] # staged, modified, untracked
230
- git_remotes: Dict[str, str]
231
-
232
- # File state
233
- modified_files: List[str]
234
- open_editors: List[str]
235
- breakpoints: Dict[str, List[int]] # file -> line numbers
236
-
237
- # Project metadata
238
- project_type: str # python, node, go, etc.
239
- dependencies: Dict[str, str] # package -> version
240
- environment_vars: Dict[str, str] # project-specific env vars
241
-
242
- # Build/test state
243
- last_build_status: Optional[str]
244
- last_test_results: Optional[Dict[str, Any]]
245
-
246
- def to_dict(self) -> Dict[str, Any]:
247
- """Convert to dictionary for serialization."""
248
- return {
249
- 'project_path': self.project_path,
250
- 'project_name': self.project_name,
251
- 'git_branch': self.git_branch,
252
- 'git_commit': self.git_commit,
253
- 'git_status': self.git_status,
254
- 'git_remotes': self.git_remotes,
255
- 'modified_files': self.modified_files,
256
- 'open_editors': self.open_editors,
257
- 'breakpoints': self.breakpoints,
258
- 'project_type': self.project_type,
259
- 'dependencies': self.dependencies,
260
- 'environment_vars': ProcessState._sanitize_environment(self.environment_vars),
261
- 'last_build_status': self.last_build_status,
262
- 'last_test_results': self.last_test_results
263
- }
264
-
265
- @classmethod
266
- def from_dict(cls, data: Dict[str, Any]) -> 'ProjectState':
267
- """Create from dictionary."""
268
- return cls(
269
- project_path=data['project_path'],
270
- project_name=data['project_name'],
271
- git_branch=data.get('git_branch'),
272
- git_commit=data.get('git_commit'),
273
- git_status=data.get('git_status', {}),
274
- git_remotes=data.get('git_remotes', {}),
275
- modified_files=data.get('modified_files', []),
276
- open_editors=data.get('open_editors', []),
277
- breakpoints=data.get('breakpoints', {}),
278
- project_type=data.get('project_type', 'unknown'),
279
- dependencies=data.get('dependencies', {}),
280
- environment_vars=data.get('environment_vars', {}),
281
- last_build_status=data.get('last_build_status'),
282
- last_test_results=data.get('last_test_results')
283
- )
284
-
285
-
286
- @dataclass
287
- class RestartState:
288
- """Information about the restart event.
289
-
290
- Captures why and when a restart occurred, along with relevant
291
- metrics at the time of restart.
292
- """
293
-
294
- # Restart identification
295
- restart_id: str
296
- restart_count: int
297
-
298
- # Timing
299
- timestamp: float
300
- previous_uptime: float
301
-
302
- # Reason and context
303
- reason: str
304
- trigger: str # manual, memory, crash, scheduled
305
-
306
- # Metrics at restart
307
- memory_mb: float
308
- memory_limit_mb: float
309
- cpu_percent: float
310
-
311
- # Error information (if applicable)
312
- error_type: Optional[str]
313
- error_message: Optional[str]
314
- error_traceback: Optional[str]
315
-
316
- # Recovery information
317
- recovery_attempted: bool
318
- recovery_successful: bool
319
- data_preserved: List[str] # Types of data preserved
320
-
321
- def to_dict(self) -> Dict[str, Any]:
322
- """Convert to dictionary for serialization."""
323
- return {
324
- 'restart_id': self.restart_id,
325
- 'restart_count': self.restart_count,
326
- 'timestamp': self.timestamp,
327
- 'timestamp_iso': datetime.fromtimestamp(self.timestamp).isoformat(),
328
- 'previous_uptime': self.previous_uptime,
329
- 'reason': self.reason,
330
- 'trigger': self.trigger,
331
- 'memory_mb': round(self.memory_mb, 2),
332
- 'memory_limit_mb': round(self.memory_limit_mb, 2),
333
- 'cpu_percent': round(self.cpu_percent, 2),
334
- 'error_type': self.error_type,
335
- 'error_message': self.error_message,
336
- 'error_traceback': self.error_traceback,
337
- 'recovery_attempted': self.recovery_attempted,
338
- 'recovery_successful': self.recovery_successful,
339
- 'data_preserved': self.data_preserved
340
- }
341
-
342
- @classmethod
343
- def from_dict(cls, data: Dict[str, Any]) -> 'RestartState':
344
- """Create from dictionary."""
345
- return cls(
346
- restart_id=data['restart_id'],
347
- restart_count=data['restart_count'],
348
- timestamp=data['timestamp'],
349
- previous_uptime=data['previous_uptime'],
350
- reason=data['reason'],
351
- trigger=data['trigger'],
352
- memory_mb=data['memory_mb'],
353
- memory_limit_mb=data['memory_limit_mb'],
354
- cpu_percent=data['cpu_percent'],
355
- error_type=data.get('error_type'),
356
- error_message=data.get('error_message'),
357
- error_traceback=data.get('error_traceback'),
358
- recovery_attempted=data.get('recovery_attempted', False),
359
- recovery_successful=data.get('recovery_successful', False),
360
- data_preserved=data.get('data_preserved', [])
361
- )
362
-
363
-
364
- @dataclass
365
- class CompleteState:
366
- """Complete state snapshot combining all state components.
367
-
368
- This is the main state object that gets serialized and restored
369
- across Claude Code restarts.
370
- """
371
-
372
- # State components
373
- process_state: ProcessState
374
- conversation_state: ConversationState
375
- project_state: ProjectState
376
- restart_state: RestartState
377
-
378
- # Metadata
379
- state_version: str = "1.0.0"
380
- state_id: str = field(default_factory=lambda: datetime.now().strftime("%Y%m%d_%H%M%S"))
381
- created_at: float = field(default_factory=lambda: datetime.now().timestamp())
382
-
383
- def to_dict(self) -> Dict[str, Any]:
384
- """Convert to dictionary for serialization."""
385
- return {
386
- 'state_version': self.state_version,
387
- 'state_id': self.state_id,
388
- 'created_at': self.created_at,
389
- 'created_at_iso': datetime.fromtimestamp(self.created_at).isoformat(),
390
- 'process': self.process_state.to_dict(),
391
- 'conversation': self.conversation_state.to_dict(),
392
- 'project': self.project_state.to_dict(),
393
- 'restart': self.restart_state.to_dict()
394
- }
395
-
396
- @classmethod
397
- def from_dict(cls, data: Dict[str, Any]) -> 'CompleteState':
398
- """Create from dictionary."""
399
- return cls(
400
- state_version=data.get('state_version', '1.0.0'),
401
- state_id=data.get('state_id'),
402
- created_at=data.get('created_at'),
403
- process_state=ProcessState.from_dict(data['process']),
404
- conversation_state=ConversationState.from_dict(data['conversation']),
405
- project_state=ProjectState.from_dict(data['project']),
406
- restart_state=RestartState.from_dict(data['restart'])
407
- )
408
-
409
- def validate(self) -> List[str]:
410
- """Validate state data and return list of issues."""
411
- issues = []
412
-
413
- # Check required fields
414
- if not self.state_id:
415
- issues.append("State ID is required")
416
-
417
- if not self.process_state.pid:
418
- issues.append("Process PID is required")
419
-
420
- if not self.project_state.project_path:
421
- issues.append("Project path is required")
422
-
423
- # Check path validity
424
- if self.project_state.project_path:
425
- project_path = Path(self.project_state.project_path)
426
- if not project_path.exists():
427
- issues.append(f"Project path does not exist: {project_path}")
428
-
429
- # Check state version compatibility
430
- if self.state_version != "1.0.0":
431
- issues.append(f"Unsupported state version: {self.state_version}")
432
-
433
- return issues
@@ -1,24 +0,0 @@
1
- """
2
- Agent Services Module
3
- ====================
4
-
5
- This module contains all agent-related services including deployment,
6
- management, and registry operations.
7
-
8
- Part of TSK-0046: Service Layer Architecture Reorganization
9
-
10
- Services:
11
- - AgentDeploymentService: Handles agent deployment to Claude Code
12
- - AgentManagementService: Manages agent lifecycle and operations
13
- - AgentRegistry: Central registry for agent discovery and registration
14
- """
15
-
16
- from .deployment import AgentDeploymentService
17
- from .management import AgentManagementService
18
- from .registry import AgentRegistry
19
-
20
- __all__ = [
21
- 'AgentDeploymentService',
22
- 'AgentManagementService',
23
- 'AgentRegistry',
24
- ]