@alpic80/rivet-core 1.19.1-aidon.2 → 1.24.0-aidon.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 (107) hide show
  1. package/README.md +4 -0
  2. package/dist/cjs/bundle.cjs +4187 -1020
  3. package/dist/cjs/bundle.cjs.map +4 -4
  4. package/dist/esm/api/createProcessor.js +8 -17
  5. package/dist/esm/api/looseDataValue.js +16 -0
  6. package/dist/esm/exports.js +2 -0
  7. package/dist/esm/integrations/CodeRunner.js +36 -0
  8. package/dist/esm/integrations/GptTokenizerTokenizer.js +7 -4
  9. package/dist/esm/integrations/openai/OpenAIEmbeddingGenerator.js +1 -1
  10. package/dist/esm/model/DataValue.js +14 -2
  11. package/dist/esm/model/GraphProcessor.js +275 -104
  12. package/dist/esm/model/NodeBase.js +11 -1
  13. package/dist/esm/model/NodeImpl.js +8 -0
  14. package/dist/esm/model/Nodes.js +31 -4
  15. package/dist/esm/model/ProjectReferenceLoader.js +1 -0
  16. package/dist/esm/model/nodes/AssembleMessageNode.js +12 -2
  17. package/dist/esm/model/nodes/AssemblePromptNode.js +22 -0
  18. package/dist/esm/model/nodes/CallGraphNode.js +3 -4
  19. package/dist/esm/model/nodes/ChatLoopNode.js +150 -0
  20. package/dist/esm/model/nodes/ChatNode.js +7 -934
  21. package/dist/esm/model/nodes/ChatNodeBase.js +1275 -0
  22. package/dist/esm/model/nodes/ChunkNode.js +2 -2
  23. package/dist/esm/model/nodes/CodeNode.js +40 -4
  24. package/dist/esm/model/nodes/CronNode.js +248 -0
  25. package/dist/esm/model/nodes/DelegateFunctionCallNode.js +37 -12
  26. package/dist/esm/model/nodes/DestructureNode.js +1 -1
  27. package/dist/esm/model/nodes/DocumentNode.js +183 -0
  28. package/dist/esm/model/nodes/ExtractJsonNode.js +4 -4
  29. package/dist/esm/model/nodes/ExtractRegexNode.js +10 -11
  30. package/dist/esm/model/nodes/GetEmbeddingNode.js +1 -1
  31. package/dist/esm/model/nodes/HttpCallNode.js +3 -1
  32. package/dist/esm/model/nodes/IfNode.js +5 -0
  33. package/dist/esm/model/nodes/ImageToMDNode.js +116 -0
  34. package/dist/esm/model/nodes/LoopUntilNode.js +214 -0
  35. package/dist/esm/model/nodes/PromptNode.js +29 -6
  36. package/dist/esm/model/nodes/ReadAllFilesNode.js +210 -0
  37. package/dist/esm/model/nodes/ReadDirectoryNode.js +31 -25
  38. package/dist/esm/model/nodes/ReferencedGraphAliasNode.js +199 -0
  39. package/dist/esm/model/nodes/TextNode.js +9 -4
  40. package/dist/esm/model/nodes/ToMarkdownTableNode.js +119 -0
  41. package/dist/esm/model/nodes/ToTreeNode.js +133 -0
  42. package/dist/esm/model/nodes/{GptFunctionNode.js → ToolNode.js} +10 -10
  43. package/dist/esm/model/nodes/UserInputNode.js +10 -12
  44. package/dist/esm/plugins/aidon/nodes/ChatAidonNode.js +3 -3
  45. package/dist/esm/plugins/anthropic/anthropic.js +29 -10
  46. package/dist/esm/plugins/anthropic/fetchEventSource.js +3 -2
  47. package/dist/esm/plugins/anthropic/nodes/ChatAnthropicNode.js +267 -147
  48. package/dist/esm/plugins/anthropic/plugin.js +9 -1
  49. package/dist/esm/plugins/gentrace/plugin.js +6 -6
  50. package/dist/esm/plugins/google/google.js +113 -5
  51. package/dist/esm/plugins/google/nodes/ChatGoogleNode.js +211 -54
  52. package/dist/esm/plugins/google/plugin.js +13 -6
  53. package/dist/esm/plugins/openai/nodes/RunThreadNode.js +2 -2
  54. package/dist/esm/recording/ExecutionRecorder.js +5 -1
  55. package/dist/esm/utils/chatMessageToOpenAIChatCompletionMessage.js +15 -2
  56. package/dist/esm/utils/coerceType.js +1 -1
  57. package/dist/esm/utils/fetchEventSource.js +1 -1
  58. package/dist/esm/utils/interpolation.js +108 -3
  59. package/dist/esm/utils/openai.js +106 -50
  60. package/dist/esm/utils/paths.js +80 -0
  61. package/dist/esm/utils/serialization/serialization_v4.js +5 -0
  62. package/dist/types/api/createProcessor.d.ts +11 -5
  63. package/dist/types/api/looseDataValue.d.ts +4 -0
  64. package/dist/types/api/streaming.d.ts +1 -1
  65. package/dist/types/exports.d.ts +2 -0
  66. package/dist/types/integrations/CodeRunner.d.ts +18 -0
  67. package/dist/types/model/DataValue.d.ts +29 -6
  68. package/dist/types/model/EditorDefinition.d.ts +6 -1
  69. package/dist/types/model/GraphProcessor.d.ts +14 -7
  70. package/dist/types/model/NodeBase.d.ts +4 -0
  71. package/dist/types/model/NodeImpl.d.ts +5 -4
  72. package/dist/types/model/Nodes.d.ts +13 -4
  73. package/dist/types/model/ProcessContext.d.ts +16 -1
  74. package/dist/types/model/Project.d.ts +19 -7
  75. package/dist/types/model/ProjectReferenceLoader.d.ts +5 -0
  76. package/dist/types/model/RivetPlugin.d.ts +6 -0
  77. package/dist/types/model/RivetUIContext.d.ts +5 -1
  78. package/dist/types/model/Settings.d.ts +1 -0
  79. package/dist/types/model/nodes/AssemblePromptNode.d.ts +4 -1
  80. package/dist/types/model/nodes/ChatLoopNode.d.ts +21 -0
  81. package/dist/types/model/nodes/ChatNode.d.ts +2 -62
  82. package/dist/types/model/nodes/ChatNodeBase.d.ts +85 -0
  83. package/dist/types/model/nodes/CodeNode.d.ts +8 -2
  84. package/dist/types/model/nodes/CronNode.d.ts +34 -0
  85. package/dist/types/model/nodes/DelegateFunctionCallNode.d.ts +1 -0
  86. package/dist/types/model/nodes/DocumentNode.d.ts +28 -0
  87. package/dist/types/model/nodes/ImageToMDNode.d.ts +20 -0
  88. package/dist/types/model/nodes/LoopUntilNode.d.ts +32 -0
  89. package/dist/types/model/nodes/PromptNode.d.ts +2 -0
  90. package/dist/types/model/nodes/ReadAllFilesNode.d.ts +30 -0
  91. package/dist/types/model/nodes/ReadDirectoryNode.d.ts +1 -1
  92. package/dist/types/model/nodes/ReferencedGraphAliasNode.d.ts +31 -0
  93. package/dist/types/model/nodes/ToMarkdownTableNode.d.ts +19 -0
  94. package/dist/types/model/nodes/ToTreeNode.d.ts +21 -0
  95. package/dist/types/model/nodes/UserInputNode.d.ts +2 -3
  96. package/dist/types/plugins/anthropic/anthropic.d.ts +94 -13
  97. package/dist/types/plugins/anthropic/nodes/ChatAnthropicNode.d.ts +7 -2
  98. package/dist/types/plugins/google/google.d.ts +93 -18
  99. package/dist/types/plugins/google/nodes/ChatGoogleNode.d.ts +3 -2
  100. package/dist/types/recording/RecordedEvents.d.ts +2 -0
  101. package/dist/types/utils/base64.d.ts +1 -1
  102. package/dist/types/utils/chatMessageToOpenAIChatCompletionMessage.d.ts +3 -1
  103. package/dist/types/utils/interpolation.d.ts +3 -0
  104. package/dist/types/utils/openai.d.ts +127 -21
  105. package/dist/types/utils/paths.d.ts +8 -0
  106. package/package.json +15 -11
  107. /package/dist/types/model/nodes/{GptFunctionNode.d.ts → ToolNode.d.ts} +0 -0
@@ -3,9 +3,15 @@ export type OpenAIModel = {
3
3
  cost: {
4
4
  prompt: number;
5
5
  completion: number;
6
+ audioPrompt?: number;
7
+ audioCompletion?: number;
6
8
  };
7
9
  displayName: string;
10
+ supported?: {
11
+ parallelFunctionCalls: boolean;
12
+ };
8
13
  };
14
+ export declare const defaultOpenaiSupported: NonNullable<OpenAIModel['supported']>;
9
15
  export declare const openaiModels: {
10
16
  'gpt-4': {
11
17
  maxTokens: number;
@@ -39,7 +45,7 @@ export declare const openaiModels: {
39
45
  };
40
46
  displayName: string;
41
47
  };
42
- 'gpt-3.5-turbo': {
48
+ 'gpt-4-0314': {
43
49
  maxTokens: number;
44
50
  cost: {
45
51
  prompt: number;
@@ -47,7 +53,7 @@ export declare const openaiModels: {
47
53
  };
48
54
  displayName: string;
49
55
  };
50
- 'gpt-3.5-turbo-16k': {
56
+ 'gpt-4-32k-0314': {
51
57
  maxTokens: number;
52
58
  cost: {
53
59
  prompt: number;
@@ -55,7 +61,7 @@ export declare const openaiModels: {
55
61
  };
56
62
  displayName: string;
57
63
  };
58
- 'gpt-3.5-turbo-0613': {
64
+ 'gpt-4-1106-preview': {
59
65
  maxTokens: number;
60
66
  cost: {
61
67
  prompt: number;
@@ -63,7 +69,7 @@ export declare const openaiModels: {
63
69
  };
64
70
  displayName: string;
65
71
  };
66
- 'gpt-3.5-turbo-1106': {
72
+ 'gpt-4-turbo': {
67
73
  maxTokens: number;
68
74
  cost: {
69
75
  prompt: number;
@@ -71,7 +77,7 @@ export declare const openaiModels: {
71
77
  };
72
78
  displayName: string;
73
79
  };
74
- 'gpt-3.5-turbo-16k-0613': {
80
+ 'gpt-4-vision-preview': {
75
81
  maxTokens: number;
76
82
  cost: {
77
83
  prompt: number;
@@ -79,7 +85,7 @@ export declare const openaiModels: {
79
85
  };
80
86
  displayName: string;
81
87
  };
82
- 'gpt-3.5-turbo-0301': {
88
+ 'gpt-4o': {
83
89
  maxTokens: number;
84
90
  cost: {
85
91
  prompt: number;
@@ -87,7 +93,7 @@ export declare const openaiModels: {
87
93
  };
88
94
  displayName: string;
89
95
  };
90
- 'gpt-4-0314': {
96
+ 'gpt-4o-mini': {
91
97
  maxTokens: number;
92
98
  cost: {
93
99
  prompt: number;
@@ -95,7 +101,7 @@ export declare const openaiModels: {
95
101
  };
96
102
  displayName: string;
97
103
  };
98
- 'gpt-4-32k-0314': {
104
+ 'gpt-4o-mini-2024-07-18': {
99
105
  maxTokens: number;
100
106
  cost: {
101
107
  prompt: number;
@@ -103,53 +109,92 @@ export declare const openaiModels: {
103
109
  };
104
110
  displayName: string;
105
111
  };
106
- 'gpt-4-1106-preview': {
112
+ o1: {
107
113
  maxTokens: number;
108
114
  cost: {
109
115
  prompt: number;
110
116
  completion: number;
111
117
  };
112
118
  displayName: string;
119
+ supported: {
120
+ parallelFunctionCalls: false;
121
+ };
113
122
  };
114
- 'gpt-4-turbo': {
123
+ 'o1-preview': {
115
124
  maxTokens: number;
116
125
  cost: {
117
126
  prompt: number;
118
127
  completion: number;
119
128
  };
120
129
  displayName: string;
130
+ supported: {
131
+ parallelFunctionCalls: false;
132
+ };
121
133
  };
122
- 'gpt-4-vision-preview': {
134
+ 'o1-preview-2024-09-12': {
123
135
  maxTokens: number;
124
136
  cost: {
125
137
  prompt: number;
126
138
  completion: number;
127
139
  };
128
140
  displayName: string;
141
+ supported: {
142
+ parallelFunctionCalls: false;
143
+ };
129
144
  };
130
- 'gpt-4o': {
145
+ 'o1-mini': {
131
146
  maxTokens: number;
132
147
  cost: {
133
148
  prompt: number;
134
149
  completion: number;
135
150
  };
136
151
  displayName: string;
152
+ supported: {
153
+ parallelFunctionCalls: false;
154
+ };
137
155
  };
138
- 'gpt-4o-mini': {
156
+ 'o1-mini-2024-09-12': {
139
157
  maxTokens: number;
140
158
  cost: {
141
159
  prompt: number;
142
160
  completion: number;
143
161
  };
144
162
  displayName: string;
163
+ supported: {
164
+ parallelFunctionCalls: false;
165
+ };
145
166
  };
146
- 'gpt-4o-mini-2024-07-18': {
167
+ 'o3-mini': {
147
168
  maxTokens: number;
148
169
  cost: {
149
170
  prompt: number;
150
171
  completion: number;
151
172
  };
152
173
  displayName: string;
174
+ supported: {
175
+ parallelFunctionCalls: false;
176
+ };
177
+ };
178
+ 'o3-mini-2025-01-31': {
179
+ maxTokens: number;
180
+ cost: {
181
+ prompt: number;
182
+ completion: number;
183
+ };
184
+ displayName: string;
185
+ supported: {
186
+ parallelFunctionCalls: false;
187
+ };
188
+ };
189
+ 'gpt-4o-audio-preview': {
190
+ maxTokens: number;
191
+ cost: {
192
+ prompt: number;
193
+ completion: number;
194
+ audioPrompt: number;
195
+ audioCompletion: number;
196
+ };
197
+ displayName: string;
153
198
  };
154
199
  'local-model': {
155
200
  maxTokens: number;
@@ -170,11 +215,15 @@ export declare class OpenAIError extends Error {
170
215
  constructor(status: number, responseJson: any);
171
216
  }
172
217
  export type ChatCompletionRole = ChatCompletionRequestMessage['role'];
173
- export type ChatCompletionRequestMessage = ChatCompletionRequestSystemMessage | ChatCompletionRequestUserMessage | ChatCompletionRequestAssistantMessage | ChatCompletionRequestToolMessage;
218
+ export type ChatCompletionRequestMessage = ChatCompletionRequestSystemMessage | ChatCompletionRequestUserMessage | ChatCompletionRequestAssistantMessage | ChatCompletionRequestToolMessage | ChatCompletionRequestDeveloperMessage;
174
219
  export type ChatCompletionRequestSystemMessage = {
175
220
  role: 'system';
176
221
  content: string | null;
177
222
  };
223
+ export type ChatCompletionRequestDeveloperMessage = {
224
+ role: 'developer';
225
+ content: string | null;
226
+ };
178
227
  export type ChatCompletionRequestUserMessage = {
179
228
  role: 'user';
180
229
  content: string | ChatCompletionRequestUserMessageContent[];
@@ -225,6 +274,8 @@ export type ChatCompletionOptions = {
225
274
  temperature?: number;
226
275
  top_p?: number;
227
276
  max_tokens?: number;
277
+ /** Only for o1 series of models. Otherwise max_tokens. */
278
+ max_completion_tokens?: number;
228
279
  n?: number;
229
280
  stop?: string | string[];
230
281
  presence_penalty?: number;
@@ -241,6 +292,7 @@ export type ChatCompletionOptions = {
241
292
  name: string;
242
293
  };
243
294
  };
295
+ parallel_tool_calls?: boolean;
244
296
  /** An object specifying the format that the model must output. Used to enable JSON mode. */
245
297
  response_format?: {
246
298
  type: 'text';
@@ -259,6 +311,19 @@ export type ChatCompletionOptions = {
259
311
  schema: object;
260
312
  };
261
313
  };
314
+ prediction?: {
315
+ type: 'content';
316
+ content: string | {
317
+ type: string;
318
+ text: string;
319
+ }[];
320
+ };
321
+ modalities: ('text' | 'audio')[] | undefined;
322
+ audio?: {
323
+ voice: string;
324
+ format: 'wav' | 'mp3' | 'flac' | 'opus' | 'pcm16';
325
+ };
326
+ reasoning_effort?: 'low' | 'medium' | 'high';
262
327
  };
263
328
  export type ChatCompletionResponse = {
264
329
  /** A unique identifier for the chat completion. */
@@ -282,9 +347,32 @@ export type ChatCompletionResponse = {
282
347
  prompt_tokens: number;
283
348
  /** Total number of tokens used in the request (prompt + completion). */
284
349
  total_tokens: number;
350
+ prompt_tokens_details: {
351
+ /** Number of tokens used from the cache. */
352
+ cached_tokens: number;
353
+ /** Number of tokens used for audio. */
354
+ audio_tokens: number;
355
+ text_tokens: number;
356
+ image_tokens: number;
357
+ };
358
+ completion_tokens_details: {
359
+ /** Number of tokens used for reasoning. */
360
+ reasoning_tokens: number;
361
+ /** Number of tokens used for audio. */
362
+ audio_tokens: number;
363
+ /** Number of tokens used for accepted predictions. */
364
+ accepted_prediction_tokens: number;
365
+ /** Number of tokens used for rejected predictions. */
366
+ rejected_prediction_tokens: number;
367
+ text_tokens: number;
368
+ };
285
369
  };
286
370
  /** A list of chat completion choices. Can be more than one if n is greater than 1. */
287
371
  choices: ChatCompletionResponseChoice[];
372
+ } | {
373
+ error: {
374
+ message: string;
375
+ };
288
376
  };
289
377
  export type ChatCompletionResponseChoice = {
290
378
  /** The index of the choice in the list of choices. */
@@ -305,13 +393,35 @@ export type ChatCompletionResponseMessage = {
305
393
  content: string | null;
306
394
  /** The tool calls generated by the model, such as function calls. */
307
395
  tool_calls: OpenAIFunctionToolCall[];
396
+ refusal: string | null;
397
+ audio?: {
398
+ id: string;
399
+ data: string;
400
+ expires_at: number;
401
+ transcript: string;
402
+ };
308
403
  };
309
404
  export type ChatCompletionChunk = {
310
405
  object: 'chat.completion.chunk';
311
406
  created: number;
312
407
  model: string;
313
408
  choices?: ChatCompletionChunkChoice[];
314
- usage?: CompletionUsage;
409
+ usage?: ChatCompletionChunkUsage;
410
+ };
411
+ export type ChatCompletionChunkUsage = {
412
+ prompt_tokens: number;
413
+ completion_tokens: number;
414
+ total_tokens: number;
415
+ prompt_tokens_details: {
416
+ cached_tokens: number;
417
+ audio_tokens: number;
418
+ };
419
+ completion_tokens_details: {
420
+ reasoning_tokens: number;
421
+ audio_tokens: number;
422
+ accepted_prediction_tokens: number;
423
+ rejected_prediction_tokens: number;
424
+ };
315
425
  };
316
426
  export type GptFunctionCall = {
317
427
  name: string;
@@ -321,11 +431,6 @@ export type GptFunctionCallDelta = {
321
431
  name?: string;
322
432
  arguments?: string;
323
433
  };
324
- export interface CompletionUsage {
325
- completion_tokens: number;
326
- prompt_tokens: number;
327
- total_tokens: number;
328
- }
329
434
  export type ChatCompletionChunkChoice = {
330
435
  index: number;
331
436
  message_index: number;
@@ -353,6 +458,7 @@ export type ChatCompletionFunction = {
353
458
  parameters: object;
354
459
  strict: boolean;
355
460
  };
461
+ export declare function chatCompletions({ endpoint, auth, signal, headers, timeout, ...rest }: ChatCompletionOptions): Promise<ChatCompletionResponse>;
356
462
  export declare function streamChatCompletions({ endpoint, auth, signal, headers, timeout, ...rest }: ChatCompletionOptions): AsyncGenerator<ChatCompletionChunk>;
357
463
  export type OpenAIAssistant = {
358
464
  /** The identifier, which can be referenced in API endpoints. */
@@ -0,0 +1,8 @@
1
+ interface TreeNode {
2
+ path: string;
3
+ name: string;
4
+ isDirectory: boolean;
5
+ children: TreeNode[];
6
+ }
7
+ export declare function createTreeFromPaths(paths: string[], rootPath: string): TreeNode;
8
+ export {};
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@alpic80/rivet-core",
3
3
  "license": "MIT",
4
4
  "repository": "https://github.com/castortech/rivet",
5
- "version": "1.19.1-aidon.2",
5
+ "version": "1.24.0-aidon.1",
6
6
  "packageManager": "yarn@3.5.0",
7
7
  "main": "dist/cjs/bundle.cjs",
8
8
  "module": "dist/esm/index.js",
@@ -38,23 +38,27 @@
38
38
  "build:esm": "rimraf dist/esm dist/types dist/tsconfig.tsbuildinfo && tsc -b --verbose",
39
39
  "build:cjs": "rimraf dist/cjs && tsx bundle.esbuild.ts",
40
40
  "prepack": "yarn build && cp -r ../../LICENSE ../../README.md .",
41
- "publish": "yarn npm publish",
42
- "lint": "eslint --ext .js,.jsx,.ts,.tsx ./src",
41
+ "publish": "yarn npm publish --access public",
42
+ "lint": "eslint ./src",
43
43
  "test": "tsx --test test/**/*.test.ts",
44
44
  "watch": "tsc -b -w"
45
45
  },
46
46
  "dependencies": {
47
47
  "@gentrace/core": "^2.2.5",
48
48
  "@google-cloud/vertexai": "^0.1.3",
49
+ "@google/generative-ai": "^0.21.0",
49
50
  "@huggingface/inference": "^2.6.4",
50
51
  "assemblyai": "^4.6.0",
51
52
  "autoevals": "^0.0.26",
53
+ "cron-parser": "^4.9.0",
52
54
  "crypto-js": "^4.2.0",
53
55
  "emittery": "^1.0.1",
54
56
  "emittery-0-13": "npm:emittery@^0.13.1",
55
57
  "gpt-tokenizer": "^2.1.2",
56
- "jsonpath-plus": "^7.2.0",
58
+ "jsonpath-plus": "^10.2.0",
57
59
  "lodash-es": "^4.17.21",
60
+ "mdast-util-gfm-table": "^2.0.0",
61
+ "mdast-util-to-markdown": "^2.1.2",
58
62
  "minimatch": "^9.0.3",
59
63
  "nanoid": "^3.3.6",
60
64
  "openai": "^4.28.4",
@@ -64,8 +68,8 @@
64
68
  "p-retry-4": "npm:p-retry@^4.0.0",
65
69
  "safe-stable-stringify": "^2.4.3",
66
70
  "ts-dedent": "^2.2.0",
67
- "ts-pattern": "^5.0.5",
68
- "type-fest": "^4.5.0",
71
+ "ts-pattern": "^5.6.2",
72
+ "type-fest": "^4.34.1",
69
73
  "yaml": "^2.3.3"
70
74
  },
71
75
  "devDependencies": {
@@ -76,12 +80,12 @@
76
80
  "@types/lodash": "^4.14.200",
77
81
  "@types/lodash-es": "^4.17.10",
78
82
  "@types/yaml": "^1.9.7",
79
- "@typescript-eslint/eslint-plugin": "^6.9.0",
80
- "@typescript-eslint/parser": "^6.9.0",
83
+ "@typescript-eslint/eslint-plugin": "^8.24.0",
84
+ "@typescript-eslint/parser": "^8.24.0",
81
85
  "esbuild": "^0.19.5",
82
- "eslint": "^8.52.0",
86
+ "eslint": "^9.20.1",
83
87
  "eslint-import-resolver-typescript": "^3.6.1",
84
- "eslint-plugin-import": "npm:eslint-plugin-i@latest",
88
+ "eslint-plugin-import": "^2.31.0",
85
89
  "eslint-plugin-n": "^16.2.0",
86
90
  "eslint-plugin-promise": "^6.1.1",
87
91
  "lodash": "^4.17.21",
@@ -89,7 +93,7 @@
89
93
  "rimraf": "^5.0.5",
90
94
  "ts-node": "^10.9.1",
91
95
  "tsx": "^4.6.2",
92
- "typescript": "^5.2.2"
96
+ "typescript": "^5.7.3"
93
97
  },
94
98
  "volta": {
95
99
  "node": "20.4.0"