@memberjunction/server 6.2.0-edge.4 → 6.2.0-edge.5

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 (287) hide show
  1. package/README.md +20 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/SessionJanitor.d.ts +91 -30
  4. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  5. package/dist/agentSessions/SessionJanitor.js +311 -81
  6. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  7. package/dist/agentSessions/SessionManager.d.ts +5 -1
  8. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  9. package/dist/agentSessions/SessionManager.js +13 -1
  10. package/dist/agentSessions/SessionManager.js.map +1 -1
  11. package/dist/apiRoot.d.ts +32 -0
  12. package/dist/apiRoot.d.ts.map +1 -0
  13. package/dist/apiRoot.js +67 -0
  14. package/dist/apiRoot.js.map +1 -0
  15. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  16. package/dist/auth/AuthProviderCatalogRouter.js +25 -0
  17. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  18. package/dist/auth/LoginScreenEngine.d.ts +22 -0
  19. package/dist/auth/LoginScreenEngine.d.ts.map +1 -0
  20. package/dist/auth/LoginScreenEngine.js +57 -0
  21. package/dist/auth/LoginScreenEngine.js.map +1 -0
  22. package/dist/auth/index.d.ts +1 -0
  23. package/dist/auth/index.d.ts.map +1 -1
  24. package/dist/auth/index.js +1 -0
  25. package/dist/auth/index.js.map +1 -1
  26. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  27. package/dist/auth/magicLink/MagicLinkRouter.js +3 -2
  28. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  29. package/dist/config.d.ts +136 -22
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +43 -4
  32. package/dist/config.js.map +1 -1
  33. package/dist/coreRoutes.d.ts +29 -0
  34. package/dist/coreRoutes.d.ts.map +1 -0
  35. package/dist/coreRoutes.js +142 -0
  36. package/dist/coreRoutes.js.map +1 -0
  37. package/dist/generated/graphql-schemas/__mj.d.ts +369 -3
  38. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  39. package/dist/generated/graphql-schemas/__mj.js +1750 -7
  40. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  41. package/dist/generic/CacheInvalidationResolver.d.ts +43 -8
  42. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  43. package/dist/generic/CacheInvalidationResolver.js +59 -19
  44. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  45. package/dist/generic/PushStatusResolver.js +1 -1
  46. package/dist/generic/PushStatusResolver.js.map +1 -1
  47. package/dist/generic/ResolverBase.d.ts +103 -44
  48. package/dist/generic/ResolverBase.d.ts.map +1 -1
  49. package/dist/generic/ResolverBase.js +264 -305
  50. package/dist/generic/ResolverBase.js.map +1 -1
  51. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  52. package/dist/generic/RunViewResolver.js +12 -0
  53. package/dist/generic/RunViewResolver.js.map +1 -1
  54. package/dist/globalCors.d.ts +33 -0
  55. package/dist/globalCors.d.ts.map +1 -0
  56. package/dist/globalCors.js +58 -0
  57. package/dist/globalCors.js.map +1 -0
  58. package/dist/index.d.ts +11 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +112 -160
  61. package/dist/index.js.map +1 -1
  62. package/dist/multiTenancy/index.d.ts.map +1 -1
  63. package/dist/multiTenancy/index.js +22 -2
  64. package/dist/multiTenancy/index.js.map +1 -1
  65. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts.map +1 -1
  66. package/dist/realtimeSessions/RealtimeSessionVerificationService.js +2 -1
  67. package/dist/realtimeSessions/RealtimeSessionVerificationService.js.map +1 -1
  68. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts.map +1 -1
  69. package/dist/realtimeSessions/RealtimeVerifyRouter.js +2 -1
  70. package/dist/realtimeSessions/RealtimeVerifyRouter.js.map +1 -1
  71. package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts +100 -0
  72. package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts.map +1 -0
  73. package/dist/realtimeSessions/RecordingAssemblyScheduler.js +173 -0
  74. package/dist/realtimeSessions/RecordingAssemblyScheduler.js.map +1 -0
  75. package/dist/realtimeSessions/index.d.ts +2 -0
  76. package/dist/realtimeSessions/index.d.ts.map +1 -1
  77. package/dist/realtimeSessions/index.js +2 -0
  78. package/dist/realtimeSessions/index.js.map +1 -1
  79. package/dist/realtimeSessions/ownedRealtimeSession.d.ts +30 -0
  80. package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -0
  81. package/dist/realtimeSessions/ownedRealtimeSession.js +47 -0
  82. package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -0
  83. package/dist/realtimeSessions/sessionAccess.d.ts +6 -0
  84. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
  85. package/dist/realtimeSessions/sessionAccess.js +7 -3
  86. package/dist/realtimeSessions/sessionAccess.js.map +1 -1
  87. package/dist/resolvers/ArtifactFileResolver.d.ts +5 -1
  88. package/dist/resolvers/ArtifactFileResolver.d.ts.map +1 -1
  89. package/dist/resolvers/ArtifactFileResolver.js +9 -7
  90. package/dist/resolvers/ArtifactFileResolver.js.map +1 -1
  91. package/dist/resolvers/ConversationRunEventsResolver.d.ts +8 -4
  92. package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
  93. package/dist/resolvers/ConversationRunEventsResolver.js +6 -6
  94. package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
  95. package/dist/resolvers/DatasetResolver.d.ts +24 -3
  96. package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
  97. package/dist/resolvers/DatasetResolver.js +57 -8
  98. package/dist/resolvers/DatasetResolver.js.map +1 -1
  99. package/dist/resolvers/EntityRecordNameResolver.d.ts +2 -1
  100. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  101. package/dist/resolvers/EntityRecordNameResolver.js +3 -2
  102. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  103. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +18 -3
  104. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  105. package/dist/resolvers/FetchEntityVectorsResolver.js +100 -35
  106. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  107. package/dist/resolvers/FileResolver.d.ts +82 -11
  108. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  109. package/dist/resolvers/FileResolver.js +279 -101
  110. package/dist/resolvers/FileResolver.js.map +1 -1
  111. package/dist/resolvers/GetDataContextDataResolver.d.ts +33 -7
  112. package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
  113. package/dist/resolvers/GetDataContextDataResolver.js +117 -38
  114. package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
  115. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  116. package/dist/resolvers/GetDataResolver.js +6 -3
  117. package/dist/resolvers/GetDataResolver.js.map +1 -1
  118. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  119. package/dist/resolvers/IntegrationDiscoveryResolver.js +4 -2
  120. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  121. package/dist/resolvers/QueryResolver.d.ts +2 -0
  122. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  123. package/dist/resolvers/QueryResolver.js +13 -0
  124. package/dist/resolvers/QueryResolver.js.map +1 -1
  125. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +2 -8
  126. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  127. package/dist/resolvers/RealtimeClientSessionResolver.js +10 -26
  128. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  129. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  130. package/dist/resolvers/RunAIAgentResolver.js +35 -6
  131. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  132. package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts +12 -1
  133. package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts.map +1 -1
  134. package/dist/resolvers/SearchKnowledgeStreamResolver.js +15 -2
  135. package/dist/resolvers/SearchKnowledgeStreamResolver.js.map +1 -1
  136. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  137. package/dist/resolvers/SqlLoggingConfigResolver.js +2 -3
  138. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  139. package/dist/resolvers/TaskGraphFrameResolver.d.ts +2 -1
  140. package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
  141. package/dist/resolvers/TaskGraphFrameResolver.js +28 -1
  142. package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
  143. package/dist/resolvers/TestQuerySQLResolver.d.ts +24 -0
  144. package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
  145. package/dist/resolvers/TestQuerySQLResolver.js +65 -13
  146. package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
  147. package/dist/resolvers/TransactionGroupResolver.d.ts +19 -2
  148. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  149. package/dist/resolvers/TransactionGroupResolver.js +102 -24
  150. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  151. package/dist/resolvers/agent-run-data-guard.d.ts +31 -0
  152. package/dist/resolvers/agent-run-data-guard.d.ts.map +1 -0
  153. package/dist/resolvers/agent-run-data-guard.js +72 -0
  154. package/dist/resolvers/agent-run-data-guard.js.map +1 -0
  155. package/dist/rest/RealtimeRecordingHandler.d.ts +49 -0
  156. package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -0
  157. package/dist/rest/RealtimeRecordingHandler.js +383 -0
  158. package/dist/rest/RealtimeRecordingHandler.js.map +1 -0
  159. package/dist/rest/ViewOperationsHandler.d.ts +3 -1
  160. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  161. package/dist/rest/ViewOperationsHandler.js +21 -12
  162. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  163. package/dist/rest/setupRESTEndpoints.d.ts +6 -0
  164. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  165. package/dist/rest/setupRESTEndpoints.js +6 -0
  166. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  167. package/dist/serverExtensionReservedRoots.d.ts +12 -10
  168. package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
  169. package/dist/serverExtensionReservedRoots.js +14 -17
  170. package/dist/serverExtensionReservedRoots.js.map +1 -1
  171. package/dist/services/MJStorageBlobStore.d.ts +8 -1
  172. package/dist/services/MJStorageBlobStore.d.ts.map +1 -1
  173. package/dist/services/MJStorageBlobStore.js +25 -19
  174. package/dist/services/MJStorageBlobStore.js.map +1 -1
  175. package/dist/services/StartTaskGraphDispatcher.js +2 -2
  176. package/dist/services/StartTaskGraphDispatcher.js.map +1 -1
  177. package/dist/services/TaskGraphActionRunner.d.ts +5 -3
  178. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  179. package/dist/services/TaskGraphActionRunner.js +27 -5
  180. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  181. package/dist/services/TaskGraphAgentRunner.d.ts +14 -2
  182. package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
  183. package/dist/services/TaskGraphAgentRunner.js +157 -9
  184. package/dist/services/TaskGraphAgentRunner.js.map +1 -1
  185. package/dist/services/TaskGraphContinuationDeliverer.d.ts +54 -2
  186. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  187. package/dist/services/TaskGraphContinuationDeliverer.js +598 -15
  188. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  189. package/dist/sharedCache.d.ts.map +1 -1
  190. package/dist/sharedCache.js +3 -0
  191. package/dist/sharedCache.js.map +1 -1
  192. package/package.json +99 -98
  193. package/src/__tests__/DatasetResolver.itemFilters.test.ts +201 -0
  194. package/src/__tests__/EntityRecordNameResolver.rowSecurity.test.ts +152 -0
  195. package/src/__tests__/FetchEntityVectorsResolver.test.ts +163 -15
  196. package/src/__tests__/FileResolver.storageAccess.test.ts +562 -0
  197. package/src/__tests__/GetDataContextDataResolver.sqlItems.test.ts +416 -0
  198. package/src/__tests__/ListOperationsResolver.adhocScreen.test.ts +137 -0
  199. package/src/__tests__/LoginScreenEngine.test.ts +86 -0
  200. package/src/__tests__/MJStorageBlobStore.storageGate.test.ts +63 -0
  201. package/src/__tests__/RecordingAssemblyScheduler.test.ts +178 -0
  202. package/src/__tests__/ResolverBase.adhocReadScope.test.ts +133 -2
  203. package/src/__tests__/ResolverBase.balancedClause.test.ts +155 -0
  204. package/src/__tests__/ResolverBase.clauseUnscopedRead.test.ts +127 -0
  205. package/src/__tests__/ResolverBase.clientOldValues.test.ts +209 -6
  206. package/src/__tests__/ResolverBase.filterEscaping.test.ts +5 -2
  207. package/src/__tests__/RunAIAgentResolver.branch.test.ts +1 -0
  208. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +5 -3
  209. package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +258 -0
  210. package/src/__tests__/RunViewResolver.cacheCheckScreen.test.ts +165 -0
  211. package/src/__tests__/SearchKnowledgeStreamResolver.test.ts +161 -0
  212. package/src/__tests__/SessionJanitor.test.ts +365 -10
  213. package/src/__tests__/SessionManager.test.ts +27 -0
  214. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +25 -0
  215. package/src/__tests__/TaskGraphAgentRunner.test.ts +266 -0
  216. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +356 -22
  217. package/src/__tests__/TaskGraphFrameResolver.test.ts +22 -0
  218. package/src/__tests__/TestQuerySQLResolver.test.ts +274 -0
  219. package/src/__tests__/TransactionGroupResolver.refusals.test.ts +98 -1
  220. package/src/__tests__/UpdateMJDataContextItem.oldValues.test.ts +220 -0
  221. package/src/__tests__/ViewOperationsHandler.clauseScreen.test.ts +157 -0
  222. package/src/__tests__/agent-run-data-guard.test.ts +130 -0
  223. package/src/__tests__/apiRootBoot.test.ts +202 -0
  224. package/src/__tests__/cacheInvalidationRecordData.test.ts +64 -0
  225. package/src/__tests__/conversationRunEvents.test.ts +56 -14
  226. package/src/__tests__/globalCors.test.ts +217 -0
  227. package/src/__tests__/multiTenancy.postgresRewrite.test.ts +181 -0
  228. package/src/__tests__/multiTenancy.security.test.ts +51 -0
  229. package/src/__tests__/multiTenancy.test.ts +1 -1
  230. package/src/__tests__/ownedRealtimeSession.test.ts +39 -0
  231. package/src/__tests__/pushStatusResolver.filter.test.ts +7 -0
  232. package/src/__tests__/realtimeRecordingHandler.test.ts +652 -0
  233. package/src/__tests__/serverExtensionHostOverlay.test.ts +66 -0
  234. package/src/__tests__/serverExtensionReservedRoots.test.ts +11 -98
  235. package/src/__tests__/sharedCache.test.ts +5 -3
  236. package/src/agentSessions/SessionJanitor.ts +369 -93
  237. package/src/agentSessions/SessionManager.ts +13 -1
  238. package/src/apiRoot.ts +78 -0
  239. package/src/auth/AuthProviderCatalogRouter.ts +26 -0
  240. package/src/auth/LoginScreenEngine.ts +50 -0
  241. package/src/auth/index.ts +1 -0
  242. package/src/auth/magicLink/MagicLinkRouter.ts +3 -2
  243. package/src/config.ts +46 -5
  244. package/src/coreRoutes.ts +166 -0
  245. package/src/generated/graphql-schemas/__mj.ts +1273 -10
  246. package/src/generic/CacheInvalidationResolver.ts +73 -18
  247. package/src/generic/PushStatusResolver.ts +1 -1
  248. package/src/generic/ResolverBase.ts +304 -325
  249. package/src/generic/RunViewResolver.ts +17 -0
  250. package/src/globalCors.ts +71 -0
  251. package/src/index.ts +116 -174
  252. package/src/multiTenancy/index.ts +24 -2
  253. package/src/realtimeSessions/RealtimeSessionVerificationService.ts +2 -1
  254. package/src/realtimeSessions/RealtimeVerifyRouter.ts +2 -1
  255. package/src/realtimeSessions/RecordingAssemblyScheduler.ts +234 -0
  256. package/src/realtimeSessions/index.ts +2 -0
  257. package/src/realtimeSessions/ownedRealtimeSession.ts +55 -0
  258. package/src/realtimeSessions/sessionAccess.ts +7 -3
  259. package/src/resolvers/ArtifactFileResolver.ts +9 -8
  260. package/src/resolvers/ConversationRunEventsResolver.ts +15 -11
  261. package/src/resolvers/DatasetResolver.ts +70 -10
  262. package/src/resolvers/EntityRecordNameResolver.ts +3 -2
  263. package/src/resolvers/FetchEntityVectorsResolver.ts +121 -39
  264. package/src/resolvers/FileResolver.ts +321 -106
  265. package/src/resolvers/GetDataContextDataResolver.ts +139 -41
  266. package/src/resolvers/GetDataResolver.ts +6 -3
  267. package/src/resolvers/IntegrationDiscoveryResolver.ts +4 -2
  268. package/src/resolvers/QueryResolver.ts +11 -0
  269. package/src/resolvers/RealtimeClientSessionResolver.ts +10 -33
  270. package/src/resolvers/RunAIAgentResolver.ts +39 -4
  271. package/src/resolvers/SearchKnowledgeStreamResolver.ts +19 -3
  272. package/src/resolvers/SqlLoggingConfigResolver.ts +2 -4
  273. package/src/resolvers/TaskGraphFrameResolver.ts +33 -1
  274. package/src/resolvers/TestQuerySQLResolver.ts +68 -13
  275. package/src/resolvers/TransactionGroupResolver.ts +131 -27
  276. package/src/resolvers/__tests__/GetDataResolver.validation.test.ts +95 -0
  277. package/src/resolvers/agent-run-data-guard.ts +89 -0
  278. package/src/rest/RealtimeRecordingHandler.ts +464 -0
  279. package/src/rest/ViewOperationsHandler.ts +29 -13
  280. package/src/rest/setupRESTEndpoints.ts +6 -0
  281. package/src/serverExtensionReservedRoots.ts +14 -17
  282. package/src/services/MJStorageBlobStore.ts +31 -30
  283. package/src/services/StartTaskGraphDispatcher.ts +2 -2
  284. package/src/services/TaskGraphActionRunner.ts +25 -5
  285. package/src/services/TaskGraphAgentRunner.ts +188 -11
  286. package/src/services/TaskGraphContinuationDeliverer.ts +704 -14
  287. package/src/sharedCache.ts +3 -0
@@ -13,8 +13,11 @@
13
13
  * @module @memberjunction/server
14
14
  */
15
15
  import { AgentRunner } from '@memberjunction/ai-agents';
16
+ import { AIEngine } from '@memberjunction/aiengine';
16
17
  import { ChatMessageRole } from '@memberjunction/ai';
17
18
  import { LogError } from '@memberjunction/core';
19
+ import { UUIDsEqual } from '@memberjunction/global';
20
+ import { UserCache } from '@memberjunction/generic-database-provider';
18
21
  export class TaskGraphAgentRunner {
19
22
  async RunAgentForTask(params) {
20
23
  try {
@@ -22,20 +25,70 @@ export class TaskGraphAgentRunner {
22
25
  if (!(await agent.Load(params.AgentID))) {
23
26
  return { Success: false, ErrorMessage: `Agent ${params.AgentID} could not be loaded.` };
24
27
  }
25
- const result = await new AgentRunner().RunAgent({
28
+ const parentRun = await this.loadSubmittingRun(params);
29
+ const actingUser = this.resolveActingUser(parentRun?.UserID, params.ContextUser);
30
+ const engineLoaded = (AIEngine.Instance?.Agents?.length ?? 0) > 0;
31
+ if (engineLoaded && actingUser && typeof AIEngine.Instance.CanUserRunAgent === 'function') {
32
+ const permitted = await AIEngine.Instance.CanUserRunAgent(agent.ID, actingUser);
33
+ if (!permitted) {
34
+ return {
35
+ Success: false,
36
+ ErrorMessage: `User does not have permission to run agent "${agent.Name}".`,
37
+ };
38
+ }
39
+ }
40
+ const taskContext = await this.resolveTaskContext(params);
41
+ const conversationDetailId = parentRun?.ConversationDetailID ?? taskContext.conversationDetailId ?? undefined;
42
+ const runner = new AgentRunner(params.Provider);
43
+ const result = await runner.RunAgent({
26
44
  agent,
27
- conversationMessages: [{ role: ChatMessageRole.user, content: this.buildPrompt(params) }],
28
- contextUser: params.ContextUser,
45
+ provider: params.Provider,
46
+ conversationMessages: [{
47
+ role: ChatMessageRole.user,
48
+ content: this.buildPrompt(params, taskContext.name, taskContext.description),
49
+ }],
50
+ contextUser: actingUser,
51
+ conversationId: parentRun?.ConversationID ?? undefined,
52
+ // A task-graph step receives its explicit InputPayload and DependencyOutputs.
53
+ // Passing an empty inputArtifacts array prevents AgentRunner.hydrateConversationArtifacts
54
+ // from loading unrelated artifacts from earlier turns in the conversation and tempting
55
+ // the step agent to emit `version-source` against a prior turn's artifact.
56
+ inputArtifacts: [],
29
57
  // Inherited from the graph, so a graph this run goes on to emit is one hop deeper
30
58
  // rather than starting the chain over. Without it MAX_REINVOKE_DEPTH never fires.
31
59
  continuationDepth: params.ContinuationDepth ?? 0,
32
- parentRun: await this.loadSubmittingRun(params),
60
+ parentRun,
33
61
  // The bridge from the agent's own progress stream up to graph-level observers: the
34
62
  // dispatcher turns these into rate-limited `NodeProgress` frames, which is how a
35
63
  // running Agent step shows "what it is doing right now" on the workflow canvas.
36
64
  onProgress: this.bridgeProgress(params),
37
65
  });
38
66
  const success = result?.success === true;
67
+ if (success &&
68
+ result?.payload != null &&
69
+ conversationDetailId &&
70
+ result.artifactDirective?.behavior !== 'suppress' &&
71
+ typeof runner.ProcessAgentArtifacts === 'function') {
72
+ try {
73
+ // Each step in a task graph is an independent workflow node and multiple steps
74
+ // in the same graph share the originating ConversationDetailID. Enforcing
75
+ // `behavior: 'create-new'` (while preserving any directive name/description)
76
+ // prevents a step from accidentally versioning an earlier turn's artifact or
77
+ // overwriting a sibling DAG step's artifact via FindPreviousArtifactForMessage.
78
+ const stepArtifactResult = {
79
+ ...result,
80
+ artifactDirective: {
81
+ ...result.artifactDirective,
82
+ behavior: 'create-new',
83
+ },
84
+ };
85
+ await runner.ProcessAgentArtifacts(stepArtifactResult, conversationDetailId, undefined, actingUser, params.Provider);
86
+ }
87
+ catch (artifactErr) {
88
+ LogError(`[TaskGraphAgentRunner] Task ${params.TaskID}: artifact persistence failed (non-fatal): ` +
89
+ `${artifactErr instanceof Error ? artifactErr.message : String(artifactErr)}`);
90
+ }
91
+ }
39
92
  return {
40
93
  Success: success,
41
94
  Output: this.extractOutput(result),
@@ -49,6 +102,54 @@ export class TaskGraphAgentRunner {
49
102
  return { Success: false, ErrorMessage: message };
50
103
  }
51
104
  }
105
+ resolveActingUser(ownerUserId, fallback) {
106
+ if (!ownerUserId) {
107
+ return fallback;
108
+ }
109
+ try {
110
+ const users = UserCache.Instance?.Users ?? UserCache.Users ?? [];
111
+ const matched = users.find((u) => UUIDsEqual(u.ID, ownerUserId));
112
+ if (matched) {
113
+ return matched;
114
+ }
115
+ }
116
+ catch {
117
+ // Fall back to params.ContextUser when UserCache is not initialized.
118
+ }
119
+ return fallback;
120
+ }
121
+ /**
122
+ * Resolves the step task's `Name`, `Description`, and originating `ConversationDetailID`
123
+ * (falling back to the parent workflow task row for `ConversationDetailID`).
124
+ */
125
+ async resolveTaskContext(params) {
126
+ if (!params.TaskID) {
127
+ return { name: null, description: null, conversationDetailId: null };
128
+ }
129
+ try {
130
+ const task = await params.Provider.GetEntityObject('MJ: Tasks', params.ContextUser);
131
+ if (!(await task.Load(params.TaskID))) {
132
+ return { name: null, description: null, conversationDetailId: null };
133
+ }
134
+ const rawDesc = (task.Description || '').trim();
135
+ const cleanDesc = rawDesc.split(/\n\n--- (?:Output|Error) ---\n/)[0]?.trim() || null;
136
+ let conversationDetailId = task.ConversationDetailID ?? null;
137
+ if (!conversationDetailId && task.ParentID) {
138
+ const parentTask = await params.Provider.GetEntityObject('MJ: Tasks', params.ContextUser);
139
+ if (await parentTask.Load(task.ParentID)) {
140
+ conversationDetailId = parentTask.ConversationDetailID ?? null;
141
+ }
142
+ }
143
+ return {
144
+ name: task.Name?.trim() || null,
145
+ description: cleanDesc,
146
+ conversationDetailId,
147
+ };
148
+ }
149
+ catch {
150
+ return { name: null, description: null, conversationDetailId: null };
151
+ }
152
+ }
52
153
  /**
53
154
  * Adapts the agent framework's progress callback onto the dispatcher's plain sink.
54
155
  *
@@ -95,14 +196,19 @@ export class TaskGraphAgentRunner {
95
196
  }
96
197
  }
97
198
  /**
98
- * Builds the agent's instruction from the task's own input plus its dependencies' outputs.
199
+ * Builds the agent's instruction from the task's name/description, its structured input payload,
200
+ * and its dependencies' outputs.
99
201
  *
100
202
  * Dependency outputs are included inline because a task's whole reason for depending on another
101
203
  * is to consume what it produced. They are rendered as labelled JSON rather than prose so the
102
204
  * agent can parse them reliably rather than inferring structure from formatting.
103
205
  */
104
- buildPrompt(params) {
206
+ buildPrompt(params, taskName, taskDescription) {
105
207
  const sections = [];
208
+ if (taskName || taskDescription) {
209
+ const header = taskName ? `## Task: ${taskName}` : '## Task Description';
210
+ sections.push(taskDescription ? `${header}\n${taskDescription}` : header);
211
+ }
106
212
  if (params.InputPayload != null) {
107
213
  sections.push(`## Task input\n\`\`\`json\n${JSON.stringify(params.InputPayload, null, 2)}\n\`\`\``);
108
214
  }
@@ -116,12 +222,54 @@ export class TaskGraphAgentRunner {
116
222
  ? sections.join('\n\n')
117
223
  : 'Execute this task.';
118
224
  }
119
- /** Prefers a structured payload over prose, so downstream tasks get data rather than text. */
225
+ /**
226
+ * Prefers a structured payload over prose so downstream tasks get data rather than text,
227
+ * while preserving `agentRun.Message` when the payload object has no `message`/`summary`
228
+ * property (e.g., when a sub-agent returns a clarification question or human-readable summary)
229
+ * and normalizing `results` / `result` / `succeeded` for downstream condition evaluation.
230
+ */
120
231
  extractOutput(result) {
121
232
  const r = result;
122
- if (r?.payload != null)
233
+ const runMessage = typeof r?.agentRun?.Message === 'string' ? r.agentRun.Message.trim() : '';
234
+ const isChatStop = r?.agentRun?.FinalStep === 'Chat';
235
+ if (r?.payload != null) {
236
+ if (typeof r.payload === 'object' && !Array.isArray(r.payload)) {
237
+ const payloadObj = r.payload;
238
+ const enriched = { ...payloadObj };
239
+ if (enriched.results &&
240
+ typeof enriched.results === 'object' &&
241
+ !Array.isArray(enriched.results)) {
242
+ for (const [k, v] of Object.entries(enriched.results)) {
243
+ if (enriched[k] === undefined) {
244
+ enriched[k] = v;
245
+ }
246
+ }
247
+ }
248
+ if (enriched.results !== undefined && enriched.result === undefined) {
249
+ enriched.result = enriched.results;
250
+ }
251
+ else if (enriched.result !== undefined && enriched.results === undefined) {
252
+ enriched.results = enriched.result;
253
+ }
254
+ if (runMessage && enriched.message == null && enriched.summary == null) {
255
+ enriched.message = runMessage;
256
+ }
257
+ if (isChatStop) {
258
+ enriched.finalStep = 'Chat';
259
+ }
260
+ else if (typeof r.success === 'boolean' && enriched.succeeded === undefined) {
261
+ enriched.succeeded = r.success;
262
+ }
263
+ return enriched;
264
+ }
123
265
  return r.payload;
124
- return r?.agentRun?.Message ?? null;
266
+ }
267
+ if (runMessage) {
268
+ return isChatStop
269
+ ? { message: runMessage, finalStep: 'Chat' }
270
+ : { message: runMessage, succeeded: r?.success === true };
271
+ }
272
+ return null;
125
273
  }
126
274
  }
127
275
  //# sourceMappingURL=TaskGraphAgentRunner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskGraphAgentRunner.js","sourceRoot":"","sources":["../../src/services/TaskGraphAgentRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TaskGraphAgentRunner.js","sourceRoot":"","sources":["../../src/services/TaskGraphAgentRunner.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@
13
13
  * @module @memberjunction/server
14
14
  */
15
15
  import { type UserInfo } from '@memberjunction/core';
16
+ import type { PubSubEngine } from 'type-graphql';
16
17
  import type { ProviderFactory, TaskContinuationDeliverer, TaskContinuationParams } from '@memberjunction/task-graph';
17
18
  /**
18
19
  * Delivers a finished graph's outcome — as a conversation message, or by starting the submitting
@@ -29,12 +30,13 @@ import type { ProviderFactory, TaskContinuationDeliverer, TaskContinuationParams
29
30
  export declare class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer {
30
31
  private readonly providerFactory;
31
32
  private readonly contextUser;
33
+ private readonly pubSub?;
32
34
  /**
33
35
  * @param providerFactory mints a fresh provider per delivery, for the same reason the dispatcher
34
36
  * does: deliveries run outside any request and concurrently with task execution, so
35
37
  * sharing one provider would share one transaction scope across unrelated work.
36
38
  */
37
- constructor(providerFactory: ProviderFactory, contextUser: UserInfo);
39
+ constructor(providerFactory: ProviderFactory, contextUser: UserInfo, pubSub?: PubSubEngine);
38
40
  /**
39
41
  * Posts the roll-up as an AI-role message in the graph's conversation, on the fork of the
40
42
  * message that started the graph (Main when that message is in Main).
@@ -55,8 +57,58 @@ export declare class TaskGraphContinuationDeliverer implements TaskContinuationD
55
57
  * means there is budget left, and stamping the depth is what keeps that true for the next hop.
56
58
  */
57
59
  Reinvoke(params: TaskContinuationParams): Promise<void>;
58
- /** The conversation and fork (null is Main) of the detail that started the graph; null when it cannot be loaded. */
60
+ /**
61
+ * Broadcasts a completion event on `PUSH_STATUS_UPDATES_TOPIC` so open conversation tabs
62
+ * immediately reload both the originating workflow message and the newly posted continuation reply.
63
+ */
64
+ private publishCompletion;
65
+ /**
66
+ * The conversation, fork (null is Main), owner user, loaded entity, and whether the originating
67
+ * detail is still the latest visible message in the conversation; null when it cannot be loaded.
68
+ */
59
69
  private resolveOrigin;
70
+ /**
71
+ * Returns `true` when `originDetailId` is the newest visible message on its conversation branch,
72
+ * meaning no intervening messages were posted while the workflow ran in the background.
73
+ */
74
+ private isLatestConversationMessage;
75
+ /**
76
+ * Replaces the originating message's stale "I'll follow up when it finishes" copy with a clean
77
+ * completion note when the workflow outcome was delivered in a separate bottom continuation message.
78
+ */
79
+ private markOriginDetailCompleted;
80
+ /**
81
+ * Looks up the conversation owner's `UserID` from `MJ: Conversations` when the originating
82
+ * `MJ: Conversation Details` row is an AI message (`detail.UserID === null`).
83
+ */
84
+ private lookupConversationOwnerId;
85
+ /**
86
+ * Resolves the conversation owner's `UserInfo` from `UserCache` so `MJConversationDetailEntityExtended`
87
+ * ownership checks and artifact ownership succeed. Falls back to `this.contextUser` when not cached.
88
+ */
89
+ private resolveActingUser;
90
+ /**
91
+ * Loads child task `OutputPayload` rows for `params.ParentTaskID`, strips upstream payload keys
92
+ * inherited unchanged via `TaskGraphDispatcher.applyStepOutputMapping`, and replaces generic
93
+ * `"output available (N chars)"` summaries with readable output excerpts so both `PostMessage`
94
+ * and `Reinvoke` carry each step's own concrete results into the conversation.
95
+ */
96
+ private enrichTasksWithOutputs;
97
+ /**
98
+ * Resolves a human-readable explanation for each `Skipped` task in `params.Tasks` by inspecting
99
+ * its `MJ: Task Dependencies` (`Condition` and upstream prerequisite status).
100
+ */
101
+ private resolveSkippedTaskReasons;
102
+ /**
103
+ * Removes top-level JSON keys from `rawOutput` whose serialized value is identical to an
104
+ * earlier step's output in the same workflow (`TaskGraphDispatcher.applyStepOutputMapping`
105
+ * merges `{ ...payload, ...output }`), while recording this step's keys for downstream steps.
106
+ */
107
+ private stripInheritedUpstreamKeys;
108
+ /**
109
+ * Extracts a human-readable excerpt from a task's serialized `OutputPayload` (up to 2,500 chars).
110
+ */
111
+ private extractOutputExcerpt;
60
112
  /**
61
113
  * Renders the outcome as Markdown.
62
114
  *
@@ -1 +1 @@
1
- {"version":3,"file":"TaskGraphContinuationDeliverer.d.ts","sourceRoot":"","sources":["../../src/services/TaskGraphContinuationDeliverer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAA+C,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKlG,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAKrH;;;;;;;;;;;GAWG;AACH,qBAAa,8BAA+B,YAAW,yBAAyB;IAOxE,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAPhC;;;;OAIG;gBAEkB,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,QAAQ;IAG1C;;;;;;;OAOG;IACU,WAAW,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCvE;;;;;;;;;OASG;IACU,QAAQ,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDpE,oHAAoH;YACtG,aAAa;IAK3B;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,UAAU;CAQrB"}
1
+ {"version":3,"file":"TaskGraphContinuationDeliverer.d.ts","sourceRoot":"","sources":["../../src/services/TaskGraphContinuationDeliverer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAwD,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAO3G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAMrH;;;;;;;;;;;GAWG;AACH,qBAAa,8BAA+B,YAAW,yBAAyB;IAOxE,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAR5B;;;;OAIG;gBAEkB,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,QAAQ,EACrB,MAAM,CAAC,EAAE,YAAY;IAG1C;;;;;;;OAOG;IACU,WAAW,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgFvE;;;;;;;;;OASG;IACU,QAAQ,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2LpE;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAsDzB;;;OAGG;YACW,aAAa;IA4C3B;;;OAGG;YACW,2BAA2B;IAiCzC;;;OAGG;YACW,yBAAyB;IAsBvC;;;OAGG;YACW,yBAAyB;IAyBvC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;;;OAKG;YACW,sBAAsB;IAwEpC;;;OAGG;YACW,yBAAyB;IA6EvC;;;;OAIG;IACH,OAAO,CAAC,0BAA0B;IAyBlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyG5B;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,UAAU;CASrB"}