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
@@ -0,0 +1,359 @@
1
+ """Agent Configuration Manager Service
2
+
3
+ This service handles agent configuration management including base agent loading,
4
+ tool configuration, and agent-specific settings.
5
+
6
+ Extracted from AgentDeploymentService as part of the refactoring to improve
7
+ maintainability and testability.
8
+ """
9
+
10
+ import json
11
+ import logging
12
+ from pathlib import Path
13
+ from typing import Any, Dict, List, Optional, Tuple
14
+
15
+ from claude_mpm.core.logging_config import get_logger
16
+
17
+
18
+ class AgentConfigurationManager:
19
+ """Service for managing agent configuration and settings.
20
+
21
+ This service handles:
22
+ - Base agent loading and parsing
23
+ - Tool configuration for different agent types
24
+ - Agent-specific configuration management
25
+ - Source tier determination and configuration
26
+ """
27
+
28
+ def __init__(self, base_agent_path: Optional[Path] = None):
29
+ """Initialize the agent configuration manager.
30
+
31
+ Args:
32
+ base_agent_path: Path to the base agent file
33
+ """
34
+ self.logger = get_logger(__name__)
35
+ self.base_agent_path = base_agent_path
36
+ self._base_agent_cache = None # Cache for base agent data
37
+
38
+ def load_base_agent(self) -> Tuple[dict, tuple]:
39
+ """
40
+ Load base agent configuration and version.
41
+
42
+ Returns:
43
+ Tuple of (base_agent_data, base_agent_version)
44
+ """
45
+ # Return cached data if available
46
+ if self._base_agent_cache is not None:
47
+ return self._base_agent_cache
48
+
49
+ if not self.base_agent_path or not self.base_agent_path.exists():
50
+ self.logger.warning(f"Base agent file not found: {self.base_agent_path}")
51
+ # Return minimal default base agent
52
+ default_base_agent = {
53
+ "name": "base-agent",
54
+ "description": "Base agent configuration",
55
+ "version": "1.0.0",
56
+ "instructions": "You are a helpful AI assistant.",
57
+ "tools": ["Read", "Write", "Edit"],
58
+ }
59
+ self._base_agent_cache = (default_base_agent, (1, 0, 0))
60
+ return self._base_agent_cache
61
+
62
+ try:
63
+ # Read base agent file
64
+ base_agent_content = self.base_agent_path.read_text()
65
+
66
+ # Parse base agent data
67
+ base_agent_data = self._parse_base_agent_content(base_agent_content)
68
+
69
+ # Extract version information
70
+ base_agent_version = self._extract_base_agent_version(base_agent_data)
71
+
72
+ # Cache the result
73
+ self._base_agent_cache = (base_agent_data, base_agent_version)
74
+
75
+ self.logger.info(f"Loaded base agent from {self.base_agent_path}")
76
+ return self._base_agent_cache
77
+
78
+ except Exception as e:
79
+ self.logger.error(f"Failed to load base agent: {e}")
80
+ # Return minimal default on error
81
+ default_base_agent = {
82
+ "name": "base-agent",
83
+ "description": "Base agent configuration (fallback)",
84
+ "version": "1.0.0",
85
+ "instructions": "You are a helpful AI assistant.",
86
+ "tools": ["Read", "Write", "Edit"],
87
+ }
88
+ self._base_agent_cache = (default_base_agent, (1, 0, 0))
89
+ return self._base_agent_cache
90
+
91
+ def get_agent_tools(self, agent_name: str, metadata: Dict[str, Any]) -> List[str]:
92
+ """
93
+ Get appropriate tools for an agent based on its type and metadata.
94
+
95
+ Args:
96
+ agent_name: Name of the agent
97
+ metadata: Agent metadata
98
+
99
+ Returns:
100
+ List of tool names
101
+ """
102
+ # Base tools all agents should have
103
+ base_tools = [
104
+ "Read",
105
+ "Write",
106
+ "Edit",
107
+ "MultiEdit",
108
+ "Grep",
109
+ "Glob",
110
+ "LS",
111
+ "TodoWrite",
112
+ ]
113
+
114
+ # Agent-specific tools based on name patterns
115
+ agent_tools = {
116
+ # Security agents
117
+ "security": base_tools + ["SecurityScan", "VulnerabilityCheck"],
118
+ "sec": base_tools + ["SecurityScan", "VulnerabilityCheck"],
119
+ # QA and testing agents
120
+ "qa": base_tools + ["TestRunner", "CodeAnalysis"],
121
+ "test": base_tools + ["TestRunner", "CodeAnalysis"],
122
+ "testing": base_tools + ["TestRunner", "CodeAnalysis"],
123
+ # Documentation agents
124
+ "doc": base_tools + ["DocumentGenerator", "MarkdownProcessor"],
125
+ "docs": base_tools + ["DocumentGenerator", "MarkdownProcessor"],
126
+ "documentation": base_tools + ["DocumentGenerator", "MarkdownProcessor"],
127
+ # Data processing agents
128
+ "data": base_tools + ["DataProcessor", "CSVHandler"],
129
+ "analytics": base_tools + ["DataProcessor", "CSVHandler"],
130
+ # Operations agents
131
+ "ops": base_tools + ["SystemMonitor", "LogAnalyzer"],
132
+ "operations": base_tools + ["SystemMonitor", "LogAnalyzer"],
133
+ "monitor": base_tools + ["SystemMonitor", "LogAnalyzer"],
134
+ # Research agents
135
+ "research": base_tools + ["WebSearch", "DataCollector"],
136
+ "analysis": base_tools + ["WebSearch", "DataCollector"],
137
+ }
138
+
139
+ # Check agent name for tool assignment
140
+ agent_name_lower = agent_name.lower()
141
+ for pattern, tools in agent_tools.items():
142
+ if pattern in agent_name_lower:
143
+ return tools
144
+
145
+ # Check metadata for specializations
146
+ specializations = metadata.get("specializations", [])
147
+ for spec in specializations:
148
+ spec_lower = spec.lower()
149
+ if spec_lower in agent_tools:
150
+ return agent_tools[spec_lower]
151
+
152
+ # Return default tools with web search and bash
153
+ return base_tools + ["Bash", "WebSearch"]
154
+
155
+ def get_agent_specific_config(self, agent_name: str) -> Dict[str, Any]:
156
+ """
157
+ Get agent-specific configuration based on agent type.
158
+
159
+ Args:
160
+ agent_name: Name of the agent
161
+
162
+ Returns:
163
+ Dictionary with agent-specific configuration
164
+ """
165
+ agent_name_lower = agent_name.lower()
166
+
167
+ # Default configuration
168
+ config = {
169
+ "timeout": 300, # 5 minutes
170
+ "max_iterations": 10,
171
+ "memory_limit": "1GB",
172
+ "parallel_execution": False,
173
+ }
174
+
175
+ # Agent-specific configurations
176
+ if "security" in agent_name_lower or "sec" in agent_name_lower:
177
+ config.update(
178
+ {
179
+ "timeout": 600, # Security scans may take longer
180
+ "max_iterations": 20,
181
+ "security_mode": True,
182
+ "audit_logging": True,
183
+ }
184
+ )
185
+
186
+ elif "qa" in agent_name_lower or "test" in agent_name_lower:
187
+ config.update(
188
+ {
189
+ "timeout": 900, # Tests may take longer
190
+ "max_iterations": 15,
191
+ "test_mode": True,
192
+ "coverage_reporting": True,
193
+ }
194
+ )
195
+
196
+ elif "data" in agent_name_lower or "analytics" in agent_name_lower:
197
+ config.update(
198
+ {
199
+ "timeout": 1200, # Data processing may take longer
200
+ "memory_limit": "2GB",
201
+ "parallel_execution": True,
202
+ "data_processing_mode": True,
203
+ }
204
+ )
205
+
206
+ elif "ops" in agent_name_lower or "monitor" in agent_name_lower:
207
+ config.update(
208
+ {
209
+ "timeout": 180, # Operations should be quick
210
+ "max_iterations": 5,
211
+ "monitoring_mode": True,
212
+ "alert_threshold": "warning",
213
+ }
214
+ )
215
+
216
+ elif "research" in agent_name_lower:
217
+ config.update(
218
+ {
219
+ "timeout": 1800, # Research may take very long
220
+ "max_iterations": 25,
221
+ "research_mode": True,
222
+ "web_search_enabled": True,
223
+ }
224
+ )
225
+
226
+ return config
227
+
228
+ def determine_source_tier(self) -> str:
229
+ """
230
+ Determine the source tier for agent deployment.
231
+
232
+ Returns:
233
+ Source tier string ("system", "user", or "project")
234
+ """
235
+ # For now, this is a simple implementation
236
+ # In the future, this could be enhanced with more sophisticated logic
237
+
238
+ # Check if we're in a project context
239
+ current_dir = Path.cwd()
240
+
241
+ # Look for project indicators
242
+ project_indicators = [
243
+ ".git",
244
+ "package.json",
245
+ "requirements.txt",
246
+ "Cargo.toml",
247
+ "go.mod",
248
+ "pom.xml",
249
+ "build.gradle",
250
+ ]
251
+
252
+ for indicator in project_indicators:
253
+ if (current_dir / indicator).exists():
254
+ return "project"
255
+
256
+ # Check for user-specific configuration
257
+ user_config_dir = Path.home() / ".claude"
258
+ if user_config_dir.exists():
259
+ return "user"
260
+
261
+ # Default to system tier
262
+ return "system"
263
+
264
+ def _parse_base_agent_content(self, content: str) -> dict:
265
+ """
266
+ Parse base agent content from various formats.
267
+
268
+ Args:
269
+ content: Base agent file content
270
+
271
+ Returns:
272
+ Parsed base agent data
273
+ """
274
+ # Try to parse as JSON first
275
+ try:
276
+ return json.loads(content)
277
+ except json.JSONDecodeError:
278
+ pass
279
+
280
+ # Try to parse as Markdown with YAML frontmatter
281
+ if content.strip().startswith("---"):
282
+ try:
283
+ import yaml
284
+
285
+ # Split frontmatter and content
286
+ parts = content.split("---", 2)
287
+ if len(parts) >= 3:
288
+ frontmatter = parts[1].strip()
289
+ markdown_content = parts[2].strip()
290
+
291
+ # Parse YAML frontmatter
292
+ data = yaml.safe_load(frontmatter)
293
+
294
+ # Add markdown content as instructions
295
+ if markdown_content:
296
+ data["instructions"] = markdown_content
297
+
298
+ return data
299
+ except Exception:
300
+ pass
301
+
302
+ # Fallback: treat as plain text instructions
303
+ return {
304
+ "name": "base-agent",
305
+ "description": "Base agent configuration",
306
+ "version": "1.0.0",
307
+ "instructions": content.strip(),
308
+ "tools": ["Read", "Write", "Edit"],
309
+ }
310
+
311
+ def _extract_base_agent_version(self, base_agent_data: dict) -> tuple:
312
+ """
313
+ Extract version from base agent data.
314
+
315
+ Args:
316
+ base_agent_data: Base agent data dictionary
317
+
318
+ Returns:
319
+ Version tuple (major, minor, patch)
320
+ """
321
+ version_str = base_agent_data.get("version", "1.0.0")
322
+
323
+ # Parse semantic version
324
+ try:
325
+ import re
326
+
327
+ match = re.match(r"^v?(\d+)\.(\d+)\.(\d+)", str(version_str))
328
+ if match:
329
+ return (int(match.group(1)), int(match.group(2)), int(match.group(3)))
330
+ except Exception:
331
+ pass
332
+
333
+ # Fallback to default version
334
+ return (1, 0, 0)
335
+
336
+ def clear_cache(self):
337
+ """Clear the base agent cache."""
338
+ self._base_agent_cache = None
339
+ self.logger.debug("Base agent cache cleared")
340
+
341
+ def get_configuration_summary(self) -> Dict[str, Any]:
342
+ """
343
+ Get a summary of the current configuration.
344
+
345
+ Returns:
346
+ Dictionary with configuration summary
347
+ """
348
+ base_agent_data, base_agent_version = self.load_base_agent()
349
+
350
+ return {
351
+ "base_agent_path": str(self.base_agent_path)
352
+ if self.base_agent_path
353
+ else None,
354
+ "base_agent_loaded": self._base_agent_cache is not None,
355
+ "base_agent_version": base_agent_version,
356
+ "base_agent_name": base_agent_data.get("name", "unknown"),
357
+ "source_tier": self.determine_source_tier(),
358
+ "cache_status": "loaded" if self._base_agent_cache else "empty",
359
+ }
@@ -0,0 +1,84 @@
1
+ """Agent definition factory for lifecycle manager.
2
+
3
+ This module provides factory functionality for creating AgentDefinition objects
4
+ from lifecycle manager parameters. Extracted to reduce complexity.
5
+ """
6
+
7
+ from typing import Any
8
+
9
+ from claude_mpm.core.enums import AgentType, ModificationTier
10
+ from claude_mpm.models.agent_definition import (
11
+ AgentDefinition,
12
+ AgentMetadata,
13
+ AgentPermissions,
14
+ )
15
+
16
+
17
+ class AgentDefinitionFactory:
18
+ """Factory for creating AgentDefinition objects."""
19
+
20
+ def create_agent_definition(
21
+ self,
22
+ agent_name: str,
23
+ agent_content: str,
24
+ tier: ModificationTier,
25
+ agent_type: str,
26
+ **kwargs,
27
+ ) -> AgentDefinition:
28
+ """
29
+ Create an AgentDefinition from lifecycle parameters.
30
+
31
+ This method bridges the gap between the lifecycle manager's parameters
32
+ and the AgentManager's expected AgentDefinition model.
33
+
34
+ DESIGN DECISION: Creating a minimal AgentDefinition here because:
35
+ - The full markdown parsing happens in AgentManager
36
+ - We only need to provide the essential metadata
37
+ - This keeps the lifecycle manager focused on orchestration
38
+
39
+ Args:
40
+ agent_name: Name of the agent
41
+ agent_content: Content of the agent
42
+ tier: Modification tier
43
+ agent_type: Type of agent
44
+ **kwargs: Additional parameters
45
+
46
+ Returns:
47
+ AgentDefinition object
48
+ """
49
+ # Map tier to AgentType
50
+ type_map = {
51
+ ModificationTier.USER: AgentType.CUSTOM,
52
+ ModificationTier.PROJECT: AgentType.PROJECT,
53
+ ModificationTier.SYSTEM: AgentType.SYSTEM,
54
+ }
55
+
56
+ # Create metadata
57
+ metadata = AgentMetadata(
58
+ type=type_map.get(tier, AgentType.CUSTOM),
59
+ model_preference=kwargs.get("model_preference", "claude-3-sonnet"),
60
+ version="1.0.0",
61
+ author=kwargs.get("author", "claude-mpm"),
62
+ tags=kwargs.get("tags", []),
63
+ specializations=kwargs.get("specializations", []),
64
+ )
65
+
66
+ # Create minimal definition
67
+ definition = AgentDefinition(
68
+ name=agent_name,
69
+ title=agent_name.replace("-", " ").title(),
70
+ file_path="", # Will be set by AgentManager
71
+ metadata=metadata,
72
+ primary_role=kwargs.get("primary_role", f"{agent_name} agent"),
73
+ when_to_use={"select": [], "do_not_select": []},
74
+ capabilities=[],
75
+ authority=AgentPermissions(),
76
+ workflows=[],
77
+ escalation_triggers=[],
78
+ kpis=[],
79
+ dependencies=[],
80
+ tools_commands="",
81
+ raw_content=agent_content,
82
+ )
83
+
84
+ return definition