@mondaydotcomorg/atp-vercel-sdk 0.20.1 → 0.20.3

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.
package/dist/index.cjs ADDED
@@ -0,0 +1,473 @@
1
+ 'use strict';
2
+
3
+ var atpClient = require('@mondaydotcomorg/atp-client');
4
+ var ai = require('ai');
5
+ var zod = require('zod');
6
+ var atpProtocol = require('@mondaydotcomorg/atp-protocol');
7
+
8
+ var __defProp = Object.defineProperty;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ var VercelAIATPClient = class {
11
+ static {
12
+ __name(this, "VercelAIATPClient");
13
+ }
14
+ client;
15
+ model;
16
+ embeddings;
17
+ approvalHandler;
18
+ constructor(options) {
19
+ const { model, embeddings, tools, approvalHandler, hooks } = options;
20
+ if ("server" in options && options.server) {
21
+ this.client = new atpClient.AgentToolProtocolClient({
22
+ server: options.server,
23
+ hooks,
24
+ serviceProviders: tools ? {
25
+ tools
26
+ } : void 0
27
+ });
28
+ } else if ("serverUrl" in options && options.serverUrl) {
29
+ this.client = new atpClient.AgentToolProtocolClient({
30
+ baseUrl: options.serverUrl,
31
+ headers: options.headers,
32
+ hooks,
33
+ serviceProviders: tools ? {
34
+ tools
35
+ } : void 0
36
+ });
37
+ } else {
38
+ throw new Error("Either serverUrl or server must be provided");
39
+ }
40
+ this.model = model;
41
+ this.embeddings = embeddings;
42
+ this.approvalHandler = approvalHandler;
43
+ this.client.provideLLM({
44
+ call: /* @__PURE__ */ __name(async (prompt, options2) => {
45
+ return await this.handleLLMCall(prompt, options2);
46
+ }, "call"),
47
+ extract: /* @__PURE__ */ __name(async (prompt, schema, options2) => {
48
+ return await this.handleLLMExtract(prompt, schema, options2);
49
+ }, "extract"),
50
+ classify: /* @__PURE__ */ __name(async (text, categories, options2) => {
51
+ return await this.handleLLMClassify(text, categories, options2);
52
+ }, "classify")
53
+ });
54
+ if (this.embeddings) {
55
+ this.client.provideEmbedding({
56
+ embed: /* @__PURE__ */ __name(async (text) => {
57
+ return await this.handleEmbedding(text);
58
+ }, "embed")
59
+ });
60
+ }
61
+ this.client.provideApproval({
62
+ request: /* @__PURE__ */ __name(async (message, context) => {
63
+ return await this.handleApprovalRequest(message, context);
64
+ }, "request")
65
+ });
66
+ }
67
+ async connect() {
68
+ await this.client.init({
69
+ name: "vercel-ai-sdk-atp-client",
70
+ version: "1.0.0"
71
+ });
72
+ await this.client.connect();
73
+ }
74
+ getTypeDefinitions() {
75
+ return this.client.getTypeDefinitions();
76
+ }
77
+ async execute(code, config) {
78
+ return await this.client.execute(code, config);
79
+ }
80
+ getUnderlyingClient() {
81
+ return this.client;
82
+ }
83
+ async handleLLMCall(prompt, options) {
84
+ const result = await ai.generateText({
85
+ model: this.model,
86
+ prompt,
87
+ temperature: options?.temperature,
88
+ maxTokens: options?.maxTokens,
89
+ system: options?.systemPrompt
90
+ });
91
+ return result.text;
92
+ }
93
+ async handleLLMExtract(prompt, schema, options) {
94
+ const result = await ai.generateObject({
95
+ model: this.model,
96
+ prompt,
97
+ schema,
98
+ system: options?.systemPrompt,
99
+ temperature: options?.temperature,
100
+ maxTokens: options?.maxTokens
101
+ });
102
+ return result.object;
103
+ }
104
+ async handleLLMClassify(text, categories, options) {
105
+ const promptText = `Classify the following text into one of these categories: ${categories.join(", ")}
106
+
107
+ Text: ${text}
108
+
109
+ Respond with ONLY the category name, nothing else.`;
110
+ const result = await ai.generateText({
111
+ model: this.model,
112
+ prompt: promptText,
113
+ system: options?.systemPrompt,
114
+ temperature: 0
115
+ });
116
+ const classification = result.text.trim();
117
+ if (categories.includes(classification)) {
118
+ return classification;
119
+ }
120
+ for (const category of categories) {
121
+ if (classification.toLowerCase().includes(category.toLowerCase())) {
122
+ return category;
123
+ }
124
+ }
125
+ const fallback = categories[0];
126
+ if (!fallback) {
127
+ throw new Error("No categories provided for classification");
128
+ }
129
+ return fallback;
130
+ }
131
+ async handleEmbedding(text) {
132
+ if (!this.embeddings) {
133
+ throw new Error("Embeddings provider not configured. Pass embeddings option when creating VercelAIATPClient.");
134
+ }
135
+ return await this.embeddings.embed(text);
136
+ }
137
+ async handleApprovalRequest(message, context) {
138
+ if (!this.approvalHandler) {
139
+ throw new Error("No approval handler configured. Pass approvalHandler option when creating VercelAIATPClient.");
140
+ }
141
+ const approved = await this.approvalHandler(message, context);
142
+ return {
143
+ approved,
144
+ timestamp: Date.now()
145
+ };
146
+ }
147
+ };
148
+ function createVercelEventHandler(dataStream, options = {}) {
149
+ const { textRunIdPrefix = "atp-text" } = options;
150
+ let currentTextRunId;
151
+ let textRunCounter = 0;
152
+ let reasoningRunId;
153
+ let reasoningCounter = 0;
154
+ const toolStack = [];
155
+ return (event) => {
156
+ switch (event.type) {
157
+ case atpProtocol.ATPEventType.THINKING: {
158
+ const data = event.data;
159
+ if (!reasoningRunId) {
160
+ reasoningRunId = `atp-reasoning-${++reasoningCounter}`;
161
+ dataStream.write({
162
+ type: "reasoning-start",
163
+ id: reasoningRunId
164
+ });
165
+ }
166
+ dataStream.write({
167
+ type: "reasoning-delta",
168
+ id: reasoningRunId,
169
+ delta: data.content + "\n"
170
+ });
171
+ break;
172
+ }
173
+ case atpProtocol.ATPEventType.TOOL_START: {
174
+ const data = event.data;
175
+ const isFirstTool = toolStack.length === 0;
176
+ toolStack.push({
177
+ toolName: data.toolName,
178
+ apiGroup: data.apiGroup
179
+ });
180
+ if (isFirstTool) {
181
+ dataStream.write({
182
+ type: "data-agentStepStart",
183
+ data: `Executing ${data.apiGroup}.${data.toolName}...`,
184
+ transient: true
185
+ });
186
+ } else {
187
+ dataStream.write({
188
+ type: "data-agentStep",
189
+ data: `\u2192 ${data.apiGroup}.${data.toolName}`,
190
+ transient: true
191
+ });
192
+ }
193
+ break;
194
+ }
195
+ case atpProtocol.ATPEventType.TOOL_END: {
196
+ const data = event.data;
197
+ toolStack.pop();
198
+ const isLastTool = toolStack.length === 0;
199
+ if (isLastTool && reasoningRunId) {
200
+ dataStream.write({
201
+ type: "reasoning-end",
202
+ id: reasoningRunId
203
+ });
204
+ reasoningRunId = void 0;
205
+ }
206
+ if (isLastTool) {
207
+ dataStream.write({
208
+ type: "data-agentStepEnd",
209
+ data: data.success ? `Completed ${data.apiGroup}.${data.toolName} (${data.duration}ms)` : `Failed ${data.apiGroup}.${data.toolName}: ${data.error}`,
210
+ transient: true
211
+ });
212
+ } else {
213
+ dataStream.write({
214
+ type: "data-agentStep",
215
+ data: data.success ? `\u2713 ${data.apiGroup}.${data.toolName} (${data.duration}ms)` : `\u2717 ${data.apiGroup}.${data.toolName}: ${data.error}`,
216
+ transient: true
217
+ });
218
+ }
219
+ break;
220
+ }
221
+ case atpProtocol.ATPEventType.TEXT: {
222
+ const data = event.data;
223
+ const runId = event.runId || `${textRunIdPrefix}-${++textRunCounter}`;
224
+ if (currentTextRunId && currentTextRunId !== runId) {
225
+ dataStream.write({
226
+ type: "text-end",
227
+ id: currentTextRunId
228
+ });
229
+ currentTextRunId = void 0;
230
+ }
231
+ if (!currentTextRunId || currentTextRunId !== runId) {
232
+ currentTextRunId = runId;
233
+ dataStream.write({
234
+ type: "text-start",
235
+ id: currentTextRunId
236
+ });
237
+ }
238
+ dataStream.write({
239
+ type: "text-delta",
240
+ id: currentTextRunId,
241
+ delta: data.text
242
+ });
243
+ break;
244
+ }
245
+ case atpProtocol.ATPEventType.TEXT_END:
246
+ if (currentTextRunId) {
247
+ dataStream.write({
248
+ type: "text-end",
249
+ id: currentTextRunId
250
+ });
251
+ currentTextRunId = void 0;
252
+ }
253
+ break;
254
+ case atpProtocol.ATPEventType.SOURCE: {
255
+ const data = event.data;
256
+ dataStream.write({
257
+ type: "source-url",
258
+ url: data.url,
259
+ title: data.title,
260
+ sourceId: `${data.title}-${event.timestamp}`,
261
+ providerMetadata: {
262
+ aiChat: {
263
+ summary: data.summary,
264
+ createdAt: data.createdAt
265
+ }
266
+ }
267
+ });
268
+ break;
269
+ }
270
+ case atpProtocol.ATPEventType.PROGRESS: {
271
+ const data = event.data;
272
+ dataStream.write({
273
+ type: "data-agentStep",
274
+ data: `${data.message} (${Math.round(data.fraction * 100)}%)`,
275
+ transient: true
276
+ });
277
+ break;
278
+ }
279
+ case atpProtocol.ATPEventType.ERROR: {
280
+ const data = event.data;
281
+ dataStream.write({
282
+ type: "data-error",
283
+ data: data.message
284
+ });
285
+ break;
286
+ }
287
+ default:
288
+ dataStream.write({
289
+ type: `data-${event.type}`,
290
+ data: event.data,
291
+ transient: true
292
+ });
293
+ break;
294
+ }
295
+ };
296
+ }
297
+ __name(createVercelEventHandler, "createVercelEventHandler");
298
+ function createEventCollector() {
299
+ const events = [];
300
+ return {
301
+ handler: /* @__PURE__ */ __name((event) => {
302
+ events.push(event);
303
+ }, "handler"),
304
+ events,
305
+ clear: /* @__PURE__ */ __name(() => {
306
+ events.length = 0;
307
+ }, "clear")
308
+ };
309
+ }
310
+ __name(createEventCollector, "createEventCollector");
311
+
312
+ // src/tools.ts
313
+ async function createATPTools(options) {
314
+ const { defaultExecutionConfig, ...clientOptions } = options;
315
+ const client = new VercelAIATPClient(clientOptions);
316
+ await client.connect();
317
+ const atpTools = atpClient.createToolsFromATPClient(client.getUnderlyingClient());
318
+ const vercelTools = {};
319
+ for (const atpTool of atpTools) {
320
+ if (atpTool.name === atpClient.ToolNames.EXECUTE_CODE) {
321
+ vercelTools.atp_execute_code = ai.tool({
322
+ description: atpTool.description || "Execute TypeScript code in ATP sandbox with access to runtime APIs (atp.llm.*, atp.embedding.*, atp.approval.*)",
323
+ parameters: zod.z.object({
324
+ code: zod.z.string().describe("TypeScript code to execute in the ATP sandbox")
325
+ }),
326
+ execute: /* @__PURE__ */ __name(async ({ code }) => {
327
+ try {
328
+ const result = await client.execute(code, defaultExecutionConfig);
329
+ if (result.status === atpProtocol.ExecutionStatus.COMPLETED) {
330
+ return {
331
+ success: true,
332
+ result: result.result,
333
+ stats: result.stats
334
+ };
335
+ } else if (result.status === atpProtocol.ExecutionStatus.FAILED) {
336
+ return {
337
+ success: false,
338
+ error: result.error,
339
+ stats: result.stats
340
+ };
341
+ } else {
342
+ return {
343
+ success: false,
344
+ error: "Execution in unexpected state: " + result.status
345
+ };
346
+ }
347
+ } catch (error) {
348
+ return {
349
+ success: false,
350
+ error: error.message || "Unknown error"
351
+ };
352
+ }
353
+ }, "execute")
354
+ });
355
+ } else {
356
+ const toolName = `atp_${atpTool.name}`;
357
+ vercelTools[toolName] = ai.tool({
358
+ description: atpTool.description || "",
359
+ parameters: atpTool.zodSchema || zod.z.object({}),
360
+ execute: /* @__PURE__ */ __name(async (input) => {
361
+ try {
362
+ const result = await atpTool.func(input);
363
+ return {
364
+ success: true,
365
+ result
366
+ };
367
+ } catch (error) {
368
+ return {
369
+ success: false,
370
+ error: error.message
371
+ };
372
+ }
373
+ }, "execute")
374
+ });
375
+ }
376
+ }
377
+ vercelTools.atp_get_type_definitions = ai.tool({
378
+ description: "Get TypeScript type definitions for ATP runtime APIs to understand available functions",
379
+ parameters: zod.z.object({}),
380
+ execute: /* @__PURE__ */ __name(async () => {
381
+ try {
382
+ const types = client.getTypeDefinitions();
383
+ return {
384
+ success: true,
385
+ types
386
+ };
387
+ } catch (error) {
388
+ return {
389
+ success: false,
390
+ error: error.message
391
+ };
392
+ }
393
+ }, "execute")
394
+ });
395
+ return {
396
+ client,
397
+ tools: vercelTools
398
+ };
399
+ }
400
+ __name(createATPTools, "createATPTools");
401
+ async function createATPStreamingTools(options) {
402
+ const { dataStream, defaultExecutionConfig, ...clientOptions } = options;
403
+ const client = new VercelAIATPClient(clientOptions);
404
+ await client.connect();
405
+ const eventHandler = createVercelEventHandler(dataStream);
406
+ const underlyingClient = client.getUnderlyingClient();
407
+ const vercelTools = {};
408
+ vercelTools.atp_execute_code = ai.tool({
409
+ description: "Execute TypeScript code in ATP sandbox with streaming events for thinking, tool execution, and text output",
410
+ parameters: zod.z.object({
411
+ code: zod.z.string().describe("TypeScript code to execute in the ATP sandbox")
412
+ }),
413
+ execute: /* @__PURE__ */ __name(async ({ code }) => {
414
+ try {
415
+ const result = await underlyingClient.executeStream(code, defaultExecutionConfig, eventHandler);
416
+ if (result.status === atpProtocol.ExecutionStatus.COMPLETED) {
417
+ return {
418
+ success: true,
419
+ result: result.result,
420
+ stats: result.stats
421
+ };
422
+ } else if (result.status === atpProtocol.ExecutionStatus.FAILED) {
423
+ return {
424
+ success: false,
425
+ error: result.error,
426
+ stats: result.stats
427
+ };
428
+ } else {
429
+ return {
430
+ success: false,
431
+ error: "Execution in unexpected state: " + result.status
432
+ };
433
+ }
434
+ } catch (error) {
435
+ return {
436
+ success: false,
437
+ error: error.message || "Unknown error"
438
+ };
439
+ }
440
+ }, "execute")
441
+ });
442
+ vercelTools.atp_get_type_definitions = ai.tool({
443
+ description: "Get TypeScript type definitions for ATP runtime APIs to understand available functions",
444
+ parameters: zod.z.object({}),
445
+ execute: /* @__PURE__ */ __name(async () => {
446
+ try {
447
+ const types = client.getTypeDefinitions();
448
+ return {
449
+ success: true,
450
+ types
451
+ };
452
+ } catch (error) {
453
+ return {
454
+ success: false,
455
+ error: error.message
456
+ };
457
+ }
458
+ }, "execute")
459
+ });
460
+ return {
461
+ client,
462
+ tools: vercelTools
463
+ };
464
+ }
465
+ __name(createATPStreamingTools, "createATPStreamingTools");
466
+
467
+ exports.VercelAIATPClient = VercelAIATPClient;
468
+ exports.createATPStreamingTools = createATPStreamingTools;
469
+ exports.createATPTools = createATPTools;
470
+ exports.createEventCollector = createEventCollector;
471
+ exports.createVercelEventHandler = createVercelEventHandler;
472
+ //# sourceMappingURL=index.cjs.map
473
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client.ts","../src/event-adapter.ts","../src/tools.ts"],"names":["VercelAIATPClient","client","model","embeddings","approvalHandler","constructor","options","tools","hooks","server","AgentToolProtocolClient","serviceProviders","undefined","serverUrl","baseUrl","headers","Error","provideLLM","call","prompt","handleLLMCall","extract","schema","handleLLMExtract","classify","text","categories","handleLLMClassify","provideEmbedding","embed","handleEmbedding","provideApproval","request","message","context","handleApprovalRequest","connect","init","name","version","getTypeDefinitions","execute","code","config","getUnderlyingClient","result","generateText","temperature","maxTokens","system","systemPrompt","generateObject","object","promptText","join","classification","trim","includes","category","toLowerCase","fallback","approved","timestamp","Date","now","createVercelEventHandler","dataStream","textRunIdPrefix","currentTextRunId","textRunCounter","reasoningRunId","reasoningCounter","toolStack","event","type","ATPEventType","THINKING","data","write","id","delta","content","TOOL_START","isFirstTool","length","push","toolName","apiGroup","transient","TOOL_END","pop","isLastTool","success","duration","error","TEXT","runId","TEXT_END","SOURCE","url","title","sourceId","providerMetadata","aiChat","summary","createdAt","PROGRESS","Math","round","fraction","ERROR","createEventCollector","events","handler","clear","createATPTools","defaultExecutionConfig","clientOptions","atpTools","createToolsFromATPClient","vercelTools","atpTool","ToolNames","EXECUTE_CODE","atp_execute_code","tool","description","parameters","z","string","describe","status","ExecutionStatus","COMPLETED","stats","FAILED","zodSchema","input","func","atp_get_type_definitions","types","createATPStreamingTools","eventHandler","underlyingClient","executeStream"],"mappings":"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","file":"index.cjs","sourcesContent":["import { AgentToolProtocolClient } from '@mondaydotcomorg/atp-client';\nimport type { ExecutionResult, ExecutionConfig } from '@mondaydotcomorg/atp-protocol';\nimport { generateObject, generateText } from 'ai';\nimport type {\n\tVercelAIATPClientOptions,\n\tApprovalResponse,\n\tEmbeddingProvider,\n\tApprovalHandler,\n} from './types.js';\n\nexport class VercelAIATPClient {\n\tprivate client: AgentToolProtocolClient;\n\tprivate model: any;\n\tprivate embeddings?: EmbeddingProvider;\n\tprivate approvalHandler?: ApprovalHandler;\n\n\tconstructor(options: VercelAIATPClientOptions) {\n\t\tconst { model, embeddings, tools, approvalHandler, hooks } = options;\n\n\t\tif ('server' in options && options.server) {\n\t\t\tthis.client = new AgentToolProtocolClient({\n\t\t\t\tserver: options.server,\n\t\t\t\thooks,\n\t\t\t\tserviceProviders: tools ? { tools } : undefined,\n\t\t\t});\n\t\t} else if ('serverUrl' in options && options.serverUrl) {\n\t\t\tthis.client = new AgentToolProtocolClient({\n\t\t\t\tbaseUrl: options.serverUrl,\n\t\t\t\theaders: options.headers,\n\t\t\t\thooks,\n\t\t\t\tserviceProviders: tools ? { tools } : undefined,\n\t\t\t});\n\t\t} else {\n\t\t\tthrow new Error('Either serverUrl or server must be provided');\n\t\t}\n\n\t\tthis.model = model;\n\t\tthis.embeddings = embeddings;\n\t\tthis.approvalHandler = approvalHandler;\n\n\t\tthis.client.provideLLM({\n\t\t\tcall: async (prompt: string, options?: any) => {\n\t\t\t\treturn await this.handleLLMCall(prompt, options);\n\t\t\t},\n\t\t\textract: async (prompt: string, schema: any, options?: any) => {\n\t\t\t\treturn await this.handleLLMExtract(prompt, schema, options);\n\t\t\t},\n\t\t\tclassify: async (text: string, categories: string[], options?: any) => {\n\t\t\t\treturn await this.handleLLMClassify(text, categories, options);\n\t\t\t},\n\t\t});\n\n\t\tif (this.embeddings) {\n\t\t\tthis.client.provideEmbedding({\n\t\t\t\tembed: async (text: string) => {\n\t\t\t\t\treturn await this.handleEmbedding(text);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthis.client.provideApproval({\n\t\t\trequest: async (message: string, context?: Record<string, unknown>) => {\n\t\t\t\treturn await this.handleApprovalRequest(message, context);\n\t\t\t},\n\t\t});\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tawait this.client.init({ name: 'vercel-ai-sdk-atp-client', version: '1.0.0' });\n\t\tawait this.client.connect();\n\t}\n\n\tgetTypeDefinitions(): string {\n\t\treturn this.client.getTypeDefinitions();\n\t}\n\n\tasync execute(code: string, config?: Partial<ExecutionConfig>): Promise<ExecutionResult> {\n\t\treturn await this.client.execute(code, config);\n\t}\n\n\tgetUnderlyingClient(): AgentToolProtocolClient {\n\t\treturn this.client;\n\t}\n\n\tprivate async handleLLMCall(prompt: string, options?: any): Promise<string> {\n\t\tconst result = await generateText({\n\t\t\tmodel: this.model,\n\t\t\tprompt,\n\t\t\ttemperature: options?.temperature,\n\t\t\tmaxTokens: options?.maxTokens,\n\t\t\tsystem: options?.systemPrompt,\n\t\t});\n\n\t\treturn result.text;\n\t}\n\n\tprivate async handleLLMExtract(prompt: string, schema: any, options?: any): Promise<any> {\n\t\tconst result = await generateObject({\n\t\t\tmodel: this.model,\n\t\t\tprompt,\n\t\t\tschema,\n\t\t\tsystem: options?.systemPrompt,\n\t\t\ttemperature: options?.temperature,\n\t\t\tmaxTokens: options?.maxTokens,\n\t\t});\n\n\t\treturn result.object;\n\t}\n\n\tprivate async handleLLMClassify(\n\t\ttext: string,\n\t\tcategories: string[],\n\t\toptions?: any\n\t): Promise<string> {\n\t\tconst promptText = `Classify the following text into one of these categories: ${categories.join(', ')}\\n\\nText: ${text}\\n\\nRespond with ONLY the category name, nothing else.`;\n\n\t\tconst result = await generateText({\n\t\t\tmodel: this.model,\n\t\t\tprompt: promptText,\n\t\t\tsystem: options?.systemPrompt,\n\t\t\ttemperature: 0,\n\t\t});\n\n\t\tconst classification = result.text.trim();\n\n\t\tif (categories.includes(classification)) {\n\t\t\treturn classification;\n\t\t}\n\n\t\tfor (const category of categories) {\n\t\t\tif (classification.toLowerCase().includes(category.toLowerCase())) {\n\t\t\t\treturn category;\n\t\t\t}\n\t\t}\n\n\t\tconst fallback = categories[0];\n\t\tif (!fallback) {\n\t\t\tthrow new Error('No categories provided for classification');\n\t\t}\n\t\treturn fallback;\n\t}\n\n\tprivate async handleEmbedding(text: string): Promise<number[]> {\n\t\tif (!this.embeddings) {\n\t\t\tthrow new Error(\n\t\t\t\t'Embeddings provider not configured. Pass embeddings option when creating VercelAIATPClient.'\n\t\t\t);\n\t\t}\n\n\t\treturn await this.embeddings.embed(text);\n\t}\n\n\tprivate async handleApprovalRequest(\n\t\tmessage: string,\n\t\tcontext?: Record<string, unknown>\n\t): Promise<ApprovalResponse> {\n\t\tif (!this.approvalHandler) {\n\t\t\tthrow new Error(\n\t\t\t\t'No approval handler configured. Pass approvalHandler option when creating VercelAIATPClient.'\n\t\t\t);\n\t\t}\n\n\t\tconst approved = await this.approvalHandler(message, context);\n\t\treturn {\n\t\t\tapproved,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t}\n}\n","/**\n * Vercel AI SDK Event Adapter\n *\n * Converts ATP streaming events to Vercel AI SDK UIMessageStream format.\n * Use this to forward ATP events to the chat UI.\n */\n\nimport { type ATPEvent, ATPEventType } from '@mondaydotcomorg/atp-protocol';\n\n/**\n * UIMessageStreamWriter interface (subset of Vercel AI SDK's UIMessageStreamWriter)\n */\nexport interface UIMessageStreamWriter {\n\twrite(event: UIStreamEvent): void;\n}\n\n/**\n * UI Stream event types that Vercel AI SDK understands\n */\nexport type UIStreamEvent =\n\t| { type: 'text-start'; id: string }\n\t| { type: 'text-delta'; id: string; delta: string }\n\t| { type: 'text-end'; id: string }\n\t| { type: 'reasoning-start'; id: string }\n\t| { type: 'reasoning-delta'; id: string; delta: string }\n\t| { type: 'reasoning-end'; id: string }\n\t| { type: 'source-url'; url: string; title: string; sourceId: string; providerMetadata?: unknown }\n\t| { type: string; data?: unknown; transient?: boolean };\n\n/**\n * Options for creating the Vercel event handler\n */\nexport interface CreateVercelEventHandlerOptions {\n\t/**\n\t * Prefix for generated text run IDs\n\t * @default 'atp-text'\n\t */\n\ttextRunIdPrefix?: string;\n}\n\n/**\n * Creates an event handler that forwards ATP events to a Vercel AI SDK UIMessageStreamWriter.\n *\n * Handles nested tool calls properly:\n * - First tool_start triggers agentStepStart\n * - Inner tool_start/end emit agentStep updates (not start/end)\n * - Last tool_end triggers agentStepEnd\n *\n * @param dataStream - The Vercel AI SDK UIMessageStreamWriter to write events to\n * @param options - Optional configuration\n * @returns An event handler function to pass to ATP's executeStream\n *\n * @example\n * ```typescript\n * const handler = createVercelEventHandler(dataStream);\n *\n * const result = await client.executeStream(code, {}, handler);\n * ```\n */\nexport function createVercelEventHandler(\n\tdataStream: UIMessageStreamWriter,\n\toptions: CreateVercelEventHandlerOptions = {}\n): (event: ATPEvent) => void {\n\tconst { textRunIdPrefix = 'atp-text' } = options;\n\n\tlet currentTextRunId: string | undefined;\n\tlet textRunCounter = 0;\n\n\t// Track reasoning state for proper start/delta/end events\n\tlet reasoningRunId: string | undefined;\n\tlet reasoningCounter = 0;\n\n\t// Track nested tool calls with a stack\n\tconst toolStack: Array<{ toolName: string; apiGroup: string }> = [];\n\n\treturn (event: ATPEvent) => {\n\t\tswitch (event.type) {\n\t\t\tcase ATPEventType.THINKING: {\n\t\t\t\tconst data = event.data as { content: string; step?: string };\n\n\t\t\t\t// Start new reasoning block if needed\n\t\t\t\tif (!reasoningRunId) {\n\t\t\t\t\treasoningRunId = `atp-reasoning-${++reasoningCounter}`;\n\t\t\t\t\tdataStream.write({\n\t\t\t\t\t\ttype: 'reasoning-start',\n\t\t\t\t\t\tid: reasoningRunId,\n\t\t\t\t\t} as UIStreamEvent);\n\t\t\t\t}\n\n\t\t\t\t// Write reasoning delta\n\t\t\t\tdataStream.write({\n\t\t\t\t\ttype: 'reasoning-delta',\n\t\t\t\t\tid: reasoningRunId,\n\t\t\t\t\tdelta: data.content + '\\n',\n\t\t\t\t} as UIStreamEvent);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ATPEventType.TOOL_START: {\n\t\t\t\tconst data = event.data as { toolName: string; apiGroup: string; input: unknown };\n\t\t\t\tconst isFirstTool = toolStack.length === 0;\n\n\t\t\t\ttoolStack.push({ toolName: data.toolName, apiGroup: data.apiGroup });\n\n\t\t\t\tif (isFirstTool) {\n\t\t\t\t\t// First tool - emit agentStepStart\n\t\t\t\t\tdataStream.write({\n\t\t\t\t\t\ttype: 'data-agentStepStart',\n\t\t\t\t\t\tdata: `Executing ${data.apiGroup}.${data.toolName}...`,\n\t\t\t\t\t\ttransient: true,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Nested tool - emit progress update instead\n\t\t\t\t\tdataStream.write({\n\t\t\t\t\t\ttype: 'data-agentStep',\n\t\t\t\t\t\tdata: `→ ${data.apiGroup}.${data.toolName}`,\n\t\t\t\t\t\ttransient: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ATPEventType.TOOL_END: {\n\t\t\t\tconst data = event.data as {\n\t\t\t\t\ttoolName: string;\n\t\t\t\t\tapiGroup: string;\n\t\t\t\t\toutput: unknown;\n\t\t\t\t\tduration: number;\n\t\t\t\t\tsuccess: boolean;\n\t\t\t\t\terror?: string;\n\t\t\t\t};\n\n\t\t\t\ttoolStack.pop();\n\t\t\t\tconst isLastTool = toolStack.length === 0;\n\n\t\t\t\t// Close reasoning block when outer tool ends\n\t\t\t\tif (isLastTool && reasoningRunId) {\n\t\t\t\t\tdataStream.write({\n\t\t\t\t\t\ttype: 'reasoning-end',\n\t\t\t\t\t\tid: reasoningRunId,\n\t\t\t\t\t} as UIStreamEvent);\n\t\t\t\t\treasoningRunId = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (isLastTool) {\n\t\t\t\t\t// Last tool - emit agentStepEnd\n\t\t\t\t\tdataStream.write({\n\t\t\t\t\t\ttype: 'data-agentStepEnd',\n\t\t\t\t\t\tdata: data.success\n\t\t\t\t\t\t\t? `Completed ${data.apiGroup}.${data.toolName} (${data.duration}ms)`\n\t\t\t\t\t\t\t: `Failed ${data.apiGroup}.${data.toolName}: ${data.error}`,\n\t\t\t\t\t\ttransient: true,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Nested tool finished - emit progress update\n\t\t\t\t\tdataStream.write({\n\t\t\t\t\t\ttype: 'data-agentStep',\n\t\t\t\t\t\tdata: data.success\n\t\t\t\t\t\t\t? `✓ ${data.apiGroup}.${data.toolName} (${data.duration}ms)`\n\t\t\t\t\t\t\t: `✗ ${data.apiGroup}.${data.toolName}: ${data.error}`,\n\t\t\t\t\t\ttransient: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ATPEventType.TEXT: {\n\t\t\t\tconst data = event.data as { text: string };\n\t\t\t\tconst runId = event.runId || `${textRunIdPrefix}-${++textRunCounter}`;\n\n\t\t\t\t// If we're starting a new text run, close the previous one\n\t\t\t\tif (currentTextRunId && currentTextRunId !== runId) {\n\t\t\t\t\tdataStream.write({ type: 'text-end', id: currentTextRunId });\n\t\t\t\t\tcurrentTextRunId = undefined;\n\t\t\t\t}\n\n\t\t\t\t// Start new text run if needed\n\t\t\t\tif (!currentTextRunId || currentTextRunId !== runId) {\n\t\t\t\t\tcurrentTextRunId = runId;\n\t\t\t\t\tdataStream.write({ type: 'text-start', id: currentTextRunId });\n\t\t\t\t}\n\n\t\t\t\t// Write text delta\n\t\t\t\tdataStream.write({\n\t\t\t\t\ttype: 'text-delta',\n\t\t\t\t\tid: currentTextRunId,\n\t\t\t\t\tdelta: data.text,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ATPEventType.TEXT_END:\n\t\t\t\tif (currentTextRunId) {\n\t\t\t\t\tdataStream.write({ type: 'text-end', id: currentTextRunId });\n\t\t\t\t\tcurrentTextRunId = undefined;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase ATPEventType.SOURCE: {\n\t\t\t\tconst data = event.data as {\n\t\t\t\t\turl: string;\n\t\t\t\t\ttitle: string;\n\t\t\t\t\tsummary?: string;\n\t\t\t\t\tcreatedAt?: string;\n\t\t\t\t};\n\t\t\t\tdataStream.write({\n\t\t\t\t\ttype: 'source-url',\n\t\t\t\t\turl: data.url,\n\t\t\t\t\ttitle: data.title,\n\t\t\t\t\tsourceId: `${data.title}-${event.timestamp}`,\n\t\t\t\t\tproviderMetadata: {\n\t\t\t\t\t\taiChat: {\n\t\t\t\t\t\t\tsummary: data.summary,\n\t\t\t\t\t\t\tcreatedAt: data.createdAt,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ATPEventType.PROGRESS: {\n\t\t\t\tconst data = event.data as { message: string; fraction: number };\n\t\t\t\tdataStream.write({\n\t\t\t\t\ttype: 'data-agentStep',\n\t\t\t\t\tdata: `${data.message} (${Math.round(data.fraction * 100)}%)`,\n\t\t\t\t\ttransient: true,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ATPEventType.ERROR: {\n\t\t\t\tconst data = event.data as { message: string; code?: string };\n\t\t\t\tdataStream.write({\n\t\t\t\t\ttype: 'data-error',\n\t\t\t\t\tdata: data.message,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\t// Forward unknown events as custom data events\n\t\t\t\tdataStream.write({\n\t\t\t\t\ttype: `data-${event.type}`,\n\t\t\t\t\tdata: event.data,\n\t\t\t\t\ttransient: true,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t};\n}\n\n/**\n * Creates an event handler that collects events into an array.\n * Useful for testing or post-processing events.\n *\n * @returns Object with handler function and collected events array\n */\nexport function createEventCollector(): {\n\thandler: (event: ATPEvent) => void;\n\tevents: ATPEvent[];\n\tclear: () => void;\n} {\n\tconst events: ATPEvent[] = [];\n\n\treturn {\n\t\thandler: (event: ATPEvent) => {\n\t\t\tevents.push(event);\n\t\t},\n\t\tevents,\n\t\tclear: () => {\n\t\t\tevents.length = 0;\n\t\t},\n\t};\n}\n\n","import { z } from 'zod';\nimport { VercelAIATPClient } from './client.js';\nimport type { CreateATPToolsOptions, ATPToolsResult, StreamingToolsOptions } from './types.js';\nimport { createToolsFromATPClient, ToolNames } from '@mondaydotcomorg/atp-client';\nimport { ExecutionStatus } from '@mondaydotcomorg/atp-protocol';\nimport { tool } from 'ai';\nimport { createVercelEventHandler, type UIMessageStreamWriter } from './event-adapter.js';\n\nexport async function createATPTools(options: CreateATPToolsOptions): Promise<ATPToolsResult> {\n\tconst { defaultExecutionConfig, ...clientOptions } = options;\n\n\tconst client = new VercelAIATPClient(clientOptions);\n\tawait client.connect();\n\n\tconst atpTools = createToolsFromATPClient(client.getUnderlyingClient());\n\n\tconst vercelTools: Record<string, any> = {};\n\n\tfor (const atpTool of atpTools) {\n\t\tif (atpTool.name === ToolNames.EXECUTE_CODE) {\n\t\t\tvercelTools.atp_execute_code = tool({\n\t\t\t\tdescription:\n\t\t\t\t\tatpTool.description ||\n\t\t\t\t\t'Execute TypeScript code in ATP sandbox with access to runtime APIs (atp.llm.*, atp.embedding.*, atp.approval.*)',\n\t\t\t\tparameters: z.object({\n\t\t\t\t\tcode: z.string().describe('TypeScript code to execute in the ATP sandbox'),\n\t\t\t\t}),\n\t\t\t\texecute: async ({ code }: { code: string }) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await client.execute(code, defaultExecutionConfig);\n\n\t\t\t\t\t\tif (result.status === ExecutionStatus.COMPLETED) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\t\tresult: result.result,\n\t\t\t\t\t\t\t\tstats: result.stats,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (result.status === ExecutionStatus.FAILED) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\t\terror: result.error,\n\t\t\t\t\t\t\t\tstats: result.stats,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\t\terror: 'Execution in unexpected state: ' + result.status,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error: any) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\terror: error.message || 'Unknown error',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t} else {\n\t\t\tconst toolName = `atp_${atpTool.name}`;\n\t\t\tvercelTools[toolName] = tool({\n\t\t\t\tdescription: atpTool.description || '',\n\t\t\t\tparameters: atpTool.zodSchema || z.object({}),\n\t\t\t\texecute: async (input: any) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await atpTool.func(input);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t};\n\t\t\t\t\t} catch (error: any) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\terror: error.message,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tvercelTools.atp_get_type_definitions = tool({\n\t\tdescription:\n\t\t\t'Get TypeScript type definitions for ATP runtime APIs to understand available functions',\n\t\tparameters: z.object({}),\n\t\texecute: async () => {\n\t\t\ttry {\n\t\t\t\tconst types = client.getTypeDefinitions();\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\ttypes,\n\t\t\t\t};\n\t\t\t} catch (error: any) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: error.message,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t});\n\n\treturn {\n\t\tclient,\n\t\ttools: vercelTools,\n\t};\n}\n\n/**\n * Creates ATP tools with streaming event support.\n * Events from tool execution will be forwarded to the provided dataStream.\n *\n * @param options - Tool creation options including dataStream for event forwarding\n * @returns Promise resolving to client and tools with streaming support\n *\n * @example\n * ```typescript\n * // In your Vercel AI SDK route handler\n * const dataStream = createUIMessageStream({...});\n *\n * const { tools } = await createATPStreamingTools({\n * serverUrl: 'http://localhost:3333',\n * model: openai('gpt-4'),\n * dataStream,\n * });\n *\n * // Use tools in streamText\n * const result = streamText({\n * model: openai('gpt-4'),\n * messages,\n * tools,\n * });\n * ```\n */\nexport async function createATPStreamingTools(\n\toptions: StreamingToolsOptions\n): Promise<ATPToolsResult> {\n\tconst { dataStream, defaultExecutionConfig, ...clientOptions } = options;\n\n\tconst client = new VercelAIATPClient(clientOptions);\n\tawait client.connect();\n\n\tconst eventHandler = createVercelEventHandler(dataStream);\n\tconst underlyingClient = client.getUnderlyingClient();\n\n\tconst vercelTools: Record<string, any> = {};\n\n\tvercelTools.atp_execute_code = tool({\n\t\tdescription:\n\t\t\t'Execute TypeScript code in ATP sandbox with streaming events for thinking, tool execution, and text output',\n\t\tparameters: z.object({\n\t\t\tcode: z.string().describe('TypeScript code to execute in the ATP sandbox'),\n\t\t}),\n\t\texecute: async ({ code }: { code: string }) => {\n\t\t\ttry {\n\t\t\t\tconst result = await underlyingClient.executeStream(\n\t\t\t\t\tcode,\n\t\t\t\t\tdefaultExecutionConfig,\n\t\t\t\t\teventHandler\n\t\t\t\t);\n\n\t\t\t\tif (result.status === ExecutionStatus.COMPLETED) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tresult: result.result,\n\t\t\t\t\t\tstats: result.stats,\n\t\t\t\t\t};\n\t\t\t\t} else if (result.status === ExecutionStatus.FAILED) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: result.error,\n\t\t\t\t\t\tstats: result.stats,\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: 'Execution in unexpected state: ' + result.status,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch (error: any) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: error.message || 'Unknown error',\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t});\n\n\tvercelTools.atp_get_type_definitions = tool({\n\t\tdescription:\n\t\t\t'Get TypeScript type definitions for ATP runtime APIs to understand available functions',\n\t\tparameters: z.object({}),\n\t\texecute: async () => {\n\t\t\ttry {\n\t\t\t\tconst types = client.getTypeDefinitions();\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\ttypes,\n\t\t\t\t};\n\t\t\t} catch (error: any) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: error.message,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t});\n\n\treturn {\n\t\tclient,\n\t\ttools: vercelTools,\n\t};\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { VercelAIATPClient } from './client.js';
2
- export { createATPTools } from './tools.js';
3
- export type { VercelAIATPClientOptions, CreateATPToolsOptions, ATPToolsResult, ApprovalHandler, ApprovalRequest, ApprovalResponse, EmbeddingProvider, } from './types.js';
2
+ export { createATPTools, createATPStreamingTools } from './tools.js';
3
+ export { createVercelEventHandler, createEventCollector, type UIMessageStreamWriter, type UIStreamEvent, type CreateVercelEventHandlerOptions, } from './event-adapter.js';
4
+ export type { VercelAIATPClientOptions, CreateATPToolsOptions, StreamingToolsOptions, ATPToolsResult, ApprovalHandler, ApprovalRequest, ApprovalResponse, EmbeddingProvider, } from './types.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EACX,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EACN,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,+BAA+B,GACpC,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACX,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,YAAY,CAAC"}