@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
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Copyright 2024 Brad Anderson
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ *
16
+ * @author Brad Anderson <BradA1878@pm.me>
17
+ * @repository https://github.com/BradA1878/model-exchange-framework
18
+ * @documentation https://mxf-dev.github.io/mxf/
19
+ */
20
+
21
+ import mongoose, { Document, Schema } from 'mongoose';
22
+
23
+ /**
24
+ * Permanent tenant ownership of a globally keyed agent identity.
25
+ *
26
+ * Reservations are intentionally never removed when an Agent or its channel
27
+ * keys are deleted. Releasing the row would let another tenant take over the
28
+ * same agentId and inherit resources that are keyed only by that identifier.
29
+ */
30
+ export interface IAgentIdentityReservation extends Document<string> {
31
+ _id: string;
32
+ agentId: string;
33
+ ownerId: string;
34
+ claimedAt: Date;
35
+ createdAt: Date;
36
+ updatedAt: Date;
37
+ }
38
+
39
+ const AgentIdentityReservationSchema = new Schema<IAgentIdentityReservation>(
40
+ {
41
+ // MongoDB's built-in _id index is the race barrier. It exists before
42
+ // any application-created indexes, including during first startup.
43
+ _id: {
44
+ type: String,
45
+ required: true
46
+ },
47
+ agentId: {
48
+ type: String,
49
+ required: true,
50
+ immutable: true
51
+ },
52
+ ownerId: {
53
+ type: String,
54
+ required: true,
55
+ immutable: true,
56
+ index: true
57
+ },
58
+ claimedAt: {
59
+ type: Date,
60
+ required: true,
61
+ default: Date.now
62
+ }
63
+ },
64
+ {
65
+ collection: 'agent_identity_reservations',
66
+ timestamps: true
67
+ }
68
+ );
69
+
70
+ // The built-in `_id` index is the correctness boundary; no asynchronously
71
+ // created application index is required before claims are safe.
72
+ const AgentIdentityReservation = mongoose.model<IAgentIdentityReservation>(
73
+ 'AgentIdentityReservation',
74
+ AgentIdentityReservationSchema
75
+ );
76
+
77
+ export default AgentIdentityReservation;
@@ -48,6 +48,8 @@ export interface IChannel extends Document {
48
48
  maxAgents: number;
49
49
  allowAnonymous: boolean;
50
50
  showActiveAgents: boolean; // Whether agents can see other agents in the channel
51
+ allowedTools: string[]; // Empty means no additional channel-level restriction
52
+ systemLlmEnabled: boolean;
51
53
 
52
54
  // Channel state
53
55
  active: boolean;
@@ -51,6 +51,11 @@ export interface IChannelKey extends Document {
51
51
  // chose its own agentId, so one shared key let a client present any agent identity.
52
52
  agentId: string;
53
53
 
54
+ // Maximum tool capability carried by this credential. A connecting agent
55
+ // may narrow this list, but can never grant itself tools outside it.
56
+ // Omission means the curated core-tool maximum; [] denies every tool.
57
+ allowedTools?: string[];
58
+
54
59
  // Optional name for the key (for user reference)
55
60
  name?: string;
56
61
 
@@ -93,6 +98,11 @@ const ChannelKeySchema: Schema = new Schema({
93
98
  required: true,
94
99
  index: true,
95
100
  },
101
+ allowedTools: {
102
+ type: [String],
103
+ required: false,
104
+ default: undefined,
105
+ },
96
106
  name: {
97
107
  type: String,
98
108
  required: false,
@@ -25,7 +25,7 @@
25
25
  * These models define the database structure for different memory types.
26
26
  */
27
27
 
28
- import mongoose, { Schema, Document, Model } from 'mongoose';
28
+ import mongoose, { Schema, Model } from 'mongoose';
29
29
  import { v4 as uuidv4 } from 'uuid';
30
30
 
31
31
  import {
@@ -37,8 +37,6 @@ import {
37
37
  } from '../types/MemoryTypes.js';
38
38
  import {
39
39
  MemoryUtilitySubdocument,
40
- QValueHistoryEntry,
41
- QValueInitSource,
42
40
  DEFAULT_UTILITY_SUBDOCUMENT
43
41
  } from '../types/MemoryUtilityTypes.js';
44
42
 
@@ -51,7 +49,7 @@ const baseMemorySchema = new Schema({
51
49
  type: String,
52
50
  required: true,
53
51
  unique: true,
54
- default: () => uuidv4()
52
+ default: (): string => uuidv4()
55
53
  },
56
54
 
57
55
  // Creation timestamp
@@ -131,14 +129,10 @@ const baseMemorySchema = new Schema({
131
129
  default: 'default'
132
130
  }
133
131
  }, { _id: false }),
134
- default: () => ({
135
- qValue: 0.5,
132
+ default: (): MemoryUtilitySubdocument => ({
133
+ ...DEFAULT_UTILITY_SUBDOCUMENT,
136
134
  qValueHistory: [],
137
- retrievalCount: 0,
138
- successCount: 0,
139
- failureCount: 0,
140
135
  lastRewardAt: new Date(),
141
- initializedFrom: 'default'
142
136
  })
143
137
  }
144
138
  }, {
@@ -146,7 +140,7 @@ const baseMemorySchema = new Schema({
146
140
  strict: false, // Allow for flexible schema evolution
147
141
  id: false, // Don't create default MongoDB _id field
148
142
  toJSON: {
149
- transform: (doc, ret) => {
143
+ transform: (_document: unknown, ret: Record<string, unknown>): Record<string, unknown> => {
150
144
  delete ret._id; // Remove MongoDB _id when converting to JSON
151
145
  return ret;
152
146
  }
@@ -160,8 +154,7 @@ const agentMemorySchema = new Schema({
160
154
  // Reference to Agent ID
161
155
  agentId: {
162
156
  type: String,
163
- required: true,
164
- index: true
157
+ required: true
165
158
  },
166
159
 
167
160
  // Conversation history
@@ -178,8 +171,7 @@ const channelMemorySchema = new Schema({
178
171
  // Reference to Channel ID
179
172
  channelId: {
180
173
  type: String,
181
- required: true,
182
- index: true
174
+ required: true
183
175
  },
184
176
 
185
177
  // Shared state visible to all agents in the channel
@@ -223,9 +215,6 @@ const relationshipMemorySchema = new Schema({
223
215
  }
224
216
  });
225
217
 
226
- // Create compound index for relationship memory
227
- relationshipMemorySchema.index({ agentId1: 1, agentId2: 1, channelId: 1 }, { unique: true });
228
-
229
218
  // Complete memory models by combining base and specific schemas
230
219
  const AgentMemorySchema = new Schema({
231
220
  ...baseMemorySchema.obj,
@@ -242,6 +231,14 @@ const RelationshipMemorySchema = new Schema({
242
231
  ...relationshipMemorySchema.obj
243
232
  });
244
233
 
234
+ // Enforce one authoritative document for every memory identity on the final schemas.
235
+ AgentMemorySchema.index({ agentId: 1 }, { unique: true });
236
+ ChannelMemorySchema.index({ channelId: 1 }, { unique: true });
237
+ RelationshipMemorySchema.index(
238
+ { agentId1: 1, agentId2: 1, channelId: 1 },
239
+ { unique: true }
240
+ );
241
+
245
242
  // Create indexes for Q-value queries (MULS optimization)
246
243
  // Index for sorting by Q-value descending (top performers)
247
244
  AgentMemorySchema.index({ 'utility.qValue': -1 });
@@ -296,7 +293,9 @@ export const RelationshipMemory: Model<RelationshipMemoryDocument> =
296
293
  * @param scope Memory scope
297
294
  * @returns The corresponding memory model
298
295
  */
299
- export const getMemoryModelByScope = (scope: MemoryScope): Model<any> => {
296
+ export const getMemoryModelByScope = (
297
+ scope: MemoryScope
298
+ ): Model<AgentMemoryDocument> | Model<ChannelMemoryDocument> | Model<RelationshipMemoryDocument> => {
300
299
  switch (scope) {
301
300
  case MemoryScope.AGENT:
302
301
  return AgentMemory;
@@ -30,8 +30,9 @@ import {
30
30
  MemoryStratum,
31
31
  MemoryImportance,
32
32
  MemoryEntry as IMemoryEntry,
33
+ MemoryContext,
34
+ MemorySource,
33
35
  SurpriseDetection,
34
- MemoryPattern
35
36
  } from '../types/MemoryStrataTypes.js';
36
37
 
37
38
  /**
@@ -48,21 +49,8 @@ export interface IMemoryEntryDocument extends Document {
48
49
  embedding?: number[];
49
50
  importance: MemoryImportance;
50
51
  tags: string[];
51
- source: {
52
- type: string;
53
- agentId?: string;
54
- channelId?: string;
55
- eventId?: string;
56
- data?: Record<string, unknown>;
57
- };
58
- context: {
59
- agentId: string;
60
- channelId?: string;
61
- taskId?: string;
62
- orparPhase?: string;
63
- timestamp: Date;
64
- data?: Record<string, unknown>;
65
- };
52
+ source: MemorySource;
53
+ context: MemoryContext;
66
54
  accessCount: number;
67
55
  lastAccessed: Date;
68
56
  createdAt: Date;
@@ -200,8 +188,7 @@ const MemoryEntrySchema: Schema = new Schema(
200
188
  index: true
201
189
  },
202
190
  expiresAt: {
203
- type: Date,
204
- index: true
191
+ type: Date
205
192
  },
206
193
  relatedMemories: {
207
194
  type: [String],
@@ -237,8 +224,7 @@ const SurpriseHistorySchema: Schema = new Schema(
237
224
  },
238
225
  timestamp: {
239
226
  type: Date,
240
- default: Date.now,
241
- index: true
227
+ default: Date.now
242
228
  },
243
229
  momentarySurprise: {
244
230
  type: Number,
@@ -397,7 +383,7 @@ export function memoryEntryToDocument(
397
383
  importance: entry.importance,
398
384
  tags: entry.tags,
399
385
  source: entry.source,
400
- context: entry.context as any,
386
+ context: entry.context,
401
387
  accessCount: entry.accessCount,
402
388
  lastAccessed: entry.lastAccessed,
403
389
  createdAt: entry.createdAt,
@@ -420,8 +406,8 @@ export function documentToMemoryEntry(doc: IMemoryEntryDocument): IMemoryEntry {
420
406
  embedding: doc.embedding,
421
407
  importance: doc.importance,
422
408
  tags: doc.tags,
423
- source: doc.source as any,
424
- context: doc.context as any,
409
+ source: doc.source,
410
+ context: doc.context,
425
411
  accessCount: doc.accessCount,
426
412
  lastAccessed: doc.lastAccessed,
427
413
  createdAt: doc.createdAt,
@@ -41,9 +41,9 @@ export interface IPlan extends Document {
41
41
  planId: string;
42
42
  title: string;
43
43
  createdBy: string;
44
- channelId?: string;
44
+ channelId: string;
45
45
  items: IPlanItem[];
46
- metadata?: Record<string, any>;
46
+ metadata?: Record<string, unknown>;
47
47
  createdAt: Date;
48
48
  updatedAt: Date;
49
49
  }
@@ -110,7 +110,7 @@ const PlanSchema: Schema = new Schema(
110
110
  },
111
111
  channelId: {
112
112
  type: String,
113
- required: false,
113
+ required: true,
114
114
  index: true
115
115
  },
116
116
  items: {
@@ -32,6 +32,7 @@ import { TaskEffectivenessMetrics, TaskDefinition } from '../types/Effectiveness
32
32
  */
33
33
  export interface ITaskEffectiveness extends Document {
34
34
  taskId: string;
35
+ agentId: string;
35
36
  channelId: string;
36
37
  agentIds: string[];
37
38
  definition: TaskDefinition;
@@ -48,7 +49,11 @@ const TaskEffectivenessSchema = new Schema<ITaskEffectiveness>({
48
49
  taskId: {
49
50
  type: String,
50
51
  required: true,
51
- unique: true,
52
+ index: true
53
+ },
54
+ agentId: {
55
+ type: String,
56
+ required: true,
52
57
  index: true
53
58
  },
54
59
  channelId: {
@@ -62,6 +67,7 @@ const TaskEffectivenessSchema = new Schema<ITaskEffectiveness>({
62
67
  }],
63
68
  definition: {
64
69
  taskId: String,
70
+ agentId: String,
65
71
  channelId: String,
66
72
  taskType: { type: String, index: true },
67
73
  description: String,
@@ -134,6 +140,7 @@ const TaskEffectivenessSchema = new Schema<ITaskEffectiveness>({
134
140
  });
135
141
 
136
142
  // Indexes for analytics queries
143
+ TaskEffectivenessSchema.index({ agentId: 1, channelId: 1, taskId: 1 }, { unique: true });
137
144
  TaskEffectivenessSchema.index({ channelId: 1, 'metrics.metadata.type': 1 });
138
145
  TaskEffectivenessSchema.index({ 'metrics.metadata.startTime': 1, 'metrics.metadata.status': 1 });
139
146
  TaskEffectivenessSchema.index({ agentIds: 1, completedAt: 1 });
@@ -149,4 +156,4 @@ TaskEffectivenessSchema.pre('save', function(next) {
149
156
  });
150
157
 
151
158
  // Create and export the model
152
- export const TaskEffectivenessModel = mongoose.model<ITaskEffectiveness>('TaskEffectiveness', TaskEffectivenessSchema);
159
+ export const TaskEffectivenessModel = mongoose.model<ITaskEffectiveness>('TaskEffectiveness', TaskEffectivenessSchema);
@@ -73,6 +73,10 @@ export interface IUser extends Document {
73
73
  avatar?: string;
74
74
  isActive: boolean;
75
75
  lastLogin?: Date;
76
+ /** SHA-256 digest of the only currently valid magic-link nonce. */
77
+ magicLinkNonceHash?: string;
78
+ /** Server-side expiry used with the nonce for atomic one-time consumption. */
79
+ magicLinkExpiresAt?: Date;
76
80
  createdAt: Date;
77
81
  updatedAt: Date;
78
82
 
@@ -131,6 +135,14 @@ const UserSchema = new Schema<IUser>({
131
135
  lastLogin: {
132
136
  type: Date
133
137
  },
138
+ magicLinkNonceHash: {
139
+ type: String,
140
+ select: false
141
+ },
142
+ magicLinkExpiresAt: {
143
+ type: Date,
144
+ select: false
145
+ },
134
146
  createdAt: {
135
147
  type: Date,
136
148
  default: Date.now
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Test-environment containment for external LLM calls.
3
+ *
4
+ * Unit and integration test processes must not spend money merely because a
5
+ * real API key is present in the developer's environment. Tests that
6
+ * intentionally exercise a live provider have to opt in explicitly.
7
+ */
8
+
9
+ export const EXTERNAL_LLM_TEST_OPT_IN_ENV = 'MXF_TEST_ALLOW_EXTERNAL_LLM_CALLS';
10
+
11
+ /**
12
+ * Fail before an external provider request can leave a test process.
13
+ *
14
+ * Only the exact value `true` enables live calls. This keeps misspellings and
15
+ * inherited non-empty values from weakening the safety boundary.
16
+ */
17
+ export function assertExternalLlmCallAllowed(providerName: string): void {
18
+ if (process.env.NODE_ENV !== 'test') {
19
+ return;
20
+ }
21
+
22
+ if (process.env[EXTERNAL_LLM_TEST_OPT_IN_ENV] === 'true') {
23
+ return;
24
+ }
25
+
26
+ throw new Error(
27
+ `External LLM call blocked for ${providerName} because NODE_ENV=test. ` +
28
+ `Set ${EXTERNAL_LLM_TEST_OPT_IN_ENV}=true only for an explicitly authorized live-provider test.`
29
+ );
30
+ }
@@ -53,6 +53,15 @@ export interface McpToolHandlerContext {
53
53
  agentId?: string;
54
54
  /** Channel ID where the request originated */
55
55
  channelId?: string;
56
+ /**
57
+ * Server-derived credential capability for this exact request. Transport
58
+ * boundaries populate it from the validated channel key; callers must not
59
+ * construct it from agent-provided identity or allowlist fields.
60
+ */
61
+ authorization?: {
62
+ keyId: string;
63
+ allowedTools?: string[];
64
+ };
56
65
  /** Additional context data */
57
66
  data?: Record<string, any>;
58
67
  }
@@ -468,6 +468,8 @@ export class AnthropicMcpClient extends BaseMcpClient {
468
468
  context: AgentContext,
469
469
  options?: Record<string, any>
470
470
  ): Promise<McpApiResponse> {
471
+ this.assertExternalLlmCallAllowed();
472
+
471
473
  // Structure messages for Anthropic based on context
472
474
  const { systemPrompt, messages } = this.structureMessagesFromContext(context);
473
475
 
@@ -489,6 +489,7 @@ export class AzureOpenAiMcpClient extends BaseMcpClient {
489
489
  context: AgentContext,
490
490
  options?: Record<string, any>
491
491
  ): Promise<McpApiResponse> {
492
+ this.assertExternalLlmCallAllowed();
492
493
 
493
494
  // Structure messages for Azure based on context
494
495
  const azureMessages = this.structureMessagesFromContext(context);
@@ -29,6 +29,7 @@
29
29
  import { Observable, from, of, throwError } from 'rxjs';
30
30
  import { map, catchError } from 'rxjs/operators';
31
31
  import { createStrictValidator } from '../../../utils/validation.js';
32
+ import { assertExternalLlmCallAllowed } from '../LlmTestEnvironmentGuard.js';
32
33
  import {
33
34
  IMcpClient,
34
35
  McpClientConfig,
@@ -50,6 +51,9 @@ import {
50
51
  * Abstract base class for MCP client implementations
51
52
  */
52
53
  export abstract class BaseMcpClient implements IMcpClient {
54
+ /** Override only for providers guaranteed to stay on the local machine. */
55
+ protected isExternalLlmProvider = true;
56
+
53
57
  // Configuration for this client - initialize with empty defaults to satisfy TypeScript
54
58
  protected config: McpClientConfig = {
55
59
  apiKey: '',
@@ -121,6 +125,13 @@ export abstract class BaseMcpClient implements IMcpClient {
121
125
  tools?: McpTool[],
122
126
  options?: Record<string, any>
123
127
  ): Promise<McpApiResponse>;
128
+
129
+ /** Enforce the test-process paid/external LLM safety boundary. */
130
+ protected assertExternalLlmCallAllowed(): void {
131
+ if (this.isExternalLlmProvider) {
132
+ assertExternalLlmCallAllowed(this.constructor.name);
133
+ }
134
+ }
124
135
 
125
136
  /**
126
137
  * Send a message to the LLM
@@ -140,6 +151,8 @@ export abstract class BaseMcpClient implements IMcpClient {
140
151
  }
141
152
 
142
153
  try {
154
+ this.assertExternalLlmCallAllowed();
155
+
143
156
  // Validate messages array
144
157
  this.validator.assertIsArray(messages);
145
158
  if (messages.length === 0) {
@@ -200,6 +200,13 @@ export class CustomMcpClient extends BaseMcpClient {
200
200
  options?: Record<string, any>
201
201
  ): Observable<McpApiResponse> {
202
202
  return new Observable<McpApiResponse>(subscriber => {
203
+ try {
204
+ this.assertExternalLlmCallAllowed();
205
+ } catch (error) {
206
+ subscriber.error(error);
207
+ return;
208
+ }
209
+
203
210
  this.sendWithContextImpl(context, options)
204
211
  .then(response => {
205
212
  subscriber.next(response);
@@ -545,6 +545,8 @@ export class GeminiMcpClient extends BaseMcpClient {
545
545
  context: AgentContext,
546
546
  options?: Record<string, any>
547
547
  ): Promise<McpApiResponse> {
548
+ this.assertExternalLlmCallAllowed();
549
+
548
550
  if (!this.genAiClient) {
549
551
  throw new Error('Google Gen AI client not initialized');
550
552
  }
@@ -113,6 +113,8 @@ const logger = new Logger('debug', 'OllamaMcpClient', 'server');
113
113
  * Ollama MCP Client implementation
114
114
  */
115
115
  export class OllamaMcpClient extends BaseMcpClient {
116
+ protected isExternalLlmProvider = false;
117
+
116
118
  private baseUrl: string;
117
119
  private timeout: number;
118
120
 
@@ -561,4 +563,4 @@ export class OllamaMcpClient extends BaseMcpClient {
561
563
 
562
564
  return ollamaMsg;
563
565
  }
564
- }
566
+ }
@@ -601,6 +601,8 @@ export class OpenAiMcpClient extends BaseMcpClient {
601
601
  context: AgentContext,
602
602
  options?: Record<string, any>
603
603
  ): Promise<McpApiResponse> {
604
+ this.assertExternalLlmCallAllowed();
605
+
604
606
  // Structure messages for OpenAI based on context
605
607
  const openAiMessages = this.structureMessagesFromContext(context);
606
608
 
@@ -664,6 +664,7 @@ export class OpenRouterMcpClient extends BaseMcpClient {
664
664
  context: AgentContext,
665
665
  options?: Record<string, any>
666
666
  ): Promise<McpApiResponse> {
667
+ this.assertExternalLlmCallAllowed();
667
668
 
668
669
  // Structure messages for OpenRouter based on context (returns OpenRouter format)
669
670
  const openRouterMessages = this.structureMessagesFromContext(context);
@@ -729,6 +730,8 @@ export class OpenRouterMcpClient extends BaseMcpClient {
729
730
  options: Record<string, any>,
730
731
  onChunk: (chunk: McpStreamChunk) => void
731
732
  ): Promise<McpApiResponse> {
733
+ this.assertExternalLlmCallAllowed();
734
+
732
735
  // Structure and transform messages same as non-streaming path
733
736
  const openRouterMessages = this.structureMessagesFromContext(context);
734
737
  const converter = getMessageConverter('client');
@@ -426,6 +426,8 @@ export class XaiMcpClient extends BaseMcpClient {
426
426
  context: AgentContext,
427
427
  options?: Record<string, any>
428
428
  ): Promise<McpApiResponse> {
429
+ this.assertExternalLlmCallAllowed();
430
+
429
431
  // Structure messages for X.ai based on context
430
432
  const xaiMessages = this.structureMessagesFromContext(context);
431
433
 
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Fail-closed network policy for Puppeteer pages used by MXF web tools.
3
+ *
4
+ * Checking only the top-level URL is insufficient: redirects, scripts, images,
5
+ * frames, and fetch/XHR requests can each target a different host. Every browser
6
+ * request is therefore checked immediately before Puppeteer continues it.
7
+ */
8
+
9
+ import type { HTTPRequest, Page } from 'puppeteer';
10
+
11
+ import { checkHttpTarget } from './HttpTargetGuard.js';
12
+
13
+ const BROWSER_LOCAL_PROTOCOLS = new Set(['about:', 'blob:', 'data:']);
14
+
15
+ const isBrowserLocalUrl = (rawUrl: string): boolean => {
16
+ try {
17
+ return BROWSER_LOCAL_PROTOCOLS.has(new URL(rawUrl).protocol);
18
+ } catch {
19
+ return rawUrl === 'about:blank';
20
+ }
21
+ };
22
+
23
+ /** Reject a top-level browser target before allocating a browser or page. */
24
+ export const requireAllowedBrowserTarget = async (rawUrl: string): Promise<void> => {
25
+ const decision = await checkHttpTarget(rawUrl);
26
+ if (!decision.allowed) {
27
+ throw new Error(decision.reason ?? `Browser target '${rawUrl}' is not allowed`);
28
+ }
29
+ };
30
+
31
+ export const guardBrowserRequest = async (request: HTTPRequest): Promise<void> => {
32
+ if (request.isInterceptResolutionHandled()) {
33
+ return;
34
+ }
35
+
36
+ const rawUrl = request.url();
37
+ if (isBrowserLocalUrl(rawUrl)) {
38
+ await request.continue();
39
+ return;
40
+ }
41
+
42
+ const decision = await checkHttpTarget(rawUrl);
43
+ if (request.isInterceptResolutionHandled()) {
44
+ return;
45
+ }
46
+ if (!decision.allowed) {
47
+ await request.abort('blockedbyclient');
48
+ return;
49
+ }
50
+
51
+ await request.continue();
52
+ };
53
+
54
+ /** Install the target policy before the first navigation on a Puppeteer page. */
55
+ export const installBrowserTargetGuard = async (page: Page): Promise<void> => {
56
+ await page.setRequestInterception(true);
57
+ page.on('request', (request: HTTPRequest) => {
58
+ void guardBrowserRequest(request).catch(async () => {
59
+ if (!request.isInterceptResolutionHandled()) {
60
+ await request.abort('blockedbyclient');
61
+ }
62
+ }).catch(() => undefined);
63
+ });
64
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Policy for caller-supplied stdio MCP server registrations.
3
+ *
4
+ * A stdio registration is equivalent to asking the host to execute a command.
5
+ * It is therefore off by default and may only be exposed by a server entry
6
+ * point after that entry point has independently established an administrator
7
+ * principal. Built-in, server-owned configurations do not pass through this
8
+ * policy because their commands come from source-controlled configuration.
9
+ */
10
+
11
+ export const UNSAFE_STDIO_MCP_ENV = 'MXF_UNSAFE_STDIO_MCP_ENABLED';
12
+
13
+ /**
14
+ * True only for the exact, explicit opt-in value.
15
+ */
16
+ export const isUnsafeStdioMcpEnabled = (): boolean => {
17
+ return process.env[UNSAFE_STDIO_MCP_ENV] === 'true';
18
+ };
19
+
20
+ /**
21
+ * External server payloads historically omitted transport and were treated as
22
+ * stdio, so an absent transport must remain on the dangerous side of the gate.
23
+ */
24
+ export const isStdioMcpTransport = (transport: unknown): boolean => {
25
+ return transport === undefined || transport === null || transport === '' || transport === 'stdio';
26
+ };
27
+
28
+ /**
29
+ * Fail closed when a caller-controlled registration would execute a process.
30
+ */
31
+ export const assertUnsafeStdioMcpEnabled = (transport: unknown): void => {
32
+ if (isStdioMcpTransport(transport) && !isUnsafeStdioMcpEnabled()) {
33
+ throw new Error(
34
+ `Caller-supplied stdio MCP registration is disabled. ` +
35
+ `An administrator must explicitly set ${UNSAFE_STDIO_MCP_ENV}=true to expose this unsafe capability.`
36
+ );
37
+ }
38
+ };