@mxf-dev/core 2.0.4 → 3.0.0

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 (466) hide show
  1. package/dist/config/ModelContextLimits.d.ts.map +1 -1
  2. package/dist/config/ModelContextLimits.js +7 -1
  3. package/dist/config/ModelContextLimits.js.map +1 -1
  4. package/dist/constants/CoreTools.d.ts +6 -5
  5. package/dist/constants/CoreTools.d.ts.map +1 -1
  6. package/dist/constants/CoreTools.js +6 -5
  7. package/dist/constants/CoreTools.js.map +1 -1
  8. package/dist/constants/DefaultPhaseProfiles.d.ts.map +1 -1
  9. package/dist/constants/DefaultPhaseProfiles.js +29 -0
  10. package/dist/constants/DefaultPhaseProfiles.js.map +1 -1
  11. package/dist/constants/ReservedIdentities.d.ts +14 -0
  12. package/dist/constants/ReservedIdentities.d.ts.map +1 -0
  13. package/dist/constants/ReservedIdentities.js +42 -0
  14. package/dist/constants/ReservedIdentities.js.map +1 -0
  15. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.d.ts +16 -16
  16. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.d.ts.map +1 -1
  17. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.js +98 -36
  18. package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.js.map +1 -1
  19. package/dist/events/ClientEventBus.d.ts +28 -0
  20. package/dist/events/ClientEventBus.d.ts.map +1 -1
  21. package/dist/events/ClientEventBus.js +87 -40
  22. package/dist/events/ClientEventBus.js.map +1 -1
  23. package/dist/events/EventBus.d.ts +19 -1
  24. package/dist/events/EventBus.d.ts.map +1 -1
  25. package/dist/events/EventBus.js +23 -0
  26. package/dist/events/EventBus.js.map +1 -1
  27. package/dist/events/EventBusBase.d.ts +37 -6
  28. package/dist/events/EventBusBase.d.ts.map +1 -1
  29. package/dist/events/EventBusBase.js +75 -27
  30. package/dist/events/EventBusBase.js.map +1 -1
  31. package/dist/events/EventNames.d.ts +49 -36
  32. package/dist/events/EventNames.d.ts.map +1 -1
  33. package/dist/events/EventNames.js +38 -36
  34. package/dist/events/EventNames.js.map +1 -1
  35. package/dist/events/PublicEvents.d.ts +5 -1
  36. package/dist/events/PublicEvents.d.ts.map +1 -1
  37. package/dist/events/PublicEvents.js +7 -0
  38. package/dist/events/PublicEvents.js.map +1 -1
  39. package/dist/events/ServerEventBus.d.ts +7 -54
  40. package/dist/events/ServerEventBus.d.ts.map +1 -1
  41. package/dist/events/ServerEventBus.js +10 -96
  42. package/dist/events/ServerEventBus.js.map +1 -1
  43. package/dist/events/event-definitions/ControlLoopEvents.d.ts +35 -0
  44. package/dist/events/event-definitions/ControlLoopEvents.d.ts.map +1 -1
  45. package/dist/events/event-definitions/ControlLoopEvents.js +6 -0
  46. package/dist/events/event-definitions/ControlLoopEvents.js.map +1 -1
  47. package/dist/events/event-definitions/SdkEvents.d.ts +55 -0
  48. package/dist/events/event-definitions/SdkEvents.d.ts.map +1 -0
  49. package/dist/events/event-definitions/SdkEvents.js +36 -0
  50. package/dist/events/event-definitions/SdkEvents.js.map +1 -0
  51. package/dist/events/event-definitions/TaskEvents.d.ts +2 -7
  52. package/dist/events/event-definitions/TaskEvents.d.ts.map +1 -1
  53. package/dist/index.d.ts +4 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +2 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/interfaces/AgentInterfaces.d.ts +5 -0
  58. package/dist/interfaces/AgentInterfaces.d.ts.map +1 -1
  59. package/dist/interfaces/ChannelConfig.d.ts +2 -2
  60. package/dist/interfaces/ChannelConfig.d.ts.map +1 -1
  61. package/dist/interfaces/ConversationMessage.d.ts +1 -1
  62. package/dist/interfaces/ConversationMessage.d.ts.map +1 -1
  63. package/dist/interfaces/IMemoryPersistence.d.ts +47 -1
  64. package/dist/interfaces/IMemoryPersistence.d.ts.map +1 -1
  65. package/dist/interfaces/SocketServiceInterface.d.ts +3 -2
  66. package/dist/interfaces/SocketServiceInterface.d.ts.map +1 -1
  67. package/dist/interfaces/TaskInterfaces.d.ts +14 -1
  68. package/dist/interfaces/TaskInterfaces.d.ts.map +1 -1
  69. package/dist/models/agent.d.ts +0 -1
  70. package/dist/models/agent.d.ts.map +1 -1
  71. package/dist/models/agent.js +0 -5
  72. package/dist/models/agent.js.map +1 -1
  73. package/dist/models/agentIdentityReservation.d.ts +42 -0
  74. package/dist/models/agentIdentityReservation.d.ts.map +1 -0
  75. package/dist/models/agentIdentityReservation.js +52 -0
  76. package/dist/models/agentIdentityReservation.js.map +1 -0
  77. package/dist/models/channel.d.ts +2 -0
  78. package/dist/models/channel.d.ts.map +1 -1
  79. package/dist/models/channel.js.map +1 -1
  80. package/dist/models/channelKey.d.ts +1 -0
  81. package/dist/models/channelKey.d.ts.map +1 -1
  82. package/dist/models/channelKey.js +5 -0
  83. package/dist/models/channelKey.js.map +1 -1
  84. package/dist/models/memory.d.ts +1 -1
  85. package/dist/models/memory.d.ts.map +1 -1
  86. package/dist/models/memory.js +9 -12
  87. package/dist/models/memory.js.map +1 -1
  88. package/dist/models/memoryStrata.d.ts +3 -16
  89. package/dist/models/memoryStrata.d.ts.map +1 -1
  90. package/dist/models/memoryStrata.js +3 -5
  91. package/dist/models/memoryStrata.js.map +1 -1
  92. package/dist/models/plan.d.ts +2 -2
  93. package/dist/models/plan.d.ts.map +1 -1
  94. package/dist/models/plan.js +1 -1
  95. package/dist/models/plan.js.map +1 -1
  96. package/dist/models/taskEffectiveness.d.ts +1 -0
  97. package/dist/models/taskEffectiveness.d.ts.map +1 -1
  98. package/dist/models/taskEffectiveness.js +7 -1
  99. package/dist/models/taskEffectiveness.js.map +1 -1
  100. package/dist/models/user.d.ts +4 -0
  101. package/dist/models/user.d.ts.map +1 -1
  102. package/dist/models/user.js +8 -0
  103. package/dist/models/user.js.map +1 -1
  104. package/dist/protocols/mcp/LlmTestEnvironmentGuard.d.ts +16 -0
  105. package/dist/protocols/mcp/LlmTestEnvironmentGuard.d.ts.map +1 -0
  106. package/dist/protocols/mcp/LlmTestEnvironmentGuard.js +25 -0
  107. package/dist/protocols/mcp/LlmTestEnvironmentGuard.js.map +1 -0
  108. package/dist/protocols/mcp/McpServerTypes.d.ts +9 -0
  109. package/dist/protocols/mcp/McpServerTypes.d.ts.map +1 -1
  110. package/dist/protocols/mcp/providers/AnthropicMcpClient.d.ts.map +1 -1
  111. package/dist/protocols/mcp/providers/AnthropicMcpClient.js +1 -0
  112. package/dist/protocols/mcp/providers/AnthropicMcpClient.js.map +1 -1
  113. package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.d.ts.map +1 -1
  114. package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.js +1 -0
  115. package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.js.map +1 -1
  116. package/dist/protocols/mcp/providers/BaseMcpClient.d.ts +4 -0
  117. package/dist/protocols/mcp/providers/BaseMcpClient.d.ts.map +1 -1
  118. package/dist/protocols/mcp/providers/BaseMcpClient.js +10 -0
  119. package/dist/protocols/mcp/providers/BaseMcpClient.js.map +1 -1
  120. package/dist/protocols/mcp/providers/CustomMcpClient.d.ts.map +1 -1
  121. package/dist/protocols/mcp/providers/CustomMcpClient.js +7 -0
  122. package/dist/protocols/mcp/providers/CustomMcpClient.js.map +1 -1
  123. package/dist/protocols/mcp/providers/GeminiMcpClient.d.ts.map +1 -1
  124. package/dist/protocols/mcp/providers/GeminiMcpClient.js +1 -0
  125. package/dist/protocols/mcp/providers/GeminiMcpClient.js.map +1 -1
  126. package/dist/protocols/mcp/providers/OllamaMcpClient.d.ts +1 -0
  127. package/dist/protocols/mcp/providers/OllamaMcpClient.d.ts.map +1 -1
  128. package/dist/protocols/mcp/providers/OllamaMcpClient.js +1 -0
  129. package/dist/protocols/mcp/providers/OllamaMcpClient.js.map +1 -1
  130. package/dist/protocols/mcp/providers/OpenAiMcpClient.d.ts.map +1 -1
  131. package/dist/protocols/mcp/providers/OpenAiMcpClient.js +1 -0
  132. package/dist/protocols/mcp/providers/OpenAiMcpClient.js.map +1 -1
  133. package/dist/protocols/mcp/providers/OpenRouterMcpClient.d.ts.map +1 -1
  134. package/dist/protocols/mcp/providers/OpenRouterMcpClient.js +2 -0
  135. package/dist/protocols/mcp/providers/OpenRouterMcpClient.js.map +1 -1
  136. package/dist/protocols/mcp/providers/XaiMcpClient.d.ts.map +1 -1
  137. package/dist/protocols/mcp/providers/XaiMcpClient.js +1 -0
  138. package/dist/protocols/mcp/providers/XaiMcpClient.js.map +1 -1
  139. package/dist/protocols/mcp/security/BrowserTargetGuard.d.ts +14 -0
  140. package/dist/protocols/mcp/security/BrowserTargetGuard.d.ts.map +1 -0
  141. package/dist/protocols/mcp/security/BrowserTargetGuard.js +55 -0
  142. package/dist/protocols/mcp/security/BrowserTargetGuard.js.map +1 -0
  143. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.d.ts +24 -0
  144. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.d.ts.map +1 -0
  145. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.js +33 -0
  146. package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.js.map +1 -0
  147. package/dist/protocols/mcp/security/HttpTargetGuard.d.ts.map +1 -1
  148. package/dist/protocols/mcp/security/HttpTargetGuard.js +68 -6
  149. package/dist/protocols/mcp/security/HttpTargetGuard.js.map +1 -1
  150. package/dist/protocols/mcp/security/McpSecurityGuard.d.ts.map +1 -1
  151. package/dist/protocols/mcp/security/McpSecurityGuard.js +7 -5
  152. package/dist/protocols/mcp/security/McpSecurityGuard.js.map +1 -1
  153. package/dist/protocols/mcp/security/McpToolPolicy.d.ts +18 -0
  154. package/dist/protocols/mcp/security/McpToolPolicy.d.ts.map +1 -1
  155. package/dist/protocols/mcp/security/McpToolPolicy.js +60 -0
  156. package/dist/protocols/mcp/security/McpToolPolicy.js.map +1 -1
  157. package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts +118 -5
  158. package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts.map +1 -1
  159. package/dist/protocols/mcp/services/ExternalMcpServerManager.js +499 -98
  160. package/dist/protocols/mcp/services/ExternalMcpServerManager.js.map +1 -1
  161. package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts +2 -2
  162. package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts.map +1 -1
  163. package/dist/protocols/mcp/services/ExternalServerConfigs.js +25 -8
  164. package/dist/protocols/mcp/services/ExternalServerConfigs.js.map +1 -1
  165. package/dist/protocols/mcp/tools/AnalyticsTools.d.ts +3 -37
  166. package/dist/protocols/mcp/tools/AnalyticsTools.d.ts.map +1 -1
  167. package/dist/protocols/mcp/tools/AnalyticsTools.js +134 -614
  168. package/dist/protocols/mcp/tools/AnalyticsTools.js.map +1 -1
  169. package/dist/protocols/mcp/tools/CodeAnalysisTools.d.ts.map +1 -1
  170. package/dist/protocols/mcp/tools/CodeAnalysisTools.js +16 -13
  171. package/dist/protocols/mcp/tools/CodeAnalysisTools.js.map +1 -1
  172. package/dist/protocols/mcp/tools/EffectivenessTools.d.ts.map +1 -1
  173. package/dist/protocols/mcp/tools/EffectivenessTools.js +94 -30
  174. package/dist/protocols/mcp/tools/EffectivenessTools.js.map +1 -1
  175. package/dist/protocols/mcp/tools/GitTools.d.ts.map +1 -1
  176. package/dist/protocols/mcp/tools/GitTools.js +9 -5
  177. package/dist/protocols/mcp/tools/GitTools.js.map +1 -1
  178. package/dist/protocols/mcp/tools/InfrastructureTools.d.ts +10 -40
  179. package/dist/protocols/mcp/tools/InfrastructureTools.d.ts.map +1 -1
  180. package/dist/protocols/mcp/tools/InfrastructureTools.js +29 -70
  181. package/dist/protocols/mcp/tools/InfrastructureTools.js.map +1 -1
  182. package/dist/protocols/mcp/tools/JsonTools.d.ts.map +1 -1
  183. package/dist/protocols/mcp/tools/JsonTools.js +4 -4
  184. package/dist/protocols/mcp/tools/JsonTools.js.map +1 -1
  185. package/dist/protocols/mcp/tools/KnowledgeGraphTools.d.ts +55 -592
  186. package/dist/protocols/mcp/tools/KnowledgeGraphTools.d.ts.map +1 -1
  187. package/dist/protocols/mcp/tools/KnowledgeGraphTools.js +169 -119
  188. package/dist/protocols/mcp/tools/KnowledgeGraphTools.js.map +1 -1
  189. package/dist/protocols/mcp/tools/MemorySearchTools.d.ts +6 -6
  190. package/dist/protocols/mcp/tools/MemorySearchTools.d.ts.map +1 -1
  191. package/dist/protocols/mcp/tools/MemorySearchTools.js +107 -39
  192. package/dist/protocols/mcp/tools/MemorySearchTools.js.map +1 -1
  193. package/dist/protocols/mcp/tools/MemoryUtilityTools.d.ts +4 -5
  194. package/dist/protocols/mcp/tools/MemoryUtilityTools.d.ts.map +1 -1
  195. package/dist/protocols/mcp/tools/MemoryUtilityTools.js +59 -208
  196. package/dist/protocols/mcp/tools/MemoryUtilityTools.js.map +1 -1
  197. package/dist/protocols/mcp/tools/PlanningTools.d.ts +2 -1
  198. package/dist/protocols/mcp/tools/PlanningTools.d.ts.map +1 -1
  199. package/dist/protocols/mcp/tools/PlanningTools.js +111 -49
  200. package/dist/protocols/mcp/tools/PlanningTools.js.map +1 -1
  201. package/dist/protocols/mcp/tools/ProjectContextTools.d.ts.map +1 -1
  202. package/dist/protocols/mcp/tools/ProjectContextTools.js +18 -12
  203. package/dist/protocols/mcp/tools/ProjectContextTools.js.map +1 -1
  204. package/dist/protocols/mcp/tools/SafetyTools.d.ts.map +1 -1
  205. package/dist/protocols/mcp/tools/SafetyTools.js +16 -13
  206. package/dist/protocols/mcp/tools/SafetyTools.js.map +1 -1
  207. package/dist/protocols/mcp/tools/SearchProjectTools.d.ts +24 -7
  208. package/dist/protocols/mcp/tools/SearchProjectTools.d.ts.map +1 -1
  209. package/dist/protocols/mcp/tools/SearchProjectTools.js +226 -126
  210. package/dist/protocols/mcp/tools/SearchProjectTools.js.map +1 -1
  211. package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts +0 -32
  212. package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts.map +1 -1
  213. package/dist/protocols/mcp/tools/TaskPlanningTools.js +363 -450
  214. package/dist/protocols/mcp/tools/TaskPlanningTools.js.map +1 -1
  215. package/dist/protocols/mcp/tools/TestTools.d.ts.map +1 -1
  216. package/dist/protocols/mcp/tools/TestTools.js +18 -11
  217. package/dist/protocols/mcp/tools/TestTools.js.map +1 -1
  218. package/dist/protocols/mcp/tools/TypeScriptTools.d.ts.map +1 -1
  219. package/dist/protocols/mcp/tools/TypeScriptTools.js +22 -12
  220. package/dist/protocols/mcp/tools/TypeScriptTools.js.map +1 -1
  221. package/dist/protocols/mcp/tools/UserInputTools.d.ts.map +1 -1
  222. package/dist/protocols/mcp/tools/UserInputTools.js +14 -1
  223. package/dist/protocols/mcp/tools/UserInputTools.js.map +1 -1
  224. package/dist/protocols/mcp/tools/UserMemoryTools.d.ts +3 -1
  225. package/dist/protocols/mcp/tools/UserMemoryTools.d.ts.map +1 -1
  226. package/dist/protocols/mcp/tools/UserMemoryTools.js +27 -62
  227. package/dist/protocols/mcp/tools/UserMemoryTools.js.map +1 -1
  228. package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.d.ts.map +1 -1
  229. package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js +14 -60
  230. package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js.map +1 -1
  231. package/dist/protocols/mcp/tools/shell/ShellSandbox.d.ts.map +1 -1
  232. package/dist/protocols/mcp/tools/shell/ShellSandbox.js +9 -27
  233. package/dist/protocols/mcp/tools/shell/ShellSandbox.js.map +1 -1
  234. package/dist/repositories/interfaces/IKnowledgeGraphRepository.d.ts +40 -30
  235. package/dist/repositories/interfaces/IKnowledgeGraphRepository.d.ts.map +1 -1
  236. package/dist/schemas/EventPayloadSchema.d.ts +28 -0
  237. package/dist/schemas/EventPayloadSchema.d.ts.map +1 -1
  238. package/dist/schemas/EventPayloadSchema.js +30 -1
  239. package/dist/schemas/EventPayloadSchema.js.map +1 -1
  240. package/dist/schemas/MxpProtocolSchemas.d.ts +6 -6
  241. package/dist/services/AgentPerformanceService.d.ts +11 -0
  242. package/dist/services/AgentPerformanceService.d.ts.map +1 -1
  243. package/dist/services/AgentPerformanceService.js +59 -33
  244. package/dist/services/AgentPerformanceService.js.map +1 -1
  245. package/dist/services/AutoCorrectionService.d.ts +3 -0
  246. package/dist/services/AutoCorrectionService.d.ts.map +1 -1
  247. package/dist/services/AutoCorrectionService.js +19 -2
  248. package/dist/services/AutoCorrectionService.js.map +1 -1
  249. package/dist/services/BackgroundTaskManager.d.ts +23 -7
  250. package/dist/services/BackgroundTaskManager.d.ts.map +1 -1
  251. package/dist/services/BackgroundTaskManager.js +137 -57
  252. package/dist/services/BackgroundTaskManager.js.map +1 -1
  253. package/dist/services/BrowserManager.d.ts +2 -0
  254. package/dist/services/BrowserManager.d.ts.map +1 -1
  255. package/dist/services/BrowserManager.js +18 -15
  256. package/dist/services/BrowserManager.js.map +1 -1
  257. package/dist/services/ChannelContextMemoryOperations.d.ts +8 -1
  258. package/dist/services/ChannelContextMemoryOperations.d.ts.map +1 -1
  259. package/dist/services/ChannelContextMemoryOperations.js +89 -165
  260. package/dist/services/ChannelContextMemoryOperations.js.map +1 -1
  261. package/dist/services/ChannelContextMessageOperations.d.ts +4 -3
  262. package/dist/services/ChannelContextMessageOperations.d.ts.map +1 -1
  263. package/dist/services/ChannelContextMessageOperations.js +72 -212
  264. package/dist/services/ChannelContextMessageOperations.js.map +1 -1
  265. package/dist/services/MemoryService.d.ts +52 -21
  266. package/dist/services/MemoryService.d.ts.map +1 -1
  267. package/dist/services/MemoryService.js +775 -548
  268. package/dist/services/MemoryService.js.map +1 -1
  269. package/dist/services/PatternLearningService.d.ts +5 -0
  270. package/dist/services/PatternLearningService.d.ts.map +1 -1
  271. package/dist/services/PatternLearningService.js +26 -3
  272. package/dist/services/PatternLearningService.js.map +1 -1
  273. package/dist/services/PerformanceOptimizationService.d.ts +2 -1
  274. package/dist/services/PerformanceOptimizationService.d.ts.map +1 -1
  275. package/dist/services/PerformanceOptimizationService.js +21 -6
  276. package/dist/services/PerformanceOptimizationService.js.map +1 -1
  277. package/dist/services/PredictiveAnalyticsService.d.ts +1 -0
  278. package/dist/services/PredictiveAnalyticsService.d.ts.map +1 -1
  279. package/dist/services/PredictiveAnalyticsService.js +18 -6
  280. package/dist/services/PredictiveAnalyticsService.js.map +1 -1
  281. package/dist/services/ProactiveValidationService.d.ts +6 -0
  282. package/dist/services/ProactiveValidationService.d.ts.map +1 -1
  283. package/dist/services/ProactiveValidationService.js +58 -39
  284. package/dist/services/ProactiveValidationService.js.map +1 -1
  285. package/dist/services/TaskEffectivenessService.d.ts +55 -31
  286. package/dist/services/TaskEffectivenessService.d.ts.map +1 -1
  287. package/dist/services/TaskEffectivenessService.js +243 -125
  288. package/dist/services/TaskEffectivenessService.js.map +1 -1
  289. package/dist/services/ToolExecutionInterceptor.d.ts +4 -0
  290. package/dist/services/ToolExecutionInterceptor.d.ts.map +1 -1
  291. package/dist/services/ToolExecutionInterceptor.js +31 -5
  292. package/dist/services/ToolExecutionInterceptor.js.map +1 -1
  293. package/dist/services/UserInputRequestManager.d.ts +13 -3
  294. package/dist/services/UserInputRequestManager.d.ts.map +1 -1
  295. package/dist/services/UserInputRequestManager.js +42 -6
  296. package/dist/services/UserInputRequestManager.js.map +1 -1
  297. package/dist/services/UserMemoryService.d.ts +2 -0
  298. package/dist/services/UserMemoryService.d.ts.map +1 -1
  299. package/dist/services/UserMemoryService.js +9 -4
  300. package/dist/services/UserMemoryService.js.map +1 -1
  301. package/dist/services/ValidationAnalyticsService.d.ts +4 -0
  302. package/dist/services/ValidationAnalyticsService.d.ts.map +1 -1
  303. package/dist/services/ValidationAnalyticsService.js +30 -8
  304. package/dist/services/ValidationAnalyticsService.js.map +1 -1
  305. package/dist/services/ValidationCacheService.d.ts +3 -1
  306. package/dist/services/ValidationCacheService.d.ts.map +1 -1
  307. package/dist/services/ValidationCacheService.js +25 -4
  308. package/dist/services/ValidationCacheService.js.map +1 -1
  309. package/dist/services/ValidationMiddleware.d.ts +7 -0
  310. package/dist/services/ValidationMiddleware.d.ts.map +1 -1
  311. package/dist/services/ValidationMiddleware.js +53 -10
  312. package/dist/services/ValidationMiddleware.js.map +1 -1
  313. package/dist/services/ValidationPerformanceService.d.ts +3 -0
  314. package/dist/services/ValidationPerformanceService.d.ts.map +1 -1
  315. package/dist/services/ValidationPerformanceService.js +28 -11
  316. package/dist/services/ValidationPerformanceService.js.map +1 -1
  317. package/dist/services/WebSearchService.d.ts.map +1 -1
  318. package/dist/services/WebSearchService.js +9 -0
  319. package/dist/services/WebSearchService.js.map +1 -1
  320. package/dist/services/dag/TaskDagService.d.ts +3 -0
  321. package/dist/services/dag/TaskDagService.d.ts.map +1 -1
  322. package/dist/services/dag/TaskDagService.js +18 -0
  323. package/dist/services/dag/TaskDagService.js.map +1 -1
  324. package/dist/services/kg/EntityQValueManager.d.ts +3 -1
  325. package/dist/services/kg/EntityQValueManager.d.ts.map +1 -1
  326. package/dist/services/kg/EntityQValueManager.js +10 -10
  327. package/dist/services/kg/EntityQValueManager.js.map +1 -1
  328. package/dist/services/kg/GraphSurpriseCalculator.d.ts +0 -4
  329. package/dist/services/kg/GraphSurpriseCalculator.d.ts.map +1 -1
  330. package/dist/services/kg/GraphSurpriseCalculator.js +0 -9
  331. package/dist/services/kg/GraphSurpriseCalculator.js.map +1 -1
  332. package/dist/services/kg/KnowledgeGraphService.d.ts +12 -12
  333. package/dist/services/kg/KnowledgeGraphService.d.ts.map +1 -1
  334. package/dist/services/kg/KnowledgeGraphService.js +43 -51
  335. package/dist/services/kg/KnowledgeGraphService.js.map +1 -1
  336. package/dist/services/kg/OrparGraphIntegration.d.ts.map +1 -1
  337. package/dist/services/kg/OrparGraphIntegration.js +6 -5
  338. package/dist/services/kg/OrparGraphIntegration.js.map +1 -1
  339. package/dist/services/orpar-memory/CycleConsolidationTrigger.d.ts +1 -0
  340. package/dist/services/orpar-memory/CycleConsolidationTrigger.d.ts.map +1 -1
  341. package/dist/services/orpar-memory/CycleConsolidationTrigger.js +8 -1
  342. package/dist/services/orpar-memory/CycleConsolidationTrigger.js.map +1 -1
  343. package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts +8 -1
  344. package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts.map +1 -1
  345. package/dist/services/orpar-memory/OrparMemoryCoordinator.js +93 -45
  346. package/dist/services/orpar-memory/OrparMemoryCoordinator.js.map +1 -1
  347. package/dist/services/orpar-memory/SurpriseOrparAdapter.d.ts +1 -0
  348. package/dist/services/orpar-memory/SurpriseOrparAdapter.d.ts.map +1 -1
  349. package/dist/services/orpar-memory/SurpriseOrparAdapter.js +8 -1
  350. package/dist/services/orpar-memory/SurpriseOrparAdapter.js.map +1 -1
  351. package/dist/types/ChannelContext.d.ts +2 -1
  352. package/dist/types/ChannelContext.d.ts.map +1 -1
  353. package/dist/types/EffectivenessTypes.d.ts +4 -1
  354. package/dist/types/EffectivenessTypes.d.ts.map +1 -1
  355. package/dist/types/TaskCompletionTypes.d.ts +7 -5
  356. package/dist/types/TaskCompletionTypes.d.ts.map +1 -1
  357. package/dist/types/TaskTypes.d.ts +8 -1
  358. package/dist/types/TaskTypes.d.ts.map +1 -1
  359. package/dist/utils/GlobMatcher.d.ts +37 -0
  360. package/dist/utils/GlobMatcher.d.ts.map +1 -0
  361. package/dist/utils/GlobMatcher.js +131 -0
  362. package/dist/utils/GlobMatcher.js.map +1 -0
  363. package/package.json +1 -1
  364. package/src/config/ModelContextLimits.ts +7 -1
  365. package/src/constants/CoreTools.ts +6 -5
  366. package/src/constants/DefaultPhaseProfiles.ts +29 -0
  367. package/src/constants/ReservedIdentities.ts +51 -0
  368. package/src/database/adapters/mongodb/MongoKnowledgeGraphRepository.ts +115 -36
  369. package/src/events/ClientEventBus.ts +117 -48
  370. package/src/events/EventBus.ts +32 -2
  371. package/src/events/EventBusBase.ts +132 -39
  372. package/src/events/EventNames.ts +43 -36
  373. package/src/events/PublicEvents.ts +8 -0
  374. package/src/events/ServerEventBus.ts +9 -128
  375. package/src/events/event-definitions/ControlLoopEvents.ts +12 -0
  376. package/src/events/event-definitions/SdkEvents.ts +58 -0
  377. package/src/events/event-definitions/TaskEvents.ts +2 -2
  378. package/src/index.ts +15 -0
  379. package/src/interfaces/AgentInterfaces.ts +5 -0
  380. package/src/interfaces/ChannelConfig.ts +2 -2
  381. package/src/interfaces/ConversationMessage.ts +5 -0
  382. package/src/interfaces/IMemoryPersistence.ts +55 -1
  383. package/src/interfaces/SocketServiceInterface.ts +3 -2
  384. package/src/interfaces/TaskInterfaces.ts +16 -1
  385. package/src/models/agent.ts +0 -6
  386. package/src/models/agentIdentityReservation.ts +77 -0
  387. package/src/models/channel.ts +2 -0
  388. package/src/models/channelKey.ts +10 -0
  389. package/src/models/memory.ts +18 -19
  390. package/src/models/memoryStrata.ts +9 -23
  391. package/src/models/plan.ts +3 -3
  392. package/src/models/taskEffectiveness.ts +9 -2
  393. package/src/models/user.ts +12 -0
  394. package/src/protocols/mcp/LlmTestEnvironmentGuard.ts +30 -0
  395. package/src/protocols/mcp/McpServerTypes.ts +9 -0
  396. package/src/protocols/mcp/providers/AnthropicMcpClient.ts +2 -0
  397. package/src/protocols/mcp/providers/AzureOpenAiMcpClient.ts +1 -0
  398. package/src/protocols/mcp/providers/BaseMcpClient.ts +13 -0
  399. package/src/protocols/mcp/providers/CustomMcpClient.ts +7 -0
  400. package/src/protocols/mcp/providers/GeminiMcpClient.ts +2 -0
  401. package/src/protocols/mcp/providers/OllamaMcpClient.ts +3 -1
  402. package/src/protocols/mcp/providers/OpenAiMcpClient.ts +2 -0
  403. package/src/protocols/mcp/providers/OpenRouterMcpClient.ts +3 -0
  404. package/src/protocols/mcp/providers/XaiMcpClient.ts +2 -0
  405. package/src/protocols/mcp/security/BrowserTargetGuard.ts +64 -0
  406. package/src/protocols/mcp/security/ExternalMcpRegistrationPolicy.ts +38 -0
  407. package/src/protocols/mcp/security/HttpTargetGuard.ts +77 -6
  408. package/src/protocols/mcp/security/McpSecurityGuard.ts +7 -5
  409. package/src/protocols/mcp/security/McpToolPolicy.ts +74 -0
  410. package/src/protocols/mcp/services/ExternalMcpServerManager.ts +656 -111
  411. package/src/protocols/mcp/services/ExternalServerConfigs.ts +26 -8
  412. package/src/protocols/mcp/tools/AnalyticsTools.ts +167 -641
  413. package/src/protocols/mcp/tools/CodeAnalysisTools.ts +44 -14
  414. package/src/protocols/mcp/tools/EffectivenessTools.ts +185 -45
  415. package/src/protocols/mcp/tools/GitTools.ts +15 -5
  416. package/src/protocols/mcp/tools/InfrastructureTools.ts +42 -90
  417. package/src/protocols/mcp/tools/JsonTools.ts +7 -4
  418. package/src/protocols/mcp/tools/KnowledgeGraphTools.ts +313 -164
  419. package/src/protocols/mcp/tools/MemorySearchTools.ts +158 -46
  420. package/src/protocols/mcp/tools/MemoryUtilityTools.ts +85 -232
  421. package/src/protocols/mcp/tools/PlanningTools.ts +137 -59
  422. package/src/protocols/mcp/tools/ProjectContextTools.ts +33 -12
  423. package/src/protocols/mcp/tools/SafetyTools.ts +49 -13
  424. package/src/protocols/mcp/tools/SearchProjectTools.ts +294 -153
  425. package/src/protocols/mcp/tools/TaskPlanningTools.ts +437 -514
  426. package/src/protocols/mcp/tools/TestTools.ts +41 -11
  427. package/src/protocols/mcp/tools/TypeScriptTools.ts +61 -12
  428. package/src/protocols/mcp/tools/UserInputTools.ts +15 -1
  429. package/src/protocols/mcp/tools/UserMemoryTools.ts +27 -62
  430. package/src/protocols/mcp/tools/shell/ShellExecuteHandler.ts +26 -84
  431. package/src/protocols/mcp/tools/shell/ShellSandbox.ts +13 -31
  432. package/src/repositories/interfaces/IKnowledgeGraphRepository.ts +45 -27
  433. package/src/schemas/EventPayloadSchema.ts +45 -1
  434. package/src/services/AgentPerformanceService.ts +85 -36
  435. package/src/services/AutoCorrectionService.ts +25 -6
  436. package/src/services/BackgroundTaskManager.ts +183 -76
  437. package/src/services/BrowserManager.ts +20 -16
  438. package/src/services/ChannelContextMemoryOperations.ts +169 -202
  439. package/src/services/ChannelContextMessageOperations.ts +112 -274
  440. package/src/services/MemoryService.ts +1053 -760
  441. package/src/services/PatternLearningService.ts +32 -7
  442. package/src/services/PerformanceOptimizationService.ts +26 -9
  443. package/src/services/PredictiveAnalyticsService.ts +23 -10
  444. package/src/services/ProactiveValidationService.ts +66 -40
  445. package/src/services/TaskEffectivenessService.ts +421 -206
  446. package/src/services/ToolExecutionInterceptor.ts +40 -9
  447. package/src/services/UserInputRequestManager.ts +51 -6
  448. package/src/services/UserMemoryService.ts +12 -3
  449. package/src/services/ValidationAnalyticsService.ts +36 -11
  450. package/src/services/ValidationCacheService.ts +30 -7
  451. package/src/services/ValidationMiddleware.ts +62 -14
  452. package/src/services/ValidationPerformanceService.ts +47 -25
  453. package/src/services/WebSearchService.ts +16 -4
  454. package/src/services/dag/TaskDagService.ts +20 -1
  455. package/src/services/kg/EntityQValueManager.ts +21 -10
  456. package/src/services/kg/GraphSurpriseCalculator.ts +0 -14
  457. package/src/services/kg/KnowledgeGraphService.ts +56 -48
  458. package/src/services/kg/OrparGraphIntegration.ts +11 -5
  459. package/src/services/orpar-memory/CycleConsolidationTrigger.ts +10 -1
  460. package/src/services/orpar-memory/OrparMemoryCoordinator.ts +142 -71
  461. package/src/services/orpar-memory/SurpriseOrparAdapter.ts +10 -1
  462. package/src/types/ChannelContext.ts +3 -1
  463. package/src/types/EffectivenessTypes.ts +6 -2
  464. package/src/types/TaskCompletionTypes.ts +9 -9
  465. package/src/types/TaskTypes.ts +12 -1
  466. package/src/utils/GlobMatcher.ts +157 -0
@@ -29,7 +29,7 @@
29
29
  * - Prevent infinite correction loops
30
30
  */
31
31
 
32
- import { Observable, Subject } from 'rxjs';
32
+ import { Observable, Subject, Subscription } from 'rxjs';
33
33
  import { Logger } from '../utils/Logger.js';
34
34
  import { EventBus } from '../events/EventBus.js';
35
35
  import { Events } from '../events/EventNames.js';
@@ -96,8 +96,13 @@ export class ToolExecutionInterceptor {
96
96
 
97
97
  // Configuration
98
98
  private config: InterceptorConfig;
99
-
100
- private static instance: ToolExecutionInterceptor;
99
+ private readonly subscriptions: Subscription[] = [];
100
+ private readonly pendingDelays = new Map<
101
+ ReturnType<typeof setTimeout>,
102
+ (reason?: unknown) => void
103
+ >();
104
+
105
+ private static instance: ToolExecutionInterceptor | undefined;
101
106
 
102
107
  private constructor() {
103
108
  this.logger = new Logger('info', 'ToolExecutionInterceptor', 'server');
@@ -340,7 +345,14 @@ export class ToolExecutionInterceptor {
340
345
  * Add delay for retry attempts
341
346
  */
342
347
  private delay(ms: number): Promise<void> {
343
- return new Promise(resolve => setTimeout(resolve, ms));
348
+ return new Promise((resolve, reject) => {
349
+ const timer = setTimeout(() => {
350
+ this.pendingDelays.delete(timer);
351
+ resolve();
352
+ }, ms);
353
+ timer.unref?.();
354
+ this.pendingDelays.set(timer, reject);
355
+ });
344
356
  }
345
357
 
346
358
  /**
@@ -362,16 +374,16 @@ export class ToolExecutionInterceptor {
362
374
  */
363
375
  private setupEventListeners(): void {
364
376
  // Listen to auto-correction events for additional processing
365
- this.autoCorrectionService.correctionEvents.subscribe(attempt => {
377
+ this.subscriptions.push(this.autoCorrectionService.correctionEvents.subscribe(_attempt => {
366
378
  if (this.config.enableLearning) {
367
379
  }
368
- });
380
+ }));
369
381
 
370
382
  // Listen to general tool errors for monitoring
371
- EventBus.server.on(Events.Mcp.TOOL_ERROR, (payload) => {
383
+ this.subscriptions.push(EventBus.server.on(Events.Mcp.TOOL_ERROR, (_payload) => {
372
384
  if (this.config.logAllInterceptions) {
373
385
  }
374
- });
386
+ }));
375
387
 
376
388
  }
377
389
 
@@ -478,6 +490,25 @@ export class ToolExecutionInterceptor {
478
490
  this.activeExecutions.clear();
479
491
  }
480
492
 
493
+ /** Cancel pending retry delays and detach every owned subscription. */
494
+ public shutdown(): void {
495
+ for (const [timer, reject] of this.pendingDelays) {
496
+ clearTimeout(timer);
497
+ reject(new Error('Tool execution interceptor is shutting down'));
498
+ }
499
+ this.pendingDelays.clear();
500
+ for (const subscription of this.subscriptions) {
501
+ subscription.unsubscribe();
502
+ }
503
+ this.subscriptions.length = 0;
504
+ this.clearExecutionHistory();
505
+ this.interceptionEvents$.complete();
506
+
507
+ if (ToolExecutionInterceptor.instance === this) {
508
+ ToolExecutionInterceptor.instance = undefined;
509
+ }
510
+ }
511
+
481
512
  /**
482
513
  * Create a wrapped executor function that includes interception
483
514
  */
@@ -510,4 +541,4 @@ export class ToolExecutionInterceptor {
510
541
  retryCount
511
542
  };
512
543
  }
513
- }
544
+ }
@@ -103,10 +103,14 @@ export class UserInputRequestManager {
103
103
  private static readonly CLEANUP_INTERVAL_MS = 60 * 1000;
104
104
 
105
105
  private constructor() {
106
- // Start periodic cleanup of expired requests
106
+ // Start periodic cleanup of expired requests. The sweep must not be what
107
+ // keeps the process alive: the manager is created lazily by the first
108
+ // forwarded user-input request, and a referenced interval here kept the
109
+ // server running after every shutdown step had completed.
107
110
  this.cleanupInterval = setInterval(() => {
108
111
  this.cleanupExpired();
109
112
  }, UserInputRequestManager.CLEANUP_INTERVAL_MS);
113
+ this.cleanupInterval.unref?.();
110
114
  }
111
115
 
112
116
  /**
@@ -119,6 +123,20 @@ export class UserInputRequestManager {
119
123
  return UserInputRequestManager.instance;
120
124
  }
121
125
 
126
+ /**
127
+ * Shut down the live manager, if one was ever created, without constructing
128
+ * one solely for teardown.
129
+ *
130
+ * @returns true when a manager existed and was shut down
131
+ */
132
+ public static shutdownExisting(): boolean {
133
+ if (!UserInputRequestManager.instance) {
134
+ return false;
135
+ }
136
+ UserInputRequestManager.instance.shutdown();
137
+ return true;
138
+ }
139
+
122
140
  /**
123
141
  * Create a new user input request and return a Promise that resolves when the user responds.
124
142
  *
@@ -187,20 +205,35 @@ export class UserInputRequestManager {
187
205
  *
188
206
  * @param requestId - The request ID to respond to
189
207
  * @param value - The user's response value
190
- * @throws Error if requestId not found, request not pending, or value is invalid
208
+ * @param responderAgentId - Authenticated agent submitting the response
209
+ * @param responderChannelId - Authenticated channel of the responder
210
+ * @throws Error if the request is missing, outside the responder's scope,
211
+ * not pending, or the value is invalid
191
212
  */
192
- public submitResponse(requestId: string, value: UserInputResponseValue): void {
213
+ public submitResponse(
214
+ requestId: string,
215
+ value: UserInputResponseValue,
216
+ responderAgentId: string,
217
+ responderChannelId: string
218
+ ): void {
193
219
  const validator = createStrictValidator('UserInputRequestManager.submitResponse');
194
220
  validator.assertIsNonEmptyString(requestId, 'requestId is required');
221
+ validator.assertIsNonEmptyString(responderAgentId, 'responderAgentId is required');
222
+ validator.assertIsNonEmptyString(responderChannelId, 'responderChannelId is required');
195
223
 
196
224
  const pending = this.pendingRequests.get(requestId);
197
225
  if (!pending) {
198
226
  throw new Error(`User input request ${requestId} not found`);
199
227
  }
200
228
 
229
+ if (pending.request.agentId !== responderAgentId ||
230
+ pending.request.channelId !== responderChannelId) {
231
+ throw new Error('User input response is outside the authenticated agent/channel scope');
232
+ }
233
+
201
234
  if (pending.status !== 'pending') {
202
- // Idempotent: duplicate responses are expected when multiple agents receive
203
- // the same user_input:request broadcast and each independently emits a response.
235
+ // Preserve idempotence for client retries or duplicate transport
236
+ // delivery after the exact owner has already responded.
204
237
  logger.debug(`User input request ${requestId} is already ${pending.status}, ignoring duplicate response`);
205
238
  return;
206
239
  }
@@ -276,16 +309,28 @@ export class UserInputRequestManager {
276
309
  * @param requestId - The request ID to check
277
310
  * @returns Status info, or null if not found
278
311
  */
279
- public getRequest(requestId: string): {
312
+ public getRequest(requestId: string, requesterAgentId: string, requesterChannelId: string): {
280
313
  status: UserInputRequestStatus;
281
314
  value?: UserInputResponseValue;
282
315
  request: UserInputRequestData;
283
316
  } | null {
317
+ const validator = createStrictValidator('UserInputRequestManager.getRequest');
318
+ validator.assertIsNonEmptyString(requestId, 'requestId is required');
319
+ validator.assertIsNonEmptyString(requesterAgentId, 'requesterAgentId is required');
320
+ validator.assertIsNonEmptyString(requesterChannelId, 'requesterChannelId is required');
321
+
284
322
  const pending = this.pendingRequests.get(requestId);
285
323
  if (!pending) {
286
324
  return null;
287
325
  }
288
326
 
327
+ // Return the same result as an unknown id so callers cannot use a
328
+ // leaked or guessed request id to probe another agent's prompt or value.
329
+ if (pending.request.agentId !== requesterAgentId ||
330
+ pending.request.channelId !== requesterChannelId) {
331
+ return null;
332
+ }
333
+
289
334
  return {
290
335
  status: pending.status,
291
336
  value: pending.responseValue,
@@ -45,6 +45,11 @@ const MEILISEARCH_INDEX = 'mxf-user-memories';
45
45
 
46
46
  const logger = new Logger('info', 'UserMemoryService', 'server');
47
47
 
48
+ /** Escape one string literal embedded in a Meilisearch filter expression. */
49
+ export const escapeUserMemoryFilterLiteral = (value: string): string => (
50
+ value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')
51
+ );
52
+
48
53
  // ─── Exported Interfaces ─────────────────────────────────────────────────────
49
54
 
50
55
  /** Result shape returned by recall and getSessionContext */
@@ -405,7 +410,7 @@ export class UserMemoryService {
405
410
  try {
406
411
  const client = service.getClient();
407
412
  await client.index(MEILISEARCH_INDEX).deleteDocuments({
408
- filter: `userId = "${userId}"`
413
+ filter: `userId = "${escapeUserMemoryFilterLiteral(userId)}"`
409
414
  });
410
415
  } catch (err) {
411
416
  logger.warn('clearUserFromMeilisearch failed', err);
@@ -430,8 +435,12 @@ export class UserMemoryService {
430
435
  const client = service.getClient();
431
436
 
432
437
  // Build filter expression: always filter by userId, optionally by type
433
- const filters = [`userId = "${userId}"`];
434
- if (type) filters.push(`type = "${type}"`);
438
+ const filters = [
439
+ `userId = "${escapeUserMemoryFilterLiteral(userId)}"`
440
+ ];
441
+ if (type) {
442
+ filters.push(`type = "${escapeUserMemoryFilterLiteral(type)}"`);
443
+ }
435
444
  const filter = filters.join(' AND ');
436
445
 
437
446
  const result = await client.index(MEILISEARCH_INDEX).search<UserMemoryMeilisearchDoc>(
@@ -30,6 +30,7 @@
30
30
  */
31
31
 
32
32
  import { EventEmitter } from 'events';
33
+ import type { Subscription } from 'rxjs';
33
34
  import { Logger } from '../utils/Logger.js';
34
35
  import { EventBus } from '../events/EventBus.js';
35
36
  import { Events } from '../events/EventNames.js';
@@ -203,8 +204,10 @@ export class ValidationAnalyticsService extends EventEmitter {
203
204
  retentionPeriod: 90 * 24 * 60 * 60 * 1000, // 90 days
204
205
  enableRealTimeStreaming: true
205
206
  };
206
-
207
- private static instance: ValidationAnalyticsService;
207
+ private readonly eventSubscriptions: Subscription[] = [];
208
+ private aggregationInterval?: ReturnType<typeof setInterval>;
209
+
210
+ private static instance: ValidationAnalyticsService | undefined;
208
211
 
209
212
  private constructor() {
210
213
  super();
@@ -1037,7 +1040,7 @@ export class ValidationAnalyticsService extends EventEmitter {
1037
1040
  */
1038
1041
  private setupEventListeners(): void {
1039
1042
  // Listen to validation events
1040
- EventBus.server.on(Events.Mcp.TOOL_VALIDATION_ERROR, (event) => {
1043
+ this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_VALIDATION_ERROR, (event) => {
1041
1044
  this.recordMetric({
1042
1045
  name: 'validation_error',
1043
1046
  value: 1,
@@ -1048,9 +1051,9 @@ export class ValidationAnalyticsService extends EventEmitter {
1048
1051
  errorType: event.errorType
1049
1052
  }
1050
1053
  });
1051
- });
1054
+ }));
1052
1055
 
1053
- EventBus.server.on(Events.Mcp.TOOL_RESULT, (event) => {
1056
+ this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_RESULT, (event) => {
1054
1057
  if (event.success) {
1055
1058
  this.recordMetric({
1056
1059
  name: 'tool_success',
@@ -1062,10 +1065,10 @@ export class ValidationAnalyticsService extends EventEmitter {
1062
1065
  }
1063
1066
  });
1064
1067
  }
1065
- });
1068
+ }));
1066
1069
 
1067
1070
  // Listen to correction events
1068
- EventBus.server.on(Events.Mcp.TOOL_RESULT, (event) => {
1071
+ this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_RESULT, (event) => {
1069
1072
  this.recordMetric({
1070
1073
  name: 'auto_correction',
1071
1074
  value: 1,
@@ -1075,16 +1078,17 @@ export class ValidationAnalyticsService extends EventEmitter {
1075
1078
  tool: event.toolName
1076
1079
  }
1077
1080
  });
1078
- });
1081
+ }));
1079
1082
  }
1080
1083
 
1081
1084
  /**
1082
1085
  * Start aggregation worker
1083
1086
  */
1084
1087
  private startAggregationWorker(): void {
1085
- setInterval(() => {
1086
- this.performAggregation();
1088
+ this.aggregationInterval = setInterval(() => {
1089
+ void this.performAggregation();
1087
1090
  }, this.config.aggregationInterval);
1091
+ this.aggregationInterval.unref?.();
1088
1092
  }
1089
1093
 
1090
1094
  /**
@@ -1170,4 +1174,25 @@ export class ValidationAnalyticsService extends EventEmitter {
1170
1174
  this.metricsBuffer.length = 0;
1171
1175
  this.aggregatedMetrics.clear();
1172
1176
  }
1173
- }
1177
+
1178
+ /** Release every timer and subscription owned by this singleton. */
1179
+ public shutdown(): void {
1180
+ if (this.aggregationInterval) {
1181
+ clearInterval(this.aggregationInterval);
1182
+ this.aggregationInterval = undefined;
1183
+ }
1184
+ for (const subscription of this.eventSubscriptions) {
1185
+ subscription.unsubscribe();
1186
+ }
1187
+ this.eventSubscriptions.length = 0;
1188
+ this.clearMetrics();
1189
+ this.activeABTests.clear();
1190
+ this.abTestResults.clear();
1191
+ this.customReports.clear();
1192
+ this.removeAllListeners();
1193
+
1194
+ if (ValidationAnalyticsService.instance === this) {
1195
+ ValidationAnalyticsService.instance = undefined;
1196
+ }
1197
+ }
1198
+ }
@@ -197,9 +197,11 @@ export class ValidationCacheService {
197
197
  private mongoCollection: any = null;
198
198
 
199
199
  // Background tasks
200
- private cleanupInterval: NodeJS.Timeout | null = null;
201
-
202
- private static instance: ValidationCacheService;
200
+ private cleanupInterval?: ReturnType<typeof setInterval>;
201
+ private mongoCleanupInterval?: ReturnType<typeof setInterval>;
202
+ private statisticsInterval?: ReturnType<typeof setInterval>;
203
+
204
+ private static instance: ValidationCacheService | undefined;
203
205
 
204
206
  private constructor() {
205
207
  this.logger = new Logger('info', 'ValidationCacheService', 'server');
@@ -962,21 +964,24 @@ export class ValidationCacheService {
962
964
  this.cleanupInterval = setInterval(() => {
963
965
  this.cleanupExpiredMemoryEntries();
964
966
  }, this.config.memoryCache.cleanupInterval);
967
+ this.cleanupInterval.unref?.();
965
968
  }
966
969
 
967
970
  // MongoDB background cleanup
968
971
  if (this.config.mongoCache.backgroundCleanup) {
969
- setInterval(() => {
972
+ this.mongoCleanupInterval = setInterval(() => {
970
973
  this.cleanupMongoCache().catch(error => {
971
974
  this.logger.warn('MongoDB cache cleanup failed:', error);
972
975
  });
973
976
  }, 60 * 60 * 1000); // Every hour
977
+ this.mongoCleanupInterval.unref?.();
974
978
  }
975
979
 
976
980
  // Statistics reporting
977
- setInterval(() => {
981
+ this.statisticsInterval = setInterval(() => {
978
982
  this.reportCacheStatistics();
979
983
  }, 5 * 60 * 1000); // Every 5 minutes
984
+ this.statisticsInterval.unref?.();
980
985
  }
981
986
 
982
987
  private cleanupExpiredMemoryEntries(): void {
@@ -1166,12 +1171,30 @@ export class ValidationCacheService {
1166
1171
  public shutdown(): void {
1167
1172
  if (this.cleanupInterval) {
1168
1173
  clearInterval(this.cleanupInterval);
1169
- this.cleanupInterval = null;
1174
+ this.cleanupInterval = undefined;
1175
+ }
1176
+ if (this.mongoCleanupInterval) {
1177
+ clearInterval(this.mongoCleanupInterval);
1178
+ this.mongoCleanupInterval = undefined;
1179
+ }
1180
+ if (this.statisticsInterval) {
1181
+ clearInterval(this.statisticsInterval);
1182
+ this.statisticsInterval = undefined;
1170
1183
  }
1171
1184
 
1172
1185
  if (this.redisClient) {
1173
1186
  // this.redisClient.disconnect();
1174
1187
  }
1175
1188
 
1189
+ this.memoryCache.clear();
1190
+ this.accessOrder.clear();
1191
+ this.accessFrequency.clear();
1192
+ this.memoryCacheSize = 0;
1193
+ this.cacheEvents$.complete();
1194
+
1195
+ if (ValidationCacheService.instance === this) {
1196
+ ValidationCacheService.instance = undefined;
1197
+ }
1198
+
1176
1199
  }
1177
- }
1200
+ }
@@ -25,7 +25,7 @@
25
25
  * Integrates with ToolExecutionInterceptor and adds proactive validation layer.
26
26
  */
27
27
 
28
- import { Observable, Subject } from 'rxjs';
28
+ import { Observable, Subject, Subscription } from 'rxjs';
29
29
  import { Logger } from '../utils/Logger.js';
30
30
  import { EventBus } from '../events/EventBus.js';
31
31
  import { Events } from '../events/EventNames.js';
@@ -127,8 +127,16 @@ export class ValidationMiddleware {
127
127
 
128
128
  // Emergency bypass tracking
129
129
  private emergencyBypassUntil = 0;
130
-
131
- private static instance: ValidationMiddleware;
130
+ private readonly subscriptions: Subscription[] = [];
131
+ private readonly pendingValidationTimeouts = new Map<
132
+ ReturnType<typeof setTimeout>,
133
+ (reason?: unknown) => void
134
+ >();
135
+ private metricsInterval?: ReturnType<typeof setInterval>;
136
+ private interceptionCleanupInterval?: ReturnType<typeof setInterval>;
137
+ private healthCheckInterval?: ReturnType<typeof setInterval>;
138
+
139
+ private static instance: ValidationMiddleware | undefined;
132
140
 
133
141
  private constructor() {
134
142
  this.logger = new Logger('info', 'ValidationMiddleware', 'server');
@@ -415,9 +423,9 @@ export class ValidationMiddleware {
415
423
  // This ensures all tool calls go through both validation and auto-correction
416
424
 
417
425
  // Listen to tool execution interceptor events
418
- this.toolExecutionInterceptor.interceptionEvents.subscribe(event => {
426
+ this.subscriptions.push(this.toolExecutionInterceptor.interceptionEvents.subscribe(event => {
419
427
  this.handleToolExecutionEvent(event);
420
- });
428
+ }));
421
429
 
422
430
  }
423
431
 
@@ -625,13 +633,19 @@ export class ValidationMiddleware {
625
633
  private async withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {
626
634
  return new Promise((resolve, reject) => {
627
635
  const timer = setTimeout(() => {
636
+ this.pendingValidationTimeouts.delete(timer);
628
637
  reject(new Error('TIMEOUT'));
629
638
  }, timeoutMs);
639
+ timer.unref?.();
640
+ this.pendingValidationTimeouts.set(timer, reject);
630
641
 
631
642
  promise
632
643
  .then(resolve)
633
644
  .catch(reject)
634
- .finally(() => clearTimeout(timer));
645
+ .finally(() => {
646
+ clearTimeout(timer);
647
+ this.pendingValidationTimeouts.delete(timer);
648
+ });
635
649
  });
636
650
  }
637
651
 
@@ -689,31 +703,34 @@ export class ValidationMiddleware {
689
703
 
690
704
  private setupEventListeners(): void {
691
705
  // Listen to system events for emergency bypass triggers
692
- EventBus.server.on(Events.System.MAINTENANCE_MODE, () => {
706
+ this.subscriptions.push(EventBus.server.on(Events.System.MAINTENANCE_MODE, () => {
693
707
  this.activateEmergencyBypass(30 * 60 * 1000); // 30 minutes
694
- });
708
+ }));
695
709
 
696
710
  // Listen to validation performance events
697
- this.proactiveValidationService.validationEvents.subscribe(event => {
711
+ this.subscriptions.push(this.proactiveValidationService.validationEvents.subscribe(_event => {
698
712
  // Could use these events for additional learning or optimization
699
- });
713
+ }));
700
714
  }
701
715
 
702
716
  private startPeriodicTasks(): void {
703
717
  // Performance reporting
704
- setInterval(() => {
718
+ this.metricsInterval = setInterval(() => {
705
719
  this.reportPerformanceMetrics();
706
720
  }, 60 * 1000); // Every minute
721
+ this.metricsInterval.unref?.();
707
722
 
708
723
  // Cleanup expired interceptions
709
- setInterval(() => {
724
+ this.interceptionCleanupInterval = setInterval(() => {
710
725
  this.cleanupExpiredInterceptions();
711
726
  }, 5 * 60 * 1000); // Every 5 minutes
727
+ this.interceptionCleanupInterval.unref?.();
712
728
 
713
729
  // Health checks
714
- setInterval(() => {
730
+ this.healthCheckInterval = setInterval(() => {
715
731
  this.performHealthCheck();
716
732
  }, 30 * 1000); // Every 30 seconds
733
+ this.healthCheckInterval.unref?.();
717
734
  }
718
735
 
719
736
  private reportPerformanceMetrics(): void {
@@ -873,4 +890,35 @@ export class ValidationMiddleware {
873
890
  totalValidationTime: 0
874
891
  });
875
892
  }
876
- }
893
+
894
+ /** Release every timer and subscription owned by this singleton. */
895
+ public shutdown(): void {
896
+ if (this.metricsInterval) {
897
+ clearInterval(this.metricsInterval);
898
+ this.metricsInterval = undefined;
899
+ }
900
+ if (this.interceptionCleanupInterval) {
901
+ clearInterval(this.interceptionCleanupInterval);
902
+ this.interceptionCleanupInterval = undefined;
903
+ }
904
+ if (this.healthCheckInterval) {
905
+ clearInterval(this.healthCheckInterval);
906
+ this.healthCheckInterval = undefined;
907
+ }
908
+ for (const [timer, reject] of this.pendingValidationTimeouts) {
909
+ clearTimeout(timer);
910
+ reject(new Error('Validation middleware is shutting down'));
911
+ }
912
+ this.pendingValidationTimeouts.clear();
913
+ for (const subscription of this.subscriptions) {
914
+ subscription.unsubscribe();
915
+ }
916
+ this.subscriptions.length = 0;
917
+ this.activeInterceptions.clear();
918
+ this.middlewareEvents$.complete();
919
+
920
+ if (ValidationMiddleware.instance === this) {
921
+ ValidationMiddleware.instance = undefined;
922
+ }
923
+ }
924
+ }
@@ -23,7 +23,7 @@
23
23
  * Phase 1: Extension of AgentPerformanceService for validation metrics
24
24
  */
25
25
 
26
- import { Observable, Subject, of } from 'rxjs';
26
+ import { Observable, Subject, type Subscription } from 'rxjs';
27
27
  import { Logger } from '../utils/Logger.js';
28
28
  import { EventBus } from '../events/EventBus.js';
29
29
  import { Events } from '../events/EventNames.js';
@@ -52,8 +52,11 @@ export class ValidationPerformanceService {
52
52
 
53
53
  // Observable for validation events
54
54
  private readonly validationEvents$ = new Subject<ValidationEvent>();
55
-
56
- private static instance: ValidationPerformanceService;
55
+
56
+ // EventBus subscriptions owned by this singleton, released by shutdown()
57
+ private readonly eventSubscriptions: Subscription[] = [];
58
+
59
+ private static instance: ValidationPerformanceService | undefined;
57
60
 
58
61
  private constructor() {
59
62
  this.logger = new Logger('info', 'ValidationPerformanceService', 'server');
@@ -77,42 +80,61 @@ export class ValidationPerformanceService {
77
80
  // =============================================================================
78
81
 
79
82
  private setupEventListeners(): void {
83
+ // Handlers return their promise so the EventBus shutdown drain waits for
84
+ // in-flight tracking and logs a rejection instead of leaving it unhandled.
85
+
80
86
  // Track validation errors
81
- EventBus.server.on(Events.Mcp.TOOL_ERROR, (payload) => {
87
+ this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_ERROR, (payload): Promise<void> | undefined => {
82
88
  const error = payload.error || payload.data?.error || payload.data?.errorMessage;
83
- if (this.isValidationError(error)) {
84
- this.trackValidationError(
85
- payload.agentId,
86
- payload.channelId,
87
- payload.data?.toolName || payload.toolName,
88
- error,
89
- payload.data?.parameters
90
- );
89
+ if (!this.isValidationError(error)) {
90
+ return undefined;
91
91
  }
92
- });
92
+ return this.trackValidationError(
93
+ payload.agentId,
94
+ payload.channelId,
95
+ payload.data?.toolName || payload.toolName,
96
+ error,
97
+ payload.data?.parameters
98
+ );
99
+ }));
93
100
 
94
101
  // Track successful tool calls (for success rate calculation)
95
- EventBus.server.on(Events.Mcp.TOOL_RESULT, (payload) => {
102
+ this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_RESULT, (payload) =>
96
103
  this.trackValidationSuccess(
97
104
  payload.agentId,
98
105
  payload.channelId,
99
106
  payload.data?.toolName || payload.toolName
100
- );
101
- });
107
+ )
108
+ ));
102
109
 
103
110
  // Track help tool usage
104
- EventBus.server.on(Events.Mcp.TOOL_CALL, (payload) => {
111
+ this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_CALL, (payload): Promise<void> | undefined => {
105
112
  const toolName = payload.data?.toolName || payload.toolName;
106
- if (this.isHelpTool(toolName)) {
107
- this.trackHelpToolUsage(
108
- payload.agentId,
109
- payload.channelId,
110
- toolName,
111
- payload.data?.parameters
112
- );
113
+ if (!this.isHelpTool(toolName)) {
114
+ return undefined;
113
115
  }
114
- });
116
+ return this.trackHelpToolUsage(
117
+ payload.agentId,
118
+ payload.channelId,
119
+ toolName,
120
+ payload.data?.parameters
121
+ );
122
+ }));
123
+ }
115
124
 
125
+ /** Release every EventBus subscription and cached state owned by this singleton. */
126
+ public shutdown(): void {
127
+ for (const subscription of this.eventSubscriptions) {
128
+ subscription.unsubscribe();
129
+ }
130
+ this.eventSubscriptions.length = 0;
131
+ this.validationMetrics.clear();
132
+ this.errorTimestamps.clear();
133
+ this.validationEvents$.complete();
134
+
135
+ if (ValidationPerformanceService.instance === this) {
136
+ ValidationPerformanceService.instance = undefined;
137
+ }
116
138
  }
117
139
 
118
140
  // =============================================================================