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
@@ -1,3 +1,5 @@
1
+ from pathlib import Path
2
+
1
3
  """
2
4
  Framework INSTRUCTIONS.md Generator Service
3
5
 
@@ -5,29 +7,28 @@ This service provides structured generation of the framework INSTRUCTIONS.md tem
5
7
  (legacy: CLAUDE.md) with auto-versioning, section management, and deployment capabilities.
6
8
  """
7
9
 
8
- from typing import Dict, Optional, Any, List, Tuple
9
- from pathlib import Path
10
+ from typing import Any, Dict, List, Optional, Tuple
10
11
 
11
- from .version_manager import VersionManager
12
- from .content_validator import ContentValidator
13
12
  from .content_assembler import ContentAssembler
13
+ from .content_validator import ContentValidator
14
14
  from .deployment_manager import DeploymentManager
15
- from .section_manager import SectionManager
16
15
  from .section_generators import section_registry
16
+ from .section_manager import SectionManager
17
+ from .version_manager import VersionManager
17
18
 
18
19
 
19
20
  class FrameworkClaudeMdGenerator:
20
21
  """
21
- Generates and manages the framework INSTRUCTIONS.md template (legacy: CLAUDE.md)
22
+ Generates and manages the framework INSTRUCTIONS.md template (legacy: CLAUDE.md)
22
23
  with structured sections, auto-versioning, and deployment capabilities.
23
-
24
+
24
25
  This is the main facade class that coordinates all the submodules.
25
26
  """
26
-
27
+
27
28
  def __init__(self, target_filename: str = "INSTRUCTIONS.md"):
28
29
  """
29
30
  Initialize the generator with current framework version.
30
-
31
+
31
32
  Args:
32
33
  target_filename: Target filename for deployment (default: "INSTRUCTIONS.md")
33
34
  Can be set to "CLAUDE.md" for legacy compatibility
@@ -37,103 +38,100 @@ class FrameworkClaudeMdGenerator:
37
38
  self.validator = ContentValidator()
38
39
  self.assembler = ContentAssembler()
39
40
  self.section_manager = SectionManager()
40
-
41
+
41
42
  # Initialize deployment manager with dependencies
42
43
  self.deployment_manager = DeploymentManager(
43
- self.version_manager,
44
- self.validator,
45
- target_filename=target_filename
44
+ self.version_manager, self.validator, target_filename=target_filename
46
45
  )
47
-
46
+
48
47
  # Get framework version
49
48
  self.framework_version = self.version_manager.framework_version
50
-
49
+
51
50
  # Initialize sections
52
51
  self._initialize_sections()
53
-
52
+
54
53
  def _initialize_sections(self):
55
54
  """Initialize all sections in the required order."""
56
55
  # Register all default sections with their generators
57
56
  section_order = [
58
- 'header',
59
- 'role_designation',
60
- 'agents',
61
- 'todo_task_tools',
62
- 'claude_pm_init',
63
- 'orchestration_principles',
64
- 'subprocess_validation',
65
- 'delegation_constraints',
66
- 'environment_config',
67
- 'troubleshooting',
68
- 'core_responsibilities',
69
- 'footer'
57
+ "header",
58
+ "role_designation",
59
+ "agents",
60
+ "todo_task_tools",
61
+ "claude_pm_init",
62
+ "orchestration_principles",
63
+ "subprocess_validation",
64
+ "delegation_constraints",
65
+ "environment_config",
66
+ "troubleshooting",
67
+ "core_responsibilities",
68
+ "footer",
70
69
  ]
71
-
70
+
72
71
  for section_name in section_order:
73
72
  generator_class = section_registry.get(section_name)
74
73
  if generator_class:
75
74
  generator_instance = generator_class(self.framework_version)
76
75
  self.section_manager.register_section(
77
- section_name,
78
- generator_instance.generate
76
+ section_name, generator_instance.generate
79
77
  )
80
-
81
- def generate(self,
82
- current_content: Optional[str] = None,
83
- template_variables: Optional[Dict[str, str]] = None) -> str:
78
+
79
+ def generate(
80
+ self,
81
+ current_content: Optional[str] = None,
82
+ template_variables: Optional[Dict[str, str]] = None,
83
+ ) -> str:
84
84
  """
85
85
  Generate the complete INSTRUCTIONS.md/CLAUDE.md content.
86
-
86
+
87
87
  Args:
88
88
  current_content: Current INSTRUCTIONS.md/CLAUDE.md content for version parsing
89
89
  template_variables: Variables to substitute in the template
90
-
90
+
91
91
  Returns:
92
92
  str: Complete INSTRUCTIONS.md/CLAUDE.md content
93
93
  """
94
94
  # Auto-increment version if current content provided
95
95
  version = self.version_manager.auto_increment_version(current_content)
96
-
96
+
97
97
  # Create metadata for header
98
98
  metadata = self.assembler.create_metadata_dict(
99
- version=version,
100
- framework_version=self.framework_version
99
+ version=version, framework_version=self.framework_version
101
100
  )
102
-
101
+
103
102
  # Update header section with metadata
104
103
  sections = self.section_manager.get_sections()
105
- if 'header' in sections:
106
- generator_func, _ = sections['header']
107
- sections['header'] = (generator_func, metadata)
108
-
104
+ if "header" in sections:
105
+ generator_func, _ = sections["header"]
106
+ sections["header"] = (generator_func, metadata)
107
+
109
108
  # Assemble content
110
- content = self.assembler.assemble_content(
111
- sections,
112
- template_variables
113
- )
114
-
109
+ content = self.assembler.assemble_content(sections, template_variables)
110
+
115
111
  return content
116
-
112
+
117
113
  def validate_content(self, content: str) -> Tuple[bool, List[str]]:
118
114
  """
119
115
  Validate that generated content has all required sections.
120
-
116
+
121
117
  Args:
122
118
  content: Content to validate
123
-
119
+
124
120
  Returns:
125
121
  Tuple of (is_valid, list_of_issues)
126
122
  """
127
123
  return self.validator.validate_content(content)
128
-
129
- def deploy_to_parent(self, parent_path: Path, force: bool = False) -> Tuple[bool, str]:
124
+
125
+ def deploy_to_parent(
126
+ self, parent_path: Path, force: bool = False
127
+ ) -> Tuple[bool, str]:
130
128
  """
131
129
  Deploy generated content to a parent directory.
132
-
130
+
133
131
  Args:
134
132
  parent_path: Path to parent directory
135
133
  force: Force deployment even if versions match
136
-
134
+
137
135
  Returns:
138
136
  Tuple of (success, message)
139
137
  """
@@ -143,71 +141,69 @@ class FrameworkClaudeMdGenerator:
143
141
  if not target_file.exists() and (parent_path / "CLAUDE.md").exists():
144
142
  target_file = parent_path / "CLAUDE.md"
145
143
  current_content = None
146
-
144
+
147
145
  if target_file.exists():
148
- with open(target_file, 'r') as f:
146
+ with open(target_file, "r") as f:
149
147
  current_content = f.read()
150
-
148
+
151
149
  # Generate new content
152
150
  new_content = self.generate(current_content=current_content)
153
-
151
+
154
152
  # Deploy using deployment manager
155
- return self.deployment_manager.deploy_to_parent(
156
- new_content,
157
- parent_path,
158
- force
159
- )
160
-
153
+ return self.deployment_manager.deploy_to_parent(new_content, parent_path, force)
154
+
161
155
  def get_section_list(self) -> List[str]:
162
156
  """
163
157
  Get list of all section names in order.
164
-
158
+
165
159
  Returns:
166
160
  List of section names
167
161
  """
168
162
  return self.section_manager.get_section_list()
169
-
163
+
170
164
  def update_section(self, section_name: str, content: str) -> bool:
171
165
  """
172
166
  Update a specific section's generator to return custom content.
173
-
167
+
174
168
  Args:
175
169
  section_name: Name of section to update
176
170
  content: New content for the section
177
-
171
+
178
172
  Returns:
179
173
  bool: Success status
180
174
  """
181
175
  return self.section_manager.update_section(section_name, content)
182
-
183
- def add_custom_section(self, section_name: str, content: str, after: Optional[str] = None):
176
+
177
+ def add_custom_section(
178
+ self, section_name: str, content: str, after: Optional[str] = None
179
+ ):
184
180
  """
185
181
  Add a custom section to the generator.
186
-
182
+
187
183
  Args:
188
184
  section_name: Name for the new section
189
185
  content: Content for the section
190
186
  after: Section name to insert after (None = append at end)
191
187
  """
192
188
  self.section_manager.add_custom_section(section_name, content, after)
193
-
189
+
194
190
  # Compatibility methods to match original API
195
191
  def _get_framework_version(self) -> str:
196
192
  """Get framework version (compatibility method)."""
197
193
  return self.version_manager._get_framework_version()
198
-
194
+
199
195
  def _parse_current_version(self, content: str) -> Tuple[str, int]:
200
196
  """Parse current version (compatibility method)."""
201
197
  return self.version_manager.parse_current_version(content)
202
-
198
+
203
199
  def _auto_increment_version(self, current_content: Optional[str] = None) -> str:
204
200
  """Auto-increment version (compatibility method)."""
205
201
  return self.version_manager.auto_increment_version(current_content)
206
-
202
+
207
203
  def _generate_content_hash(self) -> str:
208
204
  """Generate content hash (compatibility method)."""
209
205
  return self.assembler.generate_content_hash()
210
206
 
211
207
 
212
208
  # Export the main class
213
- __all__ = ['FrameworkClaudeMdGenerator']
209
+ __all__ = ["FrameworkClaudeMdGenerator"]
@@ -5,81 +5,83 @@ Assembles sections and applies template variable substitution.
5
5
  """
6
6
 
7
7
  import hashlib
8
- from datetime import datetime
9
- from typing import Dict, List, Optional, Any
10
- from collections import OrderedDict
11
8
  import logging
9
+ from collections import OrderedDict
10
+ from datetime import datetime
11
+ from typing import Any, Dict, List, Optional
12
12
 
13
- from claude_mpm.services.agents.registry import DeployedAgentDiscovery
14
13
  from claude_mpm.services.agents.management import AgentCapabilitiesGenerator
14
+ from claude_mpm.services.agents.registry import DeployedAgentDiscovery
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
18
18
 
19
19
  class ContentAssembler:
20
20
  """Assembles framework CLAUDE.md content from sections."""
21
-
21
+
22
22
  def __init__(self):
23
23
  """Initialize content assembler."""
24
24
  self.template_variables = {}
25
25
  self.agent_discovery = DeployedAgentDiscovery()
26
26
  self.capabilities_generator = AgentCapabilitiesGenerator()
27
- logger.debug("Initialized ContentAssembler with dynamic agent capabilities support")
28
-
27
+ logger.debug(
28
+ "Initialized ContentAssembler with dynamic agent capabilities support"
29
+ )
30
+
29
31
  def generate_content_hash(self) -> str:
30
32
  """
31
33
  Generate a content hash for integrity verification.
32
-
34
+
33
35
  Returns:
34
36
  str: 16-character hash of content
35
37
  """
36
38
  timestamp = datetime.utcnow().isoformat()
37
39
  hash_obj = hashlib.sha256(timestamp.encode())
38
40
  return hash_obj.hexdigest()[:16]
39
-
40
- def assemble_content(self,
41
- sections: OrderedDict,
42
- template_variables: Optional[Dict[str, str]] = None) -> str:
41
+
42
+ def assemble_content(
43
+ self, sections: OrderedDict, template_variables: Optional[Dict[str, str]] = None
44
+ ) -> str:
43
45
  """
44
46
  Assemble complete content from sections.
45
-
47
+
46
48
  Args:
47
49
  sections: OrderedDict of section_name -> (generator_func, section_data)
48
50
  template_variables: Variables to substitute in the template
49
-
51
+
50
52
  Returns:
51
53
  str: Complete assembled content
52
54
  """
53
55
  # Store template variables
54
56
  if template_variables:
55
57
  self.template_variables = template_variables
56
-
58
+
57
59
  # Generate all sections
58
60
  content_parts = []
59
61
  for section_name, (generator_func, section_data) in sections.items():
60
62
  section_content = generator_func(section_data)
61
63
  content_parts.append(section_content)
62
-
64
+
63
65
  # Join all sections
64
- full_content = '\n'.join(content_parts)
65
-
66
+ full_content = "\n".join(content_parts)
67
+
66
68
  # Apply template variable substitution
67
69
  full_content = self.apply_template_variables(full_content)
68
-
70
+
69
71
  return full_content
70
-
72
+
71
73
  def apply_template_variables(self, content: str) -> str:
72
74
  """
73
75
  Apply template variable substitution to content.
74
-
76
+
75
77
  WHY: Enhanced to support dynamic agent capabilities generation.
76
78
  - Generates fresh agent capabilities on each call
77
79
  - Provides graceful fallback if generation fails
78
80
  - Ensures INSTRUCTIONS.md always reflects current deployed agents
79
-
81
+
80
82
  Args:
81
83
  content: Content with template variables
82
-
84
+
83
85
  Returns:
84
86
  str: Content with variables substituted
85
87
  """
@@ -89,55 +91,63 @@ class ContentAssembler:
89
91
  # Discover deployed agents
90
92
  deployed_agents = self.agent_discovery.discover_deployed_agents()
91
93
  # Generate capabilities content
92
- capabilities_content = self.capabilities_generator.generate_capabilities_section(deployed_agents)
94
+ capabilities_content = (
95
+ self.capabilities_generator.generate_capabilities_section(
96
+ deployed_agents
97
+ )
98
+ )
93
99
  # Add to template variables
94
- self.template_variables['capabilities-list'] = capabilities_content
95
- logger.info(f"Generated dynamic capabilities for {len(deployed_agents)} agents")
100
+ self.template_variables["capabilities-list"] = capabilities_content
101
+ logger.info(
102
+ f"Generated dynamic capabilities for {len(deployed_agents)} agents"
103
+ )
96
104
  except Exception as e:
97
105
  logger.error(f"Failed to generate dynamic capabilities: {e}")
98
106
  # Fallback is handled by the generator's internal fallback mechanism
99
-
107
+
100
108
  # Apply all template variables
101
109
  for var_name, var_value in self.template_variables.items():
102
110
  placeholder = f"{{{{{var_name}}}}}"
103
111
  content = content.replace(placeholder, var_value)
104
-
112
+
105
113
  return content
106
-
107
- def merge_sections(self,
108
- base_sections: OrderedDict,
109
- custom_sections: Dict[str, tuple]) -> OrderedDict:
114
+
115
+ def merge_sections(
116
+ self, base_sections: OrderedDict, custom_sections: Dict[str, tuple]
117
+ ) -> OrderedDict:
110
118
  """
111
119
  Merge custom sections with base sections.
112
-
120
+
113
121
  Args:
114
122
  base_sections: Base section definitions
115
123
  custom_sections: Custom sections to merge
116
-
124
+
117
125
  Returns:
118
126
  OrderedDict: Merged sections
119
127
  """
120
128
  merged = OrderedDict(base_sections)
121
-
129
+
122
130
  for section_name, section_def in custom_sections.items():
123
131
  merged[section_name] = section_def
124
-
132
+
125
133
  return merged
126
-
127
- def insert_section_after(self,
128
- sections: OrderedDict,
129
- new_section_name: str,
130
- new_section_def: tuple,
131
- after_section: str) -> OrderedDict:
134
+
135
+ def insert_section_after(
136
+ self,
137
+ sections: OrderedDict,
138
+ new_section_name: str,
139
+ new_section_def: tuple,
140
+ after_section: str,
141
+ ) -> OrderedDict:
132
142
  """
133
143
  Insert a new section after a specified section.
134
-
144
+
135
145
  Args:
136
146
  sections: Current sections
137
147
  new_section_name: Name of new section
138
148
  new_section_def: Definition tuple for new section
139
149
  after_section: Section to insert after
140
-
150
+
141
151
  Returns:
142
152
  OrderedDict: Updated sections
143
153
  """
@@ -145,36 +155,35 @@ class ContentAssembler:
145
155
  # If target section doesn't exist, just append
146
156
  sections[new_section_name] = new_section_def
147
157
  return sections
148
-
158
+
149
159
  new_sections = OrderedDict()
150
160
  for key, value in sections.items():
151
161
  new_sections[key] = value
152
162
  if key == after_section:
153
163
  new_sections[new_section_name] = new_section_def
154
-
164
+
155
165
  return new_sections
156
-
157
- def create_metadata_dict(self,
158
- version: str,
159
- framework_version: str,
160
- content_hash: Optional[str] = None) -> Dict[str, Any]:
166
+
167
+ def create_metadata_dict(
168
+ self, version: str, framework_version: str, content_hash: Optional[str] = None
169
+ ) -> Dict[str, Any]:
161
170
  """
162
171
  Create metadata dictionary for header generation.
163
-
172
+
164
173
  Args:
165
174
  version: CLAUDE_MD_VERSION string
166
175
  framework_version: Framework version
167
176
  content_hash: Optional content hash
168
-
177
+
169
178
  Returns:
170
179
  Dict: Metadata for header
171
180
  """
172
181
  timestamp = datetime.utcnow().isoformat()
173
-
182
+
174
183
  return {
175
- 'version': version,
176
- 'framework_version': framework_version,
177
- 'deployment_date': timestamp,
178
- 'last_updated': timestamp,
179
- 'content_hash': content_hash or self.generate_content_hash()
180
- }
184
+ "version": version,
185
+ "framework_version": framework_version,
186
+ "deployment_date": timestamp,
187
+ "last_updated": timestamp,
188
+ "content_hash": content_hash or self.generate_content_hash(),
189
+ }