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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +2 -2
  3. claude_mpm/__main__.py +3 -2
  4. claude_mpm/agents/__init__.py +85 -79
  5. claude_mpm/agents/agent_loader.py +464 -1003
  6. claude_mpm/agents/agent_loader_integration.py +45 -45
  7. claude_mpm/agents/agents_metadata.py +29 -30
  8. claude_mpm/agents/async_agent_loader.py +156 -138
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/base_agent_loader.py +179 -151
  11. claude_mpm/agents/frontmatter_validator.py +229 -130
  12. claude_mpm/agents/schema/agent_schema.json +1 -1
  13. claude_mpm/agents/system_agent_config.py +213 -147
  14. claude_mpm/agents/templates/__init__.py +13 -13
  15. claude_mpm/agents/templates/code_analyzer.json +2 -2
  16. claude_mpm/agents/templates/data_engineer.json +1 -1
  17. claude_mpm/agents/templates/documentation.json +23 -11
  18. claude_mpm/agents/templates/engineer.json +22 -6
  19. claude_mpm/agents/templates/memory_manager.json +155 -0
  20. claude_mpm/agents/templates/ops.json +2 -2
  21. claude_mpm/agents/templates/project_organizer.json +1 -1
  22. claude_mpm/agents/templates/qa.json +1 -1
  23. claude_mpm/agents/templates/refactoring_engineer.json +222 -0
  24. claude_mpm/agents/templates/research.json +20 -14
  25. claude_mpm/agents/templates/security.json +1 -1
  26. claude_mpm/agents/templates/ticketing.json +1 -1
  27. claude_mpm/agents/templates/version_control.json +1 -1
  28. claude_mpm/agents/templates/web_qa.json +3 -1
  29. claude_mpm/agents/templates/web_ui.json +2 -2
  30. claude_mpm/cli/__init__.py +90 -49
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +21 -18
  33. claude_mpm/cli/commands/agents.py +279 -247
  34. claude_mpm/cli/commands/aggregate.py +138 -157
  35. claude_mpm/cli/commands/cleanup.py +147 -147
  36. claude_mpm/cli/commands/config.py +93 -76
  37. claude_mpm/cli/commands/info.py +17 -16
  38. claude_mpm/cli/commands/mcp.py +143 -762
  39. claude_mpm/cli/commands/mcp_command_router.py +139 -0
  40. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  41. claude_mpm/cli/commands/mcp_install_commands.py +20 -0
  42. claude_mpm/cli/commands/mcp_server_commands.py +175 -0
  43. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  44. claude_mpm/cli/commands/memory.py +239 -203
  45. claude_mpm/cli/commands/monitor.py +203 -81
  46. claude_mpm/cli/commands/run.py +380 -429
  47. claude_mpm/cli/commands/run_config_checker.py +160 -0
  48. claude_mpm/cli/commands/socketio_monitor.py +235 -0
  49. claude_mpm/cli/commands/tickets.py +305 -197
  50. claude_mpm/cli/parser.py +24 -1150
  51. claude_mpm/cli/parsers/__init__.py +29 -0
  52. claude_mpm/cli/parsers/agents_parser.py +136 -0
  53. claude_mpm/cli/parsers/base_parser.py +331 -0
  54. claude_mpm/cli/parsers/config_parser.py +85 -0
  55. claude_mpm/cli/parsers/mcp_parser.py +152 -0
  56. claude_mpm/cli/parsers/memory_parser.py +138 -0
  57. claude_mpm/cli/parsers/monitor_parser.py +104 -0
  58. claude_mpm/cli/parsers/run_parser.py +147 -0
  59. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  60. claude_mpm/cli/ticket_cli.py +7 -3
  61. claude_mpm/cli/utils.py +55 -37
  62. claude_mpm/cli_module/__init__.py +6 -6
  63. claude_mpm/cli_module/args.py +188 -140
  64. claude_mpm/cli_module/commands.py +79 -70
  65. claude_mpm/cli_module/migration_example.py +38 -60
  66. claude_mpm/config/__init__.py +32 -25
  67. claude_mpm/config/agent_config.py +151 -119
  68. claude_mpm/config/experimental_features.py +217 -0
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +36 -18
  72. claude_mpm/core/__init__.py +9 -6
  73. claude_mpm/core/agent_name_normalizer.py +68 -71
  74. claude_mpm/core/agent_registry.py +372 -521
  75. claude_mpm/core/agent_session_manager.py +74 -63
  76. claude_mpm/core/base_service.py +116 -87
  77. claude_mpm/core/cache.py +119 -153
  78. claude_mpm/core/claude_runner.py +425 -1120
  79. claude_mpm/core/config.py +263 -168
  80. claude_mpm/core/config_aliases.py +69 -61
  81. claude_mpm/core/config_constants.py +292 -0
  82. claude_mpm/core/constants.py +57 -99
  83. claude_mpm/core/container.py +211 -178
  84. claude_mpm/core/exceptions.py +233 -89
  85. claude_mpm/core/factories.py +92 -54
  86. claude_mpm/core/framework_loader.py +378 -220
  87. claude_mpm/core/hook_manager.py +198 -83
  88. claude_mpm/core/hook_performance_config.py +136 -0
  89. claude_mpm/core/injectable_service.py +61 -55
  90. claude_mpm/core/interactive_session.py +165 -155
  91. claude_mpm/core/interfaces.py +221 -195
  92. claude_mpm/core/lazy.py +96 -96
  93. claude_mpm/core/logger.py +133 -107
  94. claude_mpm/core/logging_config.py +185 -157
  95. claude_mpm/core/minimal_framework_loader.py +20 -15
  96. claude_mpm/core/mixins.py +30 -29
  97. claude_mpm/core/oneshot_session.py +215 -181
  98. claude_mpm/core/optimized_agent_loader.py +134 -138
  99. claude_mpm/core/optimized_startup.py +159 -157
  100. claude_mpm/core/pm_hook_interceptor.py +85 -72
  101. claude_mpm/core/service_registry.py +103 -101
  102. claude_mpm/core/session_manager.py +97 -87
  103. claude_mpm/core/socketio_pool.py +212 -158
  104. claude_mpm/core/tool_access_control.py +58 -51
  105. claude_mpm/core/types.py +46 -24
  106. claude_mpm/core/typing_utils.py +166 -82
  107. claude_mpm/core/unified_agent_registry.py +721 -0
  108. claude_mpm/core/unified_config.py +550 -0
  109. claude_mpm/core/unified_paths.py +549 -0
  110. claude_mpm/dashboard/index.html +1 -1
  111. claude_mpm/dashboard/open_dashboard.py +51 -17
  112. claude_mpm/dashboard/static/css/dashboard.css +27 -8
  113. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  114. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  115. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  116. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  117. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  118. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  119. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  120. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  121. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  122. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  123. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  124. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  125. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  126. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  127. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  128. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  129. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  130. claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
  131. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  132. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
  133. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  134. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  135. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  136. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  137. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  138. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  139. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  140. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  141. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  142. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  143. claude_mpm/dashboard/static/js/socket-client.js +120 -54
  144. claude_mpm/dashboard/templates/index.html +40 -50
  145. claude_mpm/experimental/cli_enhancements.py +60 -58
  146. claude_mpm/generators/__init__.py +1 -1
  147. claude_mpm/generators/agent_profile_generator.py +75 -65
  148. claude_mpm/hooks/__init__.py +1 -1
  149. claude_mpm/hooks/base_hook.py +33 -28
  150. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  151. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  152. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  153. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  154. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  155. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  156. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  157. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  158. claude_mpm/hooks/memory_integration_hook.py +140 -100
  159. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  160. claude_mpm/hooks/validation_hooks.py +57 -49
  161. claude_mpm/init.py +145 -121
  162. claude_mpm/models/__init__.py +9 -9
  163. claude_mpm/models/agent_definition.py +33 -23
  164. claude_mpm/models/agent_session.py +228 -200
  165. claude_mpm/scripts/__init__.py +1 -1
  166. claude_mpm/scripts/socketio_daemon.py +192 -75
  167. claude_mpm/scripts/socketio_server_manager.py +328 -0
  168. claude_mpm/scripts/start_activity_logging.py +25 -22
  169. claude_mpm/services/__init__.py +68 -43
  170. claude_mpm/services/agent_capabilities_service.py +271 -0
  171. claude_mpm/services/agents/__init__.py +23 -32
  172. claude_mpm/services/agents/deployment/__init__.py +3 -3
  173. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  174. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  175. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  176. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  177. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  178. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  179. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  180. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  181. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  182. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  183. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  184. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  185. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  186. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  187. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  188. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  189. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  190. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  191. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  192. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  193. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  194. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  195. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  196. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  197. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  198. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  199. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  200. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  201. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  202. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  203. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  204. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  205. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  206. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  207. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  208. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  209. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  210. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  211. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  212. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  213. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  214. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  215. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  216. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  217. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  218. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  219. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  220. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  221. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  222. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  223. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  224. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  225. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  226. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  227. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  228. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  229. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  230. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  231. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  232. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  233. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  234. claude_mpm/services/agents/loading/__init__.py +2 -2
  235. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  236. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  237. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  238. claude_mpm/services/agents/management/__init__.py +2 -2
  239. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  240. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  241. claude_mpm/services/agents/memory/__init__.py +9 -6
  242. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  243. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  244. claude_mpm/services/agents/memory/analyzer.py +430 -0
  245. claude_mpm/services/agents/memory/content_manager.py +376 -0
  246. claude_mpm/services/agents/memory/template_generator.py +468 -0
  247. claude_mpm/services/agents/registry/__init__.py +7 -10
  248. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  249. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  250. claude_mpm/services/async_session_logger.py +187 -153
  251. claude_mpm/services/claude_session_logger.py +87 -72
  252. claude_mpm/services/command_handler_service.py +217 -0
  253. claude_mpm/services/communication/__init__.py +3 -2
  254. claude_mpm/services/core/__init__.py +50 -97
  255. claude_mpm/services/core/base.py +60 -53
  256. claude_mpm/services/core/interfaces/__init__.py +188 -0
  257. claude_mpm/services/core/interfaces/agent.py +351 -0
  258. claude_mpm/services/core/interfaces/communication.py +343 -0
  259. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  260. claude_mpm/services/core/interfaces/service.py +434 -0
  261. claude_mpm/services/core/interfaces.py +19 -944
  262. claude_mpm/services/event_aggregator.py +208 -170
  263. claude_mpm/services/exceptions.py +387 -308
  264. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  265. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  266. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  267. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  268. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  269. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  270. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  271. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  272. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  273. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  274. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  275. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  276. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  277. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  278. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  279. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  280. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  281. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  282. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  283. claude_mpm/services/hook_service.py +106 -114
  284. claude_mpm/services/infrastructure/__init__.py +7 -5
  285. claude_mpm/services/infrastructure/context_preservation.py +571 -0
  286. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  287. claude_mpm/services/infrastructure/logging.py +83 -76
  288. claude_mpm/services/infrastructure/monitoring.py +547 -404
  289. claude_mpm/services/mcp_gateway/__init__.py +40 -23
  290. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  291. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  292. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  293. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  294. claude_mpm/services/mcp_gateway/core/__init__.py +14 -21
  295. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  296. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  297. claude_mpm/services/mcp_gateway/core/interfaces.py +97 -93
  298. claude_mpm/services/mcp_gateway/main.py +307 -127
  299. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  300. claude_mpm/services/mcp_gateway/registry/service_registry.py +100 -101
  301. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  302. claude_mpm/services/mcp_gateway/server/__init__.py +4 -4
  303. claude_mpm/services/mcp_gateway/server/{mcp_server.py → mcp_gateway.py} +149 -153
  304. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  305. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  306. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  307. claude_mpm/services/mcp_gateway/tools/base_adapter.py +110 -121
  308. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  309. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  310. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  311. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  312. claude_mpm/services/memory/__init__.py +2 -2
  313. claude_mpm/services/memory/builder.py +451 -362
  314. claude_mpm/services/memory/cache/__init__.py +2 -2
  315. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  316. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  317. claude_mpm/services/memory/indexed_memory.py +195 -193
  318. claude_mpm/services/memory/optimizer.py +267 -234
  319. claude_mpm/services/memory/router.py +571 -263
  320. claude_mpm/services/memory_hook_service.py +237 -0
  321. claude_mpm/services/port_manager.py +223 -0
  322. claude_mpm/services/project/__init__.py +3 -3
  323. claude_mpm/services/project/analyzer.py +451 -305
  324. claude_mpm/services/project/registry.py +262 -240
  325. claude_mpm/services/recovery_manager.py +287 -231
  326. claude_mpm/services/response_tracker.py +87 -67
  327. claude_mpm/services/runner_configuration_service.py +587 -0
  328. claude_mpm/services/session_management_service.py +304 -0
  329. claude_mpm/services/socketio/__init__.py +4 -4
  330. claude_mpm/services/socketio/client_proxy.py +174 -0
  331. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  332. claude_mpm/services/socketio/handlers/base.py +44 -30
  333. claude_mpm/services/socketio/handlers/connection.py +145 -65
  334. claude_mpm/services/socketio/handlers/file.py +123 -108
  335. claude_mpm/services/socketio/handlers/git.py +607 -373
  336. claude_mpm/services/socketio/handlers/hook.py +170 -0
  337. claude_mpm/services/socketio/handlers/memory.py +4 -4
  338. claude_mpm/services/socketio/handlers/project.py +4 -4
  339. claude_mpm/services/socketio/handlers/registry.py +53 -38
  340. claude_mpm/services/socketio/server/__init__.py +18 -0
  341. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  342. claude_mpm/services/socketio/server/core.py +399 -0
  343. claude_mpm/services/socketio/server/main.py +323 -0
  344. claude_mpm/services/socketio_client_manager.py +160 -133
  345. claude_mpm/services/socketio_server.py +36 -1885
  346. claude_mpm/services/subprocess_launcher_service.py +316 -0
  347. claude_mpm/services/system_instructions_service.py +258 -0
  348. claude_mpm/services/ticket_manager.py +20 -534
  349. claude_mpm/services/utility_service.py +285 -0
  350. claude_mpm/services/version_control/__init__.py +18 -21
  351. claude_mpm/services/version_control/branch_strategy.py +20 -10
  352. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  353. claude_mpm/services/version_control/git_operations.py +52 -21
  354. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  355. claude_mpm/services/version_control/version_parser.py +145 -125
  356. claude_mpm/services/version_service.py +270 -0
  357. claude_mpm/storage/__init__.py +9 -0
  358. claude_mpm/storage/state_storage.py +552 -0
  359. claude_mpm/ticket_wrapper.py +2 -2
  360. claude_mpm/utils/__init__.py +2 -2
  361. claude_mpm/utils/agent_dependency_loader.py +453 -243
  362. claude_mpm/utils/config_manager.py +157 -118
  363. claude_mpm/utils/console.py +1 -1
  364. claude_mpm/utils/dependency_cache.py +102 -107
  365. claude_mpm/utils/dependency_manager.py +52 -47
  366. claude_mpm/utils/dependency_strategies.py +131 -96
  367. claude_mpm/utils/environment_context.py +110 -102
  368. claude_mpm/utils/error_handler.py +75 -55
  369. claude_mpm/utils/file_utils.py +80 -67
  370. claude_mpm/utils/framework_detection.py +12 -11
  371. claude_mpm/utils/import_migration_example.py +12 -60
  372. claude_mpm/utils/imports.py +48 -45
  373. claude_mpm/utils/path_operations.py +100 -93
  374. claude_mpm/utils/robust_installer.py +172 -164
  375. claude_mpm/utils/session_logging.py +30 -23
  376. claude_mpm/utils/subprocess_utils.py +99 -61
  377. claude_mpm/validation/__init__.py +1 -1
  378. claude_mpm/validation/agent_validator.py +151 -111
  379. claude_mpm/validation/frontmatter_validator.py +92 -71
  380. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +51 -2
  381. claude_mpm-4.0.3.dist-info/RECORD +402 -0
  382. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
  383. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
  384. claude_mpm/config/memory_guardian_config.py +0 -325
  385. claude_mpm/core/config_paths.py +0 -150
  386. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  387. claude_mpm/deployment_paths.py +0 -261
  388. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  389. claude_mpm/models/state_models.py +0 -433
  390. claude_mpm/services/agent/__init__.py +0 -24
  391. claude_mpm/services/agent/deployment.py +0 -2548
  392. claude_mpm/services/agent/management.py +0 -598
  393. claude_mpm/services/agent/registry.py +0 -813
  394. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  395. claude_mpm/services/communication/socketio.py +0 -1935
  396. claude_mpm/services/communication/websocket.py +0 -479
  397. claude_mpm/services/framework_claude_md_generator.py +0 -624
  398. claude_mpm/services/health_monitor.py +0 -893
  399. claude_mpm/services/infrastructure/memory_guardian.py +0 -770
  400. claude_mpm/services/mcp_gateway/server/mcp_server_simple.py +0 -444
  401. claude_mpm/services/optimized_hook_service.py +0 -542
  402. claude_mpm/services/project_analyzer.py +0 -864
  403. claude_mpm/services/project_registry.py +0 -608
  404. claude_mpm/services/standalone_socketio_server.py +0 -1300
  405. claude_mpm/services/ticket_manager_di.py +0 -318
  406. claude_mpm/services/ticketing_service_original.py +0 -510
  407. claude_mpm/utils/paths.py +0 -395
  408. claude_mpm/utils/platform_memory.py +0 -524
  409. claude_mpm-3.9.9.dist-info/RECORD +0 -293
  410. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
  411. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
@@ -8,20 +8,21 @@ Enforces template structure and provides section-specific update methods.
8
8
  """
9
9
 
10
10
  import logging
11
- from pathlib import Path
12
- from typing import Dict, List, Optional, Any
13
- from datetime import datetime
14
11
  from dataclasses import dataclass, field
12
+ from datetime import datetime
15
13
  from enum import Enum
14
+ from pathlib import Path
15
+ from typing import Any, Dict, List, Optional
16
16
 
17
- from claude_mpm.services.memory.cache.shared_prompt_cache import SharedPromptCache
18
17
  from claude_mpm.agents.base_agent_loader import clear_base_agent_cache
18
+ from claude_mpm.services.memory.cache.shared_prompt_cache import SharedPromptCache
19
19
 
20
20
  logger = logging.getLogger(__name__)
21
21
 
22
22
 
23
23
  class BaseAgentSection(str, Enum):
24
24
  """Base agent markdown sections."""
25
+
25
26
  FRAMEWORK_CONTEXT = "Agent Framework Context"
26
27
  BEHAVIORAL_RULES = "Common Behavioral Rules"
27
28
  TEMPORAL_CONTEXT = "Temporal Context Integration"
@@ -39,10 +40,11 @@ class BaseAgentSection(str, Enum):
39
40
  @dataclass
40
41
  class BaseAgentStructure:
41
42
  """Structured representation of base_agent.md content."""
43
+
42
44
  # Header
43
45
  title: str = "Base Agent Instructions"
44
46
  description: str = "These instructions are prepended to EVERY agent prompt."
45
-
47
+
46
48
  # Main sections
47
49
  framework_context: Dict[str, Any] = field(default_factory=dict)
48
50
  behavioral_rules: Dict[str, List[str]] = field(default_factory=dict)
@@ -56,47 +58,48 @@ class BaseAgentStructure:
56
58
  framework_integration: Dict[str, List[str]] = field(default_factory=dict)
57
59
  universal_constraints: List[str] = field(default_factory=list)
58
60
  success_criteria: List[str] = field(default_factory=list)
59
-
61
+
60
62
  # Raw sections for preservation
61
63
  raw_sections: Dict[str, str] = field(default_factory=dict)
62
64
 
63
65
 
64
66
  class BaseAgentManager:
65
67
  """Manages base_agent.md with structured updates and validation."""
66
-
68
+
67
69
  def __init__(self, agents_dir: Optional[Path] = None):
68
70
  """Initialize BaseAgentManager."""
69
71
  self.agents_dir = agents_dir or Path(__file__).parent.parent / "agents"
70
72
  self.base_agent_path = self.agents_dir / "BASE_AGENT_TEMPLATE.md"
71
73
  self.cache = SharedPromptCache.get_instance()
72
-
74
+
73
75
  def read_base_agent(self) -> Optional[BaseAgentStructure]:
74
76
  """
75
77
  Read and parse base_agent.md into structured format.
76
-
78
+
77
79
  Returns:
78
80
  BaseAgentStructure or None if file doesn't exist
79
81
  """
80
82
  if not self.base_agent_path.exists():
81
83
  logger.error(f"base_agent.md not found at {self.base_agent_path}")
82
84
  return None
83
-
85
+
84
86
  try:
85
- content = self.base_agent_path.read_text(encoding='utf-8')
87
+ content = self.base_agent_path.read_text(encoding="utf-8")
86
88
  return self._parse_base_agent(content)
87
89
  except Exception as e:
88
90
  logger.error(f"Error reading base_agent.md: {e}")
89
91
  return None
90
-
91
- def update_base_agent(self, updates: Dict[str, Any],
92
- backup: bool = True) -> Optional[BaseAgentStructure]:
92
+
93
+ def update_base_agent(
94
+ self, updates: Dict[str, Any], backup: bool = True
95
+ ) -> Optional[BaseAgentStructure]:
93
96
  """
94
97
  Update base_agent.md with structured updates.
95
-
98
+
96
99
  Args:
97
100
  updates: Dictionary of updates to apply
98
101
  backup: Whether to create backup before updating
99
-
102
+
100
103
  Returns:
101
104
  Updated BaseAgentStructure or None if failed
102
105
  """
@@ -105,46 +108,47 @@ class BaseAgentManager:
105
108
  if not current:
106
109
  logger.error("Cannot update - base_agent.md not found")
107
110
  return None
108
-
111
+
109
112
  # Create backup if requested
110
113
  if backup:
111
114
  self._create_backup()
112
-
115
+
113
116
  # Apply updates
114
117
  for key, value in updates.items():
115
118
  if hasattr(current, key):
116
119
  setattr(current, key, value)
117
120
  else:
118
121
  logger.warning(f"Unknown base agent attribute: {key}")
119
-
122
+
120
123
  # Convert back to markdown and save
121
124
  content = self._structure_to_markdown(current)
122
- self.base_agent_path.write_text(content, encoding='utf-8')
123
-
125
+ self.base_agent_path.write_text(content, encoding="utf-8")
126
+
124
127
  # Clear caches
125
128
  clear_base_agent_cache()
126
129
  self.cache.invalidate("base_agent:instructions")
127
-
130
+
128
131
  logger.info("Base agent updated successfully")
129
132
  return current
130
-
131
- def update_section(self, section: BaseAgentSection, content: str,
132
- backup: bool = True) -> Optional[BaseAgentStructure]:
133
+
134
+ def update_section(
135
+ self, section: BaseAgentSection, content: str, backup: bool = True
136
+ ) -> Optional[BaseAgentStructure]:
133
137
  """
134
138
  Update a specific section of base_agent.md.
135
-
139
+
136
140
  Args:
137
141
  section: Section to update
138
142
  content: New section content
139
143
  backup: Whether to create backup
140
-
144
+
141
145
  Returns:
142
146
  Updated BaseAgentStructure or None
143
147
  """
144
148
  current = self.read_base_agent()
145
149
  if not current:
146
150
  return None
147
-
151
+
148
152
  # Map sections to structure attributes
149
153
  section_map = {
150
154
  BaseAgentSection.FRAMEWORK_CONTEXT: "framework_context",
@@ -158,15 +162,18 @@ class BaseAgentManager:
158
162
  BaseAgentSection.OUTPUT_FORMATS: "output_formats",
159
163
  BaseAgentSection.FRAMEWORK_INTEGRATION: "framework_integration",
160
164
  BaseAgentSection.CONSTRAINTS: "universal_constraints",
161
- BaseAgentSection.SUCCESS_CRITERIA: "success_criteria"
165
+ BaseAgentSection.SUCCESS_CRITERIA: "success_criteria",
162
166
  }
163
-
167
+
164
168
  if section in section_map:
165
169
  attr_name = section_map[section]
166
-
170
+
167
171
  # Parse content based on section type
168
- if section in [BaseAgentSection.ESCALATION, BaseAgentSection.CONSTRAINTS,
169
- BaseAgentSection.SUCCESS_CRITERIA]:
172
+ if section in [
173
+ BaseAgentSection.ESCALATION,
174
+ BaseAgentSection.CONSTRAINTS,
175
+ BaseAgentSection.SUCCESS_CRITERIA,
176
+ ]:
170
177
  # List sections
171
178
  parsed_content = self._parse_list_content(content)
172
179
  setattr(current, attr_name, parsed_content)
@@ -176,68 +183,68 @@ class BaseAgentManager:
176
183
  else:
177
184
  # Dictionary sections - preserve raw for now
178
185
  current.raw_sections[section.value] = content
179
-
186
+
180
187
  # Update and return
181
188
  return self.update_base_agent({}, backup=backup)
182
-
189
+
183
190
  def add_behavioral_rule(self, category: str, rule: str) -> bool:
184
191
  """Add a new behavioral rule to a specific category."""
185
192
  current = self.read_base_agent()
186
193
  if not current:
187
194
  return False
188
-
195
+
189
196
  if category not in current.behavioral_rules:
190
197
  current.behavioral_rules[category] = []
191
-
198
+
192
199
  if rule not in current.behavioral_rules[category]:
193
200
  current.behavioral_rules[category].append(rule)
194
201
  self.update_base_agent({"behavioral_rules": current.behavioral_rules})
195
202
  return True
196
-
203
+
197
204
  return False
198
-
205
+
199
206
  def add_quality_standard(self, category: str, standard: str) -> bool:
200
207
  """Add a new quality standard to a specific category."""
201
208
  current = self.read_base_agent()
202
209
  if not current:
203
210
  return False
204
-
211
+
205
212
  if category not in current.quality_standards:
206
213
  current.quality_standards[category] = []
207
-
214
+
208
215
  if standard not in current.quality_standards[category]:
209
216
  current.quality_standards[category].append(standard)
210
217
  self.update_base_agent({"quality_standards": current.quality_standards})
211
218
  return True
212
-
219
+
213
220
  return False
214
-
221
+
215
222
  def add_escalation_trigger(self, trigger: str) -> bool:
216
223
  """Add a new escalation trigger."""
217
224
  current = self.read_base_agent()
218
225
  if not current:
219
226
  return False
220
-
227
+
221
228
  if trigger not in current.escalation_triggers:
222
229
  current.escalation_triggers.append(trigger)
223
230
  self.update_base_agent({"escalation_triggers": current.escalation_triggers})
224
231
  return True
225
-
232
+
226
233
  return False
227
-
234
+
228
235
  def validate_structure(self) -> Dict[str, bool]:
229
236
  """
230
237
  Validate that base_agent.md has all required sections.
231
-
238
+
232
239
  Returns:
233
240
  Dictionary of section names to validation status
234
241
  """
235
242
  current = self.read_base_agent()
236
243
  if not current:
237
244
  return {section.value: False for section in BaseAgentSection}
238
-
245
+
239
246
  validation = {}
240
-
247
+
241
248
  # Check each section
242
249
  for section in BaseAgentSection:
243
250
  if section == BaseAgentSection.FRAMEWORK_CONTEXT:
@@ -264,91 +271,93 @@ class BaseAgentManager:
264
271
  validation[section.value] = bool(current.universal_constraints)
265
272
  elif section == BaseAgentSection.SUCCESS_CRITERIA:
266
273
  validation[section.value] = bool(current.success_criteria)
267
-
274
+
268
275
  return validation
269
-
276
+
270
277
  # Private helper methods
271
-
278
+
272
279
  def _parse_base_agent(self, content: str) -> BaseAgentStructure:
273
280
  """Parse base_agent.md content into structured format."""
274
281
  structure = BaseAgentStructure()
275
-
282
+
276
283
  # For now, store raw content in sections
277
284
  # Full parsing implementation would extract structured data
278
- lines = content.split('\n')
285
+ lines = content.split("\n")
279
286
  current_section = None
280
287
  section_content = []
281
-
288
+
282
289
  for line in lines:
283
- if line.startswith('## '):
290
+ if line.startswith("## "):
284
291
  # Save previous section
285
292
  if current_section:
286
- structure.raw_sections[current_section] = '\n'.join(section_content)
287
-
293
+ structure.raw_sections[current_section] = "\n".join(section_content)
294
+
288
295
  # Start new section
289
296
  current_section = line[3:].strip()
290
297
  section_content = []
291
298
  elif current_section:
292
299
  section_content.append(line)
293
-
300
+
294
301
  # Save last section
295
302
  if current_section:
296
- structure.raw_sections[current_section] = '\n'.join(section_content)
297
-
303
+ structure.raw_sections[current_section] = "\n".join(section_content)
304
+
298
305
  # Parse specific sections
299
306
  if BaseAgentSection.ESCALATION.value in structure.raw_sections:
300
307
  structure.escalation_triggers = self._parse_list_content(
301
308
  structure.raw_sections[BaseAgentSection.ESCALATION.value]
302
309
  )
303
-
310
+
304
311
  return structure
305
-
312
+
306
313
  def _structure_to_markdown(self, structure: BaseAgentStructure) -> str:
307
314
  """Convert BaseAgentStructure back to markdown format."""
308
315
  lines = []
309
-
316
+
310
317
  # Header
311
318
  lines.append(f"# {structure.title}")
312
319
  lines.append("")
313
320
  lines.append("<!-- ")
314
321
  lines.append(structure.description)
315
- lines.append("They contain common rules, behaviors, and constraints that apply to ALL agents.")
322
+ lines.append(
323
+ "They contain common rules, behaviors, and constraints that apply to ALL agents."
324
+ )
316
325
  lines.append("-->")
317
326
  lines.append("")
318
-
327
+
319
328
  # Write sections from raw content (preserves formatting)
320
329
  for section in BaseAgentSection:
321
330
  if section.value in structure.raw_sections:
322
331
  lines.append(f"## {section.value}")
323
332
  lines.append(structure.raw_sections[section.value])
324
333
  lines.append("")
325
-
326
- return '\n'.join(lines)
327
-
334
+
335
+ return "\n".join(lines)
336
+
328
337
  def _parse_list_content(self, content: str) -> List[str]:
329
338
  """Parse list items from markdown content."""
330
339
  items = []
331
- for line in content.split('\n'):
340
+ for line in content.split("\n"):
332
341
  line = line.strip()
333
- if line.startswith('- '):
342
+ if line.startswith("- "):
334
343
  items.append(line[2:].strip())
335
- elif line.startswith('* '):
344
+ elif line.startswith("* "):
336
345
  items.append(line[2:].strip())
337
- elif line.startswith('**') and line.endswith('**'):
346
+ elif line.startswith("**") and line.endswith("**"):
338
347
  # Skip bold headers
339
348
  continue
340
349
  return items
341
-
350
+
342
351
  def _create_backup(self) -> Path:
343
352
  """Create a timestamped backup of base_agent.md."""
344
353
  timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
345
354
  backup_path = self.base_agent_path.parent / f"base_agent_{timestamp}.backup"
346
-
355
+
347
356
  if self.base_agent_path.exists():
348
- content = self.base_agent_path.read_text(encoding='utf-8')
349
- backup_path.write_text(content, encoding='utf-8')
357
+ content = self.base_agent_path.read_text(encoding="utf-8")
358
+ backup_path.write_text(content, encoding="utf-8")
350
359
  logger.info(f"Created backup at {backup_path}")
351
-
360
+
352
361
  return backup_path
353
362
 
354
363
 
@@ -361,11 +370,11 @@ def get_base_agent_manager() -> BaseAgentManager:
361
370
  def update_base_agent_section(section: BaseAgentSection, content: str) -> bool:
362
371
  """
363
372
  Quick function to update a base agent section.
364
-
373
+
365
374
  Args:
366
375
  section: Section to update
367
376
  content: New content for the section
368
-
377
+
369
378
  Returns:
370
379
  True if successful, False otherwise
371
380
  """
@@ -377,4 +386,4 @@ def update_base_agent_section(section: BaseAgentSection, content: str) -> bool:
377
386
  def validate_base_agent() -> Dict[str, bool]:
378
387
  """Quick function to validate base agent structure."""
379
388
  manager = get_base_agent_manager()
380
- return manager.validate_structure()
389
+ return manager.validate_structure()