@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.
Files changed (62) hide show
  1. package/dist/agents/skip-sdk.d.ts +12 -0
  2. package/dist/agents/skip-sdk.d.ts.map +1 -1
  3. package/dist/agents/skip-sdk.js +70 -1
  4. package/dist/agents/skip-sdk.js.map +1 -1
  5. package/dist/config.d.ts +70 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +21 -0
  8. package/dist/config.js.map +1 -1
  9. package/dist/generated/generated.d.ts +498 -0
  10. package/dist/generated/generated.d.ts.map +1 -1
  11. package/dist/generated/generated.js +2755 -0
  12. package/dist/generated/generated.js.map +1 -1
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +18 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/resolvers/ArtifactFileResolver.d.ts +15 -0
  18. package/dist/resolvers/ArtifactFileResolver.d.ts.map +1 -0
  19. package/dist/resolvers/ArtifactFileResolver.js +74 -0
  20. package/dist/resolvers/ArtifactFileResolver.js.map +1 -0
  21. package/dist/resolvers/AutotagPipelineResolver.d.ts +13 -0
  22. package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -1
  23. package/dist/resolvers/AutotagPipelineResolver.js +103 -3
  24. package/dist/resolvers/AutotagPipelineResolver.js.map +1 -1
  25. package/dist/resolvers/CacheStatsResolver.d.ts +31 -0
  26. package/dist/resolvers/CacheStatsResolver.d.ts.map +1 -0
  27. package/dist/resolvers/CacheStatsResolver.js +181 -0
  28. package/dist/resolvers/CacheStatsResolver.js.map +1 -0
  29. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  30. package/dist/resolvers/FileResolver.js +12 -32
  31. package/dist/resolvers/FileResolver.js.map +1 -1
  32. package/dist/resolvers/GeoResolver.d.ts +58 -0
  33. package/dist/resolvers/GeoResolver.d.ts.map +1 -0
  34. package/dist/resolvers/GeoResolver.js +302 -0
  35. package/dist/resolvers/GeoResolver.js.map +1 -0
  36. package/dist/resolvers/RunAIAgentResolver.d.ts +13 -1
  37. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  38. package/dist/resolvers/RunAIAgentResolver.js +115 -20
  39. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  40. package/dist/resolvers/SearchKnowledgeResolver.d.ts +21 -80
  41. package/dist/resolvers/SearchKnowledgeResolver.d.ts.map +1 -1
  42. package/dist/resolvers/SearchKnowledgeResolver.js +129 -604
  43. package/dist/resolvers/SearchKnowledgeResolver.js.map +1 -1
  44. package/dist/resolvers/SearchKnowledgeSystemUserResolver.d.ts +19 -0
  45. package/dist/resolvers/SearchKnowledgeSystemUserResolver.d.ts.map +1 -0
  46. package/dist/resolvers/SearchKnowledgeSystemUserResolver.js +149 -0
  47. package/dist/resolvers/SearchKnowledgeSystemUserResolver.js.map +1 -0
  48. package/package.json +66 -63
  49. package/src/__tests__/search-knowledge-tags.test.ts +177 -337
  50. package/src/__tests__/skip-sdk-organic-keys.test.ts +274 -0
  51. package/src/agents/skip-sdk.ts +83 -2
  52. package/src/config.ts +24 -0
  53. package/src/generated/generated.ts +1902 -1
  54. package/src/index.ts +18 -2
  55. package/src/resolvers/ArtifactFileResolver.ts +71 -0
  56. package/src/resolvers/AutotagPipelineResolver.ts +118 -4
  57. package/src/resolvers/CacheStatsResolver.ts +142 -0
  58. package/src/resolvers/FileResolver.ts +12 -41
  59. package/src/resolvers/GeoResolver.ts +258 -0
  60. package/src/resolvers/RunAIAgentResolver.ts +137 -23
  61. package/src/resolvers/SearchKnowledgeResolver.ts +114 -715
  62. 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":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAa,KAAK,EAAO,MAAM,cAAc,CAAC;AAEnG,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAsB,MAAM,sBAAsB,CAAC;AAG7E,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAGvE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAkB5B,CAAA;AAhBG;IADC,KAAK,EAAE;;4CACI;AAGZ;IADC,KAAK,EAAE;;8CACM;AAGd;IADC,KAAK,EAAE;;8CACM;AAGd;IADC,KAAK,EAAE;;8CACM;AAGd;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACd;AAGzB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACb;AAjBjB,gBAAgB;IAD5B,UAAU,EAAE;GACA,gBAAgB,CAkB5B;;AAGM,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CAqBlC,CAAA;AAnBG;IADC,KAAK,EAAE;;kDACI;AAGZ;IADC,KAAK,EAAE;;yDACW;AAGnB;IADC,KAAK,EAAE;;oDACM;AAGd;IADC,KAAK,EAAE;;oDACM;AAGd;IADC,KAAK,EAAE;;yDACW;AAGnB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wDACd;AAGzB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDACb;AApBjB,sBAAsB;IADlC,UAAU,EAAE;GACA,sBAAsB,CAqBlC;;AAGM,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAwB5B,CAAA;AAtBG;IADC,KAAK,EAAE;;iDACU;AAGlB;IADC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACP;AAGnB;IADC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACL;AAGrB;IADC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDACD;AAGzB;IADC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2DACC;AAG3B;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACrB;AAGlB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACpB;AAGnB;IADC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sDACJ;AAvBb,gBAAgB;IAD5B,UAAU,EAAE;GACA,gBAAgB,CAwB5B;;AAED,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;;;GAKG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,YAAY;IAAtC;;QACK,eAAU,GAA6B,IAAI,CAAC;QAC5C,YAAO,GAAmC,IAAI,CAAC;IAkK3D,CAAC;IAhKG;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,WAAiC;QACxD,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAC5C,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAkB;YAC7C,UAAU,EAAE,eAAe;YAC3B,UAAU,EAAE,eAAe;SAC9B,EAAE,WAAW,CAAC,CAAC;QAChB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CAAC,WAAiC;QACrD,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAwB;YACnD,UAAU,EAAE,qBAAqB;YACjC,UAAU,EAAE,eAAe;SAC9B,EAAE,WAAW,CAAC,CAAC;QAChB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IAEG,AAAN,KAAK,CAAC,cAAc,CACY,KAAa,EAClC,EAAE,WAAW,EAAc;QAElC,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAE9C,qCAAqC;YACrC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU;gBACnC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU;gBACnC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,CACtC,CAAC;YACF,IAAI,KAAK,EAAE,CAAC;gBACR,OAAO;oBACH,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,KAAK,CAAC,EAAE;oBACnB,WAAW,EAAE,KAAK,CAAC,IAAI;oBACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;oBACrC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;iBAC1C,CAAC;YACN,CAAC;YAED,0BAA0B;YAC1B,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAClC,IAAI,CAAC,CAAC,CAAC,aAAa;oBAAE,OAAO,KAAK,CAAC;gBACnC,IAAI,CAAC;oBACD,MAAM,OAAO,GAAa,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;oBACtD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;gBAC7D,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,UAAU,EAAE,CAAC;gBACb,OAAO;oBACH,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,UAAU,CAAC,EAAE;oBACxB,WAAW,EAAE,UAAU,CAAC,IAAI;oBAC5B,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,SAAS;oBAC1C,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,SAAS;iBAC/C,CAAC;YACN,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,yBAAyB,KAAK,GAAG,EAAE,CAAC;QAC/E,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,QAAQ,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;QACjD,CAAC;IACL,CAAC;IAED;;;OAGG;IAEG,AAAN,KAAK,CAAC,oBAAoB,CACW,UAAkB,EAChB,YAAoB,EAChD,EAAE,WAAW,EAAc;QAElC,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAElD,wBAAwB;YACxB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,WAAW,EAAgB,CAAC,CAAC;YAC7F,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;gBACrD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,8BAA8B,YAAY,GAAG,EAAE,CAAC;YAC3F,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,aAAa,CAAC,SAAS,CAAC,CAAC;YAClF,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAEnD,0CAA0C;YAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU;gBACnC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU;gBACnC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,UAAU,CAC3C,CAAC;YACF,IAAI,KAAK,EAAE,CAAC;gBACR,OAAO;oBACH,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,aAAa,CAAC,SAAS;oBAClC,WAAW,EAAE,aAAa,CAAC,WAAW;oBACtC,eAAe,EAAE,KAAK,CAAC,EAAE;oBACzB,iBAAiB,EAAE,KAAK,CAAC,IAAI;oBAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;oBACrC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;iBAC1C,CAAC;YACN,CAAC;YAED,0BAA0B;YAC1B,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACtC,IAAI,CAAC,CAAC,CAAC,aAAa;oBAAE,OAAO,KAAK,CAAC;gBACnC,IAAI,CAAC;oBACD,MAAM,OAAO,GAAa,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;oBACtD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;gBAC7D,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,UAAU,EAAE,CAAC;gBACb,OAAO;oBACH,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,aAAa,CAAC,SAAS;oBAClC,WAAW,EAAE,aAAa,CAAC,WAAW;oBACtC,eAAe,EAAE,UAAU,CAAC,EAAE;oBAC9B,iBAAiB,EAAE,UAAU,CAAC,IAAI;oBAClC,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,SAAS;oBAC1C,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,SAAS;iBAC/C,CAAC;YACN,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,gCAAgC,UAAU,QAAQ,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3H,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,QAAQ,CAAC,2CAA2C,GAAG,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;QACjD,CAAC;IACL,CAAC;CACJ,CAAA;AA3HS;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC;IAEzB,WAAA,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAC1B,WAAA,GAAG,EAAE,CAAA;;;;iDAiDT;AAOK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC;IAEzB,WAAA,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAC/B,WAAA,GAAG,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IACjC,WAAA,GAAG,EAAE,CAAA;;;;uDA6DT;AAnKQ,WAAW;IADvB,QAAQ,EAAE;GACE,WAAW,CAoKvB"}
@@ -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":"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"}
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, Metadata, RunView } from '@memberjunction/core';
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 { getAttachmentService } from '@memberjunction/aiengine';
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 = new RunView();
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 md = new Metadata();
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 md = new Metadata();
812
- const request = await md.GetEntityObject('MJ: AI Agent Requests', currentUser);
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 md = new Metadata();
871
- const request = await md.GetEntityObject('MJ: AI Agent Requests', currentUser);
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 = new RunView();
990
- const attachmentService = getAttachmentService();
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.getAttachmentsBatch(messageIds, contextUser);
1011
- // Build ChatMessage array with attachments
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.getAttachmentData(att, contextUser));
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),