@memberjunction/server 5.33.0 → 5.34.1

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 (56) hide show
  1. package/README.md +2 -1
  2. package/dist/agents/skip-agent.d.ts +3 -1
  3. package/dist/agents/skip-agent.d.ts.map +1 -1
  4. package/dist/agents/skip-agent.js +15 -3
  5. package/dist/agents/skip-agent.js.map +1 -1
  6. package/dist/generated/generated.d.ts +922 -376
  7. package/dist/generated/generated.d.ts.map +1 -1
  8. package/dist/generated/generated.js +5669 -2512
  9. package/dist/generated/generated.js.map +1 -1
  10. package/dist/generic/ResolverBase.d.ts +1 -1
  11. package/dist/generic/ResolverBase.d.ts.map +1 -1
  12. package/dist/generic/ResolverBase.js +9 -2
  13. package/dist/generic/ResolverBase.js.map +1 -1
  14. package/dist/generic/RunViewResolver.d.ts +5 -1
  15. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  16. package/dist/generic/RunViewResolver.js +33 -2
  17. package/dist/generic/RunViewResolver.js.map +1 -1
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +17 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/resolvers/AvailableSearchProvidersResolver.d.ts +26 -0
  23. package/dist/resolvers/AvailableSearchProvidersResolver.d.ts.map +1 -0
  24. package/dist/resolvers/AvailableSearchProvidersResolver.js +65 -0
  25. package/dist/resolvers/AvailableSearchProvidersResolver.js.map +1 -0
  26. package/dist/resolvers/ComponentRegistryResolver.d.ts +11 -25
  27. package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
  28. package/dist/resolvers/ComponentRegistryResolver.js +51 -93
  29. package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
  30. package/dist/resolvers/QuerySystemUserResolver.d.ts +18 -0
  31. package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
  32. package/dist/resolvers/QuerySystemUserResolver.js +68 -6
  33. package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
  34. package/dist/resolvers/SearchKnowledgeResolver.d.ts +44 -1
  35. package/dist/resolvers/SearchKnowledgeResolver.d.ts.map +1 -1
  36. package/dist/resolvers/SearchKnowledgeResolver.js +217 -7
  37. package/dist/resolvers/SearchKnowledgeResolver.js.map +1 -1
  38. package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts +79 -0
  39. package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts.map +1 -0
  40. package/dist/resolvers/SearchKnowledgeStreamResolver.js +342 -0
  41. package/dist/resolvers/SearchKnowledgeStreamResolver.js.map +1 -0
  42. package/dist/types.d.ts +6 -1
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/types.js.map +1 -1
  45. package/package.json +68 -68
  46. package/src/agents/skip-agent.ts +18 -4
  47. package/src/generated/generated.ts +4376 -2227
  48. package/src/generic/ResolverBase.ts +11 -2
  49. package/src/generic/RunViewResolver.ts +29 -2
  50. package/src/index.ts +17 -2
  51. package/src/resolvers/AvailableSearchProvidersResolver.ts +43 -0
  52. package/src/resolvers/ComponentRegistryResolver.ts +71 -123
  53. package/src/resolvers/QuerySystemUserResolver.ts +68 -6
  54. package/src/resolvers/SearchKnowledgeResolver.ts +205 -4
  55. package/src/resolvers/SearchKnowledgeStreamResolver.ts +338 -0
  56. package/src/types.ts +6 -1
@@ -0,0 +1,342 @@
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
+ /**
14
+ * Streaming variant of the SearchKnowledge mutation. Uses GraphQL
15
+ * subscriptions over the existing Apollo subscription transport (see
16
+ * `plans/search-scopes-rag-plus/streaming-mechanism-decision.md` for the
17
+ * decision rationale).
18
+ *
19
+ * Two-step protocol:
20
+ *
21
+ * 1. Caller invokes the `StreamScopedSearch` mutation with the same
22
+ * arguments as `SearchKnowledge`. The mutation returns a streamID
23
+ * (uuid) immediately and starts the search in the background.
24
+ * 2. Caller subscribes to `SearchStreamEvents(streamID: $id)`. The
25
+ * server publishes events from `SearchEngine.streamSearch()` to the
26
+ * pubsub topic; the subscription's filter narrows to the requested
27
+ * streamID. The final event has `Phase = 'final'` (or 'error');
28
+ * consumers should unsubscribe after receiving it.
29
+ *
30
+ * Permission enforcement is identical to SearchKnowledge: each requested
31
+ * scopeID is run through SearchScopePermissionResolver before the engine
32
+ * is invoked. A denial publishes a single 'error' event and ends.
33
+ */
34
+ import { Resolver, Mutation, Arg, Ctx, ObjectType, Field, Float, ID, Subscription, Root, PubSub, PubSubEngine } from 'type-graphql';
35
+ import { v4 as uuidv4 } from 'uuid';
36
+ import { GraphQLJSON } from 'graphql-type-json';
37
+ import { LogError, LogStatus, Metadata } from '@memberjunction/core';
38
+ import { ResolverBase } from '../generic/ResolverBase.js';
39
+ import { SearchEngine, SearchScopePermissionResolver, } from '@memberjunction/search-engine';
40
+ import { UUIDsEqual } from '@memberjunction/global';
41
+ import { SearchKnowledgeResultItem, SearchSourceCounts } from './SearchKnowledgeResolver.js';
42
+ const SEARCH_STREAM_TOPIC = 'SEARCH_STREAM';
43
+ /**
44
+ * Wire format for search stream events. We do not use a discriminated
45
+ * union at the GraphQL level (type-graphql doesn't have first-class
46
+ * support for union outputs in a clean way) — instead we use a Phase
47
+ * discriminator and make the data fields nullable per phase.
48
+ */
49
+ let SearchStreamNotification = class SearchStreamNotification {
50
+ };
51
+ __decorate([
52
+ Field(() => ID),
53
+ __metadata("design:type", String)
54
+ ], SearchStreamNotification.prototype, "StreamID", void 0);
55
+ __decorate([
56
+ Field(),
57
+ __metadata("design:type", String)
58
+ ], SearchStreamNotification.prototype, "Phase", void 0);
59
+ __decorate([
60
+ Field({ nullable: true }),
61
+ __metadata("design:type", String)
62
+ ], SearchStreamNotification.prototype, "ProviderName", void 0);
63
+ __decorate([
64
+ Field(() => Float, { nullable: true }),
65
+ __metadata("design:type", Number)
66
+ ], SearchStreamNotification.prototype, "DurationMs", void 0);
67
+ __decorate([
68
+ Field(() => [SearchKnowledgeResultItem], { nullable: true }),
69
+ __metadata("design:type", Array)
70
+ ], SearchStreamNotification.prototype, "Results", void 0);
71
+ __decorate([
72
+ Field(() => SearchSourceCounts, { nullable: true }),
73
+ __metadata("design:type", SearchSourceCounts)
74
+ ], SearchStreamNotification.prototype, "SourceCounts", void 0);
75
+ __decorate([
76
+ Field(() => Float, { nullable: true }),
77
+ __metadata("design:type", Number)
78
+ ], SearchStreamNotification.prototype, "ElapsedMs", void 0);
79
+ __decorate([
80
+ Field({ nullable: true }),
81
+ __metadata("design:type", String)
82
+ ], SearchStreamNotification.prototype, "ErrorMessage", void 0);
83
+ SearchStreamNotification = __decorate([
84
+ ObjectType()
85
+ ], SearchStreamNotification);
86
+ export { SearchStreamNotification };
87
+ let SearchStreamStartResult = class SearchStreamStartResult {
88
+ };
89
+ __decorate([
90
+ Field(),
91
+ __metadata("design:type", Boolean)
92
+ ], SearchStreamStartResult.prototype, "Success", void 0);
93
+ __decorate([
94
+ Field(() => ID),
95
+ __metadata("design:type", String)
96
+ ], SearchStreamStartResult.prototype, "StreamID", void 0);
97
+ __decorate([
98
+ Field({ nullable: true }),
99
+ __metadata("design:type", String)
100
+ ], SearchStreamStartResult.prototype, "ErrorMessage", void 0);
101
+ SearchStreamStartResult = __decorate([
102
+ ObjectType()
103
+ ], SearchStreamStartResult);
104
+ export { SearchStreamStartResult };
105
+ let SearchKnowledgeStreamResolver = class SearchKnowledgeStreamResolver extends ResolverBase {
106
+ /**
107
+ * Subscribe to events from a running streamScopedSearch. Filter by
108
+ * streamID so multiple in-flight streams don't interleave on the same
109
+ * client.
110
+ */
111
+ SearchStreamEvents(notification, _streamID) {
112
+ return notification;
113
+ }
114
+ /**
115
+ * Start a streaming search. Returns a streamID that the caller passes
116
+ * to the SearchStreamEvents subscription. Permission checks are
117
+ * performed before the stream begins; on rejection a single 'error'
118
+ * event is published and the stream ends.
119
+ */
120
+ async StreamScopedSearch(query, maxResults, minScore, scopeIDs, searchContext, agentID, pubSub, { userPayload } = {}) {
121
+ const streamID = uuidv4();
122
+ const startTime = Date.now();
123
+ try {
124
+ const currentUser = this.GetUserFromPayload(userPayload);
125
+ if (!currentUser) {
126
+ return { Success: false, StreamID: streamID, ErrorMessage: 'Unable to determine current user' };
127
+ }
128
+ // Phase 2A enforcement: validate every requested scope before
129
+ // we kick the stream off. Same predicate / message as the
130
+ // synchronous resolver — single source of truth.
131
+ if (scopeIDs && scopeIDs.length) {
132
+ const denial = await this.rejectForbiddenScopes(scopeIDs, currentUser, agentID);
133
+ if (denial) {
134
+ // Mirror the synchronous resolver: surface denied attempts in
135
+ // the analytics dashboard so an admin tuning permissions can
136
+ // see them. Best-effort — failures are swallowed by the helper.
137
+ await SearchEngine.Instance.LogForbiddenSearch({
138
+ Query: query,
139
+ ScopeIDs: scopeIDs,
140
+ FailureReason: denial,
141
+ StartTime: startTime,
142
+ ContextUser: currentUser,
143
+ AIAgentID: agentID ?? null,
144
+ });
145
+ return { Success: false, StreamID: streamID, ErrorMessage: denial };
146
+ }
147
+ }
148
+ // Kick off the stream in the background and return immediately.
149
+ // The mutation resolves before any events are published — the
150
+ // client must subscribe first to avoid missing the early ones.
151
+ // (TODO Phase 2C v2: optionally buffer until first subscriber
152
+ // arrives; today's contract is "subscribe before mutation
153
+ // returns" which the SDK can enforce.)
154
+ void this.runStream(streamID, {
155
+ query,
156
+ maxResults,
157
+ minScore,
158
+ scopeIDs,
159
+ searchContext,
160
+ agentID,
161
+ }, currentUser, pubSub).catch(err => {
162
+ const msg = err instanceof Error ? err.message : String(err);
163
+ LogError(`StreamScopedSearch background failure: ${msg}`);
164
+ void pubSub.publish(SEARCH_STREAM_TOPIC, {
165
+ StreamID: streamID,
166
+ Phase: 'error',
167
+ ErrorMessage: msg,
168
+ });
169
+ });
170
+ return { Success: true, StreamID: streamID };
171
+ }
172
+ catch (err) {
173
+ const msg = err instanceof Error ? err.message : String(err);
174
+ LogError(`StreamScopedSearch start failed: ${msg}`);
175
+ return { Success: false, StreamID: streamID, ErrorMessage: msg };
176
+ }
177
+ }
178
+ /**
179
+ * Runs the stream and publishes events. Always publishes a terminal
180
+ * 'final' or 'error' so clients can confidently unsubscribe.
181
+ */
182
+ async runStream(streamID, params, currentUser, pubSub) {
183
+ const mappedContext = params.searchContext
184
+ ? params.searchContext
185
+ : undefined;
186
+ try {
187
+ for await (const ev of SearchEngine.Instance.streamSearch({
188
+ Query: params.query,
189
+ MaxResults: params.maxResults,
190
+ MinScore: params.minScore,
191
+ ScopeIDs: params.scopeIDs && params.scopeIDs.length ? params.scopeIDs : undefined,
192
+ SearchContext: mappedContext,
193
+ AIAgentID: params.agentID ?? null,
194
+ }, currentUser)) {
195
+ const notification = this.toNotification(streamID, ev);
196
+ await pubSub.publish(SEARCH_STREAM_TOPIC, notification);
197
+ }
198
+ LogStatus(`StreamScopedSearch ${streamID} completed`);
199
+ }
200
+ catch (err) {
201
+ const msg = err instanceof Error ? err.message : String(err);
202
+ LogError(`StreamScopedSearch ${streamID} failed mid-stream: ${msg}`);
203
+ await pubSub.publish(SEARCH_STREAM_TOPIC, {
204
+ StreamID: streamID,
205
+ Phase: 'error',
206
+ ErrorMessage: msg,
207
+ });
208
+ }
209
+ }
210
+ toNotification(streamID, ev) {
211
+ // Reuse the same item shape as the synchronous resolver.
212
+ const mapItem = (r) => ({
213
+ ID: r.ID,
214
+ EntityName: r.EntityName,
215
+ RecordID: r.RecordID,
216
+ SourceType: r.SourceType,
217
+ ResultType: r.ResultType,
218
+ Title: r.Title,
219
+ Snippet: r.Snippet,
220
+ Score: r.Score,
221
+ ScoreBreakdown: r.ScoreBreakdown,
222
+ Tags: r.Tags ?? [],
223
+ EntityIcon: r.EntityIcon,
224
+ RecordName: r.RecordName,
225
+ MatchedAt: r.MatchedAt,
226
+ RawMetadata: r.RawMetadata,
227
+ ProviderId: r.ProviderId,
228
+ ProviderLabel: r.ProviderLabel,
229
+ ProviderIcon: r.ProviderIcon,
230
+ });
231
+ switch (ev.phase) {
232
+ case 'provider':
233
+ return {
234
+ StreamID: streamID,
235
+ Phase: 'provider',
236
+ ProviderName: ev.providerName,
237
+ DurationMs: ev.durationMs,
238
+ Results: ev.results.map(mapItem),
239
+ };
240
+ case 'fused':
241
+ return {
242
+ StreamID: streamID,
243
+ Phase: 'fused',
244
+ Results: ev.results.map(mapItem),
245
+ };
246
+ case 'reranked':
247
+ return {
248
+ StreamID: streamID,
249
+ Phase: 'reranked',
250
+ ProviderName: ev.rerankerName,
251
+ Results: ev.results.map(mapItem),
252
+ };
253
+ case 'final':
254
+ return {
255
+ StreamID: streamID,
256
+ Phase: 'final',
257
+ Results: ev.results.map(mapItem),
258
+ SourceCounts: ev.sourceCounts,
259
+ ElapsedMs: ev.elapsedMs,
260
+ };
261
+ case 'error':
262
+ return {
263
+ StreamID: streamID,
264
+ Phase: 'error',
265
+ ProviderName: ev.providerName,
266
+ ErrorMessage: ev.error,
267
+ };
268
+ }
269
+ }
270
+ /** Mirrors the helper in SearchKnowledgeResolver — kept private to
271
+ * avoid an inter-resolver coupling. If a third resolver ever needs
272
+ * this, lift it into a shared util in `packages/SearchEngine`. */
273
+ async rejectForbiddenScopes(scopeIDs, user, agentID) {
274
+ const agent = await this.loadAgent(agentID, user);
275
+ const resolver = new SearchScopePermissionResolver();
276
+ for (const scopeID of scopeIDs) {
277
+ const verdict = await resolver.ResolveEffectivePermission({
278
+ User: user,
279
+ SearchScopeID: scopeID,
280
+ Agent: agent,
281
+ ContextUser: user,
282
+ });
283
+ if (!verdict.Allowed) {
284
+ LogStatus(`StreamScopedSearch denied: ${verdict.Reason} (scope=${scopeID}, source=${verdict.Source})`);
285
+ return `Forbidden: ${verdict.Reason}`;
286
+ }
287
+ // Read level grants metadata visibility but not the right to run a
288
+ // search. Mirror the SearchKnowledge resolver's gate so the streaming
289
+ // path enforces the same Read=metadata-only rule.
290
+ if (verdict.Level === 'Read') {
291
+ const reason = `User '${user.Name}' has Read-level access on this scope, which permits metadata visibility but not search execution. Search or Manage is required to run a query.`;
292
+ LogStatus(`StreamScopedSearch denied: ${reason} (scope=${scopeID}, source=${verdict.Source})`);
293
+ return `Forbidden: ${reason}`;
294
+ }
295
+ }
296
+ return undefined;
297
+ }
298
+ async loadAgent(agentID, contextUser) {
299
+ if (!agentID)
300
+ return null;
301
+ try {
302
+ const md = new Metadata(); // global-provider-ok: ResolverBase has no bound IMetadataProvider; contextUser is the per-request scope
303
+ const agent = await md.GetEntityObject('MJ: AI Agents', contextUser);
304
+ const loaded = await agent.Load(agentID);
305
+ return loaded ? agent : null;
306
+ }
307
+ catch (err) {
308
+ LogError(`StreamScopedSearch: failed to load agent ${agentID}: ${err instanceof Error ? err.message : String(err)}`);
309
+ return null;
310
+ }
311
+ }
312
+ };
313
+ __decorate([
314
+ Subscription(() => SearchStreamNotification, {
315
+ topics: SEARCH_STREAM_TOPIC,
316
+ filter: ({ payload, args }) => UUIDsEqual(payload.StreamID, args.streamID),
317
+ }),
318
+ __param(0, Root()),
319
+ __param(1, Arg('streamID', () => ID)),
320
+ __metadata("design:type", Function),
321
+ __metadata("design:paramtypes", [SearchStreamNotification, String]),
322
+ __metadata("design:returntype", SearchStreamNotification)
323
+ ], SearchKnowledgeStreamResolver.prototype, "SearchStreamEvents", null);
324
+ __decorate([
325
+ Mutation(() => SearchStreamStartResult),
326
+ __param(0, Arg('query')),
327
+ __param(1, Arg('maxResults', () => Float, { nullable: true })),
328
+ __param(2, Arg('minScore', () => Float, { nullable: true })),
329
+ __param(3, Arg('scopeIDs', () => [ID], { nullable: true })),
330
+ __param(4, Arg('searchContext', () => GraphQLJSON, { nullable: true })),
331
+ __param(5, Arg('agentID', () => ID, { nullable: true })),
332
+ __param(6, PubSub()),
333
+ __param(7, Ctx()),
334
+ __metadata("design:type", Function),
335
+ __metadata("design:paramtypes", [String, Number, Number, Array, Object, String, PubSubEngine, Object]),
336
+ __metadata("design:returntype", Promise)
337
+ ], SearchKnowledgeStreamResolver.prototype, "StreamScopedSearch", null);
338
+ SearchKnowledgeStreamResolver = __decorate([
339
+ Resolver()
340
+ ], SearchKnowledgeStreamResolver);
341
+ export { SearchKnowledgeStreamResolver };
342
+ //# sourceMappingURL=SearchKnowledgeStreamResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchKnowledgeStreamResolver.js","sourceRoot":"","sources":["../../src/resolvers/SearchKnowledgeStreamResolver.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { AggregateExpression, DatabaseProviderBase, UserInfo } from '@memberjunction/core';
1
+ import { AggregateExpression, CompositeKey, DatabaseProviderBase, UserInfo } from '@memberjunction/core';
2
2
  import { MJUserViewEntityExtended } from '@memberjunction/core-entities';
3
3
  import { GraphQLSchema } from 'graphql';
4
4
  import sql from 'mssql';
@@ -79,6 +79,11 @@ export type RunViewGenericParams = {
79
79
  ignoreMaxRows?: boolean;
80
80
  maxRows?: number;
81
81
  startRow?: number;
82
+ /**
83
+ * Keyset (seek) pagination cursor — see {@link RunViewParams.AfterKey}.
84
+ * When set, the entity must have a single-column PK; throws AfterKeyNotSupportedError otherwise.
85
+ */
86
+ afterKey?: CompositeKey;
82
87
  excludeDataFromAllPriorViewRuns?: boolean;
83
88
  forceAuditLog?: boolean;
84
89
  auditLogDescription?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AA6CxE,MAAM,OAAO,YAAY;CAGxB;AAED,MAAM,OAAO,cAAc;IASzB,YAAY,IAA4J;QACtK,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAAA,CAAC;AA6BF,MAAM,OAAO,aAAa;CAKzB;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA2B,EAAE,WAA6B,EAAE,WAAwB,EAAE,SAAe;IACpI,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;IAClC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;IAEzC,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;IAC1B,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;IACjB,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC;IACvC,GAAG,CAAC,SAAS,GAAG,oBAAoB,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AA6CxE,MAAM,OAAO,YAAY;CAGxB;AAED,MAAM,OAAO,cAAc;IASzB,YAAY,IAA4J;QACtK,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAAA,CAAC;AAkCF,MAAM,OAAO,aAAa;CAKzB;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA2B,EAAE,WAA6B,EAAE,WAAwB,EAAE,SAAe;IACpI,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;IAClC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;IAEzC,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;IAC1B,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;IACjB,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC;IACvC,GAAG,CAAC,SAAS,GAAG,oBAAoB,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/server",
3
- "version": "5.33.0",
3
+ "version": "5.34.1",
4
4
  "description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./src/index.ts",
@@ -27,73 +27,73 @@
27
27
  "@as-integrations/express5": "^1.0.0",
28
28
  "@graphql-tools/schema": "latest",
29
29
  "@graphql-tools/utils": "^11.0.0",
30
- "@memberjunction/actions": "5.33.0",
31
- "@memberjunction/actions-apollo": "5.33.0",
32
- "@memberjunction/actions-base": "5.33.0",
33
- "@memberjunction/actions-bizapps-accounting": "5.33.0",
34
- "@memberjunction/actions-bizapps-crm": "5.33.0",
35
- "@memberjunction/actions-bizapps-formbuilders": "5.33.0",
36
- "@memberjunction/actions-bizapps-lms": "5.33.0",
37
- "@memberjunction/actions-bizapps-social": "5.33.0",
38
- "@memberjunction/ai": "5.33.0",
39
- "@memberjunction/ai-agent-manager": "5.33.0",
40
- "@memberjunction/ai-agent-manager-actions": "5.33.0",
41
- "@memberjunction/ai-agents": "5.33.0",
42
- "@memberjunction/ai-core-plus": "5.33.0",
43
- "@memberjunction/ai-mcp-client": "5.33.0",
44
- "@memberjunction/ai-prompts": "5.33.0",
45
- "@memberjunction/ai-provider-bundle": "5.33.0",
46
- "@memberjunction/ai-vector-sync": "5.33.0",
47
- "@memberjunction/ai-vectordb": "5.33.0",
48
- "@memberjunction/ai-vectors-pinecone": "5.33.0",
49
- "@memberjunction/aiengine": "5.33.0",
50
- "@memberjunction/api-keys": "5.33.0",
51
- "@memberjunction/auth-providers": "5.33.0",
52
- "@memberjunction/codegen-lib": "5.33.0",
53
- "@memberjunction/communication-ms-graph": "5.33.0",
54
- "@memberjunction/communication-sendgrid": "5.33.0",
55
- "@memberjunction/communication-types": "5.33.0",
56
- "@memberjunction/component-registry-client-sdk": "5.33.0",
57
- "@memberjunction/computer-use-engine": "5.33.0",
58
- "@memberjunction/config": "5.33.0",
59
- "@memberjunction/core": "5.33.0",
60
- "@memberjunction/core-actions": "5.33.0",
61
- "@memberjunction/core-entities": "5.33.0",
62
- "@memberjunction/core-entities-server": "5.33.0",
63
- "@memberjunction/data-context": "5.33.0",
64
- "@memberjunction/data-context-server": "5.33.0",
65
- "@memberjunction/doc-utils": "5.33.0",
66
- "@memberjunction/encryption": "5.33.0",
67
- "@memberjunction/entity-communications-base": "5.33.0",
68
- "@memberjunction/entity-communications-server": "5.33.0",
69
- "@memberjunction/external-change-detection": "5.33.0",
70
- "@memberjunction/generic-database-provider": "5.33.0",
71
- "@memberjunction/global": "5.33.0",
72
- "@memberjunction/graphql-dataprovider": "5.33.0",
73
- "@memberjunction/integration-engine": "5.33.0",
74
- "@memberjunction/integration-schema-builder": "5.33.0",
75
- "@memberjunction/interactive-component-types": "5.33.0",
76
- "@memberjunction/notifications": "5.33.0",
77
- "@memberjunction/postgresql-dataprovider": "5.33.0",
78
- "@memberjunction/queue": "5.33.0",
79
- "@memberjunction/redis-provider": "5.33.0",
80
- "@memberjunction/scheduling-actions": "5.33.0",
81
- "@memberjunction/scheduling-base-types": "5.33.0",
82
- "@memberjunction/scheduling-engine": "5.33.0",
83
- "@memberjunction/scheduling-engine-base": "5.33.0",
84
- "@memberjunction/schema-engine": "5.33.0",
85
- "@memberjunction/search-engine": "5.33.0",
86
- "@memberjunction/server-extensions-core": "5.33.0",
87
- "@memberjunction/skip-types": "5.33.0",
88
- "@memberjunction/sql-dialect": "5.33.0",
89
- "@memberjunction/sqlserver-dataprovider": "5.33.0",
90
- "@memberjunction/storage": "5.33.0",
91
- "@memberjunction/tag-engine": "5.33.0",
92
- "@memberjunction/tag-engine-base": "5.33.0",
93
- "@memberjunction/templates": "5.33.0",
94
- "@memberjunction/testing-engine": "5.33.0",
95
- "@memberjunction/testing-engine-base": "5.33.0",
96
- "@memberjunction/version-history": "5.33.0",
30
+ "@memberjunction/actions": "5.34.1",
31
+ "@memberjunction/actions-apollo": "5.34.1",
32
+ "@memberjunction/actions-base": "5.34.1",
33
+ "@memberjunction/actions-bizapps-accounting": "5.34.1",
34
+ "@memberjunction/actions-bizapps-crm": "5.34.1",
35
+ "@memberjunction/actions-bizapps-formbuilders": "5.34.1",
36
+ "@memberjunction/actions-bizapps-lms": "5.34.1",
37
+ "@memberjunction/actions-bizapps-social": "5.34.1",
38
+ "@memberjunction/ai": "5.34.1",
39
+ "@memberjunction/ai-agent-manager": "5.34.1",
40
+ "@memberjunction/ai-agent-manager-actions": "5.34.1",
41
+ "@memberjunction/ai-agents": "5.34.1",
42
+ "@memberjunction/ai-core-plus": "5.34.1",
43
+ "@memberjunction/ai-mcp-client": "5.34.1",
44
+ "@memberjunction/ai-prompts": "5.34.1",
45
+ "@memberjunction/ai-provider-bundle": "5.34.1",
46
+ "@memberjunction/ai-vector-sync": "5.34.1",
47
+ "@memberjunction/ai-vectordb": "5.34.1",
48
+ "@memberjunction/ai-vectors-pinecone": "5.34.1",
49
+ "@memberjunction/aiengine": "5.34.1",
50
+ "@memberjunction/api-keys": "5.34.1",
51
+ "@memberjunction/auth-providers": "5.34.1",
52
+ "@memberjunction/codegen-lib": "5.34.1",
53
+ "@memberjunction/communication-ms-graph": "5.34.1",
54
+ "@memberjunction/communication-sendgrid": "5.34.1",
55
+ "@memberjunction/communication-types": "5.34.1",
56
+ "@memberjunction/component-registry-client-sdk": "5.34.1",
57
+ "@memberjunction/computer-use-engine": "5.34.1",
58
+ "@memberjunction/config": "5.34.1",
59
+ "@memberjunction/core": "5.34.1",
60
+ "@memberjunction/core-actions": "5.34.1",
61
+ "@memberjunction/core-entities": "5.34.1",
62
+ "@memberjunction/core-entities-server": "5.34.1",
63
+ "@memberjunction/data-context": "5.34.1",
64
+ "@memberjunction/data-context-server": "5.34.1",
65
+ "@memberjunction/doc-utils": "5.34.1",
66
+ "@memberjunction/encryption": "5.34.1",
67
+ "@memberjunction/entity-communications-base": "5.34.1",
68
+ "@memberjunction/entity-communications-server": "5.34.1",
69
+ "@memberjunction/external-change-detection": "5.34.1",
70
+ "@memberjunction/generic-database-provider": "5.34.1",
71
+ "@memberjunction/global": "5.34.1",
72
+ "@memberjunction/graphql-dataprovider": "5.34.1",
73
+ "@memberjunction/integration-engine": "5.34.1",
74
+ "@memberjunction/integration-schema-builder": "5.34.1",
75
+ "@memberjunction/interactive-component-types": "5.34.1",
76
+ "@memberjunction/notifications": "5.34.1",
77
+ "@memberjunction/postgresql-dataprovider": "5.34.1",
78
+ "@memberjunction/queue": "5.34.1",
79
+ "@memberjunction/redis-provider": "5.34.1",
80
+ "@memberjunction/scheduling-actions": "5.34.1",
81
+ "@memberjunction/scheduling-base-types": "5.34.1",
82
+ "@memberjunction/scheduling-engine": "5.34.1",
83
+ "@memberjunction/scheduling-engine-base": "5.34.1",
84
+ "@memberjunction/schema-engine": "5.34.1",
85
+ "@memberjunction/search-engine": "5.34.1",
86
+ "@memberjunction/server-extensions-core": "5.34.1",
87
+ "@memberjunction/skip-types": "5.34.1",
88
+ "@memberjunction/sql-dialect": "5.34.1",
89
+ "@memberjunction/sqlserver-dataprovider": "5.34.1",
90
+ "@memberjunction/storage": "5.34.1",
91
+ "@memberjunction/tag-engine": "5.34.1",
92
+ "@memberjunction/tag-engine-base": "5.34.1",
93
+ "@memberjunction/templates": "5.34.1",
94
+ "@memberjunction/testing-engine": "5.34.1",
95
+ "@memberjunction/testing-engine-base": "5.34.1",
96
+ "@memberjunction/version-history": "5.34.1",
97
97
  "@types/compression": "^1.8.1",
98
98
  "@types/cors": "^2.8.19",
99
99
  "@types/jsonwebtoken": "9.0.10",
@@ -347,12 +347,27 @@ export class SkipProxyAgent extends BaseAgent {
347
347
  }
348
348
 
349
349
  /**
350
- * Handle analysis_complete phase — validates componentOptions before accessing
350
+ * Handle analysis_complete phase — supports both component-bearing responses
351
+ * (componentOptions populated) and analysis-only responses (markdown in `analysis`
352
+ * with no component, produced by Skip's Analysis Agent path).
351
353
  */
352
354
  private handleAnalysisComplete(
353
355
  response: SkipAPIAnalysisCompleteResponse
354
356
  ): BaseAgentNextStep<ComponentSpec> {
355
- if (!response.componentOptions || response.componentOptions.length === 0) {
357
+ const hasComponentOptions = response.componentOptions && response.componentOptions.length > 0;
358
+ const skipMessage = response.messages?.filter(msg => msg.role === 'system').pop();
359
+ const analysisText = response.analysis?.trim();
360
+
361
+ if (!hasComponentOptions) {
362
+ if (analysisText || skipMessage?.content) {
363
+ return {
364
+ terminate: true,
365
+ step: 'Success',
366
+ message: analysisText || skipMessage!.content,
367
+ newPayload: undefined
368
+ };
369
+ }
370
+
356
371
  const msg = 'Skip completed analysis but returned no component options. '
357
372
  + `Title: "${response.title || 'none'}". `
358
373
  + `Result type: "${response.resultType || 'none'}"`;
@@ -366,8 +381,7 @@ export class SkipProxyAgent extends BaseAgent {
366
381
  };
367
382
  }
368
383
 
369
- const componentSpec = response.componentOptions[0].option;
370
- const skipMessage = response.messages?.filter(msg => msg.role === 'system').pop();
384
+ const componentSpec = response.componentOptions![0].option;
371
385
 
372
386
  return {
373
387
  terminate: true,