@mondaydotcomorg/atp-vercel-sdk 0.20.1 → 0.20.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEtF,OAAO,KAAK,EACX,wBAAwB,EAIxB,MAAM,YAAY,CAAC;AAEpB,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,UAAU,CAAC,CAAoB;IACvC,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,OAAO,EAAE,wBAAwB;IAwCvC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,kBAAkB,IAAI,MAAM;IAItB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAIxF,mBAAmB,IAAI,uBAAuB;YAIhC,aAAa;YAYb,gBAAgB;YAahB,iBAAiB;YAiCjB,eAAe;YAUf,qBAAqB;CAgBnC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEtF,OAAO,KAAK,EACX,wBAAwB,EAIxB,MAAM,YAAY,CAAC;AAEpB,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,UAAU,CAAC,CAAoB;IACvC,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,OAAO,EAAE,wBAAwB;IAmDvC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,kBAAkB,IAAI,MAAM;IAItB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAIxF,mBAAmB,IAAI,uBAAuB;YAIhC,aAAa;YAYb,gBAAgB;YAahB,iBAAiB;YAiCjB,eAAe;YAUf,qBAAqB;CAgBnC"}
package/dist/client.js CHANGED
@@ -6,13 +6,25 @@ export class VercelAIATPClient {
6
6
  embeddings;
7
7
  approvalHandler;
8
8
  constructor(options) {
9
- const { serverUrl, headers, model, embeddings, tools, approvalHandler, hooks } = options;
10
- this.client = new AgentToolProtocolClient({
11
- baseUrl: serverUrl,
12
- headers,
13
- hooks,
14
- serviceProviders: tools ? { tools } : undefined,
15
- });
9
+ const { model, embeddings, tools, approvalHandler, hooks } = options;
10
+ if ('server' in options && options.server) {
11
+ this.client = new AgentToolProtocolClient({
12
+ server: options.server,
13
+ hooks,
14
+ serviceProviders: tools ? { tools } : undefined,
15
+ });
16
+ }
17
+ else if ('serverUrl' in options && options.serverUrl) {
18
+ this.client = new AgentToolProtocolClient({
19
+ baseUrl: options.serverUrl,
20
+ headers: options.headers,
21
+ hooks,
22
+ serviceProviders: tools ? { tools } : undefined,
23
+ });
24
+ }
25
+ else {
26
+ throw new Error('Either serverUrl or server must be provided');
27
+ }
16
28
  this.model = model;
17
29
  this.embeddings = embeddings;
18
30
  this.approvalHandler = approvalHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Vercel AI SDK Event Adapter
3
+ *
4
+ * Converts ATP streaming events to Vercel AI SDK UIMessageStream format.
5
+ * Use this to forward ATP events to the chat UI.
6
+ */
7
+ import { type ATPEvent } from '@mondaydotcomorg/atp-protocol';
8
+ /**
9
+ * UIMessageStreamWriter interface (subset of Vercel AI SDK's UIMessageStreamWriter)
10
+ */
11
+ export interface UIMessageStreamWriter {
12
+ write(event: UIStreamEvent): void;
13
+ }
14
+ /**
15
+ * UI Stream event types that Vercel AI SDK understands
16
+ */
17
+ export type UIStreamEvent = {
18
+ type: 'text-start';
19
+ id: string;
20
+ } | {
21
+ type: 'text-delta';
22
+ id: string;
23
+ delta: string;
24
+ } | {
25
+ type: 'text-end';
26
+ id: string;
27
+ } | {
28
+ type: 'reasoning-start';
29
+ id: string;
30
+ } | {
31
+ type: 'reasoning-delta';
32
+ id: string;
33
+ delta: string;
34
+ } | {
35
+ type: 'reasoning-end';
36
+ id: string;
37
+ } | {
38
+ type: 'source-url';
39
+ url: string;
40
+ title: string;
41
+ sourceId: string;
42
+ providerMetadata?: unknown;
43
+ } | {
44
+ type: string;
45
+ data?: unknown;
46
+ transient?: boolean;
47
+ };
48
+ /**
49
+ * Options for creating the Vercel event handler
50
+ */
51
+ export interface CreateVercelEventHandlerOptions {
52
+ /**
53
+ * Prefix for generated text run IDs
54
+ * @default 'atp-text'
55
+ */
56
+ textRunIdPrefix?: string;
57
+ }
58
+ /**
59
+ * Creates an event handler that forwards ATP events to a Vercel AI SDK UIMessageStreamWriter.
60
+ *
61
+ * Handles nested tool calls properly:
62
+ * - First tool_start triggers agentStepStart
63
+ * - Inner tool_start/end emit agentStep updates (not start/end)
64
+ * - Last tool_end triggers agentStepEnd
65
+ *
66
+ * @param dataStream - The Vercel AI SDK UIMessageStreamWriter to write events to
67
+ * @param options - Optional configuration
68
+ * @returns An event handler function to pass to ATP's executeStream
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * const handler = createVercelEventHandler(dataStream);
73
+ *
74
+ * const result = await client.executeStream(code, {}, handler);
75
+ * ```
76
+ */
77
+ export declare function createVercelEventHandler(dataStream: UIMessageStreamWriter, options?: CreateVercelEventHandlerOptions): (event: ATPEvent) => void;
78
+ /**
79
+ * Creates an event handler that collects events into an array.
80
+ * Useful for testing or post-processing events.
81
+ *
82
+ * @returns Object with handler function and collected events array
83
+ */
84
+ export declare function createEventCollector(): {
85
+ handler: (event: ATPEvent) => void;
86
+ events: ATPEvent[];
87
+ clear: () => void;
88
+ };
89
+ //# sourceMappingURL=event-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-adapter.d.ts","sourceRoot":"","sources":["../src/event-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,+BAA+B,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GACtB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAChG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC/C;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CACvC,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE,+BAAoC,GAC3C,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CA2L3B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI;IACvC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,IAAI,CAAC;CAClB,CAYA"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Vercel AI SDK Event Adapter
3
+ *
4
+ * Converts ATP streaming events to Vercel AI SDK UIMessageStream format.
5
+ * Use this to forward ATP events to the chat UI.
6
+ */
7
+ import { ATPEventType } from '@mondaydotcomorg/atp-protocol';
8
+ /**
9
+ * Creates an event handler that forwards ATP events to a Vercel AI SDK UIMessageStreamWriter.
10
+ *
11
+ * Handles nested tool calls properly:
12
+ * - First tool_start triggers agentStepStart
13
+ * - Inner tool_start/end emit agentStep updates (not start/end)
14
+ * - Last tool_end triggers agentStepEnd
15
+ *
16
+ * @param dataStream - The Vercel AI SDK UIMessageStreamWriter to write events to
17
+ * @param options - Optional configuration
18
+ * @returns An event handler function to pass to ATP's executeStream
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const handler = createVercelEventHandler(dataStream);
23
+ *
24
+ * const result = await client.executeStream(code, {}, handler);
25
+ * ```
26
+ */
27
+ export function createVercelEventHandler(dataStream, options = {}) {
28
+ const { textRunIdPrefix = 'atp-text' } = options;
29
+ let currentTextRunId;
30
+ let textRunCounter = 0;
31
+ // Track reasoning state for proper start/delta/end events
32
+ let reasoningRunId;
33
+ let reasoningCounter = 0;
34
+ // Track nested tool calls with a stack
35
+ const toolStack = [];
36
+ return (event) => {
37
+ switch (event.type) {
38
+ case ATPEventType.THINKING: {
39
+ const data = event.data;
40
+ // Start new reasoning block if needed
41
+ if (!reasoningRunId) {
42
+ reasoningRunId = `atp-reasoning-${++reasoningCounter}`;
43
+ dataStream.write({
44
+ type: 'reasoning-start',
45
+ id: reasoningRunId,
46
+ });
47
+ }
48
+ // Write reasoning delta
49
+ dataStream.write({
50
+ type: 'reasoning-delta',
51
+ id: reasoningRunId,
52
+ delta: data.content + '\n',
53
+ });
54
+ break;
55
+ }
56
+ case ATPEventType.TOOL_START: {
57
+ const data = event.data;
58
+ const isFirstTool = toolStack.length === 0;
59
+ toolStack.push({ toolName: data.toolName, apiGroup: data.apiGroup });
60
+ if (isFirstTool) {
61
+ // First tool - emit agentStepStart
62
+ dataStream.write({
63
+ type: 'data-agentStepStart',
64
+ data: `Executing ${data.apiGroup}.${data.toolName}...`,
65
+ transient: true,
66
+ });
67
+ }
68
+ else {
69
+ // Nested tool - emit progress update instead
70
+ dataStream.write({
71
+ type: 'data-agentStep',
72
+ data: `→ ${data.apiGroup}.${data.toolName}`,
73
+ transient: true,
74
+ });
75
+ }
76
+ break;
77
+ }
78
+ case ATPEventType.TOOL_END: {
79
+ const data = event.data;
80
+ toolStack.pop();
81
+ const isLastTool = toolStack.length === 0;
82
+ // Close reasoning block when outer tool ends
83
+ if (isLastTool && reasoningRunId) {
84
+ dataStream.write({
85
+ type: 'reasoning-end',
86
+ id: reasoningRunId,
87
+ });
88
+ reasoningRunId = undefined;
89
+ }
90
+ if (isLastTool) {
91
+ // Last tool - emit agentStepEnd
92
+ dataStream.write({
93
+ type: 'data-agentStepEnd',
94
+ data: data.success
95
+ ? `Completed ${data.apiGroup}.${data.toolName} (${data.duration}ms)`
96
+ : `Failed ${data.apiGroup}.${data.toolName}: ${data.error}`,
97
+ transient: true,
98
+ });
99
+ }
100
+ else {
101
+ // Nested tool finished - emit progress update
102
+ dataStream.write({
103
+ type: 'data-agentStep',
104
+ data: data.success
105
+ ? `✓ ${data.apiGroup}.${data.toolName} (${data.duration}ms)`
106
+ : `✗ ${data.apiGroup}.${data.toolName}: ${data.error}`,
107
+ transient: true,
108
+ });
109
+ }
110
+ break;
111
+ }
112
+ case ATPEventType.TEXT: {
113
+ const data = event.data;
114
+ const runId = event.runId || `${textRunIdPrefix}-${++textRunCounter}`;
115
+ // If we're starting a new text run, close the previous one
116
+ if (currentTextRunId && currentTextRunId !== runId) {
117
+ dataStream.write({ type: 'text-end', id: currentTextRunId });
118
+ currentTextRunId = undefined;
119
+ }
120
+ // Start new text run if needed
121
+ if (!currentTextRunId || currentTextRunId !== runId) {
122
+ currentTextRunId = runId;
123
+ dataStream.write({ type: 'text-start', id: currentTextRunId });
124
+ }
125
+ // Write text delta
126
+ dataStream.write({
127
+ type: 'text-delta',
128
+ id: currentTextRunId,
129
+ delta: data.text,
130
+ });
131
+ break;
132
+ }
133
+ case ATPEventType.TEXT_END:
134
+ if (currentTextRunId) {
135
+ dataStream.write({ type: 'text-end', id: currentTextRunId });
136
+ currentTextRunId = undefined;
137
+ }
138
+ break;
139
+ case ATPEventType.SOURCE: {
140
+ const data = event.data;
141
+ dataStream.write({
142
+ type: 'source-url',
143
+ url: data.url,
144
+ title: data.title,
145
+ sourceId: `${data.title}-${event.timestamp}`,
146
+ providerMetadata: {
147
+ aiChat: {
148
+ summary: data.summary,
149
+ createdAt: data.createdAt,
150
+ },
151
+ },
152
+ });
153
+ break;
154
+ }
155
+ case ATPEventType.PROGRESS: {
156
+ const data = event.data;
157
+ dataStream.write({
158
+ type: 'data-agentStep',
159
+ data: `${data.message} (${Math.round(data.fraction * 100)}%)`,
160
+ transient: true,
161
+ });
162
+ break;
163
+ }
164
+ case ATPEventType.ERROR: {
165
+ const data = event.data;
166
+ dataStream.write({
167
+ type: 'data-error',
168
+ data: data.message,
169
+ });
170
+ break;
171
+ }
172
+ default:
173
+ // Forward unknown events as custom data events
174
+ dataStream.write({
175
+ type: `data-${event.type}`,
176
+ data: event.data,
177
+ transient: true,
178
+ });
179
+ break;
180
+ }
181
+ };
182
+ }
183
+ /**
184
+ * Creates an event handler that collects events into an array.
185
+ * Useful for testing or post-processing events.
186
+ *
187
+ * @returns Object with handler function and collected events array
188
+ */
189
+ export function createEventCollector() {
190
+ const events = [];
191
+ return {
192
+ handler: (event) => {
193
+ events.push(event);
194
+ },
195
+ events,
196
+ clear: () => {
197
+ events.length = 0;
198
+ },
199
+ };
200
+ }
201
+ //# sourceMappingURL=event-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-adapter.js","sourceRoot":"","sources":["../src/event-adapter.ts"],"names":[],"mappings":"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"}
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"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { VercelAIATPClient } from './client.js';
2
- export { createATPTools } from './tools.js';
2
+ export { createATPTools, createATPStreamingTools } from './tools.js';
3
+ export { createVercelEventHandler, createEventCollector, } from './event-adapter.js';
3
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","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,GAIpB,MAAM,oBAAoB,CAAC"}
package/dist/tools.d.ts CHANGED
@@ -1,3 +1,30 @@
1
- import type { CreateATPToolsOptions, ATPToolsResult } from './types.js';
1
+ import type { CreateATPToolsOptions, ATPToolsResult, StreamingToolsOptions } from './types.js';
2
2
  export declare function createATPTools(options: CreateATPToolsOptions): Promise<ATPToolsResult>;
3
+ /**
4
+ * Creates ATP tools with streaming event support.
5
+ * Events from tool execution will be forwarded to the provided dataStream.
6
+ *
7
+ * @param options - Tool creation options including dataStream for event forwarding
8
+ * @returns Promise resolving to client and tools with streaming support
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // In your Vercel AI SDK route handler
13
+ * const dataStream = createUIMessageStream({...});
14
+ *
15
+ * const { tools } = await createATPStreamingTools({
16
+ * serverUrl: 'http://localhost:3333',
17
+ * model: openai('gpt-4'),
18
+ * dataStream,
19
+ * });
20
+ *
21
+ * // Use tools in streamText
22
+ * const result = streamText({
23
+ * model: openai('gpt-4'),
24
+ * messages,
25
+ * tools,
26
+ * });
27
+ * ```
28
+ */
29
+ export declare function createATPStreamingTools(options: StreamingToolsOptions): Promise<ATPToolsResult>;
3
30
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKxE,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgG5F"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAM/F,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgG5F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,qBAAqB,GAC5B,OAAO,CAAC,cAAc,CAAC,CA4EzB"}
package/dist/tools.js CHANGED
@@ -3,6 +3,7 @@ import { VercelAIATPClient } from './client.js';
3
3
  import { createToolsFromATPClient, ToolNames } from '@mondaydotcomorg/atp-client';
4
4
  import { ExecutionStatus } from '@mondaydotcomorg/atp-protocol';
5
5
  import { tool } from 'ai';
6
+ import { createVercelEventHandler } from './event-adapter.js';
6
7
  export async function createATPTools(options) {
7
8
  const { defaultExecutionConfig, ...clientOptions } = options;
8
9
  const client = new VercelAIATPClient(clientOptions);
@@ -97,4 +98,98 @@ export async function createATPTools(options) {
97
98
  tools: vercelTools,
98
99
  };
99
100
  }
101
+ /**
102
+ * Creates ATP tools with streaming event support.
103
+ * Events from tool execution will be forwarded to the provided dataStream.
104
+ *
105
+ * @param options - Tool creation options including dataStream for event forwarding
106
+ * @returns Promise resolving to client and tools with streaming support
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * // In your Vercel AI SDK route handler
111
+ * const dataStream = createUIMessageStream({...});
112
+ *
113
+ * const { tools } = await createATPStreamingTools({
114
+ * serverUrl: 'http://localhost:3333',
115
+ * model: openai('gpt-4'),
116
+ * dataStream,
117
+ * });
118
+ *
119
+ * // Use tools in streamText
120
+ * const result = streamText({
121
+ * model: openai('gpt-4'),
122
+ * messages,
123
+ * tools,
124
+ * });
125
+ * ```
126
+ */
127
+ export async function createATPStreamingTools(options) {
128
+ const { dataStream, defaultExecutionConfig, ...clientOptions } = options;
129
+ const client = new VercelAIATPClient(clientOptions);
130
+ await client.connect();
131
+ const eventHandler = createVercelEventHandler(dataStream);
132
+ const underlyingClient = client.getUnderlyingClient();
133
+ const vercelTools = {};
134
+ vercelTools.atp_execute_code = tool({
135
+ description: 'Execute TypeScript code in ATP sandbox with streaming events for thinking, tool execution, and text output',
136
+ parameters: z.object({
137
+ code: z.string().describe('TypeScript code to execute in the ATP sandbox'),
138
+ }),
139
+ execute: async ({ code }) => {
140
+ try {
141
+ const result = await underlyingClient.executeStream(code, defaultExecutionConfig, eventHandler);
142
+ if (result.status === ExecutionStatus.COMPLETED) {
143
+ return {
144
+ success: true,
145
+ result: result.result,
146
+ stats: result.stats,
147
+ };
148
+ }
149
+ else if (result.status === ExecutionStatus.FAILED) {
150
+ return {
151
+ success: false,
152
+ error: result.error,
153
+ stats: result.stats,
154
+ };
155
+ }
156
+ else {
157
+ return {
158
+ success: false,
159
+ error: 'Execution in unexpected state: ' + result.status,
160
+ };
161
+ }
162
+ }
163
+ catch (error) {
164
+ return {
165
+ success: false,
166
+ error: error.message || 'Unknown error',
167
+ };
168
+ }
169
+ },
170
+ });
171
+ vercelTools.atp_get_type_definitions = tool({
172
+ description: 'Get TypeScript type definitions for ATP runtime APIs to understand available functions',
173
+ parameters: z.object({}),
174
+ execute: async () => {
175
+ try {
176
+ const types = client.getTypeDefinitions();
177
+ return {
178
+ success: true,
179
+ types,
180
+ };
181
+ }
182
+ catch (error) {
183
+ return {
184
+ success: false,
185
+ error: error.message,
186
+ };
187
+ }
188
+ },
189
+ });
190
+ return {
191
+ client,
192
+ tools: vercelTools,
193
+ };
194
+ }
100
195
  //# sourceMappingURL=tools.js.map
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { ExecutionConfig, ClientTool } from '@mondaydotcomorg/atp-protocol';
2
2
  import type { ClientHooks } from '@mondaydotcomorg/atp-client';
3
+ import type { UIMessageStreamWriter } from './event-adapter.js';
3
4
  export interface ApprovalRequest {
4
5
  message: string;
5
6
  context?: Record<string, unknown>;
@@ -14,26 +15,54 @@ export type ApprovalHandler = (message: string, context?: Record<string, unknown
14
15
  export interface EmbeddingProvider {
15
16
  embed(text: string): Promise<number[]>;
16
17
  }
17
- export interface VercelAIATPClientOptions {
18
- serverUrl: string;
19
- headers?: Record<string, string>;
18
+ export interface InProcessServer {
19
+ start(): Promise<void>;
20
+ handleInit(ctx: unknown): Promise<unknown>;
21
+ getDefinitions(ctx?: unknown): Promise<unknown>;
22
+ getRuntimeDefinitions(ctx?: unknown): Promise<string>;
23
+ getInfo(): unknown;
24
+ handleSearch(ctx: unknown): Promise<unknown>;
25
+ handleExplore(ctx: unknown): Promise<unknown>;
26
+ handleExecute(ctx: unknown): Promise<unknown>;
27
+ handleResume(ctx: unknown, executionId: string): Promise<unknown>;
28
+ }
29
+ interface BaseClientOptions {
20
30
  model: any;
21
31
  embeddings?: EmbeddingProvider;
22
32
  tools?: ClientTool[];
23
33
  approvalHandler?: ApprovalHandler;
24
34
  hooks?: ClientHooks;
25
35
  }
26
- export interface CreateATPToolsOptions {
36
+ /** HTTP mode options */
37
+ interface HttpModeOptions extends BaseClientOptions {
27
38
  serverUrl: string;
28
39
  headers?: Record<string, string>;
29
- model: any;
30
- embeddings?: EmbeddingProvider;
31
- approvalHandler?: ApprovalHandler;
32
- defaultExecutionConfig?: Partial<ExecutionConfig>;
33
- hooks?: ClientHooks;
40
+ server?: never;
34
41
  }
42
+ /** In-process mode options */
43
+ interface InProcessModeOptions extends BaseClientOptions {
44
+ server: InProcessServer;
45
+ serverUrl?: never;
46
+ headers?: never;
47
+ }
48
+ export type VercelAIATPClientOptions = HttpModeOptions | InProcessModeOptions;
49
+ export type CreateATPToolsOptions = (HttpModeOptions | InProcessModeOptions) & {
50
+ defaultExecutionConfig?: Partial<ExecutionConfig>;
51
+ };
52
+ /**
53
+ * Options for creating ATP tools with streaming event support
54
+ */
55
+ export type StreamingToolsOptions = CreateATPToolsOptions & {
56
+ /**
57
+ * UIMessageStreamWriter to forward events to.
58
+ * Events like 'thinking', 'tool_start', 'tool_end', 'text', 'source' will be
59
+ * converted to Vercel AI SDK format and written to this stream.
60
+ */
61
+ dataStream: UIMessageStreamWriter;
62
+ };
35
63
  export interface ATPToolsResult {
36
64
  client: any;
37
65
  tools: Record<string, any>;
38
66
  }
67
+ export {};
39
68
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GAAG,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,WAAW,iBAAiB;IACjC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,sBAAsB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClD,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondaydotcomorg/atp-vercel-sdk",
3
- "version": "0.20.1",
3
+ "version": "0.20.2",
4
4
  "description": "Vercel AI SDK integration for Agent Tool Protocol",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -44,8 +44,8 @@
44
44
  ],
45
45
  "license": "MIT",
46
46
  "dependencies": {
47
- "@mondaydotcomorg/atp-client": "0.19.14",
48
- "@mondaydotcomorg/atp-protocol": "0.19.14"
47
+ "@mondaydotcomorg/atp-client": "0.19.15",
48
+ "@mondaydotcomorg/atp-protocol": "0.19.15"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "ai": "^4.0.0",
package/src/client.ts CHANGED
@@ -15,14 +15,25 @@ export class VercelAIATPClient {
15
15
  private approvalHandler?: ApprovalHandler;
16
16
 
17
17
  constructor(options: VercelAIATPClientOptions) {
18
- const { serverUrl, headers, model, embeddings, tools, approvalHandler, hooks } = options;
18
+ const { model, embeddings, tools, approvalHandler, hooks } = options;
19
+
20
+ if ('server' in options && options.server) {
21
+ this.client = new AgentToolProtocolClient({
22
+ server: options.server,
23
+ hooks,
24
+ serviceProviders: tools ? { tools } : undefined,
25
+ });
26
+ } else if ('serverUrl' in options && options.serverUrl) {
27
+ this.client = new AgentToolProtocolClient({
28
+ baseUrl: options.serverUrl,
29
+ headers: options.headers,
30
+ hooks,
31
+ serviceProviders: tools ? { tools } : undefined,
32
+ });
33
+ } else {
34
+ throw new Error('Either serverUrl or server must be provided');
35
+ }
19
36
 
20
- this.client = new AgentToolProtocolClient({
21
- baseUrl: serverUrl,
22
- headers,
23
- hooks,
24
- serviceProviders: tools ? { tools } : undefined,
25
- });
26
37
  this.model = model;
27
38
  this.embeddings = embeddings;
28
39
  this.approvalHandler = approvalHandler;
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Vercel AI SDK Event Adapter
3
+ *
4
+ * Converts ATP streaming events to Vercel AI SDK UIMessageStream format.
5
+ * Use this to forward ATP events to the chat UI.
6
+ */
7
+
8
+ import { type ATPEvent, ATPEventType } from '@mondaydotcomorg/atp-protocol';
9
+
10
+ /**
11
+ * UIMessageStreamWriter interface (subset of Vercel AI SDK's UIMessageStreamWriter)
12
+ */
13
+ export interface UIMessageStreamWriter {
14
+ write(event: UIStreamEvent): void;
15
+ }
16
+
17
+ /**
18
+ * UI Stream event types that Vercel AI SDK understands
19
+ */
20
+ export type UIStreamEvent =
21
+ | { type: 'text-start'; id: string }
22
+ | { type: 'text-delta'; id: string; delta: string }
23
+ | { type: 'text-end'; id: string }
24
+ | { type: 'reasoning-start'; id: string }
25
+ | { type: 'reasoning-delta'; id: string; delta: string }
26
+ | { type: 'reasoning-end'; id: string }
27
+ | { type: 'source-url'; url: string; title: string; sourceId: string; providerMetadata?: unknown }
28
+ | { type: string; data?: unknown; transient?: boolean };
29
+
30
+ /**
31
+ * Options for creating the Vercel event handler
32
+ */
33
+ export interface CreateVercelEventHandlerOptions {
34
+ /**
35
+ * Prefix for generated text run IDs
36
+ * @default 'atp-text'
37
+ */
38
+ textRunIdPrefix?: string;
39
+ }
40
+
41
+ /**
42
+ * Creates an event handler that forwards ATP events to a Vercel AI SDK UIMessageStreamWriter.
43
+ *
44
+ * Handles nested tool calls properly:
45
+ * - First tool_start triggers agentStepStart
46
+ * - Inner tool_start/end emit agentStep updates (not start/end)
47
+ * - Last tool_end triggers agentStepEnd
48
+ *
49
+ * @param dataStream - The Vercel AI SDK UIMessageStreamWriter to write events to
50
+ * @param options - Optional configuration
51
+ * @returns An event handler function to pass to ATP's executeStream
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const handler = createVercelEventHandler(dataStream);
56
+ *
57
+ * const result = await client.executeStream(code, {}, handler);
58
+ * ```
59
+ */
60
+ export function createVercelEventHandler(
61
+ dataStream: UIMessageStreamWriter,
62
+ options: CreateVercelEventHandlerOptions = {}
63
+ ): (event: ATPEvent) => void {
64
+ const { textRunIdPrefix = 'atp-text' } = options;
65
+
66
+ let currentTextRunId: string | undefined;
67
+ let textRunCounter = 0;
68
+
69
+ // Track reasoning state for proper start/delta/end events
70
+ let reasoningRunId: string | undefined;
71
+ let reasoningCounter = 0;
72
+
73
+ // Track nested tool calls with a stack
74
+ const toolStack: Array<{ toolName: string; apiGroup: string }> = [];
75
+
76
+ return (event: ATPEvent) => {
77
+ switch (event.type) {
78
+ case ATPEventType.THINKING: {
79
+ const data = event.data as { content: string; step?: string };
80
+
81
+ // Start new reasoning block if needed
82
+ if (!reasoningRunId) {
83
+ reasoningRunId = `atp-reasoning-${++reasoningCounter}`;
84
+ dataStream.write({
85
+ type: 'reasoning-start',
86
+ id: reasoningRunId,
87
+ } as UIStreamEvent);
88
+ }
89
+
90
+ // Write reasoning delta
91
+ dataStream.write({
92
+ type: 'reasoning-delta',
93
+ id: reasoningRunId,
94
+ delta: data.content + '\n',
95
+ } as UIStreamEvent);
96
+ break;
97
+ }
98
+
99
+ case ATPEventType.TOOL_START: {
100
+ const data = event.data as { toolName: string; apiGroup: string; input: unknown };
101
+ const isFirstTool = toolStack.length === 0;
102
+
103
+ toolStack.push({ toolName: data.toolName, apiGroup: data.apiGroup });
104
+
105
+ if (isFirstTool) {
106
+ // First tool - emit agentStepStart
107
+ dataStream.write({
108
+ type: 'data-agentStepStart',
109
+ data: `Executing ${data.apiGroup}.${data.toolName}...`,
110
+ transient: true,
111
+ });
112
+ } else {
113
+ // Nested tool - emit progress update instead
114
+ dataStream.write({
115
+ type: 'data-agentStep',
116
+ data: `→ ${data.apiGroup}.${data.toolName}`,
117
+ transient: true,
118
+ });
119
+ }
120
+ break;
121
+ }
122
+
123
+ case ATPEventType.TOOL_END: {
124
+ const data = event.data as {
125
+ toolName: string;
126
+ apiGroup: string;
127
+ output: unknown;
128
+ duration: number;
129
+ success: boolean;
130
+ error?: string;
131
+ };
132
+
133
+ toolStack.pop();
134
+ const isLastTool = toolStack.length === 0;
135
+
136
+ // Close reasoning block when outer tool ends
137
+ if (isLastTool && reasoningRunId) {
138
+ dataStream.write({
139
+ type: 'reasoning-end',
140
+ id: reasoningRunId,
141
+ } as UIStreamEvent);
142
+ reasoningRunId = undefined;
143
+ }
144
+
145
+ if (isLastTool) {
146
+ // Last tool - emit agentStepEnd
147
+ dataStream.write({
148
+ type: 'data-agentStepEnd',
149
+ data: data.success
150
+ ? `Completed ${data.apiGroup}.${data.toolName} (${data.duration}ms)`
151
+ : `Failed ${data.apiGroup}.${data.toolName}: ${data.error}`,
152
+ transient: true,
153
+ });
154
+ } else {
155
+ // Nested tool finished - emit progress update
156
+ dataStream.write({
157
+ type: 'data-agentStep',
158
+ data: data.success
159
+ ? `✓ ${data.apiGroup}.${data.toolName} (${data.duration}ms)`
160
+ : `✗ ${data.apiGroup}.${data.toolName}: ${data.error}`,
161
+ transient: true,
162
+ });
163
+ }
164
+ break;
165
+ }
166
+
167
+ case ATPEventType.TEXT: {
168
+ const data = event.data as { text: string };
169
+ const runId = event.runId || `${textRunIdPrefix}-${++textRunCounter}`;
170
+
171
+ // If we're starting a new text run, close the previous one
172
+ if (currentTextRunId && currentTextRunId !== runId) {
173
+ dataStream.write({ type: 'text-end', id: currentTextRunId });
174
+ currentTextRunId = undefined;
175
+ }
176
+
177
+ // Start new text run if needed
178
+ if (!currentTextRunId || currentTextRunId !== runId) {
179
+ currentTextRunId = runId;
180
+ dataStream.write({ type: 'text-start', id: currentTextRunId });
181
+ }
182
+
183
+ // Write text delta
184
+ dataStream.write({
185
+ type: 'text-delta',
186
+ id: currentTextRunId,
187
+ delta: data.text,
188
+ });
189
+ break;
190
+ }
191
+
192
+ case ATPEventType.TEXT_END:
193
+ if (currentTextRunId) {
194
+ dataStream.write({ type: 'text-end', id: currentTextRunId });
195
+ currentTextRunId = undefined;
196
+ }
197
+ break;
198
+
199
+ case ATPEventType.SOURCE: {
200
+ const data = event.data as {
201
+ url: string;
202
+ title: string;
203
+ summary?: string;
204
+ createdAt?: string;
205
+ };
206
+ dataStream.write({
207
+ type: 'source-url',
208
+ url: data.url,
209
+ title: data.title,
210
+ sourceId: `${data.title}-${event.timestamp}`,
211
+ providerMetadata: {
212
+ aiChat: {
213
+ summary: data.summary,
214
+ createdAt: data.createdAt,
215
+ },
216
+ },
217
+ });
218
+ break;
219
+ }
220
+
221
+ case ATPEventType.PROGRESS: {
222
+ const data = event.data as { message: string; fraction: number };
223
+ dataStream.write({
224
+ type: 'data-agentStep',
225
+ data: `${data.message} (${Math.round(data.fraction * 100)}%)`,
226
+ transient: true,
227
+ });
228
+ break;
229
+ }
230
+
231
+ case ATPEventType.ERROR: {
232
+ const data = event.data as { message: string; code?: string };
233
+ dataStream.write({
234
+ type: 'data-error',
235
+ data: data.message,
236
+ });
237
+ break;
238
+ }
239
+
240
+ default:
241
+ // Forward unknown events as custom data events
242
+ dataStream.write({
243
+ type: `data-${event.type}`,
244
+ data: event.data,
245
+ transient: true,
246
+ });
247
+ break;
248
+ }
249
+ };
250
+ }
251
+
252
+ /**
253
+ * Creates an event handler that collects events into an array.
254
+ * Useful for testing or post-processing events.
255
+ *
256
+ * @returns Object with handler function and collected events array
257
+ */
258
+ export function createEventCollector(): {
259
+ handler: (event: ATPEvent) => void;
260
+ events: ATPEvent[];
261
+ clear: () => void;
262
+ } {
263
+ const events: ATPEvent[] = [];
264
+
265
+ return {
266
+ handler: (event: ATPEvent) => {
267
+ events.push(event);
268
+ },
269
+ events,
270
+ clear: () => {
271
+ events.length = 0;
272
+ },
273
+ };
274
+ }
275
+
package/src/index.ts CHANGED
@@ -1,8 +1,16 @@
1
1
  export { VercelAIATPClient } from './client.js';
2
- export { createATPTools } from './tools.js';
2
+ export { createATPTools, createATPStreamingTools } from './tools.js';
3
+ export {
4
+ createVercelEventHandler,
5
+ createEventCollector,
6
+ type UIMessageStreamWriter,
7
+ type UIStreamEvent,
8
+ type CreateVercelEventHandlerOptions,
9
+ } from './event-adapter.js';
3
10
  export type {
4
11
  VercelAIATPClientOptions,
5
12
  CreateATPToolsOptions,
13
+ StreamingToolsOptions,
6
14
  ATPToolsResult,
7
15
  ApprovalHandler,
8
16
  ApprovalRequest,
package/src/tools.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { z } from 'zod';
2
2
  import { VercelAIATPClient } from './client.js';
3
- import type { CreateATPToolsOptions, ATPToolsResult } from './types.js';
3
+ import type { CreateATPToolsOptions, ATPToolsResult, StreamingToolsOptions } from './types.js';
4
4
  import { createToolsFromATPClient, ToolNames } from '@mondaydotcomorg/atp-client';
5
5
  import { ExecutionStatus } from '@mondaydotcomorg/atp-protocol';
6
6
  import { tool } from 'ai';
7
+ import { createVercelEventHandler, type UIMessageStreamWriter } from './event-adapter.js';
7
8
 
8
9
  export async function createATPTools(options: CreateATPToolsOptions): Promise<ATPToolsResult> {
9
10
  const { defaultExecutionConfig, ...clientOptions } = options;
@@ -102,3 +103,109 @@ export async function createATPTools(options: CreateATPToolsOptions): Promise<AT
102
103
  tools: vercelTools,
103
104
  };
104
105
  }
106
+
107
+ /**
108
+ * Creates ATP tools with streaming event support.
109
+ * Events from tool execution will be forwarded to the provided dataStream.
110
+ *
111
+ * @param options - Tool creation options including dataStream for event forwarding
112
+ * @returns Promise resolving to client and tools with streaming support
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * // In your Vercel AI SDK route handler
117
+ * const dataStream = createUIMessageStream({...});
118
+ *
119
+ * const { tools } = await createATPStreamingTools({
120
+ * serverUrl: 'http://localhost:3333',
121
+ * model: openai('gpt-4'),
122
+ * dataStream,
123
+ * });
124
+ *
125
+ * // Use tools in streamText
126
+ * const result = streamText({
127
+ * model: openai('gpt-4'),
128
+ * messages,
129
+ * tools,
130
+ * });
131
+ * ```
132
+ */
133
+ export async function createATPStreamingTools(
134
+ options: StreamingToolsOptions
135
+ ): Promise<ATPToolsResult> {
136
+ const { dataStream, defaultExecutionConfig, ...clientOptions } = options;
137
+
138
+ const client = new VercelAIATPClient(clientOptions);
139
+ await client.connect();
140
+
141
+ const eventHandler = createVercelEventHandler(dataStream);
142
+ const underlyingClient = client.getUnderlyingClient();
143
+
144
+ const vercelTools: Record<string, any> = {};
145
+
146
+ vercelTools.atp_execute_code = tool({
147
+ description:
148
+ 'Execute TypeScript code in ATP sandbox with streaming events for thinking, tool execution, and text output',
149
+ parameters: z.object({
150
+ code: z.string().describe('TypeScript code to execute in the ATP sandbox'),
151
+ }),
152
+ execute: async ({ code }: { code: string }) => {
153
+ try {
154
+ const result = await underlyingClient.executeStream(
155
+ code,
156
+ defaultExecutionConfig,
157
+ eventHandler
158
+ );
159
+
160
+ if (result.status === ExecutionStatus.COMPLETED) {
161
+ return {
162
+ success: true,
163
+ result: result.result,
164
+ stats: result.stats,
165
+ };
166
+ } else if (result.status === ExecutionStatus.FAILED) {
167
+ return {
168
+ success: false,
169
+ error: result.error,
170
+ stats: result.stats,
171
+ };
172
+ } else {
173
+ return {
174
+ success: false,
175
+ error: 'Execution in unexpected state: ' + result.status,
176
+ };
177
+ }
178
+ } catch (error: any) {
179
+ return {
180
+ success: false,
181
+ error: error.message || 'Unknown error',
182
+ };
183
+ }
184
+ },
185
+ });
186
+
187
+ vercelTools.atp_get_type_definitions = tool({
188
+ description:
189
+ 'Get TypeScript type definitions for ATP runtime APIs to understand available functions',
190
+ parameters: z.object({}),
191
+ execute: async () => {
192
+ try {
193
+ const types = client.getTypeDefinitions();
194
+ return {
195
+ success: true,
196
+ types,
197
+ };
198
+ } catch (error: any) {
199
+ return {
200
+ success: false,
201
+ error: error.message,
202
+ };
203
+ }
204
+ },
205
+ });
206
+
207
+ return {
208
+ client,
209
+ tools: vercelTools,
210
+ };
211
+ }
package/src/types.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { ExecutionConfig, ClientTool } from '@mondaydotcomorg/atp-protocol';
2
2
  import type { ClientHooks } from '@mondaydotcomorg/atp-client';
3
+ import type { UIMessageStreamWriter } from './event-adapter.js';
3
4
 
4
5
  export interface ApprovalRequest {
5
6
  message: string;
@@ -22,9 +23,19 @@ export interface EmbeddingProvider {
22
23
  embed(text: string): Promise<number[]>;
23
24
  }
24
25
 
25
- export interface VercelAIATPClientOptions {
26
- serverUrl: string;
27
- headers?: Record<string, string>;
26
+ export interface InProcessServer {
27
+ start(): Promise<void>;
28
+ handleInit(ctx: unknown): Promise<unknown>;
29
+ getDefinitions(ctx?: unknown): Promise<unknown>;
30
+ getRuntimeDefinitions(ctx?: unknown): Promise<string>;
31
+ getInfo(): unknown;
32
+ handleSearch(ctx: unknown): Promise<unknown>;
33
+ handleExplore(ctx: unknown): Promise<unknown>;
34
+ handleExecute(ctx: unknown): Promise<unknown>;
35
+ handleResume(ctx: unknown, executionId: string): Promise<unknown>;
36
+ }
37
+
38
+ interface BaseClientOptions {
28
39
  model: any;
29
40
  embeddings?: EmbeddingProvider;
30
41
  tools?: ClientTool[];
@@ -32,16 +43,38 @@ export interface VercelAIATPClientOptions {
32
43
  hooks?: ClientHooks;
33
44
  }
34
45
 
35
- export interface CreateATPToolsOptions {
46
+ /** HTTP mode options */
47
+ interface HttpModeOptions extends BaseClientOptions {
36
48
  serverUrl: string;
37
49
  headers?: Record<string, string>;
38
- model: any;
39
- embeddings?: EmbeddingProvider;
40
- approvalHandler?: ApprovalHandler;
41
- defaultExecutionConfig?: Partial<ExecutionConfig>;
42
- hooks?: ClientHooks;
50
+ server?: never;
51
+ }
52
+
53
+ /** In-process mode options */
54
+ interface InProcessModeOptions extends BaseClientOptions {
55
+ server: InProcessServer;
56
+ serverUrl?: never;
57
+ headers?: never;
43
58
  }
44
59
 
60
+ export type VercelAIATPClientOptions = HttpModeOptions | InProcessModeOptions;
61
+
62
+ export type CreateATPToolsOptions = (HttpModeOptions | InProcessModeOptions) & {
63
+ defaultExecutionConfig?: Partial<ExecutionConfig>;
64
+ };
65
+
66
+ /**
67
+ * Options for creating ATP tools with streaming event support
68
+ */
69
+ export type StreamingToolsOptions = CreateATPToolsOptions & {
70
+ /**
71
+ * UIMessageStreamWriter to forward events to.
72
+ * Events like 'thinking', 'tool_start', 'tool_end', 'text', 'source' will be
73
+ * converted to Vercel AI SDK format and written to this stream.
74
+ */
75
+ dataStream: UIMessageStreamWriter;
76
+ };
77
+
45
78
  export interface ATPToolsResult {
46
79
  client: any;
47
80
  tools: Record<string, any>;