claude-mpm 4.0.9__tar.gz → 4.0.12__tar.gz

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 (435) hide show
  1. claude_mpm-4.0.12/BUILD_NUMBER +1 -0
  2. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/MANIFEST.in +1 -0
  3. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/PKG-INFO +1 -1
  4. claude_mpm-4.0.12/VERSION +1 -0
  5. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/pyproject.toml +1 -1
  6. claude_mpm-4.0.12/src/claude_mpm/BUILD_NUMBER +1 -0
  7. claude_mpm-4.0.12/src/claude_mpm/VERSION +1 -0
  8. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/framework_loader.py +36 -20
  9. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/interactive_session.py +2 -2
  10. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/socket-client.js +270 -3
  11. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/claude_hooks/hook_handler.py +3 -1
  12. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/claude_hooks/hook_wrapper.sh +3 -3
  13. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/memory/agent_memory_manager.py +1 -1
  14. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/handlers/connection.py +284 -1
  15. claude_mpm-4.0.12/src/claude_mpm/services/socketio/server/broadcaster.py +518 -0
  16. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/server/main.py +15 -1
  17. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/version_service.py +18 -11
  18. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm.egg-info/PKG-INFO +1 -1
  19. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm.egg-info/SOURCES.txt +1 -0
  20. claude_mpm-4.0.9/BUILD_NUMBER +0 -1
  21. claude_mpm-4.0.9/VERSION +0 -1
  22. claude_mpm-4.0.9/src/claude_mpm/VERSION +0 -1
  23. claude_mpm-4.0.9/src/claude_mpm/services/socketio/server/broadcaster.py +0 -252
  24. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/CLAUDE.md +0 -0
  25. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/LICENSE +0 -0
  26. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/README.md +0 -0
  27. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/claude-mpm +0 -0
  28. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/requirements.txt +0 -0
  29. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/scripts/ticket +0 -0
  30. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/setup.cfg +0 -0
  31. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/setup.py +0 -0
  32. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/__init__.py +0 -0
  33. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/__main__.py +0 -0
  34. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -0
  35. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/BASE_PM.md +0 -0
  36. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/INSTRUCTIONS.md +0 -0
  37. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/MEMORY.md +0 -0
  38. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/WORKFLOW.md +0 -0
  39. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/__init__.py +0 -0
  40. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/agent_loader.py +0 -0
  41. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/agent_loader_integration.py +0 -0
  42. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/agents_metadata.py +0 -0
  43. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/async_agent_loader.py +0 -0
  44. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/backups/INSTRUCTIONS.md +0 -0
  45. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/base_agent.json +0 -0
  46. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/base_agent_loader.py +0 -0
  47. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/frontmatter_validator.py +0 -0
  48. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/schema/agent_schema.json +0 -0
  49. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/system_agent_config.py +0 -0
  50. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/__init__.py +0 -0
  51. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +0 -0
  52. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json +0 -0
  53. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json +0 -0
  54. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json +0 -0
  55. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json +0 -0
  56. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/backup/research_agent_2025011_234551.json +0 -0
  57. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/backup/research_agent_20250726_234551.json +0 -0
  58. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/backup/research_memory_efficient.json +0 -0
  59. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/backup/security_agent_20250726_234551.json +0 -0
  60. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json +0 -0
  61. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/code_analyzer.json +0 -0
  62. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/data_engineer.json +0 -0
  63. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/documentation.json +0 -0
  64. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/engineer.json +0 -0
  65. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/memory_manager.json +0 -0
  66. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/ops.json +0 -0
  67. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/project_organizer.json +0 -0
  68. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/qa.json +0 -0
  69. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/refactoring_engineer.json +0 -0
  70. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/research.json +0 -0
  71. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/security.json +0 -0
  72. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/ticketing.json +0 -0
  73. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/version_control.json +0 -0
  74. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/web_qa.json +0 -0
  75. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/agents/templates/web_ui.json +0 -0
  76. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/__init__.py +0 -0
  77. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/__main__.py +0 -0
  78. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/__init__.py +0 -0
  79. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/agents.py +0 -0
  80. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/aggregate.py +0 -0
  81. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/cleanup.py +0 -0
  82. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/config.py +0 -0
  83. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/info.py +0 -0
  84. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/mcp.py +0 -0
  85. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/mcp_command_router.py +0 -0
  86. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/mcp_config_commands.py +0 -0
  87. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/mcp_install_commands.py +0 -0
  88. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/mcp_server_commands.py +0 -0
  89. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/mcp_tool_commands.py +0 -0
  90. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/memory.py +0 -0
  91. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/monitor.py +0 -0
  92. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/run.py +0 -0
  93. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/run_config_checker.py +0 -0
  94. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/socketio_monitor.py +0 -0
  95. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/commands/tickets.py +0 -0
  96. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/parser.py +0 -0
  97. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/parsers/__init__.py +0 -0
  98. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/parsers/agents_parser.py +0 -0
  99. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/parsers/base_parser.py +0 -0
  100. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/parsers/config_parser.py +0 -0
  101. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/parsers/mcp_parser.py +0 -0
  102. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/parsers/memory_parser.py +0 -0
  103. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/parsers/monitor_parser.py +0 -0
  104. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/parsers/run_parser.py +0 -0
  105. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/parsers/tickets_parser.py +0 -0
  106. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/ticket_cli.py +0 -0
  107. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli/utils.py +0 -0
  108. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli_module/__init__.py +0 -0
  109. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli_module/args.py +0 -0
  110. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli_module/commands.py +0 -0
  111. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/cli_module/migration_example.py +0 -0
  112. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/config/__init__.py +0 -0
  113. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/config/agent_config.py +0 -0
  114. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/config/experimental_features.py +0 -0
  115. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/config/paths.py +0 -0
  116. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/config/socketio_config.py +0 -0
  117. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/constants.py +0 -0
  118. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/__init__.py +0 -0
  119. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/agent_name_normalizer.py +0 -0
  120. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/agent_registry.py +0 -0
  121. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/agent_session_manager.py +0 -0
  122. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/base_service.py +0 -0
  123. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/cache.py +0 -0
  124. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/claude_runner.py +0 -0
  125. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/config.py +0 -0
  126. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/config_aliases.py +0 -0
  127. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/config_constants.py +0 -0
  128. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/constants.py +0 -0
  129. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/container.py +0 -0
  130. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/exceptions.py +0 -0
  131. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/factories.py +0 -0
  132. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/hook_manager.py +0 -0
  133. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/hook_performance_config.py +0 -0
  134. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/injectable_service.py +0 -0
  135. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/interfaces.py +0 -0
  136. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/lazy.py +0 -0
  137. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/logger.py +0 -0
  138. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/logging_config.py +0 -0
  139. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/minimal_framework_loader.py +0 -0
  140. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/mixins.py +0 -0
  141. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/oneshot_session.py +0 -0
  142. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/optimized_agent_loader.py +0 -0
  143. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/optimized_startup.py +0 -0
  144. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/pm_hook_interceptor.py +0 -0
  145. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/service_registry.py +0 -0
  146. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/session_manager.py +0 -0
  147. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/socketio_pool.py +0 -0
  148. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/tool_access_control.py +0 -0
  149. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/types.py +0 -0
  150. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/typing_utils.py +0 -0
  151. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/unified_agent_registry.py +0 -0
  152. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/unified_config.py +0 -0
  153. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/core/unified_paths.py +0 -0
  154. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/index.html +0 -0
  155. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/open_dashboard.py +0 -0
  156. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/agent-inference.js +0 -0
  157. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/event-processor.js +0 -0
  158. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/event-viewer.js +0 -0
  159. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/export-manager.js +0 -0
  160. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -0
  161. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -0
  162. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/hud-manager.js +0 -0
  163. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -0
  164. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/module-viewer.js +0 -0
  165. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/session-manager.js +0 -0
  166. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/socket-manager.js +0 -0
  167. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -0
  168. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/components/working-directory.js +0 -0
  169. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/dashboard.js +0 -0
  170. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/built/socket-client.js +0 -0
  171. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/css/dashboard.css +0 -0
  172. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -0
  173. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/event-processor.js +0 -0
  174. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -0
  175. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/export-manager.js +0 -0
  176. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -0
  177. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -0
  178. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -0
  179. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -0
  180. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -0
  181. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/session-manager.js +0 -0
  182. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -0
  183. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -0
  184. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/components/working-directory.js +0 -0
  185. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/dashboard.js +0 -0
  186. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/dist/socket-client.js +0 -0
  187. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/agent-inference.js +0 -0
  188. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/event-processor.js +0 -0
  189. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/event-viewer.js +0 -0
  190. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/export-manager.js +0 -0
  191. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -0
  192. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -0
  193. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/hud-manager.js +0 -0
  194. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -0
  195. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/module-viewer.js +0 -0
  196. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/session-manager.js +0 -0
  197. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/socket-manager.js +0 -0
  198. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -0
  199. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/components/working-directory.js +0 -0
  200. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/dashboard.js +0 -0
  201. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/static/js/extension-error-handler.js +0 -0
  202. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/templates/index.html +0 -0
  203. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/dashboard/test_dashboard.html +0 -0
  204. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/experimental/cli_enhancements.py +0 -0
  205. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/generators/__init__.py +0 -0
  206. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/generators/agent_profile_generator.py +0 -0
  207. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/__init__.py +0 -0
  208. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/base_hook.py +0 -0
  209. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/claude_hooks/__init__.py +0 -0
  210. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/claude_hooks/connection_pool.py +0 -0
  211. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/claude_hooks/event_handlers.py +0 -0
  212. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/claude_hooks/memory_integration.py +0 -0
  213. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/claude_hooks/response_tracking.py +0 -0
  214. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/claude_hooks/tool_analysis.py +0 -0
  215. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/memory_integration_hook.py +0 -0
  216. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/tool_call_interceptor.py +0 -0
  217. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/hooks/validation_hooks.py +0 -0
  218. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/init.py +0 -0
  219. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/models/__init__.py +0 -0
  220. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/models/agent_definition.py +0 -0
  221. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/models/agent_session.py +0 -0
  222. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/scripts/__init__.py +0 -0
  223. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/scripts/socketio_daemon.py +0 -0
  224. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/scripts/socketio_server_manager.py +0 -0
  225. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/scripts/start_activity_logging.py +0 -0
  226. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/__init__.py +0 -0
  227. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agent_capabilities_service.py +0 -0
  228. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/__init__.py +0 -0
  229. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/__init__.py +0 -0
  230. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_config_provider.py +0 -0
  231. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_configuration_manager.py +0 -0
  232. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_definition_factory.py +0 -0
  233. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_deployment.py +0 -0
  234. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_discovery_service.py +0 -0
  235. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_environment_manager.py +0 -0
  236. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_filesystem_manager.py +0 -0
  237. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_format_converter.py +0 -0
  238. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +0 -0
  239. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +0 -0
  240. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_metrics_collector.py +0 -0
  241. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_restore_handler.py +0 -0
  242. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_template_builder.py +0 -0
  243. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_validator.py +0 -0
  244. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_version_manager.py +0 -0
  245. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agent_versioning.py +0 -0
  246. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/agents_directory_resolver.py +0 -0
  247. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/async_agent_deployment.py +0 -0
  248. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/config/__init__.py +0 -0
  249. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/config/deployment_config.py +0 -0
  250. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/config/deployment_config_manager.py +0 -0
  251. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/deployment_config_loader.py +0 -0
  252. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/deployment_type_detector.py +0 -0
  253. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/facade/__init__.py +0 -0
  254. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +0 -0
  255. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/facade/deployment_executor.py +0 -0
  256. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/facade/deployment_facade.py +0 -0
  257. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +0 -0
  258. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/interface_adapter.py +0 -0
  259. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/lifecycle_health_checker.py +0 -0
  260. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +0 -0
  261. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/pipeline/__init__.py +0 -0
  262. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +0 -0
  263. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +0 -0
  264. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +0 -0
  265. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +0 -0
  266. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +0 -0
  267. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +0 -0
  268. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +0 -0
  269. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +0 -0
  270. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +0 -0
  271. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/processors/__init__.py +0 -0
  272. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +0 -0
  273. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +0 -0
  274. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/processors/agent_processor.py +0 -0
  275. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +0 -0
  276. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/results/__init__.py +0 -0
  277. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/results/deployment_metrics.py +0 -0
  278. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/results/deployment_result_builder.py +0 -0
  279. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/strategies/__init__.py +0 -0
  280. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/strategies/base_strategy.py +0 -0
  281. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/strategies/project_strategy.py +0 -0
  282. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/strategies/strategy_selector.py +0 -0
  283. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/strategies/system_strategy.py +0 -0
  284. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/strategies/user_strategy.py +0 -0
  285. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/system_instructions_deployer.py +0 -0
  286. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/validation/__init__.py +0 -0
  287. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/validation/agent_validator.py +0 -0
  288. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/validation/deployment_validator.py +0 -0
  289. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/validation/template_validator.py +0 -0
  290. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/deployment/validation/validation_result.py +0 -0
  291. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/loading/__init__.py +0 -0
  292. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/loading/agent_profile_loader.py +0 -0
  293. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/loading/base_agent_manager.py +0 -0
  294. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/loading/framework_agent_loader.py +0 -0
  295. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/management/__init__.py +0 -0
  296. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/management/agent_capabilities_generator.py +0 -0
  297. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/management/agent_management_service.py +0 -0
  298. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/memory/__init__.py +0 -0
  299. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/memory/agent_persistence_service.py +0 -0
  300. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/memory/analyzer.py +0 -0
  301. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/memory/content_manager.py +0 -0
  302. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/memory/template_generator.py +0 -0
  303. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/registry/__init__.py +0 -0
  304. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/registry/deployed_agent_discovery.py +0 -0
  305. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/agents/registry/modification_tracker.py +0 -0
  306. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/async_session_logger.py +0 -0
  307. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/claude_session_logger.py +0 -0
  308. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/command_handler_service.py +0 -0
  309. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/communication/__init__.py +0 -0
  310. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/core/__init__.py +0 -0
  311. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/core/base.py +0 -0
  312. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/core/interfaces/__init__.py +0 -0
  313. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/core/interfaces/agent.py +0 -0
  314. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/core/interfaces/communication.py +0 -0
  315. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/core/interfaces/infrastructure.py +0 -0
  316. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/core/interfaces/service.py +0 -0
  317. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/core/interfaces.py +0 -0
  318. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/event_aggregator.py +0 -0
  319. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/exceptions.py +0 -0
  320. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/__init__.py +0 -0
  321. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/content_assembler.py +0 -0
  322. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/content_validator.py +0 -0
  323. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/deployment_manager.py +0 -0
  324. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -0
  325. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -0
  326. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +0 -0
  327. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +0 -0
  328. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +0 -0
  329. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +0 -0
  330. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +0 -0
  331. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/header.py +0 -0
  332. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +0 -0
  333. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +0 -0
  334. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +0 -0
  335. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +0 -0
  336. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +0 -0
  337. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/section_manager.py +0 -0
  338. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/framework_claude_md_generator/version_manager.py +0 -0
  339. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/hook_service.py +0 -0
  340. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/infrastructure/__init__.py +0 -0
  341. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/infrastructure/context_preservation.py +0 -0
  342. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/infrastructure/daemon_manager.py +0 -0
  343. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/infrastructure/logging.py +0 -0
  344. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/infrastructure/monitoring.py +0 -0
  345. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/__init__.py +0 -0
  346. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/config/__init__.py +0 -0
  347. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/config/config_loader.py +0 -0
  348. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/config/config_schema.py +0 -0
  349. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/config/configuration.py +0 -0
  350. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/core/__init__.py +0 -0
  351. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/core/base.py +0 -0
  352. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/core/exceptions.py +0 -0
  353. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/core/interfaces.py +0 -0
  354. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/main.py +0 -0
  355. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/registry/__init__.py +0 -0
  356. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -0
  357. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -0
  358. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/server/__init__.py +0 -0
  359. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -0
  360. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -0
  361. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -0
  362. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/tools/__init__.py +0 -0
  363. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -0
  364. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -0
  365. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -0
  366. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -0
  367. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -0
  368. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/memory/__init__.py +0 -0
  369. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/memory/builder.py +0 -0
  370. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/memory/cache/__init__.py +0 -0
  371. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/memory/cache/shared_prompt_cache.py +0 -0
  372. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/memory/cache/simple_cache.py +0 -0
  373. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/memory/indexed_memory.py +0 -0
  374. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/memory/optimizer.py +0 -0
  375. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/memory/router.py +0 -0
  376. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/memory_hook_service.py +0 -0
  377. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/port_manager.py +0 -0
  378. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/project/__init__.py +0 -0
  379. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/project/analyzer.py +0 -0
  380. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/project/registry.py +0 -0
  381. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/recovery_manager.py +0 -0
  382. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/response_tracker.py +0 -0
  383. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/runner_configuration_service.py +0 -0
  384. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/session_management_service.py +0 -0
  385. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/__init__.py +0 -0
  386. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/client_proxy.py +0 -0
  387. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/handlers/__init__.py +0 -0
  388. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/handlers/base.py +0 -0
  389. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/handlers/file.py +0 -0
  390. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/handlers/git.py +0 -0
  391. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/handlers/hook.py +0 -0
  392. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/handlers/memory.py +0 -0
  393. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/handlers/project.py +0 -0
  394. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/handlers/registry.py +0 -0
  395. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/server/__init__.py +0 -0
  396. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio/server/core.py +0 -0
  397. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio_client_manager.py +0 -0
  398. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/socketio_server.py +0 -0
  399. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/subprocess_launcher_service.py +0 -0
  400. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/system_instructions_service.py +0 -0
  401. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/ticket_manager.py +0 -0
  402. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/utility_service.py +0 -0
  403. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/version_control/__init__.py +0 -0
  404. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/version_control/branch_strategy.py +0 -0
  405. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/version_control/conflict_resolution.py +0 -0
  406. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/version_control/git_operations.py +0 -0
  407. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/version_control/semantic_versioning.py +0 -0
  408. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/services/version_control/version_parser.py +0 -0
  409. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/storage/__init__.py +0 -0
  410. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/storage/state_storage.py +0 -0
  411. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/ticket_wrapper.py +0 -0
  412. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/__init__.py +0 -0
  413. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/agent_dependency_loader.py +0 -0
  414. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/config_manager.py +0 -0
  415. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/console.py +0 -0
  416. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/dependency_cache.py +0 -0
  417. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/dependency_manager.py +0 -0
  418. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/dependency_strategies.py +0 -0
  419. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/environment_context.py +0 -0
  420. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/error_handler.py +0 -0
  421. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/file_utils.py +0 -0
  422. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/framework_detection.py +0 -0
  423. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/import_migration_example.py +0 -0
  424. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/imports.py +0 -0
  425. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/path_operations.py +0 -0
  426. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/robust_installer.py +0 -0
  427. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/session_logging.py +0 -0
  428. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/utils/subprocess_utils.py +0 -0
  429. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/validation/__init__.py +0 -0
  430. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/validation/agent_validator.py +0 -0
  431. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm/validation/frontmatter_validator.py +0 -0
  432. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm.egg-info/dependency_links.txt +0 -0
  433. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm.egg-info/entry_points.txt +0 -0
  434. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm.egg-info/requires.txt +0 -0
  435. {claude_mpm-4.0.9 → claude_mpm-4.0.12}/src/claude_mpm.egg-info/top_level.txt +0 -0
@@ -0,0 +1 @@
1
+ 288
@@ -11,6 +11,7 @@ include requirements-dev.txt
11
11
  include VERSION
12
12
  include BUILD_NUMBER
13
13
  include src/claude_mpm/VERSION
14
+ include src/claude_mpm/BUILD_NUMBER
14
15
 
15
16
  # Include all agent templates and instructions
16
17
  recursive-include src/claude_mpm/agents *.md *.json
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 4.0.9
3
+ Version: 4.0.12
4
4
  Summary: Claude Multi-agent Project Manager - Clean orchestration with ticket management
5
5
  Home-page: https://github.com/bobmatnyc/claude-mpm
6
6
  Author: Claude MPM Team
@@ -0,0 +1 @@
1
+ 4.0.12
@@ -80,7 +80,7 @@ asyncio_mode = "auto"
80
80
 
81
81
  [tool.commitizen]
82
82
  name = "cz_conventional_commits"
83
- version = "4.0.9"
83
+ version = "4.0.12"
84
84
  version_files = [
85
85
  "VERSION",
86
86
  "package.json:version"
@@ -0,0 +1 @@
1
+ 288
@@ -0,0 +1 @@
1
+ 4.0.11
@@ -721,31 +721,47 @@ Extract tickets from these patterns:
721
721
  Path.home() / ".claude" / "agents", # User's system agents
722
722
  ]
723
723
 
724
- agents_dir = None
725
- for potential_dir in agents_dirs:
724
+ # Collect agents from all directories with proper precedence
725
+ # Project agents override user agents with the same name
726
+ all_agents = {} # key: agent_id, value: (agent_data, priority)
727
+
728
+ for priority, potential_dir in enumerate(agents_dirs):
726
729
  if potential_dir.exists() and any(potential_dir.glob("*.md")):
727
- agents_dir = potential_dir
728
- self.logger.debug(f"Found agents directory at: {agents_dir}")
729
- break
730
-
731
-
732
- if not agents_dir:
733
- self.logger.warning(f"No .claude/agents directory found in any location: {agents_dirs}")
730
+ self.logger.debug(f"Found agents directory at: {potential_dir}")
731
+
732
+ # Collect agents from this directory
733
+ for agent_file in potential_dir.glob("*.md"):
734
+ if agent_file.name.startswith("."):
735
+ continue
736
+
737
+ # Parse agent metadata
738
+ agent_data = self._parse_agent_metadata(agent_file)
739
+ if agent_data:
740
+ agent_id = agent_data["id"]
741
+ # Only add if not already present (project has priority 0, user has priority 1)
742
+ # Lower priority number wins (project > user)
743
+ if agent_id not in all_agents or priority < all_agents[agent_id][1]:
744
+ all_agents[agent_id] = (agent_data, priority)
745
+ self.logger.debug(f"Added/Updated agent {agent_id} from {potential_dir} (priority {priority})")
746
+
747
+ if not all_agents:
748
+ self.logger.warning(f"No agents found in any location: {agents_dirs}")
734
749
  return self._get_fallback_capabilities()
735
-
750
+
751
+ # Log agent collection summary
752
+ project_agents = [aid for aid, (_, pri) in all_agents.items() if pri == 0]
753
+ user_agents = [aid for aid, (_, pri) in all_agents.items() if pri == 1]
754
+
755
+ if project_agents:
756
+ self.logger.info(f"Loaded {len(project_agents)} project agents: {', '.join(sorted(project_agents))}")
757
+ if user_agents:
758
+ self.logger.info(f"Loaded {len(user_agents)} user agents: {', '.join(sorted(user_agents))}")
759
+
736
760
  # Build capabilities section
737
761
  section = "\n\n## Available Agent Capabilities\n\n"
738
762
 
739
- # Collect deployed agents
740
- deployed_agents = []
741
- for agent_file in agents_dir.glob("*.md"):
742
- if agent_file.name.startswith("."):
743
- continue
744
-
745
- # Parse agent metadata
746
- agent_data = self._parse_agent_metadata(agent_file)
747
- if agent_data:
748
- deployed_agents.append(agent_data)
763
+ # Extract just the agent data (drop priority info) and sort
764
+ deployed_agents = [agent_data for agent_data, _ in all_agents.values()]
749
765
 
750
766
  if not deployed_agents:
751
767
  return self._get_fallback_capabilities()
@@ -469,9 +469,9 @@ class InteractiveSession:
469
469
  def _show_available_agents(self) -> bool:
470
470
  """Show available agents in the system."""
471
471
  try:
472
- from claude_mpm.cli import _get_agent_versions_display
472
+ from claude_mpm.cli.utils import get_agent_versions_display
473
473
 
474
- agent_versions = _get_agent_versions_display()
474
+ agent_versions = get_agent_versions_display()
475
475
 
476
476
  if agent_versions:
477
477
  print(agent_versions)
@@ -20,14 +20,33 @@ class SocketClient {
20
20
  // Connection state
21
21
  this.isConnected = false;
22
22
  this.isConnecting = false;
23
+ this.lastConnectTime = null;
24
+ this.disconnectTime = null;
23
25
 
24
26
  // Event processing
25
27
  this.events = [];
26
28
  this.sessions = new Map();
27
29
  this.currentSessionId = null;
28
30
 
31
+ // Event queue for disconnection periods
32
+ this.eventQueue = [];
33
+ this.maxQueueSize = 100;
34
+
35
+ // Retry configuration
36
+ this.retryAttempts = 0;
37
+ this.maxRetryAttempts = 3;
38
+ this.retryDelays = [1000, 2000, 4000]; // Exponential backoff
39
+ this.pendingEmissions = new Map(); // Track pending emissions for retry
40
+
41
+ // Health monitoring
42
+ this.lastPingTime = null;
43
+ this.lastPongTime = null;
44
+ this.pingTimeout = 40000; // 40 seconds (server sends every 30s)
45
+ this.healthCheckInterval = null;
46
+
29
47
  // Start periodic status check as fallback mechanism
30
48
  this.startStatusCheckFallback();
49
+ this.startHealthMonitoring();
31
50
  }
32
51
 
33
52
  /**
@@ -88,8 +107,21 @@ class SocketClient {
88
107
  setupSocketHandlers() {
89
108
  this.socket.on('connect', () => {
90
109
  console.log('Connected to Socket.IO server');
110
+ const previouslyConnected = this.isConnected;
91
111
  this.isConnected = true;
92
112
  this.isConnecting = false;
113
+ this.lastConnectTime = Date.now();
114
+ this.retryAttempts = 0; // Reset retry counter on successful connect
115
+
116
+ // Calculate downtime if this is a reconnection
117
+ if (this.disconnectTime && previouslyConnected === false) {
118
+ const downtime = (Date.now() - this.disconnectTime) / 1000;
119
+ console.log(`Reconnected after ${downtime.toFixed(1)}s downtime`);
120
+
121
+ // Flush queued events after reconnection
122
+ this.flushEventQueue();
123
+ }
124
+
93
125
  this.notifyConnectionStatus('Connected', 'connected');
94
126
 
95
127
  // Emit connect callback
@@ -106,12 +138,25 @@ class SocketClient {
106
138
  console.log('Disconnected from server:', reason);
107
139
  this.isConnected = false;
108
140
  this.isConnecting = false;
141
+ this.disconnectTime = Date.now();
142
+
143
+ // Calculate uptime
144
+ if (this.lastConnectTime) {
145
+ const uptime = (Date.now() - this.lastConnectTime) / 1000;
146
+ console.log(`Connection uptime was ${uptime.toFixed(1)}s`);
147
+ }
148
+
109
149
  this.notifyConnectionStatus(`Disconnected: ${reason}`, 'disconnected');
110
150
 
111
151
  // Emit disconnect callback
112
152
  this.connectionCallbacks.disconnect.forEach(callback =>
113
153
  callback(reason)
114
154
  );
155
+
156
+ // Start auto-reconnect if it was an unexpected disconnect
157
+ if (reason === 'transport close' || reason === 'ping timeout') {
158
+ this.scheduleReconnect();
159
+ }
115
160
  });
116
161
 
117
162
  this.socket.on('connect_error', (error) => {
@@ -124,13 +169,20 @@ class SocketClient {
124
169
  this.addEvent({
125
170
  type: 'connection.error',
126
171
  timestamp: new Date().toISOString(),
127
- data: { error: errorMsg, url: this.socket.io.uri }
172
+ data: {
173
+ error: errorMsg,
174
+ url: this.socket.io.uri,
175
+ retry_attempt: this.retryAttempts
176
+ }
128
177
  });
129
178
 
130
179
  // Emit error callback
131
180
  this.connectionCallbacks.error.forEach(callback =>
132
181
  callback(errorMsg)
133
182
  );
183
+
184
+ // Schedule reconnect with backoff
185
+ this.scheduleReconnect();
134
186
  });
135
187
 
136
188
  // Primary event handler - this is what the server actually emits
@@ -143,6 +195,18 @@ class SocketClient {
143
195
  this.addEvent(transformedEvent);
144
196
  });
145
197
 
198
+ // Add ping/pong handlers for health monitoring
199
+ this.socket.on('ping', (data) => {
200
+ // console.log('Received ping from server');
201
+ this.lastPingTime = Date.now();
202
+
203
+ // Send pong response immediately
204
+ this.socket.emit('pong', {
205
+ timestamp: data.timestamp,
206
+ client_time: Date.now()
207
+ });
208
+ });
209
+
146
210
  // Session and event handlers (legacy/fallback)
147
211
  this.socket.on('session.started', (data) => {
148
212
  this.addEvent({ type: 'session', subtype: 'started', timestamp: new Date().toISOString(), data });
@@ -235,13 +299,144 @@ class SocketClient {
235
299
  this.isConnecting = false;
236
300
  }
237
301
 
302
+ /**
303
+ * Emit an event with retry support
304
+ * @param {string} event - Event name
305
+ * @param {any} data - Event data
306
+ * @param {Object} options - Options for retry behavior
307
+ */
308
+ emitWithRetry(event, data = null, options = {}) {
309
+ const {
310
+ maxRetries = 3,
311
+ retryDelays = [1000, 2000, 4000],
312
+ onSuccess = null,
313
+ onFailure = null
314
+ } = options;
315
+
316
+ const emissionId = `${event}_${Date.now()}_${Math.random()}`;
317
+
318
+ const attemptEmission = (attemptNum = 0) => {
319
+ if (!this.socket || !this.socket.connected) {
320
+ // Queue for later if disconnected
321
+ if (attemptNum === 0) {
322
+ this.queueEvent(event, data);
323
+ console.log(`Queued ${event} for later emission (disconnected)`);
324
+ if (onFailure) onFailure('disconnected');
325
+ }
326
+ return;
327
+ }
328
+
329
+ try {
330
+ // Attempt emission
331
+ this.socket.emit(event, data);
332
+ console.log(`Emitted ${event} successfully`);
333
+
334
+ // Remove from pending
335
+ this.pendingEmissions.delete(emissionId);
336
+
337
+ if (onSuccess) onSuccess();
338
+
339
+ } catch (error) {
340
+ console.error(`Failed to emit ${event} (attempt ${attemptNum + 1}):`, error);
341
+
342
+ if (attemptNum < maxRetries - 1) {
343
+ const delay = retryDelays[attemptNum] || retryDelays[retryDelays.length - 1];
344
+ console.log(`Retrying ${event} in ${delay}ms...`);
345
+
346
+ // Store pending emission
347
+ this.pendingEmissions.set(emissionId, {
348
+ event,
349
+ data,
350
+ attemptNum: attemptNum + 1,
351
+ scheduledTime: Date.now() + delay
352
+ });
353
+
354
+ setTimeout(() => attemptEmission(attemptNum + 1), delay);
355
+ } else {
356
+ console.error(`Failed to emit ${event} after ${maxRetries} attempts`);
357
+ this.pendingEmissions.delete(emissionId);
358
+ if (onFailure) onFailure('max_retries_exceeded');
359
+ }
360
+ }
361
+ };
362
+
363
+ attemptEmission();
364
+ }
365
+
366
+ /**
367
+ * Queue an event for later emission
368
+ * @param {string} event - Event name
369
+ * @param {any} data - Event data
370
+ */
371
+ queueEvent(event, data) {
372
+ if (this.eventQueue.length >= this.maxQueueSize) {
373
+ // Remove oldest event if queue is full
374
+ const removed = this.eventQueue.shift();
375
+ console.warn(`Event queue full, dropped oldest event: ${removed.event}`);
376
+ }
377
+
378
+ this.eventQueue.push({
379
+ event,
380
+ data,
381
+ timestamp: Date.now()
382
+ });
383
+ }
384
+
385
+ /**
386
+ * Flush queued events after reconnection
387
+ */
388
+ flushEventQueue() {
389
+ if (this.eventQueue.length === 0) return;
390
+
391
+ console.log(`Flushing ${this.eventQueue.length} queued events...`);
392
+ const events = [...this.eventQueue];
393
+ this.eventQueue = [];
394
+
395
+ // Emit each queued event with a small delay between them
396
+ events.forEach((item, index) => {
397
+ setTimeout(() => {
398
+ if (this.socket && this.socket.connected) {
399
+ this.socket.emit(item.event, item.data);
400
+ console.log(`Flushed queued event: ${item.event}`);
401
+ }
402
+ }, index * 100); // 100ms between each event
403
+ });
404
+ }
405
+
406
+ /**
407
+ * Schedule a reconnection attempt with exponential backoff
408
+ */
409
+ scheduleReconnect() {
410
+ if (this.retryAttempts >= this.maxRetryAttempts) {
411
+ console.log('Max reconnection attempts reached, stopping auto-reconnect');
412
+ this.notifyConnectionStatus('Reconnection failed', 'disconnected');
413
+ return;
414
+ }
415
+
416
+ const delay = this.retryDelays[this.retryAttempts] || this.retryDelays[this.retryDelays.length - 1];
417
+ this.retryAttempts++;
418
+
419
+ console.log(`Scheduling reconnect attempt ${this.retryAttempts}/${this.maxRetryAttempts} in ${delay}ms...`);
420
+ this.notifyConnectionStatus(`Reconnecting in ${delay/1000}s...`, 'connecting');
421
+
422
+ setTimeout(() => {
423
+ if (!this.isConnected && this.port) {
424
+ console.log(`Attempting reconnection ${this.retryAttempts}/${this.maxRetryAttempts}...`);
425
+ this.connect(this.port);
426
+ }
427
+ }, delay);
428
+ }
429
+
238
430
  /**
239
431
  * Request server status
240
432
  */
241
433
  requestStatus() {
242
434
  if (this.socket && this.socket.connected) {
243
435
  console.log('Requesting server status...');
244
- this.socket.emit('request.status');
436
+ this.emitWithRetry('request.status', null, {
437
+ maxRetries: 2,
438
+ retryDelays: [500, 1000]
439
+ });
245
440
  }
246
441
  }
247
442
 
@@ -258,7 +453,13 @@ class SocketClient {
258
453
  event_types: options.event_types || []
259
454
  };
260
455
  console.log('Requesting event history...', params);
261
- this.socket.emit('get_history', params);
456
+ this.emitWithRetry('get_history', params, {
457
+ maxRetries: 3,
458
+ retryDelays: [1000, 2000, 3000],
459
+ onFailure: (reason) => {
460
+ console.error(`Failed to request history: ${reason}`);
461
+ }
462
+ });
262
463
  } else {
263
464
  console.warn('Cannot request history: not connected to server');
264
465
  }
@@ -554,6 +755,43 @@ class SocketClient {
554
755
  };
555
756
  }
556
757
 
758
+ /**
759
+ * Start health monitoring
760
+ * Detects stale connections and triggers reconnection
761
+ */
762
+ startHealthMonitoring() {
763
+ this.healthCheckInterval = setInterval(() => {
764
+ if (this.isConnected && this.lastPingTime) {
765
+ const timeSinceLastPing = Date.now() - this.lastPingTime;
766
+
767
+ if (timeSinceLastPing > this.pingTimeout) {
768
+ console.warn(`No ping from server for ${timeSinceLastPing/1000}s, connection may be stale`);
769
+
770
+ // Force reconnection
771
+ if (this.socket) {
772
+ console.log('Forcing reconnection due to stale connection...');
773
+ this.socket.disconnect();
774
+ setTimeout(() => {
775
+ if (this.port) {
776
+ this.connect(this.port);
777
+ }
778
+ }, 1000);
779
+ }
780
+ }
781
+ }
782
+ }, 10000); // Check every 10 seconds
783
+ }
784
+
785
+ /**
786
+ * Stop health monitoring
787
+ */
788
+ stopHealthMonitoring() {
789
+ if (this.healthCheckInterval) {
790
+ clearInterval(this.healthCheckInterval);
791
+ this.healthCheckInterval = null;
792
+ }
793
+ }
794
+
557
795
  /**
558
796
  * Start periodic status check as fallback mechanism
559
797
  * This ensures the UI stays in sync with actual socket state
@@ -615,6 +853,35 @@ class SocketClient {
615
853
  }
616
854
  }
617
855
 
856
+ /**
857
+ * Clean up resources
858
+ */
859
+ destroy() {
860
+ this.stopHealthMonitoring();
861
+ if (this.socket) {
862
+ this.socket.disconnect();
863
+ this.socket = null;
864
+ }
865
+ this.eventQueue = [];
866
+ this.pendingEmissions.clear();
867
+ }
868
+
869
+ /**
870
+ * Get connection metrics
871
+ * @returns {Object} Connection metrics
872
+ */
873
+ getConnectionMetrics() {
874
+ return {
875
+ isConnected: this.isConnected,
876
+ uptime: this.lastConnectTime ? (Date.now() - this.lastConnectTime) / 1000 : 0,
877
+ lastPing: this.lastPingTime ? (Date.now() - this.lastPingTime) / 1000 : null,
878
+ queuedEvents: this.eventQueue.length,
879
+ pendingEmissions: this.pendingEmissions.size,
880
+ retryAttempts: this.retryAttempts
881
+ };
882
+ }
883
+ }
884
+
618
885
  // ES6 Module export
619
886
  export { SocketClient };
620
887
  export default SocketClient;
@@ -903,7 +903,9 @@ def main():
903
903
  )
904
904
  # Always output continue action to not block Claude
905
905
  print(json.dumps({"action": "continue"}))
906
- sys.exit(0)
906
+ # Only exit if this is a signal handler call, not atexit
907
+ if signum is not None:
908
+ sys.exit(0)
907
909
 
908
910
  # Register cleanup handlers
909
911
  signal.signal(signal.SIGTERM, cleanup_handler)
@@ -45,12 +45,12 @@ export CLAUDE_MPM_HOOK_DEBUG="true"
45
45
 
46
46
  # Debug log (optional)
47
47
  echo "[$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)] PYTHONPATH: $PYTHONPATH" >> /tmp/hook-wrapper.log
48
- echo "[$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)] Running: $PYTHON_CMD $SCRIPT_DIR/hook_handler.py" >> /tmp/hook-wrapper.log
48
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)] Running: $PYTHON_CMD -m claude_mpm.hooks.claude_hooks.hook_handler" >> /tmp/hook-wrapper.log
49
49
  echo "[$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)] SOCKETIO_PORT: $CLAUDE_MPM_SOCKETIO_PORT" >> /tmp/hook-wrapper.log
50
50
 
51
- # Run the Python hook handler with error handling
51
+ # Run the Python hook handler as a module with error handling
52
52
  # Use exec to replace the shell process, but wrap in error handling
53
- if ! "$PYTHON_CMD" "$SCRIPT_DIR/hook_handler.py" "$@" 2>/tmp/hook-error.log; then
53
+ if ! "$PYTHON_CMD" -m claude_mpm.hooks.claude_hooks.hook_handler "$@" 2>/tmp/hook-error.log; then
54
54
  # If the Python handler fails, always return continue to not block Claude
55
55
  echo '{"action": "continue"}'
56
56
  # Log the error for debugging
@@ -82,7 +82,7 @@ class AgentMemoryManager(MemoryServiceInterface):
82
82
  self._logger_name = None
83
83
 
84
84
  self.config = config or Config()
85
- self.project_root = get_path_manager().get_project_root()
85
+ self.project_root = get_path_manager().project_root
86
86
  # Use current working directory by default, not project root
87
87
  self.working_directory = working_directory or Path(os.getcwd())
88
88
  self.memories_dir = self.working_directory / ".claude-mpm" / "memories"