@memberjunction/server 2.104.0 → 2.106.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/agents/skip-agent.d.ts +1 -1
  2. package/dist/agents/skip-agent.d.ts.map +1 -1
  3. package/dist/agents/skip-agent.js +1189 -24
  4. package/dist/agents/skip-agent.js.map +1 -1
  5. package/dist/agents/skip-sdk.d.ts.map +1 -1
  6. package/dist/agents/skip-sdk.js +3 -4
  7. package/dist/agents/skip-sdk.js.map +1 -1
  8. package/dist/generated/generated.d.ts +3621 -3407
  9. package/dist/generated/generated.d.ts.map +1 -1
  10. package/dist/generated/generated.js +21331 -19952
  11. package/dist/generated/generated.js.map +1 -1
  12. package/dist/index.d.ts +3 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +5 -18
  15. package/dist/index.js.map +1 -1
  16. package/dist/resolvers/CreateQueryResolver.d.ts +2 -2
  17. package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
  18. package/dist/resolvers/CreateQueryResolver.js +12 -12
  19. package/dist/resolvers/CreateQueryResolver.js.map +1 -1
  20. package/dist/resolvers/EntityResolver.d.ts +2 -2
  21. package/dist/resolvers/EntityResolver.d.ts.map +1 -1
  22. package/dist/resolvers/EntityResolver.js +4 -4
  23. package/dist/resolvers/EntityResolver.js.map +1 -1
  24. package/dist/resolvers/FileCategoryResolver.d.ts +1 -1
  25. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
  26. package/dist/resolvers/FileCategoryResolver.js +2 -2
  27. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  28. package/dist/resolvers/FileResolver.d.ts +6 -6
  29. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  30. package/dist/resolvers/FileResolver.js +14 -14
  31. package/dist/resolvers/FileResolver.js.map +1 -1
  32. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
  33. package/dist/resolvers/PotentialDuplicateRecordResolver.js +0 -2
  34. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
  35. package/dist/resolvers/RunAIAgentResolver.d.ts +2 -2
  36. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  37. package/dist/resolvers/RunAIAgentResolver.js +21 -17
  38. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  39. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  40. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  41. package/dist/resolvers/TaskResolver.d.ts +18 -0
  42. package/dist/resolvers/TaskResolver.d.ts.map +1 -0
  43. package/dist/resolvers/TaskResolver.js +138 -0
  44. package/dist/resolvers/TaskResolver.js.map +1 -0
  45. package/dist/resolvers/UserFavoriteResolver.d.ts +2 -2
  46. package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -1
  47. package/dist/resolvers/UserFavoriteResolver.js +5 -5
  48. package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
  49. package/dist/resolvers/UserResolver.d.ts +2 -2
  50. package/dist/resolvers/UserResolver.d.ts.map +1 -1
  51. package/dist/resolvers/UserResolver.js +7 -7
  52. package/dist/resolvers/UserResolver.js.map +1 -1
  53. package/dist/resolvers/UserViewResolver.d.ts +2 -2
  54. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  55. package/dist/resolvers/UserViewResolver.js +8 -8
  56. package/dist/resolvers/UserViewResolver.js.map +1 -1
  57. package/dist/services/TaskOrchestrator.d.ts +52 -0
  58. package/dist/services/TaskOrchestrator.d.ts.map +1 -0
  59. package/dist/services/TaskOrchestrator.js +486 -0
  60. package/dist/services/TaskOrchestrator.js.map +1 -0
  61. package/package.json +30 -38
  62. package/src/agents/skip-agent.ts +1176 -28
  63. package/src/agents/skip-sdk.ts +3 -5
  64. package/src/generated/generated.ts +7664 -6785
  65. package/src/index.ts +7 -21
  66. package/src/resolvers/CreateQueryResolver.ts +6 -6
  67. package/src/resolvers/EntityResolver.ts +4 -4
  68. package/src/resolvers/FileCategoryResolver.ts +2 -2
  69. package/src/resolvers/FileResolver.ts +12 -12
  70. package/src/resolvers/PotentialDuplicateRecordResolver.ts +2 -3
  71. package/src/resolvers/RunAIAgentResolver.ts +7 -0
  72. package/src/resolvers/RunTemplateResolver.ts +1 -2
  73. package/src/resolvers/TaskResolver.ts +142 -0
  74. package/src/resolvers/UserFavoriteResolver.ts +5 -5
  75. package/src/resolvers/UserResolver.ts +7 -7
  76. package/src/resolvers/UserViewResolver.ts +8 -8
  77. package/src/services/TaskOrchestration-Integration.md +188 -0
  78. package/src/services/TaskOrchestrator.ts +756 -0
@@ -0,0 +1,188 @@
1
+ # Task Orchestration Integration Guide
2
+
3
+ ## Overview
4
+ This document explains how to integrate the TaskOrchestrator into the Conversation Manager agent flow.
5
+
6
+ ## Components Created
7
+
8
+ 1. **TaskOrchestrator** (`/services/TaskOrchestrator.ts`)
9
+ - Creates tasks from LLM task graphs
10
+ - Manages task dependencies
11
+ - Executes tasks in proper order
12
+ - Passes outputs between tasks
13
+
14
+ 2. **Updated Conversation Manager Prompt** (`/metadata/prompts/templates/conversations/conversation-manager-agent.template.md`)
15
+ - Now supports returning task graphs
16
+ - Backward compatible with simple agent delegation
17
+
18
+ ## Integration Points
19
+
20
+ ### 1. Where to Add Task Orchestration Logic
21
+
22
+ When the Conversation Manager agent returns a response, check the `payloadChangeRequest.newElements` for either:
23
+
24
+ **Simple delegation (existing):**
25
+ ```typescript
26
+ if (newElements.invokeAgent) {
27
+ // Existing flow - delegate to single agent
28
+ const agentName = newElements.invokeAgent;
29
+ // ... invoke agent ...
30
+ }
31
+ ```
32
+
33
+ **Multi-step orchestration (new):**
34
+ ```typescript
35
+ if (newElements.taskGraph) {
36
+ const taskGraph = newElements.taskGraph;
37
+
38
+ if (taskGraph.isMultiStep) {
39
+ // Create tasks in database
40
+ const orchestrator = new TaskOrchestrator(contextUser);
41
+ const taskIdMap = await orchestrator.createTasksFromGraph(
42
+ taskGraph,
43
+ conversationDetailId,
44
+ environmentId
45
+ );
46
+
47
+ // Execute tasks (respecting dependencies)
48
+ const results = await orchestrator.executeTasksForConversation(
49
+ conversationDetailId
50
+ );
51
+
52
+ // Send results back to conversation
53
+ // ... format and return results ...
54
+ }
55
+ }
56
+ ```
57
+
58
+ ### 2. Suggested Integration Location
59
+
60
+ **Option A: In RunAIAgent Resolver**
61
+ - File: `/packages/MJServer/src/resolvers/RunAIAgentResolver.ts`
62
+ - After agent execution, check the result payload for taskGraph
63
+ - Create and execute tasks if multi-step
64
+
65
+ **Option B: In AskSkip Resolver**
66
+ - File: `/packages/MJServer/src/resolvers/AskSkipResolver.ts`
67
+ - When processing conversation manager responses
68
+ - Check for taskGraph in the response payload
69
+
70
+ **Option C: New Task Resolver (Recommended)**
71
+ - Create `/packages/MJServer/src/resolvers/TaskResolver.ts`
72
+ - Add mutation: `ExecuteTaskGraph(taskGraph, conversationDetailId, environmentId)`
73
+ - Keep task orchestration logic separate and reusable
74
+
75
+ ### 3. Example Integration Code
76
+
77
+ ```typescript
78
+ import { TaskOrchestrator, TaskGraphResponse } from '../services/TaskOrchestrator.js';
79
+
80
+ // In your resolver after Conversation Manager responds
81
+ async handleConversationManagerResponse(
82
+ agentResult: ExecuteAgentResult,
83
+ conversationDetailId: string,
84
+ environmentId: string,
85
+ contextUser: UserInfo
86
+ ): Promise<void> {
87
+ // Check if response contains a task graph
88
+ if (agentResult.payload?.taskGraph) {
89
+ const taskGraph: TaskGraphResponse = agentResult.payload.taskGraph;
90
+
91
+ if (taskGraph.isMultiStep) {
92
+ LogStatus(`Multi-step workflow detected: ${taskGraph.tasks.length} tasks`);
93
+
94
+ // Create task orchestrator
95
+ const orchestrator = new TaskOrchestrator(contextUser);
96
+
97
+ // Create tasks and dependencies
98
+ const taskIdMap = await orchestrator.createTasksFromGraph(
99
+ taskGraph,
100
+ conversationDetailId,
101
+ environmentId
102
+ );
103
+
104
+ LogStatus(`Created ${taskIdMap.size} tasks with dependencies`);
105
+
106
+ // Execute tasks in proper order
107
+ const results = await orchestrator.executeTasksForConversation(
108
+ conversationDetailId
109
+ );
110
+
111
+ // Log results
112
+ for (const result of results) {
113
+ if (result.success) {
114
+ LogStatus(`Task ${result.taskId} completed successfully`);
115
+ } else {
116
+ LogError(`Task ${result.taskId} failed: ${result.error}`);
117
+ }
118
+ }
119
+
120
+ // Return task completion summary to user
121
+ return {
122
+ success: true,
123
+ message: `Completed ${results.filter(r => r.success).length} of ${results.length} tasks`,
124
+ results: results
125
+ };
126
+ }
127
+ }
128
+
129
+ // Simple agent delegation (existing flow)
130
+ if (agentResult.payload?.invokeAgent) {
131
+ // ... existing single-agent delegation logic ...
132
+ }
133
+ }
134
+ ```
135
+
136
+ ### 4. UI Integration
137
+
138
+ The existing task UI components already work with TaskEntity:
139
+ - `/packages/Angular/Generic/conversations/src/lib/components/task/task-list.component.ts`
140
+ - Tasks will automatically appear in the task list
141
+ - Users can see progress, dependencies, and results
142
+
143
+ ### 5. Testing
144
+
145
+ **Test Single-Step (Backward Compatibility):**
146
+ ```
147
+ User: "Analyze our sales data"
148
+ Expected: Conversation Manager delegates to Analysis Agent (existing behavior)
149
+ ```
150
+
151
+ **Test Multi-Step:**
152
+ ```
153
+ User: "Research associations with 5-30M revenue in USA, then create a GTM report"
154
+ Expected:
155
+ - Conversation Manager returns taskGraph
156
+ - Task 1 (Research) executes
157
+ - Task 2 (GTM Report) waits for Task 1
158
+ - Task 2 receives Task 1 output
159
+ - Both complete successfully
160
+ ```
161
+
162
+ ## Database Schema
163
+
164
+ No changes needed! TaskEntity and TaskDependencyEntity already exist with all required fields.
165
+
166
+ **Note:** For production, consider adding these optional columns to Task table:
167
+ - `InputPayload` NVARCHAR(MAX) - Better than embedding in Description
168
+ - `OutputPayload` NVARCHAR(MAX) - Better than embedding in Description
169
+
170
+ Current implementation uses Description field with `__TASK_METADATA__` and `__TASK_OUTPUT__` markers as a workaround.
171
+
172
+ ## Future Enhancements
173
+
174
+ 1. **Parallel Execution**: Modify executeTasksForConversation() to run independent tasks concurrently
175
+ 2. **Progress Streaming**: Use WebSockets to stream task progress to UI
176
+ 3. **Task Templates**: Save common workflows as reusable templates
177
+ 4. **Error Recovery**: Add retry logic and error handling strategies
178
+ 5. **Task Cancellation**: Allow users to cancel in-progress task chains
179
+ 6. **Visualization**: Show task dependency graph in UI
180
+
181
+ ## Questions?
182
+
183
+ - TaskOrchestrator handles all task lifecycle management
184
+ - Conversation Manager LLM determines when to use multi-step
185
+ - Existing UI components display tasks automatically
186
+ - Fully backward compatible with simple delegation
187
+
188
+ Integration should take ~1-2 hours for experienced developer familiar with the codebase.