@reveldigital/mcp-graphql-proxy 1.0.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 (70) hide show
  1. package/dist/bin/cli.d.ts +6 -0
  2. package/dist/bin/cli.d.ts.map +1 -0
  3. package/dist/bin/cli.js +7 -0
  4. package/dist/bin/cli.js.map +1 -0
  5. package/dist/core/cache.d.ts +61 -0
  6. package/dist/core/cache.d.ts.map +1 -0
  7. package/dist/core/cache.js +147 -0
  8. package/dist/core/cache.js.map +1 -0
  9. package/dist/core/graphql-client.d.ts +48 -0
  10. package/dist/core/graphql-client.d.ts.map +1 -0
  11. package/dist/core/graphql-client.js +210 -0
  12. package/dist/core/graphql-client.js.map +1 -0
  13. package/dist/core/query-builder.d.ts +90 -0
  14. package/dist/core/query-builder.d.ts.map +1 -0
  15. package/dist/core/query-builder.js +259 -0
  16. package/dist/core/query-builder.js.map +1 -0
  17. package/dist/core/response-optimizer.d.ts +59 -0
  18. package/dist/core/response-optimizer.d.ts.map +1 -0
  19. package/dist/core/response-optimizer.js +197 -0
  20. package/dist/core/response-optimizer.js.map +1 -0
  21. package/dist/index.d.ts +16 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +377 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/types/auth.d.ts +146 -0
  26. package/dist/types/auth.d.ts.map +1 -0
  27. package/dist/types/auth.js +22 -0
  28. package/dist/types/auth.js.map +1 -0
  29. package/dist/types/cache.d.ts +162 -0
  30. package/dist/types/cache.d.ts.map +1 -0
  31. package/dist/types/cache.js +34 -0
  32. package/dist/types/cache.js.map +1 -0
  33. package/dist/types/config.d.ts +108 -0
  34. package/dist/types/config.d.ts.map +1 -0
  35. package/dist/types/config.js +37 -0
  36. package/dist/types/config.js.map +1 -0
  37. package/dist/types/graphql-proxy.d.ts +243 -0
  38. package/dist/types/graphql-proxy.d.ts.map +1 -0
  39. package/dist/types/graphql-proxy.js +142 -0
  40. package/dist/types/graphql-proxy.js.map +1 -0
  41. package/dist/types/index.d.ts +15 -0
  42. package/dist/types/index.d.ts.map +1 -0
  43. package/dist/types/index.js +16 -0
  44. package/dist/types/index.js.map +1 -0
  45. package/dist/types/logging.d.ts +223 -0
  46. package/dist/types/logging.d.ts.map +1 -0
  47. package/dist/types/logging.js +67 -0
  48. package/dist/types/logging.js.map +1 -0
  49. package/dist/types/mcp.d.ts +160 -0
  50. package/dist/types/mcp.d.ts.map +1 -0
  51. package/dist/types/mcp.js +126 -0
  52. package/dist/types/mcp.js.map +1 -0
  53. package/dist/types/metrics.d.ts +237 -0
  54. package/dist/types/metrics.d.ts.map +1 -0
  55. package/dist/types/metrics.js +26 -0
  56. package/dist/types/metrics.js.map +1 -0
  57. package/dist/types/rate-limit.d.ts +144 -0
  58. package/dist/types/rate-limit.d.ts.map +1 -0
  59. package/dist/types/rate-limit.js +43 -0
  60. package/dist/types/rate-limit.js.map +1 -0
  61. package/dist/types/tenant.d.ts +176 -0
  62. package/dist/types/tenant.d.ts.map +1 -0
  63. package/dist/types/tenant.js +63 -0
  64. package/dist/types/tenant.js.map +1 -0
  65. package/dist/types/transformation.d.ts +198 -0
  66. package/dist/types/transformation.d.ts.map +1 -0
  67. package/dist/types/transformation.js +51 -0
  68. package/dist/types/transformation.js.map +1 -0
  69. package/package.json +77 -0
  70. package/src/types/schema.graphql +2712 -0
@@ -0,0 +1,259 @@
1
+ /**
2
+ * GraphQL Query Builder for Revel Digital API
3
+ * Helps agents construct optimized queries with proper field selection and filtering
4
+ */
5
+ // Available query operations and their return types
6
+ const QUERY_OPERATIONS = {
7
+ // Content Management
8
+ device: { returnType: '[Device]', supportsFilter: true, requiresDateRange: false },
9
+ deviceGroups: { returnType: '[Group]', supportsFilter: true, requiresDateRange: false },
10
+ media: { returnType: '[Media]', supportsFilter: true, requiresDateRange: false },
11
+ mediaGroups: { returnType: '[Group]', supportsFilter: true, requiresDateRange: false },
12
+ playlist: { returnType: '[Playlist]', supportsFilter: true, requiresDateRange: false },
13
+ playlistGroups: { returnType: '[Group]', supportsFilter: true, requiresDateRange: false },
14
+ schedule: { returnType: '[Schedule]', supportsFilter: true, requiresDateRange: false },
15
+ scheduleGroups: { returnType: '[Group]', supportsFilter: true, requiresDateRange: false },
16
+ template: { returnType: '[Template]', supportsFilter: true, requiresDateRange: false },
17
+ templateGroups: { returnType: '[Group]', supportsFilter: true, requiresDateRange: false },
18
+ user: { returnType: '[User]', supportsFilter: true, requiresDateRange: false },
19
+ // Analytics (require date range)
20
+ playLogs: { returnType: '[AdHawkPlayLog]', supportsFilter: true, requiresDateRange: true },
21
+ pingLogs: { returnType: '[AdHawkPingLog]', supportsFilter: true, requiresDateRange: true },
22
+ eventLogs: { returnType: '[AdHawkEventLog]', supportsFilter: true, requiresDateRange: true },
23
+ impressions: { returnType: '[AdHawkImpression]', supportsFilter: true, requiresDateRange: true },
24
+ deviceMetrics: { returnType: '[AdHawkDeviceMetrics]', supportsFilter: true, requiresDateRange: true },
25
+ audienceMetrics: { returnType: '[AdHawkAudienceMetrics]', supportsFilter: true, requiresDateRange: true },
26
+ mediaPlayStats: { returnType: '[AdHawkMediaPlayStats]', supportsFilter: true, requiresDateRange: true },
27
+ };
28
+ // Common field sets for quick selection
29
+ const FIELD_PRESETS = {
30
+ device: {
31
+ minimal: ['id', 'name', 'isOnline'],
32
+ basic: ['id', 'name', 'groupName', 'isOnline', 'registrationKey', 'timezone'],
33
+ status: ['id', 'name', 'isOnline', 'pingData { timestamp cpuUsage memoryUsage diskUsage }'],
34
+ location: ['id', 'name', 'location { city state country latitude longitude }'],
35
+ full: ['id', 'name', 'groupName', 'groupId', 'tags', 'isOnline', 'registrationKey', 'timezone',
36
+ 'lastUpdate', 'enteredService', 'pingData { timestamp cpuUsage memoryUsage diskUsage playerVersion ipAddress }',
37
+ 'location { city state country address latitude longitude }'],
38
+ },
39
+ media: {
40
+ minimal: ['id', 'name', 'fileName'],
41
+ basic: ['id', 'name', 'fileName', 'mimeType', 'fileSize', 'thumbnailUrl'],
42
+ full: ['id', 'name', 'fileName', 'mimeType', 'fileSize', 'fileUrl', 'thumbnailUrl',
43
+ 'width', 'height', 'uploadedOn', 'groupName', 'tags'],
44
+ },
45
+ playlist: {
46
+ minimal: ['id', 'name', 'type'],
47
+ basic: ['id', 'name', 'type', 'groupName', 'duration'],
48
+ full: ['id', 'name', 'type', 'groupName', 'groupId', 'tags', 'duration',
49
+ 'isRandomStart', 'createdOn', 'modifiedOn'],
50
+ },
51
+ schedule: {
52
+ minimal: ['id', 'name', 'isActive'],
53
+ basic: ['id', 'name', 'type', 'isActive', 'priority', 'startDate', 'endDate'],
54
+ full: ['id', 'name', 'type', 'groupName', 'groupId', 'isActive', 'priority',
55
+ 'startDate', 'endDate', 'startTime', 'endTime', 'days'],
56
+ },
57
+ };
58
+ export class QueryBuilder {
59
+ /**
60
+ * Build a GraphQL query from options
61
+ */
62
+ static build(options) {
63
+ const { operation, arguments: args = {}, filter, orderBy, limit } = options;
64
+ let { fields } = options;
65
+ // Check if operation exists
66
+ const opConfig = QUERY_OPERATIONS[operation];
67
+ if (!opConfig) {
68
+ throw new Error(`Unknown operation: ${operation}. Available: ${Object.keys(QUERY_OPERATIONS).join(', ')}`);
69
+ }
70
+ // Apply field preset if specified
71
+ if (options.preset && FIELD_PRESETS[operation]?.[options.preset]) {
72
+ fields = FIELD_PRESETS[operation][options.preset];
73
+ }
74
+ // Validate date range requirement
75
+ if (opConfig.requiresDateRange && (!args.startDate || !args.endDate)) {
76
+ throw new Error(`Operation ${operation} requires startDate and endDate arguments`);
77
+ }
78
+ // Build arguments
79
+ const queryArgs = [];
80
+ const variables = {};
81
+ // Add direct arguments
82
+ for (const [key, value] of Object.entries(args)) {
83
+ if (value !== undefined) {
84
+ const varName = `$${key}`;
85
+ queryArgs.push(`${key}: ${varName}`);
86
+ variables[key] = value;
87
+ }
88
+ }
89
+ // Add filter
90
+ if (filter && Object.keys(filter).length > 0) {
91
+ queryArgs.push('where: $where');
92
+ variables.where = this.buildFilterInput(filter);
93
+ }
94
+ // Add ordering
95
+ if (orderBy) {
96
+ queryArgs.push('order: $order');
97
+ variables.order = [{ [orderBy.field]: orderBy.direction }];
98
+ }
99
+ // Add limit if not already in args
100
+ if (limit && !args.limit) {
101
+ queryArgs.push('limit: $limit');
102
+ variables.limit = limit;
103
+ }
104
+ // Build variable definitions
105
+ const varDefs = Object.entries(variables).map(([key, value]) => {
106
+ const type = this.inferGraphQLType(key, value);
107
+ return `$${key}: ${type}`;
108
+ });
109
+ // Build field selection
110
+ const fieldSelection = this.buildFieldSelection(fields);
111
+ // Construct query
112
+ const argsStr = queryArgs.length > 0 ? `(${queryArgs.join(', ')})` : '';
113
+ const varDefsStr = varDefs.length > 0 ? `(${varDefs.join(', ')})` : '';
114
+ const query = `
115
+ query ${this.capitalizeFirst(operation)}Query${varDefsStr} {
116
+ ${operation}${argsStr} {
117
+ ${fieldSelection}
118
+ }
119
+ }`.trim();
120
+ return { query, variables };
121
+ }
122
+ /**
123
+ * Build field selection string, handling nested fields
124
+ */
125
+ static buildFieldSelection(fields) {
126
+ const result = [];
127
+ const nested = {};
128
+ for (const field of fields) {
129
+ if (field.includes(' { ')) {
130
+ // Already formatted nested field
131
+ result.push(field);
132
+ }
133
+ else if (field.includes('.')) {
134
+ // Dot notation nested field
135
+ const [parent, ...rest] = field.split('.');
136
+ if (!nested[parent])
137
+ nested[parent] = [];
138
+ nested[parent].push(rest.join('.'));
139
+ }
140
+ else {
141
+ result.push(field);
142
+ }
143
+ }
144
+ // Process nested fields
145
+ for (const [parent, children] of Object.entries(nested)) {
146
+ const childFields = this.buildFieldSelection(children);
147
+ result.push(`${parent} { ${childFields} }`);
148
+ }
149
+ return result.join('\n ');
150
+ }
151
+ /**
152
+ * Build filter input from simple object
153
+ */
154
+ static buildFilterInput(filter) {
155
+ const result = {};
156
+ for (const [key, value] of Object.entries(filter)) {
157
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
158
+ // Already a filter object with operators
159
+ result[key] = value;
160
+ }
161
+ else {
162
+ // Simple equality
163
+ result[key] = { eq: value };
164
+ }
165
+ }
166
+ return result;
167
+ }
168
+ /**
169
+ * Infer GraphQL type from variable name and value
170
+ */
171
+ static inferGraphQLType(name, value) {
172
+ // Special cases by name
173
+ if (name === 'startDate' || name === 'endDate')
174
+ return 'DateTime!';
175
+ if (name === 'limit')
176
+ return 'Int!';
177
+ if (name === 'where')
178
+ return `${this.capitalizeFirst(name.replace('where', ''))}FilterInput`;
179
+ if (name === 'order')
180
+ return '[SortInput!]';
181
+ if (name.endsWith('Id'))
182
+ return Array.isArray(value) ? '[String!]' : 'String';
183
+ // Infer from value
184
+ if (Array.isArray(value)) {
185
+ if (value.length > 0 && typeof value[0] === 'string')
186
+ return '[String!]';
187
+ return '[String]';
188
+ }
189
+ if (typeof value === 'string')
190
+ return 'String';
191
+ if (typeof value === 'number')
192
+ return Number.isInteger(value) ? 'Int' : 'Float';
193
+ if (typeof value === 'boolean')
194
+ return 'Boolean';
195
+ if (typeof value === 'object')
196
+ return 'JSON';
197
+ return 'String';
198
+ }
199
+ /**
200
+ * Capitalize first letter
201
+ */
202
+ static capitalizeFirst(str) {
203
+ return str.charAt(0).toUpperCase() + str.slice(1);
204
+ }
205
+ /**
206
+ * Get available operations
207
+ */
208
+ static getOperations() {
209
+ return Object.keys(QUERY_OPERATIONS);
210
+ }
211
+ /**
212
+ * Get operation info
213
+ */
214
+ static getOperationInfo(operation) {
215
+ return QUERY_OPERATIONS[operation] ?? null;
216
+ }
217
+ /**
218
+ * Get field presets for an operation
219
+ */
220
+ static getFieldPresets(operation) {
221
+ return FIELD_PRESETS[operation] ?? null;
222
+ }
223
+ /**
224
+ * Build a quick query for common use cases
225
+ */
226
+ static quick = {
227
+ /** Get all devices with status */
228
+ devicesStatus: () => QueryBuilder.build({
229
+ operation: 'device',
230
+ fields: FIELD_PRESETS.device.status,
231
+ }),
232
+ /** Get online devices only */
233
+ onlineDevices: () => QueryBuilder.build({
234
+ operation: 'device',
235
+ fields: FIELD_PRESETS.device.basic,
236
+ filter: { isOnline: true },
237
+ }),
238
+ /** Get recent media */
239
+ recentMedia: (limit = 50) => QueryBuilder.build({
240
+ operation: 'media',
241
+ fields: FIELD_PRESETS.media.basic,
242
+ orderBy: { field: 'uploadedOn', direction: 'DESC' },
243
+ limit,
244
+ }),
245
+ /** Get active schedules */
246
+ activeSchedules: () => QueryBuilder.build({
247
+ operation: 'schedule',
248
+ fields: FIELD_PRESETS.schedule.basic,
249
+ filter: { isActive: true },
250
+ }),
251
+ /** Get play logs for date range */
252
+ playLogs: (startDate, endDate, deviceId) => QueryBuilder.build({
253
+ operation: 'playLogs',
254
+ fields: ['id', 'timestamp', 'deviceId', 'fileId', 'fileName', 'duration'],
255
+ arguments: { startDate, endDate, ...(deviceId && { deviceId }) },
256
+ }),
257
+ };
258
+ }
259
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/core/query-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,oDAAoD;AACpD,MAAM,gBAAgB,GAAgG;IACpH,qBAAqB;IACrB,MAAM,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IAClF,YAAY,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IACvF,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IAChF,WAAW,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IACtF,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IACtF,cAAc,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IACzF,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IACtF,cAAc,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IACzF,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IACtF,cAAc,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IACzF,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;IAE9E,iCAAiC;IACjC,QAAQ,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE;IAC1F,QAAQ,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE;IAC1F,SAAS,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE;IAC5F,WAAW,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE;IAChG,aAAa,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE;IACrG,eAAe,EAAE,EAAE,UAAU,EAAE,yBAAyB,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE;IACzG,cAAc,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE;CACxG,CAAC;AAEF,wCAAwC;AACxC,MAAM,aAAa,GAA6C;IAC9D,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC;QACnC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,CAAC;QAC7E,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,uDAAuD,CAAC;QAC3F,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,oDAAoD,CAAC;QAC9E,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU;YACvF,YAAY,EAAE,gBAAgB,EAAE,+EAA+E;YAC/G,4DAA4D,CAAC;KACrE;IACD,KAAK,EAAE;QACL,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC;QACnC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC;QACzE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc;YAC3E,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC;KAC7D;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;QAC/B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC;QACtD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU;YAChE,eAAe,EAAE,WAAW,EAAE,YAAY,CAAC;KACnD;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC;QACnC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC;QAC7E,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;YACpE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC;KAC/D;CACF,CAAC;AAYF,MAAM,OAAO,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,OAA4B;QACvC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAC5E,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAEzB,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,gBAAgB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7G,CAAC;QAED,kCAAkC;QAClC,IAAI,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjE,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;QAED,kCAAkC;QAClC,IAAI,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,aAAa,SAAS,2CAA2C,CAAC,CAAC;QACrF,CAAC;QAED,kBAAkB;QAClB,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,SAAS,GAA4B,EAAE,CAAC;QAE9C,uBAAuB;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;gBAC1B,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;gBACrC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACzB,CAAC;QACH,CAAC;QAED,aAAa;QACb,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAChC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;QAED,eAAe;QACf,IAAI,OAAO,EAAE,CAAC;YACZ,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAChC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,mCAAmC;QACnC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAChC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,CAAC;QAED,6BAA6B;QAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAExD,kBAAkB;QAClB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvE,MAAM,KAAK,GAAG;QACV,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,UAAU;IACrD,SAAS,GAAG,OAAO;MACjB,cAAc;;EAElB,CAAC,IAAI,EAAE,CAAC;QAEN,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,mBAAmB,CAAC,MAAgB;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAA6B,EAAE,CAAC;QAE5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,iCAAiC;gBACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;iBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,4BAA4B;gBAC5B,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;oBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBACzC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,WAAW,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,gBAAgB,CAAC,MAA+B;QAC7D,MAAM,MAAM,GAA4B,EAAE,CAAC;QAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzE,yCAAyC;gBACzC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,kBAAkB;gBAClB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,gBAAgB,CAAC,IAAY,EAAE,KAAc;QAC1D,wBAAwB;QACxB,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,WAAW,CAAC;QACnE,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,MAAM,CAAC;QACpC,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC;QAC7F,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,cAAc,CAAC;QAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;QAE9E,mBAAmB;QACnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,OAAO,WAAW,CAAC;YACzE,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QAChF,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC;QAE7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,eAAe,CAAC,GAAW;QACxC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,SAAiB;QACvC,OAAO,gBAAgB,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,SAAiB;QACtC,OAAO,aAAa,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,GAAG;QACb,kCAAkC;QAClC,aAAa,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;YACtC,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM;SACpC,CAAC;QAEF,8BAA8B;QAC9B,aAAa,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;YACtC,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK;YAClC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC3B,CAAC;QAEF,uBAAuB;QACvB,WAAW,EAAE,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;YAC9C,SAAS,EAAE,OAAO;YAClB,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK;YACjC,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE;YACnD,KAAK;SACN,CAAC;QAEF,2BAA2B;QAC3B,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;YACxC,SAAS,EAAE,UAAU;YACrB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK;YACpC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC3B,CAAC;QAEF,mCAAmC;QACnC,QAAQ,EAAE,CAAC,SAAiB,EAAE,OAAe,EAAE,QAAmB,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;YACxF,SAAS,EAAE,UAAU;YACrB,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;YACzE,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;SACjE,CAAC;KACH,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Response Optimizer for Context Window Management
3
+ * Ensures responses fit within AI context limits while preserving important data
4
+ */
5
+ export interface OptimizeOptions {
6
+ /** Maximum size in characters */
7
+ maxSize: number;
8
+ /** Fields to prioritize keeping */
9
+ priorityFields?: string[];
10
+ /** Whether to include metadata about truncation */
11
+ includeMetadata?: boolean;
12
+ }
13
+ export interface OptimizedResult {
14
+ data: unknown;
15
+ metadata: {
16
+ originalSize: number;
17
+ optimizedSize: number;
18
+ truncated: boolean;
19
+ removedCount?: number;
20
+ removedFields?: string[];
21
+ };
22
+ }
23
+ export declare class ResponseOptimizer {
24
+ private defaultMaxSize;
25
+ constructor(defaultMaxSize?: number);
26
+ /**
27
+ * Optimize response data to fit within size constraints
28
+ */
29
+ optimize(data: unknown, options?: Partial<OptimizeOptions>): OptimizedResult;
30
+ /**
31
+ * Remove null, undefined, and empty string values
32
+ */
33
+ private removeEmptyValues;
34
+ /**
35
+ * Reduce array size while trying to maintain diversity
36
+ */
37
+ private reduceArraySize;
38
+ /**
39
+ * Keep only priority fields in objects
40
+ */
41
+ private keepOnlyPriorityFields;
42
+ /**
43
+ * Truncate long string values
44
+ */
45
+ private truncateStrings;
46
+ /**
47
+ * Build optimization result
48
+ */
49
+ private buildResult;
50
+ /**
51
+ * Estimate response size
52
+ */
53
+ static estimateSize(data: unknown): number;
54
+ /**
55
+ * Format size for display
56
+ */
57
+ static formatSize(bytes: number): string;
58
+ }
59
+ //# sourceMappingURL=response-optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-optimizer.d.ts","sourceRoot":"","sources":["../../src/core/response-optimizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,mDAAmD;IACnD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE;QACR,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAS;gBAEnB,cAAc,GAAE,MAAc;IAI1C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe;IA4E5E;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqC9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAI1C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAKzC"}
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Response Optimizer for Context Window Management
3
+ * Ensures responses fit within AI context limits while preserving important data
4
+ */
5
+ export class ResponseOptimizer {
6
+ defaultMaxSize;
7
+ constructor(defaultMaxSize = 50000) {
8
+ this.defaultMaxSize = defaultMaxSize;
9
+ }
10
+ /**
11
+ * Optimize response data to fit within size constraints
12
+ */
13
+ optimize(data, options) {
14
+ const opts = {
15
+ maxSize: options?.maxSize ?? this.defaultMaxSize,
16
+ priorityFields: options?.priorityFields ?? [],
17
+ includeMetadata: options?.includeMetadata ?? true,
18
+ };
19
+ const originalStr = JSON.stringify(data, null, 2);
20
+ const originalSize = originalStr.length;
21
+ // If already within limits, return as-is
22
+ if (originalSize <= opts.maxSize) {
23
+ return {
24
+ data,
25
+ metadata: {
26
+ originalSize,
27
+ optimizedSize: originalSize,
28
+ truncated: false,
29
+ },
30
+ };
31
+ }
32
+ // Try different optimization strategies
33
+ let optimized = data;
34
+ let removedCount = 0;
35
+ const removedFields = [];
36
+ // Strategy 1: Remove null/empty values
37
+ optimized = this.removeEmptyValues(optimized);
38
+ let currentSize = JSON.stringify(optimized).length;
39
+ if (currentSize <= opts.maxSize) {
40
+ return this.buildResult(optimized, originalSize, currentSize, false, removedFields);
41
+ }
42
+ // Strategy 2: If array, reduce number of items
43
+ if (Array.isArray(optimized)) {
44
+ const reduction = this.reduceArraySize(optimized, opts.maxSize, opts.priorityFields);
45
+ optimized = reduction.data;
46
+ removedCount = reduction.removedCount;
47
+ currentSize = JSON.stringify(optimized).length;
48
+ if (currentSize <= opts.maxSize) {
49
+ return this.buildResult(optimized, originalSize, currentSize, true, removedFields, removedCount);
50
+ }
51
+ }
52
+ // Strategy 3: Remove non-priority fields from objects
53
+ if (opts.priorityFields && opts.priorityFields.length > 0) {
54
+ const fieldReduction = this.keepOnlyPriorityFields(optimized, opts.priorityFields);
55
+ optimized = fieldReduction.data;
56
+ removedFields.push(...fieldReduction.removedFields);
57
+ currentSize = JSON.stringify(optimized).length;
58
+ if (currentSize <= opts.maxSize) {
59
+ return this.buildResult(optimized, originalSize, currentSize, true, removedFields, removedCount);
60
+ }
61
+ }
62
+ // Strategy 4: Truncate long string values
63
+ optimized = this.truncateStrings(optimized, 200);
64
+ currentSize = JSON.stringify(optimized).length;
65
+ // Strategy 5: Final array truncation if still too large
66
+ if (Array.isArray(optimized) && currentSize > opts.maxSize) {
67
+ const optimizedArray = optimized;
68
+ const targetItems = Math.floor((opts.maxSize / currentSize) * optimizedArray.length * 0.8);
69
+ const originalLength = optimizedArray.length;
70
+ optimized = optimizedArray.slice(0, Math.max(1, targetItems));
71
+ removedCount = originalLength - optimized.length;
72
+ currentSize = JSON.stringify(optimized).length;
73
+ }
74
+ return this.buildResult(optimized, originalSize, currentSize, true, removedFields, removedCount);
75
+ }
76
+ /**
77
+ * Remove null, undefined, and empty string values
78
+ */
79
+ removeEmptyValues(data) {
80
+ if (data === null || data === undefined)
81
+ return undefined;
82
+ if (Array.isArray(data)) {
83
+ return data.map(item => this.removeEmptyValues(item)).filter(item => item !== undefined);
84
+ }
85
+ if (typeof data === 'object') {
86
+ const result = {};
87
+ for (const [key, value] of Object.entries(data)) {
88
+ const cleaned = this.removeEmptyValues(value);
89
+ if (cleaned !== undefined && cleaned !== '' && cleaned !== null) {
90
+ result[key] = cleaned;
91
+ }
92
+ }
93
+ return Object.keys(result).length > 0 ? result : undefined;
94
+ }
95
+ return data;
96
+ }
97
+ /**
98
+ * Reduce array size while trying to maintain diversity
99
+ */
100
+ reduceArraySize(arr, maxSize, priorityFields) {
101
+ const itemSize = JSON.stringify(arr[0] ?? {}).length;
102
+ const estimatedItems = Math.floor(maxSize / (itemSize * 1.2)); // 20% buffer
103
+ const targetItems = Math.max(1, Math.min(arr.length, estimatedItems));
104
+ if (targetItems >= arr.length) {
105
+ return { data: arr, removedCount: 0 };
106
+ }
107
+ // Try to keep a representative sample
108
+ const result = arr.slice(0, targetItems);
109
+ return { data: result, removedCount: arr.length - targetItems };
110
+ }
111
+ /**
112
+ * Keep only priority fields in objects
113
+ */
114
+ keepOnlyPriorityFields(data, priorityFields) {
115
+ const removedFields = [];
116
+ const process = (obj) => {
117
+ if (Array.isArray(obj)) {
118
+ return obj.map(item => process(item));
119
+ }
120
+ if (typeof obj === 'object' && obj !== null) {
121
+ const result = {};
122
+ for (const [key, value] of Object.entries(obj)) {
123
+ if (priorityFields.some(pf => key === pf || pf.startsWith(`${key}.`))) {
124
+ result[key] = process(value);
125
+ }
126
+ else if (typeof value === 'object' && value !== null) {
127
+ // Check if any priority field is nested within this object
128
+ const nestedPriority = priorityFields.filter(pf => pf.startsWith(`${key}.`));
129
+ if (nestedPriority.length > 0) {
130
+ result[key] = process(value);
131
+ }
132
+ else {
133
+ removedFields.push(key);
134
+ }
135
+ }
136
+ else {
137
+ removedFields.push(key);
138
+ }
139
+ }
140
+ return result;
141
+ }
142
+ return obj;
143
+ };
144
+ return { data: process(data), removedFields: [...new Set(removedFields)] };
145
+ }
146
+ /**
147
+ * Truncate long string values
148
+ */
149
+ truncateStrings(data, maxLength) {
150
+ if (typeof data === 'string' && data.length > maxLength) {
151
+ return data.substring(0, maxLength) + '...';
152
+ }
153
+ if (Array.isArray(data)) {
154
+ return data.map(item => this.truncateStrings(item, maxLength));
155
+ }
156
+ if (typeof data === 'object' && data !== null) {
157
+ const result = {};
158
+ for (const [key, value] of Object.entries(data)) {
159
+ result[key] = this.truncateStrings(value, maxLength);
160
+ }
161
+ return result;
162
+ }
163
+ return data;
164
+ }
165
+ /**
166
+ * Build optimization result
167
+ */
168
+ buildResult(data, originalSize, optimizedSize, truncated, removedFields = [], removedCount) {
169
+ return {
170
+ data,
171
+ metadata: {
172
+ originalSize,
173
+ optimizedSize,
174
+ truncated,
175
+ ...(removedCount !== undefined && { removedCount }),
176
+ ...(removedFields.length > 0 && { removedFields }),
177
+ },
178
+ };
179
+ }
180
+ /**
181
+ * Estimate response size
182
+ */
183
+ static estimateSize(data) {
184
+ return JSON.stringify(data).length;
185
+ }
186
+ /**
187
+ * Format size for display
188
+ */
189
+ static formatSize(bytes) {
190
+ if (bytes < 1024)
191
+ return `${bytes} chars`;
192
+ if (bytes < 1024 * 1024)
193
+ return `${(bytes / 1024).toFixed(1)} KB`;
194
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
195
+ }
196
+ }
197
+ //# sourceMappingURL=response-optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-optimizer.js","sourceRoot":"","sources":["../../src/core/response-optimizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Revel Digital MCP GraphQL Proxy Server
4
+ *
5
+ * An MCP server that enables AI agents to interact with the Revel Digital
6
+ * GraphQL API for digital signage management.
7
+ *
8
+ * Features:
9
+ * - Execute custom GraphQL queries
10
+ * - Build optimized queries with field selection
11
+ * - Authentication header proxying
12
+ * - Response caching
13
+ * - Context window optimization
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG"}