@memberjunction/server 6.2.0-edge.0 → 6.2.0-edge.1

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 (403) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/agentSessions/ReturningVisitorRecap.d.ts +2 -0
  3. package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
  4. package/dist/agentSessions/ReturningVisitorRecap.js +5 -1
  5. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  6. package/dist/agentSessions/SessionManager.js +2 -2
  7. package/dist/agentSessions/remoteBrowserGoalEngine.d.ts +8 -0
  8. package/dist/agentSessions/remoteBrowserGoalEngine.d.ts.map +1 -1
  9. package/dist/agentSessions/remoteBrowserGoalEngine.js +21 -5
  10. package/dist/agentSessions/remoteBrowserGoalEngine.js.map +1 -1
  11. package/dist/auth/AuthProviderCatalogRouter.d.ts +2 -0
  12. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  13. package/dist/auth/AuthProviderCatalogRouter.js +5 -1
  14. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  15. package/dist/auth/index.d.ts +20 -1
  16. package/dist/auth/index.d.ts.map +1 -1
  17. package/dist/auth/index.js +20 -10
  18. package/dist/auth/index.js.map +1 -1
  19. package/dist/auth/initializeProviders.d.ts +8 -0
  20. package/dist/auth/initializeProviders.d.ts.map +1 -1
  21. package/dist/auth/initializeProviders.js +21 -5
  22. package/dist/auth/initializeProviders.js.map +1 -1
  23. package/dist/auth/magicLink/MagicLinkRouter.d.ts +9 -0
  24. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  25. package/dist/auth/magicLink/MagicLinkRouter.js +22 -10
  26. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  27. package/dist/auth/magicLink/MagicLinkService.d.ts +17 -15
  28. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  29. package/dist/auth/magicLink/MagicLinkService.js +65 -51
  30. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  31. package/dist/auth/magicLink/index.d.ts +2 -2
  32. package/dist/auth/magicLink/index.d.ts.map +1 -1
  33. package/dist/auth/magicLink/index.js +2 -2
  34. package/dist/auth/magicLink/index.js.map +1 -1
  35. package/dist/auth/magicLink/magicLinkCore.d.ts +54 -33
  36. package/dist/auth/magicLink/magicLinkCore.d.ts.map +1 -1
  37. package/dist/auth/magicLink/magicLinkCore.js +61 -61
  38. package/dist/auth/magicLink/magicLinkCore.js.map +1 -1
  39. package/dist/auth/magicLink/redeemLanding.d.ts +4 -0
  40. package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
  41. package/dist/auth/magicLink/redeemLanding.js +12 -4
  42. package/dist/auth/magicLink/redeemLanding.js.map +1 -1
  43. package/dist/auth/magicLink/types.d.ts +4 -4
  44. package/dist/auth/principals.d.ts +2 -0
  45. package/dist/auth/principals.d.ts.map +1 -1
  46. package/dist/auth/principals.js +6 -2
  47. package/dist/auth/principals.js.map +1 -1
  48. package/dist/cache.d.ts +2 -0
  49. package/dist/cache.d.ts.map +1 -1
  50. package/dist/cache.js +3 -1
  51. package/dist/cache.js.map +1 -1
  52. package/dist/config.d.ts +346 -2
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +34 -4
  55. package/dist/config.js.map +1 -1
  56. package/dist/context.d.ts +20 -0
  57. package/dist/context.d.ts.map +1 -1
  58. package/dist/context.js +27 -19
  59. package/dist/context.js.map +1 -1
  60. package/dist/directives/Public.d.ts +2 -0
  61. package/dist/directives/Public.d.ts.map +1 -1
  62. package/dist/directives/Public.js +3 -1
  63. package/dist/directives/Public.js.map +1 -1
  64. package/dist/directives/RequireSystemUser.d.ts +2 -0
  65. package/dist/directives/RequireSystemUser.d.ts.map +1 -1
  66. package/dist/directives/RequireSystemUser.js +3 -1
  67. package/dist/directives/RequireSystemUser.js.map +1 -1
  68. package/dist/generated/graphql-schemas/__mj.d.ts +11 -0
  69. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  70. package/dist/generated/graphql-schemas/__mj.js +48 -0
  71. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  72. package/dist/generic/CacheInvalidationResolver.d.ts +94 -4
  73. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  74. package/dist/generic/CacheInvalidationResolver.js +122 -3
  75. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  76. package/dist/generic/DeleteOptionsInput.d.ts +8 -1
  77. package/dist/generic/DeleteOptionsInput.d.ts.map +1 -1
  78. package/dist/generic/DeleteOptionsInput.js +1 -1
  79. package/dist/generic/DeleteOptionsInput.js.map +1 -1
  80. package/dist/generic/FireAndForgetHeartbeat.d.ts +3 -1
  81. package/dist/generic/FireAndForgetHeartbeat.d.ts.map +1 -1
  82. package/dist/generic/FireAndForgetHeartbeat.js +8 -4
  83. package/dist/generic/FireAndForgetHeartbeat.js.map +1 -1
  84. package/dist/generic/PushStatusResolver.d.ts +10 -1
  85. package/dist/generic/PushStatusResolver.d.ts.map +1 -1
  86. package/dist/generic/PushStatusResolver.js +11 -3
  87. package/dist/generic/PushStatusResolver.js.map +1 -1
  88. package/dist/generic/ResolverBase.d.ts +5 -1
  89. package/dist/generic/ResolverBase.d.ts.map +1 -1
  90. package/dist/generic/ResolverBase.js +15 -8
  91. package/dist/generic/ResolverBase.js.map +1 -1
  92. package/dist/index.d.ts +6 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +30 -9
  95. package/dist/index.js.map +1 -1
  96. package/dist/integration/CustomColumnPromoter.d.ts +2 -0
  97. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  98. package/dist/integration/CustomColumnPromoter.js +5 -1
  99. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  100. package/dist/integration/EntityMapLifecycle.d.ts +4 -0
  101. package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
  102. package/dist/integration/EntityMapLifecycle.js +10 -2
  103. package/dist/integration/EntityMapLifecycle.js.map +1 -1
  104. package/dist/logging/NoLog.d.ts +4 -0
  105. package/dist/logging/NoLog.d.ts.map +1 -1
  106. package/dist/logging/NoLog.js +10 -2
  107. package/dist/logging/NoLog.js.map +1 -1
  108. package/dist/logging/StartupLogger.d.ts +2 -0
  109. package/dist/logging/StartupLogger.d.ts.map +1 -1
  110. package/dist/logging/StartupLogger.js +5 -1
  111. package/dist/logging/StartupLogger.js.map +1 -1
  112. package/dist/logging/bootAudit.d.ts +11 -7
  113. package/dist/logging/bootAudit.d.ts.map +1 -1
  114. package/dist/logging/bootAudit.js +15 -7
  115. package/dist/logging/bootAudit.js.map +1 -1
  116. package/dist/logging/boundaryLogPayload.d.ts +4 -0
  117. package/dist/logging/boundaryLogPayload.d.ts.map +1 -1
  118. package/dist/logging/boundaryLogPayload.js +5 -1
  119. package/dist/logging/boundaryLogPayload.js.map +1 -1
  120. package/dist/logging/secretRedactor.d.ts +2 -0
  121. package/dist/logging/secretRedactor.d.ts.map +1 -1
  122. package/dist/logging/secretRedactor.js +8 -4
  123. package/dist/logging/secretRedactor.js.map +1 -1
  124. package/dist/logging/shortenForLog.d.ts +2 -0
  125. package/dist/logging/shortenForLog.d.ts.map +1 -1
  126. package/dist/logging/shortenForLog.js +7 -3
  127. package/dist/logging/shortenForLog.js.map +1 -1
  128. package/dist/logging/variablesLoggingMiddleware.d.ts +2 -0
  129. package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
  130. package/dist/logging/variablesLoggingMiddleware.js +8 -6
  131. package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
  132. package/dist/metadataRefreshSignal.d.ts +19 -0
  133. package/dist/metadataRefreshSignal.d.ts.map +1 -0
  134. package/dist/metadataRefreshSignal.js +45 -0
  135. package/dist/metadataRefreshSignal.js.map +1 -0
  136. package/dist/middleware/MJTenantFilterMiddleware.js +4 -4
  137. package/dist/multiTenancy/index.d.ts +8 -0
  138. package/dist/multiTenancy/index.d.ts.map +1 -1
  139. package/dist/multiTenancy/index.js +21 -5
  140. package/dist/multiTenancy/index.js.map +1 -1
  141. package/dist/realtimeWidget/WidgetRouter.d.ts +5 -0
  142. package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
  143. package/dist/realtimeWidget/WidgetRouter.js +14 -10
  144. package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
  145. package/dist/realtimeWidget/WidgetSessionService.d.ts +6 -6
  146. package/dist/realtimeWidget/WidgetSessionService.js +27 -27
  147. package/dist/realtimeWidget/host-identity.d.ts +5 -1
  148. package/dist/realtimeWidget/host-identity.d.ts.map +1 -1
  149. package/dist/realtimeWidget/host-identity.js +11 -3
  150. package/dist/realtimeWidget/host-identity.js.map +1 -1
  151. package/dist/realtimeWidget/index.d.ts +2 -2
  152. package/dist/realtimeWidget/index.d.ts.map +1 -1
  153. package/dist/realtimeWidget/index.js +2 -2
  154. package/dist/realtimeWidget/index.js.map +1 -1
  155. package/dist/realtimeWidget/visitorIdentity.d.ts +21 -1
  156. package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
  157. package/dist/realtimeWidget/visitorIdentity.js +16 -4
  158. package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
  159. package/dist/realtimeWidget/widgetCore.d.ts +48 -0
  160. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  161. package/dist/realtimeWidget/widgetCore.js +38 -10
  162. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  163. package/dist/realtimeWidget/widgetGuestElevation.d.ts +10 -6
  164. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  165. package/dist/realtimeWidget/widgetGuestElevation.js +14 -6
  166. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  167. package/dist/resolvers/AdhocQueryResolver.js +3 -3
  168. package/dist/resolvers/FileResolver.js +3 -3
  169. package/dist/resolvers/GeoResolver.d.ts +2 -2
  170. package/dist/resolvers/GeoResolver.js +4 -4
  171. package/dist/resolvers/GetDataResolver.d.ts +14 -0
  172. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  173. package/dist/resolvers/GetDataResolver.js +43 -15
  174. package/dist/resolvers/GetDataResolver.js.map +1 -1
  175. package/dist/resolvers/IntegrationDiscoveryResolver.js +2 -2
  176. package/dist/resolvers/ListOperationsResolver.d.ts +20 -0
  177. package/dist/resolvers/ListOperationsResolver.d.ts.map +1 -1
  178. package/dist/resolvers/ListOperationsResolver.js +68 -28
  179. package/dist/resolvers/ListOperationsResolver.js.map +1 -1
  180. package/dist/resolvers/MCPResolver.d.ts +11 -1
  181. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  182. package/dist/resolvers/MCPResolver.js +7 -3
  183. package/dist/resolvers/MCPResolver.js.map +1 -1
  184. package/dist/resolvers/RealtimeBridgeResolver.js +3 -3
  185. package/dist/resolvers/RealtimeClientSessionResolver.js +3 -3
  186. package/dist/resolvers/RemoteBrowserActionResolver.js +5 -5
  187. package/dist/resolvers/RunAIAgentResolver.d.ts +10 -4
  188. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  189. package/dist/resolvers/RunAIAgentResolver.js +69 -38
  190. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  191. package/dist/resolvers/RunAIPromptResolver.d.ts +1 -1
  192. package/dist/resolvers/RunAIPromptResolver.js +2 -2
  193. package/dist/resolvers/RunTestResolver.js +5 -5
  194. package/dist/resolvers/SqlLoggingConfigResolver.d.ts +8 -4
  195. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  196. package/dist/resolvers/SqlLoggingConfigResolver.js +5 -5
  197. package/dist/resolvers/TaskGraphFrameResolver.d.ts +8 -1
  198. package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
  199. package/dist/resolvers/TaskGraphFrameResolver.js +6 -2
  200. package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
  201. package/dist/resolvers/adhoc-query-helpers.d.ts +6 -0
  202. package/dist/resolvers/adhoc-query-helpers.d.ts.map +1 -1
  203. package/dist/resolvers/adhoc-query-helpers.js +10 -2
  204. package/dist/resolvers/adhoc-query-helpers.js.map +1 -1
  205. package/dist/resolvers/artifact-routing.d.ts +8 -8
  206. package/dist/resolvers/artifact-routing.js +2 -2
  207. package/dist/resolvers/artifact-routing.js.map +1 -1
  208. package/dist/resolvers/meetingRecordingRegistration.d.ts +10 -2
  209. package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
  210. package/dist/resolvers/meetingRecordingRegistration.js +24 -8
  211. package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
  212. package/dist/resolvers/peaksSidecar.d.ts +4 -0
  213. package/dist/resolvers/peaksSidecar.d.ts.map +1 -1
  214. package/dist/resolvers/peaksSidecar.js +10 -2
  215. package/dist/resolvers/peaksSidecar.js.map +1 -1
  216. package/dist/rest/EntityCRUDHandler.d.ts +28 -0
  217. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  218. package/dist/rest/EntityCRUDHandler.js +20 -4
  219. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  220. package/dist/rest/MediaStreamHandler.d.ts +2 -0
  221. package/dist/rest/MediaStreamHandler.d.ts.map +1 -1
  222. package/dist/rest/MediaStreamHandler.js +10 -6
  223. package/dist/rest/MediaStreamHandler.js.map +1 -1
  224. package/dist/rest/OAuthCallbackHandler.d.ts +9 -0
  225. package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
  226. package/dist/rest/OAuthCallbackHandler.js +15 -3
  227. package/dist/rest/OAuthCallbackHandler.js.map +1 -1
  228. package/dist/rest/RESTEndpointHandler.d.ts +6 -4
  229. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  230. package/dist/rest/RESTEndpointHandler.js +15 -11
  231. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  232. package/dist/rest/RealtimeSdpBrokerHandler.d.ts +5 -1
  233. package/dist/rest/RealtimeSdpBrokerHandler.d.ts.map +1 -1
  234. package/dist/rest/RealtimeSdpBrokerHandler.js +12 -4
  235. package/dist/rest/RealtimeSdpBrokerHandler.js.map +1 -1
  236. package/dist/rest/SignatureWebhookHandler.d.ts +2 -0
  237. package/dist/rest/SignatureWebhookHandler.d.ts.map +1 -1
  238. package/dist/rest/SignatureWebhookHandler.js +5 -1
  239. package/dist/rest/SignatureWebhookHandler.js.map +1 -1
  240. package/dist/rest/UploadTokenManager.d.ts +24 -8
  241. package/dist/rest/UploadTokenManager.d.ts.map +1 -1
  242. package/dist/rest/UploadTokenManager.js +53 -21
  243. package/dist/rest/UploadTokenManager.js.map +1 -1
  244. package/dist/rest/ViewOperationsHandler.d.ts +20 -0
  245. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  246. package/dist/rest/ViewOperationsHandler.js +20 -4
  247. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  248. package/dist/rest/mediaRange.d.ts +4 -0
  249. package/dist/rest/mediaRange.d.ts.map +1 -1
  250. package/dist/rest/mediaRange.js +10 -2
  251. package/dist/rest/mediaRange.js.map +1 -1
  252. package/dist/rest/setupRESTEndpoints.d.ts +4 -0
  253. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  254. package/dist/rest/setupRESTEndpoints.js +13 -7
  255. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  256. package/dist/serverExtensionReservedRoots.d.ts +2 -0
  257. package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
  258. package/dist/serverExtensionReservedRoots.js +5 -1
  259. package/dist/serverExtensionReservedRoots.js.map +1 -1
  260. package/dist/services/TaskGraphActionRunner.d.ts +13 -8
  261. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  262. package/dist/services/TaskGraphActionRunner.js +16 -15
  263. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  264. package/dist/types.d.ts +2 -0
  265. package/dist/types.d.ts.map +1 -1
  266. package/dist/types.js +7 -3
  267. package/dist/types.js.map +1 -1
  268. package/dist/util.d.ts +6 -0
  269. package/dist/util.d.ts.map +1 -1
  270. package/dist/util.js +13 -5
  271. package/dist/util.js.map +1 -1
  272. package/package.json +92 -92
  273. package/src/__tests__/DeleteOptionsInput.wireShape.test.ts +62 -0
  274. package/src/__tests__/FileResolverPeaks.test.ts +13 -13
  275. package/src/__tests__/ListOperationsResolver.test.ts +17 -17
  276. package/src/__tests__/MediaStreamHandler.test.ts +28 -28
  277. package/src/__tests__/NoLog.test.ts +11 -11
  278. package/src/__tests__/PrimaryKeyAlwaysMapped.test.ts +10 -10
  279. package/src/__tests__/RESTEndpointHandler.test.ts +14 -14
  280. package/src/__tests__/RealtimeBridgeResolver.test.ts +4 -2
  281. package/src/__tests__/RealtimeSdpBrokerHandler.test.ts +6 -6
  282. package/src/__tests__/RefreshAdoptsNewColumns.test.ts +8 -8
  283. package/src/__tests__/RemoteBrowserGoalEngine.test.ts +18 -18
  284. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +228 -0
  285. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +129 -0
  286. package/src/__tests__/TaskGraphFrameResolver.test.ts +2 -2
  287. package/src/__tests__/WidgetSessionService.test.ts +8 -4
  288. package/src/__tests__/adhoc-query-helpers.test.ts +21 -21
  289. package/src/__tests__/bootAudit.test.ts +11 -11
  290. package/src/__tests__/boundaryLogPayload.test.ts +6 -6
  291. package/src/__tests__/cacheInvalidationRecordData.test.ts +177 -0
  292. package/src/__tests__/databaseAbstraction.test.ts +12 -6
  293. package/src/__tests__/getDataTokenRedaction.test.ts +7 -7
  294. package/src/__tests__/initializeProviders.refresh.test.ts +4 -4
  295. package/src/__tests__/magicLink.test.ts +73 -134
  296. package/src/__tests__/magicLinkService.consume.test.ts +224 -0
  297. package/src/__tests__/meetingRecordingRegistration.test.ts +12 -12
  298. package/src/__tests__/metadataRefreshSignal.test.ts +78 -0
  299. package/src/__tests__/multiTenancy.security.test.ts +40 -40
  300. package/src/__tests__/multiTenancy.test.ts +18 -18
  301. package/src/__tests__/newUsers.test.ts +24 -23
  302. package/src/__tests__/principals.test.ts +22 -22
  303. package/src/__tests__/pushStatusResolver.filter.test.ts +8 -8
  304. package/src/__tests__/secretRedactor.failOpen.test.ts +12 -12
  305. package/src/__tests__/secretRedactor.test.ts +12 -12
  306. package/src/__tests__/serverExtensionReservedRoots.test.ts +7 -7
  307. package/src/__tests__/subscriptionRedaction.test.ts +5 -5
  308. package/src/__tests__/unifiedAuth.test.ts +15 -9
  309. package/src/__tests__/visitorIdentity.resolve.test.ts +6 -6
  310. package/src/__tests__/widget.test.ts +45 -45
  311. package/src/__tests__/widgetGuestElevation.test.ts +7 -7
  312. package/src/__tests__/widgetHostIdentity.test.ts +14 -14
  313. package/src/agentSessions/ReturningVisitorRecap.ts +12 -1
  314. package/src/agentSessions/SessionManager.ts +2 -2
  315. package/src/agentSessions/remoteBrowserGoalEngine.ts +30 -5
  316. package/src/auth/AuthProviderCatalogRouter.ts +6 -1
  317. package/src/auth/__tests__/backward-compatibility.test.ts +3 -3
  318. package/src/auth/index.ts +43 -28
  319. package/src/auth/initializeProviders.ts +25 -5
  320. package/src/auth/magicLink/MagicLinkRouter.ts +28 -10
  321. package/src/auth/magicLink/MagicLinkService.ts +71 -52
  322. package/src/auth/magicLink/index.ts +7 -7
  323. package/src/auth/magicLink/magicLinkCore.ts +96 -64
  324. package/src/auth/magicLink/redeemLanding.ts +14 -4
  325. package/src/auth/magicLink/types.ts +54 -54
  326. package/src/auth/newUsers.ts +1 -1
  327. package/src/auth/principals.ts +11 -2
  328. package/src/cache.ts +4 -1
  329. package/src/config.ts +37 -4
  330. package/src/context.ts +37 -24
  331. package/src/directives/Public.ts +4 -1
  332. package/src/directives/RequireSystemUser.ts +4 -1
  333. package/src/generated/graphql-schemas/__mj.ts +37 -0
  334. package/src/generic/CacheInvalidationResolver.ts +148 -4
  335. package/src/generic/DeleteOptionsInput.ts +9 -2
  336. package/src/generic/FireAndForgetHeartbeat.ts +19 -14
  337. package/src/generic/PushStatusResolver.ts +21 -7
  338. package/src/generic/ResolverBase.ts +16 -8
  339. package/src/generic/RunViewResolver.ts +22 -22
  340. package/src/generic/__tests__/FireAndForgetHeartbeat.test.ts +7 -7
  341. package/src/index.ts +35 -9
  342. package/src/integration/CustomColumnPromoter.ts +6 -1
  343. package/src/integration/EntityMapLifecycle.ts +20 -2
  344. package/src/logging/NoLog.ts +16 -2
  345. package/src/logging/StartupLogger.ts +6 -1
  346. package/src/logging/bootAudit.ts +26 -16
  347. package/src/logging/boundaryLogPayload.ts +8 -1
  348. package/src/logging/secretRedactor.ts +14 -9
  349. package/src/logging/shortenForLog.ts +8 -3
  350. package/src/logging/variablesLoggingMiddleware.ts +9 -6
  351. package/src/metadataRefreshSignal.ts +45 -0
  352. package/src/middleware/MJTenantFilterMiddleware.ts +4 -4
  353. package/src/multiTenancy/index.ts +29 -5
  354. package/src/realtimeWidget/WidgetRouter.ts +15 -10
  355. package/src/realtimeWidget/WidgetSessionService.ts +76 -76
  356. package/src/realtimeWidget/host-identity.ts +24 -10
  357. package/src/realtimeWidget/index.ts +3 -3
  358. package/src/realtimeWidget/visitorIdentity.ts +39 -8
  359. package/src/realtimeWidget/widgetCore.ts +75 -10
  360. package/src/realtimeWidget/widgetGuestElevation.ts +25 -12
  361. package/src/resolvers/AdhocQueryResolver.ts +3 -3
  362. package/src/resolvers/AgentSessionResolver.ts +3 -3
  363. package/src/resolvers/ColorResolver.ts +6 -6
  364. package/src/resolvers/ComponentRegistryResolver.ts +36 -36
  365. package/src/resolvers/EntityCommunicationsResolver.ts +4 -4
  366. package/src/resolvers/ExecuteRemoteOperationResolver.ts +9 -9
  367. package/src/resolvers/FileResolver.ts +42 -42
  368. package/src/resolvers/GeoResolver.ts +4 -4
  369. package/src/resolvers/GetDataResolver.ts +50 -15
  370. package/src/resolvers/IntegrationDiscoveryResolver.ts +2 -2
  371. package/src/resolvers/ListOperationsResolver.ts +78 -28
  372. package/src/resolvers/MCPResolver.ts +30 -15
  373. package/src/resolvers/QueryResolver.ts +13 -13
  374. package/src/resolvers/RealtimeBridgeResolver.ts +3 -3
  375. package/src/resolvers/RealtimeClientSessionResolver.ts +3 -3
  376. package/src/resolvers/RemoteBrowserActionResolver.ts +5 -5
  377. package/src/resolvers/RunAIAgentResolver.ts +113 -72
  378. package/src/resolvers/RunAIPromptResolver.ts +22 -22
  379. package/src/resolvers/RunTemplateResolver.ts +4 -4
  380. package/src/resolvers/RunTestResolver.ts +25 -25
  381. package/src/resolvers/SqlLoggingConfigResolver.ts +56 -56
  382. package/src/resolvers/TaskGraphFrameResolver.ts +37 -28
  383. package/src/resolvers/TelemetryResolver.ts +79 -79
  384. package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +40 -38
  385. package/src/resolvers/__tests__/artifact-routing.test.ts +23 -23
  386. package/src/resolvers/adhoc-query-helpers.ts +19 -2
  387. package/src/resolvers/artifact-routing.ts +19 -19
  388. package/src/resolvers/meetingRecordingRegistration.ts +44 -10
  389. package/src/resolvers/peaksSidecar.ts +12 -2
  390. package/src/rest/EntityCRUDHandler.ts +24 -4
  391. package/src/rest/MediaStreamHandler.ts +11 -6
  392. package/src/rest/OAuthCallbackHandler.ts +25 -7
  393. package/src/rest/RESTEndpointHandler.ts +20 -15
  394. package/src/rest/RealtimeSdpBrokerHandler.ts +14 -4
  395. package/src/rest/SignatureWebhookHandler.ts +6 -1
  396. package/src/rest/UploadTokenManager.ts +66 -30
  397. package/src/rest/ViewOperationsHandler.ts +24 -4
  398. package/src/rest/mediaRange.ts +16 -6
  399. package/src/rest/setupRESTEndpoints.ts +24 -12
  400. package/src/serverExtensionReservedRoots.ts +6 -1
  401. package/src/services/TaskGraphActionRunner.ts +16 -15
  402. package/src/types.ts +21 -16
  403. package/src/util.ts +16 -6
@@ -20,7 +20,7 @@ import { CreateBridgeRealtimeSession, FinalizeBridgeCoAgentRuns, GetRealtimeMode
20
20
  import { AIBridgeEngine } from '@memberjunction/ai-bridge-server';
21
21
  import { SessionManager } from '../agentSessions/SessionManager.js';
22
22
  import { NotificationEngine } from '@memberjunction/notifications';
23
- import { registerMeetingRecordingFile, correlateRecordingStart } from './meetingRecordingRegistration.js';
23
+ import { RegisterMeetingRecordingFile, CorrelateRecordingStart } from './meetingRecordingRegistration.js';
24
24
  /**
25
25
  * Binds the agent realtime-session factory onto the LiveKit room coordinator's model-session creation seam.
26
26
  * Module-load side effect — it runs when MJServer builds its GraphQL schema (which imports this resolver),
@@ -477,7 +477,7 @@ let RealtimeBridgeResolver = class RealtimeBridgeResolver extends ResolverBase {
477
477
  // Best-effort: correlate the live recording with the room's Meeting-Room Conversation (if it exists
478
478
  // yet) by stamping its EgressID. Never fail the start on this — the stop-flow resolves/creates it.
479
479
  const provider = GetReadWriteProvider(context.providers);
480
- void correlateRecordingStart(input.RoomName, info.EgressID, user, provider);
480
+ void CorrelateRecordingStart(input.RoomName, info.EgressID, user, provider);
481
481
  return { Success: true, EgressID: info.EgressID, Status: info.Status };
482
482
  }
483
483
  catch (error) {
@@ -503,7 +503,7 @@ let RealtimeBridgeResolver = class RealtimeBridgeResolver extends ResolverBase {
503
503
  // Register the completed egress MP4 as a Files row on the Meeting-Room Conversation. Best-effort:
504
504
  // any failure (e.g. storage provider not configured) leaves RecordingFileID unset but still
505
505
  // returns the successful stop result.
506
- const registration = await registerMeetingRecordingFile({ EgressID: info.EgressID, RoomName: info.RoomName, OutputLocation: info.OutputLocation, OutputSizeBytes: info.OutputSizeBytes }, user, provider);
506
+ const registration = await RegisterMeetingRecordingFile({ EgressID: info.EgressID, RoomName: info.RoomName, OutputLocation: info.OutputLocation, OutputSizeBytes: info.OutputSizeBytes }, user, provider);
507
507
  if (!registration.Success) {
508
508
  LogError(`StopLiveKitRecording: recording stopped but registration did not complete: ${registration.ErrorMessage ?? 'unknown'}`);
509
509
  }
@@ -45,7 +45,7 @@ import { RealtimeClientSessionService, RealtimeChannelServerHost, EvaluateRuntim
45
45
  import { ResolverBase } from '../generic/ResolverBase.js';
46
46
  import { GetReadWriteProvider } from '../util.js';
47
47
  import { SessionManager } from '../agentSessions/index.js';
48
- import { resolveWidgetGuestRunContext, ResolveScopedAnonymousRunUser } from '../realtimeWidget/widgetGuestElevation.js';
48
+ import { ResolveWidgetGuestRunContext, ResolveScopedAnonymousRunUser } from '../realtimeWidget/widgetGuestElevation.js';
49
49
  /**
50
50
  * Progress steps worth narrating to the realtime model — mirrors the normal agent-run path's filter
51
51
  * in {@link import('./RunAIAgentResolver.js').RunAIAgentResolver}. Initialization/validation/finalization
@@ -2060,8 +2060,8 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
2060
2060
  * than blocking the start.
2061
2061
  */
2062
2062
  async resolveWidgetVoiceCapSeconds(userPayload, providers) {
2063
- const elevation = await resolveWidgetGuestRunContext(userPayload, GetReadWriteProvider(providers));
2064
- const minutes = elevation?.widget.VoiceMaxSessionMinutes;
2063
+ const elevation = await ResolveWidgetGuestRunContext(userPayload, GetReadWriteProvider(providers));
2064
+ const minutes = elevation?.Widget.VoiceMaxSessionMinutes;
2065
2065
  return minutes && minutes > 0 ? minutes * 60 : undefined;
2066
2066
  }
2067
2067
  /**
@@ -32,7 +32,7 @@ import { Resolver, Mutation, Query, Arg, Ctx, Float, Int, ObjectType, Field, Pub
32
32
  import { LogError } from '@memberjunction/core';
33
33
  import { UUIDsEqual } from '@memberjunction/global';
34
34
  import { NormalizeInstanceKey, RemoteBrowserEngine } from '@memberjunction/remote-browser-server';
35
- import { beginBrowserGoalStep, finalizeBrowserGoalStep, extractCoAgentRunID } from '../agentSessions/remoteBrowserGoalEngine.js';
35
+ import { BeginBrowserGoalStep, FinalizeBrowserGoalStep, ExtractCoAgentRunID } from '../agentSessions/remoteBrowserGoalEngine.js';
36
36
  import { RemoteBrowserGoalRegistry } from '../agentSessions/remoteBrowserGoalRegistry.js';
37
37
  import { randomUUID } from 'node:crypto';
38
38
  import { RemoteBrowserCapabilityNotSupportedError, } from '@memberjunction/remote-browser-base';
@@ -377,8 +377,8 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
377
377
  const providerName = await this.resolveProviderName(session, contextUser, provider);
378
378
  // Observability: nest this goal's many prompt runs under ONE "Browser goal" step on the realtime
379
379
  // co-agent run (when the session has one). Best-effort — a null step just means the goal runs unlinked.
380
- const coAgentRunID = extractCoAgentRunID(session.Config_);
381
- const goalStep = await beginBrowserGoalStep(provider, contextUser, coAgentRunID, goal);
380
+ const coAgentRunID = ExtractCoAgentRunID(session.Config_);
381
+ const goalStep = await BeginBrowserGoalStep(provider, contextUser, coAgentRunID, goal);
382
382
  // ASYNC START: a goal loop can run for minutes; do NOT hold this request open for it (browser
383
383
  // fetch / proxy / janitor timeouts would kill the request while the loop runs on, and the agent
384
384
  // would get "no response from the server" despite a successful run). Register the run, kick the
@@ -396,14 +396,14 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
396
396
  AgentRunStepID: goalStep?.ID,
397
397
  })
398
398
  .then(async (result) => {
399
- await finalizeBrowserGoalStep(goalStep, result);
399
+ await FinalizeBrowserGoalStep(goalStep, result);
400
400
  RemoteBrowserGoalRegistry.Instance.Complete(agentSessionID, goalRunID, result);
401
401
  })
402
402
  .catch(async (err) => {
403
403
  const message = err instanceof Error ? err.message : String(err);
404
404
  LogError(`ExecuteRemoteBrowserGoal failed (provider='${providerName}'): ${message}`);
405
405
  const failure = { Success: false, Status: 'Error', Detail: `Remote browser error (${providerName}): ${message}` };
406
- await finalizeBrowserGoalStep(goalStep, failure);
406
+ await FinalizeBrowserGoalStep(goalStep, failure);
407
407
  RemoteBrowserGoalRegistry.Instance.Complete(agentSessionID, goalRunID, failure);
408
408
  });
409
409
  return { Success: true, Status: 'Running', GoalRunID: goalRunID, Detail: 'Goal started.' };
@@ -79,8 +79,8 @@ export declare class RunAIAgentResolver extends ResolverBase {
79
79
  * Create streaming progress callback
80
80
  */
81
81
  private createProgressCallback;
82
- private PublishProgressUpdate;
83
- private PublishStreamingUpdate;
82
+ private publishProgressUpdate;
83
+ private publishStreamingUpdate;
84
84
  /**
85
85
  * Create streaming content callback
86
86
  */
@@ -156,7 +156,13 @@ export declare class RunAIAgentResolver extends ResolverBase {
156
156
  * @param agentId - The agent to execute
157
157
  * @param maxHistoryMessages - Maximum number of history messages to include (default: 20)
158
158
  */
159
- RunAIAgentFromConversationDetail(conversationDetailId: string, agentId: string, { userPayload, providers, dataSource }: AppContext, sessionId: string, pubSub: PubSubEngine, maxHistoryMessages?: number, data?: string, payload?: string, lastRunId?: string, autoPopulateLastRunPayload?: boolean, configurationId?: string, createArtifacts?: boolean, createNotification?: boolean, sourceArtifactId?: string, sourceArtifactVersionId?: string, fireAndForget?: boolean, planMode?: boolean, requestedSkillIDs?: string[]): Promise<AIAgentRunResult>;
159
+ RunAIAgentFromConversationDetail(conversationDetailId: string, agentId: string, { userPayload, providers, dataSource }: AppContext, sessionId: string, pubSub: PubSubEngine, maxHistoryMessages?: number, data?: string, payload?: string, lastRunId?: string, autoPopulateLastRunPayload?: boolean, configurationId?: string, createArtifacts?: boolean, createNotification?: boolean, sourceArtifactId?: string, sourceArtifactVersionId?: string, fireAndForget?: boolean, planMode?: boolean, requestedSkillIDs?: string[],
160
+ /** History floor: an ISO-8601 timestamp, the first moment of the conversation this run may
161
+ * read. The history is loaded from there and no summary of earlier messages is used, and the
162
+ * run's own conversation reads honour it too. Omitted (clients send it only when set, so an
163
+ * older client never does), the run reads the whole conversation as before. An unreadable
164
+ * value fails the request rather than being dropped. */
165
+ agentHistoryFrom?: string): Promise<AIAgentRunResult>;
160
166
  /**
161
167
  * Respond to a pending AIAgentRequest from the dashboard or API.
162
168
  * Updates the request record with the response and optionally spawns a
@@ -189,7 +195,7 @@ export declare class RunAIAgentResolver extends ResolverBase {
189
195
  *
190
196
  * Opt #8: Switched from ResultType 'entity_object' to 'simple' with explicit Fields.
191
197
  * The history query only needs the window-assembly fields (ConversationWindowFields:
192
- * ID, Sequence, Role, Message, SummaryOfEarlierConversation) from each
198
+ * ID, Sequence, Role, Message, SummaryOfEarlierConversation, __mj_CreatedAt) from each
193
199
  * ConversationDetail record. Using 'entity_object' created full BaseEntity instances
194
200
  * with getters/setters, dirty tracking, and validation — none of which are needed for
195
201
  * read-only history assembly. The 'simple' result type returns plain JS objects,
@@ -1 +1 @@
1
- {"version":3,"file":"RunAIAgentResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/RunAIAgentResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RunAIAgentResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/RunAIAgentResolver.ts"],"names":[],"mappings":"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"}
@@ -18,10 +18,10 @@ import { AgentRunner, ArtifactToolManager } from '@memberjunction/ai-agents';
18
18
  import { ConversationUtility } from '@memberjunction/ai-core-plus';
19
19
  import { AIEngine } from '@memberjunction/aiengine';
20
20
  import { ResolverBase } from '../generic/ResolverBase.js';
21
- import { startLivenessPulse } from '../generic/FireAndForgetHeartbeat.js';
21
+ import { StartLivenessPulse } from '../generic/FireAndForgetHeartbeat.js';
22
22
  import { RequireSystemUser } from '../directives/RequireSystemUser.js';
23
23
  import { GetReadWriteProvider } from '../util.js';
24
- import { resolveWidgetGuestRunContext, elevateUserPayload } from '../realtimeWidget/widgetGuestElevation.js';
24
+ import { ResolveWidgetGuestRunContext, ElevateUserPayload } from '../realtimeWidget/widgetGuestElevation.js';
25
25
  import { SafeJSONParse, UUIDsEqual } from '@memberjunction/global';
26
26
  import { GetAttachmentService } from '@memberjunction/aiengine';
27
27
  import { NotificationEngine } from '@memberjunction/notifications';
@@ -324,10 +324,10 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
324
324
  },
325
325
  timestamp: new Date()
326
326
  };
327
- this.PublishProgressUpdate(pubSub, progressMsg, userPayload);
327
+ this.publishProgressUpdate(pubSub, progressMsg, userPayload);
328
328
  };
329
329
  }
330
- PublishProgressUpdate(pubSub, data, userPayload) {
330
+ publishProgressUpdate(pubSub, data, userPayload) {
331
331
  this.PublishStatusUpdate(pubSub, userPayload.sessionId, JSON.stringify({
332
332
  resolver: 'RunAIAgentResolver',
333
333
  type: 'ExecutionProgress',
@@ -335,7 +335,7 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
335
335
  data,
336
336
  }), userPayload);
337
337
  }
338
- PublishStreamingUpdate(pubSub, data, userPayload) {
338
+ publishStreamingUpdate(pubSub, data, userPayload) {
339
339
  this.PublishStatusUpdate(pubSub, userPayload.sessionId, JSON.stringify({
340
340
  resolver: 'RunAIAgentResolver',
341
341
  type: 'StreamingContent',
@@ -369,7 +369,7 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
369
369
  },
370
370
  timestamp: new Date()
371
371
  };
372
- this.PublishStreamingUpdate(pubSub, streamMsg, userPayload);
372
+ this.publishStreamingUpdate(pubSub, streamMsg, userPayload);
373
373
  };
374
374
  }
375
375
  /**
@@ -389,7 +389,10 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
389
389
  * The framework intersects them with the agent's accepted skills AND the user's Run permission. */
390
390
  requestedSkillIDs,
391
391
  /** JSON `{ paused?: boolean }` — seeds `$.debug` on a submitted task graph at insert. */
392
- taskGraphDebug) {
392
+ taskGraphDebug,
393
+ /** History floor for a conversation run — threaded into ExecuteAgentParams.ConversationHistoryFrom,
394
+ * so the framework's own conversation reads (retrieval tools, artifacts, compaction) honour it too. */
395
+ conversationHistoryFrom) {
393
396
  const startTime = Date.now();
394
397
  // Best-effort handle for persistInFlightAgentFailure. Populated from a
395
398
  // progress event carrying metadata.agentRun, or from the successful
@@ -436,6 +439,7 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
436
439
  planMode: planMode,
437
440
  requestedSkillIDs: requestedSkillIDs,
438
441
  taskGraphDebug: parseTaskGraphDebug(taskGraphDebug),
442
+ ConversationHistoryFrom: conversationHistoryFrom,
439
443
  data: parsedData,
440
444
  context: {
441
445
  dataSource: dataSource
@@ -585,7 +589,7 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
585
589
  partialResult,
586
590
  timestamp: new Date()
587
591
  };
588
- this.PublishStreamingUpdate(pubSub, partialMsg, userPayload);
592
+ this.publishStreamingUpdate(pubSub, partialMsg, userPayload);
589
593
  }
590
594
  // Publish completion with conversationDetailId for client-side routing.
591
595
  // Include result data so fire-and-forget clients can receive the full result via WebSocket.
@@ -599,7 +603,7 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
599
603
  errorMessage: result.agentRun?.ErrorMessage || undefined,
600
604
  result: resultJson || undefined
601
605
  };
602
- this.PublishStreamingUpdate(pubSub, completionData, userPayload);
606
+ this.publishStreamingUpdate(pubSub, completionData, userPayload);
603
607
  }
604
608
  /**
605
609
  * Public mutation for regular users to run AI agents with authentication.
@@ -808,7 +812,7 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
808
812
  * @param agentId - The agent to execute
809
813
  * @param maxHistoryMessages - Maximum number of history messages to include (default: 20)
810
814
  */
811
- async RunAIAgentFromConversationDetail(conversationDetailId, agentId, { userPayload, providers, dataSource }, sessionId, pubSub, maxHistoryMessages, data, payload, lastRunId, autoPopulateLastRunPayload, configurationId, createArtifacts, createNotification, sourceArtifactId, sourceArtifactVersionId, fireAndForget, planMode, requestedSkillIDs) {
815
+ async RunAIAgentFromConversationDetail(conversationDetailId, agentId, { userPayload, providers, dataSource }, sessionId, pubSub, maxHistoryMessages, data, payload, lastRunId, autoPopulateLastRunPayload, configurationId, createArtifacts, createNotification, sourceArtifactId, sourceArtifactVersionId, fireAndForget, planMode, requestedSkillIDs, agentHistoryFrom) {
812
816
  // Check API key scope authorization for agent execution
813
817
  await this.CheckAPIKeyScopeAuthorization('agent:execute', agentId, userPayload);
814
818
  const p = GetReadWriteProvider(providers);
@@ -827,10 +831,12 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
827
831
  // Conversation OWNERSHIP is still enforced under the guest principal below: the guest loads its
828
832
  // own ConversationDetail through the Widget Guest RLS filters, so a detail id from another
829
833
  // session resolves to "not found" before any elevated work happens.
830
- const widgetElevation = await resolveWidgetGuestRunContext(userPayload, p);
831
- const effectiveAgentId = widgetElevation ? widgetElevation.pinnedAgentId : agentId;
832
- const effectiveUserPayload = widgetElevation ? elevateUserPayload(userPayload, widgetElevation.elevatedUser) : userPayload;
834
+ const widgetElevation = await ResolveWidgetGuestRunContext(userPayload, p);
835
+ const effectiveAgentId = widgetElevation ? widgetElevation.PinnedAgentId : agentId;
836
+ const effectiveUserPayload = widgetElevation ? ElevateUserPayload(userPayload, widgetElevation.ElevatedUser) : userPayload;
833
837
  try {
838
+ // Parsed before anything loads: a floor the caller asked for must never be dropped.
839
+ const historyFrom = parseAgentHistoryFrom(agentHistoryFrom);
834
840
  // LATENCY OPTIMIZATION (Opt #2 + #3): Load ConversationDetail once here to extract
835
841
  // conversationId, then pass it downstream. Previously this record was loaded multiple
836
842
  // times: once in loadConversationHistoryWithAttachments (just to get conversationId),
@@ -845,13 +851,14 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
845
851
  const messages = await this.loadConversationHistoryWithAttachments(conversationId, currentUser, maxHistoryMessages || 20, p,
846
852
  // The UI creates the agent-response placeholder row ('⏳ ...') before invoking
847
853
  // this mutation — exclude it so the model never sees an empty assistant turn.
848
- [conversationDetailId]);
854
+ [conversationDetailId], historyFrom);
849
855
  // Convert to JSON string for the existing executeAIAgent method
850
856
  const messagesJson = JSON.stringify(messages);
851
857
  if (fireAndForget) {
852
858
  // Fire-and-forget mode: start execution in background, return immediately.
853
859
  // The client will receive the result via WebSocket PubSub completion event.
854
- this.executeAgentInBackground(p, dataSource, effectiveAgentId, effectiveUserPayload, messagesJson, sessionId, pubSub, data, payload, lastRunId, autoPopulateLastRunPayload, configurationId, conversationDetailId, createArtifacts || false, createNotification || false, sourceArtifactId, sourceArtifactVersionId, conversationId, planMode, requestedSkillIDs);
860
+ this.executeAgentInBackground(p, dataSource, effectiveAgentId, effectiveUserPayload, messagesJson, sessionId, pubSub, data, payload, lastRunId, autoPopulateLastRunPayload, configurationId, conversationDetailId, createArtifacts || false, createNotification || false, sourceArtifactId, sourceArtifactVersionId, conversationId, planMode, requestedSkillIDs, undefined, // taskGraphDebug
861
+ historyFrom);
855
862
  LogStatus(`🔥 Fire-and-forget: Agent ${effectiveAgentId} execution started in background for session ${sessionId}`);
856
863
  return {
857
864
  success: true,
@@ -862,7 +869,8 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
862
869
  return this.executeAIAgent(p, dataSource, effectiveAgentId, effectiveUserPayload, messagesJson, sessionId, pubSub, data, payload, undefined, // templateData
863
870
  lastRunId, autoPopulateLastRunPayload, configurationId, conversationDetailId, createArtifacts || false, createNotification || false, sourceArtifactId, sourceArtifactVersionId, conversationId, // LATENCY OPT #2: pass pre-resolved conversationId
864
871
  undefined, // runRef
865
- planMode, requestedSkillIDs);
872
+ planMode, requestedSkillIDs, undefined, // taskGraphDebug
873
+ historyFrom);
866
874
  }
867
875
  catch (error) {
868
876
  const errorMessage = error.message || 'Unknown error loading conversation history';
@@ -1028,10 +1036,12 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
1028
1036
  /** Per-request Plan Mode toggle — threaded through to ExecuteAgentParams.planMode. */
1029
1037
  planMode,
1030
1038
  /** Skill IDs the user requested — threaded through to ExecuteAgentParams.requestedSkillIDs. */
1031
- requestedSkillIDs, taskGraphDebug) {
1039
+ requestedSkillIDs, taskGraphDebug,
1040
+ /** History floor — threaded through to ExecuteAgentParams.ConversationHistoryFrom. */
1041
+ conversationHistoryFrom) {
1032
1042
  // Ref the liveness pulse reads to enrich heartbeats once the run is created.
1033
1043
  const runRef = { current: null };
1034
- const pulse = startLivenessPulse({
1044
+ const pulse = StartLivenessPulse({
1035
1045
  pubSub,
1036
1046
  sessionId,
1037
1047
  ownerUserId: userPayload.userRecord.ID,
@@ -1041,7 +1051,7 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
1041
1051
  : undefined,
1042
1052
  });
1043
1053
  // Execute in background - errors are handled within, not propagated
1044
- this.executeAIAgent(p, dataSource, agentId, userPayload, messagesJson, sessionId, pubSub, data, payload, undefined, lastRunId, autoPopulateLastRunPayload, configurationId, conversationDetailId, createArtifacts, createNotification, sourceArtifactId, sourceArtifactVersionId, conversationId, runRef, planMode, requestedSkillIDs, taskGraphDebug).catch((error) => {
1054
+ this.executeAIAgent(p, dataSource, agentId, userPayload, messagesJson, sessionId, pubSub, data, payload, undefined, lastRunId, autoPopulateLastRunPayload, configurationId, conversationDetailId, createArtifacts, createNotification, sourceArtifactId, sourceArtifactVersionId, conversationId, runRef, planMode, requestedSkillIDs, taskGraphDebug, conversationHistoryFrom).catch((error) => {
1045
1055
  // Background execution failed unexpectedly (executeAIAgent has its own try-catch,
1046
1056
  // so this would only fire for truly unexpected errors).
1047
1057
  const errorMessage = (error instanceof Error) ? error.message : 'Unknown background execution error';
@@ -1057,8 +1067,8 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
1057
1067
  errorMessage,
1058
1068
  result: JSON.stringify({ success: false, errorMessage })
1059
1069
  };
1060
- this.PublishStreamingUpdate(pubSub, errorCompletionData, userPayload);
1061
- }).finally(() => pulse.stop());
1070
+ this.publishStreamingUpdate(pubSub, errorCompletionData, userPayload);
1071
+ }).finally(() => pulse.Stop());
1062
1072
  }
1063
1073
  /**
1064
1074
  * Load conversation history with attachments from database.
@@ -1074,18 +1084,20 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
1074
1084
  *
1075
1085
  * Opt #8: Switched from ResultType 'entity_object' to 'simple' with explicit Fields.
1076
1086
  * The history query only needs the window-assembly fields (ConversationWindowFields:
1077
- * ID, Sequence, Role, Message, SummaryOfEarlierConversation) from each
1087
+ * ID, Sequence, Role, Message, SummaryOfEarlierConversation, __mj_CreatedAt) from each
1078
1088
  * ConversationDetail record. Using 'entity_object' created full BaseEntity instances
1079
1089
  * with getters/setters, dirty tracking, and validation — none of which are needed for
1080
1090
  * read-only history assembly. The 'simple' result type returns plain JS objects,
1081
1091
  * reducing per-record overhead (~30ms total savings).
1082
1092
  */
1083
- async loadConversationHistoryWithAttachments(conversationId, contextUser, maxMessages, provider, excludeDetailIds) {
1093
+ async loadConversationHistoryWithAttachments(conversationId, contextUser, maxMessages, provider, excludeDetailIds,
1094
+ /** History floor: only rows written at or after it are loaded, and no summary is used. */
1095
+ historyFrom) {
1084
1096
  // Context windowing (summary boundary + raw tail, or legacy last-N when no
1085
1097
  // summary exists) shares ONE fold implementation with all other callers —
1086
1098
  // ConversationEngine.AssembleContextWindow — and the ROWS come from the
1087
1099
  // single-sourced fresh-per-request loader (same one the compaction pass uses).
1088
- // Three deliberate properties vs. the engine's cached GetAgentContextWindow:
1100
+ // Four deliberate properties vs. the engine's cached GetAgentContextWindow:
1089
1101
  // 1. Entity RLS applies (the engine path loads via a stored query with no
1090
1102
  // row-level security — wrong for guest/widget-scoped users), and the
1091
1103
  // process-global per-conversation cache — keyed by conversation, not user —
@@ -1094,10 +1106,13 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
1094
1106
  // cross-server staleness (a warm cache misses rows written by other nodes).
1095
1107
  // 3. Load failure THROWS → the mutation fails, instead of silently running
1096
1108
  // the agent against zero history.
1097
- const rows = await ConversationEngine.LoadWindowRowsFresh(conversationId, contextUser, provider);
1109
+ // 4. A history floor (`historyFrom`) is applied in the query, so rows before it never
1110
+ // leave the database, and again in the assembly, which then skips the summary.
1111
+ const rows = await ConversationEngine.LoadWindowRowsFresh(conversationId, contextUser, provider, historyFrom);
1098
1112
  const window = ConversationEngine.AssembleContextWindow(rows, {
1099
1113
  maxTailMessages: maxMessages,
1100
- excludeDetailIds
1114
+ excludeDetailIds,
1115
+ historyFrom
1101
1116
  });
1102
1117
  // Batch load input artifacts for the windowed messages. Since the backfill migration
1103
1118
  // (V202605271400__Backfill_Attachment_Artifacts) converted all legacy
@@ -1144,19 +1159,19 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
1144
1159
  const ext = fileName.includes('.') ? fileName.split('.').pop() : undefined;
1145
1160
  const artifactType = ArtifactMetadataEngine.Instance.GetArtifactTypeByMimeType(artifactMime, ext);
1146
1161
  const decision = RouteArtifact({
1147
- typeDefault: artifactType?.DefaultDeliveryMode ?? 'ToolsOnly',
1148
- forceToolsOnly: artifactVersion.ForceToolsOnly,
1162
+ TypeDefault: artifactType?.DefaultDeliveryMode ?? 'ToolsOnly',
1163
+ ForceToolsOnly: artifactVersion.ForceToolsOnly,
1149
1164
  mimeType: artifactMime,
1150
- sizeBytes: artifactVersion.ContentSizeBytes ?? 0,
1151
- inlineSizeCap: INLINE_SIZE_CAP,
1152
- modelSupportsModality: () => true,
1153
- modelName: '<resolver>',
1154
- artifactTypeName: artifactType?.Name ?? artifactMime,
1165
+ SizeBytes: artifactVersion.ContentSizeBytes ?? 0,
1166
+ InlineSizeCap: INLINE_SIZE_CAP,
1167
+ ModelSupportsModality: () => true,
1168
+ ModelName: '<resolver>',
1169
+ ArtifactTypeName: artifactType?.Name ?? artifactMime,
1155
1170
  });
1156
1171
  if (artifactVersion.ContentMode === 'File' && artifactVersion.FileID) {
1157
1172
  if (decision.delivery !== 'inline') {
1158
- if (decision.delivery === 'tools' && decision.annotation) {
1159
- LogStatus(`[RunAIAgentResolver] ${decision.annotation}`);
1173
+ if (decision.delivery === 'tools' && decision.Annotation) {
1174
+ LogStatus(`[RunAIAgentResolver] ${decision.Annotation}`);
1160
1175
  }
1161
1176
  continue;
1162
1177
  }
@@ -1175,8 +1190,8 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
1175
1190
  // Text-mode artifact (ContentMode = 'Text'). Honor the
1176
1191
  // routing decision the same way as for file-mode.
1177
1192
  if (decision.delivery !== 'inline') {
1178
- if (decision.delivery === 'tools' && decision.annotation) {
1179
- LogStatus(`[RunAIAgentResolver] ${decision.annotation}`);
1193
+ if (decision.delivery === 'tools' && decision.Annotation) {
1194
+ LogStatus(`[RunAIAgentResolver] ${decision.Annotation}`);
1180
1195
  }
1181
1196
  continue;
1182
1197
  }
@@ -1365,8 +1380,9 @@ __decorate([
1365
1380
  __param(15, Arg('fireAndForget', { nullable: true })),
1366
1381
  __param(16, Arg('planMode', { nullable: true })),
1367
1382
  __param(17, Arg('requestedSkillIDs', () => [String], { nullable: true })),
1383
+ __param(18, Arg('agentHistoryFrom', { nullable: true })),
1368
1384
  __metadata("design:type", Function),
1369
- __metadata("design:paramtypes", [String, String, Object, String, PubSubEngine, Number, String, String, String, Boolean, String, Boolean, Boolean, String, String, Boolean, Boolean, Array]),
1385
+ __metadata("design:paramtypes", [String, String, Object, String, PubSubEngine, Number, String, String, String, Boolean, String, Boolean, Boolean, String, String, Boolean, Boolean, Array, String]),
1370
1386
  __metadata("design:returntype", Promise)
1371
1387
  ], RunAIAgentResolver.prototype, "RunAIAgentFromConversationDetail", null);
1372
1388
  __decorate([
@@ -1395,6 +1411,21 @@ RunAIAgentResolver = __decorate([
1395
1411
  Resolver()
1396
1412
  ], RunAIAgentResolver);
1397
1413
  export { RunAIAgentResolver };
1414
+ /**
1415
+ * Reads the `agentHistoryFrom` argument of `RunAIAgentFromConversationDetail`: an ISO-8601
1416
+ * timestamp. Absent means no floor. A value that is present but not a timestamp throws — a
1417
+ * floor the caller asked for must fail the request, never be dropped, since dropping it lets
1418
+ * the run read the history it was meant to keep out.
1419
+ */
1420
+ function parseAgentHistoryFrom(raw) {
1421
+ if (raw == null)
1422
+ return undefined;
1423
+ const parsed = new Date(raw);
1424
+ if (Number.isNaN(parsed.getTime())) {
1425
+ throw new Error(`agentHistoryFrom must be an ISO-8601 timestamp; received "${raw}"`);
1426
+ }
1427
+ return parsed;
1428
+ }
1398
1429
  function parseTaskGraphDebug(raw) {
1399
1430
  if (!raw)
1400
1431
  return undefined;