@memberjunction/server 5.24.0 → 5.26.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-sdk.d.ts +12 -0
- package/dist/agents/skip-sdk.d.ts.map +1 -1
- package/dist/agents/skip-sdk.js +70 -1
- package/dist/agents/skip-sdk.js.map +1 -1
- package/dist/config.d.ts +70 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -1
- package/dist/generated/generated.d.ts +498 -0
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +2755 -0
- package/dist/generated/generated.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/dist/resolvers/ArtifactFileResolver.d.ts +15 -0
- package/dist/resolvers/ArtifactFileResolver.d.ts.map +1 -0
- package/dist/resolvers/ArtifactFileResolver.js +74 -0
- package/dist/resolvers/ArtifactFileResolver.js.map +1 -0
- package/dist/resolvers/AutotagPipelineResolver.d.ts +13 -0
- package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -1
- package/dist/resolvers/AutotagPipelineResolver.js +103 -3
- package/dist/resolvers/AutotagPipelineResolver.js.map +1 -1
- package/dist/resolvers/CacheStatsResolver.d.ts +31 -0
- package/dist/resolvers/CacheStatsResolver.d.ts.map +1 -0
- package/dist/resolvers/CacheStatsResolver.js +181 -0
- package/dist/resolvers/CacheStatsResolver.js.map +1 -0
- package/dist/resolvers/FileResolver.d.ts.map +1 -1
- package/dist/resolvers/FileResolver.js +12 -32
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/GeoResolver.d.ts +58 -0
- package/dist/resolvers/GeoResolver.d.ts.map +1 -0
- package/dist/resolvers/GeoResolver.js +302 -0
- package/dist/resolvers/GeoResolver.js.map +1 -0
- package/dist/resolvers/RunAIAgentResolver.d.ts +13 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +115 -20
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeResolver.d.ts +21 -80
- package/dist/resolvers/SearchKnowledgeResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchKnowledgeResolver.js +129 -604
- package/dist/resolvers/SearchKnowledgeResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.d.ts +19 -0
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.d.ts.map +1 -0
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.js +149 -0
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.js.map +1 -0
- package/package.json +66 -63
- package/src/__tests__/search-knowledge-tags.test.ts +177 -337
- package/src/__tests__/skip-sdk-organic-keys.test.ts +274 -0
- package/src/agents/skip-sdk.ts +83 -2
- package/src/config.ts +24 -0
- package/src/generated/generated.ts +1902 -1
- package/src/index.ts +18 -2
- package/src/resolvers/ArtifactFileResolver.ts +71 -0
- package/src/resolvers/AutotagPipelineResolver.ts +118 -4
- package/src/resolvers/CacheStatsResolver.ts +142 -0
- package/src/resolvers/FileResolver.ts +12 -41
- package/src/resolvers/GeoResolver.ts +258 -0
- package/src/resolvers/RunAIAgentResolver.ts +137 -23
- package/src/resolvers/SearchKnowledgeResolver.ts +114 -715
- package/src/resolvers/SearchKnowledgeSystemUserResolver.ts +138 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { Resolver, Query, Arg, Ctx, ObjectType, Field, Float } from 'type-graphql';
|
|
14
|
+
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
15
|
+
import { RunView, LogError } from '@memberjunction/core';
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Types
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
let GeoCountryResult = class GeoCountryResult {
|
|
20
|
+
};
|
|
21
|
+
__decorate([
|
|
22
|
+
Field(),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], GeoCountryResult.prototype, "ID", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
Field(),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], GeoCountryResult.prototype, "Name", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
Field(),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], GeoCountryResult.prototype, "ISO2", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
Field(),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], GeoCountryResult.prototype, "ISO3", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
Field(() => Float, { nullable: true }),
|
|
39
|
+
__metadata("design:type", Number)
|
|
40
|
+
], GeoCountryResult.prototype, "Latitude", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
Field(() => Float, { nullable: true }),
|
|
43
|
+
__metadata("design:type", Number)
|
|
44
|
+
], GeoCountryResult.prototype, "Longitude", void 0);
|
|
45
|
+
GeoCountryResult = __decorate([
|
|
46
|
+
ObjectType()
|
|
47
|
+
], GeoCountryResult);
|
|
48
|
+
export { GeoCountryResult };
|
|
49
|
+
let GeoStateProvinceResult = class GeoStateProvinceResult {
|
|
50
|
+
};
|
|
51
|
+
__decorate([
|
|
52
|
+
Field(),
|
|
53
|
+
__metadata("design:type", String)
|
|
54
|
+
], GeoStateProvinceResult.prototype, "ID", void 0);
|
|
55
|
+
__decorate([
|
|
56
|
+
Field(),
|
|
57
|
+
__metadata("design:type", String)
|
|
58
|
+
], GeoStateProvinceResult.prototype, "CountryID", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
Field(),
|
|
61
|
+
__metadata("design:type", String)
|
|
62
|
+
], GeoStateProvinceResult.prototype, "Name", void 0);
|
|
63
|
+
__decorate([
|
|
64
|
+
Field(),
|
|
65
|
+
__metadata("design:type", String)
|
|
66
|
+
], GeoStateProvinceResult.prototype, "Code", void 0);
|
|
67
|
+
__decorate([
|
|
68
|
+
Field(),
|
|
69
|
+
__metadata("design:type", String)
|
|
70
|
+
], GeoStateProvinceResult.prototype, "ISO3166_2", void 0);
|
|
71
|
+
__decorate([
|
|
72
|
+
Field(() => Float, { nullable: true }),
|
|
73
|
+
__metadata("design:type", Number)
|
|
74
|
+
], GeoStateProvinceResult.prototype, "Latitude", void 0);
|
|
75
|
+
__decorate([
|
|
76
|
+
Field(() => Float, { nullable: true }),
|
|
77
|
+
__metadata("design:type", Number)
|
|
78
|
+
], GeoStateProvinceResult.prototype, "Longitude", void 0);
|
|
79
|
+
GeoStateProvinceResult = __decorate([
|
|
80
|
+
ObjectType()
|
|
81
|
+
], GeoStateProvinceResult);
|
|
82
|
+
export { GeoStateProvinceResult };
|
|
83
|
+
let GeoResolveResult = class GeoResolveResult {
|
|
84
|
+
};
|
|
85
|
+
__decorate([
|
|
86
|
+
Field(),
|
|
87
|
+
__metadata("design:type", Boolean)
|
|
88
|
+
], GeoResolveResult.prototype, "Success", void 0);
|
|
89
|
+
__decorate([
|
|
90
|
+
Field({ nullable: true }),
|
|
91
|
+
__metadata("design:type", String)
|
|
92
|
+
], GeoResolveResult.prototype, "CountryID", void 0);
|
|
93
|
+
__decorate([
|
|
94
|
+
Field({ nullable: true }),
|
|
95
|
+
__metadata("design:type", String)
|
|
96
|
+
], GeoResolveResult.prototype, "CountryName", void 0);
|
|
97
|
+
__decorate([
|
|
98
|
+
Field({ nullable: true }),
|
|
99
|
+
__metadata("design:type", String)
|
|
100
|
+
], GeoResolveResult.prototype, "StateProvinceID", void 0);
|
|
101
|
+
__decorate([
|
|
102
|
+
Field({ nullable: true }),
|
|
103
|
+
__metadata("design:type", String)
|
|
104
|
+
], GeoResolveResult.prototype, "StateProvinceName", void 0);
|
|
105
|
+
__decorate([
|
|
106
|
+
Field(() => Float, { nullable: true }),
|
|
107
|
+
__metadata("design:type", Number)
|
|
108
|
+
], GeoResolveResult.prototype, "Latitude", void 0);
|
|
109
|
+
__decorate([
|
|
110
|
+
Field(() => Float, { nullable: true }),
|
|
111
|
+
__metadata("design:type", Number)
|
|
112
|
+
], GeoResolveResult.prototype, "Longitude", void 0);
|
|
113
|
+
__decorate([
|
|
114
|
+
Field({ nullable: true }),
|
|
115
|
+
__metadata("design:type", String)
|
|
116
|
+
], GeoResolveResult.prototype, "ErrorMessage", void 0);
|
|
117
|
+
GeoResolveResult = __decorate([
|
|
118
|
+
ObjectType()
|
|
119
|
+
], GeoResolveResult);
|
|
120
|
+
export { GeoResolveResult };
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
// Resolver
|
|
123
|
+
// ---------------------------------------------------------------------------
|
|
124
|
+
/**
|
|
125
|
+
* GraphQL resolver for geographic reference data resolution.
|
|
126
|
+
* Provides country/state text-to-reference matching via the GeoResolver service.
|
|
127
|
+
* Used by clients that need to resolve free-text location strings to structured
|
|
128
|
+
* reference data (Country/StateProvince IDs, centroids) without a full geocoding API call.
|
|
129
|
+
*/
|
|
130
|
+
let GeoResolver = class GeoResolver extends ResolverBase {
|
|
131
|
+
constructor() {
|
|
132
|
+
super(...arguments);
|
|
133
|
+
this._countries = null;
|
|
134
|
+
this._states = null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Lazily load all countries into memory (~250 records).
|
|
138
|
+
*/
|
|
139
|
+
async GetCountries(contextUser) {
|
|
140
|
+
if (this._countries)
|
|
141
|
+
return this._countries;
|
|
142
|
+
const rv = new RunView();
|
|
143
|
+
const result = await rv.RunView({
|
|
144
|
+
EntityName: 'MJ: Countries',
|
|
145
|
+
ResultType: 'entity_object'
|
|
146
|
+
}, contextUser);
|
|
147
|
+
if (result.Success) {
|
|
148
|
+
this._countries = result.Results;
|
|
149
|
+
}
|
|
150
|
+
return this._countries ?? [];
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Lazily load all state/provinces into memory (~5000 records).
|
|
154
|
+
*/
|
|
155
|
+
async GetStates(contextUser) {
|
|
156
|
+
if (this._states)
|
|
157
|
+
return this._states;
|
|
158
|
+
const rv = new RunView();
|
|
159
|
+
const result = await rv.RunView({
|
|
160
|
+
EntityName: 'MJ: State Provinces',
|
|
161
|
+
ResultType: 'entity_object'
|
|
162
|
+
}, contextUser);
|
|
163
|
+
if (result.Success) {
|
|
164
|
+
this._states = result.Results;
|
|
165
|
+
}
|
|
166
|
+
return this._states ?? [];
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Resolve a free-text country string to a Country reference record.
|
|
170
|
+
* Matches by Name, ISO2, ISO3, or CommonAliases.
|
|
171
|
+
*/
|
|
172
|
+
async ResolveCountry(input, { userPayload }) {
|
|
173
|
+
try {
|
|
174
|
+
const user = this.GetUserFromPayload(userPayload);
|
|
175
|
+
const countries = await this.GetCountries(user);
|
|
176
|
+
const normalized = input.trim().toLowerCase();
|
|
177
|
+
// 1. Exact match on Name, ISO2, ISO3
|
|
178
|
+
const exact = countries.find(c => c.Name.toLowerCase() === normalized ||
|
|
179
|
+
c.ISO2.toLowerCase() === normalized ||
|
|
180
|
+
c.ISO3.toLowerCase() === normalized);
|
|
181
|
+
if (exact) {
|
|
182
|
+
return {
|
|
183
|
+
Success: true,
|
|
184
|
+
CountryID: exact.ID,
|
|
185
|
+
CountryName: exact.Name,
|
|
186
|
+
Latitude: exact.Latitude ?? undefined,
|
|
187
|
+
Longitude: exact.Longitude ?? undefined
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
// 2. CommonAliases search
|
|
191
|
+
const aliasMatch = countries.find(c => {
|
|
192
|
+
if (!c.CommonAliases)
|
|
193
|
+
return false;
|
|
194
|
+
try {
|
|
195
|
+
const aliases = JSON.parse(c.CommonAliases);
|
|
196
|
+
return aliases.some(a => a.toLowerCase() === normalized);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
if (aliasMatch) {
|
|
203
|
+
return {
|
|
204
|
+
Success: true,
|
|
205
|
+
CountryID: aliasMatch.ID,
|
|
206
|
+
CountryName: aliasMatch.Name,
|
|
207
|
+
Latitude: aliasMatch.Latitude ?? undefined,
|
|
208
|
+
Longitude: aliasMatch.Longitude ?? undefined
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
return { Success: false, ErrorMessage: `No country match for "${input}"` };
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
215
|
+
LogError(`GeoResolver.ResolveCountry error: ${msg}`);
|
|
216
|
+
return { Success: false, ErrorMessage: msg };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Resolve a free-text state/province string with country context.
|
|
221
|
+
* Country context is critical: "CA" = California (US) vs Canada (ISO2).
|
|
222
|
+
*/
|
|
223
|
+
async ResolveStateProvince(stateInput, countryInput, { userPayload }) {
|
|
224
|
+
try {
|
|
225
|
+
const user = this.GetUserFromPayload(userPayload);
|
|
226
|
+
// First resolve country
|
|
227
|
+
const countryResult = await this.ResolveCountry(countryInput, { userPayload });
|
|
228
|
+
if (!countryResult.Success || !countryResult.CountryID) {
|
|
229
|
+
return { Success: false, ErrorMessage: `Could not resolve country "${countryInput}"` };
|
|
230
|
+
}
|
|
231
|
+
const states = await this.GetStates(user);
|
|
232
|
+
const countryStates = states.filter(s => s.CountryID === countryResult.CountryID);
|
|
233
|
+
const normalized = stateInput.trim().toLowerCase();
|
|
234
|
+
// 1. Exact match on Name, Code, ISO3166_2
|
|
235
|
+
const exact = countryStates.find(s => s.Name.toLowerCase() === normalized ||
|
|
236
|
+
s.Code.toLowerCase() === normalized ||
|
|
237
|
+
s.ISO3166_2.toLowerCase() === normalized);
|
|
238
|
+
if (exact) {
|
|
239
|
+
return {
|
|
240
|
+
Success: true,
|
|
241
|
+
CountryID: countryResult.CountryID,
|
|
242
|
+
CountryName: countryResult.CountryName,
|
|
243
|
+
StateProvinceID: exact.ID,
|
|
244
|
+
StateProvinceName: exact.Name,
|
|
245
|
+
Latitude: exact.Latitude ?? undefined,
|
|
246
|
+
Longitude: exact.Longitude ?? undefined
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
// 2. CommonAliases search
|
|
250
|
+
const aliasMatch = countryStates.find(s => {
|
|
251
|
+
if (!s.CommonAliases)
|
|
252
|
+
return false;
|
|
253
|
+
try {
|
|
254
|
+
const aliases = JSON.parse(s.CommonAliases);
|
|
255
|
+
return aliases.some(a => a.toLowerCase() === normalized);
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
if (aliasMatch) {
|
|
262
|
+
return {
|
|
263
|
+
Success: true,
|
|
264
|
+
CountryID: countryResult.CountryID,
|
|
265
|
+
CountryName: countryResult.CountryName,
|
|
266
|
+
StateProvinceID: aliasMatch.ID,
|
|
267
|
+
StateProvinceName: aliasMatch.Name,
|
|
268
|
+
Latitude: aliasMatch.Latitude ?? undefined,
|
|
269
|
+
Longitude: aliasMatch.Longitude ?? undefined
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
return { Success: false, ErrorMessage: `No state/province match for "${stateInput}" in ${countryResult.CountryName}` };
|
|
273
|
+
}
|
|
274
|
+
catch (e) {
|
|
275
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
276
|
+
LogError(`GeoResolver.ResolveStateProvince error: ${msg}`);
|
|
277
|
+
return { Success: false, ErrorMessage: msg };
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
__decorate([
|
|
282
|
+
Query(() => GeoResolveResult),
|
|
283
|
+
__param(0, Arg('input', () => String)),
|
|
284
|
+
__param(1, Ctx()),
|
|
285
|
+
__metadata("design:type", Function),
|
|
286
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
287
|
+
__metadata("design:returntype", Promise)
|
|
288
|
+
], GeoResolver.prototype, "ResolveCountry", null);
|
|
289
|
+
__decorate([
|
|
290
|
+
Query(() => GeoResolveResult),
|
|
291
|
+
__param(0, Arg('stateInput', () => String)),
|
|
292
|
+
__param(1, Arg('countryInput', () => String)),
|
|
293
|
+
__param(2, Ctx()),
|
|
294
|
+
__metadata("design:type", Function),
|
|
295
|
+
__metadata("design:paramtypes", [String, String, Object]),
|
|
296
|
+
__metadata("design:returntype", Promise)
|
|
297
|
+
], GeoResolver.prototype, "ResolveStateProvince", null);
|
|
298
|
+
GeoResolver = __decorate([
|
|
299
|
+
Resolver()
|
|
300
|
+
], GeoResolver);
|
|
301
|
+
export { GeoResolver };
|
|
302
|
+
//# sourceMappingURL=GeoResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeoResolver.js","sourceRoot":"","sources":["../../src/resolvers/GeoResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -142,7 +142,7 @@ export declare class RunAIAgentResolver extends ResolverBase {
|
|
|
142
142
|
* Reassign an agent request to a different user.
|
|
143
143
|
* Updates RequestForUserID and sends a notification to the new assignee.
|
|
144
144
|
*/
|
|
145
|
-
ReassignAgentRequest(requestId: string, newUserID: string, { userPayload }: AppContext, note?: string): Promise<AIAgentRunResult>;
|
|
145
|
+
ReassignAgentRequest(requestId: string, newUserID: string, { userPayload, providers }: AppContext, note?: string): Promise<AIAgentRunResult>;
|
|
146
146
|
/**
|
|
147
147
|
* Execute agent in background (fire-and-forget).
|
|
148
148
|
* Handles errors by publishing error completion events via PubSub,
|
|
@@ -173,5 +173,17 @@ export declare class RunAIAgentResolver extends ResolverBase {
|
|
|
173
173
|
* Map ConversationDetail Role to ChatMessage role
|
|
174
174
|
*/
|
|
175
175
|
private mapDetailRoleToMessageRole;
|
|
176
|
+
/**
|
|
177
|
+
* Batch load input artifact versions for conversation details.
|
|
178
|
+
* Returns a map of ConversationDetailID -> ArtifactVersion[]
|
|
179
|
+
*/
|
|
180
|
+
private loadInputArtifactsBatch;
|
|
181
|
+
/**
|
|
182
|
+
* Download file content from an artifact version's FileID.
|
|
183
|
+
* Returns base64 data URL for extraction pipeline compatibility.
|
|
184
|
+
* Uses the same downloadFileContent path as ConversationAttachmentService
|
|
185
|
+
* to avoid Box driver path resolution issues.
|
|
186
|
+
*/
|
|
187
|
+
private downloadArtifactFileContent;
|
|
176
188
|
}
|
|
177
189
|
//# sourceMappingURL=RunAIAgentResolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunAIAgentResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/RunAIAgentResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkE,YAAY,EAAmD,MAAM,cAAc,CAAC;AAC7J,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AAOtD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAQ1D,qBACa,gBAAgB;IAEzB,OAAO,EAAE,OAAO,CAAC;IAGjB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBACa,sBAAsB;IAE/B,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,OAAO,EAAE,MAAM,CAAC;IAGhB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBACa,qBAAqB;IAE9B,OAAO,EAAE,MAAM,CAAC;IAGhB,SAAS,EAAE,OAAO,CAAC;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBACa,yBAAyB;IAElC,MAAM,EAAE,MAAM,CAAC;IAGf,QAAQ,EAAE,MAAM,CAAC;IAGjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,SAAS,EAAE,IAAI,CAAC;IAGhB,OAAO,CAAC,EAAE,IAAI,CAAC;IAGf,MAAM,EAAE,MAAM,CAAC;IAGf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBACa,kBAAkB;IAE3B,WAAW,EAAE,MAAM,CAAC;IAGpB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBACa,2BAA2B;IAEpC,SAAS,EAAE,MAAM,CAAC;IAGlB,UAAU,EAAE,MAAM,CAAC;IAGnB,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,gBAAgB,GAAG,UAAU,CAAC;IAG/D,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAGlC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAGlC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IAGnC,SAAS,EAAE,IAAI,CAAC;IAGhB,QAAQ,CAAC,EAAE,GAAG,CAAC;IAGf,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC;AAMD,qBACa,kBAAmB,SAAQ,YAAY;IAChD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;YACW,aAAa;IAmB3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmC/B;;;;OAIG;YACW,cAAc;IAuL5B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA+C1B;;;OAGG;IAEG,UAAU,CACI,OAAO,EAAE,MAAM,EACxB,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,UAAU,EACxC,YAAY,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACzB,MAAM,EAAE,YAAY,EACG,IAAI,CAAC,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,EACxB,SAAS,CAAC,EAAE,MAAM,EACD,0BAA0B,CAAC,EAAE,OAAO,EAC/C,eAAe,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,MAAM,EAClC,eAAe,CAAC,EAAE,OAAO,EACtB,kBAAkB,CAAC,EAAE,OAAO,EAC9B,gBAAgB,CAAC,EAAE,MAAM,EAClB,uBAAuB,CAAC,EAAE,MAAM,EAC1C,aAAa,CAAC,EAAE,OAAO,GAClE,OAAO,CAAC,gBAAgB,CAAC;IA+C5B;;;OAGG;IAGG,oBAAoB,CACN,OAAO,EAAE,MAAM,EACxB,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,UAAU,EACxC,YAAY,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACzB,MAAM,EAAE,YAAY,EACG,IAAI,CAAC,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,EACxB,SAAS,CAAC,EAAE,MAAM,EACD,0BAA0B,CAAC,EAAE,OAAO,EAC/C,eAAe,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,MAAM,EAClC,eAAe,CAAC,EAAE,OAAO,EACtB,kBAAkB,CAAC,EAAE,OAAO,EAC9B,gBAAgB,CAAC,EAAE,MAAM,EAClB,uBAAuB,CAAC,EAAE,MAAM,GACrF,OAAO,CAAC,gBAAgB,CAAC;IAwB5B;;;OAGG;IACH;;;;;;OAMG;YACW,4BAA4B;IAgF1C;;;;;;OAMG;YACW,mCAAmC;
|
|
1
|
+
{"version":3,"file":"RunAIAgentResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/RunAIAgentResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
13
|
import { Resolver, Mutation, Query, Arg, Ctx, ObjectType, Field, PubSub, PubSubEngine, ID, Int } from 'type-graphql';
|
|
14
|
-
import { LogError, LogStatus,
|
|
14
|
+
import { LogError, LogStatus, RunView } from '@memberjunction/core';
|
|
15
15
|
import { AgentRunner } from '@memberjunction/ai-agents';
|
|
16
16
|
import { ConversationUtility } from '@memberjunction/ai-core-plus';
|
|
17
17
|
import { AIEngine } from '@memberjunction/aiengine';
|
|
@@ -20,7 +20,7 @@ import { PUSH_STATUS_UPDATES_TOPIC } from '../generic/PushStatusResolver.js';
|
|
|
20
20
|
import { RequireSystemUser } from '../directives/RequireSystemUser.js';
|
|
21
21
|
import { GetReadWriteProvider } from '../util.js';
|
|
22
22
|
import { SafeJSONParse, UUIDsEqual } from '@memberjunction/global';
|
|
23
|
-
import {
|
|
23
|
+
import { GetAttachmentService } from '@memberjunction/aiengine';
|
|
24
24
|
import { NotificationEngine } from '@memberjunction/notifications';
|
|
25
25
|
let AIAgentRunResult = class AIAgentRunResult {
|
|
26
26
|
};
|
|
@@ -443,7 +443,7 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
443
443
|
// agent finished and created an artifact.
|
|
444
444
|
const postExecutionOps = [];
|
|
445
445
|
if (lastRunId && result.agentRun?.ID) {
|
|
446
|
-
postExecutionOps.push(this.syncFeedbackRequestFromConversation(lastRunId, result.agentRun.ID, userMessage, currentUser));
|
|
446
|
+
postExecutionOps.push(this.syncFeedbackRequestFromConversation(lastRunId, result.agentRun.ID, userMessage, currentUser, p));
|
|
447
447
|
}
|
|
448
448
|
if (result.feedbackRequestId) {
|
|
449
449
|
postExecutionOps.push(this.sendFeedbackRequestNotification(result, currentUser, pubSub, userPayload));
|
|
@@ -652,9 +652,9 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
652
652
|
*
|
|
653
653
|
* Called server-side in the resolver so the conversation UI doesn't need any changes.
|
|
654
654
|
*/
|
|
655
|
-
async syncFeedbackRequestFromConversation(lastRunId, newRunId, userMessage, contextUser) {
|
|
655
|
+
async syncFeedbackRequestFromConversation(lastRunId, newRunId, userMessage, contextUser, provider) {
|
|
656
656
|
try {
|
|
657
|
-
const rv =
|
|
657
|
+
const rv = RunView.FromMetadataProvider(provider);
|
|
658
658
|
const result = await rv.RunView({
|
|
659
659
|
EntityName: 'MJ: AI Agent Requests',
|
|
660
660
|
ExtraFilter: `OriginatingAgentRunID='${lastRunId}' AND Status='Requested'`,
|
|
@@ -761,14 +761,13 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
761
761
|
// times: once in loadConversationHistoryWithAttachments (just to get conversationId),
|
|
762
762
|
// once in AgentRunner (same reason), and once in createCompletionNotification. Now we
|
|
763
763
|
// load it a single time and thread conversationId through the call chain.
|
|
764
|
-
const
|
|
765
|
-
const currentDetail = await md.GetEntityObject('MJ: Conversation Details', currentUser);
|
|
764
|
+
const currentDetail = await p.GetEntityObject('MJ: Conversation Details', currentUser);
|
|
766
765
|
if (!await currentDetail.Load(conversationDetailId)) {
|
|
767
766
|
throw new Error(`Conversation detail ${conversationDetailId} not found`);
|
|
768
767
|
}
|
|
769
768
|
const conversationId = currentDetail.ConversationID;
|
|
770
769
|
// Load conversation history with attachments from DB
|
|
771
|
-
const messages = await this.loadConversationHistoryWithAttachments(conversationId, currentUser, maxHistoryMessages || 20);
|
|
770
|
+
const messages = await this.loadConversationHistoryWithAttachments(conversationId, currentUser, maxHistoryMessages || 20, p);
|
|
772
771
|
// Convert to JSON string for the existing executeAIAgent method
|
|
773
772
|
const messagesJson = JSON.stringify(messages);
|
|
774
773
|
if (fireAndForget) {
|
|
@@ -808,8 +807,8 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
808
807
|
if (!currentUser) {
|
|
809
808
|
throw new Error('Unable to determine current user');
|
|
810
809
|
}
|
|
811
|
-
const
|
|
812
|
-
const request = await
|
|
810
|
+
const p = GetReadWriteProvider(providers);
|
|
811
|
+
const request = await p.GetEntityObject('MJ: AI Agent Requests', currentUser);
|
|
813
812
|
if (!(await request.Load(requestId))) {
|
|
814
813
|
throw new Error(`Agent request ${requestId} not found`);
|
|
815
814
|
}
|
|
@@ -860,15 +859,15 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
860
859
|
* Reassign an agent request to a different user.
|
|
861
860
|
* Updates RequestForUserID and sends a notification to the new assignee.
|
|
862
861
|
*/
|
|
863
|
-
async ReassignAgentRequest(requestId, newUserID, { userPayload }, note) {
|
|
862
|
+
async ReassignAgentRequest(requestId, newUserID, { userPayload, providers }, note) {
|
|
864
863
|
const startTime = Date.now();
|
|
865
864
|
try {
|
|
866
865
|
const currentUser = this.GetUserFromPayload(userPayload);
|
|
867
866
|
if (!currentUser) {
|
|
868
867
|
throw new Error('Unable to determine current user');
|
|
869
868
|
}
|
|
870
|
-
const
|
|
871
|
-
const request = await
|
|
869
|
+
const p = GetReadWriteProvider(providers);
|
|
870
|
+
const request = await p.GetEntityObject('MJ: AI Agent Requests', currentUser);
|
|
872
871
|
if (!(await request.Load(requestId))) {
|
|
873
872
|
throw new Error(`Agent request ${requestId} not found`);
|
|
874
873
|
}
|
|
@@ -985,9 +984,9 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
985
984
|
* and validation — none of which are needed for read-only history assembly. The 'simple' result
|
|
986
985
|
* type returns plain JS objects, reducing per-record overhead (~30ms total savings).
|
|
987
986
|
*/
|
|
988
|
-
async loadConversationHistoryWithAttachments(conversationId, contextUser, maxMessages) {
|
|
989
|
-
const rv =
|
|
990
|
-
const attachmentService =
|
|
987
|
+
async loadConversationHistoryWithAttachments(conversationId, contextUser, maxMessages, provider) {
|
|
988
|
+
const rv = RunView.FromMetadataProvider(provider);
|
|
989
|
+
const attachmentService = GetAttachmentService();
|
|
991
990
|
// Load recent conversation details (messages) for this conversation.
|
|
992
991
|
// Only fetch the three fields we actually use — ID for attachment lookups,
|
|
993
992
|
// Role for message routing, Message for content.
|
|
@@ -1007,14 +1006,16 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
1007
1006
|
// Get all message IDs for batch loading attachments
|
|
1008
1007
|
const messageIds = details.map(d => d.ID);
|
|
1009
1008
|
// Batch load all attachments for these messages
|
|
1010
|
-
const attachmentsByDetailId = await attachmentService.
|
|
1011
|
-
//
|
|
1009
|
+
const attachmentsByDetailId = await attachmentService.GetAttachmentsBatch(messageIds, contextUser, provider);
|
|
1010
|
+
// Batch load input artifacts for these messages
|
|
1011
|
+
const inputArtifactsByDetailId = await this.loadInputArtifactsBatch(messageIds, contextUser, provider);
|
|
1012
|
+
// Build ChatMessage array with attachments and input artifacts
|
|
1012
1013
|
const messages = [];
|
|
1013
1014
|
for (const detail of details) {
|
|
1014
1015
|
const role = this.mapDetailRoleToMessageRole(detail.Role);
|
|
1015
1016
|
const attachments = attachmentsByDetailId.get(detail.ID) || [];
|
|
1016
1017
|
// Get attachment data with content URLs (handles both inline and FileID storage)
|
|
1017
|
-
const attachmentDataPromises = attachments.map(att => attachmentService.
|
|
1018
|
+
const attachmentDataPromises = attachments.map(att => attachmentService.GetAttachmentData(att, contextUser, provider));
|
|
1018
1019
|
const attachmentDataResults = await Promise.all(attachmentDataPromises);
|
|
1019
1020
|
// Filter out nulls and convert to AttachmentData format
|
|
1020
1021
|
const validAttachments = attachmentDataResults
|
|
@@ -1029,11 +1030,37 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
1029
1030
|
durationSeconds: result.attachment.DurationSeconds ?? undefined,
|
|
1030
1031
|
content: result.contentUrl
|
|
1031
1032
|
}));
|
|
1033
|
+
// Get input artifacts for this message and convert to AttachmentData
|
|
1034
|
+
const inputArtifacts = inputArtifactsByDetailId.get(detail.ID) || [];
|
|
1035
|
+
for (const artifactVersion of inputArtifacts) {
|
|
1036
|
+
if (artifactVersion.ContentMode === 'File' && artifactVersion.FileID) {
|
|
1037
|
+
// File-backed artifact — download content and treat like a document attachment
|
|
1038
|
+
const fileContent = await this.downloadArtifactFileContent(artifactVersion, contextUser, provider);
|
|
1039
|
+
if (fileContent) {
|
|
1040
|
+
validAttachments.push({
|
|
1041
|
+
type: ConversationUtility.GetAttachmentTypeFromMime(artifactVersion.MimeType || ''),
|
|
1042
|
+
mimeType: artifactVersion.MimeType || 'application/octet-stream',
|
|
1043
|
+
fileName: artifactVersion.FileName || artifactVersion.Name || undefined,
|
|
1044
|
+
sizeBytes: artifactVersion.ContentSizeBytes || undefined,
|
|
1045
|
+
content: fileContent
|
|
1046
|
+
});
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
else if (artifactVersion.Content) {
|
|
1050
|
+
// Text artifact — include content directly as a text attachment
|
|
1051
|
+
validAttachments.push({
|
|
1052
|
+
type: 'Document',
|
|
1053
|
+
mimeType: 'text/plain',
|
|
1054
|
+
fileName: artifactVersion.Name || 'artifact.txt',
|
|
1055
|
+
content: `[Artifact: ${artifactVersion.Name || 'Untitled'}]\n\n${artifactVersion.Content}`
|
|
1056
|
+
});
|
|
1057
|
+
}
|
|
1058
|
+
}
|
|
1032
1059
|
// Build message content (with or without attachments)
|
|
1033
1060
|
let content;
|
|
1034
1061
|
if (validAttachments.length > 0) {
|
|
1035
1062
|
// Use ConversationUtility to build multimodal content blocks
|
|
1036
|
-
content = ConversationUtility.BuildChatMessageContent(detail.Message || '', validAttachments);
|
|
1063
|
+
content = await ConversationUtility.BuildChatMessageContent(detail.Message || '', validAttachments);
|
|
1037
1064
|
}
|
|
1038
1065
|
else {
|
|
1039
1066
|
content = detail.Message || '';
|
|
@@ -1058,6 +1085,74 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
1058
1085
|
return 'system';
|
|
1059
1086
|
return 'user'; // Default to user
|
|
1060
1087
|
}
|
|
1088
|
+
/**
|
|
1089
|
+
* Batch load input artifact versions for conversation details.
|
|
1090
|
+
* Returns a map of ConversationDetailID -> ArtifactVersion[]
|
|
1091
|
+
*/
|
|
1092
|
+
async loadInputArtifactsBatch(conversationDetailIds, contextUser, provider) {
|
|
1093
|
+
const map = new Map();
|
|
1094
|
+
if (conversationDetailIds.length === 0)
|
|
1095
|
+
return map;
|
|
1096
|
+
const rv = RunView.FromMetadataProvider(provider);
|
|
1097
|
+
const idList = conversationDetailIds.map(id => `'${id}'`).join(',');
|
|
1098
|
+
// Load ConversationDetailArtifact links with Direction='Input'
|
|
1099
|
+
const linksResult = await rv.RunView({
|
|
1100
|
+
EntityName: 'MJ: Conversation Detail Artifacts',
|
|
1101
|
+
ExtraFilter: `ConversationDetailID IN (${idList}) AND Direction = 'Input'`,
|
|
1102
|
+
ResultType: 'entity_object'
|
|
1103
|
+
}, contextUser);
|
|
1104
|
+
if (!linksResult.Success || !linksResult.Results || linksResult.Results.length === 0) {
|
|
1105
|
+
return map;
|
|
1106
|
+
}
|
|
1107
|
+
// Load the referenced artifact versions
|
|
1108
|
+
const versionIds = linksResult.Results.map(l => `'${l.ArtifactVersionID}'`).join(',');
|
|
1109
|
+
const versionsResult = await rv.RunView({
|
|
1110
|
+
EntityName: 'MJ: Artifact Versions',
|
|
1111
|
+
ExtraFilter: `ID IN (${versionIds})`,
|
|
1112
|
+
ResultType: 'entity_object'
|
|
1113
|
+
}, contextUser);
|
|
1114
|
+
if (!versionsResult.Success || !versionsResult.Results)
|
|
1115
|
+
return map;
|
|
1116
|
+
// Build a lookup of version ID -> version entity
|
|
1117
|
+
const versionMap = new Map();
|
|
1118
|
+
for (const v of versionsResult.Results) {
|
|
1119
|
+
versionMap.set(v.ID, v);
|
|
1120
|
+
}
|
|
1121
|
+
// Group by conversation detail ID
|
|
1122
|
+
for (const link of linksResult.Results) {
|
|
1123
|
+
const version = versionMap.get(link.ArtifactVersionID);
|
|
1124
|
+
if (version) {
|
|
1125
|
+
const existing = map.get(link.ConversationDetailID) || [];
|
|
1126
|
+
existing.push(version);
|
|
1127
|
+
map.set(link.ConversationDetailID, existing);
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
return map;
|
|
1131
|
+
}
|
|
1132
|
+
/**
|
|
1133
|
+
* Download file content from an artifact version's FileID.
|
|
1134
|
+
* Returns base64 data URL for extraction pipeline compatibility.
|
|
1135
|
+
* Uses the same downloadFileContent path as ConversationAttachmentService
|
|
1136
|
+
* to avoid Box driver path resolution issues.
|
|
1137
|
+
*/
|
|
1138
|
+
async downloadArtifactFileContent(artifactVersion, contextUser, provider) {
|
|
1139
|
+
if (!artifactVersion.FileID)
|
|
1140
|
+
return null;
|
|
1141
|
+
try {
|
|
1142
|
+
// Use the attachment service's downloadFileContent which uses GetObject directly
|
|
1143
|
+
const attachmentService = GetAttachmentService();
|
|
1144
|
+
const buffer = await attachmentService.DownloadFileContent(artifactVersion.FileID, contextUser, provider);
|
|
1145
|
+
if (!buffer)
|
|
1146
|
+
return null;
|
|
1147
|
+
const base64 = buffer.toString('base64');
|
|
1148
|
+
const mimeType = artifactVersion.MimeType || 'application/octet-stream';
|
|
1149
|
+
return `data:${mimeType};base64,${base64}`;
|
|
1150
|
+
}
|
|
1151
|
+
catch (err) {
|
|
1152
|
+
LogError(`Failed to download artifact file ${artifactVersion.FileID}: ${err}`);
|
|
1153
|
+
return null;
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1061
1156
|
};
|
|
1062
1157
|
__decorate([
|
|
1063
1158
|
Mutation(() => AIAgentRunResult),
|