claude-mpm 3.9.11__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 (419) 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 +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 +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 +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 -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 +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 +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/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 +233 -199
  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 +30 -13
  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 +13 -20
  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 +87 -84
  298. claude_mpm/services/mcp_gateway/main.py +287 -137
  299. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  300. claude_mpm/services/mcp_gateway/registry/service_registry.py +97 -94
  301. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  302. claude_mpm/services/mcp_gateway/server/__init__.py +2 -2
  303. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +105 -110
  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 +109 -119
  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 +19 -533
  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 +2 -2
  358. claude_mpm/storage/state_storage.py +177 -181
  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.11.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +27 -1
  381. claude_mpm-4.0.3.dist-info/RECORD +402 -0
  382. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
  383. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
  384. claude_mpm/cli/commands/run_guarded.py +0 -511
  385. claude_mpm/config/memory_guardian_config.py +0 -325
  386. claude_mpm/config/memory_guardian_yaml.py +0 -335
  387. claude_mpm/core/config_paths.py +0 -150
  388. claude_mpm/core/memory_aware_runner.py +0 -353
  389. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  390. claude_mpm/deployment_paths.py +0 -261
  391. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  392. claude_mpm/models/state_models.py +0 -433
  393. claude_mpm/services/agent/__init__.py +0 -24
  394. claude_mpm/services/agent/deployment.py +0 -2548
  395. claude_mpm/services/agent/management.py +0 -598
  396. claude_mpm/services/agent/registry.py +0 -813
  397. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  398. claude_mpm/services/communication/socketio.py +0 -1935
  399. claude_mpm/services/communication/websocket.py +0 -479
  400. claude_mpm/services/framework_claude_md_generator.py +0 -624
  401. claude_mpm/services/health_monitor.py +0 -893
  402. claude_mpm/services/infrastructure/graceful_degradation.py +0 -616
  403. claude_mpm/services/infrastructure/health_monitor.py +0 -775
  404. claude_mpm/services/infrastructure/memory_dashboard.py +0 -479
  405. claude_mpm/services/infrastructure/memory_guardian.py +0 -944
  406. claude_mpm/services/infrastructure/restart_protection.py +0 -642
  407. claude_mpm/services/infrastructure/state_manager.py +0 -774
  408. claude_mpm/services/mcp_gateway/manager.py +0 -334
  409. claude_mpm/services/optimized_hook_service.py +0 -542
  410. claude_mpm/services/project_analyzer.py +0 -864
  411. claude_mpm/services/project_registry.py +0 -608
  412. claude_mpm/services/standalone_socketio_server.py +0 -1300
  413. claude_mpm/services/ticket_manager_di.py +0 -318
  414. claude_mpm/services/ticketing_service_original.py +0 -510
  415. claude_mpm/utils/paths.py +0 -395
  416. claude_mpm/utils/platform_memory.py +0 -524
  417. claude_mpm-3.9.11.dist-info/RECORD +0 -306
  418. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
  419. {claude_mpm-3.9.11.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
@@ -12,60 +12,61 @@ This module handles:
12
12
  - Tier precedence configuration
13
13
  """
14
14
 
15
- import os
16
15
  import json
17
16
  import logging
18
- from pathlib import Path
19
- from typing import Dict, Optional, List, Any
17
+ import os
20
18
  from dataclasses import dataclass, field
21
19
  from enum import Enum
20
+ from pathlib import Path
21
+ from typing import Any, Dict, List, Optional
22
22
 
23
- from claude_mpm.core.config_paths import ConfigPaths
23
+ from claude_mpm.core.unified_paths import get_path_manager
24
24
 
25
25
  logger = logging.getLogger(__name__)
26
26
 
27
27
 
28
28
  class AgentPrecedenceMode(Enum):
29
29
  """Agent loading precedence modes."""
30
- STRICT = "strict" # PROJECT > USER > SYSTEM (no fallback)
31
- OVERRIDE = "override" # PROJECT > USER > SYSTEM (with fallback)
32
- MERGE = "merge" # Merge agents from all tiers
30
+
31
+ STRICT = "strict" # PROJECT > USER > SYSTEM (no fallback)
32
+ OVERRIDE = "override" # PROJECT > USER > SYSTEM (with fallback)
33
+ MERGE = "merge" # Merge agents from all tiers
33
34
 
34
35
 
35
36
  @dataclass
36
37
  class AgentConfig:
37
38
  """Configuration for agent loading and discovery."""
38
-
39
+
39
40
  # Agent directory paths
40
41
  project_agents_dir: Optional[Path] = None
41
42
  user_agents_dir: Optional[Path] = None
42
43
  system_agents_dir: Optional[Path] = None
43
-
44
+
44
45
  # Additional search paths (from environment or config)
45
46
  additional_paths: List[Path] = field(default_factory=list)
46
-
47
+
47
48
  # Precedence configuration
48
49
  precedence_mode: AgentPrecedenceMode = AgentPrecedenceMode.OVERRIDE
49
-
50
+
50
51
  # Feature flags
51
52
  enable_project_agents: bool = True
52
53
  enable_user_agents: bool = True
53
54
  enable_system_agents: bool = True
54
55
  enable_hot_reload: bool = True
55
-
56
+
56
57
  # Cache configuration
57
58
  cache_ttl_seconds: int = 3600
58
59
  enable_caching: bool = True
59
-
60
+
60
61
  # Validation settings
61
62
  validate_on_load: bool = True
62
63
  strict_validation: bool = False
63
-
64
+
64
65
  @classmethod
65
- def from_environment(cls) -> 'AgentConfig':
66
+ def from_environment(cls) -> "AgentConfig":
66
67
  """
67
68
  Create configuration from environment variables.
68
-
69
+
69
70
  Environment variables:
70
71
  - CLAUDE_MPM_PROJECT_AGENTS_DIR: Override project agents directory
71
72
  - CLAUDE_MPM_USER_AGENTS_DIR: Override user agents directory
@@ -79,187 +80,212 @@ class AgentConfig:
79
80
  - CLAUDE_MPM_AGENT_CACHE_TTL: Cache TTL in seconds
80
81
  """
81
82
  config = cls()
82
-
83
+
83
84
  # Directory overrides
84
- if proj_dir := os.getenv('CLAUDE_MPM_PROJECT_AGENTS_DIR'):
85
+ if proj_dir := os.getenv("CLAUDE_MPM_PROJECT_AGENTS_DIR"):
85
86
  config.project_agents_dir = Path(proj_dir)
86
87
  logger.info(f"Project agents directory override: {proj_dir}")
87
-
88
- if user_dir := os.getenv('CLAUDE_MPM_USER_AGENTS_DIR'):
88
+
89
+ if user_dir := os.getenv("CLAUDE_MPM_USER_AGENTS_DIR"):
89
90
  config.user_agents_dir = Path(user_dir)
90
91
  logger.info(f"User agents directory override: {user_dir}")
91
-
92
- if sys_dir := os.getenv('CLAUDE_MPM_SYSTEM_AGENTS_DIR'):
92
+
93
+ if sys_dir := os.getenv("CLAUDE_MPM_SYSTEM_AGENTS_DIR"):
93
94
  config.system_agents_dir = Path(sys_dir)
94
95
  logger.info(f"System agents directory override: {sys_dir}")
95
-
96
+
96
97
  # Additional search paths
97
- if search_path := os.getenv('CLAUDE_MPM_AGENT_SEARCH_PATH'):
98
- paths = [Path(p.strip()) for p in search_path.split(':') if p.strip()]
98
+ if search_path := os.getenv("CLAUDE_MPM_AGENT_SEARCH_PATH"):
99
+ paths = [Path(p.strip()) for p in search_path.split(":") if p.strip()]
99
100
  config.additional_paths = [p for p in paths if p.exists()]
100
101
  logger.info(f"Additional agent search paths: {config.additional_paths}")
101
-
102
+
102
103
  # Precedence mode
103
- if precedence := os.getenv('CLAUDE_MPM_AGENT_PRECEDENCE'):
104
+ if precedence := os.getenv("CLAUDE_MPM_AGENT_PRECEDENCE"):
104
105
  try:
105
106
  config.precedence_mode = AgentPrecedenceMode(precedence.lower())
106
107
  logger.info(f"Agent precedence mode: {config.precedence_mode.value}")
107
108
  except ValueError:
108
109
  logger.warning(f"Invalid precedence mode: {precedence}, using default")
109
-
110
+
110
111
  # Feature flags
111
- config.enable_project_agents = os.getenv('CLAUDE_MPM_DISABLE_PROJECT_AGENTS', '').lower() != 'true'
112
- config.enable_user_agents = os.getenv('CLAUDE_MPM_DISABLE_USER_AGENTS', '').lower() != 'true'
113
- config.enable_system_agents = os.getenv('CLAUDE_MPM_DISABLE_SYSTEM_AGENTS', '').lower() != 'true'
114
- config.enable_hot_reload = os.getenv('CLAUDE_MPM_AGENT_HOT_RELOAD', 'true').lower() == 'true'
115
-
112
+ config.enable_project_agents = (
113
+ os.getenv("CLAUDE_MPM_DISABLE_PROJECT_AGENTS", "").lower() != "true"
114
+ )
115
+ config.enable_user_agents = (
116
+ os.getenv("CLAUDE_MPM_DISABLE_USER_AGENTS", "").lower() != "true"
117
+ )
118
+ config.enable_system_agents = (
119
+ os.getenv("CLAUDE_MPM_DISABLE_SYSTEM_AGENTS", "").lower() != "true"
120
+ )
121
+ config.enable_hot_reload = (
122
+ os.getenv("CLAUDE_MPM_AGENT_HOT_RELOAD", "true").lower() == "true"
123
+ )
124
+
116
125
  # Cache configuration
117
- if cache_ttl := os.getenv('CLAUDE_MPM_AGENT_CACHE_TTL'):
126
+ if cache_ttl := os.getenv("CLAUDE_MPM_AGENT_CACHE_TTL"):
118
127
  try:
119
128
  config.cache_ttl_seconds = int(cache_ttl)
120
129
  except ValueError:
121
130
  logger.warning(f"Invalid cache TTL: {cache_ttl}, using default")
122
-
131
+
123
132
  return config
124
-
133
+
125
134
  @classmethod
126
- def from_file(cls, config_file: Path) -> 'AgentConfig':
135
+ def from_file(cls, config_file: Path) -> "AgentConfig":
127
136
  """
128
137
  Load configuration from a JSON or YAML file.
129
-
138
+
130
139
  Args:
131
140
  config_file: Path to configuration file
132
-
141
+
133
142
  Returns:
134
143
  AgentConfig instance
135
144
  """
136
145
  if not config_file.exists():
137
146
  logger.warning(f"Config file not found: {config_file}")
138
147
  return cls()
139
-
148
+
140
149
  try:
141
- if config_file.suffix in ['.yaml', '.yml']:
150
+ if config_file.suffix in [".yaml", ".yml"]:
142
151
  import yaml
143
- with open(config_file, 'r') as f:
152
+
153
+ with open(config_file, "r") as f:
144
154
  data = yaml.safe_load(f)
145
155
  else:
146
- with open(config_file, 'r') as f:
156
+ with open(config_file, "r") as f:
147
157
  data = json.load(f)
148
-
158
+
149
159
  config = cls()
150
-
160
+
151
161
  # Parse directory paths
152
- if 'project_agents_dir' in data:
153
- config.project_agents_dir = Path(data['project_agents_dir'])
154
- if 'user_agents_dir' in data:
155
- config.user_agents_dir = Path(data['user_agents_dir'])
156
- if 'system_agents_dir' in data:
157
- config.system_agents_dir = Path(data['system_agents_dir'])
158
-
162
+ if "project_agents_dir" in data:
163
+ config.project_agents_dir = Path(data["project_agents_dir"])
164
+ if "user_agents_dir" in data:
165
+ config.user_agents_dir = Path(data["user_agents_dir"])
166
+ if "system_agents_dir" in data:
167
+ config.system_agents_dir = Path(data["system_agents_dir"])
168
+
159
169
  # Parse additional paths
160
- if 'additional_paths' in data:
161
- config.additional_paths = [Path(p) for p in data['additional_paths']]
162
-
170
+ if "additional_paths" in data:
171
+ config.additional_paths = [Path(p) for p in data["additional_paths"]]
172
+
163
173
  # Parse precedence mode
164
- if 'precedence_mode' in data:
165
- config.precedence_mode = AgentPrecedenceMode(data['precedence_mode'])
166
-
174
+ if "precedence_mode" in data:
175
+ config.precedence_mode = AgentPrecedenceMode(data["precedence_mode"])
176
+
167
177
  # Parse feature flags
168
- for flag in ['enable_project_agents', 'enable_user_agents',
169
- 'enable_system_agents', 'enable_hot_reload',
170
- 'enable_caching', 'validate_on_load', 'strict_validation']:
178
+ for flag in [
179
+ "enable_project_agents",
180
+ "enable_user_agents",
181
+ "enable_system_agents",
182
+ "enable_hot_reload",
183
+ "enable_caching",
184
+ "validate_on_load",
185
+ "strict_validation",
186
+ ]:
171
187
  if flag in data:
172
188
  setattr(config, flag, bool(data[flag]))
173
-
189
+
174
190
  # Parse cache TTL
175
- if 'cache_ttl_seconds' in data:
176
- config.cache_ttl_seconds = int(data['cache_ttl_seconds'])
177
-
191
+ if "cache_ttl_seconds" in data:
192
+ config.cache_ttl_seconds = int(data["cache_ttl_seconds"])
193
+
178
194
  return config
179
-
195
+
180
196
  except Exception as e:
181
197
  logger.error(f"Error loading config from {config_file}: {e}")
182
198
  return cls()
183
-
199
+
184
200
  @classmethod
185
- def auto_discover(cls) -> 'AgentConfig':
201
+ def auto_discover(cls) -> "AgentConfig":
186
202
  """
187
203
  Automatically discover agent directories and create configuration.
188
-
204
+
189
205
  This method:
190
206
  1. Checks environment variables first
191
207
  2. Looks for config files in standard locations
192
208
  3. Auto-discovers agent directories
193
-
209
+
194
210
  Returns:
195
211
  AgentConfig with discovered settings
196
212
  """
197
213
  # Start with environment configuration
198
214
  config = cls.from_environment()
199
-
215
+
200
216
  # Look for config file if not already configured
201
217
  if not config.project_agents_dir and not config.user_agents_dir:
202
218
  # Check for project config file
203
- project_config = Path.cwd() / ConfigPaths.CONFIG_DIR / 'agent_config.yaml'
219
+ project_config = (
220
+ Path.cwd() / get_path_manager().CONFIG_DIR / "agent_config.yaml"
221
+ )
204
222
  if project_config.exists():
205
223
  logger.info(f"Loading project agent config from {project_config}")
206
224
  file_config = cls.from_file(project_config)
207
225
  # Merge with environment config (env takes precedence)
208
226
  config = cls._merge_configs(config, file_config)
209
-
227
+
210
228
  # Check for user config file
211
- user_config_dir = ConfigPaths.get_user_config_dir()
229
+ user_config_dir = get_path_manager().get_user_config_dir()
212
230
  if user_config_dir:
213
- user_config = user_config_dir / 'agent_config.yaml'
231
+ user_config = user_config_dir / "agent_config.yaml"
214
232
  if user_config.exists():
215
233
  logger.info(f"Loading user agent config from {user_config}")
216
234
  file_config = cls.from_file(user_config)
217
235
  config = cls._merge_configs(config, file_config)
218
-
236
+
219
237
  # Auto-discover directories if not configured
220
238
  if not config.project_agents_dir:
221
- project_agents = Path.cwd() / ConfigPaths.CONFIG_DIR / 'agents'
239
+ project_agents = Path.cwd() / get_path_manager().CONFIG_DIR / "agents"
222
240
  if project_agents.exists():
223
241
  config.project_agents_dir = project_agents
224
242
  logger.debug(f"Auto-discovered project agents at {project_agents}")
225
-
243
+
226
244
  if not config.user_agents_dir:
227
- user_agents = ConfigPaths.get_user_agents_dir()
245
+ user_agents = get_path_manager().get_user_agents_dir()
228
246
  if user_agents and user_agents.exists():
229
247
  config.user_agents_dir = user_agents
230
248
  logger.debug(f"Auto-discovered user agents at {user_agents}")
231
-
249
+
232
250
  if not config.system_agents_dir:
233
251
  # Default to built-in agents
234
- system_agents = Path(__file__).parent.parent / 'agents'
252
+ system_agents = Path(__file__).parent.parent / "agents"
235
253
  if system_agents.exists():
236
254
  config.system_agents_dir = system_agents
237
255
  logger.debug(f"Auto-discovered system agents at {system_agents}")
238
-
256
+
239
257
  return config
240
-
258
+
241
259
  @staticmethod
242
- def _merge_configs(primary: 'AgentConfig', secondary: 'AgentConfig') -> 'AgentConfig':
260
+ def _merge_configs(
261
+ primary: "AgentConfig", secondary: "AgentConfig"
262
+ ) -> "AgentConfig":
243
263
  """
244
264
  Merge two configurations, with primary taking precedence.
245
-
265
+
246
266
  Args:
247
267
  primary: Primary configuration (higher precedence)
248
268
  secondary: Secondary configuration (lower precedence)
249
-
269
+
250
270
  Returns:
251
271
  Merged configuration
252
272
  """
253
273
  result = AgentConfig()
254
-
274
+
255
275
  # Merge directory paths (primary takes precedence)
256
- result.project_agents_dir = primary.project_agents_dir or secondary.project_agents_dir
276
+ result.project_agents_dir = (
277
+ primary.project_agents_dir or secondary.project_agents_dir
278
+ )
257
279
  result.user_agents_dir = primary.user_agents_dir or secondary.user_agents_dir
258
- result.system_agents_dir = primary.system_agents_dir or secondary.system_agents_dir
259
-
280
+ result.system_agents_dir = (
281
+ primary.system_agents_dir or secondary.system_agents_dir
282
+ )
283
+
260
284
  # Merge additional paths
261
- result.additional_paths = list(set(primary.additional_paths + secondary.additional_paths))
262
-
285
+ result.additional_paths = list(
286
+ set(primary.additional_paths + secondary.additional_paths)
287
+ )
288
+
263
289
  # Use primary's settings for other fields
264
290
  result.precedence_mode = primary.precedence_mode
265
291
  result.enable_project_agents = primary.enable_project_agents
@@ -270,45 +296,51 @@ class AgentConfig:
270
296
  result.enable_caching = primary.enable_caching
271
297
  result.validate_on_load = primary.validate_on_load
272
298
  result.strict_validation = primary.strict_validation
273
-
299
+
274
300
  return result
275
-
301
+
276
302
  def get_enabled_tiers(self) -> Dict[str, Optional[Path]]:
277
303
  """
278
304
  Get enabled agent directories by tier.
279
-
305
+
280
306
  Returns:
281
307
  Dictionary mapping tier names to their paths (if enabled)
282
308
  """
283
309
  tiers = {}
284
-
310
+
285
311
  if self.enable_project_agents and self.project_agents_dir:
286
- tiers['project'] = self.project_agents_dir
287
-
312
+ tiers["project"] = self.project_agents_dir
313
+
288
314
  if self.enable_user_agents and self.user_agents_dir:
289
- tiers['user'] = self.user_agents_dir
290
-
315
+ tiers["user"] = self.user_agents_dir
316
+
291
317
  if self.enable_system_agents and self.system_agents_dir:
292
- tiers['system'] = self.system_agents_dir
293
-
318
+ tiers["system"] = self.system_agents_dir
319
+
294
320
  return tiers
295
-
321
+
296
322
  def to_dict(self) -> Dict[str, Any]:
297
323
  """Convert configuration to dictionary for serialization."""
298
324
  return {
299
- 'project_agents_dir': str(self.project_agents_dir) if self.project_agents_dir else None,
300
- 'user_agents_dir': str(self.user_agents_dir) if self.user_agents_dir else None,
301
- 'system_agents_dir': str(self.system_agents_dir) if self.system_agents_dir else None,
302
- 'additional_paths': [str(p) for p in self.additional_paths],
303
- 'precedence_mode': self.precedence_mode.value,
304
- 'enable_project_agents': self.enable_project_agents,
305
- 'enable_user_agents': self.enable_user_agents,
306
- 'enable_system_agents': self.enable_system_agents,
307
- 'enable_hot_reload': self.enable_hot_reload,
308
- 'cache_ttl_seconds': self.cache_ttl_seconds,
309
- 'enable_caching': self.enable_caching,
310
- 'validate_on_load': self.validate_on_load,
311
- 'strict_validation': self.strict_validation
325
+ "project_agents_dir": str(self.project_agents_dir)
326
+ if self.project_agents_dir
327
+ else None,
328
+ "user_agents_dir": str(self.user_agents_dir)
329
+ if self.user_agents_dir
330
+ else None,
331
+ "system_agents_dir": str(self.system_agents_dir)
332
+ if self.system_agents_dir
333
+ else None,
334
+ "additional_paths": [str(p) for p in self.additional_paths],
335
+ "precedence_mode": self.precedence_mode.value,
336
+ "enable_project_agents": self.enable_project_agents,
337
+ "enable_user_agents": self.enable_user_agents,
338
+ "enable_system_agents": self.enable_system_agents,
339
+ "enable_hot_reload": self.enable_hot_reload,
340
+ "cache_ttl_seconds": self.cache_ttl_seconds,
341
+ "enable_caching": self.enable_caching,
342
+ "validate_on_load": self.validate_on_load,
343
+ "strict_validation": self.strict_validation,
312
344
  }
313
345
 
314
346
 
@@ -319,7 +351,7 @@ _global_config: Optional[AgentConfig] = None
319
351
  def get_agent_config() -> AgentConfig:
320
352
  """
321
353
  Get the global agent configuration.
322
-
354
+
323
355
  Returns:
324
356
  AgentConfig instance (auto-discovered if not set)
325
357
  """
@@ -332,7 +364,7 @@ def get_agent_config() -> AgentConfig:
332
364
  def set_agent_config(config: AgentConfig) -> None:
333
365
  """
334
366
  Set the global agent configuration.
335
-
367
+
336
368
  Args:
337
369
  config: AgentConfig instance to use globally
338
370
  """
@@ -345,4 +377,4 @@ def reset_agent_config() -> None:
345
377
  """Reset the global agent configuration to auto-discover on next access."""
346
378
  global _global_config
347
379
  _global_config = None
348
- logger.info("Agent configuration reset")
380
+ logger.info("Agent configuration reset")