@runtypelabs/sdk 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +398 -0
  2. package/dist/batch-builder.d.ts +106 -0
  3. package/dist/batch-builder.d.ts.map +1 -0
  4. package/dist/batch-builder.js +124 -0
  5. package/dist/batch-builder.js.map +1 -0
  6. package/dist/batches-namespace.d.ts +132 -0
  7. package/dist/batches-namespace.d.ts.map +1 -0
  8. package/dist/batches-namespace.js +128 -0
  9. package/dist/batches-namespace.js.map +1 -0
  10. package/dist/client.d.ts +121 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +485 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/endpoints.d.ts +560 -0
  15. package/dist/endpoints.d.ts.map +1 -0
  16. package/dist/endpoints.js +725 -0
  17. package/dist/endpoints.js.map +1 -0
  18. package/dist/eval-builder.d.ts +216 -0
  19. package/dist/eval-builder.d.ts.map +1 -0
  20. package/dist/eval-builder.js +225 -0
  21. package/dist/eval-builder.js.map +1 -0
  22. package/dist/evals-namespace.d.ts +205 -0
  23. package/dist/evals-namespace.d.ts.map +1 -0
  24. package/dist/evals-namespace.js +208 -0
  25. package/dist/evals-namespace.js.map +1 -0
  26. package/dist/flow-builder.d.ts +620 -0
  27. package/dist/flow-builder.d.ts.map +1 -0
  28. package/dist/flow-builder.js +565 -0
  29. package/dist/flow-builder.js.map +1 -0
  30. package/dist/flow-result.d.ts +117 -0
  31. package/dist/flow-result.d.ts.map +1 -0
  32. package/dist/flow-result.js +175 -0
  33. package/dist/flow-result.js.map +1 -0
  34. package/dist/flows-namespace.d.ts +430 -0
  35. package/dist/flows-namespace.d.ts.map +1 -0
  36. package/dist/flows-namespace.js +679 -0
  37. package/dist/flows-namespace.js.map +1 -0
  38. package/dist/index.d.ts +23 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +76 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/prompts-namespace.d.ts +236 -0
  43. package/dist/prompts-namespace.d.ts.map +1 -0
  44. package/dist/prompts-namespace.js +222 -0
  45. package/dist/prompts-namespace.js.map +1 -0
  46. package/dist/runtype.d.ts +232 -0
  47. package/dist/runtype.d.ts.map +1 -0
  48. package/dist/runtype.js +367 -0
  49. package/dist/runtype.js.map +1 -0
  50. package/dist/stream-utils.d.ts +58 -0
  51. package/dist/stream-utils.d.ts.map +1 -0
  52. package/dist/stream-utils.js +348 -0
  53. package/dist/stream-utils.js.map +1 -0
  54. package/dist/transform.d.ts +21 -0
  55. package/dist/transform.d.ts.map +1 -0
  56. package/dist/transform.js +170 -0
  57. package/dist/transform.js.map +1 -0
  58. package/dist/types.d.ts +626 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +7 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +61 -0
@@ -0,0 +1,565 @@
1
+ "use strict";
2
+ /**
3
+ * FlowBuilder - Fluent builder for constructing dispatch configurations
4
+ *
5
+ * Provides a chainable API for building flows with steps, making flow
6
+ * construction more readable and type-safe.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { FlowBuilder } from '@runtypelabs/sdk'
11
+ *
12
+ * const config = new FlowBuilder()
13
+ * .createFlow({ name: "My Flow" })
14
+ * .withRecord({ name: "Record", type: "data", metadata: { key: "value" } })
15
+ * .fetchUrl({ name: "Fetch", url: "https://api.example.com", outputVariable: "data" })
16
+ * .prompt({ name: "Process", model: "gpt-4", userPrompt: "Analyze: {{data}}" })
17
+ * .withOptions({ streamResponse: true, flowMode: "virtual" })
18
+ * .build()
19
+ * ```
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.ClientFlowBuilder = exports.FlowBuilder = void 0;
23
+ exports.createExternalTool = createExternalTool;
24
+ const flow_result_1 = require("./flow-result");
25
+ const stream_utils_1 = require("./stream-utils");
26
+ // ============================================================================
27
+ // FlowBuilder Class
28
+ // ============================================================================
29
+ class FlowBuilder {
30
+ constructor() {
31
+ this.flowConfig = { name: 'Untitled Flow' };
32
+ this.steps = [];
33
+ this.optionsConfig = {};
34
+ this.stepCounter = 0;
35
+ }
36
+ /**
37
+ * Initialize the flow with a name and optional description.
38
+ * Use this for virtual/one-off flows or when specifying flowMode in run().
39
+ */
40
+ createFlow(config) {
41
+ this.flowConfig = config;
42
+ this.existingFlowId = undefined; // Clear any existing flow reference
43
+ return this;
44
+ }
45
+ /**
46
+ * Define a flow for upsert - creates if it doesn't exist, updates if steps changed.
47
+ * This is the recommended pattern for code-first flow management.
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * const result = await new FlowBuilder()
52
+ * .upsertFlow({
53
+ * name: 'My Flow',
54
+ * createVersionOnChange: true
55
+ * })
56
+ * .prompt({ name: 'Analyze', model: 'gpt-4o', userPrompt: '...' })
57
+ * .run(apiClient, { streamResponse: true })
58
+ * ```
59
+ */
60
+ upsertFlow(config) {
61
+ const { createVersionOnChange, allowOverwriteExternalChanges, ...flowConfig } = config;
62
+ this.flowConfig = flowConfig;
63
+ this.existingFlowId = undefined; // Clear any existing flow reference
64
+ // Auto-set upsert mode and options
65
+ this.optionsConfig = {
66
+ ...this.optionsConfig,
67
+ flowMode: 'upsert',
68
+ upsertOptions: {
69
+ createVersionOnChange: createVersionOnChange ?? true,
70
+ ...(allowOverwriteExternalChanges !== undefined && { allowOverwriteExternalChanges }),
71
+ }
72
+ };
73
+ return this;
74
+ }
75
+ /**
76
+ * Use an existing flow by ID instead of defining steps inline
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const result = await new FlowBuilder()
81
+ * .useExistingFlow('flow_abc123')
82
+ * .withRecord({ name: 'Test', type: 'data' })
83
+ * .run(apiClient, { streamResponse: true })
84
+ * ```
85
+ */
86
+ useExistingFlow(flowId) {
87
+ this.existingFlowId = flowId;
88
+ this.steps = []; // Clear any inline steps
89
+ return this;
90
+ }
91
+ /**
92
+ * Set the record configuration
93
+ */
94
+ withRecord(config) {
95
+ this.recordConfig = config;
96
+ return this;
97
+ }
98
+ /**
99
+ * Set conversation messages
100
+ */
101
+ withMessages(messages) {
102
+ this.messagesConfig = messages;
103
+ return this;
104
+ }
105
+ /**
106
+ * Set dispatch options
107
+ */
108
+ withOptions(options) {
109
+ this.optionsConfig = { ...this.optionsConfig, ...options };
110
+ return this;
111
+ }
112
+ // ============================================================================
113
+ // Step Methods
114
+ // ============================================================================
115
+ /**
116
+ * Add a prompt step
117
+ */
118
+ prompt(config) {
119
+ this.addStep('prompt', config.name, {
120
+ model: config.model,
121
+ userPrompt: config.userPrompt,
122
+ text: config.userPrompt, // backward compat
123
+ systemPrompt: config.systemPrompt,
124
+ previousMessages: config.previousMessages,
125
+ outputVariable: config.outputVariable,
126
+ responseFormat: config.responseFormat,
127
+ temperature: config.temperature,
128
+ maxTokens: config.maxTokens,
129
+ reasoning: config.reasoning,
130
+ streamOutput: config.streamOutput,
131
+ tools: config.tools,
132
+ }, config.enabled);
133
+ return this;
134
+ }
135
+ /**
136
+ * Add a fetch URL step
137
+ */
138
+ fetchUrl(config) {
139
+ this.addStep('fetch-url', config.name, {
140
+ http: {
141
+ url: config.url,
142
+ method: config.method || 'GET',
143
+ headers: config.headers,
144
+ body: config.body,
145
+ },
146
+ fetchMethod: config.fetchMethod,
147
+ firecrawl: config.firecrawl,
148
+ outputVariable: config.outputVariable,
149
+ errorHandling: config.errorHandling,
150
+ streamOutput: config.streamOutput,
151
+ }, config.enabled);
152
+ return this;
153
+ }
154
+ /**
155
+ * Add a transform data step
156
+ */
157
+ transformData(config) {
158
+ this.addStep('transform-data', config.name, {
159
+ script: config.script,
160
+ outputVariable: config.outputVariable,
161
+ streamOutput: config.streamOutput,
162
+ }, config.enabled);
163
+ return this;
164
+ }
165
+ /**
166
+ * Add a set variable step
167
+ */
168
+ setVariable(config) {
169
+ this.addStep('set-variable', config.name, {
170
+ variableName: config.variableName,
171
+ value: config.value,
172
+ }, config.enabled);
173
+ return this;
174
+ }
175
+ /**
176
+ * Add a conditional step
177
+ */
178
+ conditional(config) {
179
+ this.addStep('conditional', config.name, {
180
+ condition: config.condition,
181
+ trueSteps: config.trueSteps || [],
182
+ falseSteps: config.falseSteps || [],
183
+ }, config.enabled);
184
+ return this;
185
+ }
186
+ /**
187
+ * Add a search step
188
+ */
189
+ search(config) {
190
+ this.addStep('search', config.name, {
191
+ provider: config.provider,
192
+ query: config.query,
193
+ maxResults: config.maxResults,
194
+ outputVariable: config.outputVariable,
195
+ returnCitations: config.returnCitations,
196
+ errorHandling: config.errorHandling,
197
+ streamOutput: config.streamOutput,
198
+ }, config.enabled);
199
+ return this;
200
+ }
201
+ /**
202
+ * Add a send email step
203
+ */
204
+ sendEmail(config) {
205
+ this.addStep('send-email', config.name, {
206
+ to: config.to,
207
+ from: config.from || 'no-reply@messages.runtype.com',
208
+ subject: config.subject,
209
+ html: config.html,
210
+ outputVariable: config.outputVariable,
211
+ errorHandling: config.errorHandling,
212
+ streamOutput: config.streamOutput,
213
+ }, config.enabled);
214
+ return this;
215
+ }
216
+ /**
217
+ * Add a send stream step
218
+ */
219
+ sendStream(config) {
220
+ this.addStep('send-stream', config.name, {
221
+ message: config.message,
222
+ }, config.enabled);
223
+ return this;
224
+ }
225
+ /**
226
+ * Add a retrieve record step
227
+ */
228
+ retrieveRecord(config) {
229
+ this.addStep('retrieve-record', config.name, {
230
+ recordType: config.recordType,
231
+ recordName: config.recordName,
232
+ fieldsToInclude: config.fieldsToInclude,
233
+ fieldsToExclude: config.fieldsToExclude,
234
+ outputVariable: config.outputVariable,
235
+ streamOutput: config.streamOutput,
236
+ }, config.enabled);
237
+ return this;
238
+ }
239
+ /**
240
+ * Add an upsert record step
241
+ */
242
+ upsertRecord(config) {
243
+ this.addStep('upsert-record', config.name, {
244
+ recordType: config.recordType,
245
+ recordName: config.recordName,
246
+ sourceVariable: config.sourceVariable,
247
+ mergeStrategy: config.mergeStrategy,
248
+ outputVariable: config.outputVariable,
249
+ errorHandling: config.errorHandling,
250
+ streamOutput: config.streamOutput,
251
+ }, config.enabled);
252
+ return this;
253
+ }
254
+ /**
255
+ * Add a vector search step
256
+ */
257
+ vectorSearch(config) {
258
+ this.addStep('vector-search', config.name, {
259
+ query: config.query,
260
+ recordType: config.recordType,
261
+ embeddingModel: config.embeddingModel,
262
+ limit: config.limit,
263
+ threshold: config.threshold,
264
+ outputVariable: config.outputVariable,
265
+ includeDistance: config.includeDistance,
266
+ streamOutput: config.streamOutput,
267
+ }, config.enabled);
268
+ return this;
269
+ }
270
+ /**
271
+ * Add a generate embedding step
272
+ */
273
+ generateEmbedding(config) {
274
+ this.addStep('generate-embedding', config.name, {
275
+ inputSource: 'text',
276
+ text: config.text,
277
+ embeddingModel: config.embeddingModel,
278
+ maxLength: config.maxLength,
279
+ outputVariable: config.outputVariable,
280
+ streamOutput: config.streamOutput,
281
+ }, config.enabled);
282
+ return this;
283
+ }
284
+ /**
285
+ * Add a wait until step
286
+ */
287
+ waitUntil(config) {
288
+ this.addStep('wait-until', config.name, {
289
+ delayMs: config.delayMs,
290
+ continueOnTimeout: config.continueOnTimeout,
291
+ poll: config.poll,
292
+ outputVariable: config.outputVariable,
293
+ errorHandling: config.errorHandling,
294
+ streamOutput: config.streamOutput,
295
+ }, config.enabled);
296
+ return this;
297
+ }
298
+ /**
299
+ * Add a send event step
300
+ */
301
+ sendEvent(config) {
302
+ this.addStep('send-event', config.name, {
303
+ provider: config.provider,
304
+ eventName: config.eventName,
305
+ properties: config.properties,
306
+ outputVariable: config.outputVariable,
307
+ errorHandling: config.errorHandling,
308
+ streamOutput: config.streamOutput,
309
+ }, config.enabled);
310
+ return this;
311
+ }
312
+ /**
313
+ * Add a send text step
314
+ */
315
+ sendText(config) {
316
+ this.addStep('send-text', config.name, {
317
+ to: config.to,
318
+ from: config.from,
319
+ message: config.message,
320
+ outputVariable: config.outputVariable,
321
+ errorHandling: config.errorHandling,
322
+ streamOutput: config.streamOutput,
323
+ }, config.enabled);
324
+ return this;
325
+ }
326
+ /**
327
+ * Add a fetch GitHub step
328
+ */
329
+ fetchGitHub(config) {
330
+ this.addStep('fetch-github', config.name, {
331
+ repository: config.repository,
332
+ branch: config.branch,
333
+ path: config.path,
334
+ outputVariable: config.outputVariable,
335
+ streamOutput: config.streamOutput,
336
+ }, config.enabled);
337
+ return this;
338
+ }
339
+ // ============================================================================
340
+ // Build Method
341
+ // ============================================================================
342
+ /**
343
+ * Build the final dispatch request configuration
344
+ */
345
+ build() {
346
+ // Determine the flow configuration
347
+ const flow = this.existingFlowId
348
+ ? { id: this.existingFlowId }
349
+ : { name: this.flowConfig.name, steps: this.steps };
350
+ const request = { flow };
351
+ // Add record config if set
352
+ if (this.recordConfig) {
353
+ request.record = this.recordConfig;
354
+ }
355
+ // Add messages if set
356
+ if (this.messagesConfig) {
357
+ request.messages = this.messagesConfig;
358
+ }
359
+ // Add options if any are set
360
+ if (Object.keys(this.optionsConfig).length > 0) {
361
+ request.options = this.optionsConfig;
362
+ }
363
+ return request;
364
+ }
365
+ async run(client, options, callbacks) {
366
+ const config = this.build();
367
+ // Merge run options with builder options (run options take precedence)
368
+ if (options) {
369
+ config.options = { ...config.options, ...options };
370
+ }
371
+ const response = await client.dispatch(config);
372
+ // If callbacks provided, process stream immediately
373
+ if (callbacks) {
374
+ return (0, stream_utils_1.processStream)(response, callbacks);
375
+ }
376
+ // Otherwise return FlowResult for later processing
377
+ return new flow_result_1.FlowResult(response);
378
+ }
379
+ // ============================================================================
380
+ // Private Helpers
381
+ // ============================================================================
382
+ addStep(type, name, config, enabled = true) {
383
+ this.stepCounter++;
384
+ // Clean undefined values from config
385
+ const cleanConfig = {};
386
+ for (const [key, value] of Object.entries(config)) {
387
+ if (value !== undefined) {
388
+ cleanConfig[key] = value;
389
+ }
390
+ }
391
+ this.steps.push({
392
+ id: `step-${this.stepCounter}`,
393
+ type,
394
+ name,
395
+ order: this.stepCounter,
396
+ enabled,
397
+ config: cleanConfig,
398
+ });
399
+ }
400
+ }
401
+ exports.FlowBuilder = FlowBuilder;
402
+ // ============================================================================
403
+ // ClientFlowBuilder - FlowBuilder bound to a client
404
+ // ============================================================================
405
+ /**
406
+ * FlowBuilder that is bound to a client for direct execution
407
+ *
408
+ * @example
409
+ * ```typescript
410
+ * // Via RuntypeClient.flow()
411
+ * const result = await runtype
412
+ * .flow('My Flow')
413
+ * .fetchUrl({ name: 'Fetch', url: '...', outputVariable: 'data' })
414
+ * .prompt({ name: 'Process', model: 'gpt-4', userPrompt: '...' })
415
+ * .run({ streamResponse: true })
416
+ *
417
+ * const data = await result.getResult('Process')
418
+ * ```
419
+ */
420
+ class ClientFlowBuilder extends FlowBuilder {
421
+ constructor(client, name) {
422
+ super();
423
+ this.boundClient = client;
424
+ this.createFlow({ name });
425
+ }
426
+ async run(arg1, arg2, arg3, arg4) {
427
+ const config = this.build();
428
+ // Determine arguments
429
+ let runOptions;
430
+ let runCallbacks;
431
+ let localTools;
432
+ let dispatchClient = this.boundClient;
433
+ // Helper to check if object is local tools map (not options or callbacks)
434
+ const isLocalTools = (obj) => obj && typeof obj === 'object' &&
435
+ !isStreamCallbacks(obj) &&
436
+ !('streamResponse' in obj) && // Not options
437
+ !('dispatch' in obj); // Not client
438
+ // Parse arguments based on types
439
+ if (arg1) {
440
+ if (typeof arg1 === 'object' && 'dispatch' in arg1) {
441
+ // arg1 is client (ignored)
442
+ if (arg2) {
443
+ if (isStreamCallbacks(arg2)) {
444
+ runCallbacks = arg2;
445
+ }
446
+ else {
447
+ runOptions = arg2;
448
+ if (arg3 && isStreamCallbacks(arg3)) {
449
+ runCallbacks = arg3;
450
+ }
451
+ }
452
+ }
453
+ }
454
+ else if (isLocalTools(arg1)) {
455
+ // arg1 is local tools
456
+ localTools = arg1;
457
+ if (arg2 && isStreamCallbacks(arg2)) {
458
+ runCallbacks = arg2;
459
+ }
460
+ }
461
+ else {
462
+ // arg1 is options
463
+ runOptions = arg1;
464
+ if (arg2) {
465
+ if (isLocalTools(arg2)) {
466
+ localTools = arg2;
467
+ if (arg3 && isStreamCallbacks(arg3)) {
468
+ runCallbacks = arg3;
469
+ }
470
+ }
471
+ else if (isStreamCallbacks(arg2)) {
472
+ runCallbacks = arg2;
473
+ }
474
+ }
475
+ }
476
+ }
477
+ // Merge run options with builder options
478
+ if (runOptions) {
479
+ config.options = { ...config.options, ...runOptions };
480
+ }
481
+ // Execute with local tools if provided
482
+ if (localTools) {
483
+ // Cast boundClient to RuntypeClient to access runWithLocalTools
484
+ // This assumes boundClient is a RuntypeClient which has the new method
485
+ if ('runWithLocalTools' in dispatchClient) {
486
+ // If callbacks are provided, use streaming mode, otherwise use standard mode
487
+ // runWithLocalTools handles both depending on args
488
+ if (runCallbacks) {
489
+ return dispatchClient.runWithLocalTools(config, localTools, runCallbacks);
490
+ }
491
+ return dispatchClient.runWithLocalTools(config, localTools);
492
+ }
493
+ else {
494
+ throw new Error('Client does not support local tools execution');
495
+ }
496
+ }
497
+ const response = await dispatchClient.dispatch(config);
498
+ // If callbacks provided, process stream immediately
499
+ if (runCallbacks) {
500
+ return (0, stream_utils_1.processStream)(response, runCallbacks);
501
+ }
502
+ // Otherwise return FlowResult for later processing
503
+ return new flow_result_1.FlowResult(response);
504
+ }
505
+ }
506
+ exports.ClientFlowBuilder = ClientFlowBuilder;
507
+ /**
508
+ * Type guard to check if an object is StreamCallbacks
509
+ */
510
+ function isStreamCallbacks(obj) {
511
+ if (!obj || typeof obj !== 'object')
512
+ return false;
513
+ // Check for any of the callback properties
514
+ return ('onFlowStart' in obj ||
515
+ 'onStepStart' in obj ||
516
+ 'onStepChunk' in obj ||
517
+ 'onStepComplete' in obj ||
518
+ 'onFlowComplete' in obj ||
519
+ 'onError' in obj);
520
+ }
521
+ // ============================================================================
522
+ // Runtime Tool Helpers
523
+ // ============================================================================
524
+ /**
525
+ * Create an external runtime tool definition.
526
+ *
527
+ * External tools make HTTP requests to external APIs with support for
528
+ * variable substitution in URLs and headers.
529
+ *
530
+ * Special internal variables are available for auth:
531
+ * - `{{_internal.auth_token}}` - Bearer token for Runtype API auth
532
+ * - `{{_internal.user_id}}` - Current user ID
533
+ * - `{{_internal.org_id}}` - Current organization ID
534
+ *
535
+ * @example
536
+ * ```typescript
537
+ * const listFlowsTool = createExternalTool({
538
+ * name: 'list_flows',
539
+ * description: 'List all flows in the workspace',
540
+ * parametersSchema: {
541
+ * type: 'object',
542
+ * properties: {
543
+ * limit: { type: 'number', description: 'Max results', default: 20 }
544
+ * }
545
+ * },
546
+ * url: 'https://api.runtype.com/v1/flows',
547
+ * method: 'GET',
548
+ * headers: { Authorization: '{{_internal.auth_token}}' }
549
+ * })
550
+ * ```
551
+ */
552
+ function createExternalTool(config) {
553
+ return {
554
+ name: config.name,
555
+ description: config.description,
556
+ toolType: 'external',
557
+ parametersSchema: config.parametersSchema,
558
+ config: {
559
+ url: config.url,
560
+ method: config.method || 'POST',
561
+ headers: config.headers,
562
+ }
563
+ };
564
+ }
565
+ //# sourceMappingURL=flow-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-builder.js","sourceRoot":"","sources":["../src/flow-builder.ts"],"names":[],"mappings":"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"}