claude-mpm 3.9.11__py3-none-any.whl → 4.0.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +2 -2
  3. claude_mpm/__main__.py +3 -2
  4. claude_mpm/agents/__init__.py +85 -79
  5. claude_mpm/agents/agent_loader.py +464 -1003
  6. claude_mpm/agents/agent_loader_integration.py +45 -45
  7. claude_mpm/agents/agents_metadata.py +29 -30
  8. claude_mpm/agents/async_agent_loader.py +156 -138
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/base_agent_loader.py +179 -151
  11. claude_mpm/agents/frontmatter_validator.py +229 -130
  12. claude_mpm/agents/schema/agent_schema.json +1 -1
  13. claude_mpm/agents/system_agent_config.py +213 -147
  14. claude_mpm/agents/templates/__init__.py +13 -13
  15. claude_mpm/agents/templates/code_analyzer.json +2 -2
  16. claude_mpm/agents/templates/data_engineer.json +1 -1
  17. claude_mpm/agents/templates/documentation.json +23 -11
  18. claude_mpm/agents/templates/engineer.json +22 -6
  19. claude_mpm/agents/templates/memory_manager.json +1 -1
  20. claude_mpm/agents/templates/ops.json +2 -2
  21. claude_mpm/agents/templates/project_organizer.json +1 -1
  22. claude_mpm/agents/templates/qa.json +1 -1
  23. claude_mpm/agents/templates/refactoring_engineer.json +222 -0
  24. claude_mpm/agents/templates/research.json +20 -14
  25. claude_mpm/agents/templates/security.json +1 -1
  26. claude_mpm/agents/templates/ticketing.json +2 -2
  27. claude_mpm/agents/templates/version_control.json +1 -1
  28. claude_mpm/agents/templates/web_qa.json +3 -1
  29. claude_mpm/agents/templates/web_ui.json +2 -2
  30. claude_mpm/cli/__init__.py +79 -51
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +20 -20
  33. claude_mpm/cli/commands/agents.py +279 -247
  34. claude_mpm/cli/commands/aggregate.py +138 -157
  35. claude_mpm/cli/commands/cleanup.py +147 -147
  36. claude_mpm/cli/commands/config.py +93 -76
  37. claude_mpm/cli/commands/info.py +17 -16
  38. claude_mpm/cli/commands/mcp.py +140 -905
  39. claude_mpm/cli/commands/mcp_command_router.py +139 -0
  40. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  41. claude_mpm/cli/commands/mcp_install_commands.py +20 -0
  42. claude_mpm/cli/commands/mcp_server_commands.py +175 -0
  43. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  44. claude_mpm/cli/commands/memory.py +239 -203
  45. claude_mpm/cli/commands/monitor.py +330 -86
  46. claude_mpm/cli/commands/run.py +380 -429
  47. claude_mpm/cli/commands/run_config_checker.py +160 -0
  48. claude_mpm/cli/commands/socketio_monitor.py +235 -0
  49. claude_mpm/cli/commands/tickets.py +363 -220
  50. claude_mpm/cli/parser.py +24 -1156
  51. claude_mpm/cli/parsers/__init__.py +29 -0
  52. claude_mpm/cli/parsers/agents_parser.py +136 -0
  53. claude_mpm/cli/parsers/base_parser.py +331 -0
  54. claude_mpm/cli/parsers/config_parser.py +85 -0
  55. claude_mpm/cli/parsers/mcp_parser.py +152 -0
  56. claude_mpm/cli/parsers/memory_parser.py +138 -0
  57. claude_mpm/cli/parsers/monitor_parser.py +124 -0
  58. claude_mpm/cli/parsers/run_parser.py +147 -0
  59. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  60. claude_mpm/cli/ticket_cli.py +7 -3
  61. claude_mpm/cli/utils.py +55 -37
  62. claude_mpm/cli_module/__init__.py +6 -6
  63. claude_mpm/cli_module/args.py +188 -140
  64. claude_mpm/cli_module/commands.py +79 -70
  65. claude_mpm/cli_module/migration_example.py +38 -60
  66. claude_mpm/config/__init__.py +32 -25
  67. claude_mpm/config/agent_config.py +151 -119
  68. claude_mpm/config/experimental_features.py +71 -73
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +35 -18
  72. claude_mpm/core/__init__.py +9 -6
  73. claude_mpm/core/agent_name_normalizer.py +68 -71
  74. claude_mpm/core/agent_registry.py +372 -521
  75. claude_mpm/core/agent_session_manager.py +74 -63
  76. claude_mpm/core/base_service.py +116 -87
  77. claude_mpm/core/cache.py +119 -153
  78. claude_mpm/core/claude_runner.py +425 -1120
  79. claude_mpm/core/config.py +263 -168
  80. claude_mpm/core/config_aliases.py +69 -61
  81. claude_mpm/core/config_constants.py +292 -0
  82. claude_mpm/core/constants.py +57 -99
  83. claude_mpm/core/container.py +211 -178
  84. claude_mpm/core/exceptions.py +233 -89
  85. claude_mpm/core/factories.py +92 -54
  86. claude_mpm/core/framework_loader.py +378 -220
  87. claude_mpm/core/hook_manager.py +198 -83
  88. claude_mpm/core/hook_performance_config.py +136 -0
  89. claude_mpm/core/injectable_service.py +61 -55
  90. claude_mpm/core/interactive_session.py +165 -155
  91. claude_mpm/core/interfaces.py +221 -195
  92. claude_mpm/core/lazy.py +96 -96
  93. claude_mpm/core/logger.py +133 -107
  94. claude_mpm/core/logging_config.py +185 -157
  95. claude_mpm/core/minimal_framework_loader.py +20 -15
  96. claude_mpm/core/mixins.py +30 -29
  97. claude_mpm/core/oneshot_session.py +215 -181
  98. claude_mpm/core/optimized_agent_loader.py +134 -138
  99. claude_mpm/core/optimized_startup.py +159 -157
  100. claude_mpm/core/pm_hook_interceptor.py +85 -72
  101. claude_mpm/core/service_registry.py +103 -101
  102. claude_mpm/core/session_manager.py +97 -87
  103. claude_mpm/core/socketio_pool.py +212 -158
  104. claude_mpm/core/tool_access_control.py +58 -51
  105. claude_mpm/core/types.py +46 -24
  106. claude_mpm/core/typing_utils.py +166 -82
  107. claude_mpm/core/unified_agent_registry.py +721 -0
  108. claude_mpm/core/unified_config.py +550 -0
  109. claude_mpm/core/unified_paths.py +549 -0
  110. claude_mpm/dashboard/index.html +1 -1
  111. claude_mpm/dashboard/open_dashboard.py +51 -17
  112. claude_mpm/dashboard/static/built/components/agent-inference.js +2 -0
  113. claude_mpm/dashboard/static/built/components/event-processor.js +2 -0
  114. claude_mpm/dashboard/static/built/components/event-viewer.js +2 -0
  115. claude_mpm/dashboard/static/built/components/export-manager.js +2 -0
  116. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +2 -0
  117. claude_mpm/dashboard/static/built/components/hud-library-loader.js +2 -0
  118. claude_mpm/dashboard/static/built/components/hud-manager.js +2 -0
  119. claude_mpm/dashboard/static/built/components/hud-visualizer.js +2 -0
  120. claude_mpm/dashboard/static/built/components/module-viewer.js +2 -0
  121. claude_mpm/dashboard/static/built/components/session-manager.js +2 -0
  122. claude_mpm/dashboard/static/built/components/socket-manager.js +2 -0
  123. claude_mpm/dashboard/static/built/components/ui-state-manager.js +2 -0
  124. claude_mpm/dashboard/static/built/components/working-directory.js +2 -0
  125. claude_mpm/dashboard/static/built/dashboard.js +2 -0
  126. claude_mpm/dashboard/static/built/socket-client.js +2 -0
  127. claude_mpm/dashboard/static/css/dashboard.css +27 -8
  128. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  129. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  130. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  131. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  132. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  133. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  134. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  135. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  136. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  137. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  138. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  139. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  140. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  141. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  142. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  143. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  144. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  145. claude_mpm/dashboard/static/js/components/event-viewer.js +93 -72
  146. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  147. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +110 -96
  148. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  149. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  150. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  151. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  152. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  153. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  154. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  155. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  156. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  157. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  158. claude_mpm/dashboard/static/js/socket-client.js +133 -53
  159. claude_mpm/dashboard/templates/index.html +40 -50
  160. claude_mpm/experimental/cli_enhancements.py +60 -58
  161. claude_mpm/generators/__init__.py +1 -1
  162. claude_mpm/generators/agent_profile_generator.py +75 -65
  163. claude_mpm/hooks/__init__.py +1 -1
  164. claude_mpm/hooks/base_hook.py +33 -28
  165. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  166. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  167. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  168. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  169. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  170. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  171. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  172. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  173. claude_mpm/hooks/memory_integration_hook.py +140 -100
  174. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  175. claude_mpm/hooks/validation_hooks.py +57 -49
  176. claude_mpm/init.py +145 -121
  177. claude_mpm/models/__init__.py +9 -9
  178. claude_mpm/models/agent_definition.py +33 -23
  179. claude_mpm/models/agent_session.py +228 -200
  180. claude_mpm/scripts/__init__.py +1 -1
  181. claude_mpm/scripts/socketio_daemon.py +192 -75
  182. claude_mpm/scripts/socketio_server_manager.py +328 -0
  183. claude_mpm/scripts/start_activity_logging.py +25 -22
  184. claude_mpm/services/__init__.py +68 -43
  185. claude_mpm/services/agent_capabilities_service.py +271 -0
  186. claude_mpm/services/agents/__init__.py +23 -32
  187. claude_mpm/services/agents/deployment/__init__.py +3 -3
  188. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  189. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  190. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  191. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  192. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  193. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  194. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  195. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  196. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  197. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  198. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  199. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  200. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  201. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  202. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  203. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  204. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  205. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  206. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  207. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  208. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  209. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  210. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  211. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  212. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  213. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  214. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  215. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  216. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  217. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  218. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  219. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  220. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  221. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  222. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  223. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  224. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  225. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  226. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  227. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  228. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  229. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  230. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  231. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  232. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  233. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  234. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  235. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  236. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  237. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  238. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  239. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  240. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  241. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  242. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  243. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  244. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  245. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  246. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  247. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  248. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  249. claude_mpm/services/agents/loading/__init__.py +2 -2
  250. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  251. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  252. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  253. claude_mpm/services/agents/management/__init__.py +2 -2
  254. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  255. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  256. claude_mpm/services/agents/memory/__init__.py +9 -6
  257. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  258. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  259. claude_mpm/services/agents/memory/analyzer.py +430 -0
  260. claude_mpm/services/agents/memory/content_manager.py +376 -0
  261. claude_mpm/services/agents/memory/template_generator.py +468 -0
  262. claude_mpm/services/agents/registry/__init__.py +7 -10
  263. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  264. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  265. claude_mpm/services/async_session_logger.py +187 -153
  266. claude_mpm/services/claude_session_logger.py +87 -72
  267. claude_mpm/services/command_handler_service.py +217 -0
  268. claude_mpm/services/communication/__init__.py +3 -2
  269. claude_mpm/services/core/__init__.py +50 -97
  270. claude_mpm/services/core/base.py +60 -53
  271. claude_mpm/services/core/interfaces/__init__.py +188 -0
  272. claude_mpm/services/core/interfaces/agent.py +351 -0
  273. claude_mpm/services/core/interfaces/communication.py +343 -0
  274. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  275. claude_mpm/services/core/interfaces/service.py +434 -0
  276. claude_mpm/services/core/interfaces.py +19 -944
  277. claude_mpm/services/event_aggregator.py +208 -170
  278. claude_mpm/services/exceptions.py +387 -308
  279. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  280. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  281. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  282. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  283. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  284. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  285. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  286. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  287. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  288. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  289. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  290. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  291. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  292. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  293. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  294. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  295. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  296. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  297. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  298. claude_mpm/services/hook_service.py +106 -114
  299. claude_mpm/services/infrastructure/__init__.py +7 -5
  300. claude_mpm/services/infrastructure/context_preservation.py +233 -199
  301. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  302. claude_mpm/services/infrastructure/logging.py +83 -76
  303. claude_mpm/services/infrastructure/monitoring.py +547 -404
  304. claude_mpm/services/mcp_gateway/__init__.py +30 -13
  305. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  306. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  307. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  308. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  309. claude_mpm/services/mcp_gateway/core/__init__.py +13 -20
  310. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  311. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  312. claude_mpm/services/mcp_gateway/core/interfaces.py +87 -84
  313. claude_mpm/services/mcp_gateway/main.py +287 -137
  314. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  315. claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
  316. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  317. claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
  318. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
  319. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  320. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  321. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  322. claude_mpm/services/mcp_gateway/tools/base_adapter.py +109 -119
  323. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  324. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  325. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  326. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  327. claude_mpm/services/memory/__init__.py +2 -2
  328. claude_mpm/services/memory/builder.py +451 -362
  329. claude_mpm/services/memory/cache/__init__.py +2 -2
  330. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  331. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  332. claude_mpm/services/memory/indexed_memory.py +195 -193
  333. claude_mpm/services/memory/optimizer.py +267 -234
  334. claude_mpm/services/memory/router.py +571 -263
  335. claude_mpm/services/memory_hook_service.py +237 -0
  336. claude_mpm/services/port_manager.py +575 -0
  337. claude_mpm/services/project/__init__.py +3 -3
  338. claude_mpm/services/project/analyzer.py +451 -305
  339. claude_mpm/services/project/registry.py +262 -240
  340. claude_mpm/services/recovery_manager.py +287 -231
  341. claude_mpm/services/response_tracker.py +87 -67
  342. claude_mpm/services/runner_configuration_service.py +587 -0
  343. claude_mpm/services/session_management_service.py +304 -0
  344. claude_mpm/services/socketio/__init__.py +4 -4
  345. claude_mpm/services/socketio/client_proxy.py +174 -0
  346. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  347. claude_mpm/services/socketio/handlers/base.py +44 -30
  348. claude_mpm/services/socketio/handlers/connection.py +166 -64
  349. claude_mpm/services/socketio/handlers/file.py +123 -108
  350. claude_mpm/services/socketio/handlers/git.py +607 -373
  351. claude_mpm/services/socketio/handlers/hook.py +185 -0
  352. claude_mpm/services/socketio/handlers/memory.py +4 -4
  353. claude_mpm/services/socketio/handlers/project.py +4 -4
  354. claude_mpm/services/socketio/handlers/registry.py +53 -38
  355. claude_mpm/services/socketio/server/__init__.py +18 -0
  356. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  357. claude_mpm/services/socketio/server/core.py +399 -0
  358. claude_mpm/services/socketio/server/main.py +323 -0
  359. claude_mpm/services/socketio_client_manager.py +160 -133
  360. claude_mpm/services/socketio_server.py +36 -1885
  361. claude_mpm/services/subprocess_launcher_service.py +316 -0
  362. claude_mpm/services/system_instructions_service.py +258 -0
  363. claude_mpm/services/ticket_manager.py +19 -533
  364. claude_mpm/services/utility_service.py +285 -0
  365. claude_mpm/services/version_control/__init__.py +18 -21
  366. claude_mpm/services/version_control/branch_strategy.py +20 -10
  367. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  368. claude_mpm/services/version_control/git_operations.py +52 -21
  369. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  370. claude_mpm/services/version_control/version_parser.py +145 -125
  371. claude_mpm/services/version_service.py +270 -0
  372. claude_mpm/storage/__init__.py +2 -2
  373. claude_mpm/storage/state_storage.py +177 -181
  374. claude_mpm/ticket_wrapper.py +2 -2
  375. claude_mpm/utils/__init__.py +2 -2
  376. claude_mpm/utils/agent_dependency_loader.py +453 -243
  377. claude_mpm/utils/config_manager.py +157 -118
  378. claude_mpm/utils/console.py +1 -1
  379. claude_mpm/utils/dependency_cache.py +102 -107
  380. claude_mpm/utils/dependency_manager.py +52 -47
  381. claude_mpm/utils/dependency_strategies.py +131 -96
  382. claude_mpm/utils/environment_context.py +110 -102
  383. claude_mpm/utils/error_handler.py +75 -55
  384. claude_mpm/utils/file_utils.py +80 -67
  385. claude_mpm/utils/framework_detection.py +12 -11
  386. claude_mpm/utils/import_migration_example.py +12 -60
  387. claude_mpm/utils/imports.py +48 -45
  388. claude_mpm/utils/path_operations.py +100 -93
  389. claude_mpm/utils/robust_installer.py +172 -164
  390. claude_mpm/utils/session_logging.py +30 -23
  391. claude_mpm/utils/subprocess_utils.py +99 -61
  392. claude_mpm/validation/__init__.py +1 -1
  393. claude_mpm/validation/agent_validator.py +151 -111
  394. claude_mpm/validation/frontmatter_validator.py +92 -71
  395. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/METADATA +90 -22
  396. claude_mpm-4.0.4.dist-info/RECORD +417 -0
  397. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/entry_points.txt +1 -0
  398. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/licenses/LICENSE +1 -1
  399. claude_mpm/cli/commands/run_guarded.py +0 -511
  400. claude_mpm/config/memory_guardian_config.py +0 -325
  401. claude_mpm/config/memory_guardian_yaml.py +0 -335
  402. claude_mpm/core/config_paths.py +0 -150
  403. claude_mpm/core/memory_aware_runner.py +0 -353
  404. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  405. claude_mpm/deployment_paths.py +0 -261
  406. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  407. claude_mpm/models/state_models.py +0 -433
  408. claude_mpm/services/agent/__init__.py +0 -24
  409. claude_mpm/services/agent/deployment.py +0 -2548
  410. claude_mpm/services/agent/management.py +0 -598
  411. claude_mpm/services/agent/registry.py +0 -813
  412. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  413. claude_mpm/services/communication/socketio.py +0 -1935
  414. claude_mpm/services/communication/websocket.py +0 -479
  415. claude_mpm/services/framework_claude_md_generator.py +0 -624
  416. claude_mpm/services/health_monitor.py +0 -893
  417. claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
  418. claude_mpm/services/infrastructure/health_monitor.py +0 -775
  419. claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
  420. claude_mpm/services/infrastructure/memory_guardian.py +0 -944
  421. claude_mpm/services/infrastructure/restart_protection.py +0 -642
  422. claude_mpm/services/infrastructure/state_manager.py +0 -774
  423. claude_mpm/services/mcp_gateway/manager.py +0 -334
  424. claude_mpm/services/optimized_hook_service.py +0 -542
  425. claude_mpm/services/project_analyzer.py +0 -864
  426. claude_mpm/services/project_registry.py +0 -608
  427. claude_mpm/services/standalone_socketio_server.py +0 -1300
  428. claude_mpm/services/ticket_manager_di.py +0 -318
  429. claude_mpm/services/ticketing_service_original.py +0 -510
  430. claude_mpm/utils/paths.py +0 -395
  431. claude_mpm/utils/platform_memory.py +0 -524
  432. claude_mpm-3.9.11.dist-info/RECORD +0 -306
  433. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/WHEEL +0 -0
  434. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.4.dist-info}/top_level.txt +0 -0
@@ -16,13 +16,18 @@ Created: 2025-07-16
16
16
  """
17
17
 
18
18
  import logging
19
- from typing import Dict, List, Optional, Any, Type
20
19
  from dataclasses import dataclass, field
21
- from pathlib import Path
20
+ from typing import Any, Dict, List, Optional, Type
22
21
 
23
- from ..config.default_model_config import DefaultModelConfigManager, get_default_model_for_agent_type
24
- from ..config.model_env_defaults import ModelEnvironmentLoader, get_model_for_agent_from_env
25
- from ..services.model_selector import ModelSelector, ModelType, ModelSelectionCriteria
22
+ from ..config.default_model_config import (
23
+ DefaultModelConfigManager,
24
+ get_default_model_for_agent_type,
25
+ )
26
+ from ..config.model_env_defaults import (
27
+ ModelEnvironmentLoader,
28
+ get_model_for_agent_from_env,
29
+ )
30
+ from ..services.model_selector import ModelSelectionCriteria, ModelSelector, ModelType
26
31
 
27
32
  logger = logging.getLogger(__name__)
28
33
 
@@ -30,6 +35,7 @@ logger = logging.getLogger(__name__)
30
35
  @dataclass
31
36
  class SystemAgentConfig:
32
37
  """Configuration for a system agent"""
38
+
33
39
  agent_type: str
34
40
  agent_name: str
35
41
  description: str
@@ -40,14 +46,14 @@ class SystemAgentConfig:
40
46
  model_preferences: Dict[str, Any] = field(default_factory=dict)
41
47
  enabled: bool = True
42
48
  priority: int = 100 # Lower number = higher priority
43
-
49
+
44
50
  def get_effective_model(self) -> str:
45
51
  """Get the effective model considering environment overrides."""
46
52
  # Check environment override
47
53
  env_model = get_model_for_agent_from_env(self.agent_type)
48
54
  if env_model:
49
55
  return env_model
50
-
56
+
51
57
  # Use default model
52
58
  return self.default_model
53
59
 
@@ -56,7 +62,7 @@ class SystemAgentConfigManager:
56
62
  """
57
63
  Manager for system agent configurations with model integration.
58
64
  """
59
-
65
+
60
66
  def __init__(self):
61
67
  """Initialize system agent configuration manager."""
62
68
  self.model_config_manager = DefaultModelConfigManager()
@@ -64,12 +70,12 @@ class SystemAgentConfigManager:
64
70
  self.env_loader = ModelEnvironmentLoader()
65
71
  self._agents: Dict[str, SystemAgentConfig] = {}
66
72
  self._initialize_system_agents()
67
-
73
+
68
74
  logger.info("SystemAgentConfigManager initialized with model integration")
69
-
75
+
70
76
  def _initialize_system_agents(self) -> None:
71
77
  """Initialize all system agent configurations."""
72
-
78
+
73
79
  # Core Orchestrator/Engineering Agents (Opus models)
74
80
  self._agents["orchestrator"] = SystemAgentConfig(
75
81
  agent_type="orchestrator",
@@ -77,72 +83,83 @@ class SystemAgentConfigManager:
77
83
  description="Multi-agent project orchestration and coordination",
78
84
  default_model=ModelType.OPUS.value,
79
85
  capabilities=[
80
- "project_management", "task_delegation", "workflow_coordination",
81
- "strategic_planning", "multi_agent_communication", "decision_making"
86
+ "project_management",
87
+ "task_delegation",
88
+ "workflow_coordination",
89
+ "strategic_planning",
90
+ "multi_agent_communication",
91
+ "decision_making",
82
92
  ],
83
93
  specializations=["orchestration", "coordination", "planning"],
84
94
  performance_requirements={
85
95
  "reasoning_depth": "expert",
86
96
  "task_complexity": "expert",
87
97
  "creativity_required": True,
88
- "speed_priority": False
98
+ "speed_priority": False,
89
99
  },
90
100
  model_preferences={
91
101
  "preferred_models": [ModelType.OPUS.value, ModelType.SONNET_4.value],
92
102
  "minimum_reasoning_tier": "expert",
93
- "context_requirements": "high"
103
+ "context_requirements": "high",
94
104
  },
95
- priority=1
105
+ priority=1,
96
106
  )
97
-
107
+
98
108
  self._agents["engineer"] = SystemAgentConfig(
99
109
  agent_type="engineer",
100
110
  agent_name="Software Engineer",
101
111
  description="Code implementation, development, and inline documentation",
102
112
  default_model=ModelType.OPUS.value,
103
113
  capabilities=[
104
- "code_generation", "system_design", "architecture_planning",
105
- "debugging", "refactoring", "technical_implementation"
114
+ "code_generation",
115
+ "system_design",
116
+ "architecture_planning",
117
+ "debugging",
118
+ "refactoring",
119
+ "technical_implementation",
106
120
  ],
107
121
  specializations=["engineering", "development", "implementation"],
108
122
  performance_requirements={
109
123
  "reasoning_depth": "expert",
110
124
  "task_complexity": "high",
111
125
  "creativity_required": True,
112
- "speed_priority": False
126
+ "speed_priority": False,
113
127
  },
114
128
  model_preferences={
115
129
  "preferred_models": [ModelType.OPUS.value, ModelType.SONNET_4.value],
116
130
  "minimum_reasoning_tier": "expert",
117
- "context_requirements": "high"
131
+ "context_requirements": "high",
118
132
  },
119
- priority=10
133
+ priority=10,
120
134
  )
121
-
135
+
122
136
  self._agents["architecture"] = SystemAgentConfig(
123
137
  agent_type="architecture",
124
138
  agent_name="Software Architect",
125
139
  description="System architecture design and technical planning",
126
140
  default_model=ModelType.OPUS.value,
127
141
  capabilities=[
128
- "system_architecture", "design_patterns", "scalability_planning",
129
- "technology_selection", "architectural_decision_making"
142
+ "system_architecture",
143
+ "design_patterns",
144
+ "scalability_planning",
145
+ "technology_selection",
146
+ "architectural_decision_making",
130
147
  ],
131
148
  specializations=["architecture", "design", "planning"],
132
149
  performance_requirements={
133
150
  "reasoning_depth": "expert",
134
151
  "task_complexity": "expert",
135
152
  "creativity_required": True,
136
- "speed_priority": False
153
+ "speed_priority": False,
137
154
  },
138
155
  model_preferences={
139
156
  "preferred_models": [ModelType.OPUS.value],
140
157
  "minimum_reasoning_tier": "expert",
141
- "context_requirements": "high"
158
+ "context_requirements": "high",
142
159
  },
143
- priority=5
160
+ priority=5,
144
161
  )
145
-
162
+
146
163
  # Core Support Agents (Sonnet models)
147
164
  self._agents["documentation"] = SystemAgentConfig(
148
165
  agent_type="documentation",
@@ -150,203 +167,232 @@ class SystemAgentConfigManager:
150
167
  description="Project documentation pattern analysis and operational understanding",
151
168
  default_model=ModelType.SONNET.value,
152
169
  capabilities=[
153
- "documentation_analysis", "technical_writing", "changelog_generation",
154
- "version_documentation", "pattern_recognition"
170
+ "documentation_analysis",
171
+ "technical_writing",
172
+ "changelog_generation",
173
+ "version_documentation",
174
+ "pattern_recognition",
155
175
  ],
156
176
  specializations=["documentation", "analysis", "writing"],
157
177
  performance_requirements={
158
178
  "reasoning_depth": "advanced",
159
179
  "task_complexity": "medium",
160
180
  "creativity_required": False,
161
- "speed_priority": True
181
+ "speed_priority": True,
162
182
  },
163
183
  model_preferences={
164
184
  "preferred_models": [ModelType.SONNET.value, ModelType.SONNET_4.value],
165
185
  "minimum_reasoning_tier": "advanced",
166
- "context_requirements": "medium"
186
+ "context_requirements": "medium",
167
187
  },
168
- priority=20
188
+ priority=20,
169
189
  )
170
-
190
+
171
191
  self._agents["qa"] = SystemAgentConfig(
172
192
  agent_type="qa",
173
193
  agent_name="Quality Assurance Agent",
174
194
  description="Quality assurance, testing, and validation",
175
195
  default_model=ModelType.SONNET.value,
176
196
  capabilities=[
177
- "test_planning", "quality_validation", "testing_automation",
178
- "bug_detection", "performance_testing"
197
+ "test_planning",
198
+ "quality_validation",
199
+ "testing_automation",
200
+ "bug_detection",
201
+ "performance_testing",
179
202
  ],
180
203
  specializations=["qa", "testing", "validation"],
181
204
  performance_requirements={
182
205
  "reasoning_depth": "advanced",
183
206
  "task_complexity": "medium",
184
207
  "creativity_required": False,
185
- "speed_priority": True
208
+ "speed_priority": True,
186
209
  },
187
210
  model_preferences={
188
211
  "preferred_models": [ModelType.SONNET.value, ModelType.SONNET_4.value],
189
212
  "minimum_reasoning_tier": "advanced",
190
- "context_requirements": "medium"
213
+ "context_requirements": "medium",
191
214
  },
192
- priority=30
215
+ priority=30,
193
216
  )
194
-
217
+
195
218
  self._agents["research"] = SystemAgentConfig(
196
219
  agent_type="research",
197
220
  agent_name="Research Agent",
198
221
  description="Investigation, analysis, and information gathering",
199
222
  default_model=ModelType.SONNET.value,
200
223
  capabilities=[
201
- "research_methodology", "data_analysis", "information_synthesis",
202
- "market_research", "technical_investigation"
224
+ "research_methodology",
225
+ "data_analysis",
226
+ "information_synthesis",
227
+ "market_research",
228
+ "technical_investigation",
203
229
  ],
204
230
  specializations=["research", "analysis", "investigation"],
205
231
  performance_requirements={
206
232
  "reasoning_depth": "advanced",
207
233
  "task_complexity": "medium",
208
234
  "creativity_required": False,
209
- "speed_priority": False
235
+ "speed_priority": False,
210
236
  },
211
237
  model_preferences={
212
238
  "preferred_models": [ModelType.SONNET.value, ModelType.SONNET_4.value],
213
239
  "minimum_reasoning_tier": "advanced",
214
- "context_requirements": "high"
240
+ "context_requirements": "high",
215
241
  },
216
- priority=40
242
+ priority=40,
217
243
  )
218
-
244
+
219
245
  self._agents["ops"] = SystemAgentConfig(
220
246
  agent_type="ops",
221
247
  agent_name="Operations Agent",
222
248
  description="Deployment, operations, and infrastructure management",
223
249
  default_model=ModelType.SONNET.value,
224
250
  capabilities=[
225
- "deployment_automation", "infrastructure_management", "monitoring_setup",
226
- "devops_workflows", "system_administration"
251
+ "deployment_automation",
252
+ "infrastructure_management",
253
+ "monitoring_setup",
254
+ "devops_workflows",
255
+ "system_administration",
227
256
  ],
228
257
  specializations=["ops", "deployment", "infrastructure"],
229
258
  performance_requirements={
230
259
  "reasoning_depth": "advanced",
231
260
  "task_complexity": "medium",
232
261
  "creativity_required": False,
233
- "speed_priority": True
262
+ "speed_priority": True,
234
263
  },
235
264
  model_preferences={
236
265
  "preferred_models": [ModelType.SONNET.value, ModelType.SONNET_4.value],
237
266
  "minimum_reasoning_tier": "advanced",
238
- "context_requirements": "medium"
267
+ "context_requirements": "medium",
239
268
  },
240
- priority=50
269
+ priority=50,
241
270
  )
242
-
271
+
243
272
  self._agents["security"] = SystemAgentConfig(
244
273
  agent_type="security",
245
274
  agent_name="Security Agent",
246
275
  description="Security analysis, vulnerability assessment, and protection",
247
276
  default_model=ModelType.SONNET.value,
248
277
  capabilities=[
249
- "security_analysis", "vulnerability_assessment", "threat_modeling",
250
- "security_auditing", "compliance_checking"
278
+ "security_analysis",
279
+ "vulnerability_assessment",
280
+ "threat_modeling",
281
+ "security_auditing",
282
+ "compliance_checking",
251
283
  ],
252
284
  specializations=["security", "compliance", "auditing"],
253
285
  performance_requirements={
254
286
  "reasoning_depth": "advanced",
255
287
  "task_complexity": "high",
256
288
  "creativity_required": False,
257
- "speed_priority": False
289
+ "speed_priority": False,
258
290
  },
259
291
  model_preferences={
260
292
  "preferred_models": [ModelType.SONNET.value, ModelType.SONNET_4.value],
261
293
  "minimum_reasoning_tier": "advanced",
262
- "context_requirements": "high"
294
+ "context_requirements": "high",
263
295
  },
264
- priority=35
296
+ priority=35,
265
297
  )
266
-
298
+
267
299
  self._agents["data_engineer"] = SystemAgentConfig(
268
300
  agent_type="data_engineer",
269
301
  agent_name="Data Engineer Agent",
270
302
  description="Data store management and AI API integrations",
271
303
  default_model=ModelType.SONNET.value,
272
304
  capabilities=[
273
- "database_management", "data_pipeline_design", "api_integration",
274
- "data_modeling", "performance_optimization"
305
+ "database_management",
306
+ "data_pipeline_design",
307
+ "api_integration",
308
+ "data_modeling",
309
+ "performance_optimization",
275
310
  ],
276
311
  specializations=["data_engineering", "database", "api"],
277
312
  performance_requirements={
278
313
  "reasoning_depth": "advanced",
279
314
  "task_complexity": "medium",
280
315
  "creativity_required": False,
281
- "speed_priority": True
316
+ "speed_priority": True,
282
317
  },
283
318
  model_preferences={
284
319
  "preferred_models": [ModelType.SONNET.value, ModelType.SONNET_4.value],
285
320
  "minimum_reasoning_tier": "advanced",
286
- "context_requirements": "medium"
321
+ "context_requirements": "medium",
287
322
  },
288
- priority=45
323
+ priority=45,
289
324
  )
290
-
325
+
291
326
  self._agents["version_control"] = SystemAgentConfig(
292
327
  agent_type="version_control",
293
328
  agent_name="Version Control Agent",
294
329
  description="Git operations, branch management, and version control",
295
330
  default_model=ModelType.SONNET.value,
296
331
  capabilities=[
297
- "git_operations", "branch_management", "version_tagging",
298
- "merge_management", "repository_administration"
332
+ "git_operations",
333
+ "branch_management",
334
+ "version_tagging",
335
+ "merge_management",
336
+ "repository_administration",
299
337
  ],
300
338
  specializations=["version_control", "git", "branching"],
301
339
  performance_requirements={
302
340
  "reasoning_depth": "standard",
303
341
  "task_complexity": "medium",
304
342
  "creativity_required": False,
305
- "speed_priority": True
343
+ "speed_priority": True,
306
344
  },
307
345
  model_preferences={
308
346
  "preferred_models": [ModelType.SONNET.value],
309
347
  "minimum_reasoning_tier": "advanced",
310
- "context_requirements": "medium"
348
+ "context_requirements": "medium",
311
349
  },
312
- priority=55
350
+ priority=55,
313
351
  )
314
-
352
+
315
353
  # Apply environment-based model defaults
316
354
  self._apply_environment_defaults()
317
-
318
- logger.info(f"Initialized {len(self._agents)} system agents with model assignments")
319
-
355
+
356
+ logger.info(
357
+ f"Initialized {len(self._agents)} system agents with model assignments"
358
+ )
359
+
320
360
  def _apply_environment_defaults(self) -> None:
321
361
  """Apply environment-based default model assignments."""
322
362
  for agent_type, agent_config in self._agents.items():
323
363
  default_model = get_default_model_for_agent_type(agent_type)
324
364
  if default_model != agent_config.default_model:
325
- logger.debug(f"Updated {agent_type} default model: {agent_config.default_model} -> {default_model}")
365
+ logger.debug(
366
+ f"Updated {agent_type} default model: {agent_config.default_model} -> {default_model}"
367
+ )
326
368
  agent_config.default_model = default_model
327
-
369
+
328
370
  def get_agent_config(self, agent_type: str) -> Optional[SystemAgentConfig]:
329
371
  """Get configuration for a specific agent type."""
330
372
  return self._agents.get(agent_type)
331
-
373
+
332
374
  def get_all_agents(self) -> Dict[str, SystemAgentConfig]:
333
375
  """Get all agent configurations."""
334
376
  return self._agents.copy()
335
-
377
+
336
378
  def get_agents_by_model(self, model_id: str) -> List[SystemAgentConfig]:
337
379
  """Get all agents configured to use a specific model."""
338
380
  return [
339
- agent for agent in self._agents.values()
381
+ agent
382
+ for agent in self._agents.values()
340
383
  if agent.get_effective_model() == model_id
341
384
  ]
342
-
343
- def get_agents_by_specialization(self, specialization: str) -> List[SystemAgentConfig]:
385
+
386
+ def get_agents_by_specialization(
387
+ self, specialization: str
388
+ ) -> List[SystemAgentConfig]:
344
389
  """Get agents with a specific specialization."""
345
390
  return [
346
- agent for agent in self._agents.values()
391
+ agent
392
+ for agent in self._agents.values()
347
393
  if specialization in agent.specializations
348
394
  ]
349
-
395
+
350
396
  def get_model_distribution(self) -> Dict[str, int]:
351
397
  """Get distribution of models across agents."""
352
398
  distribution = {}
@@ -355,11 +401,11 @@ class SystemAgentConfigManager:
355
401
  model = agent.get_effective_model()
356
402
  distribution[model] = distribution.get(model, 0) + 1
357
403
  return distribution
358
-
404
+
359
405
  def validate_agent_model_assignments(self) -> Dict[str, Any]:
360
406
  """
361
407
  Validate all agent model assignments.
362
-
408
+
363
409
  Returns:
364
410
  Validation results with issues and recommendations
365
411
  """
@@ -368,66 +414,74 @@ class SystemAgentConfigManager:
368
414
  "issues": [],
369
415
  "warnings": [],
370
416
  "recommendations": [],
371
- "agent_validations": {}
417
+ "agent_validations": {},
372
418
  }
373
-
419
+
374
420
  for agent_type, agent_config in self._agents.items():
375
421
  if not agent_config.enabled:
376
422
  continue
377
-
423
+
378
424
  effective_model = agent_config.get_effective_model()
379
-
425
+
380
426
  # Validate with ModelSelector
381
427
  model_validation = self.model_selector.validate_model_selection(
382
428
  agent_type, effective_model
383
429
  )
384
-
430
+
385
431
  validation["agent_validations"][agent_type] = model_validation
386
-
432
+
387
433
  if not model_validation["valid"]:
388
434
  validation["valid"] = False
389
- validation["issues"].append({
390
- "agent_type": agent_type,
391
- "model": effective_model,
392
- "error": model_validation.get("error", "Invalid model assignment")
393
- })
394
-
395
- # Check warnings
396
- if model_validation.get("warnings"):
397
- validation["warnings"].extend([
435
+ validation["issues"].append(
398
436
  {
399
437
  "agent_type": agent_type,
400
438
  "model": effective_model,
401
- "warning": warning
439
+ "error": model_validation.get(
440
+ "error", "Invalid model assignment"
441
+ ),
402
442
  }
403
- for warning in model_validation["warnings"]
404
- ])
405
-
443
+ )
444
+
445
+ # Check warnings
446
+ if model_validation.get("warnings"):
447
+ validation["warnings"].extend(
448
+ [
449
+ {
450
+ "agent_type": agent_type,
451
+ "model": effective_model,
452
+ "warning": warning,
453
+ }
454
+ for warning in model_validation["warnings"]
455
+ ]
456
+ )
457
+
406
458
  # Check suggestions
407
459
  if model_validation.get("suggestions"):
408
- validation["recommendations"].extend([
409
- {
410
- "agent_type": agent_type,
411
- "model": effective_model,
412
- "suggestion": suggestion
413
- }
414
- for suggestion in model_validation["suggestions"]
415
- ])
416
-
460
+ validation["recommendations"].extend(
461
+ [
462
+ {
463
+ "agent_type": agent_type,
464
+ "model": effective_model,
465
+ "suggestion": suggestion,
466
+ }
467
+ for suggestion in model_validation["suggestions"]
468
+ ]
469
+ )
470
+
417
471
  return validation
418
-
472
+
419
473
  def get_configuration_summary(self) -> Dict[str, Any]:
420
474
  """
421
475
  Get comprehensive configuration summary.
422
-
476
+
423
477
  Returns:
424
478
  Summary of agent configurations and model assignments
425
479
  """
426
480
  enabled_agents = [agent for agent in self._agents.values() if agent.enabled]
427
-
481
+
428
482
  # Model distribution
429
483
  model_distribution = self.get_model_distribution()
430
-
484
+
431
485
  # Environment overrides
432
486
  env_overrides = {}
433
487
  for agent_type, agent_config in self._agents.items():
@@ -435,84 +489,92 @@ class SystemAgentConfigManager:
435
489
  if env_model and env_model != agent_config.default_model:
436
490
  env_overrides[agent_type] = {
437
491
  "default": agent_config.default_model,
438
- "override": env_model
492
+ "override": env_model,
439
493
  }
440
-
494
+
441
495
  # Agent priorities
442
496
  agents_by_priority = sorted(enabled_agents, key=lambda a: a.priority)
443
-
497
+
444
498
  # Capability analysis
445
499
  all_capabilities = set()
446
500
  all_specializations = set()
447
501
  for agent in enabled_agents:
448
502
  all_capabilities.update(agent.capabilities)
449
503
  all_specializations.update(agent.specializations)
450
-
504
+
451
505
  return {
452
506
  "total_agents": len(self._agents),
453
507
  "enabled_agents": len(enabled_agents),
454
508
  "model_distribution": model_distribution,
455
509
  "environment_overrides": env_overrides,
456
510
  "agent_priorities": [
457
- {"type": agent.agent_type, "name": agent.agent_name, "priority": agent.priority}
511
+ {
512
+ "type": agent.agent_type,
513
+ "name": agent.agent_name,
514
+ "priority": agent.priority,
515
+ }
458
516
  for agent in agents_by_priority
459
517
  ],
460
518
  "capabilities_coverage": {
461
519
  "total_capabilities": len(all_capabilities),
462
520
  "total_specializations": len(all_specializations),
463
521
  "unique_capabilities": sorted(list(all_capabilities)),
464
- "unique_specializations": sorted(list(all_specializations))
522
+ "unique_specializations": sorted(list(all_specializations)),
465
523
  },
466
- "configuration_health": self.validate_agent_model_assignments()
524
+ "configuration_health": self.validate_agent_model_assignments(),
467
525
  }
468
-
526
+
469
527
  def update_agent_model(self, agent_type: str, model_id: str) -> bool:
470
528
  """
471
529
  Update model assignment for an agent.
472
-
530
+
473
531
  Args:
474
532
  agent_type: Type of agent
475
533
  model_id: New model ID
476
-
534
+
477
535
  Returns:
478
536
  True if update successful, False otherwise
479
537
  """
480
538
  if agent_type not in self._agents:
481
539
  logger.error(f"Agent type not found: {agent_type}")
482
540
  return False
483
-
541
+
484
542
  # Validate model
485
543
  validation = self.model_selector.validate_model_selection(agent_type, model_id)
486
544
  if not validation["valid"]:
487
- logger.error(f"Invalid model assignment for {agent_type}: {validation.get('error')}")
545
+ logger.error(
546
+ f"Invalid model assignment for {agent_type}: {validation.get('error')}"
547
+ )
488
548
  return False
489
-
549
+
490
550
  # Update configuration
491
551
  self._agents[agent_type].default_model = model_id
492
552
  logger.info(f"Updated {agent_type} model assignment to {model_id}")
493
-
553
+
494
554
  return True
495
-
496
- def get_agent_model_recommendation(self, agent_type: str, task_description: str = "") -> Dict[str, Any]:
555
+
556
+ def get_agent_model_recommendation(
557
+ self, agent_type: str, task_description: str = ""
558
+ ) -> Dict[str, Any]:
497
559
  """
498
560
  Get model recommendation for an agent and task.
499
-
561
+
500
562
  Args:
501
563
  agent_type: Type of agent
502
564
  task_description: Description of the task
503
-
565
+
504
566
  Returns:
505
567
  Model recommendation with analysis
506
568
  """
507
569
  agent_config = self.get_agent_config(agent_type)
508
570
  if not agent_config:
509
571
  return {"error": f"Agent type not found: {agent_type}"}
510
-
572
+
511
573
  # Use ModelSelector for recommendation
512
574
  recommendation = self.model_selector.get_model_recommendation(
513
575
  agent_type, task_description, agent_config.performance_requirements
514
576
  )
515
-
577
+
516
578
  # Add agent-specific context
517
579
  recommendation["agent_config"] = {
518
580
  "current_model": agent_config.get_effective_model(),
@@ -520,9 +582,9 @@ class SystemAgentConfigManager:
520
582
  "capabilities": agent_config.capabilities,
521
583
  "specializations": agent_config.specializations,
522
584
  "performance_requirements": agent_config.performance_requirements,
523
- "model_preferences": agent_config.model_preferences
585
+ "model_preferences": agent_config.model_preferences,
524
586
  }
525
-
587
+
526
588
  return recommendation
527
589
 
528
590
 
@@ -549,19 +611,19 @@ if __name__ == "__main__":
549
611
  # Test the system agent configuration
550
612
  print("System Agent Configuration Test")
551
613
  print("=" * 50)
552
-
614
+
553
615
  manager = SystemAgentConfigManager()
554
-
616
+
555
617
  # Show all agents
556
618
  agents = manager.get_all_agents()
557
619
  print(f"Total System Agents: {len(agents)}")
558
-
620
+
559
621
  # Show model distribution
560
622
  distribution = manager.get_model_distribution()
561
623
  print(f"\nModel Distribution:")
562
624
  for model_id, count in distribution.items():
563
625
  print(f" {model_id}: {count} agents")
564
-
626
+
565
627
  # Show agents by model
566
628
  print(f"\nAgents by Model:")
567
629
  for model_id in distribution.keys():
@@ -569,7 +631,7 @@ if __name__ == "__main__":
569
631
  print(f" {model_id}:")
570
632
  for agent in agents_with_model:
571
633
  print(f" - {agent.agent_name} ({agent.agent_type})")
572
-
634
+
573
635
  # Validation
574
636
  validation = manager.validate_agent_model_assignments()
575
637
  print(f"\nValidation Results:")
@@ -577,11 +639,15 @@ if __name__ == "__main__":
577
639
  print(f" Issues: {len(validation['issues'])}")
578
640
  print(f" Warnings: {len(validation['warnings'])}")
579
641
  print(f" Recommendations: {len(validation['recommendations'])}")
580
-
642
+
581
643
  # Configuration summary
582
644
  summary = manager.get_configuration_summary()
583
645
  print(f"\nConfiguration Summary:")
584
646
  print(f" Enabled Agents: {summary['enabled_agents']}")
585
647
  print(f" Environment Overrides: {len(summary['environment_overrides'])}")
586
- print(f" Total Capabilities: {summary['capabilities_coverage']['total_capabilities']}")
587
- print(f" Total Specializations: {summary['capabilities_coverage']['total_specializations']}")
648
+ print(
649
+ f" Total Capabilities: {summary['capabilities_coverage']['total_capabilities']}"
650
+ )
651
+ print(
652
+ f" Total Specializations: {summary['capabilities_coverage']['total_specializations']}"
653
+ )