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
@@ -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")