@elastic.io/mcp 1.0.0-beta

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 (174) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +173 -0
  3. package/README.npm.md +173 -0
  4. package/dist/api/client.d.ts +12 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +129 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/jsonapi.d.ts +21 -0
  9. package/dist/api/jsonapi.d.ts.map +1 -0
  10. package/dist/api/jsonapi.js +32 -0
  11. package/dist/api/jsonapi.js.map +1 -0
  12. package/dist/api/logger.d.ts +8 -0
  13. package/dist/api/logger.d.ts.map +1 -0
  14. package/dist/api/logger.js +43 -0
  15. package/dist/api/logger.js.map +1 -0
  16. package/dist/api/samples.d.ts +15 -0
  17. package/dist/api/samples.d.ts.map +1 -0
  18. package/dist/api/samples.js +465 -0
  19. package/dist/api/samples.js.map +1 -0
  20. package/dist/api/verification.d.ts +6 -0
  21. package/dist/api/verification.d.ts.map +1 -0
  22. package/dist/api/verification.js +71 -0
  23. package/dist/api/verification.js.map +1 -0
  24. package/dist/cli.d.ts +3 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +9 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/config.d.ts +15 -0
  29. package/dist/config.d.ts.map +1 -0
  30. package/dist/config.js +44 -0
  31. package/dist/config.js.map +1 -0
  32. package/dist/embeddings/factory.d.ts +7 -0
  33. package/dist/embeddings/factory.d.ts.map +1 -0
  34. package/dist/embeddings/factory.js +25 -0
  35. package/dist/embeddings/factory.js.map +1 -0
  36. package/dist/embeddings/google.d.ts +19 -0
  37. package/dist/embeddings/google.d.ts.map +1 -0
  38. package/dist/embeddings/google.js +132 -0
  39. package/dist/embeddings/google.js.map +1 -0
  40. package/dist/embeddings/types.d.ts +27 -0
  41. package/dist/embeddings/types.d.ts.map +1 -0
  42. package/dist/embeddings/types.js +2 -0
  43. package/dist/embeddings/types.js.map +1 -0
  44. package/dist/index.d.ts +3 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +227 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/paths.d.ts +2 -0
  49. package/dist/paths.d.ts.map +1 -0
  50. package/dist/paths.js +10 -0
  51. package/dist/paths.js.map +1 -0
  52. package/dist/server.d.ts +29 -0
  53. package/dist/server.d.ts.map +1 -0
  54. package/dist/server.js +385 -0
  55. package/dist/server.js.map +1 -0
  56. package/dist/setup.d.ts +3 -0
  57. package/dist/setup.d.ts.map +1 -0
  58. package/dist/setup.js +338 -0
  59. package/dist/setup.js.map +1 -0
  60. package/dist/tools/confirmation.d.ts +37 -0
  61. package/dist/tools/confirmation.d.ts.map +1 -0
  62. package/dist/tools/confirmation.js +120 -0
  63. package/dist/tools/confirmation.js.map +1 -0
  64. package/dist/tools/constants.d.ts +28 -0
  65. package/dist/tools/constants.d.ts.map +1 -0
  66. package/dist/tools/constants.js +92 -0
  67. package/dist/tools/constants.js.map +1 -0
  68. package/dist/tools/definitions.d.ts +3 -0
  69. package/dist/tools/definitions.d.ts.map +1 -0
  70. package/dist/tools/definitions.js +915 -0
  71. package/dist/tools/definitions.js.map +1 -0
  72. package/dist/tools/flow-build.d.ts +18 -0
  73. package/dist/tools/flow-build.d.ts.map +1 -0
  74. package/dist/tools/flow-build.js +295 -0
  75. package/dist/tools/flow-build.js.map +1 -0
  76. package/dist/tools/flow-evidence.d.ts +62 -0
  77. package/dist/tools/flow-evidence.d.ts.map +1 -0
  78. package/dist/tools/flow-evidence.js +128 -0
  79. package/dist/tools/flow-evidence.js.map +1 -0
  80. package/dist/tools/flow-state-machine.d.ts +69 -0
  81. package/dist/tools/flow-state-machine.d.ts.map +1 -0
  82. package/dist/tools/flow-state-machine.js +292 -0
  83. package/dist/tools/flow-state-machine.js.map +1 -0
  84. package/dist/tools/handlers/auth.d.ts +3 -0
  85. package/dist/tools/handlers/auth.d.ts.map +1 -0
  86. package/dist/tools/handlers/auth.js +410 -0
  87. package/dist/tools/handlers/auth.js.map +1 -0
  88. package/dist/tools/handlers/component.d.ts +3 -0
  89. package/dist/tools/handlers/component.d.ts.map +1 -0
  90. package/dist/tools/handlers/component.js +165 -0
  91. package/dist/tools/handlers/component.js.map +1 -0
  92. package/dist/tools/handlers/data-sample.d.ts +3 -0
  93. package/dist/tools/handlers/data-sample.d.ts.map +1 -0
  94. package/dist/tools/handlers/data-sample.js +83 -0
  95. package/dist/tools/handlers/data-sample.js.map +1 -0
  96. package/dist/tools/handlers/dynamic.d.ts +3 -0
  97. package/dist/tools/handlers/dynamic.d.ts.map +1 -0
  98. package/dist/tools/handlers/dynamic.js +139 -0
  99. package/dist/tools/handlers/dynamic.js.map +1 -0
  100. package/dist/tools/handlers/flow.d.ts +9 -0
  101. package/dist/tools/handlers/flow.d.ts.map +1 -0
  102. package/dist/tools/handlers/flow.js +427 -0
  103. package/dist/tools/handlers/flow.js.map +1 -0
  104. package/dist/tools/handlers/log.d.ts +3 -0
  105. package/dist/tools/handlers/log.d.ts.map +1 -0
  106. package/dist/tools/handlers/log.js +92 -0
  107. package/dist/tools/handlers/log.js.map +1 -0
  108. package/dist/tools/handlers/organization.d.ts +3 -0
  109. package/dist/tools/handlers/organization.d.ts.map +1 -0
  110. package/dist/tools/handlers/organization.js +39 -0
  111. package/dist/tools/handlers/organization.js.map +1 -0
  112. package/dist/tools/handlers/raw.d.ts +3 -0
  113. package/dist/tools/handlers/raw.d.ts.map +1 -0
  114. package/dist/tools/handlers/raw.js +80 -0
  115. package/dist/tools/handlers/raw.js.map +1 -0
  116. package/dist/tools/handlers/search.d.ts +3 -0
  117. package/dist/tools/handlers/search.d.ts.map +1 -0
  118. package/dist/tools/handlers/search.js +105 -0
  119. package/dist/tools/handlers/search.js.map +1 -0
  120. package/dist/tools/handlers/session.d.ts +3 -0
  121. package/dist/tools/handlers/session.d.ts.map +1 -0
  122. package/dist/tools/handlers/session.js +22 -0
  123. package/dist/tools/handlers/session.js.map +1 -0
  124. package/dist/tools/handlers.d.ts +12 -0
  125. package/dist/tools/handlers.d.ts.map +1 -0
  126. package/dist/tools/handlers.js +202 -0
  127. package/dist/tools/handlers.js.map +1 -0
  128. package/dist/tools/helpers.d.ts +44 -0
  129. package/dist/tools/helpers.d.ts.map +1 -0
  130. package/dist/tools/helpers.js +195 -0
  131. package/dist/tools/helpers.js.map +1 -0
  132. package/dist/tools/types.d.ts +39 -0
  133. package/dist/tools/types.d.ts.map +1 -0
  134. package/dist/tools/types.js +2 -0
  135. package/dist/tools/types.js.map +1 -0
  136. package/dist/tools/validation.d.ts +35 -0
  137. package/dist/tools/validation.d.ts.map +1 -0
  138. package/dist/tools/validation.js +800 -0
  139. package/dist/tools/validation.js.map +1 -0
  140. package/dist/types/index.d.ts +47 -0
  141. package/dist/types/index.d.ts.map +1 -0
  142. package/dist/types/index.js +2 -0
  143. package/dist/types/index.js.map +1 -0
  144. package/dist/vectorstore/factory.d.ts +7 -0
  145. package/dist/vectorstore/factory.d.ts.map +1 -0
  146. package/dist/vectorstore/factory.js +25 -0
  147. package/dist/vectorstore/factory.js.map +1 -0
  148. package/dist/vectorstore/qdrant.d.ts +11 -0
  149. package/dist/vectorstore/qdrant.d.ts.map +1 -0
  150. package/dist/vectorstore/qdrant.js +107 -0
  151. package/dist/vectorstore/qdrant.js.map +1 -0
  152. package/dist/vectorstore/types.d.ts +28 -0
  153. package/dist/vectorstore/types.d.ts.map +1 -0
  154. package/dist/vectorstore/types.js +2 -0
  155. package/dist/vectorstore/types.js.map +1 -0
  156. package/package.json +66 -0
  157. package/resources/docs/flow-building-guide.md +581 -0
  158. package/resources/docs/rest-api-pagination.md +58 -0
  159. package/resources/docs/standardized-components-guide.md +66 -0
  160. package/resources/docs/system-instructions.md +207 -0
  161. package/resources/flow-examples/batch-flow-1-collect.json +51 -0
  162. package/resources/flow-examples/batch-flow-2-process.json +70 -0
  163. package/resources/flow-examples/code-component-transform.json +65 -0
  164. package/resources/flow-examples/code-component-trigger.json +52 -0
  165. package/resources/flow-examples/code-component-with-credentials-trigger.json +53 -0
  166. package/resources/flow-examples/code-component-with-credentials.json +67 -0
  167. package/resources/flow-examples/filter-step.json +63 -0
  168. package/resources/flow-examples/polling-sync-trigger.json +50 -0
  169. package/resources/flow-examples/router-branching.json +94 -0
  170. package/resources/flow-examples/splitter-re-assemble.json +72 -0
  171. package/resources/flow-examples/splitter-split.json +68 -0
  172. package/resources/flow-examples/timer-query-action-sync.json +68 -0
  173. package/resources/flow-examples/webhook-async-sync.json +49 -0
  174. package/resources/flow-examples/webhook-request-reply.json +63 -0
@@ -0,0 +1,465 @@
1
+ import crypto from 'crypto';
2
+ import { getEmbeddingProvider } from '../embeddings/factory.js';
3
+ import { getVectorStore } from '../vectorstore/factory.js';
4
+ import { logger } from './logger.js';
5
+ const SAMPLES_COLLECTION_NAME = 'flow_samples';
6
+ /**
7
+ * Deterministically generates a UUID from a string seed.
8
+ */
9
+ function generateDeterministicUuid(input) {
10
+ const hash = crypto.createHash('md5').update(input).digest('hex');
11
+ return `${hash.substring(0, 8)}-${hash.substring(8, 12)}-${hash.substring(12, 16)}-${hash.substring(16, 20)}-${hash.substring(20, 32)}`;
12
+ }
13
+ /**
14
+ * Formats a raw JSON schema string from metadata into a clean, human-readable list of fields.
15
+ */
16
+ function formatMetadataSchema(metadataStr) {
17
+ try {
18
+ const parsed = typeof metadataStr === 'string' ? JSON.parse(metadataStr) : metadataStr;
19
+ let output = '';
20
+ if (parsed.in && parsed.in.properties) {
21
+ output += ' * Input Schema Fields:\n';
22
+ const requiredFields = Array.isArray(parsed.in.required) ? parsed.in.required : [];
23
+ for (const [key, value] of Object.entries(parsed.in.properties)) {
24
+ if (!value || typeof value !== 'object')
25
+ continue;
26
+ const val = value;
27
+ const title = val.title ? ` (${val.title})` : '';
28
+ const isRequired = val.required === true || requiredFields.includes(key);
29
+ const req = isRequired ? ' - required' : '';
30
+ output += ` - ${key}${title}: ${val.type || 'unknown'}${req}\n`;
31
+ }
32
+ }
33
+ if (parsed.out && parsed.out.properties) {
34
+ output += ' * Output Schema Fields:\n';
35
+ const requiredFields = Array.isArray(parsed.out.required) ? parsed.out.required : [];
36
+ for (const [key, value] of Object.entries(parsed.out.properties)) {
37
+ if (!value || typeof value !== 'object')
38
+ continue;
39
+ const val = value;
40
+ const title = val.title ? ` (${val.title})` : '';
41
+ const isRequired = val.required === true || requiredFields.includes(key);
42
+ const req = isRequired ? ' - required' : '';
43
+ output += ` - ${key}${title}: ${val.type || 'unknown'}${req}\n`;
44
+ }
45
+ }
46
+ return output;
47
+ }
48
+ catch {
49
+ return ' * (Failed to parse metadata schema)\n';
50
+ }
51
+ }
52
+ /**
53
+ * Summarizes a select model options list to prevent token bloat.
54
+ */
55
+ function formatSelectModel(selectModelObj) {
56
+ if (!selectModelObj || typeof selectModelObj !== 'object')
57
+ return '';
58
+ let output = ' * Select Model Options:\n';
59
+ for (const [key, val] of Object.entries(selectModelObj)) {
60
+ if (val && typeof val === 'object') {
61
+ const options = Object.keys(val);
62
+ const sample = options.slice(0, 10).join(', ');
63
+ const more = options.length > 10 ? ` (and ${options.length - 10} more)` : '';
64
+ output += ` - ${key}: [${sample}${more}]\n`;
65
+ }
66
+ else {
67
+ output += ` - ${key}: ${String(val)}\n`;
68
+ }
69
+ }
70
+ return output;
71
+ }
72
+ export function formatFlowToMarkdown(flow) {
73
+ const name = flow.name || 'Unnamed Flow';
74
+ const desc = flow.description || 'No description provided';
75
+ const type = flow.type || 'ordinary';
76
+ const status = flow.status || 'inactive';
77
+ let markdown = `# Flow Sample: ${name}\n`;
78
+ markdown += `**Description**: ${desc}\n`;
79
+ markdown += `**Type**: ${type}\n`;
80
+ markdown += `**Status**: ${status}\n\n`;
81
+ const data = flow.data || {};
82
+ const steps = {};
83
+ const mappers = {};
84
+ for (const [key, val] of Object.entries(data)) {
85
+ if (key.startsWith('mapper:')) {
86
+ mappers[key] = val;
87
+ }
88
+ else {
89
+ steps[key] = val;
90
+ }
91
+ }
92
+ markdown += `## Step Configurations (Static Node Fields)\n`;
93
+ for (const [stepId, config] of Object.entries(steps)) {
94
+ if (!config || typeof config !== 'object')
95
+ continue;
96
+ // Filter out internal and credentials/secrets references
97
+ const filteredConfig = {};
98
+ for (const [k, v] of Object.entries(config)) {
99
+ if (['secretId', 'apiKey', 'password', 'token', 'auth', 'oauth', '_selectedDataSamples'].includes(k)) {
100
+ continue;
101
+ }
102
+ filteredConfig[k] = v;
103
+ }
104
+ const resolvedMeta = filteredConfig.resolvedMetadata;
105
+ const resolvedSelect = filteredConfig.resolvedSelectModel;
106
+ const compName = filteredConfig.componentName;
107
+ const stepName = filteredConfig.stepName;
108
+ const compFunc = filteredConfig.function;
109
+ const compId = filteredConfig.componentId;
110
+ delete filteredConfig.resolvedMetadata;
111
+ delete filteredConfig.resolvedSelectModel;
112
+ delete filteredConfig.componentName;
113
+ delete filteredConfig.stepName;
114
+ delete filteredConfig.function;
115
+ delete filteredConfig.componentId;
116
+ const displayName = stepName
117
+ ? `${stepName} [${compFunc || 'action'}]`
118
+ : (compName
119
+ ? `${compName} - ${compFunc || 'action'}`
120
+ : (compFunc ? `[${compFunc}]` : ''));
121
+ const stepLabel = displayName ? `${stepId} (${displayName})` : stepId;
122
+ markdown += `### Step: ${stepLabel}\n`;
123
+ if (compId) {
124
+ markdown += `*Component ID: ${compId}*\n\n`;
125
+ }
126
+ markdown += `#### Browser UI Configuration (What a User configures in the UI settings & fields)\n`;
127
+ markdown += `- **Selected Action / Trigger ID**: \`${compFunc || 'action'}\`\n`;
128
+ markdown += `- **Step Settings / Static Fields (Configured directly in the browser settings panel)**:\n`;
129
+ if (Object.keys(filteredConfig).length > 0) {
130
+ for (const [k, v] of Object.entries(filteredConfig)) {
131
+ markdown += ` - \`${k}\`: \`${typeof v === 'object' ? JSON.stringify(v) : v}\`\n`;
132
+ }
133
+ }
134
+ else {
135
+ markdown += ` - (No static settings configured)\n`;
136
+ }
137
+ markdown += `\n`;
138
+ markdown += `#### REST API Payload Representation (What an LLM/Agent sends to the API)\n`;
139
+ markdown += `This represents the Node structure inside the \`graph.nodes\` array:\n`;
140
+ const nodePayload = {
141
+ id: stepId,
142
+ component_id: compId || 'unknown',
143
+ command: compFunc || 'action',
144
+ name: stepName || compName || stepId,
145
+ fields: filteredConfig
146
+ };
147
+ markdown += `\`\`\`json\n${JSON.stringify(nodePayload, null, 2)}\n\`\`\`\n\n`;
148
+ if (resolvedMeta && resolvedMeta.metadata) {
149
+ markdown += `**Expected Input/Output Schema (Reference Only - do NOT configure in Node's fields)**:\n`;
150
+ markdown += formatMetadataSchema(resolvedMeta.metadata);
151
+ markdown += '\n';
152
+ }
153
+ if (resolvedSelect && resolvedSelect.selectModel) {
154
+ markdown += `**Static Select Model Options (Reference Only)**:\n`;
155
+ markdown += formatSelectModel(resolvedSelect.selectModel);
156
+ markdown += '\n';
157
+ }
158
+ }
159
+ markdown += `## Connection Mappings (JSONata Edges)\n`;
160
+ for (const [mapperId, config] of Object.entries(mappers)) {
161
+ if (!config || typeof config !== 'object')
162
+ continue;
163
+ const sourceAndTarget = mapperId.replace('mapper:', '').split(':');
164
+ const sourceStep = sourceAndTarget[0] || 'unknown';
165
+ const targetStep = sourceAndTarget[1] || 'unknown';
166
+ markdown += `### Connection: from "${sourceStep}" to "${targetStep}"\n`;
167
+ const mapperStr = config.mapper
168
+ ? (typeof config.mapper === 'string' ? config.mapper : JSON.stringify(config.mapper, null, 2))
169
+ : '';
170
+ markdown += `#### Browser UI Configuration (What a User configures in the UI mapping screen)\n`;
171
+ markdown += `The user maps input fields of the target step "${targetStep}" to preceding steps' outputs:\n`;
172
+ if (config.mapper && typeof config.mapper === 'object') {
173
+ for (const [k, v] of Object.entries(config.mapper)) {
174
+ markdown += `- Map Target Input Field \`${k}\` to expression: \`${String(v)}\`\n`;
175
+ }
176
+ }
177
+ else if (config.mapper) {
178
+ markdown += `- Mapped expression: \`${config.mapper}\`\n`;
179
+ }
180
+ else {
181
+ markdown += `- (No fields mapped)\n`;
182
+ }
183
+ markdown += `\n`;
184
+ markdown += `#### REST API Payload Representation (What an LLM/Agent sends to the API)\n`;
185
+ markdown += `This represents the Edge structure inside the \`graph.edges\` array:\n`;
186
+ const edgePayload = {
187
+ id: mapperId.replace('mapper:', ''),
188
+ source: sourceStep,
189
+ target: targetStep,
190
+ config: {
191
+ mapper_type: 'jsonata',
192
+ mapper: mapperStr
193
+ }
194
+ };
195
+ markdown += `\`\`\`json\n${JSON.stringify(edgePayload, null, 2)}\n\`\`\`\n\n`;
196
+ }
197
+ return markdown;
198
+ }
199
+ /**
200
+ * Formats a single flow step configuration into Markdown.
201
+ */
202
+ export function formatStepToMarkdown(flow, stepId, config) {
203
+ const name = flow.name || 'Unnamed Flow';
204
+ const desc = flow.description || 'No description provided';
205
+ const type = flow.type || 'ordinary';
206
+ if (stepId.startsWith('mapper:')) {
207
+ const sourceAndTarget = stepId.replace('mapper:', '').split(':');
208
+ const sourceStep = sourceAndTarget[0] || 'unknown';
209
+ const targetStep = sourceAndTarget[1] || 'unknown';
210
+ let markdown = `# Flow Connection Mapping: from "${sourceStep}" to "${targetStep}" in Flow "${name}"\n`;
211
+ markdown += `**Parent Flow ID**: ${flow._id || flow.id}\n`;
212
+ markdown += `**Parent Flow Description**: ${desc}\n\n`;
213
+ const mapperStr = config.mapper
214
+ ? (typeof config.mapper === 'string' ? config.mapper : JSON.stringify(config.mapper, null, 2))
215
+ : '';
216
+ markdown += `### Browser UI Configuration (What a User configures in the UI mapping screen)\n`;
217
+ markdown += `The user maps input fields of the target step "${targetStep}" to preceding steps' outputs:\n`;
218
+ if (config.mapper && typeof config.mapper === 'object') {
219
+ for (const [k, v] of Object.entries(config.mapper)) {
220
+ markdown += `- Map Target Input Field \`${k}\` to expression: \`${String(v)}\`\n`;
221
+ }
222
+ }
223
+ else if (config.mapper) {
224
+ markdown += `- Mapped expression: \`${config.mapper}\`\n`;
225
+ }
226
+ else {
227
+ markdown += `- (No fields mapped)\n`;
228
+ }
229
+ markdown += `\n`;
230
+ markdown += `### REST API Payload Representation (What an LLM/Agent sends to the API)\n`;
231
+ markdown += `This represents the Edge structure inside the \`graph.edges\` array:\n`;
232
+ const edgePayload = {
233
+ id: stepId.replace('mapper:', ''),
234
+ source: sourceStep,
235
+ target: targetStep,
236
+ config: {
237
+ mapper_type: 'jsonata',
238
+ mapper: mapperStr
239
+ }
240
+ };
241
+ markdown += `\`\`\`json\n${JSON.stringify(edgePayload, null, 2)}\n\`\`\`\n`;
242
+ return markdown;
243
+ }
244
+ else {
245
+ let markdown = `# Flow Step: ${stepId} in Flow "${name}"\n`;
246
+ markdown += `**Parent Flow ID**: ${flow._id || flow.id}\n`;
247
+ markdown += `**Parent Flow Description**: ${desc}\n`;
248
+ markdown += `**Parent Flow Type**: ${type}\n\n`;
249
+ // Filter out internal and credentials/secrets references
250
+ const filteredConfig = {};
251
+ for (const [k, v] of Object.entries(config)) {
252
+ if (['secretId', 'apiKey', 'password', 'token', 'auth', 'oauth', '_selectedDataSamples'].includes(k)) {
253
+ continue;
254
+ }
255
+ filteredConfig[k] = v;
256
+ }
257
+ const resolvedMeta = filteredConfig.resolvedMetadata;
258
+ const resolvedSelect = filteredConfig.resolvedSelectModel;
259
+ const compName = filteredConfig.componentName;
260
+ const stepName = filteredConfig.stepName;
261
+ const compFunc = filteredConfig.function;
262
+ const compId = filteredConfig.componentId;
263
+ delete filteredConfig.resolvedMetadata;
264
+ delete filteredConfig.resolvedSelectModel;
265
+ delete filteredConfig.componentName;
266
+ delete filteredConfig.stepName;
267
+ delete filteredConfig.function;
268
+ delete filteredConfig.componentId;
269
+ const displayName = stepName
270
+ ? `${stepName} [${compFunc || 'action'}]`
271
+ : (compName
272
+ ? `${compName} - ${compFunc || 'action'}`
273
+ : (compFunc ? `[${compFunc}]` : ''));
274
+ const stepLabel = displayName ? `${stepId} (${displayName})` : stepId;
275
+ markdown += `## Step: ${stepLabel}\n`;
276
+ if (compId) {
277
+ markdown += `*Component ID: ${compId}*\n\n`;
278
+ }
279
+ markdown += `### Browser UI Configuration (What a User configures in the UI settings & fields)\n`;
280
+ markdown += `- **Selected Action / Trigger ID**: \`${compFunc || 'action'}\`\n`;
281
+ markdown += `- **Step Settings / Static Fields (Configured directly in the browser settings panel)**:\n`;
282
+ if (Object.keys(filteredConfig).length > 0) {
283
+ for (const [k, v] of Object.entries(filteredConfig)) {
284
+ markdown += ` - \`${k}\`: \`${typeof v === 'object' ? JSON.stringify(v) : v}\`\n`;
285
+ }
286
+ }
287
+ else {
288
+ markdown += ` - (No static settings configured)\n`;
289
+ }
290
+ markdown += `\n`;
291
+ markdown += `### REST API Payload Representation (What an LLM/Agent sends to the API)\n`;
292
+ markdown += `This represents the Node structure inside the \`graph.nodes\` array:\n`;
293
+ const nodePayload = {
294
+ id: stepId,
295
+ component_id: compId || 'unknown',
296
+ command: compFunc || 'action',
297
+ name: stepName || compName || stepId,
298
+ fields: filteredConfig
299
+ };
300
+ markdown += `\`\`\`json\n${JSON.stringify(nodePayload, null, 2)}\n\`\`\`\n\n`;
301
+ if (resolvedMeta && resolvedMeta.metadata) {
302
+ markdown += `**Expected Input/Output Schema (Reference Only - do NOT configure in Node's fields)**:\n`;
303
+ markdown += formatMetadataSchema(resolvedMeta.metadata);
304
+ markdown += '\n';
305
+ }
306
+ if (resolvedSelect && resolvedSelect.selectModel) {
307
+ markdown += `**Static Select Model Options (Reference Only)**:\n`;
308
+ markdown += formatSelectModel(resolvedSelect.selectModel);
309
+ markdown += '\n';
310
+ }
311
+ return markdown;
312
+ }
313
+ }
314
+ /**
315
+ * Ingests an array of raw flow sample objects, converts them to Markdown,
316
+ * generates embeddings, and uploads them to the 'flow_samples' Qdrant collection.
317
+ */
318
+ async function ingestFlowSamples(flows, purge = false) {
319
+ if (!Array.isArray(flows) || flows.length === 0) {
320
+ logger.info('[Samples Ingest] No flows to ingest.');
321
+ return;
322
+ }
323
+ logger.info(`[Samples Ingest] Starting ingestion for ${flows.length} flow samples...`);
324
+ const provider = getEmbeddingProvider();
325
+ const vectorStore = getVectorStore();
326
+ const dimensions = provider.getDimensions();
327
+ if (purge) {
328
+ logger.info(`[Samples Ingest] Purge requested. Clearing collection "${SAMPLES_COLLECTION_NAME}"...`);
329
+ await vectorStore.purge(SAMPLES_COLLECTION_NAME);
330
+ }
331
+ await vectorStore.initialize(dimensions, SAMPLES_COLLECTION_NAME);
332
+ const itemsToEmbed = [];
333
+ for (const flow of flows) {
334
+ // Standardize flow input (sometimes it might be wrapped under a "result" key)
335
+ const flowObj = flow.result || flow;
336
+ const flowId = flowObj._id || flowObj.id;
337
+ if (!flowId) {
338
+ logger.warn('[Samples Ingest] Flow object is missing ID, skipping.');
339
+ continue;
340
+ }
341
+ // 1. Ingest entire flow point
342
+ const flowMarkdown = formatFlowToMarkdown(flowObj);
343
+ const flowPointId = generateDeterministicUuid(String(flowId));
344
+ itemsToEmbed.push({
345
+ id: flowPointId,
346
+ text: flowMarkdown,
347
+ payload: {
348
+ type: 'flow_sample',
349
+ flow_id: String(flowId),
350
+ name: flowObj.name || 'Unnamed Flow',
351
+ description: flowObj.description || '',
352
+ content: flowMarkdown,
353
+ },
354
+ });
355
+ // 2. Ingest step/edge points
356
+ const data = flowObj.data || {};
357
+ for (const [stepId, stepConfig] of Object.entries(data)) {
358
+ if (!stepConfig || typeof stepConfig !== 'object')
359
+ continue;
360
+ const isEdge = stepId.startsWith('mapper:');
361
+ const stepMarkdown = formatStepToMarkdown(flowObj, stepId, stepConfig);
362
+ const stepPointId = generateDeterministicUuid(`${flowId}_${stepId}`);
363
+ const configObj = stepConfig;
364
+ itemsToEmbed.push({
365
+ id: stepPointId,
366
+ text: stepMarkdown,
367
+ payload: {
368
+ type: isEdge ? 'flow_edge' : 'flow_step',
369
+ flow_id: String(flowId),
370
+ flow_name: flowObj.name || 'Unnamed Flow',
371
+ step_id: stepId,
372
+ step_name: configObj.stepName || '',
373
+ component_id: configObj.componentId || '',
374
+ function: configObj.function || '',
375
+ content: stepMarkdown,
376
+ },
377
+ });
378
+ }
379
+ }
380
+ if (itemsToEmbed.length === 0) {
381
+ logger.warn('[Samples Ingest] No valid items to embed.');
382
+ return;
383
+ }
384
+ logger.info(`[Samples Ingest] Found ${itemsToEmbed.length} items to embed. Running batch requests...`);
385
+ const batchSize = 100; // Gemini supports up to 100 texts in a single batch request
386
+ const vectors = [];
387
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
388
+ for (let i = 0; i < itemsToEmbed.length; i += batchSize) {
389
+ const chunk = itemsToEmbed.slice(i, i + batchSize);
390
+ const chunkTexts = chunk.map(item => item.text);
391
+ logger.info(`[Samples Ingest] Embedding batch: items ${i + 1} to ${Math.min(i + batchSize, itemsToEmbed.length)} of ${itemsToEmbed.length}...`);
392
+ try {
393
+ const chunkVectors = await provider.embedBatch(chunkTexts);
394
+ vectors.push(...chunkVectors);
395
+ }
396
+ catch (err) {
397
+ logger.error(`[Samples Ingest] Failed to generate batch embeddings for index range ${i} - ${i + chunk.length}:`, err);
398
+ throw err;
399
+ }
400
+ // Add a 5-second delay between consecutive batch requests to respect the 15 RPM rate limit
401
+ if (i + batchSize < itemsToEmbed.length) {
402
+ await sleep(5000);
403
+ }
404
+ }
405
+ const pendingPoints = [];
406
+ for (let i = 0; i < itemsToEmbed.length; i++) {
407
+ const vector = vectors[i];
408
+ if (vector) {
409
+ pendingPoints.push({
410
+ id: itemsToEmbed[i].id,
411
+ vector,
412
+ payload: itemsToEmbed[i].payload,
413
+ });
414
+ }
415
+ }
416
+ if (pendingPoints.length > 0) {
417
+ logger.info(`[Samples Ingest] Upserting ${pendingPoints.length} points to Qdrant collection "${SAMPLES_COLLECTION_NAME}"...`);
418
+ await vectorStore.upsert(pendingPoints, SAMPLES_COLLECTION_NAME);
419
+ logger.info(`[Samples Ingest] Ingestion of ${pendingPoints.length} points completed successfully.`);
420
+ }
421
+ else {
422
+ logger.warn('[Samples Ingest] No valid points were embedded.');
423
+ }
424
+ }
425
+ class IngestionQueue {
426
+ queue = [];
427
+ processing = false;
428
+ purgedInCurrentSession = false;
429
+ async enqueue(flows, purge) {
430
+ return new Promise((resolve, reject) => {
431
+ this.queue.push({ flows, purge, resolve, reject });
432
+ if (!this.processing) {
433
+ this.purgedInCurrentSession = false; // Reset for new session
434
+ void this.processNext();
435
+ }
436
+ });
437
+ }
438
+ async processNext() {
439
+ if (this.queue.length === 0) {
440
+ this.processing = false;
441
+ this.purgedInCurrentSession = false;
442
+ return;
443
+ }
444
+ this.processing = true;
445
+ const task = this.queue.shift();
446
+ if (task) {
447
+ logger.info(`[Ingestion Queue] Processing next batch: ${task.flows.length} flows (purge=${task.purge}). Remaining in queue: ${this.queue.length}`);
448
+ const shouldPurge = task.purge && !this.purgedInCurrentSession;
449
+ if (shouldPurge) {
450
+ this.purgedInCurrentSession = true;
451
+ }
452
+ try {
453
+ await ingestFlowSamples(task.flows, shouldPurge);
454
+ task.resolve();
455
+ }
456
+ catch (err) {
457
+ task.reject(err);
458
+ }
459
+ }
460
+ // Delay 5 seconds before processing the next batch to respect Gemini rate limits
461
+ setTimeout(() => { void this.processNext(); }, 5000);
462
+ }
463
+ }
464
+ export const ingestionQueue = new IngestionQueue();
465
+ //# sourceMappingURL=samples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"samples.js","sourceRoot":"","sources":["../../src/api/samples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ import { type Verification } from '../tools/flow-evidence.js';
3
+ export declare function isNotReady(error: any): boolean;
4
+ /** One strict implementation used both by the credential tool and pre-publish/start checks. */
5
+ export declare function verifyCredentials(client: AxiosInstance, args: any): Promise<Verification>;
6
+ //# sourceMappingURL=verification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/api/verification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE/E,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAE9C;AAED,+FAA+F;AAC/F,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAoD/F"}
@@ -0,0 +1,71 @@
1
+ import { deserializeJsonApi } from './jsonapi.js';
2
+ import { executionResult } from '../tools/flow-evidence.js';
3
+ export function isNotReady(error) {
4
+ return error?.statusCode === 409 || error?.response?.status === 409 || /409|not ready/i.test(error?.message || '');
5
+ }
6
+ /** One strict implementation used both by the credential tool and pre-publish/start checks. */
7
+ export async function verifyCredentials(client, args) {
8
+ const { workspaceId, componentId, versionId = 'latest', credentialId, secretId, fields = {}, logLevel = 'info' } = args;
9
+ if (!workspaceId || !componentId || (!credentialId && !secretId) || (credentialId && secretId)) {
10
+ throw new Error('Provide workspaceId, componentId and exactly one credentialId or secretId.');
11
+ }
12
+ try {
13
+ let verifyFields;
14
+ if (credentialId) {
15
+ const response = await client.get(`/credentials/${credentialId}`);
16
+ const credential = deserializeJsonApi(response.data);
17
+ verifyFields = { ...(credential?.keys || credential?.attributes?.keys || {}), ...fields };
18
+ }
19
+ else {
20
+ const response = await client.get(`/workspaces/${workspaceId}/secrets/${secretId}`);
21
+ const secret = deserializeJsonApi(response.data);
22
+ if (secret?.state && secret.state !== 'ready')
23
+ return { ok: false, status: 'FAILED', error: `Secret state is ${secret.state}.` };
24
+ const credentials = secret?.credentials || secret?.attributes?.credentials || {};
25
+ const descResponse = await client.get(`/components/${componentId}/versions/${versionId}/descriptor`);
26
+ const descriptor = deserializeJsonApi(descResponse.data);
27
+ if (!descriptor)
28
+ throw new Error('Credential descriptor is unavailable.');
29
+ const special = Object.entries(descriptor.credentials?.fields || {})
30
+ .find(([, field]) => field?.viewClass === 'HTTPAuthView' || field?.viewClass === 'OAuthFieldView')?.[0];
31
+ if (special) {
32
+ const { fields: extraFields, ...authData } = credentials;
33
+ const { [special]: overrides, ...otherOverrides } = fields;
34
+ verifyFields = { [special]: { ...authData, ...overrides }, ...extraFields, ...otherOverrides };
35
+ }
36
+ else
37
+ verifyFields = { ...credentials, ...fields };
38
+ }
39
+ const response = await client.post(`/components/${componentId}/versions/${versionId}/verify-credential`, {
40
+ data: { type: 'verify-credential', attributes: { fields: verifyFields, log_level: logLevel },
41
+ relationships: { workspace: { data: { id: workspaceId, type: 'workspace' } } } },
42
+ });
43
+ const executionId = response.data?.data?.id;
44
+ if (!executionId)
45
+ return { ok: false, status: 'UNKNOWN', error: 'Verification returned no execution ID.' };
46
+ for (let attempt = 0; attempt < 5; attempt++) {
47
+ if (attempt)
48
+ await new Promise(resolve => setTimeout(resolve, 3000));
49
+ try {
50
+ const response = await client.get(`/exec/result/${executionId}`);
51
+ const parsed = executionResult(response.data);
52
+ if (parsed.status === 'PENDING')
53
+ continue;
54
+ if (parsed.status === 'VERIFIED' && parsed.value?.verified === true) {
55
+ return { ok: true, status: 'VERIFIED', executionId, checkedAt: Date.now() };
56
+ }
57
+ return { ok: false, status: parsed.status === 'UNKNOWN' ? 'UNKNOWN' : 'FAILED', executionId,
58
+ error: parsed.error || String(parsed.value?.reason || parsed.value?.message || 'Verification did not explicitly return verified: true.') };
59
+ }
60
+ catch (error) {
61
+ if (!isNotReady(error))
62
+ throw error;
63
+ }
64
+ }
65
+ return { ok: false, status: 'PENDING', executionId, error: 'Verification timed out while still pending; retry verification before publishing.' };
66
+ }
67
+ catch (error) {
68
+ return { ok: false, status: 'UNKNOWN', error: `Verification could not complete: ${error.message}` };
69
+ }
70
+ }
71
+ //# sourceMappingURL=verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/api/verification.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAqB,MAAM,2BAA2B,CAAC;AAE/E,MAAM,UAAU,UAAU,CAAC,KAAU;IACnC,OAAO,KAAK,EAAE,UAAU,KAAK,GAAG,IAAI,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;AACrH,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAqB,EAAE,IAAS;IACtE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,GAAG,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACxH,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,EAAE,CAAC;QAC/F,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,CAAC;QACH,IAAI,YAAiB,CAAC;QACtB,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;YAClE,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrD,YAAY,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,IAAI,UAAU,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,eAAe,WAAW,YAAY,QAAQ,EAAE,CAAC,CAAC;YACpF,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;YACjI,MAAM,WAAW,GAAG,MAAM,EAAE,WAAW,IAAI,MAAM,EAAE,UAAU,EAAE,WAAW,IAAI,EAAE,CAAC;YACjF,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,eAAe,WAAW,aAAa,SAAS,aAAa,CAAC,CAAC;YACrG,MAAM,UAAU,GAAG,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAM,UAAU,CAAC,WAAW,EAAE,MAAM,IAAI,EAAE,CAAC;iBACtE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,cAAc,IAAI,KAAK,EAAE,SAAS,KAAK,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1G,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,GAAG,WAAW,CAAC;gBACzD,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,CAAC;gBAC3D,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC;YACjG,CAAC;;gBAAM,YAAY,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC;QACtD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,WAAW,aAAa,SAAS,oBAAoB,EAAE;YACvG,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAC1F,aAAa,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE;SACnF,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;QAC3G,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,OAAO;gBAAE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YACrE,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC;gBACjE,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;oBAAE,SAAS;gBAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACpE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC9E,CAAC;gBACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW;oBACzF,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,wDAAwD,CAAC,EAAE,CAAC;YAC/I,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;oBAAE,MAAM,KAAK,CAAC;YACtC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,mFAAmF,EAAE,CAAC;IACnJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,oCAAoC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IACtG,CAAC;AACH,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ if (process.argv.includes('setup')) {
3
+ void import('./setup.js');
4
+ }
5
+ else {
6
+ void import('./index.js');
7
+ }
8
+ export {};
9
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC;KAAM,CAAC;IACN,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface Config {
2
+ embeddingProvider: string;
3
+ embeddingProviderApiKey: string;
4
+ vectorStore: string;
5
+ vectorStoreUrl: string;
6
+ vectorStoreApiKey?: string;
7
+ port: number;
8
+ nodeEnv: string;
9
+ elasticioApiEmail?: string;
10
+ elasticioApiKey?: string;
11
+ elasticioApiBaseUrl: string;
12
+ logLevel: string;
13
+ }
14
+ export declare const config: Config;
15
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,MAAM;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AA6BD,eAAO,MAAM,MAAM,EAAE,MAYpB,CAAC"}