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
@@ -20,17 +20,17 @@ import sys
20
20
  import time
21
21
  from concurrent.futures import ThreadPoolExecutor
22
22
  from dataclasses import dataclass, field
23
- from pathlib import Path
24
23
  from typing import Any, Callable, Dict, List, Optional, Set, Tuple
25
24
 
26
- from .lazy import LazyService, lazy_load
27
- from .cache import get_file_cache
28
25
  from ..core.logger import get_logger
26
+ from .cache import get_file_cache
27
+ from .lazy import LazyService, lazy_load
29
28
 
30
29
 
31
30
  @dataclass
32
31
  class StartupMetrics:
33
32
  """Metrics for startup performance."""
33
+
34
34
  total_time: float = 0.0
35
35
  import_time: float = 0.0
36
36
  config_time: float = 0.0
@@ -42,41 +42,49 @@ class StartupMetrics:
42
42
 
43
43
  class OptimizedStartup:
44
44
  """Manager for optimized application startup.
45
-
45
+
46
46
  WHY this design:
47
47
  - Phase-based initialization for progressive loading
48
48
  - Critical-path optimization
49
49
  - Deferred loading for optional features
50
50
  - Parallel initialization where possible
51
-
51
+
52
52
  Example:
53
53
  startup = OptimizedStartup()
54
-
54
+
55
55
  # Fast minimal startup
56
56
  startup.initialize_minimal()
57
-
57
+
58
58
  # Progressive enhancement
59
59
  startup.initialize_services()
60
60
  startup.initialize_agents()
61
61
  """
62
-
62
+
63
63
  # Critical services needed immediately
64
- CRITICAL_SERVICES = {
65
- 'logger', 'config', 'paths', 'cli_parser'
66
- }
67
-
64
+ CRITICAL_SERVICES = {"logger", "config", "paths", "cli_parser"}
65
+
68
66
  # Services that can be deferred
69
67
  DEFERRED_SERVICES = {
70
- 'socketio', 'dashboard', 'memory', 'hooks',
71
- 'project_analyzer', 'tree_sitter', 'monitoring'
68
+ "socketio",
69
+ "dashboard",
70
+ "memory",
71
+ "hooks",
72
+ "project_analyzer",
73
+ "tree_sitter",
74
+ "monitoring",
72
75
  }
73
-
76
+
74
77
  # Heavy imports to defer
75
78
  HEAVY_IMPORTS = {
76
- 'numpy', 'pandas', 'matplotlib', 'scipy',
77
- 'tensorflow', 'torch', 'transformers'
79
+ "numpy",
80
+ "pandas",
81
+ "matplotlib",
82
+ "scipy",
83
+ "tensorflow",
84
+ "torch",
85
+ "transformers",
78
86
  }
79
-
87
+
80
88
  def __init__(self):
81
89
  self.metrics = StartupMetrics()
82
90
  self.logger = get_logger("startup")
@@ -84,44 +92,44 @@ class OptimizedStartup:
84
92
  self.lazy_services: Dict[str, LazyService] = {}
85
93
  self.import_cache: Dict[str, Any] = {}
86
94
  self.executor = ThreadPoolExecutor(max_workers=4)
87
-
95
+
88
96
  # Start timer
89
97
  self.start_time = time.time()
90
-
98
+
91
99
  def initialize_minimal(self) -> float:
92
100
  """Initialize only critical components for fast startup.
93
-
101
+
94
102
  Returns:
95
103
  Time taken for minimal initialization
96
104
  """
97
105
  phase_start = time.time()
98
-
106
+
99
107
  # 1. Setup basic logging (synchronous, required immediately)
100
108
  self._setup_logging()
101
-
109
+
102
110
  # 2. Load minimal config (only required settings)
103
111
  self._load_minimal_config()
104
-
112
+
105
113
  # 3. Setup CLI parser (needed for argument processing)
106
114
  self._setup_cli_parser()
107
-
115
+
108
116
  elapsed = time.time() - phase_start
109
- self.metrics.phases['minimal'] = elapsed
117
+ self.metrics.phases["minimal"] = elapsed
110
118
  self.logger.info(f"Minimal initialization completed in {elapsed:.2f}s")
111
-
119
+
112
120
  return elapsed
113
-
121
+
114
122
  def initialize_services(self, lazy: bool = True) -> float:
115
123
  """Initialize service layer with optional lazy loading.
116
-
124
+
117
125
  Args:
118
126
  lazy: Whether to use lazy loading for services
119
-
127
+
120
128
  Returns:
121
129
  Time taken for service initialization
122
130
  """
123
131
  phase_start = time.time()
124
-
132
+
125
133
  if lazy:
126
134
  # Create lazy wrappers for deferred services
127
135
  self._create_lazy_services()
@@ -129,257 +137,252 @@ class OptimizedStartup:
129
137
  else:
130
138
  # Initialize all services immediately
131
139
  self._initialize_all_services()
132
-
140
+
133
141
  elapsed = time.time() - phase_start
134
- self.metrics.phases['services'] = elapsed
142
+ self.metrics.phases["services"] = elapsed
135
143
  self.metrics.service_time = elapsed
136
-
144
+
137
145
  return elapsed
138
-
146
+
139
147
  def initialize_agents(self, preload: bool = False) -> float:
140
148
  """Initialize agent system with optional preloading.
141
-
149
+
142
150
  Args:
143
151
  preload: Whether to preload all agents
144
-
152
+
145
153
  Returns:
146
154
  Time taken for agent initialization
147
155
  """
148
156
  phase_start = time.time()
149
-
157
+
150
158
  if preload:
151
159
  # Load all agents immediately
152
160
  from .optimized_agent_loader import preload_system_agents
161
+
153
162
  preload_system_agents()
154
163
  else:
155
164
  # Just setup agent registry, load on demand
156
165
  self._setup_agent_registry()
157
-
166
+
158
167
  elapsed = time.time() - phase_start
159
- self.metrics.phases['agents'] = elapsed
168
+ self.metrics.phases["agents"] = elapsed
160
169
  self.metrics.agent_time = elapsed
161
-
170
+
162
171
  return elapsed
163
-
172
+
164
173
  async def initialize_async(self) -> StartupMetrics:
165
174
  """Fully async initialization for maximum performance.
166
-
175
+
167
176
  Returns:
168
177
  Complete startup metrics
169
178
  """
170
179
  start = time.time()
171
-
180
+
172
181
  # Run initialization phases concurrently where possible
173
182
  tasks = [
174
183
  self._async_load_config(),
175
184
  self._async_setup_services(),
176
- self._async_load_agents()
185
+ self._async_load_agents(),
177
186
  ]
178
-
187
+
179
188
  results = await asyncio.gather(*tasks, return_exceptions=True)
180
-
189
+
181
190
  # Handle any errors
182
191
  for i, result in enumerate(results):
183
192
  if isinstance(result, Exception):
184
193
  self.logger.error(f"Async initialization error in task {i}: {result}")
185
-
194
+
186
195
  self.metrics.total_time = time.time() - start
187
196
  self.logger.info(f"Async startup completed in {self.metrics.total_time:.2f}s")
188
-
197
+
189
198
  return self.metrics
190
-
199
+
191
200
  def _setup_logging(self):
192
201
  """Setup basic logging (critical path)."""
193
202
  # Minimal logging setup - already handled by logger module
194
- self.initialized_services.add('logger')
195
-
203
+ self.initialized_services.add("logger")
204
+
196
205
  def _load_minimal_config(self):
197
206
  """Load only essential configuration."""
198
207
  try:
199
208
  # Use cache for config if available
200
209
  cache = get_file_cache()
201
210
  config_path = Path.home() / ".claude-mpm" / "config.yaml"
202
-
211
+
203
212
  if config_path.exists():
204
213
  config = cache.get_or_compute(
205
214
  f"config:{config_path}",
206
215
  lambda: self._parse_config(config_path),
207
- ttl=60
216
+ ttl=60,
208
217
  )
209
218
  # Store in a lightweight way
210
219
  self._store_config(config)
211
-
212
- self.initialized_services.add('config')
220
+
221
+ self.initialized_services.add("config")
213
222
  except Exception as e:
214
223
  self.logger.warning(f"Failed to load config: {e}")
215
-
224
+
216
225
  def _parse_config(self, path: Path) -> Dict[str, Any]:
217
226
  """Parse configuration file."""
218
227
  import yaml
228
+
219
229
  with open(path) as f:
220
230
  return yaml.safe_load(f) or {}
221
-
231
+
222
232
  def _store_config(self, config: Dict[str, Any]):
223
233
  """Store configuration for later use."""
224
234
  # Simple storage without heavy Config class
225
- sys.modules['__claude_mpm_config__'] = type('Config', (), config)()
226
-
235
+ sys.modules["__claude_mpm_config__"] = type("Config", (), config)()
236
+
227
237
  def _setup_cli_parser(self):
228
238
  """Setup CLI argument parser."""
229
239
  # Defer actual parser creation until needed
230
- self.lazy_services['cli_parser'] = LazyService(
231
- service_class=self._create_cli_parser,
232
- name='cli_parser'
240
+ self.lazy_services["cli_parser"] = LazyService(
241
+ service_class=self._create_cli_parser, name="cli_parser"
233
242
  )
234
- self.initialized_services.add('cli_parser')
235
-
243
+ self.initialized_services.add("cli_parser")
244
+
236
245
  def _create_cli_parser(self):
237
246
  """Actually create the CLI parser when needed."""
238
247
  from ..cli.parser import create_parser
248
+
239
249
  return create_parser()
240
-
250
+
241
251
  def _create_lazy_services(self):
242
252
  """Create lazy wrappers for deferred services."""
243
253
  # SocketIO service (heavy, often not needed)
244
- self.lazy_services['socketio'] = lazy_load(
245
- self._create_socketio_service,
246
- name='socketio'
254
+ self.lazy_services["socketio"] = lazy_load(
255
+ self._create_socketio_service, name="socketio"
247
256
  )
248
-
257
+
249
258
  # Dashboard service
250
- self.lazy_services['dashboard'] = lazy_load(
251
- self._create_dashboard_service,
252
- name='dashboard'
259
+ self.lazy_services["dashboard"] = lazy_load(
260
+ self._create_dashboard_service, name="dashboard"
253
261
  )
254
-
262
+
255
263
  # Memory service
256
- self.lazy_services['memory'] = lazy_load(
257
- self._create_memory_service,
258
- name='memory'
264
+ self.lazy_services["memory"] = lazy_load(
265
+ self._create_memory_service, name="memory"
259
266
  )
260
-
267
+
261
268
  # Hook service
262
- self.lazy_services['hooks'] = lazy_load(
263
- self._create_hook_service,
264
- name='hooks'
265
- )
266
-
269
+ self.lazy_services["hooks"] = lazy_load(self._create_hook_service, name="hooks")
270
+
267
271
  # Project analyzer (very heavy)
268
- self.lazy_services['project_analyzer'] = lazy_load(
269
- self._create_project_analyzer,
270
- name='project_analyzer'
272
+ self.lazy_services["project_analyzer"] = lazy_load(
273
+ self._create_project_analyzer, name="project_analyzer"
271
274
  )
272
-
275
+
273
276
  # Track deferred services
274
277
  self.metrics.deferred_services = list(self.lazy_services.keys())
275
-
278
+
276
279
  def _create_socketio_service(self):
277
280
  """Create SocketIO service when needed."""
278
281
  from ..core.socketio_pool import get_connection_pool
282
+
279
283
  return get_connection_pool()
280
-
284
+
281
285
  def _create_dashboard_service(self):
282
286
  """Create dashboard service when needed."""
283
287
  # Import only when needed
284
288
  from ..services.dashboard import DashboardService
289
+
285
290
  return DashboardService()
286
-
291
+
287
292
  def _create_memory_service(self):
288
293
  """Create memory service when needed."""
289
294
  from ..services.memory.indexed_memory import get_indexed_memory
295
+
290
296
  return get_indexed_memory()
291
-
297
+
292
298
  def _create_hook_service(self):
293
299
  """Create hook service when needed."""
294
300
  from ..services.hook_service import HookService
301
+
295
302
  return HookService()
296
-
303
+
297
304
  def _create_project_analyzer(self):
298
305
  """Create project analyzer when needed."""
299
306
  # This is typically very heavy
300
- from ..services.agent_modification_tracker.analyzer import ProjectAnalyzer
307
+ from ..services.project.analyzer import ProjectAnalyzer
308
+
301
309
  return ProjectAnalyzer()
302
-
310
+
303
311
  def _initialize_all_services(self):
304
312
  """Initialize all services immediately (non-lazy mode)."""
305
- services = [
306
- 'socketio', 'dashboard', 'memory', 'hooks', 'project_analyzer'
307
- ]
308
-
313
+ services = ["socketio", "dashboard", "memory", "hooks", "project_analyzer"]
314
+
309
315
  for service_name in services:
310
316
  try:
311
- creator = getattr(self, f'_create_{service_name}_service', None)
317
+ creator = getattr(self, f"_create_{service_name}_service", None)
312
318
  if creator:
313
319
  creator()
314
320
  self.initialized_services.add(service_name)
315
321
  except Exception as e:
316
322
  self.logger.warning(f"Failed to initialize {service_name}: {e}")
317
-
323
+
318
324
  def _setup_agent_registry(self):
319
325
  """Setup agent registry for on-demand loading."""
320
- self.lazy_services['agent_registry'] = lazy_load(
321
- self._create_agent_registry,
322
- name='agent_registry'
326
+ self.lazy_services["agent_registry"] = lazy_load(
327
+ self._create_agent_registry, name="agent_registry"
323
328
  )
324
- self.initialized_services.add('agent_registry')
325
-
329
+ self.initialized_services.add("agent_registry")
330
+
326
331
  def _create_agent_registry(self):
327
332
  """Create agent registry when needed."""
328
- from ..core.agent_registry import SimpleAgentRegistry
329
333
  from pathlib import Path
334
+
335
+ from ..core.agent_registry import SimpleAgentRegistry
336
+
330
337
  return SimpleAgentRegistry(Path.cwd())
331
-
338
+
332
339
  async def _async_load_config(self):
333
340
  """Load configuration asynchronously."""
334
341
  loop = asyncio.get_event_loop()
335
342
  config_path = Path.home() / ".claude-mpm" / "config.yaml"
336
-
343
+
337
344
  if config_path.exists():
338
- config = await loop.run_in_executor(
339
- None,
340
- self._parse_config,
341
- config_path
342
- )
345
+ config = await loop.run_in_executor(None, self._parse_config, config_path)
343
346
  self._store_config(config)
344
-
347
+
345
348
  async def _async_setup_services(self):
346
349
  """Setup services asynchronously."""
347
350
  # Create all lazy services concurrently
348
351
  loop = asyncio.get_event_loop()
349
352
  await loop.run_in_executor(None, self._create_lazy_services)
350
-
353
+
351
354
  async def _async_load_agents(self):
352
355
  """Load agents asynchronously."""
353
356
  from .optimized_agent_loader import get_optimized_loader
354
-
357
+
355
358
  loader = get_optimized_loader()
356
359
  agent_paths = self._discover_agent_paths()
357
-
360
+
358
361
  if agent_paths:
359
362
  await loader.load_agents_async(agent_paths)
360
-
363
+
361
364
  def _discover_agent_paths(self) -> List[Path]:
362
365
  """Discover agent file paths."""
363
366
  paths = []
364
367
  agent_dirs = [
365
368
  Path.cwd() / ".claude" / "agents",
366
369
  Path.cwd() / ".claude-mpm" / "agents",
367
- Path.home() / ".claude-mpm" / "agents"
370
+ Path.home() / ".claude-mpm" / "agents",
368
371
  ]
369
-
372
+
370
373
  for dir_path in agent_dirs:
371
374
  if dir_path.exists():
372
- paths.extend(dir_path.glob('*.json'))
373
- paths.extend(dir_path.glob('*.md'))
374
-
375
+ paths.extend(dir_path.glob("*.json"))
376
+ paths.extend(dir_path.glob("*.md"))
377
+
375
378
  return paths
376
-
379
+
377
380
  def defer_import(self, module_name: str) -> Optional[Any]:
378
381
  """Defer heavy imports until actually needed.
379
-
382
+
380
383
  Args:
381
384
  module_name: Name of module to import
382
-
385
+
383
386
  Returns:
384
387
  Imported module or None if not needed yet
385
388
  """
@@ -387,11 +390,11 @@ class OptimizedStartup:
387
390
  # Don't import heavy modules during startup
388
391
  self.logger.debug(f"Deferring import of {module_name}")
389
392
  return None
390
-
393
+
391
394
  # Check cache
392
395
  if module_name in self.import_cache:
393
396
  return self.import_cache[module_name]
394
-
397
+
395
398
  # Import and cache
396
399
  try:
397
400
  module = importlib.import_module(module_name)
@@ -400,81 +403,80 @@ class OptimizedStartup:
400
403
  except ImportError as e:
401
404
  self.logger.warning(f"Failed to import {module_name}: {e}")
402
405
  return None
403
-
406
+
404
407
  def get_service(self, name: str) -> Any:
405
408
  """Get a service, initializing if needed.
406
-
409
+
407
410
  Args:
408
411
  name: Service name
409
-
412
+
410
413
  Returns:
411
414
  Service instance
412
415
  """
413
416
  if name in self.lazy_services:
414
417
  # Lazy service will initialize on first access
415
418
  return self.lazy_services[name]
416
-
419
+
417
420
  # Try to create service
418
- creator = getattr(self, f'_create_{name}_service', None)
421
+ creator = getattr(self, f"_create_{name}_service", None)
419
422
  if creator:
420
423
  service = creator()
421
424
  self.initialized_services.add(name)
422
425
  return service
423
-
426
+
424
427
  return None
425
-
428
+
426
429
  def get_metrics(self) -> Dict[str, Any]:
427
430
  """Get startup performance metrics."""
428
431
  self.metrics.total_time = time.time() - self.start_time
429
-
432
+
430
433
  return {
431
- 'total_time': self.metrics.total_time,
432
- 'phases': self.metrics.phases,
433
- 'service_time': self.metrics.service_time,
434
- 'agent_time': self.metrics.agent_time,
435
- 'initialized_services': list(self.initialized_services),
436
- 'deferred_services': self.metrics.deferred_services,
437
- 'lazy_services_initialized': sum(
438
- 1 for s in self.lazy_services.values()
439
- if s.is_initialized
440
- )
434
+ "total_time": self.metrics.total_time,
435
+ "phases": self.metrics.phases,
436
+ "service_time": self.metrics.service_time,
437
+ "agent_time": self.metrics.agent_time,
438
+ "initialized_services": list(self.initialized_services),
439
+ "deferred_services": self.metrics.deferred_services,
440
+ "lazy_services_initialized": sum(
441
+ 1 for s in self.lazy_services.values() if s.is_initialized
442
+ ),
441
443
  }
442
444
 
443
445
 
444
- def optimize_startup(mode: str = 'lazy') -> OptimizedStartup:
446
+ def optimize_startup(mode: str = "lazy") -> OptimizedStartup:
445
447
  """Optimize application startup.
446
-
448
+
447
449
  Args:
448
450
  mode: Startup mode ('lazy', 'eager', 'async')
449
-
451
+
450
452
  Returns:
451
453
  Configured startup manager
452
-
454
+
453
455
  Example:
454
456
  # Fast lazy startup
455
457
  startup = optimize_startup('lazy')
456
458
  startup.initialize_minimal()
457
459
  startup.initialize_services(lazy=True)
458
-
460
+
459
461
  # Access services as needed (they initialize on first use)
460
462
  memory = startup.get_service('memory')
461
463
  """
462
464
  startup = OptimizedStartup()
463
-
464
- if mode == 'lazy':
465
+
466
+ if mode == "lazy":
465
467
  # Minimal startup with lazy loading
466
468
  startup.initialize_minimal()
467
469
  startup.initialize_services(lazy=True)
468
470
  startup.initialize_agents(preload=False)
469
- elif mode == 'eager':
471
+ elif mode == "eager":
470
472
  # Full initialization upfront
471
473
  startup.initialize_minimal()
472
474
  startup.initialize_services(lazy=False)
473
475
  startup.initialize_agents(preload=True)
474
- elif mode == 'async':
476
+ elif mode == "async":
475
477
  # Async initialization
476
478
  asyncio.run(startup.initialize_async())
477
-
479
+
478
480
  return startup
479
481
 
480
482
 
@@ -487,4 +489,4 @@ def get_startup_manager() -> OptimizedStartup:
487
489
  global _startup_manager
488
490
  if _startup_manager is None:
489
491
  _startup_manager = OptimizedStartup()
490
- return _startup_manager
492
+ return _startup_manager