claude-mpm 4.1.26__py3-none-any.whl → 5.0.9__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 (792) hide show
  1. claude_mpm/BUILD_NUMBER +1 -1
  2. claude_mpm/VERSION +1 -1
  3. claude_mpm/__init__.py +20 -5
  4. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +118 -0
  5. claude_mpm/agents/BASE_DOCUMENTATION.md +53 -0
  6. claude_mpm/agents/BASE_ENGINEER.md +658 -0
  7. claude_mpm/agents/BASE_OPS.md +219 -0
  8. claude_mpm/agents/BASE_PM.md +432 -158
  9. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +787 -0
  10. claude_mpm/agents/BASE_QA.md +167 -0
  11. claude_mpm/agents/BASE_RESEARCH.md +53 -0
  12. claude_mpm/agents/OUTPUT_STYLE.md +254 -29
  13. claude_mpm/agents/PM_INSTRUCTIONS.md +969 -0
  14. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  15. claude_mpm/agents/WORKFLOW.md +355 -191
  16. claude_mpm/agents/__init__.py +6 -0
  17. claude_mpm/agents/agent_loader.py +41 -14
  18. claude_mpm/agents/agent_loader_integration.py +3 -2
  19. claude_mpm/agents/async_agent_loader.py +3 -3
  20. claude_mpm/agents/base_agent.json +6 -3
  21. claude_mpm/agents/base_agent_loader.py +21 -44
  22. claude_mpm/agents/frontmatter_validator.py +292 -252
  23. claude_mpm/agents/system_agent_config.py +3 -2
  24. claude_mpm/agents/templates/README.md +465 -0
  25. claude_mpm/agents/templates/circuit-breakers.md +1005 -0
  26. claude_mpm/agents/templates/context-management-examples.md +544 -0
  27. claude_mpm/agents/templates/git-file-tracking.md +584 -0
  28. claude_mpm/agents/templates/pm-examples.md +474 -0
  29. claude_mpm/agents/templates/pm-red-flags.md +310 -0
  30. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  31. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  32. claude_mpm/agents/templates/response-format.md +583 -0
  33. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  34. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  35. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  36. claude_mpm/agents/templates/validation-templates.md +312 -0
  37. claude_mpm/cli/__init__.py +72 -376
  38. claude_mpm/cli/commands/__init__.py +4 -0
  39. claude_mpm/cli/commands/agent_manager.py +675 -20
  40. claude_mpm/cli/commands/agent_source.py +774 -0
  41. claude_mpm/cli/commands/agent_state_manager.py +344 -0
  42. claude_mpm/cli/commands/agents.py +1673 -178
  43. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  44. claude_mpm/cli/commands/agents_detect.py +380 -0
  45. claude_mpm/cli/commands/agents_discover.py +338 -0
  46. claude_mpm/cli/commands/agents_recommend.py +309 -0
  47. claude_mpm/cli/commands/aggregate.py +11 -7
  48. claude_mpm/cli/commands/analyze.py +18 -13
  49. claude_mpm/cli/commands/analyze_code.py +8 -4
  50. claude_mpm/cli/commands/auto_configure.py +566 -0
  51. claude_mpm/cli/commands/cleanup.py +12 -12
  52. claude_mpm/cli/commands/config.py +54 -17
  53. claude_mpm/cli/commands/configure.py +1184 -1055
  54. claude_mpm/cli/commands/configure_agent_display.py +261 -0
  55. claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
  56. claude_mpm/cli/commands/configure_hook_manager.py +225 -0
  57. claude_mpm/cli/commands/configure_models.py +18 -0
  58. claude_mpm/cli/commands/configure_navigation.py +184 -0
  59. claude_mpm/cli/commands/configure_paths.py +104 -0
  60. claude_mpm/cli/commands/configure_persistence.py +254 -0
  61. claude_mpm/cli/commands/configure_startup_manager.py +646 -0
  62. claude_mpm/cli/commands/configure_template_editor.py +497 -0
  63. claude_mpm/cli/commands/configure_validators.py +73 -0
  64. claude_mpm/cli/commands/dashboard.py +50 -52
  65. claude_mpm/cli/commands/debug.py +19 -19
  66. claude_mpm/cli/commands/doctor.py +51 -7
  67. claude_mpm/cli/commands/hook_errors.py +277 -0
  68. claude_mpm/cli/commands/info.py +3 -4
  69. claude_mpm/cli/commands/local_deploy.py +534 -0
  70. claude_mpm/cli/commands/mcp.py +17 -10
  71. claude_mpm/cli/commands/mcp_command_router.py +11 -0
  72. claude_mpm/cli/commands/mcp_config.py +154 -0
  73. claude_mpm/cli/commands/mcp_external_commands.py +249 -0
  74. claude_mpm/cli/commands/mcp_install_commands.py +101 -32
  75. claude_mpm/cli/commands/mcp_pipx_config.py +2 -2
  76. claude_mpm/cli/commands/mcp_setup_external.py +868 -0
  77. claude_mpm/cli/commands/memory.py +55 -21
  78. claude_mpm/cli/commands/monitor.py +160 -70
  79. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  80. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  81. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  82. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  83. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  84. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  85. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  86. claude_mpm/cli/commands/mpm_init_handler.py +114 -4
  87. claude_mpm/cli/commands/postmortem.py +401 -0
  88. claude_mpm/cli/commands/run.py +252 -167
  89. claude_mpm/cli/commands/search.py +458 -0
  90. claude_mpm/cli/commands/skill_source.py +694 -0
  91. claude_mpm/cli/commands/skills.py +1225 -0
  92. claude_mpm/cli/commands/uninstall.py +176 -0
  93. claude_mpm/cli/commands/upgrade.py +152 -0
  94. claude_mpm/cli/commands/verify.py +119 -0
  95. claude_mpm/cli/executor.py +279 -0
  96. claude_mpm/cli/helpers.py +105 -0
  97. claude_mpm/cli/interactive/__init__.py +21 -0
  98. claude_mpm/cli/interactive/agent_wizard.py +1872 -0
  99. claude_mpm/cli/interactive/skills_wizard.py +491 -0
  100. claude_mpm/cli/parser.py +79 -2
  101. claude_mpm/cli/parsers/__init__.py +7 -1
  102. claude_mpm/cli/parsers/agent_manager_parser.py +161 -1
  103. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  104. claude_mpm/cli/parsers/agents_parser.py +369 -1
  105. claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
  106. claude_mpm/cli/parsers/base_parser.py +196 -3
  107. claude_mpm/cli/parsers/config_parser.py +96 -43
  108. claude_mpm/cli/parsers/configure_parser.py +11 -15
  109. claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
  110. claude_mpm/cli/parsers/mcp_parser.py +15 -0
  111. claude_mpm/cli/parsers/monitor_parser.py +12 -2
  112. claude_mpm/cli/parsers/mpm_init_parser.py +179 -9
  113. claude_mpm/cli/parsers/run_parser.py +5 -0
  114. claude_mpm/cli/parsers/search_parser.py +245 -0
  115. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  116. claude_mpm/cli/parsers/skills_parser.py +282 -0
  117. claude_mpm/cli/parsers/source_parser.py +138 -0
  118. claude_mpm/cli/shared/argument_patterns.py +20 -13
  119. claude_mpm/cli/shared/base_command.py +2 -2
  120. claude_mpm/cli/shared/output_formatters.py +28 -19
  121. claude_mpm/cli/startup.py +994 -0
  122. claude_mpm/cli/startup_display.py +480 -0
  123. claude_mpm/cli/startup_logging.py +179 -13
  124. claude_mpm/cli/utils.py +54 -3
  125. claude_mpm/cli_module/commands.py +1 -1
  126. claude_mpm/commands/mpm-agents-auto-configure.md +278 -0
  127. claude_mpm/commands/mpm-agents-detect.md +177 -0
  128. claude_mpm/commands/mpm-agents-list.md +131 -0
  129. claude_mpm/commands/mpm-agents-recommend.md +223 -0
  130. claude_mpm/commands/mpm-config-view.md +150 -0
  131. claude_mpm/commands/mpm-doctor.md +9 -0
  132. claude_mpm/commands/mpm-help.md +297 -5
  133. claude_mpm/commands/mpm-init.md +401 -17
  134. claude_mpm/commands/mpm-monitor.md +418 -0
  135. claude_mpm/commands/mpm-postmortem.md +123 -0
  136. claude_mpm/commands/mpm-session-resume.md +381 -0
  137. claude_mpm/commands/mpm-status.md +79 -8
  138. claude_mpm/commands/mpm-ticket-organize.md +304 -0
  139. claude_mpm/commands/mpm-ticket-view.md +552 -0
  140. claude_mpm/commands/mpm-version.md +122 -0
  141. claude_mpm/commands/mpm.md +12 -0
  142. claude_mpm/config/agent_config.py +4 -4
  143. claude_mpm/config/agent_presets.py +488 -0
  144. claude_mpm/config/agent_sources.py +325 -0
  145. claude_mpm/config/experimental_features.py +7 -7
  146. claude_mpm/config/model_config.py +428 -0
  147. claude_mpm/config/paths.py +3 -2
  148. claude_mpm/config/skill_presets.py +392 -0
  149. claude_mpm/config/skill_sources.py +590 -0
  150. claude_mpm/config/socketio_config.py +3 -3
  151. claude_mpm/constants.py +28 -1
  152. claude_mpm/core/__init__.py +53 -17
  153. claude_mpm/core/agent_name_normalizer.py +3 -2
  154. claude_mpm/core/agent_registry.py +2 -2
  155. claude_mpm/core/agent_session_manager.py +10 -10
  156. claude_mpm/core/api_validator.py +330 -0
  157. claude_mpm/core/base_service.py +33 -23
  158. claude_mpm/core/cache.py +9 -9
  159. claude_mpm/core/claude_runner.py +24 -42
  160. claude_mpm/core/config.py +101 -8
  161. claude_mpm/core/config_aliases.py +7 -6
  162. claude_mpm/core/constants.py +66 -1
  163. claude_mpm/core/container.py +11 -5
  164. claude_mpm/core/enums.py +452 -0
  165. claude_mpm/core/error_handler.py +623 -0
  166. claude_mpm/core/factories.py +1 -1
  167. claude_mpm/core/file_utils.py +764 -0
  168. claude_mpm/core/framework/__init__.py +25 -0
  169. claude_mpm/core/framework/formatters/__init__.py +11 -0
  170. claude_mpm/core/framework/formatters/capability_generator.py +367 -0
  171. claude_mpm/core/framework/formatters/content_formatter.py +288 -0
  172. claude_mpm/core/framework/formatters/context_generator.py +185 -0
  173. claude_mpm/core/framework/loaders/__init__.py +13 -0
  174. claude_mpm/core/framework/loaders/agent_loader.py +210 -0
  175. claude_mpm/core/framework/loaders/file_loader.py +176 -0
  176. claude_mpm/core/framework/loaders/instruction_loader.py +181 -0
  177. claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
  178. claude_mpm/core/framework/processors/__init__.py +11 -0
  179. claude_mpm/core/framework/processors/memory_processor.py +230 -0
  180. claude_mpm/core/framework/processors/metadata_processor.py +146 -0
  181. claude_mpm/core/framework/processors/template_processor.py +244 -0
  182. claude_mpm/core/framework_loader.py +321 -1631
  183. claude_mpm/core/hook_error_memory.py +381 -0
  184. claude_mpm/core/hook_manager.py +49 -8
  185. claude_mpm/core/injectable_service.py +11 -8
  186. claude_mpm/core/instruction_reinforcement_hook.py +4 -3
  187. claude_mpm/core/interactive_session.py +146 -18
  188. claude_mpm/core/interfaces.py +56 -1
  189. claude_mpm/core/lazy.py +3 -3
  190. claude_mpm/core/log_manager.py +92 -23
  191. claude_mpm/core/logger.py +22 -15
  192. claude_mpm/core/logging_config.py +6 -2
  193. claude_mpm/core/logging_utils.py +520 -0
  194. claude_mpm/core/oneshot_session.py +122 -15
  195. claude_mpm/core/optimized_agent_loader.py +9 -9
  196. claude_mpm/core/optimized_startup.py +1 -1
  197. claude_mpm/core/output_style_manager.py +12 -192
  198. claude_mpm/core/pm_hook_interceptor.py +18 -12
  199. claude_mpm/core/protocols/__init__.py +23 -0
  200. claude_mpm/core/protocols/runner_protocol.py +103 -0
  201. claude_mpm/core/protocols/session_protocol.py +131 -0
  202. claude_mpm/core/service_registry.py +7 -3
  203. claude_mpm/core/session_manager.py +14 -12
  204. claude_mpm/core/shared/config_loader.py +1 -1
  205. claude_mpm/core/shared/singleton_manager.py +11 -4
  206. claude_mpm/core/socketio_pool.py +15 -15
  207. claude_mpm/core/system_context.py +38 -0
  208. claude_mpm/core/tool_access_control.py +3 -2
  209. claude_mpm/core/types.py +4 -11
  210. claude_mpm/core/typing_utils.py +7 -6
  211. claude_mpm/core/unified_agent_registry.py +115 -11
  212. claude_mpm/core/unified_config.py +6 -6
  213. claude_mpm/core/unified_paths.py +23 -20
  214. claude_mpm/dashboard/analysis_runner.py +4 -4
  215. claude_mpm/dashboard/api/simple_directory.py +261 -0
  216. claude_mpm/dashboard/static/css/activity.css +69 -69
  217. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  218. claude_mpm/dashboard/static/css/dashboard.css +600 -18
  219. claude_mpm/dashboard/static/js/components/activity-tree.js +181 -195
  220. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +105 -102
  221. claude_mpm/dashboard/static/js/components/agent-inference.js +34 -31
  222. claude_mpm/dashboard/static/js/components/build-tracker.js +67 -59
  223. claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
  224. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  225. claude_mpm/dashboard/static/js/components/diff-viewer.js +891 -0
  226. claude_mpm/dashboard/static/js/components/event-processor.js +3 -0
  227. claude_mpm/dashboard/static/js/components/event-viewer.js +50 -13
  228. claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
  229. claude_mpm/dashboard/static/js/components/file-change-tracker.js +443 -0
  230. claude_mpm/dashboard/static/js/components/file-change-viewer.js +690 -0
  231. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +36 -16
  232. claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
  233. claude_mpm/dashboard/static/js/components/module-viewer.js +49 -23
  234. claude_mpm/dashboard/static/js/components/session-manager.js +19 -19
  235. claude_mpm/dashboard/static/js/components/socket-manager.js +5 -1
  236. claude_mpm/dashboard/static/js/components/ui-state-manager.js +356 -41
  237. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +520 -88
  238. claude_mpm/dashboard/static/js/components/working-directory.js +46 -11
  239. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  240. claude_mpm/dashboard/static/js/dashboard.js +309 -178
  241. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  242. claude_mpm/dashboard/static/js/socket-client.js +183 -139
  243. claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
  244. claude_mpm/dashboard/static/socket.io.min.js +7 -0
  245. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
  246. claude_mpm/dashboard/templates/code_simple.html +153 -0
  247. claude_mpm/dashboard/templates/index.html +125 -122
  248. claude_mpm/experimental/cli_enhancements.py +5 -7
  249. claude_mpm/generators/agent_profile_generator.py +5 -3
  250. claude_mpm/hooks/__init__.py +37 -1
  251. claude_mpm/hooks/base_hook.py +5 -4
  252. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  253. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  254. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  255. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  256. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  257. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  258. claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
  259. claude_mpm/hooks/claude_hooks/event_handlers.py +24 -19
  260. claude_mpm/hooks/claude_hooks/hook_handler.py +29 -22
  261. claude_mpm/hooks/claude_hooks/installer.py +67 -22
  262. claude_mpm/hooks/claude_hooks/memory_integration.py +3 -3
  263. claude_mpm/hooks/claude_hooks/response_tracking.py +57 -17
  264. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  265. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  266. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  267. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  268. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  269. claude_mpm/hooks/claude_hooks/services/connection_manager.py +62 -64
  270. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +140 -76
  271. claude_mpm/hooks/claude_hooks/services/state_manager.py +11 -9
  272. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +3 -3
  273. claude_mpm/hooks/failure_learning/__init__.py +54 -0
  274. claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
  275. claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
  276. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -0
  277. claude_mpm/hooks/instruction_reinforcement.py +301 -0
  278. claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
  279. claude_mpm/hooks/kuzu_memory_hook.py +386 -0
  280. claude_mpm/hooks/kuzu_response_hook.py +179 -0
  281. claude_mpm/hooks/memory_integration_hook.py +1 -1
  282. claude_mpm/hooks/session_resume_hook.py +121 -0
  283. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  284. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  285. claude_mpm/hooks/tool_call_interceptor.py +8 -5
  286. claude_mpm/hooks/validation_hooks.py +3 -3
  287. claude_mpm/init.py +23 -4
  288. claude_mpm/models/agent_session.py +8 -6
  289. claude_mpm/models/git_repository.py +198 -0
  290. claude_mpm/models/resume_log.py +340 -0
  291. claude_mpm/scripts/claude-hook-handler.sh +35 -9
  292. claude_mpm/scripts/launch_monitor.py +85 -0
  293. claude_mpm/scripts/mcp_server.py +3 -5
  294. claude_mpm/scripts/mpm_doctor.py +3 -2
  295. claude_mpm/scripts/socketio_daemon.py +159 -512
  296. claude_mpm/scripts/start_activity_logging.py +3 -1
  297. claude_mpm/services/__init__.py +144 -160
  298. claude_mpm/services/agents/__init__.py +18 -5
  299. claude_mpm/services/agents/agent_builder.py +56 -18
  300. claude_mpm/services/agents/agent_preset_service.py +238 -0
  301. claude_mpm/services/agents/agent_selection_service.py +484 -0
  302. claude_mpm/services/agents/auto_config_manager.py +796 -0
  303. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  304. claude_mpm/services/agents/cache_git_manager.py +621 -0
  305. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  306. claude_mpm/services/agents/deployment/agent_deployment.py +164 -17
  307. claude_mpm/services/agents/deployment/agent_discovery_service.py +191 -41
  308. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +5 -5
  309. claude_mpm/services/agents/deployment/agent_format_converter.py +56 -12
  310. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -7
  311. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  312. claude_mpm/services/agents/deployment/agent_operation_service.py +2 -2
  313. claude_mpm/services/agents/deployment/agent_record_service.py +4 -4
  314. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  315. claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
  316. claude_mpm/services/agents/deployment/agent_template_builder.py +939 -50
  317. claude_mpm/services/agents/deployment/agent_validator.py +31 -7
  318. claude_mpm/services/agents/deployment/agent_version_manager.py +8 -5
  319. claude_mpm/services/agents/deployment/agent_versioning.py +1 -1
  320. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  321. claude_mpm/services/agents/deployment/async_agent_deployment.py +3 -2
  322. claude_mpm/services/agents/deployment/deployment_config_loader.py +131 -7
  323. claude_mpm/services/agents/deployment/deployment_type_detector.py +10 -14
  324. claude_mpm/services/agents/deployment/deployment_wrapper.py +58 -0
  325. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  326. claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
  327. claude_mpm/services/agents/deployment/local_template_deployment.py +360 -0
  328. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +249 -53
  329. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  330. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +8 -7
  331. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
  332. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
  333. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +7 -5
  334. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
  335. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +10 -10
  336. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  337. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  338. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -43
  339. claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
  340. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  341. claude_mpm/services/agents/deployment/validation/template_validator.py +64 -44
  342. claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
  343. claude_mpm/services/agents/git_source_manager.py +629 -0
  344. claude_mpm/services/agents/loading/agent_profile_loader.py +10 -9
  345. claude_mpm/services/agents/loading/base_agent_manager.py +16 -6
  346. claude_mpm/services/agents/loading/framework_agent_loader.py +11 -14
  347. claude_mpm/services/agents/local_template_manager.py +784 -0
  348. claude_mpm/services/agents/management/agent_capabilities_generator.py +3 -2
  349. claude_mpm/services/agents/management/agent_management_service.py +5 -5
  350. claude_mpm/services/agents/memory/agent_memory_manager.py +32 -29
  351. claude_mpm/services/agents/memory/content_manager.py +17 -9
  352. claude_mpm/services/agents/memory/memory_categorization_service.py +4 -2
  353. claude_mpm/services/agents/memory/memory_file_service.py +32 -6
  354. claude_mpm/services/agents/memory/memory_format_service.py +6 -4
  355. claude_mpm/services/agents/memory/memory_limits_service.py +4 -2
  356. claude_mpm/services/agents/memory/template_generator.py +3 -3
  357. claude_mpm/services/agents/observers.py +547 -0
  358. claude_mpm/services/agents/recommender.py +615 -0
  359. claude_mpm/services/agents/registry/deployed_agent_discovery.py +3 -3
  360. claude_mpm/services/agents/registry/modification_tracker.py +30 -19
  361. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  362. claude_mpm/services/agents/sources/__init__.py +13 -0
  363. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  364. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  365. claude_mpm/services/agents/startup_sync.py +239 -0
  366. claude_mpm/services/agents/toolchain_detector.py +474 -0
  367. claude_mpm/services/analysis/__init__.py +25 -0
  368. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  369. claude_mpm/services/analysis/postmortem_service.py +765 -0
  370. claude_mpm/services/async_session_logger.py +141 -98
  371. claude_mpm/services/claude_session_logger.py +82 -74
  372. claude_mpm/services/cli/agent_cleanup_service.py +5 -0
  373. claude_mpm/services/cli/agent_listing_service.py +5 -5
  374. claude_mpm/services/cli/agent_validation_service.py +3 -1
  375. claude_mpm/services/cli/memory_crud_service.py +12 -7
  376. claude_mpm/services/cli/memory_output_formatter.py +2 -2
  377. claude_mpm/services/cli/resume_service.py +617 -0
  378. claude_mpm/services/cli/session_manager.py +104 -13
  379. claude_mpm/services/cli/session_pause_manager.py +504 -0
  380. claude_mpm/services/cli/session_resume_helper.py +372 -0
  381. claude_mpm/services/cli/startup_checker.py +13 -10
  382. claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
  383. claude_mpm/services/command_deployment_service.py +209 -13
  384. claude_mpm/services/command_handler_service.py +11 -5
  385. claude_mpm/services/core/__init__.py +33 -1
  386. claude_mpm/services/core/base.py +31 -11
  387. claude_mpm/services/core/interfaces/__init__.py +88 -3
  388. claude_mpm/services/core/interfaces/agent.py +184 -0
  389. claude_mpm/services/core/interfaces/health.py +169 -0
  390. claude_mpm/services/core/interfaces/model.py +281 -0
  391. claude_mpm/services/core/interfaces/process.py +372 -0
  392. claude_mpm/services/core/interfaces/project.py +121 -0
  393. claude_mpm/services/core/interfaces/restart.py +307 -0
  394. claude_mpm/services/core/interfaces/stability.py +260 -0
  395. claude_mpm/services/core/interfaces.py +56 -1
  396. claude_mpm/services/core/memory_manager.py +92 -47
  397. claude_mpm/services/core/models/__init__.py +70 -0
  398. claude_mpm/services/core/models/agent_config.py +384 -0
  399. claude_mpm/services/core/models/health.py +162 -0
  400. claude_mpm/services/core/models/process.py +239 -0
  401. claude_mpm/services/core/models/restart.py +302 -0
  402. claude_mpm/services/core/models/stability.py +264 -0
  403. claude_mpm/services/core/models/toolchain.py +306 -0
  404. claude_mpm/services/core/path_resolver.py +36 -14
  405. claude_mpm/services/diagnostics/__init__.py +2 -2
  406. claude_mpm/services/diagnostics/checks/__init__.py +8 -2
  407. claude_mpm/services/diagnostics/checks/agent_check.py +30 -34
  408. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  409. claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
  410. claude_mpm/services/diagnostics/checks/common_issues_check.py +28 -27
  411. claude_mpm/services/diagnostics/checks/configuration_check.py +26 -25
  412. claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
  413. claude_mpm/services/diagnostics/checks/installation_check.py +165 -60
  414. claude_mpm/services/diagnostics/checks/instructions_check.py +21 -21
  415. claude_mpm/services/diagnostics/checks/mcp_check.py +57 -44
  416. claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
  417. claude_mpm/services/diagnostics/checks/monitor_check.py +24 -24
  418. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  419. claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
  420. claude_mpm/services/diagnostics/diagnostic_runner.py +31 -13
  421. claude_mpm/services/diagnostics/doctor_reporter.py +305 -47
  422. claude_mpm/services/diagnostics/models.py +37 -21
  423. claude_mpm/services/event_aggregator.py +5 -3
  424. claude_mpm/services/event_bus/direct_relay.py +11 -7
  425. claude_mpm/services/event_bus/event_bus.py +51 -9
  426. claude_mpm/services/event_bus/relay.py +33 -14
  427. claude_mpm/services/events/consumers/dead_letter.py +7 -5
  428. claude_mpm/services/events/consumers/logging.py +1 -2
  429. claude_mpm/services/events/core.py +5 -6
  430. claude_mpm/services/events/producers/hook.py +6 -6
  431. claude_mpm/services/events/producers/system.py +8 -8
  432. claude_mpm/services/exceptions.py +5 -5
  433. claude_mpm/services/framework_claude_md_generator/__init__.py +1 -1
  434. claude_mpm/services/framework_claude_md_generator/content_assembler.py +5 -5
  435. claude_mpm/services/framework_claude_md_generator/content_validator.py +2 -2
  436. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +3 -3
  437. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +2 -2
  438. claude_mpm/services/framework_claude_md_generator/version_manager.py +1 -1
  439. claude_mpm/services/git/__init__.py +21 -0
  440. claude_mpm/services/git/git_operations_service.py +494 -0
  441. claude_mpm/services/github/__init__.py +21 -0
  442. claude_mpm/services/github/github_cli_service.py +397 -0
  443. claude_mpm/services/hook_installer_service.py +506 -0
  444. claude_mpm/services/hook_service.py +5 -6
  445. claude_mpm/services/infrastructure/context_preservation.py +13 -11
  446. claude_mpm/services/infrastructure/daemon_manager.py +9 -9
  447. claude_mpm/services/infrastructure/logging.py +2 -2
  448. claude_mpm/services/infrastructure/monitoring/__init__.py +2 -6
  449. claude_mpm/services/infrastructure/monitoring/aggregator.py +13 -18
  450. claude_mpm/services/infrastructure/monitoring/base.py +5 -13
  451. claude_mpm/services/infrastructure/monitoring/network.py +7 -6
  452. claude_mpm/services/infrastructure/monitoring/process.py +13 -12
  453. claude_mpm/services/infrastructure/monitoring/resources.py +8 -7
  454. claude_mpm/services/infrastructure/monitoring/service.py +16 -15
  455. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  456. claude_mpm/services/instructions/__init__.py +9 -0
  457. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  458. claude_mpm/services/local_ops/__init__.py +155 -0
  459. claude_mpm/services/local_ops/crash_detector.py +257 -0
  460. claude_mpm/services/local_ops/health_checks/__init__.py +26 -0
  461. claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
  462. claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
  463. claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
  464. claude_mpm/services/local_ops/health_manager.py +427 -0
  465. claude_mpm/services/local_ops/log_monitor.py +396 -0
  466. claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
  467. claude_mpm/services/local_ops/process_manager.py +595 -0
  468. claude_mpm/services/local_ops/resource_monitor.py +331 -0
  469. claude_mpm/services/local_ops/restart_manager.py +401 -0
  470. claude_mpm/services/local_ops/restart_policy.py +387 -0
  471. claude_mpm/services/local_ops/state_manager.py +372 -0
  472. claude_mpm/services/local_ops/unified_manager.py +600 -0
  473. claude_mpm/services/mcp_config_manager.py +1542 -0
  474. claude_mpm/services/mcp_gateway/__init__.py +97 -93
  475. claude_mpm/services/mcp_gateway/auto_configure.py +43 -38
  476. claude_mpm/services/mcp_gateway/config/config_loader.py +3 -3
  477. claude_mpm/services/mcp_gateway/config/configuration.py +24 -5
  478. claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
  479. claude_mpm/services/mcp_gateway/core/base.py +20 -33
  480. claude_mpm/services/mcp_gateway/core/process_pool.py +591 -31
  481. claude_mpm/services/mcp_gateway/core/singleton_manager.py +2 -2
  482. claude_mpm/services/mcp_gateway/core/startup_verification.py +3 -3
  483. claude_mpm/services/mcp_gateway/main.py +90 -15
  484. claude_mpm/services/mcp_gateway/registry/service_registry.py +4 -2
  485. claude_mpm/services/mcp_gateway/registry/tool_registry.py +12 -9
  486. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +5 -10
  487. claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -17
  488. claude_mpm/services/mcp_gateway/tools/__init__.py +14 -2
  489. claude_mpm/services/mcp_gateway/tools/base_adapter.py +15 -15
  490. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +10 -9
  491. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +654 -0
  492. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +36 -34
  493. claude_mpm/services/mcp_gateway/tools/hello_world.py +8 -8
  494. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +555 -0
  495. claude_mpm/services/mcp_gateway/utils/__init__.py +14 -0
  496. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +160 -0
  497. claude_mpm/services/mcp_gateway/utils/update_preferences.py +170 -0
  498. claude_mpm/services/mcp_service_verifier.py +732 -0
  499. claude_mpm/services/memory/builder.py +9 -8
  500. claude_mpm/services/memory/cache/shared_prompt_cache.py +2 -1
  501. claude_mpm/services/memory/cache/simple_cache.py +2 -2
  502. claude_mpm/services/memory/failure_tracker.py +578 -0
  503. claude_mpm/services/memory/indexed_memory.py +8 -8
  504. claude_mpm/services/memory/optimizer.py +8 -9
  505. claude_mpm/services/memory/router.py +3 -3
  506. claude_mpm/services/memory_hook_service.py +165 -4
  507. claude_mpm/services/model/__init__.py +147 -0
  508. claude_mpm/services/model/base_provider.py +365 -0
  509. claude_mpm/services/model/claude_provider.py +412 -0
  510. claude_mpm/services/model/model_router.py +452 -0
  511. claude_mpm/services/model/ollama_provider.py +415 -0
  512. claude_mpm/services/monitor/__init__.py +20 -0
  513. claude_mpm/services/monitor/daemon.py +691 -0
  514. claude_mpm/services/monitor/daemon_manager.py +1040 -0
  515. claude_mpm/services/monitor/event_emitter.py +350 -0
  516. claude_mpm/services/monitor/handlers/__init__.py +21 -0
  517. claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
  518. claude_mpm/services/monitor/handlers/dashboard.py +299 -0
  519. claude_mpm/services/monitor/handlers/file.py +264 -0
  520. claude_mpm/services/monitor/handlers/hooks.py +512 -0
  521. claude_mpm/services/monitor/management/__init__.py +18 -0
  522. claude_mpm/services/monitor/management/health.py +124 -0
  523. claude_mpm/services/monitor/management/lifecycle.py +724 -0
  524. claude_mpm/services/monitor/server.py +817 -0
  525. claude_mpm/services/monitor_build_service.py +2 -2
  526. claude_mpm/services/native_agent_converter.py +356 -0
  527. claude_mpm/services/orphan_detection.py +786 -0
  528. claude_mpm/services/port_manager.py +3 -3
  529. claude_mpm/services/pr/__init__.py +14 -0
  530. claude_mpm/services/pr/pr_template_service.py +329 -0
  531. claude_mpm/services/project/__init__.py +23 -0
  532. claude_mpm/services/project/analyzer.py +3 -3
  533. claude_mpm/services/project/architecture_analyzer.py +5 -5
  534. claude_mpm/services/project/archive_manager.py +1045 -0
  535. claude_mpm/services/project/dependency_analyzer.py +4 -4
  536. claude_mpm/services/project/detection_strategies.py +719 -0
  537. claude_mpm/services/project/documentation_manager.py +554 -0
  538. claude_mpm/services/project/enhanced_analyzer.py +572 -0
  539. claude_mpm/services/project/metrics_collector.py +4 -4
  540. claude_mpm/services/project/project_organizer.py +1005 -0
  541. claude_mpm/services/project/registry.py +13 -7
  542. claude_mpm/services/project/toolchain_analyzer.py +583 -0
  543. claude_mpm/services/project_port_allocator.py +596 -0
  544. claude_mpm/services/response_tracker.py +21 -10
  545. claude_mpm/services/runner_configuration_service.py +17 -3
  546. claude_mpm/services/self_upgrade_service.py +500 -0
  547. claude_mpm/services/session_management_service.py +23 -9
  548. claude_mpm/services/session_manager.py +380 -0
  549. claude_mpm/services/shared/__init__.py +2 -1
  550. claude_mpm/services/shared/async_service_base.py +16 -27
  551. claude_mpm/services/shared/config_service_base.py +17 -14
  552. claude_mpm/services/shared/lifecycle_service_base.py +1 -14
  553. claude_mpm/services/shared/service_factory.py +8 -5
  554. claude_mpm/services/skills/__init__.py +18 -0
  555. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  556. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  557. claude_mpm/services/skills_config.py +547 -0
  558. claude_mpm/services/skills_deployer.py +955 -0
  559. claude_mpm/services/socketio/client_proxy.py +60 -5
  560. claude_mpm/services/socketio/dashboard_server.py +361 -0
  561. claude_mpm/services/socketio/event_normalizer.py +10 -6
  562. claude_mpm/services/socketio/handlers/__init__.py +5 -2
  563. claude_mpm/services/socketio/handlers/base.py +2 -2
  564. claude_mpm/services/socketio/handlers/code_analysis.py +90 -27
  565. claude_mpm/services/socketio/handlers/connection.py +22 -41
  566. claude_mpm/services/socketio/handlers/connection_handler.py +13 -10
  567. claude_mpm/services/socketio/handlers/file.py +46 -10
  568. claude_mpm/services/socketio/handlers/git.py +9 -9
  569. claude_mpm/services/socketio/handlers/hook.py +29 -17
  570. claude_mpm/services/socketio/handlers/registry.py +4 -2
  571. claude_mpm/services/socketio/monitor_client.py +364 -0
  572. claude_mpm/services/socketio/server/broadcaster.py +9 -7
  573. claude_mpm/services/socketio/server/connection_manager.py +2 -2
  574. claude_mpm/services/socketio/server/core.py +142 -8
  575. claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
  576. claude_mpm/services/socketio/server/main.py +24 -24
  577. claude_mpm/services/socketio_client_manager.py +4 -4
  578. claude_mpm/services/subprocess_launcher_service.py +19 -15
  579. claude_mpm/services/system_instructions_service.py +3 -5
  580. claude_mpm/services/ticket_services/formatter_service.py +1 -1
  581. claude_mpm/services/ticket_services/validation_service.py +5 -5
  582. claude_mpm/services/unified/__init__.py +65 -0
  583. claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
  584. claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
  585. claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
  586. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +900 -0
  587. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -0
  588. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
  589. claude_mpm/services/unified/config_strategies/__init__.py +175 -0
  590. claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
  591. claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
  592. claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
  593. claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
  594. claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
  595. claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
  596. claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
  597. claude_mpm/services/unified/deployment_strategies/base.py +553 -0
  598. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
  599. claude_mpm/services/unified/deployment_strategies/local.py +607 -0
  600. claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
  601. claude_mpm/services/unified/deployment_strategies/vercel.py +471 -0
  602. claude_mpm/services/unified/interfaces.py +475 -0
  603. claude_mpm/services/unified/migration.py +509 -0
  604. claude_mpm/services/unified/strategies.py +534 -0
  605. claude_mpm/services/unified/unified_analyzer.py +542 -0
  606. claude_mpm/services/unified/unified_config.py +691 -0
  607. claude_mpm/services/unified/unified_deployment.py +466 -0
  608. claude_mpm/services/utility_service.py +6 -3
  609. claude_mpm/services/version_control/branch_strategy.py +2 -2
  610. claude_mpm/services/version_control/conflict_resolution.py +14 -8
  611. claude_mpm/services/version_control/git_operations.py +26 -24
  612. claude_mpm/services/version_control/semantic_versioning.py +14 -14
  613. claude_mpm/services/version_control/version_parser.py +14 -11
  614. claude_mpm/services/version_service.py +104 -1
  615. claude_mpm/services/visualization/__init__.py +1 -5
  616. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  617. claude_mpm/skills/__init__.py +42 -0
  618. claude_mpm/skills/agent_skills_injector.py +324 -0
  619. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  620. claude_mpm/skills/bundled/__init__.py +6 -0
  621. claude_mpm/skills/bundled/api-documentation.md +393 -0
  622. claude_mpm/skills/bundled/async-testing.md +571 -0
  623. claude_mpm/skills/bundled/code-review.md +143 -0
  624. claude_mpm/skills/bundled/database-migration.md +199 -0
  625. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  626. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  627. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  628. claude_mpm/skills/bundled/git-workflow.md +414 -0
  629. claude_mpm/skills/bundled/imagemagick.md +204 -0
  630. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  631. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  632. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  633. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  634. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  635. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  636. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  637. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  638. claude_mpm/skills/bundled/pdf.md +141 -0
  639. claude_mpm/skills/bundled/performance-profiling.md +573 -0
  640. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  641. claude_mpm/skills/bundled/security-scanning.md +327 -0
  642. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  643. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  644. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  645. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  646. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  647. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  648. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  649. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  650. claude_mpm/skills/bundled/xlsx.md +157 -0
  651. claude_mpm/skills/registry.py +286 -0
  652. claude_mpm/skills/skill_manager.py +310 -0
  653. claude_mpm/skills/skills_registry.py +347 -0
  654. claude_mpm/skills/skills_service.py +739 -0
  655. claude_mpm/storage/state_storage.py +31 -31
  656. claude_mpm/templates/questions/__init__.py +38 -0
  657. claude_mpm/templates/questions/base.py +193 -0
  658. claude_mpm/templates/questions/pr_strategy.py +311 -0
  659. claude_mpm/templates/questions/project_init.py +385 -0
  660. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  661. claude_mpm/tools/__main__.py +9 -9
  662. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  663. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  664. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  665. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  666. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  667. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  668. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  669. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  670. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  671. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  672. claude_mpm/tools/code_tree_builder.py +6 -6
  673. claude_mpm/tools/code_tree_events.py +14 -10
  674. claude_mpm/tools/socketio_debug.py +11 -11
  675. claude_mpm/utils/agent_dependency_loader.py +184 -36
  676. claude_mpm/utils/agent_filters.py +288 -0
  677. claude_mpm/utils/common.py +544 -0
  678. claude_mpm/utils/config_manager.py +12 -6
  679. claude_mpm/utils/database_connector.py +298 -0
  680. claude_mpm/utils/dependency_cache.py +5 -3
  681. claude_mpm/utils/dependency_strategies.py +15 -10
  682. claude_mpm/utils/display_helper.py +260 -0
  683. claude_mpm/utils/environment_context.py +4 -3
  684. claude_mpm/utils/error_handler.py +5 -3
  685. claude_mpm/utils/file_utils.py +13 -14
  686. claude_mpm/utils/git_analyzer.py +407 -0
  687. claude_mpm/utils/gitignore.py +241 -0
  688. claude_mpm/utils/log_cleanup.py +627 -0
  689. claude_mpm/utils/migration.py +372 -0
  690. claude_mpm/utils/path_operations.py +7 -4
  691. claude_mpm/utils/progress.py +387 -0
  692. claude_mpm/utils/robust_installer.py +131 -24
  693. claude_mpm/utils/session_logging.py +2 -2
  694. claude_mpm/utils/structured_questions.py +619 -0
  695. claude_mpm/utils/subprocess_utils.py +9 -8
  696. claude_mpm/validation/agent_validator.py +6 -6
  697. claude_mpm/validation/frontmatter_validator.py +6 -6
  698. claude_mpm-5.0.9.dist-info/METADATA +1028 -0
  699. claude_mpm-5.0.9.dist-info/RECORD +864 -0
  700. {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +1 -0
  701. claude_mpm/agents/INSTRUCTIONS.md +0 -261
  702. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  703. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  704. claude_mpm/agents/templates/agent-manager.json +0 -270
  705. claude_mpm/agents/templates/agent-manager.md +0 -619
  706. claude_mpm/agents/templates/agentic_coder_optimizer.json +0 -222
  707. claude_mpm/agents/templates/api_qa.json +0 -171
  708. claude_mpm/agents/templates/code_analyzer.json +0 -95
  709. claude_mpm/agents/templates/data_engineer.json +0 -152
  710. claude_mpm/agents/templates/documentation.json +0 -175
  711. claude_mpm/agents/templates/engineer.json +0 -176
  712. claude_mpm/agents/templates/imagemagick.json +0 -261
  713. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  714. claude_mpm/agents/templates/memory_manager.json +0 -155
  715. claude_mpm/agents/templates/ops.json +0 -175
  716. claude_mpm/agents/templates/project_organizer.json +0 -130
  717. claude_mpm/agents/templates/qa.json +0 -223
  718. claude_mpm/agents/templates/refactoring_engineer.json +0 -266
  719. claude_mpm/agents/templates/research.json +0 -163
  720. claude_mpm/agents/templates/security.json +0 -153
  721. claude_mpm/agents/templates/ticketing.json +0 -169
  722. claude_mpm/agents/templates/vercel_ops_agent.json +0 -281
  723. claude_mpm/agents/templates/version_control.json +0 -147
  724. claude_mpm/agents/templates/web_qa.json +0 -254
  725. claude_mpm/agents/templates/web_ui.json +0 -176
  726. claude_mpm/cli/commands/configure_tui.py +0 -1927
  727. claude_mpm/cli/commands/mpm_init.py +0 -594
  728. claude_mpm/cli/commands/socketio_monitor.py +0 -233
  729. claude_mpm/commands/mpm-agents.md +0 -12
  730. claude_mpm/commands/mpm-config.md +0 -18
  731. claude_mpm/commands/mpm-tickets.md +0 -102
  732. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  733. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  734. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  735. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  736. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  737. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  738. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  739. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  740. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  741. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  742. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  743. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  744. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  745. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  746. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  747. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  748. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  749. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  750. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  751. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  752. claude_mpm/dashboard/static/css/code-tree.css +0 -1408
  753. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  754. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  755. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  756. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  757. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  758. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  759. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  760. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  761. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  762. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  763. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  764. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  765. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  766. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  767. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  768. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  769. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  770. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  771. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  772. claude_mpm/dashboard/static/js/components/code-tree.js +0 -3220
  773. claude_mpm/dashboard/static/js/components/code-viewer.js +0 -480
  774. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
  775. claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1040
  776. claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
  777. claude_mpm/scripts/socketio_daemon_hardened.py +0 -937
  778. claude_mpm/scripts/socketio_daemon_wrapper.py +0 -78
  779. claude_mpm/scripts/socketio_server_manager.py +0 -349
  780. claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
  781. claude_mpm/services/cli/dashboard_launcher.py +0 -423
  782. claude_mpm/services/cli/socketio_manager.py +0 -537
  783. claude_mpm/services/diagnostics/checks/claude_desktop_check.py +0 -286
  784. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -645
  785. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -602
  786. claude_mpm/services/project/analyzer_refactored.py +0 -450
  787. claude_mpm/tools/code_tree_analyzer.py +0 -1693
  788. claude_mpm-4.1.26.dist-info/METADATA +0 -332
  789. claude_mpm-4.1.26.dist-info/RECORD +0 -606
  790. {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/WHEEL +0 -0
  791. {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
  792. {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
@@ -20,6 +20,7 @@ import json
20
20
  import os
21
21
  import signal
22
22
  import subprocess
23
+ import sys
23
24
  import threading
24
25
  import time
25
26
  from pathlib import Path
@@ -189,7 +190,7 @@ class MCPProcessPool:
189
190
 
190
191
  # Write process info to file for debugging
191
192
  info_file = self.pool_dir / f"{server_name}_{process.pid}.json"
192
- with open(info_file, "w") as f:
193
+ with info_file.open("w") as f:
193
194
  json.dump(self._process_info[server_name], f, indent=2)
194
195
 
195
196
  return process
@@ -377,41 +378,600 @@ def get_process_pool() -> MCPProcessPool:
377
378
  return _pool
378
379
 
379
380
 
380
- async def pre_warm_mcp_servers():
381
- """Pre-warm MCP servers from configuration."""
382
- pool = get_process_pool()
381
+ async def auto_initialize_vector_search():
382
+ """
383
+ Auto-initialize mcp-vector-search for the current project.
384
+
385
+ WHY: Vector search requires project initialization before it can be used.
386
+ This function ensures the current project is automatically initialized
387
+ for vector search when the system starts up.
383
388
 
384
- # Load MCP configurations
385
- configs = {}
389
+ DESIGN DECISION:
390
+ - Automatically install mcp-vector-search if not present
391
+ - Run in background with timeout to avoid blocking startup
392
+ - Failures are logged but don't prevent the system from starting
393
+ """
394
+ logger = get_logger("vector_search_init")
386
395
 
387
- # Check .claude.json for MCP server configs
388
- claude_config_path = Path.home() / ".claude.json"
389
- if not claude_config_path.exists():
390
- # Try project-local config
391
- claude_config_path = Path.cwd() / ".claude.json"
396
+ try:
397
+ # Import MCPConfigManager to handle installation
398
+ from claude_mpm.services.mcp_config_manager import MCPConfigManager
392
399
 
393
- if claude_config_path.exists():
394
- try:
395
- with open(claude_config_path) as f:
396
- config_data = json.load(f)
397
- mcp_servers = config_data.get("mcpServers", {})
398
- configs.update(mcp_servers)
399
- except Exception as e:
400
- get_logger("MCPProcessPool").warning(f"Failed to load Claude config: {e}")
400
+ config_manager = MCPConfigManager()
401
+
402
+ # Check if mcp-vector-search is already installed
403
+ vector_search_path = config_manager.detect_service_path("mcp-vector-search")
404
+
405
+ if vector_search_path:
406
+ logger.debug(f"mcp-vector-search found at: {vector_search_path}")
407
+ else:
408
+ # Not installed - attempt installation
409
+ logger.info("🔍 mcp-vector-search not found. Installing via pipx...")
410
+
411
+ # First check if pipx is available
412
+ import shutil
413
+ import subprocess
414
+
415
+ if not shutil.which("pipx"):
416
+ logger.warning(
417
+ "⚠️ pipx not found. Please install pipx to enable automatic mcp-vector-search installation"
418
+ )
419
+ logger.info(" Install pipx with: python -m pip install --user pipx")
420
+ return
421
+
422
+ try:
423
+ result = subprocess.run(
424
+ ["pipx", "install", "mcp-vector-search"],
425
+ capture_output=True,
426
+ text=True,
427
+ timeout=60,
428
+ check=False, # 1 minute timeout for installation
429
+ )
430
+
431
+ if result.returncode == 0:
432
+ logger.info("✅ mcp-vector-search installed successfully")
433
+ # Detect the newly installed path
434
+ vector_search_path = config_manager.detect_service_path(
435
+ "mcp-vector-search"
436
+ )
437
+ if not vector_search_path:
438
+ logger.warning(
439
+ "mcp-vector-search installed but command not found in PATH"
440
+ )
441
+ return
442
+
443
+ # Verify the newly installed service is available
444
+ logger.info("📝 Verifying installation...")
445
+ available, msg = config_manager.check_mcp_services_available()
446
+ if available:
447
+ logger.info(f"✅ {msg}")
448
+ else:
449
+ logger.warning(
450
+ f"⚠️ Service installed but not configured in Claude: {msg}"
451
+ )
452
+ logger.info(
453
+ "💡 Configure via: Claude Desktop > Settings > Developer > Model Context Protocol"
454
+ )
455
+ else:
456
+ logger.warning(
457
+ f"Failed to install mcp-vector-search: {result.stderr}"
458
+ )
459
+ return
460
+
461
+ except subprocess.TimeoutExpired:
462
+ logger.warning("Installation of mcp-vector-search timed out")
463
+ return
464
+ except Exception as e:
465
+ logger.warning(f"Error installing mcp-vector-search: {e}")
466
+ return
467
+
468
+ # At this point, mcp-vector-search should be available
469
+ # Get the actual command to use
470
+ import shutil
471
+
472
+ vector_search_cmd = shutil.which("mcp-vector-search")
473
+ if not vector_search_cmd:
474
+ # Try pipx installation path as fallback
475
+ pipx_path = (
476
+ Path.home()
477
+ / ".local/pipx/venvs/mcp-vector-search/bin/mcp-vector-search"
478
+ )
479
+ if pipx_path.exists():
480
+ vector_search_cmd = str(pipx_path)
481
+ else:
482
+ logger.debug("mcp-vector-search command not found after installation")
483
+ return
484
+
485
+ # Check if current project is already initialized
486
+ current_dir = Path.cwd()
487
+ vector_config = current_dir / ".mcp-vector-search/config.json"
488
+
489
+ if vector_config.exists():
490
+ logger.debug(f"Vector search already initialized for {current_dir}")
491
+
492
+ # Ensure .mcp-vector-search is in gitignore even if already initialized
493
+ try:
494
+ from ....services.project.project_organizer import ProjectOrganizer
495
+
496
+ if (current_dir / ".claude-mpm").exists() or (
497
+ current_dir / ".git"
498
+ ).exists():
499
+ organizer = ProjectOrganizer(current_dir)
500
+ organizer.update_gitignore(
501
+ additional_patterns=[".mcp-vector-search/"]
502
+ )
503
+ logger.debug("Ensured .mcp-vector-search is in gitignore")
504
+ except Exception as e:
505
+ logger.debug(f"Could not update gitignore for .mcp-vector-search: {e}")
506
+ # Check if index needs rebuilding (corrupted database)
507
+ chroma_db = current_dir / ".mcp-vector-search/chroma.sqlite3"
508
+ if chroma_db.exists():
509
+ # Quick health check - verify database file exists and is accessible
510
+ try:
511
+ # Check if database file exists and has reasonable size
512
+ if chroma_db.exists() and chroma_db.stat().st_size > 0:
513
+ logger.info("✓ Vector search index is healthy and ready")
514
+ return
515
+ logger.info("⚠️ Vector search index may be corrupted, rebuilding...")
516
+ except Exception as e:
517
+ logger.debug(
518
+ f"Vector search health check failed: {e}, will attempt to rebuild"
519
+ )
520
+
521
+ # Initialize or reinitialize the project
522
+ logger.info(f"🎯 Initializing vector search for project: {current_dir}")
523
+
524
+ # Initialize the project (this creates the config)
525
+ # Note: mcp-vector-search operates on the current directory
526
+ import subprocess
527
+
528
+ proc = subprocess.run(
529
+ [vector_search_cmd, "init"],
530
+ capture_output=True,
531
+ text=True,
532
+ timeout=30,
533
+ cwd=str(current_dir),
534
+ check=False, # Run in the project directory
535
+ )
401
536
 
402
- # Check .mcp.json for additional configs
403
- mcp_config_path = Path.cwd() / ".mcp.json"
404
- if mcp_config_path.exists():
537
+ if proc.returncode == 0:
538
+ logger.info("✅ Vector search initialization completed")
539
+
540
+ # Ensure .mcp-vector-search is in gitignore
541
+ try:
542
+ from ....services.project.project_organizer import ProjectOrganizer
543
+
544
+ # Check if we're in a git repository (parent of .claude-mpm)
545
+ if (current_dir / ".claude-mpm").exists() or (
546
+ current_dir / ".git"
547
+ ).exists():
548
+ organizer = ProjectOrganizer(current_dir)
549
+ organizer.update_gitignore(
550
+ additional_patterns=[".mcp-vector-search/"]
551
+ )
552
+ logger.debug("Ensured .mcp-vector-search is in gitignore")
553
+ except Exception as e:
554
+ logger.debug(f"Could not update gitignore for .mcp-vector-search: {e}")
555
+ # Non-critical, don't fail initialization
556
+
557
+ # Start background indexing (non-blocking)
558
+ def background_index():
559
+ try:
560
+ logger.info("🔄 Starting project indexing in background...")
561
+ index_proc = subprocess.run(
562
+ [vector_search_cmd, "index", "main"],
563
+ capture_output=True,
564
+ text=True,
565
+ timeout=300, # 5 minute timeout for indexing
566
+ cwd=str(current_dir),
567
+ check=False, # Run in the project directory
568
+ )
569
+ if index_proc.returncode == 0:
570
+ logger.info("✅ Project indexing completed successfully")
571
+ # Parse output to show statistics if available
572
+ if "indexed" in index_proc.stdout.lower():
573
+ # Extract and log indexing statistics
574
+ lines = index_proc.stdout.strip().split("\n")
575
+ for line in lines:
576
+ if "indexed" in line.lower() or "files" in line.lower():
577
+ logger.info(f" {line.strip()}")
578
+ else:
579
+ logger.warning(
580
+ f"⚠️ Project indexing failed: {index_proc.stderr}"
581
+ )
582
+ except subprocess.TimeoutExpired:
583
+ logger.warning(
584
+ "⚠️ Project indexing timed out (will continue in background)"
585
+ )
586
+ except Exception as e:
587
+ logger.debug(f"Background indexing error (non-critical): {e}")
588
+
589
+ # Run indexing in background thread
590
+ import threading
591
+
592
+ index_thread = threading.Thread(target=background_index, daemon=True)
593
+ index_thread.start()
594
+ logger.info(
595
+ "📚 Background indexing started - vector search will be available shortly"
596
+ )
597
+
598
+ else:
599
+ logger.warning(f"⚠️ Vector search initialization failed: {proc.stderr}")
600
+
601
+ except Exception as e:
602
+ logger.debug(f"Vector search auto-initialization error (non-critical): {e}")
603
+
604
+
605
+ async def auto_initialize_kuzu_memory():
606
+ """
607
+ Auto-initialize kuzu-memory for persistent knowledge storage.
608
+
609
+ WHY: Kuzu-memory provides a graph database for structured memory storage
610
+ with semantic search capabilities, enabling persistent context across sessions.
611
+
612
+ DESIGN DECISION:
613
+ - Automatically install kuzu-memory if not present via pipx
614
+ - Initialize database in background to avoid blocking startup
615
+ - Failures are logged but don't prevent the system from starting
616
+ """
617
+ logger = get_logger("kuzu_memory_init")
618
+
619
+ try:
620
+ # Import MCPConfigManager to handle installation
621
+ from claude_mpm.services.mcp_config_manager import MCPConfigManager
622
+
623
+ config_manager = MCPConfigManager()
624
+
625
+ # Check if kuzu-memory is already installed
626
+ kuzu_memory_path = config_manager.detect_service_path("kuzu-memory")
627
+
628
+ if kuzu_memory_path:
629
+ logger.debug(f"kuzu-memory found at: {kuzu_memory_path}")
630
+ else:
631
+ # Not installed - attempt installation
632
+ logger.info("🧠 kuzu-memory not found. Installing via pipx...")
633
+
634
+ # First check if pipx is available
635
+ import shutil
636
+ import subprocess
637
+
638
+ if not shutil.which("pipx"):
639
+ logger.warning(
640
+ "⚠️ pipx not found. Please install pipx to enable automatic kuzu-memory installation"
641
+ )
642
+ logger.info(" Install pipx with: python -m pip install --user pipx")
643
+ return
644
+
645
+ try:
646
+ result = subprocess.run(
647
+ ["pipx", "install", "kuzu-memory"],
648
+ capture_output=True,
649
+ text=True,
650
+ timeout=60,
651
+ check=False, # 1 minute timeout for installation
652
+ )
653
+
654
+ if result.returncode == 0:
655
+ logger.info("✅ kuzu-memory installed successfully")
656
+ # Detect the newly installed path
657
+ kuzu_memory_path = config_manager.detect_service_path("kuzu-memory")
658
+ if not kuzu_memory_path:
659
+ logger.warning(
660
+ "kuzu-memory installed but command not found in PATH"
661
+ )
662
+ return
663
+
664
+ # Verify the newly installed service is available
665
+ logger.info("📝 Verifying installation...")
666
+ available, msg = config_manager.check_mcp_services_available()
667
+ if available:
668
+ logger.info(f"✅ {msg}")
669
+ else:
670
+ logger.warning(
671
+ f"⚠️ Service installed but not configured in Claude: {msg}"
672
+ )
673
+ logger.info(
674
+ "💡 Configure via: Claude Desktop > Settings > Developer > Model Context Protocol"
675
+ )
676
+ else:
677
+ logger.warning(f"Failed to install kuzu-memory: {result.stderr}")
678
+ return
679
+
680
+ except subprocess.TimeoutExpired:
681
+ logger.warning("Installation of kuzu-memory timed out")
682
+ return
683
+ except Exception as e:
684
+ logger.warning(f"Error installing kuzu-memory: {e}")
685
+ return
686
+
687
+ # At this point, kuzu-memory should be available
688
+ # Get the actual command to use
689
+ import shutil
690
+
691
+ kuzu_memory_cmd = shutil.which("kuzu-memory")
692
+ if not kuzu_memory_cmd:
693
+ # Try pipx installation path as fallback
694
+ pipx_path = Path.home() / ".local/pipx/venvs/kuzu-memory/bin/kuzu-memory"
695
+ if pipx_path.exists():
696
+ kuzu_memory_cmd = str(pipx_path)
697
+ else:
698
+ logger.debug("kuzu-memory command not found after installation")
699
+ return
700
+
701
+ # Check for kuzu-memory updates (non-blocking)
405
702
  try:
406
- with open(mcp_config_path) as f:
407
- config_data = json.load(f)
408
- mcp_servers = config_data.get("mcpServers", {})
409
- configs.update(mcp_servers)
703
+ await _check_kuzu_memory_updates(kuzu_memory_cmd)
410
704
  except Exception as e:
411
- get_logger("MCPProcessPool").warning(f"Failed to load MCP config: {e}")
705
+ logger.debug(f"Update check failed (non-critical): {e}")
706
+
707
+ # Initialize kuzu-memory database in current project
708
+ current_dir = Path.cwd()
709
+ kuzu_memories_dir = current_dir / "kuzu-memories"
710
+
711
+ # Check if database is already initialized
712
+ if kuzu_memories_dir.exists():
713
+ logger.debug(
714
+ f"Kuzu-memory database already initialized at {kuzu_memories_dir}"
715
+ )
716
+
717
+ # Ensure kuzu-memories is in gitignore even if already initialized
718
+ try:
719
+ from ....services.project.project_organizer import ProjectOrganizer
720
+
721
+ if (current_dir / ".claude-mpm").exists() or (
722
+ current_dir / ".git"
723
+ ).exists():
724
+ organizer = ProjectOrganizer(current_dir)
725
+ organizer.update_gitignore(additional_patterns=["kuzu-memories/"])
726
+ logger.debug("Ensured kuzu-memories is in gitignore")
727
+ except Exception as e:
728
+ logger.debug(f"Could not update gitignore for kuzu-memories: {e}")
729
+ else:
730
+ logger.info(
731
+ f"🎯 Initializing kuzu-memory database for project: {current_dir}"
732
+ )
733
+
734
+ # Initialize the database in current project directory
735
+ import subprocess
736
+
737
+ proc = subprocess.run(
738
+ [kuzu_memory_cmd, "init"],
739
+ capture_output=True,
740
+ text=True,
741
+ timeout=30,
742
+ cwd=str(current_dir),
743
+ check=False,
744
+ )
745
+
746
+ if proc.returncode == 0:
747
+ logger.info("✅ Kuzu-memory database initialized successfully")
748
+
749
+ # Ensure kuzu-memories is in gitignore
750
+ try:
751
+ from ....services.project.project_organizer import ProjectOrganizer
752
+
753
+ if (current_dir / ".claude-mpm").exists() or (
754
+ current_dir / ".git"
755
+ ).exists():
756
+ organizer = ProjectOrganizer(current_dir)
757
+ organizer.update_gitignore(
758
+ additional_patterns=["kuzu-memories/"]
759
+ )
760
+ logger.debug("Ensured kuzu-memories is in gitignore")
761
+ except Exception as e:
762
+ logger.debug(f"Could not update gitignore for kuzu-memories: {e}")
763
+ # Non-critical, don't fail initialization
764
+ else:
765
+ logger.warning(f"⚠️ Kuzu-memory initialization failed: {proc.stderr}")
766
+
767
+ except Exception as e:
768
+ logger.debug(f"Kuzu-memory auto-initialization error (non-critical): {e}")
769
+
770
+
771
+ async def _check_kuzu_memory_updates(kuzu_cmd: Path) -> None:
772
+ """
773
+ Check for kuzu-memory updates and prompt user.
774
+
775
+ Args:
776
+ kuzu_cmd: Path to kuzu-memory command
412
777
 
413
- if configs:
414
- await pool.pre_warm_servers(configs)
415
- await pool.start_health_monitoring()
778
+ WHY: Keep users informed about important updates that may fix bugs
779
+ or add features they need.
416
780
 
417
- return pool
781
+ DESIGN DECISIONS:
782
+ - Non-blocking with timeout to prevent startup delays
783
+ - Respects user preferences and environment variables
784
+ - Only prompts in interactive TTY sessions
785
+ """
786
+ logger = get_logger("kuzu_memory_update")
787
+
788
+ # Skip if environment variable set
789
+ if os.environ.get("CLAUDE_MPM_SKIP_UPDATE_CHECK"):
790
+ return
791
+
792
+ # Skip if not TTY (can't prompt)
793
+ if not sys.stdin.isatty():
794
+ return
795
+
796
+ # Import update utilities
797
+ from ..utils.package_version_checker import PackageVersionChecker
798
+ from ..utils.update_preferences import UpdatePreferences
799
+
800
+ # Check if updates are enabled for this package
801
+ if not UpdatePreferences.should_check_package("kuzu-memory"):
802
+ return
803
+
804
+ try:
805
+ # Get current version from pipx
806
+ result = subprocess.run(
807
+ ["pipx", "list", "--json"],
808
+ capture_output=True,
809
+ text=True,
810
+ timeout=5,
811
+ check=False,
812
+ )
813
+
814
+ if result.returncode == 0:
815
+ pipx_data = json.loads(result.stdout)
816
+ venvs = pipx_data.get("venvs", {})
817
+ kuzu_info = venvs.get("kuzu-memory", {})
818
+ metadata = kuzu_info.get("metadata", {})
819
+ current_version = metadata.get("main_package", {}).get(
820
+ "package_version", "unknown"
821
+ )
822
+
823
+ if current_version != "unknown":
824
+ # Check for updates
825
+ checker = PackageVersionChecker()
826
+ update_info = await checker.check_for_update(
827
+ "kuzu-memory", current_version
828
+ )
829
+
830
+ if update_info and update_info.get("update_available"):
831
+ latest_version = update_info["latest"]
832
+
833
+ # Check if user wants to skip this version
834
+ if UpdatePreferences.should_skip_version(
835
+ "kuzu-memory", latest_version
836
+ ):
837
+ logger.debug(
838
+ f"Skipping kuzu-memory update to {latest_version} per user preference"
839
+ )
840
+ return
841
+
842
+ # Prompt for update
843
+ _prompt_kuzu_update(update_info["current"], latest_version)
844
+
845
+ except Exception as e:
846
+ logger.debug(f"Update check error: {e}")
847
+
848
+
849
+ def _prompt_kuzu_update(current: str, latest: str) -> None:
850
+ """
851
+ Prompt user to update kuzu-memory.
852
+
853
+ Args:
854
+ current: Current installed version
855
+ latest: Latest available version
856
+ """
857
+ from ...cli.shared.error_handling import confirm_operation
858
+ from ..utils.update_preferences import UpdatePreferences
859
+
860
+ logger = get_logger("kuzu_memory_update")
861
+
862
+ message = (
863
+ f"\n🔄 A new version of kuzu-memory is available!\n"
864
+ f" Current: v{current}\n"
865
+ f" Latest: v{latest}\n\n"
866
+ f" This update may include bug fixes and performance improvements.\n"
867
+ f" Update now?"
868
+ )
869
+
870
+ # Check if running in a non-interactive context
871
+ try:
872
+ if confirm_operation(message):
873
+ print("🚀 Updating kuzu-memory...", file=sys.stderr)
874
+ try:
875
+ result = subprocess.run(
876
+ ["pipx", "upgrade", "kuzu-memory"],
877
+ capture_output=True,
878
+ text=True,
879
+ timeout=30,
880
+ check=False,
881
+ )
882
+ if result.returncode == 0:
883
+ print("✅ Successfully updated kuzu-memory!", file=sys.stderr)
884
+ logger.info(f"Updated kuzu-memory from {current} to {latest}")
885
+ else:
886
+ print(f"⚠️ Update failed: {result.stderr}", file=sys.stderr)
887
+ logger.warning(f"kuzu-memory update failed: {result.stderr}")
888
+ except subprocess.TimeoutExpired:
889
+ print("⚠️ Update timed out. Please try again later.", file=sys.stderr)
890
+ logger.warning("kuzu-memory update timed out")
891
+ except Exception as e:
892
+ print(f"⚠️ Update failed: {e}", file=sys.stderr)
893
+ logger.warning(f"kuzu-memory update error: {e}")
894
+ else:
895
+ # User declined update
896
+ print("\n To skip this version permanently, run:", file=sys.stderr)
897
+ print(
898
+ f" claude-mpm config set-skip-version kuzu-memory {latest}",
899
+ file=sys.stderr,
900
+ )
901
+ print(" To disable update checks for kuzu-memory:", file=sys.stderr)
902
+ print(
903
+ " claude-mpm config disable-update-checks kuzu-memory",
904
+ file=sys.stderr,
905
+ )
906
+
907
+ # Ask if user wants to skip this version
908
+ if confirm_operation("\n Skip this version in future checks?"):
909
+ UpdatePreferences.set_skip_version("kuzu-memory", latest)
910
+ print(
911
+ f" Version {latest} will be skipped in future checks.",
912
+ file=sys.stderr,
913
+ )
914
+ except (KeyboardInterrupt, EOFError):
915
+ # User interrupted or input not available
916
+ pass
917
+
918
+
919
+ async def pre_warm_mcp_servers():
920
+ """
921
+ Pre-warm MCP servers from configuration.
922
+
923
+ DISABLED: This function is currently disabled to avoid conflicts with
924
+ Claude Code's native MCP server management. When enabled, this can
925
+ cause issues with MCP server initialization and stderr/stdout handling.
926
+
927
+ TODO: Re-enable after ensuring compatibility with Claude Code's MCP handling.
928
+ """
929
+ logger = get_logger("MCPProcessPool")
930
+ logger.debug("MCP server pre-warming is currently disabled")
931
+
932
+ # COMMENTED OUT: Auto-initialization that can interfere with Claude Code
933
+ # # Auto-initialize vector search for current project
934
+ # await auto_initialize_vector_search()
935
+ #
936
+ # # Auto-initialize kuzu-memory for persistent knowledge
937
+ # await auto_initialize_kuzu_memory()
938
+ #
939
+ # pool = get_process_pool()
940
+ #
941
+ # # Load MCP configurations
942
+ # configs = {}
943
+ #
944
+ # # Check .claude.json for MCP server configs
945
+ # claude_config_path = Path.home() / ".claude.json"
946
+ # if not claude_config_path.exists():
947
+ # # Try project-local config
948
+ # claude_config_path = Path.cwd() / ".claude.json"
949
+ #
950
+ # if claude_config_path.exists():
951
+ # try:
952
+ # with claude_config_path.open() as f:
953
+ # config_data = json.load(f)
954
+ # mcp_servers = config_data.get("mcpServers", {})
955
+ # configs.update(mcp_servers)
956
+ # except Exception as e:
957
+ # get_logger("MCPProcessPool").warning(f"Failed to load Claude config: {e}")
958
+ #
959
+ # # Check .mcp.json for additional configs
960
+ # mcp_config_path = Path.cwd() / ".mcp.json"
961
+ # if mcp_config_path.exists():
962
+ # try:
963
+ # with mcp_config_path.open() as f:
964
+ # config_data = json.load(f)
965
+ # mcp_servers = config_data.get("mcpServers", {})
966
+ # configs.update(mcp_servers)
967
+ # except Exception as e:
968
+ # get_logger("MCPProcessPool").warning(f"Failed to load MCP config: {e}")
969
+ #
970
+ # if configs:
971
+ # await pool.pre_warm_servers(configs)
972
+ # await pool.start_health_monitoring()
973
+ #
974
+ # return pool
975
+
976
+ # Return a basic pool instance without pre-warming
977
+ return get_process_pool()
@@ -149,7 +149,7 @@ class MCPGatewayManager:
149
149
  return None
150
150
 
151
151
  try:
152
- with open(self.instance_file) as f:
152
+ with self.instance_file.open() as f:
153
153
  instance_info = json.load(f)
154
154
 
155
155
  # Validate PID is still running
@@ -195,7 +195,7 @@ class MCPGatewayManager:
195
195
  "lock_file": str(self.lock_file),
196
196
  }
197
197
 
198
- with open(self.instance_file, "w") as f:
198
+ with self.instance_file.open("w") as f:
199
199
  json.dump(instance_info, f, indent=2)
200
200
 
201
201
  self._current_instance = instance_info
@@ -45,7 +45,7 @@ class MCPGatewayStartupVerifier:
45
45
  "system_info", # System diagnostics
46
46
  "health_check", # Health diagnostics
47
47
  "document_summarizer", # File summarizer
48
- "ticket", # Ticket service (unified)
48
+ # Ticket functionality now provided by mcp-ticketer
49
49
  ]
50
50
 
51
51
  async def verify_and_configure(self) -> Dict[str, Any]:
@@ -125,7 +125,7 @@ class MCPGatewayStartupVerifier:
125
125
  try:
126
126
  import json
127
127
 
128
- with open(self.config_file, "w") as f:
128
+ with self.config_file.open("w") as f:
129
129
  json.dump(default_config, f, indent=2)
130
130
 
131
131
  self.logger.info(
@@ -210,7 +210,7 @@ class MCPGatewayStartupVerifier:
210
210
  "..tools.document_summarizer",
211
211
  "DocumentSummarizerTool",
212
212
  ),
213
- "ticket": ("..tools.unified_ticket_tool", "UnifiedTicketTool"),
213
+ # Ticket functionality now provided by mcp-ticketer
214
214
  }
215
215
 
216
216
  if tool_name not in tool_map: