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.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

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
@@ -15,23 +15,24 @@ DESIGN DECISIONS:
15
15
 
16
16
  import subprocess
17
17
  import sys
18
- from datetime import datetime
18
+ from datetime import datetime, timezone
19
19
  from typing import Optional
20
20
 
21
21
  from ...constants import LogLevel
22
22
  from ...core.logger import get_logger
23
23
  from ...core.unified_paths import get_scripts_dir
24
- from ...services.cli.dashboard_launcher import DashboardLauncher
25
24
  from ...services.cli.session_manager import SessionManager
26
- from ...services.cli.socketio_manager import SocketIOManager
25
+
26
+ # SocketIOManager functionality now provided by UnifiedDashboardManager
27
27
  from ...services.cli.startup_checker import StartupCheckerService
28
+ from ...services.cli.unified_dashboard_manager import UnifiedDashboardManager
28
29
  from ..shared import BaseCommand, CommandResult
29
30
  from ..startup_logging import (
30
31
  cleanup_old_startup_logs,
31
32
  log_startup_status,
32
33
  setup_startup_logging,
33
34
  )
34
- from ..utils import get_user_input, list_agent_versions_at_startup
35
+ from ..utils import get_user_input
35
36
 
36
37
 
37
38
  def filter_claude_mpm_args(claude_args):
@@ -67,6 +68,7 @@ def filter_claude_mpm_args(claude_args):
67
68
  "--no-native-agents",
68
69
  "--launch-method",
69
70
  "--mpm-resume",
71
+ "--reload-agents", # New flag to force rebuild system agents
70
72
  # Dependency checking flags (MPM-specific)
71
73
  "--no-check-dependencies",
72
74
  "--force-check-dependencies",
@@ -165,10 +167,10 @@ def create_session_context(session_id, session_manager):
165
167
  # Session Resumption
166
168
 
167
169
  You are resuming session {session_id[:8]}... which was:
168
- - Created: {session_data.get('created_at', 'unknown')}
169
- - Last used: {session_data.get('last_used', 'unknown')}
170
- - Context: {session_data.get('context', 'default')}
171
- - Use count: {session_data.get('use_count', 0)}
170
+ - Created: {session_data.get("created_at", "unknown")}
171
+ - Last used: {session_data.get("last_used", "unknown")}
172
+ - Context: {session_data.get("context", "default")}
173
+ - Use count: {session_data.get("use_count", 0)}
172
174
  """
173
175
 
174
176
  # Add information about agents previously run in this session
@@ -324,7 +326,7 @@ class RunCommand(BaseCommand):
324
326
  self.logger.warning(f"Session {resume_session_id} not found")
325
327
  else:
326
328
  self.logger.info("No recent interactive sessions found")
327
- print("ℹ️ No recent interactive sessions found to resume")
329
+ print("[INFO]️ No recent interactive sessions found to resume")
328
330
  else:
329
331
  # Resume specific session by ID
330
332
  resume_session_id = args.mpm_resume
@@ -359,7 +361,7 @@ class RunCommand(BaseCommand):
359
361
  loader = AgentDependencyLoader(auto_install=False)
360
362
 
361
363
  # Check if agents have changed
362
- has_changed, deployment_hash = loader.has_agents_changed()
364
+ _has_changed, deployment_hash = loader.has_agents_changed()
363
365
 
364
366
  # Determine if we should check dependencies
365
367
  should_check, check_reason = smart_checker.should_check_dependencies(
@@ -423,16 +425,16 @@ class RunCommand(BaseCommand):
423
425
  self.logger.warning(f"Dependency check failed: {e}")
424
426
 
425
427
  def _setup_monitoring(self, args):
426
- """Setup monitoring configuration using SocketIOManager."""
428
+ """Setup monitoring configuration using UnifiedDashboardManager."""
427
429
  monitor_mode = getattr(args, "monitor", False)
428
430
  websocket_port = 8765 # Default port
429
431
 
430
432
  if monitor_mode:
431
- # Use SocketIOManager for server management
432
- socketio_manager = SocketIOManager(self.logger)
433
+ # Use UnifiedDashboardManager for server management
434
+ dashboard_manager = UnifiedDashboardManager(self.logger)
433
435
 
434
436
  # Check dependencies
435
- deps_ok, error_msg = socketio_manager.ensure_dependencies()
437
+ deps_ok, error_msg = dashboard_manager.ensure_dependencies()
436
438
  if not deps_ok:
437
439
  self.logger.warning(
438
440
  f"Socket.IO dependencies not available: {error_msg}, disabling monitor mode"
@@ -440,8 +442,8 @@ class RunCommand(BaseCommand):
440
442
  monitor_mode = False
441
443
  else:
442
444
  # Find available port and start server
443
- websocket_port = socketio_manager.find_available_port(8765)
444
- success, server_info = socketio_manager.start_server(
445
+ websocket_port = dashboard_manager.find_available_port(8765)
446
+ success, _server_info = dashboard_manager.start_server(
445
447
  port=websocket_port
446
448
  )
447
449
 
@@ -451,12 +453,12 @@ class RunCommand(BaseCommand):
451
453
  )
452
454
  monitor_mode = False
453
455
  else:
454
- # Use DashboardLauncher for browser opening only
455
- dashboard_launcher = DashboardLauncher(self.logger)
456
- monitor_url = dashboard_launcher.get_dashboard_url(websocket_port)
456
+ # Use UnifiedDashboardManager for browser opening only
457
+ dashboard_manager = UnifiedDashboardManager(self.logger)
458
+ monitor_url = dashboard_manager.get_dashboard_url(websocket_port)
457
459
 
458
460
  # Try to open browser
459
- browser_opened = dashboard_launcher._open_browser(monitor_url)
461
+ browser_opened = dashboard_manager.open_browser(monitor_url)
460
462
  args._browser_opened_by_cli = browser_opened
461
463
 
462
464
  if not browser_opened:
@@ -521,7 +523,7 @@ class RunCommand(BaseCommand):
521
523
  # Update session usage
522
524
  session = session_manager.load_session(resume_session_id)
523
525
  if session:
524
- session.last_used = datetime.now().isoformat()
526
+ session.last_used = datetime.now(timezone.utc).isoformat()
525
527
  session.use_count += 1
526
528
  session_manager.save_session(session)
527
529
  else:
@@ -567,6 +569,77 @@ class RunCommand(BaseCommand):
567
569
  return False
568
570
 
569
571
 
572
+ def _handle_reload_agents(logger):
573
+ """
574
+ Handle the --reload-agents flag by deleting all local claude-mpm system agents.
575
+
576
+ This forces a fresh rebuild of system agents on the next deployment,
577
+ while preserving user-created agents.
578
+
579
+ Args:
580
+ logger: Logger instance for output
581
+ """
582
+ try:
583
+ logger.info("Reloading system agents - cleaning existing deployments...")
584
+
585
+ # Import the cleanup service
586
+ from ...services.agents.deployment.agent_deployment import (
587
+ AgentDeploymentService,
588
+ )
589
+ from ...services.cli.agent_cleanup_service import AgentCleanupService
590
+
591
+ # Create services
592
+ deployment_service = AgentDeploymentService()
593
+ cleanup_service = AgentCleanupService(deployment_service)
594
+
595
+ # Determine the agents directory
596
+ agents_dir = None # Will auto-detect project or user directory
597
+
598
+ # Clean deployed agents (preserves user agents)
599
+ result = cleanup_service.clean_deployed_agents(agents_dir)
600
+
601
+ # Check if cleanup was successful based on the result structure
602
+ # The service returns a dict with 'removed', 'preserved', and possibly 'errors' keys
603
+ # If it has 'success' key, use it; otherwise infer from the result
604
+ success = (
605
+ result.get("success", True)
606
+ if "success" in result
607
+ else not result.get("errors")
608
+ )
609
+
610
+ if success:
611
+ removed_count = result.get("cleaned_count", len(result.get("removed", [])))
612
+ removed_agents = result.get("removed", [])
613
+ preserved_agents = result.get("preserved", [])
614
+
615
+ if removed_count > 0:
616
+ logger.info(f"✅ Successfully removed {removed_count} system agents")
617
+ if removed_agents:
618
+ logger.debug(f"Removed agents: {', '.join(removed_agents)}")
619
+ print(f"🔄 Cleaned {removed_count} claude-mpm system agents")
620
+ else:
621
+ logger.info("No system agents found to clean")
622
+ print("[INFO]️ No system agents found - already clean")
623
+
624
+ if preserved_agents:
625
+ logger.info(f"Preserved {len(preserved_agents)} user-created agents")
626
+ print(f"✅ Preserved {len(preserved_agents)} user-created agents")
627
+
628
+ print("🚀 System agents will be rebuilt on next use")
629
+ else:
630
+ error = result.get("error", "Cleanup failed")
631
+ if result.get("errors"):
632
+ error = f"Cleanup errors: {', '.join(result['errors'])}"
633
+ logger.error(f"Failed to clean system agents: {error}")
634
+ print(f"❌ Error cleaning agents: {error}")
635
+
636
+ except Exception as e:
637
+ logger.error(f"Error handling --reload-agents: {e}", exc_info=True)
638
+ print(f"❌ Failed to reload agents: {e}")
639
+ # Don't fail the entire session, just log the error
640
+ print("⚠️ Continuing with existing agents...")
641
+
642
+
570
643
  def run_session(args):
571
644
  """
572
645
  Main entry point for run command.
@@ -595,8 +668,10 @@ def run_session_legacy(args):
595
668
  Args:
596
669
  args: Parsed command line arguments
597
670
  """
598
- # Set up startup logging to file early in the process
599
- setup_startup_logging(Path.cwd())
671
+ # Only setup startup logging if user wants logging
672
+ if args.logging != LogLevel.OFF.value:
673
+ # Set up startup logging to file early in the process
674
+ setup_startup_logging(Path.cwd())
600
675
 
601
676
  logger = get_logger("cli")
602
677
  if args.logging != LogLevel.OFF.value:
@@ -604,12 +679,13 @@ def run_session_legacy(args):
604
679
  # Log file already announced in startup_logging.py when created
605
680
 
606
681
  # Clean up old startup logs (using configured retention count)
607
- try:
608
- deleted_count = cleanup_old_startup_logs(Path.cwd())
609
- if deleted_count > 0:
610
- logger.debug(f"Cleaned up {deleted_count} old startup log files")
611
- except Exception as e:
612
- logger.debug(f"Failed to clean up old logs: {e}")
682
+ if args.logging != LogLevel.OFF.value:
683
+ try:
684
+ deleted_count = cleanup_old_startup_logs(Path.cwd())
685
+ if deleted_count > 0:
686
+ logger.debug(f"Cleaned up {deleted_count} old startup log files")
687
+ except Exception as e:
688
+ logger.debug(f"Failed to clean up old logs: {e}")
613
689
 
614
690
  # Log MCP and monitor startup status
615
691
  if args.logging != LogLevel.OFF.value:
@@ -623,6 +699,18 @@ def run_session_legacy(args):
623
699
  # Check for memory usage issues with .claude.json
624
700
  _check_claude_json_memory(args, logger)
625
701
 
702
+ # Handle --reload-agents flag if specified
703
+ if getattr(args, "reload_agents", False):
704
+ _handle_reload_agents(logger)
705
+
706
+ # Trigger vector search indexing
707
+ try:
708
+ from ...cli.startup_logging import start_vector_search_indexing
709
+
710
+ start_vector_search_indexing()
711
+ except Exception as e:
712
+ logger.debug(f"Failed to start vector search indexing: {e}")
713
+
626
714
  try:
627
715
  from ...core.claude_runner import ClaudeRunner, create_simple_context
628
716
  except ImportError:
@@ -651,7 +739,7 @@ def run_session_legacy(args):
651
739
  logger.warning(f"Session {resume_session_id} not found")
652
740
  else:
653
741
  logger.info("No recent interactive sessions found")
654
- print("ℹ️ No recent interactive sessions found to resume")
742
+ print("[INFO]️ No recent interactive sessions found to resume")
655
743
  else:
656
744
  # Resume specific session by ID
657
745
  resume_session_id = args.mpm_resume
@@ -682,134 +770,127 @@ def run_session_legacy(args):
682
770
  if getattr(args, "no_native_agents", False):
683
771
  print("Native agents disabled")
684
772
  else:
685
- # List deployed agent versions at startup
686
- list_agent_versions_at_startup()
687
-
688
- # Smart dependency checking - only when needed
689
- if getattr(args, "check_dependencies", True): # Default to checking
690
- try:
691
- from ...utils.agent_dependency_loader import AgentDependencyLoader
692
- from ...utils.dependency_cache import SmartDependencyChecker
693
- from ...utils.environment_context import should_prompt_for_dependencies
773
+ # Agent versions removed from startup display - use /mpm-agents to view
774
+ # list_agent_versions_at_startup()
775
+ pass
694
776
 
695
- # Initialize smart checker
696
- smart_checker = SmartDependencyChecker()
697
- loader = AgentDependencyLoader(auto_install=False)
777
+ # Smart dependency checking - only when needed
778
+ if getattr(args, "check_dependencies", True): # Default to checking
779
+ try:
780
+ from ...utils.agent_dependency_loader import AgentDependencyLoader
781
+ from ...utils.dependency_cache import SmartDependencyChecker
782
+ from ...utils.environment_context import should_prompt_for_dependencies
698
783
 
699
- # Check if agents have changed
700
- has_changed, deployment_hash = loader.has_agents_changed()
784
+ # Initialize smart checker
785
+ smart_checker = SmartDependencyChecker()
786
+ loader = AgentDependencyLoader(auto_install=False)
701
787
 
702
- # Determine if we should check dependencies
703
- should_check, check_reason = smart_checker.should_check_dependencies(
704
- force_check=getattr(args, "force_check_dependencies", False),
705
- deployment_hash=deployment_hash,
706
- )
788
+ # Check if agents have changed
789
+ _has_changed, deployment_hash = loader.has_agents_changed()
707
790
 
708
- if should_check:
709
- # Check if we're in an environment where prompting makes sense
710
- can_prompt, prompt_reason = should_prompt_for_dependencies(
711
- force_prompt=getattr(args, "force_prompt", False),
712
- force_skip=getattr(args, "no_prompt", False),
713
- )
791
+ # Determine if we should check dependencies
792
+ should_check, check_reason = smart_checker.should_check_dependencies(
793
+ force_check=getattr(args, "force_check_dependencies", False),
794
+ deployment_hash=deployment_hash,
795
+ )
714
796
 
715
- logger.debug(f"Dependency check needed: {check_reason}")
716
- logger.debug(
717
- f"Interactive prompting: {can_prompt} ({prompt_reason})"
718
- )
797
+ if should_check:
798
+ # Check if we're in an environment where prompting makes sense
799
+ can_prompt, prompt_reason = should_prompt_for_dependencies(
800
+ force_prompt=getattr(args, "force_prompt", False),
801
+ force_skip=getattr(args, "no_prompt", False),
802
+ )
719
803
 
720
- # Get or check dependencies
721
- results, was_cached = smart_checker.get_or_check_dependencies(
722
- loader=loader,
723
- force_check=getattr(args, "force_check_dependencies", False),
724
- )
804
+ logger.debug(f"Dependency check needed: {check_reason}")
805
+ logger.debug(f"Interactive prompting: {can_prompt} ({prompt_reason})")
725
806
 
726
- # Show summary if there are missing dependencies
727
- if results["summary"]["missing_python"]:
728
- missing_count = len(results["summary"]["missing_python"])
729
- print(f"⚠️ {missing_count} agent dependencies missing")
730
-
731
- if can_prompt and missing_count > 0:
732
- # Interactive prompt for installation
733
- print("\n📦 Missing dependencies detected:")
734
- for dep in results["summary"]["missing_python"][:5]:
735
- print(f" - {dep}")
736
- if missing_count > 5:
737
- print(f" ... and {missing_count - 5} more")
738
-
739
- print("\nWould you like to install them now?")
740
- print(" [y] Yes, install missing dependencies")
741
- print(" [n] No, continue without installing")
742
- print(" [q] Quit")
743
-
744
- sys.stdout.flush() # Ensure prompt is displayed before input
745
-
746
- # Check if we're in a TTY environment for proper input handling
747
- if not sys.stdin.isatty():
748
- # In non-TTY environment (like pipes), use readline
749
- print("\nChoice [y/n/q]: ", end="", flush=True)
750
- try:
751
- response = sys.stdin.readline().strip().lower()
752
- # Handle various line endings and control characters
753
- response = (
754
- response.replace("\r", "")
755
- .replace("\n", "")
756
- .strip()
757
- )
758
- except (EOFError, KeyboardInterrupt):
759
- response = "q"
760
- else:
761
- # In TTY environment, use normal input()
762
- try:
763
- response = (
764
- input("\nChoice [y/n/q]: ").strip().lower()
765
- )
766
- except (EOFError, KeyboardInterrupt):
767
- response = "q"
807
+ # Get or check dependencies
808
+ results, was_cached = smart_checker.get_or_check_dependencies(
809
+ loader=loader,
810
+ force_check=getattr(args, "force_check_dependencies", False),
811
+ )
768
812
 
813
+ # Show summary if there are missing dependencies
814
+ if results["summary"]["missing_python"]:
815
+ missing_count = len(results["summary"]["missing_python"])
816
+ print(f"⚠️ {missing_count} agent dependencies missing")
817
+
818
+ if can_prompt and missing_count > 0:
819
+ # Interactive prompt for installation
820
+ print("\n📦 Missing dependencies detected:")
821
+ for dep in results["summary"]["missing_python"][:5]:
822
+ print(f" - {dep}")
823
+ if missing_count > 5:
824
+ print(f" ... and {missing_count - 5} more")
825
+
826
+ print("\nWould you like to install them now?")
827
+ print(" [y] Yes, install missing dependencies")
828
+ print(" [n] No, continue without installing")
829
+ print(" [q] Quit")
830
+
831
+ sys.stdout.flush() # Ensure prompt is displayed before input
832
+
833
+ # Check if we're in a TTY environment for proper input handling
834
+ if not sys.stdin.isatty():
835
+ # In non-TTY environment (like pipes), use readline
836
+ print("\nChoice [y/n/q]: ", end="", flush=True)
769
837
  try:
770
- if response == "y":
771
- print("\n🔧 Installing missing dependencies...")
772
- loader.auto_install = True
773
- (
774
- success,
775
- error,
776
- ) = loader.install_missing_dependencies(
777
- results["summary"]["missing_python"]
778
- )
779
- if success:
780
- print("✅ Dependencies installed successfully")
781
- # Invalidate cache after installation
782
- smart_checker.cache.invalidate(deployment_hash)
783
- else:
784
- print(f"❌ Installation failed: {error}")
785
- elif response == "q":
786
- print("👋 Exiting...")
787
- return
788
- else:
789
- print(
790
- "⏩ Continuing without installing dependencies"
791
- )
838
+ response = sys.stdin.readline().strip().lower()
839
+ # Handle various line endings and control characters
840
+ response = (
841
+ response.replace("\r", "").replace("\n", "").strip()
842
+ )
792
843
  except (EOFError, KeyboardInterrupt):
793
- print("\n⏩ Continuing without installing dependencies")
844
+ response = "q"
794
845
  else:
795
- # Non-interactive environment or prompting disabled
796
- print(
797
- " Run 'pip install \"claude-mpm[agents]\"' to install all agent dependencies"
798
- )
799
- if not can_prompt:
800
- logger.debug(
801
- f"Not prompting for installation: {prompt_reason}"
846
+ # In TTY environment, use normal input()
847
+ try:
848
+ response = input("\nChoice [y/n/q]: ").strip().lower()
849
+ except (EOFError, KeyboardInterrupt):
850
+ response = "q"
851
+
852
+ try:
853
+ if response == "y":
854
+ print("\n🔧 Installing missing dependencies...")
855
+ loader.auto_install = True
856
+ (
857
+ success,
858
+ error,
859
+ ) = loader.install_missing_dependencies(
860
+ results["summary"]["missing_python"]
802
861
  )
803
- elif was_cached:
804
- logger.debug("Dependencies satisfied (cached result)")
862
+ if success:
863
+ print("Dependencies installed successfully")
864
+ # Invalidate cache after installation
865
+ smart_checker.cache.invalidate(deployment_hash)
866
+ else:
867
+ print(f"❌ Installation failed: {error}")
868
+ elif response == "q":
869
+ print("👋 Exiting...")
870
+ return
871
+ else:
872
+ print("⏩ Continuing without installing dependencies")
873
+ except (EOFError, KeyboardInterrupt):
874
+ print("\n⏩ Continuing without installing dependencies")
805
875
  else:
806
- logger.debug("All dependencies satisfied")
876
+ # Non-interactive environment or prompting disabled
877
+ print(
878
+ " Run 'pip install \"claude-mpm[agents]\"' to install all agent dependencies"
879
+ )
880
+ if not can_prompt:
881
+ logger.debug(
882
+ f"Not prompting for installation: {prompt_reason}"
883
+ )
884
+ elif was_cached:
885
+ logger.debug("Dependencies satisfied (cached result)")
807
886
  else:
808
- logger.debug(f"Skipping dependency check: {check_reason}")
887
+ logger.debug("All dependencies satisfied")
888
+ else:
889
+ logger.debug(f"Skipping dependency check: {check_reason}")
809
890
 
810
- except Exception as e:
811
- if args.logging != LogLevel.OFF.value:
812
- logger.debug(f"Could not check agent dependencies: {e}")
891
+ except Exception as e:
892
+ if args.logging != LogLevel.OFF.value:
893
+ logger.debug(f"Could not check agent dependencies: {e}")
813
894
  # Continue anyway - don't block execution
814
895
 
815
896
  # Create simple runner
@@ -824,7 +905,7 @@ def run_session_legacy(args):
824
905
  raw_claude_args = ["--resume", *raw_claude_args]
825
906
  logger.info("✅ Added --resume to claude_args")
826
907
  else:
827
- logger.info("ℹ️ --resume already in claude_args")
908
+ logger.info("[INFO]️ --resume already in claude_args")
828
909
 
829
910
  # Filter out claude-mpm specific flags before passing to Claude CLI
830
911
  logger.debug(f"Pre-filter claude_args: {raw_claude_args}")
@@ -855,12 +936,12 @@ def run_session_legacy(args):
855
936
 
856
937
  # Display Socket.IO server info if enabled
857
938
  if enable_websocket:
858
- # Use SocketIOManager for server management
859
- socketio_manager = SocketIOManager(logger)
939
+ # Use UnifiedDashboardManager for server management
940
+ dashboard_manager = UnifiedDashboardManager(logger)
860
941
 
861
942
  # Check dependencies
862
943
  print("🔧 Checking Socket.IO dependencies...")
863
- deps_ok, error_msg = socketio_manager.ensure_dependencies()
944
+ deps_ok, error_msg = dashboard_manager.ensure_dependencies()
864
945
 
865
946
  if not deps_ok:
866
947
  print(f"❌ Failed to install Socket.IO dependencies: {error_msg}")
@@ -874,8 +955,8 @@ def run_session_legacy(args):
874
955
 
875
956
  # Find available port and start server if in monitor mode
876
957
  if monitor_mode:
877
- websocket_port = socketio_manager.find_available_port(websocket_port)
878
- success, server_info = socketio_manager.start_server(
958
+ websocket_port = dashboard_manager.find_available_port(websocket_port)
959
+ success, server_info = dashboard_manager.start_server(
879
960
  port=websocket_port
880
961
  )
881
962
 
@@ -886,18 +967,23 @@ def run_session_legacy(args):
886
967
  " Note: Socket.IO monitoring using exec mode with Claude Code hooks"
887
968
  )
888
969
 
889
- # Use DashboardLauncher for browser opening
890
- dashboard_launcher = DashboardLauncher(logger)
891
- monitor_url = dashboard_launcher.get_dashboard_url(websocket_port)
892
- browser_opened = dashboard_launcher._open_browser(monitor_url)
970
+ # Use UnifiedDashboardManager for browser opening
971
+ dashboard_manager = UnifiedDashboardManager(logger)
972
+ monitor_url = dashboard_manager.get_dashboard_url(websocket_port)
973
+ browser_opened = dashboard_manager.open_browser(monitor_url)
893
974
  args._browser_opened_by_cli = browser_opened
894
975
 
895
976
  if not browser_opened:
896
977
  print(f"💡 Monitor interface available at: {monitor_url}")
897
978
  else:
898
979
  print("⚠️ Failed to launch Socket.IO monitor")
980
+ print("Dashboard is not running. To enable monitoring:")
981
+ print(" 1. Use the --monitor flag: claude-mpm run --monitor")
982
+ print(
983
+ " 2. Or start dashboard separately: claude-mpm dashboard start"
984
+ )
899
985
  print(
900
- f" You can manually run: python scripts/launch_socketio_dashboard.py --port {websocket_port}"
986
+ f" 3. Dashboard will be available at: http://localhost:{websocket_port}"
901
987
  )
902
988
  args._browser_opened_by_cli = False
903
989
  else:
@@ -930,7 +1016,7 @@ def run_session_legacy(args):
930
1016
  # Update session usage
931
1017
  session = session_manager.load_session(resume_session_id)
932
1018
  if session:
933
- session.last_used = datetime.now().isoformat()
1019
+ session.last_used = datetime.now(timezone.utc).isoformat()
934
1020
  session.use_count += 1
935
1021
  session_manager.save_session(session)
936
1022
  else:
@@ -966,16 +1052,15 @@ def run_session_legacy(args):
966
1052
  runner.run_interactive(context)
967
1053
 
968
1054
 
969
- # Legacy helper functions - now delegating to SocketIOManager
1055
+ # Legacy helper functions - now delegating to UnifiedDashboardManager
970
1056
  def launch_socketio_monitor(port, logger):
971
1057
  """Launch the Socket.IO monitoring dashboard (legacy compatibility)."""
972
- socketio_manager = SocketIOManager(logger)
973
- success, server_info = socketio_manager.start_server(port=port)
1058
+ dashboard_manager = UnifiedDashboardManager(logger)
1059
+ success, server_info = dashboard_manager.start_server(port=port)
974
1060
 
975
1061
  if success:
976
- # Open browser using DashboardLauncher
977
- launcher = DashboardLauncher(logger)
978
- browser_opened = launcher._open_browser(server_info.url)
1062
+ # Open browser using UnifiedDashboardManager
1063
+ browser_opened = dashboard_manager.open_browser(server_info.url)
979
1064
  return success, browser_opened
980
1065
 
981
1066
  return False, False
@@ -983,21 +1068,21 @@ def launch_socketio_monitor(port, logger):
983
1068
 
984
1069
  def _check_socketio_server_running(port, logger):
985
1070
  """Check if a Socket.IO server is running on the specified port (legacy compatibility)."""
986
- socketio_manager = SocketIOManager(logger)
987
- return socketio_manager.is_server_running(port)
1071
+ dashboard_manager = UnifiedDashboardManager(logger)
1072
+ return dashboard_manager.is_server_running(port)
988
1073
 
989
1074
 
990
1075
  def _start_standalone_socketio_server(port, logger):
991
1076
  """Start a standalone Socket.IO server (legacy compatibility)."""
992
- socketio_manager = SocketIOManager(logger)
993
- success, _ = socketio_manager.start_server(port=port)
1077
+ dashboard_manager = UnifiedDashboardManager(logger)
1078
+ success, _ = dashboard_manager.start_server(port=port)
994
1079
  return success
995
1080
 
996
1081
 
997
1082
  def open_in_browser_tab(url, logger):
998
1083
  """Open URL in browser, attempting to reuse existing tabs when possible."""
999
- launcher = DashboardLauncher(logger)
1000
- return launcher._open_browser(url)
1084
+ manager = UnifiedDashboardManager(logger)
1085
+ return manager.open_browser(url)
1001
1086
 
1002
1087
 
1003
1088
  def _check_claude_json_memory(args, logger):