@memberjunction/server 4.4.0 → 5.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.
- package/dist/agents/skip-agent.js +9 -9
- package/dist/agents/skip-agent.js.map +1 -1
- package/dist/apolloServer/TransactionPlugin.d.ts +4 -0
- package/dist/apolloServer/TransactionPlugin.d.ts.map +1 -0
- package/dist/apolloServer/TransactionPlugin.js +46 -0
- package/dist/apolloServer/TransactionPlugin.js.map +1 -0
- package/dist/auth/APIKeyScopeAuth.js.map +1 -1
- package/dist/auth/__tests__/backward-compatibility.test.d.ts +2 -0
- package/dist/auth/__tests__/backward-compatibility.test.d.ts.map +1 -0
- package/dist/auth/__tests__/backward-compatibility.test.js +135 -0
- package/dist/auth/__tests__/backward-compatibility.test.js.map +1 -0
- package/dist/auth/exampleNewUserSubClass.d.ts +2 -2
- package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/newUsers.d.ts +2 -2
- package/dist/auth/newUsers.d.ts.map +1 -1
- package/dist/auth/newUsers.js +6 -6
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/entitySubclasses/entityPermissions.server.d.ts +2 -2
- package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
- package/dist/entitySubclasses/entityPermissions.server.js +3 -3
- package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
- package/dist/generated/generated.d.ts +10724 -10721
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +48710 -48698
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/DeleteOptionsInput.d.ts +12 -2
- package/dist/generic/DeleteOptionsInput.d.ts.map +1 -1
- package/dist/generic/DeleteOptionsInput.js +12 -2
- package/dist/generic/DeleteOptionsInput.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +6 -6
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.js +3 -3
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/resolvers/AskSkipResolver.d.ts +123 -0
- package/dist/resolvers/AskSkipResolver.d.ts.map +1 -0
- package/dist/resolvers/AskSkipResolver.js +1788 -0
- package/dist/resolvers/AskSkipResolver.js.map +1 -0
- package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
- package/dist/resolvers/CreateQueryResolver.d.ts +3 -3
- package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/CreateQueryResolver.js +19 -19
- package/dist/resolvers/CreateQueryResolver.js.map +1 -1
- package/dist/resolvers/EntityResolver.js +1 -1
- package/dist/resolvers/EntityResolver.js.map +1 -1
- package/dist/resolvers/FileCategoryResolver.js +4 -4
- package/dist/resolvers/FileCategoryResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.js +20 -20
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.js +1 -1
- package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
- package/dist/resolvers/ISAEntityResolver.d.ts +22 -1
- package/dist/resolvers/ISAEntityResolver.d.ts.map +1 -1
- package/dist/resolvers/ISAEntityResolver.js +77 -1
- package/dist/resolvers/ISAEntityResolver.js.map +1 -1
- package/dist/resolvers/ReportResolver.js +3 -3
- package/dist/resolvers/ReportResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +3 -3
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +1 -1
- package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +2 -2
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/SyncDataResolver.js +1 -1
- package/dist/resolvers/SyncDataResolver.js.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.d.ts +9 -9
- package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.js +10 -10
- package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
- package/dist/resolvers/UserFavoriteResolver.js +2 -2
- package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
- package/dist/resolvers/UserResolver.js +8 -8
- package/dist/resolvers/UserResolver.js.map +1 -1
- package/dist/resolvers/UserViewResolver.js +5 -5
- package/dist/resolvers/UserViewResolver.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +1 -1
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/scheduler/LearningCycleScheduler.d.ts +4 -0
- package/dist/scheduler/LearningCycleScheduler.d.ts.map +1 -0
- package/dist/scheduler/LearningCycleScheduler.js +4 -0
- package/dist/scheduler/LearningCycleScheduler.js.map +1 -0
- package/dist/services/TaskOrchestrator.d.ts +1 -1
- package/dist/services/TaskOrchestrator.js +5 -5
- package/dist/services/TaskOrchestrator.js.map +1 -1
- package/package.json +52 -52
- package/src/agents/skip-agent.ts +9 -9
- package/src/auth/APIKeyScopeAuth.ts +5 -5
- package/src/auth/exampleNewUserSubClass.ts +2 -2
- package/src/auth/index.ts +3 -3
- package/src/auth/newUsers.ts +9 -9
- package/src/entitySubclasses/entityPermissions.server.ts +3 -3
- package/src/generated/generated.ts +31186 -31177
- package/src/generic/DeleteOptionsInput.ts +12 -2
- package/src/generic/ResolverBase.ts +7 -7
- package/src/generic/RunViewResolver.ts +3 -3
- package/src/resolvers/APIKeyResolver.ts +2 -2
- package/src/resolvers/ComponentRegistryResolver.ts +9 -9
- package/src/resolvers/CreateQueryResolver.ts +18 -18
- package/src/resolvers/EntityResolver.ts +1 -1
- package/src/resolvers/FileCategoryResolver.ts +5 -5
- package/src/resolvers/FileResolver.ts +27 -27
- package/src/resolvers/GetDataContextDataResolver.ts +2 -2
- package/src/resolvers/ISAEntityResolver.ts +77 -1
- package/src/resolvers/ReportResolver.ts +4 -4
- package/src/resolvers/RunAIAgentResolver.ts +7 -7
- package/src/resolvers/RunAIPromptResolver.ts +1 -1
- package/src/resolvers/RunTemplateResolver.ts +4 -4
- package/src/resolvers/SyncDataResolver.ts +3 -3
- package/src/resolvers/SyncRolesUsersResolver.ts +26 -26
- package/src/resolvers/UserFavoriteResolver.ts +2 -2
- package/src/resolvers/UserResolver.ts +8 -8
- package/src/resolvers/UserViewResolver.ts +6 -6
- package/src/rest/ViewOperationsHandler.ts +1 -1
- package/src/services/TaskOrchestrator.ts +31 -31
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Metadata, RunView, UserInfo, LogError, LogStatus } from '@memberjunction/core';
|
|
2
|
-
import {
|
|
2
|
+
import { MJTaskEntity, MJTaskDependencyEntity, MJTaskTypeEntity, MJConversationDetailEntity, MJArtifactEntity, MJArtifactVersionEntity, MJConversationDetailArtifactEntity, MJUserNotificationEntity } from '@memberjunction/core-entities';
|
|
3
3
|
import { AgentRunner } from '@memberjunction/ai-agents';
|
|
4
4
|
import { ChatMessageRole } from '@memberjunction/ai';
|
|
5
5
|
import { PubSubEngine } from 'type-graphql';
|
|
@@ -78,7 +78,7 @@ export class TaskOrchestrator {
|
|
|
78
78
|
|
|
79
79
|
// Create the task type if it doesn't exist
|
|
80
80
|
const md = new Metadata();
|
|
81
|
-
const taskType = await md.GetEntityObject<
|
|
81
|
+
const taskType = await md.GetEntityObject<MJTaskTypeEntity>('MJ: Task Types', this.contextUser);
|
|
82
82
|
taskType.Name = 'AI Agent Execution';
|
|
83
83
|
taskType.Description = 'Task executed by an AI agent as part of conversation workflow';
|
|
84
84
|
|
|
@@ -96,7 +96,7 @@ export class TaskOrchestrator {
|
|
|
96
96
|
* @param taskGraph Task graph from Conversation Manager
|
|
97
97
|
* @param conversationDetailId ID of the conversation detail that triggered this
|
|
98
98
|
* @param environmentId Environment ID
|
|
99
|
-
* @returns Object with parentTaskId and map of tempId -> actual
|
|
99
|
+
* @returns Object with parentTaskId and map of tempId -> actual MJTaskEntity ID
|
|
100
100
|
*/
|
|
101
101
|
async createTasksFromGraph(
|
|
102
102
|
taskGraph: TaskGraphResponse,
|
|
@@ -108,7 +108,7 @@ export class TaskOrchestrator {
|
|
|
108
108
|
const tempIdToRealId = new Map<string, string>();
|
|
109
109
|
|
|
110
110
|
// Create parent workflow task
|
|
111
|
-
const parentTask = await md.GetEntityObject<
|
|
111
|
+
const parentTask = await md.GetEntityObject<MJTaskEntity>('MJ: Tasks', this.contextUser);
|
|
112
112
|
parentTask.Name = taskGraph.workflowName;
|
|
113
113
|
parentTask.Description = taskGraph.reasoning || 'AI-orchestrated workflow';
|
|
114
114
|
parentTask.TypeID = taskTypeId;
|
|
@@ -139,7 +139,7 @@ export class TaskOrchestrator {
|
|
|
139
139
|
|
|
140
140
|
// Create all child tasks
|
|
141
141
|
for (const taskDef of uniqueTasks) {
|
|
142
|
-
const task = await md.GetEntityObject<
|
|
142
|
+
const task = await md.GetEntityObject<MJTaskEntity>('MJ: Tasks', this.contextUser);
|
|
143
143
|
|
|
144
144
|
// Find agent by name
|
|
145
145
|
const agent = await this.findAgentByName(taskDef.agentName);
|
|
@@ -187,7 +187,7 @@ export class TaskOrchestrator {
|
|
|
187
187
|
continue;
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
const dependency = await md.GetEntityObject<
|
|
190
|
+
const dependency = await md.GetEntityObject<MJTaskDependencyEntity>('MJ: Task Dependencies', this.contextUser);
|
|
191
191
|
dependency.TaskID = taskId;
|
|
192
192
|
dependency.DependsOnTaskID = dependsOnId;
|
|
193
193
|
dependency.DependencyType = 'Prerequisite';
|
|
@@ -271,7 +271,7 @@ export class TaskOrchestrator {
|
|
|
271
271
|
private async findAgentByName(agentName: string): Promise<AIAgentEntityExtended | null> {
|
|
272
272
|
const rv = new RunView();
|
|
273
273
|
const result = await rv.RunView<AIAgentEntityExtended>({
|
|
274
|
-
EntityName: 'AI Agents',
|
|
274
|
+
EntityName: 'MJ: AI Agents',
|
|
275
275
|
ExtraFilter: `Name='${agentName.replace(/'/g, "''")}'`,
|
|
276
276
|
ResultType: 'entity_object'
|
|
277
277
|
}, this.contextUser);
|
|
@@ -294,7 +294,7 @@ export class TaskOrchestrator {
|
|
|
294
294
|
|
|
295
295
|
// Get parent task for progress updates
|
|
296
296
|
const md = new Metadata();
|
|
297
|
-
const parentTask = await md.GetEntityObject<
|
|
297
|
+
const parentTask = await md.GetEntityObject<MJTaskEntity>('MJ: Tasks', this.contextUser);
|
|
298
298
|
await parentTask.Load(parentTaskId);
|
|
299
299
|
|
|
300
300
|
// Publish workflow start
|
|
@@ -341,11 +341,11 @@ export class TaskOrchestrator {
|
|
|
341
341
|
/**
|
|
342
342
|
* Find tasks that are ready to execute (pending with no incomplete dependencies)
|
|
343
343
|
*/
|
|
344
|
-
private async findEligibleTasks(parentTaskId: string): Promise<
|
|
344
|
+
private async findEligibleTasks(parentTaskId: string): Promise<MJTaskEntity[]> {
|
|
345
345
|
const rv = new RunView();
|
|
346
346
|
|
|
347
347
|
// Get all pending tasks for this parent
|
|
348
|
-
const tasksResult = await rv.RunView<
|
|
348
|
+
const tasksResult = await rv.RunView<MJTaskEntity>({
|
|
349
349
|
EntityName: 'MJ: Tasks',
|
|
350
350
|
ExtraFilter: `ParentID='${parentTaskId}' AND Status='Pending'`,
|
|
351
351
|
ResultType: 'entity_object'
|
|
@@ -355,7 +355,7 @@ export class TaskOrchestrator {
|
|
|
355
355
|
return [];
|
|
356
356
|
}
|
|
357
357
|
|
|
358
|
-
const eligibleTasks:
|
|
358
|
+
const eligibleTasks: MJTaskEntity[] = [];
|
|
359
359
|
|
|
360
360
|
// Check each task for incomplete dependencies
|
|
361
361
|
for (const task of tasksResult.Results) {
|
|
@@ -373,14 +373,14 @@ export class TaskOrchestrator {
|
|
|
373
373
|
*/
|
|
374
374
|
private async updateParentTaskProgress(parentTaskId: string): Promise<void> {
|
|
375
375
|
const md = new Metadata();
|
|
376
|
-
const parentTask = await md.GetEntityObject<
|
|
376
|
+
const parentTask = await md.GetEntityObject<MJTaskEntity>('MJ: Tasks', this.contextUser);
|
|
377
377
|
const loaded = await parentTask.Load(parentTaskId);
|
|
378
378
|
if (!loaded) return;
|
|
379
379
|
|
|
380
380
|
const rv = new RunView();
|
|
381
381
|
|
|
382
382
|
// Get all child tasks
|
|
383
|
-
const childrenResult = await rv.RunView<
|
|
383
|
+
const childrenResult = await rv.RunView<MJTaskEntity>({
|
|
384
384
|
EntityName: 'MJ: Tasks',
|
|
385
385
|
ExtraFilter: `ParentID='${parentTaskId}'`,
|
|
386
386
|
ResultType: 'entity_object'
|
|
@@ -406,7 +406,7 @@ export class TaskOrchestrator {
|
|
|
406
406
|
*/
|
|
407
407
|
private async completeParentTask(parentTaskId: string): Promise<void> {
|
|
408
408
|
const md = new Metadata();
|
|
409
|
-
const parentTask = await md.GetEntityObject<
|
|
409
|
+
const parentTask = await md.GetEntityObject<MJTaskEntity>('MJ: Tasks', this.contextUser);
|
|
410
410
|
const loaded = await parentTask.Load(parentTaskId);
|
|
411
411
|
if (!loaded) return;
|
|
412
412
|
|
|
@@ -430,7 +430,7 @@ export class TaskOrchestrator {
|
|
|
430
430
|
const rv = new RunView();
|
|
431
431
|
|
|
432
432
|
// Get dependencies
|
|
433
|
-
const depsResult = await rv.RunView<
|
|
433
|
+
const depsResult = await rv.RunView<MJTaskDependencyEntity>({
|
|
434
434
|
EntityName: 'MJ: Task Dependencies',
|
|
435
435
|
ExtraFilter: `TaskID='${taskId}'`,
|
|
436
436
|
ResultType: 'entity_object'
|
|
@@ -454,9 +454,9 @@ export class TaskOrchestrator {
|
|
|
454
454
|
/**
|
|
455
455
|
* Load a task by ID
|
|
456
456
|
*/
|
|
457
|
-
private async loadTask(taskId: string): Promise<
|
|
457
|
+
private async loadTask(taskId: string): Promise<MJTaskEntity | null> {
|
|
458
458
|
const md = new Metadata();
|
|
459
|
-
const task = await md.GetEntityObject<
|
|
459
|
+
const task = await md.GetEntityObject<MJTaskEntity>('MJ: Tasks', this.contextUser);
|
|
460
460
|
const loaded = await task.Load(taskId);
|
|
461
461
|
return loaded ? task : null;
|
|
462
462
|
}
|
|
@@ -464,7 +464,7 @@ export class TaskOrchestrator {
|
|
|
464
464
|
/**
|
|
465
465
|
* Execute a single task
|
|
466
466
|
*/
|
|
467
|
-
private async executeTask(task:
|
|
467
|
+
private async executeTask(task: MJTaskEntity): Promise<TaskExecutionResult> {
|
|
468
468
|
try {
|
|
469
469
|
LogStatus(`Executing task: ${task.Name} (${task.ID})`);
|
|
470
470
|
|
|
@@ -475,7 +475,7 @@ export class TaskOrchestrator {
|
|
|
475
475
|
|
|
476
476
|
// Load the agent entity
|
|
477
477
|
const md = new Metadata();
|
|
478
|
-
const agentEntity = await md.GetEntityObject<AIAgentEntityExtended>('AI Agents', this.contextUser);
|
|
478
|
+
const agentEntity = await md.GetEntityObject<AIAgentEntityExtended>('MJ: AI Agents', this.contextUser);
|
|
479
479
|
const loaded = await agentEntity.Load(task.AgentID!);
|
|
480
480
|
if (!loaded) {
|
|
481
481
|
throw new Error(`Agent with ID ${task.AgentID} not found`);
|
|
@@ -582,7 +582,7 @@ export class TaskOrchestrator {
|
|
|
582
582
|
/**
|
|
583
583
|
* Extract input payload from task metadata
|
|
584
584
|
*/
|
|
585
|
-
private extractInputPayload(task:
|
|
585
|
+
private extractInputPayload(task: MJTaskEntity): any | null {
|
|
586
586
|
if (!task.Description) return null;
|
|
587
587
|
|
|
588
588
|
const metadataMatch = task.Description.match(/__TASK_METADATA__\n(.+?)(?:\n\n|$)/s);
|
|
@@ -604,7 +604,7 @@ export class TaskOrchestrator {
|
|
|
604
604
|
const rv = new RunView();
|
|
605
605
|
|
|
606
606
|
// Get dependencies
|
|
607
|
-
const depsResult = await rv.RunView<
|
|
607
|
+
const depsResult = await rv.RunView<MJTaskDependencyEntity>({
|
|
608
608
|
EntityName: 'MJ: Task Dependencies',
|
|
609
609
|
ExtraFilter: `TaskID='${taskId}'`,
|
|
610
610
|
ResultType: 'entity_object'
|
|
@@ -636,7 +636,7 @@ export class TaskOrchestrator {
|
|
|
636
636
|
/**
|
|
637
637
|
* Build conversation messages with task input and dependent outputs formatted as markdown
|
|
638
638
|
*/
|
|
639
|
-
private async buildConversationMessages(task:
|
|
639
|
+
private async buildConversationMessages(task: MJTaskEntity): Promise<any[]> {
|
|
640
640
|
const messages: any[] = [];
|
|
641
641
|
|
|
642
642
|
// Start with task description/name as base content
|
|
@@ -702,7 +702,7 @@ export class TaskOrchestrator {
|
|
|
702
702
|
const md = new Metadata();
|
|
703
703
|
|
|
704
704
|
// Create Artifact header
|
|
705
|
-
const artifact = await md.GetEntityObject<
|
|
705
|
+
const artifact = await md.GetEntityObject<MJArtifactEntity>('MJ: Artifacts', this.contextUser);
|
|
706
706
|
artifact.Name = `${agent.Name} - ${taskName} - ${new Date().toLocaleString()}`;
|
|
707
707
|
artifact.Description = `Artifact generated by ${agent.Name} for task: ${taskName} (${output.type})`;
|
|
708
708
|
|
|
@@ -732,7 +732,7 @@ export class TaskOrchestrator {
|
|
|
732
732
|
LogStatus(`Created artifact: ${artifact.Name} (${artifact.ID})`);
|
|
733
733
|
|
|
734
734
|
// Create Artifact Version with content
|
|
735
|
-
const version = await md.GetEntityObject<
|
|
735
|
+
const version = await md.GetEntityObject<MJArtifactVersionEntity>('MJ: Artifact Versions', this.contextUser);
|
|
736
736
|
version.ArtifactID = artifact.ID;
|
|
737
737
|
version.VersionNumber = 1;
|
|
738
738
|
|
|
@@ -771,7 +771,7 @@ export class TaskOrchestrator {
|
|
|
771
771
|
}
|
|
772
772
|
|
|
773
773
|
// Create M2M relationship linking artifact to conversation detail
|
|
774
|
-
const junction = await md.GetEntityObject<
|
|
774
|
+
const junction = await md.GetEntityObject<MJConversationDetailArtifactEntity>(
|
|
775
775
|
'MJ: Conversation Detail Artifacts',
|
|
776
776
|
this.contextUser
|
|
777
777
|
);
|
|
@@ -795,7 +795,7 @@ export class TaskOrchestrator {
|
|
|
795
795
|
* Create user notification for task graph completion
|
|
796
796
|
* Notifies user that their multi-step workflow has completed
|
|
797
797
|
*/
|
|
798
|
-
private async createTaskGraphCompletionNotification(parentTask:
|
|
798
|
+
private async createTaskGraphCompletionNotification(parentTask: MJTaskEntity): Promise<void> {
|
|
799
799
|
try {
|
|
800
800
|
if (!parentTask.ConversationDetailID) {
|
|
801
801
|
LogStatus('Skipping notification - no conversation detail linked');
|
|
@@ -805,8 +805,8 @@ export class TaskOrchestrator {
|
|
|
805
805
|
const md = new Metadata();
|
|
806
806
|
|
|
807
807
|
// Load conversation detail to get conversation ID
|
|
808
|
-
const detail = await md.GetEntityObject<
|
|
809
|
-
'Conversation Details',
|
|
808
|
+
const detail = await md.GetEntityObject<MJConversationDetailEntity>(
|
|
809
|
+
'MJ: Conversation Details',
|
|
810
810
|
this.contextUser
|
|
811
811
|
);
|
|
812
812
|
if (!(await detail.Load(parentTask.ConversationDetailID))) {
|
|
@@ -815,7 +815,7 @@ export class TaskOrchestrator {
|
|
|
815
815
|
|
|
816
816
|
// Count child tasks and success rate
|
|
817
817
|
const rv = new RunView();
|
|
818
|
-
const tasksResult = await rv.RunView<
|
|
818
|
+
const tasksResult = await rv.RunView<MJTaskEntity>({
|
|
819
819
|
EntityName: 'MJ: Tasks',
|
|
820
820
|
ExtraFilter: `ParentID='${parentTask.ID}'`,
|
|
821
821
|
ResultType: 'entity_object'
|
|
@@ -826,8 +826,8 @@ export class TaskOrchestrator {
|
|
|
826
826
|
const totalCount = childTasks.length;
|
|
827
827
|
|
|
828
828
|
// Create notification
|
|
829
|
-
const notification = await md.GetEntityObject<
|
|
830
|
-
'User Notifications',
|
|
829
|
+
const notification = await md.GetEntityObject<MJUserNotificationEntity>(
|
|
830
|
+
'MJ: User Notifications',
|
|
831
831
|
this.contextUser
|
|
832
832
|
);
|
|
833
833
|
|