@memberjunction/server 5.22.0 → 5.24.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 (45) hide show
  1. package/README.md +35 -0
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +11 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/generated/generated.d.ts +610 -4
  6. package/dist/generated/generated.d.ts.map +1 -1
  7. package/dist/generated/generated.js +17333 -13889
  8. package/dist/generated/generated.js.map +1 -1
  9. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  10. package/dist/generic/RunViewResolver.js.map +1 -1
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +7 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/resolvers/AutotagPipelineResolver.d.ts +30 -0
  16. package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -0
  17. package/dist/resolvers/AutotagPipelineResolver.js +231 -0
  18. package/dist/resolvers/AutotagPipelineResolver.js.map +1 -0
  19. package/dist/resolvers/ClientToolRequestResolver.d.ts +43 -0
  20. package/dist/resolvers/ClientToolRequestResolver.d.ts.map +1 -0
  21. package/dist/resolvers/ClientToolRequestResolver.js +161 -0
  22. package/dist/resolvers/ClientToolRequestResolver.js.map +1 -0
  23. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +29 -0
  24. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -0
  25. package/dist/resolvers/FetchEntityVectorsResolver.js +222 -0
  26. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -0
  27. package/dist/resolvers/RunAIAgentResolver.d.ts +21 -0
  28. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  29. package/dist/resolvers/RunAIAgentResolver.js +75 -33
  30. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  31. package/dist/resolvers/SearchKnowledgeResolver.d.ts +42 -1
  32. package/dist/resolvers/SearchKnowledgeResolver.d.ts.map +1 -1
  33. package/dist/resolvers/SearchKnowledgeResolver.js +239 -13
  34. package/dist/resolvers/SearchKnowledgeResolver.js.map +1 -1
  35. package/package.json +63 -63
  36. package/src/__tests__/search-knowledge-tags.test.ts +415 -0
  37. package/src/config.ts +11 -0
  38. package/src/generated/generated.ts +2373 -7
  39. package/src/generic/RunViewResolver.ts +1 -0
  40. package/src/index.ts +10 -0
  41. package/src/resolvers/AutotagPipelineResolver.ts +235 -0
  42. package/src/resolvers/ClientToolRequestResolver.ts +128 -0
  43. package/src/resolvers/FetchEntityVectorsResolver.ts +238 -0
  44. package/src/resolvers/RunAIAgentResolver.ts +97 -56
  45. package/src/resolvers/SearchKnowledgeResolver.ts +270 -13
@@ -0,0 +1,231 @@
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, Mutation, Ctx, Arg, ObjectType, Field } from 'type-graphql';
14
+ import { LogError, LogStatus, Metadata } from '@memberjunction/core';
15
+ import { ResolverBase } from '../generic/ResolverBase.js';
16
+ import { ActionEngineServer } from '@memberjunction/actions';
17
+ import { PubSubManager } from '../generic/PubSubManager.js';
18
+ import { v4 as uuidv4 } from 'uuid';
19
+ const PIPELINE_PROGRESS_TOPIC = 'PIPELINE_PROGRESS';
20
+ let AutotagPipelineResult = class AutotagPipelineResult {
21
+ };
22
+ __decorate([
23
+ Field(),
24
+ __metadata("design:type", Boolean)
25
+ ], AutotagPipelineResult.prototype, "Success", void 0);
26
+ __decorate([
27
+ Field({ nullable: true }),
28
+ __metadata("design:type", String)
29
+ ], AutotagPipelineResult.prototype, "Status", void 0);
30
+ __decorate([
31
+ Field({ nullable: true }),
32
+ __metadata("design:type", String)
33
+ ], AutotagPipelineResult.prototype, "ErrorMessage", void 0);
34
+ __decorate([
35
+ Field({ nullable: true }),
36
+ __metadata("design:type", String)
37
+ ], AutotagPipelineResult.prototype, "PipelineRunID", void 0);
38
+ AutotagPipelineResult = __decorate([
39
+ ObjectType()
40
+ ], AutotagPipelineResult);
41
+ export { AutotagPipelineResult };
42
+ let AutotagPipelineResolver = class AutotagPipelineResolver extends ResolverBase {
43
+ async RunAutotagPipeline(contentSourceIDs, forceReprocess, { userPayload } = {}) {
44
+ try {
45
+ const currentUser = this.GetUserFromPayload(userPayload);
46
+ if (!currentUser) {
47
+ return { Success: false, Status: 'Error', ErrorMessage: 'Unable to determine current user' };
48
+ }
49
+ const pipelineRunID = uuidv4();
50
+ LogStatus(`RunAutotagPipeline: starting pipeline ${pipelineRunID}`);
51
+ // Fire-and-forget: start the pipeline in the background and return immediately
52
+ this.runPipelineInBackground(pipelineRunID, currentUser, contentSourceIDs, forceReprocess);
53
+ return {
54
+ Success: true,
55
+ Status: 'Started',
56
+ PipelineRunID: pipelineRunID,
57
+ };
58
+ }
59
+ catch (error) {
60
+ const msg = error instanceof Error ? error.message : String(error);
61
+ LogError(`RunAutotagPipeline mutation failed: ${msg}`);
62
+ return {
63
+ Success: false,
64
+ Status: 'Error',
65
+ ErrorMessage: msg
66
+ };
67
+ }
68
+ }
69
+ /**
70
+ * Runs the autotag + vectorize pipeline in the background, publishing progress
71
+ * updates via PubSub so the client can subscribe via PipelineProgress.
72
+ */
73
+ async runPipelineInBackground(pipelineRunID, currentUser, contentSourceIDs, forceReprocess) {
74
+ const startTime = Date.now();
75
+ try {
76
+ this.publishProgress(pipelineRunID, 'autotag', 0, 0, startTime, 'Initializing pipeline...');
77
+ await ActionEngineServer.Instance.Config(false, currentUser);
78
+ const action = ActionEngineServer.Instance.Actions.find(a => a.Name === 'Autotag and Vectorize Content');
79
+ if (!action) {
80
+ LogError(`RunAutotagPipeline: Action 'Autotag and Vectorize Content' not found`);
81
+ this.publishProgress(pipelineRunID, 'error', 0, 0, startTime, 'Autotag action not found');
82
+ return;
83
+ }
84
+ // Stage: autotagging — provide a progress callback that publishes per-item updates
85
+ this.publishProgress(pipelineRunID, 'autotag', 0, 0, startTime, 'Running autotaggers...');
86
+ const progressCallback = (processed, total, currentItem) => {
87
+ const pct = total > 0 ? Math.round((processed / total) * 80) : 0; // 0-80% for tagging
88
+ this.publishProgress(pipelineRunID, 'autotag', total, pct, startTime, currentItem || `${processed}/${total} items`);
89
+ };
90
+ // Build action params
91
+ const actionParams = [
92
+ { Name: 'Autotag', Value: 1, Type: 'Input' },
93
+ { Name: 'Vectorize', Value: 1, Type: 'Input' },
94
+ { Name: '__progressCallback', Value: progressCallback, Type: 'Input' }
95
+ ];
96
+ if (contentSourceIDs && contentSourceIDs.length > 0) {
97
+ actionParams.push({ Name: 'ContentSourceIDs', Value: contentSourceIDs, Type: 'Input' });
98
+ }
99
+ if (forceReprocess) {
100
+ actionParams.push({ Name: 'ForceReprocess', Value: 1, Type: 'Input' });
101
+ }
102
+ const result = await ActionEngineServer.Instance.RunAction({
103
+ Action: action,
104
+ ContextUser: currentUser,
105
+ Filters: [],
106
+ Params: actionParams
107
+ });
108
+ // Stage: vectorize complete
109
+ this.publishProgress(pipelineRunID, 'vectorize', 100, 90, startTime, 'Vectorizing content...');
110
+ if (result.Success) {
111
+ LogStatus(`RunAutotagPipeline: pipeline ${pipelineRunID} completed successfully`);
112
+ this.publishProgress(pipelineRunID, 'complete', 100, 100, startTime);
113
+ }
114
+ else {
115
+ LogError(`RunAutotagPipeline: pipeline ${pipelineRunID} failed: ${result.Message}`);
116
+ this.publishProgress(pipelineRunID, 'error', 0, 0, startTime, String(result.Message));
117
+ }
118
+ }
119
+ catch (error) {
120
+ const msg = error instanceof Error ? error.message : String(error);
121
+ LogError(`RunAutotagPipeline pipeline ${pipelineRunID} failed: ${msg}`);
122
+ this.publishProgress(pipelineRunID, 'error', 0, 0, startTime, msg);
123
+ }
124
+ }
125
+ /**
126
+ * Pause a running classification pipeline by setting CancellationRequested on the process run.
127
+ * The engine checks this flag between batches and pauses gracefully.
128
+ */
129
+ async PauseClassificationPipeline(processRunID, { userPayload } = {}) {
130
+ try {
131
+ const currentUser = this.GetUserFromPayload(userPayload);
132
+ if (!currentUser) {
133
+ return { Success: false, Status: 'Error', ErrorMessage: 'Unable to determine current user' };
134
+ }
135
+ const md = new Metadata();
136
+ const run = await md.GetEntityObject('MJ: Content Process Runs', currentUser);
137
+ const loaded = await run.Load(processRunID);
138
+ if (!loaded) {
139
+ return { Success: false, Status: 'Error', ErrorMessage: `Process run ${processRunID} not found` };
140
+ }
141
+ run.CancellationRequested = true;
142
+ await run.Save();
143
+ LogStatus(`PauseClassificationPipeline: Pause requested for run ${processRunID}`);
144
+ return { Success: true, Status: 'PauseRequested' };
145
+ }
146
+ catch (error) {
147
+ const msg = error instanceof Error ? error.message : String(error);
148
+ return { Success: false, Status: 'Error', ErrorMessage: msg };
149
+ }
150
+ }
151
+ /**
152
+ * Resume a paused classification pipeline from its last completed offset.
153
+ */
154
+ async ResumeClassificationPipeline(processRunID, { userPayload } = {}) {
155
+ try {
156
+ const currentUser = this.GetUserFromPayload(userPayload);
157
+ if (!currentUser) {
158
+ return { Success: false, Status: 'Error', ErrorMessage: 'Unable to determine current user' };
159
+ }
160
+ const md = new Metadata();
161
+ const run = await md.GetEntityObject('MJ: Content Process Runs', currentUser);
162
+ const loaded = await run.Load(processRunID);
163
+ if (!loaded) {
164
+ return { Success: false, Status: 'Error', ErrorMessage: `Process run ${processRunID} not found` };
165
+ }
166
+ if (run.Status !== 'Paused') {
167
+ return { Success: false, Status: 'Error', ErrorMessage: `Run is not paused (Status: ${run.Status})` };
168
+ }
169
+ // Reset cancellation flag and set status back to Running
170
+ run.CancellationRequested = false;
171
+ run.Status = 'Running';
172
+ await run.Save();
173
+ // Fire-and-forget: resume pipeline in background from the last offset
174
+ const pipelineRunID = uuidv4();
175
+ LogStatus(`ResumeClassificationPipeline: Resuming run ${processRunID} from offset ${run.LastProcessedOffset}`);
176
+ this.runPipelineInBackground(pipelineRunID, currentUser, undefined, undefined);
177
+ return { Success: true, Status: 'Resumed', PipelineRunID: pipelineRunID };
178
+ }
179
+ catch (error) {
180
+ const msg = error instanceof Error ? error.message : String(error);
181
+ return { Success: false, Status: 'Error', ErrorMessage: msg };
182
+ }
183
+ }
184
+ /**
185
+ * Publish a progress update to the PipelineProgress subscription topic.
186
+ */
187
+ publishProgress(pipelineRunID, stage, totalItems, processedItems, startTime, currentItem) {
188
+ const elapsedMs = Date.now() - startTime;
189
+ const percentComplete = totalItems > 0 ? Math.round((processedItems / totalItems) * 100) : 0;
190
+ const notification = {
191
+ PipelineRunID: pipelineRunID,
192
+ Stage: stage,
193
+ TotalItems: totalItems,
194
+ ProcessedItems: processedItems,
195
+ CurrentItem: currentItem,
196
+ ElapsedMs: elapsedMs,
197
+ PercentComplete: percentComplete,
198
+ };
199
+ PubSubManager.Instance.Publish(PIPELINE_PROGRESS_TOPIC, { ...notification });
200
+ }
201
+ };
202
+ __decorate([
203
+ Mutation(() => AutotagPipelineResult),
204
+ __param(0, Arg('contentSourceIDs', () => [String], { nullable: true })),
205
+ __param(1, Arg('forceReprocess', { nullable: true })),
206
+ __param(2, Ctx()),
207
+ __metadata("design:type", Function),
208
+ __metadata("design:paramtypes", [Array, Boolean, Object]),
209
+ __metadata("design:returntype", Promise)
210
+ ], AutotagPipelineResolver.prototype, "RunAutotagPipeline", null);
211
+ __decorate([
212
+ Mutation(() => AutotagPipelineResult),
213
+ __param(0, Arg('processRunID')),
214
+ __param(1, Ctx()),
215
+ __metadata("design:type", Function),
216
+ __metadata("design:paramtypes", [String, Object]),
217
+ __metadata("design:returntype", Promise)
218
+ ], AutotagPipelineResolver.prototype, "PauseClassificationPipeline", null);
219
+ __decorate([
220
+ Mutation(() => AutotagPipelineResult),
221
+ __param(0, Arg('processRunID')),
222
+ __param(1, Ctx()),
223
+ __metadata("design:type", Function),
224
+ __metadata("design:paramtypes", [String, Object]),
225
+ __metadata("design:returntype", Promise)
226
+ ], AutotagPipelineResolver.prototype, "ResumeClassificationPipeline", null);
227
+ AutotagPipelineResolver = __decorate([
228
+ Resolver()
229
+ ], AutotagPipelineResolver);
230
+ export { AutotagPipelineResolver };
231
+ //# sourceMappingURL=AutotagPipelineResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutotagPipelineResolver.js","sourceRoot":"","sources":["../../src/resolvers/AutotagPipelineResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @fileoverview GraphQL resolver for client tool request/response communication.
3
+ *
4
+ * Provides:
5
+ * - Subscription: Client subscribes to receive tool requests for a session
6
+ * - Mutation: Client sends tool execution responses back to the server
7
+ * - Mutation: Client sends enriched tool definitions after decoration
8
+ *
9
+ * @module @memberjunction/server
10
+ */
11
+ import { AppContext } from '../types.js';
12
+ import { ResolverBase } from '../generic/ResolverBase.js';
13
+ import { ClientToolRequestNotificationPayload } from '@memberjunction/ai-agents';
14
+ export declare class ClientToolRequestNotification {
15
+ AgentRunID: string;
16
+ SessionID: string;
17
+ RequestID: string;
18
+ ToolName: string;
19
+ /** JSON-encoded parameters */
20
+ Params: string;
21
+ TimeoutMs: number;
22
+ Description?: string;
23
+ }
24
+ export declare class ClientToolRequestResolver extends ResolverBase {
25
+ /**
26
+ * Subscribe to client tool requests for a specific session.
27
+ * The client listens on this subscription to know when an agent
28
+ * wants to invoke a browser-side tool.
29
+ */
30
+ ClientToolRequest(notification: ClientToolRequestNotificationPayload, _sessionID: string): ClientToolRequestNotification;
31
+ /**
32
+ * Client sends the result of executing a client tool back to the server.
33
+ * This resolves the pending Promise in ClientToolRequestManager so the
34
+ * agent loop can continue.
35
+ */
36
+ RespondToClientToolRequest(requestID: string, success: boolean, result: string | undefined, errorMessage: string | undefined, _context?: AppContext): Promise<boolean>;
37
+ /**
38
+ * Client sends enriched tool definitions after running decorators.
39
+ * The server stores them per session for LLM prompt injection.
40
+ */
41
+ UpdateClientToolDefinitions(sessionID: string, toolsJson: string, _context?: AppContext): Promise<boolean>;
42
+ }
43
+ //# sourceMappingURL=ClientToolRequestResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientToolRequestResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/ClientToolRequestResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAuD,oCAAoC,EAAE,MAAM,2BAA2B,CAAC;AAEtI,qBACa,6BAA6B;IAEtC,UAAU,EAAE,MAAM,CAAC;IAGnB,SAAS,EAAE,MAAM,CAAC;IAGlB,SAAS,EAAE,MAAM,CAAC;IAGlB,QAAQ,EAAE,MAAM,CAAC;IAEjB,8BAA8B;IAE9B,MAAM,EAAE,MAAM,CAAC;IAGf,SAAS,EAAE,MAAM,CAAC;IAGlB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBACa,yBAA0B,SAAQ,YAAY;IACvD;;;;OAIG;IAOH,iBAAiB,CACL,YAAY,EAAE,oCAAoC,EACxC,UAAU,EAAE,MAAM,GACrC,6BAA6B;IAYhC;;;;OAIG;IAEG,0BAA0B,CACV,SAAS,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EACG,MAAM,EAAE,MAAM,GAAG,SAAS,EACpB,YAAY,EAAE,MAAM,GAAG,SAAS,EAClE,QAAQ,GAAE,UAA6B,GAC/C,OAAO,CAAC,OAAO,CAAC;IAoBnB;;;OAGG;IAEG,2BAA2B,CACX,SAAS,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACxB,QAAQ,GAAE,UAA6B,GAC/C,OAAO,CAAC,OAAO,CAAC;CAgBtB"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * @fileoverview GraphQL resolver for client tool request/response communication.
3
+ *
4
+ * Provides:
5
+ * - Subscription: Client subscribes to receive tool requests for a session
6
+ * - Mutation: Client sends tool execution responses back to the server
7
+ * - Mutation: Client sends enriched tool definitions after decoration
8
+ *
9
+ * @module @memberjunction/server
10
+ */
11
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
12
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
13
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
14
+ 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;
15
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
16
+ };
17
+ var __metadata = (this && this.__metadata) || function (k, v) {
18
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
19
+ };
20
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
21
+ return function (target, key) { decorator(target, key, paramIndex); }
22
+ };
23
+ import { Resolver, Subscription, Root, ObjectType, Field, Float, Mutation, Arg, Ctx } from 'type-graphql';
24
+ import { LogStatus, LogError } from '@memberjunction/core';
25
+ import { ResolverBase } from '../generic/ResolverBase.js';
26
+ import { ClientToolRequestManager, CLIENT_TOOL_REQUEST_TOPIC } from '@memberjunction/ai-agents';
27
+ let ClientToolRequestNotification = class ClientToolRequestNotification {
28
+ };
29
+ __decorate([
30
+ Field(),
31
+ __metadata("design:type", String)
32
+ ], ClientToolRequestNotification.prototype, "AgentRunID", void 0);
33
+ __decorate([
34
+ Field(),
35
+ __metadata("design:type", String)
36
+ ], ClientToolRequestNotification.prototype, "SessionID", void 0);
37
+ __decorate([
38
+ Field(),
39
+ __metadata("design:type", String)
40
+ ], ClientToolRequestNotification.prototype, "RequestID", void 0);
41
+ __decorate([
42
+ Field(),
43
+ __metadata("design:type", String)
44
+ ], ClientToolRequestNotification.prototype, "ToolName", void 0);
45
+ __decorate([
46
+ Field(),
47
+ __metadata("design:type", String)
48
+ ], ClientToolRequestNotification.prototype, "Params", void 0);
49
+ __decorate([
50
+ Field(() => Float),
51
+ __metadata("design:type", Number)
52
+ ], ClientToolRequestNotification.prototype, "TimeoutMs", void 0);
53
+ __decorate([
54
+ Field({ nullable: true }),
55
+ __metadata("design:type", String)
56
+ ], ClientToolRequestNotification.prototype, "Description", void 0);
57
+ ClientToolRequestNotification = __decorate([
58
+ ObjectType()
59
+ ], ClientToolRequestNotification);
60
+ export { ClientToolRequestNotification };
61
+ let ClientToolRequestResolver = class ClientToolRequestResolver extends ResolverBase {
62
+ /**
63
+ * Subscribe to client tool requests for a specific session.
64
+ * The client listens on this subscription to know when an agent
65
+ * wants to invoke a browser-side tool.
66
+ */
67
+ ClientToolRequest(notification, _sessionID) {
68
+ return {
69
+ AgentRunID: notification.AgentRunID,
70
+ SessionID: notification.SessionID,
71
+ RequestID: notification.RequestID,
72
+ ToolName: notification.ToolName,
73
+ Params: notification.Params,
74
+ TimeoutMs: notification.TimeoutMs,
75
+ Description: notification.Description
76
+ };
77
+ }
78
+ /**
79
+ * Client sends the result of executing a client tool back to the server.
80
+ * This resolves the pending Promise in ClientToolRequestManager so the
81
+ * agent loop can continue.
82
+ */
83
+ async RespondToClientToolRequest(requestID, success, result, errorMessage, _context = {}) {
84
+ try {
85
+ const found = ClientToolRequestManager.Instance.ReceiveResponse({
86
+ RequestID: requestID,
87
+ Success: success,
88
+ Result: result ? JSON.parse(result) : undefined,
89
+ ErrorMessage: errorMessage
90
+ });
91
+ if (!found) {
92
+ LogError(`RespondToClientToolRequest: no pending request for ${requestID} (may have timed out)`);
93
+ }
94
+ return found;
95
+ }
96
+ catch (error) {
97
+ const msg = error instanceof Error ? error.message : String(error);
98
+ LogError(`RespondToClientToolRequest error: ${msg}`);
99
+ return false;
100
+ }
101
+ }
102
+ /**
103
+ * Client sends enriched tool definitions after running decorators.
104
+ * The server stores them per session for LLM prompt injection.
105
+ */
106
+ async UpdateClientToolDefinitions(sessionID, toolsJson, _context = {}) {
107
+ try {
108
+ const tools = JSON.parse(toolsJson);
109
+ if (!Array.isArray(tools)) {
110
+ LogError('UpdateClientToolDefinitions: tools must be a JSON array');
111
+ return false;
112
+ }
113
+ ClientToolRequestManager.Instance.SetSessionTools(sessionID, tools);
114
+ LogStatus(`UpdateClientToolDefinitions: stored ${tools.length} tools for session ${sessionID}`);
115
+ return true;
116
+ }
117
+ catch (error) {
118
+ const msg = error instanceof Error ? error.message : String(error);
119
+ LogError(`UpdateClientToolDefinitions error: ${msg}`);
120
+ return false;
121
+ }
122
+ }
123
+ };
124
+ __decorate([
125
+ Subscription(() => ClientToolRequestNotification, {
126
+ topics: CLIENT_TOOL_REQUEST_TOPIC,
127
+ filter: ({ payload, args }) => {
128
+ return payload.SessionID === args.sessionID;
129
+ },
130
+ }),
131
+ __param(0, Root()),
132
+ __param(1, Arg('sessionID')),
133
+ __metadata("design:type", Function),
134
+ __metadata("design:paramtypes", [Object, String]),
135
+ __metadata("design:returntype", ClientToolRequestNotification)
136
+ ], ClientToolRequestResolver.prototype, "ClientToolRequest", null);
137
+ __decorate([
138
+ Mutation(() => Boolean),
139
+ __param(0, Arg('requestID')),
140
+ __param(1, Arg('success')),
141
+ __param(2, Arg('result', { nullable: true })),
142
+ __param(3, Arg('errorMessage', { nullable: true })),
143
+ __param(4, Ctx()),
144
+ __metadata("design:type", Function),
145
+ __metadata("design:paramtypes", [String, Boolean, String, String, Object]),
146
+ __metadata("design:returntype", Promise)
147
+ ], ClientToolRequestResolver.prototype, "RespondToClientToolRequest", null);
148
+ __decorate([
149
+ Mutation(() => Boolean),
150
+ __param(0, Arg('sessionID')),
151
+ __param(1, Arg('tools')),
152
+ __param(2, Ctx()),
153
+ __metadata("design:type", Function),
154
+ __metadata("design:paramtypes", [String, String, Object]),
155
+ __metadata("design:returntype", Promise)
156
+ ], ClientToolRequestResolver.prototype, "UpdateClientToolDefinitions", null);
157
+ ClientToolRequestResolver = __decorate([
158
+ Resolver()
159
+ ], ClientToolRequestResolver);
160
+ export { ClientToolRequestResolver };
161
+ //# sourceMappingURL=ClientToolRequestResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientToolRequestResolver.js","sourceRoot":"","sources":["../../src/resolvers/ClientToolRequestResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { AppContext } from '../types.js';
2
+ import { ResolverBase } from '../generic/ResolverBase.js';
3
+ export declare class EntityVectorItem {
4
+ ID: string;
5
+ Values: number[];
6
+ Metadata: string;
7
+ }
8
+ export declare class FetchEntityVectorsResult {
9
+ Success: boolean;
10
+ Results: EntityVectorItem[];
11
+ TotalCount: number;
12
+ ElapsedMs: number;
13
+ ErrorMessage?: string;
14
+ }
15
+ export declare class FetchEntityVectorsResolver extends ResolverBase {
16
+ FetchEntityVectors(entityDocumentID: string, maxRecords: number | undefined, filter: string | undefined, { userPayload }?: AppContext): Promise<FetchEntityVectorsResult>;
17
+ /** Load EntityDocument by ID */
18
+ private loadEntityDocument;
19
+ /**
20
+ * Resolve the VectorIndex for an EntityDocument.
21
+ * Prefers the explicit VectorIndexID on the EntityDocument; falls back to
22
+ * finding a VectorIndex by matching VectorDatabaseID + EmbeddingModelID.
23
+ */
24
+ private resolveVectorIndex;
25
+ /** Create a VectorDBBase provider instance for a given VectorIndex */
26
+ private createVectorDBInstance;
27
+ private errorResult;
28
+ }
29
+ //# sourceMappingURL=FetchEntityVectorsResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FetchEntityVectorsResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/FetchEntityVectorsResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAO1D,qBACa,gBAAgB;IAEzB,EAAE,EAAE,MAAM,CAAC;IAGX,MAAM,EAAE,MAAM,EAAE,CAAC;IAGjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,qBACa,wBAAwB;IAEjC,OAAO,EAAE,OAAO,CAAC;IAGjB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAG5B,UAAU,EAAE,MAAM,CAAC;IAGnB,SAAS,EAAE,MAAM,CAAC;IAGlB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,qBACa,0BAA2B,SAAQ,YAAY;IAGlD,kBAAkB,CACK,gBAAgB,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC7C,MAAM,EAAE,MAAM,GAAG,SAAS,EACtD,EAAE,WAAW,EAAE,GAAE,UAA6B,GACtD,OAAO,CAAC,wBAAwB,CAAC;IAsFpC,gCAAgC;YAClB,kBAAkB;IAiBhC;;;;OAIG;YACW,kBAAkB;IAsChC,sEAAsE;YACxD,sBAAsB;IA4BpC,OAAO,CAAC,WAAW;CAStB"}