@tanstack/ai 0.6.3 → 0.8.0

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 (59) hide show
  1. package/dist/esm/activities/chat/index.d.ts +20 -0
  2. package/dist/esm/activities/chat/index.js +248 -213
  3. package/dist/esm/activities/chat/index.js.map +1 -1
  4. package/dist/esm/activities/chat/middleware/compose.d.ts +66 -0
  5. package/dist/esm/activities/chat/middleware/compose.js +327 -0
  6. package/dist/esm/activities/chat/middleware/compose.js.map +1 -0
  7. package/dist/esm/activities/chat/middleware/index.d.ts +2 -0
  8. package/dist/esm/activities/chat/middleware/tool-cache-middleware.d.ts +89 -0
  9. package/dist/esm/activities/chat/middleware/tool-cache-middleware.js +76 -0
  10. package/dist/esm/activities/chat/middleware/tool-cache-middleware.js.map +1 -0
  11. package/dist/esm/activities/chat/middleware/types.d.ts +307 -0
  12. package/dist/esm/activities/chat/tools/tool-calls.d.ts +16 -1
  13. package/dist/esm/activities/chat/tools/tool-calls.js +148 -64
  14. package/dist/esm/activities/chat/tools/tool-calls.js.map +1 -1
  15. package/dist/esm/activities/generateImage/index.js +1 -1
  16. package/dist/esm/activities/generateImage/index.js.map +1 -1
  17. package/dist/esm/activities/generateSpeech/index.js +1 -1
  18. package/dist/esm/activities/generateSpeech/index.js.map +1 -1
  19. package/dist/esm/activities/generateTranscription/index.js +1 -1
  20. package/dist/esm/activities/generateTranscription/index.js.map +1 -1
  21. package/dist/esm/activities/generateVideo/index.js +1 -1
  22. package/dist/esm/activities/generateVideo/index.js.map +1 -1
  23. package/dist/esm/activities/summarize/index.js +1 -1
  24. package/dist/esm/activities/summarize/index.js.map +1 -1
  25. package/dist/esm/index.d.ts +3 -1
  26. package/dist/esm/index.js +2 -2
  27. package/dist/esm/middlewares/content-guard.d.ts +77 -0
  28. package/dist/esm/middlewares/content-guard.js +155 -0
  29. package/dist/esm/middlewares/content-guard.js.map +1 -0
  30. package/dist/esm/middlewares/index.d.ts +2 -0
  31. package/dist/esm/middlewares/index.js +7 -0
  32. package/dist/esm/middlewares/index.js.map +1 -0
  33. package/dist/esm/middlewares/tool-cache.d.ts +1 -0
  34. package/dist/esm/realtime/index.d.ts +30 -0
  35. package/dist/esm/realtime/index.js +8 -0
  36. package/dist/esm/realtime/index.js.map +1 -0
  37. package/dist/esm/realtime/types.d.ts +234 -0
  38. package/package.json +6 -6
  39. package/src/activities/chat/index.ts +322 -256
  40. package/src/activities/chat/middleware/compose.ts +392 -0
  41. package/src/activities/chat/middleware/index.ts +17 -0
  42. package/src/activities/chat/middleware/tool-cache-middleware.ts +189 -0
  43. package/src/activities/chat/middleware/types.ts +419 -0
  44. package/src/activities/chat/tools/tool-calls.ts +225 -87
  45. package/src/activities/generateImage/index.ts +1 -1
  46. package/src/activities/generateSpeech/index.ts +1 -1
  47. package/src/activities/generateTranscription/index.ts +1 -1
  48. package/src/activities/generateVideo/index.ts +1 -1
  49. package/src/activities/summarize/index.ts +1 -1
  50. package/src/index.ts +41 -2
  51. package/src/middlewares/content-guard.ts +285 -0
  52. package/src/middlewares/index.ts +13 -0
  53. package/src/middlewares/tool-cache.ts +6 -0
  54. package/src/realtime/index.ts +38 -0
  55. package/src/realtime/types.ts +294 -0
  56. package/dist/esm/event-client.d.ts +0 -394
  57. package/dist/esm/event-client.js +0 -13
  58. package/dist/esm/event-client.js.map +0 -1
  59. package/src/event-client.ts +0 -497
@@ -1,497 +0,0 @@
1
- import { EventClient } from '@tanstack/devtools-event-client'
2
- import type { MessagePart, ToolCall } from './types'
3
-
4
- /**
5
- * Tool call states - track the lifecycle of a tool call
6
- * Must match @tanstack/ai-client ToolCallState
7
- */
8
- export type ToolCallState =
9
- | 'awaiting-input' // Received start but no arguments yet
10
- | 'input-streaming' // Partial arguments received
11
- | 'input-complete' // All arguments received
12
- | 'approval-requested' // Waiting for user approval
13
- | 'approval-responded' // User has approved/denied
14
-
15
- /**
16
- * Tool result states - track the lifecycle of a tool result
17
- * Must match @tanstack/ai-client ToolResultState
18
- */
19
- export type ToolResultState =
20
- | 'streaming' // Placeholder for future streamed output
21
- | 'complete' // Result is complete
22
- | 'error' // Error occurred
23
-
24
- export interface TokenUsage {
25
- promptTokens: number
26
- completionTokens: number
27
- totalTokens: number
28
- }
29
-
30
- export interface ImageUsage {
31
- inputTokens?: number
32
- outputTokens?: number
33
- totalTokens?: number
34
- }
35
-
36
- interface BaseEventContext {
37
- timestamp: number
38
- requestId?: string
39
- streamId?: string
40
- messageId?: string
41
- clientId?: string
42
- source?: 'client' | 'server'
43
- provider?: string
44
- model?: string
45
- systemPrompts?: Array<string>
46
- options?: Record<string, unknown>
47
- modelOptions?: Record<string, unknown>
48
- toolNames?: Array<string>
49
- messageCount?: number
50
- hasTools?: boolean
51
- streaming?: boolean
52
- }
53
-
54
- // ===========================
55
- // Text Events
56
- // ===========================
57
-
58
- /** Emitted when a text request starts execution. */
59
- export interface TextRequestStartedEvent extends BaseEventContext {
60
- requestId: string
61
- streamId: string
62
- provider: string
63
- model: string
64
- messageCount: number
65
- hasTools: boolean
66
- streaming: boolean
67
- }
68
-
69
- /** Emitted when a text request completes with final output. */
70
- export interface TextRequestCompletedEvent extends BaseEventContext {
71
- requestId: string
72
- streamId: string
73
- provider: string
74
- model: string
75
- content: string
76
- finishReason?: string
77
- usage?: TokenUsage
78
- duration?: number
79
- streaming: boolean
80
- messageCount: number
81
- hasTools: boolean
82
- }
83
-
84
- /** Emitted when a message is created (user/assistant/system/tool). */
85
- export interface TextMessageCreatedEvent extends BaseEventContext {
86
- requestId?: string
87
- streamId?: string
88
- messageId: string
89
- role: 'user' | 'assistant' | 'system' | 'tool'
90
- content: string
91
- parts?: Array<MessagePart>
92
- toolCalls?: Array<ToolCall>
93
- messageIndex?: number
94
- }
95
-
96
- /** Emitted when a user message is created (full content). */
97
- export interface TextMessageUserEvent extends TextMessageCreatedEvent {
98
- role: 'user'
99
- }
100
-
101
- /** Emitted for streaming text content chunks. */
102
- export interface TextChunkContentEvent extends BaseEventContext {
103
- requestId?: string
104
- streamId: string
105
- messageId?: string
106
- content: string
107
- delta?: string
108
- }
109
-
110
- /** Emitted for streaming tool call chunks. */
111
- export interface TextChunkToolCallEvent extends BaseEventContext {
112
- requestId?: string
113
- streamId: string
114
- messageId?: string
115
- toolCallId: string
116
- toolName: string
117
- index: number
118
- arguments: string
119
- }
120
-
121
- /** Emitted for streaming tool result chunks. */
122
- export interface TextChunkToolResultEvent extends BaseEventContext {
123
- requestId?: string
124
- streamId: string
125
- messageId?: string
126
- toolCallId: string
127
- result: string
128
- }
129
-
130
- /** Emitted for streaming thinking chunks. */
131
- export interface TextChunkThinkingEvent extends BaseEventContext {
132
- requestId?: string
133
- streamId: string
134
- messageId?: string
135
- content: string
136
- delta?: string
137
- }
138
-
139
- /** Emitted when a stream finishes. */
140
- export interface TextChunkDoneEvent extends BaseEventContext {
141
- requestId?: string
142
- streamId: string
143
- messageId?: string
144
- finishReason: string | null
145
- usage?: TokenUsage
146
- }
147
-
148
- /** Emitted on stream errors. */
149
- export interface TextChunkErrorEvent extends BaseEventContext {
150
- requestId?: string
151
- streamId: string
152
- messageId?: string
153
- error: string
154
- }
155
-
156
- /** Emitted when usage metrics are available for text. */
157
- export interface TextUsageEvent extends BaseEventContext {
158
- requestId: string
159
- streamId: string
160
- messageId?: string
161
- model: string
162
- usage: TokenUsage
163
- }
164
-
165
- // ===========================
166
- // Tool Events
167
- // ===========================
168
-
169
- /** Emitted when tool approval is required. */
170
- export interface ToolsApprovalRequestedEvent extends BaseEventContext {
171
- requestId?: string
172
- streamId: string
173
- messageId?: string
174
- toolCallId: string
175
- toolName: string
176
- input: unknown
177
- approvalId: string
178
- }
179
-
180
- /** Emitted when user responds to an approval request. */
181
- export interface ToolsApprovalRespondedEvent extends BaseEventContext {
182
- toolCallId: string
183
- approvalId: string
184
- approved: boolean
185
- }
186
-
187
- /** Emitted when tool input is available for client execution. */
188
- export interface ToolsInputAvailableEvent extends BaseEventContext {
189
- requestId?: string
190
- streamId: string
191
- messageId?: string
192
- toolCallId: string
193
- toolName: string
194
- input: unknown
195
- }
196
-
197
- /** Emitted when a tool call completes with a result. */
198
- export interface ToolsCallCompletedEvent extends BaseEventContext {
199
- requestId?: string
200
- streamId: string
201
- messageId?: string
202
- toolCallId: string
203
- toolName: string
204
- result: unknown
205
- duration: number
206
- }
207
-
208
- /** Emitted when a client tool result is added. */
209
- export interface ToolsResultAddedEvent extends BaseEventContext {
210
- toolCallId: string
211
- toolName: string
212
- output: unknown
213
- state: 'output-available' | 'output-error'
214
- }
215
-
216
- /** Emitted when tool call state changes on the client. */
217
- export interface ToolsCallUpdatedEvent extends BaseEventContext {
218
- streamId: string
219
- messageId: string
220
- toolCallId: string
221
- toolName: string
222
- state: ToolCallState
223
- arguments: string
224
- }
225
-
226
- // ===========================
227
- // Summarize Events
228
- // ===========================
229
-
230
- /** Emitted when summarize starts. */
231
- export interface SummarizeRequestStartedEvent extends BaseEventContext {
232
- requestId: string
233
- provider: string
234
- model: string
235
- inputLength: number
236
- }
237
-
238
- /** Emitted when summarize completes. */
239
- export interface SummarizeRequestCompletedEvent extends BaseEventContext {
240
- requestId: string
241
- provider: string
242
- model: string
243
- inputLength: number
244
- outputLength: number
245
- duration: number
246
- }
247
-
248
- /** Emitted when summarize usage metrics are available. */
249
- export interface SummarizeUsageEvent extends BaseEventContext {
250
- requestId: string
251
- model: string
252
- usage: TokenUsage
253
- }
254
-
255
- // ===========================
256
- // Image Events
257
- // ===========================
258
-
259
- /** Emitted when an image request starts. */
260
- export interface ImageRequestStartedEvent extends BaseEventContext {
261
- requestId: string
262
- provider: string
263
- model: string
264
- prompt: string
265
- numberOfImages?: number
266
- size?: string
267
- }
268
-
269
- /** Emitted when an image request completes. */
270
- export interface ImageRequestCompletedEvent extends BaseEventContext {
271
- requestId: string
272
- provider: string
273
- model: string
274
- images: Array<{ url?: string; b64Json?: string }>
275
- duration: number
276
- }
277
-
278
- /** Emitted when image usage metrics are available. */
279
- export interface ImageUsageEvent extends BaseEventContext {
280
- requestId: string
281
- model: string
282
- usage: ImageUsage
283
- }
284
-
285
- // ===========================
286
- // Speech Events
287
- // ===========================
288
-
289
- /** Emitted when a speech request starts. */
290
- export interface SpeechRequestStartedEvent extends BaseEventContext {
291
- requestId: string
292
- provider: string
293
- model: string
294
- text: string
295
- voice?: string
296
- format?: string
297
- speed?: number
298
- }
299
-
300
- /** Emitted when a speech request completes. */
301
- export interface SpeechRequestCompletedEvent extends BaseEventContext {
302
- requestId: string
303
- provider: string
304
- model: string
305
- audio: string
306
- format: string
307
- duration: number
308
- audioDuration?: number
309
- contentType?: string
310
- }
311
-
312
- /** Emitted when speech usage metrics are available. */
313
- export interface SpeechUsageEvent extends BaseEventContext {
314
- requestId: string
315
- model: string
316
- usage: TokenUsage
317
- }
318
-
319
- // ===========================
320
- // Transcription Events
321
- // ===========================
322
-
323
- /** Emitted when a transcription request starts. */
324
- export interface TranscriptionRequestStartedEvent extends BaseEventContext {
325
- requestId: string
326
- provider: string
327
- model: string
328
- language?: string
329
- prompt?: string
330
- responseFormat?: string
331
- }
332
-
333
- /** Emitted when a transcription request completes. */
334
- export interface TranscriptionRequestCompletedEvent extends BaseEventContext {
335
- requestId: string
336
- provider: string
337
- model: string
338
- text: string
339
- language?: string
340
- duration: number
341
- }
342
-
343
- /** Emitted when transcription usage metrics are available. */
344
- export interface TranscriptionUsageEvent extends BaseEventContext {
345
- requestId: string
346
- model: string
347
- usage: TokenUsage
348
- }
349
-
350
- // ===========================
351
- // Video Events
352
- // ===========================
353
-
354
- /** Emitted when a video request starts. */
355
- export interface VideoRequestStartedEvent extends BaseEventContext {
356
- requestId: string
357
- provider: string
358
- model: string
359
- requestType: 'create' | 'status' | 'url'
360
- jobId?: string
361
- prompt?: string
362
- size?: string
363
- duration?: number
364
- }
365
-
366
- /** Emitted when a video request completes. */
367
- export interface VideoRequestCompletedEvent extends BaseEventContext {
368
- requestId: string
369
- provider: string
370
- model: string
371
- requestType: 'create' | 'status' | 'url'
372
- jobId?: string
373
- status?: 'pending' | 'processing' | 'completed' | 'failed'
374
- progress?: number
375
- url?: string
376
- error?: string
377
- duration: number
378
- }
379
-
380
- /** Emitted when video usage metrics are available. */
381
- export interface VideoUsageEvent extends BaseEventContext {
382
- requestId: string
383
- model: string
384
- usage: TokenUsage
385
- }
386
-
387
- // ===========================
388
- // Client Events
389
- // ===========================
390
-
391
- /** Emitted when a client is created. */
392
- export interface ClientCreatedEvent {
393
- clientId: string
394
- initialMessageCount: number
395
- timestamp: number
396
- }
397
-
398
- /** Emitted when client loading state changes. */
399
- export interface ClientLoadingChangedEvent {
400
- clientId: string
401
- isLoading: boolean
402
- timestamp: number
403
- }
404
-
405
- /** Emitted when client error state changes. */
406
- export interface ClientErrorChangedEvent {
407
- clientId: string
408
- error: string | null
409
- timestamp: number
410
- }
411
-
412
- /** Emitted when client messages are cleared. */
413
- export interface ClientMessagesClearedEvent {
414
- clientId: string
415
- timestamp: number
416
- }
417
-
418
- /** Emitted when client is reloaded. */
419
- export interface ClientReloadedEvent {
420
- clientId: string
421
- fromMessageIndex: number
422
- timestamp: number
423
- }
424
-
425
- /** Emitted when client stops. */
426
- export interface ClientStoppedEvent {
427
- clientId: string
428
- timestamp: number
429
- }
430
-
431
- export interface AIDevtoolsEventMap {
432
- // Text events
433
- 'tanstack-ai-devtools:text:request:started': TextRequestStartedEvent
434
- 'tanstack-ai-devtools:text:request:completed': TextRequestCompletedEvent
435
- 'tanstack-ai-devtools:text:message:created': TextMessageCreatedEvent
436
- 'tanstack-ai-devtools:text:message:user': TextMessageUserEvent
437
- 'tanstack-ai-devtools:text:chunk:content': TextChunkContentEvent
438
- 'tanstack-ai-devtools:text:chunk:tool-call': TextChunkToolCallEvent
439
- 'tanstack-ai-devtools:text:chunk:tool-result': TextChunkToolResultEvent
440
- 'tanstack-ai-devtools:text:chunk:thinking': TextChunkThinkingEvent
441
- 'tanstack-ai-devtools:text:chunk:done': TextChunkDoneEvent
442
- 'tanstack-ai-devtools:text:chunk:error': TextChunkErrorEvent
443
- 'tanstack-ai-devtools:text:usage': TextUsageEvent
444
-
445
- // Tool events
446
- 'tanstack-ai-devtools:tools:approval:requested': ToolsApprovalRequestedEvent
447
- 'tanstack-ai-devtools:tools:approval:responded': ToolsApprovalRespondedEvent
448
- 'tanstack-ai-devtools:tools:input:available': ToolsInputAvailableEvent
449
- 'tanstack-ai-devtools:tools:call:completed': ToolsCallCompletedEvent
450
- 'tanstack-ai-devtools:tools:result:added': ToolsResultAddedEvent
451
- 'tanstack-ai-devtools:tools:call:updated': ToolsCallUpdatedEvent
452
-
453
- // Summarize events
454
- 'tanstack-ai-devtools:summarize:request:started': SummarizeRequestStartedEvent
455
- 'tanstack-ai-devtools:summarize:request:completed': SummarizeRequestCompletedEvent
456
- 'tanstack-ai-devtools:summarize:usage': SummarizeUsageEvent
457
-
458
- // Image events
459
- 'tanstack-ai-devtools:image:request:started': ImageRequestStartedEvent
460
- 'tanstack-ai-devtools:image:request:completed': ImageRequestCompletedEvent
461
- 'tanstack-ai-devtools:image:usage': ImageUsageEvent
462
-
463
- // Speech events
464
- 'tanstack-ai-devtools:speech:request:started': SpeechRequestStartedEvent
465
- 'tanstack-ai-devtools:speech:request:completed': SpeechRequestCompletedEvent
466
- 'tanstack-ai-devtools:speech:usage': SpeechUsageEvent
467
-
468
- // Transcription events
469
- 'tanstack-ai-devtools:transcription:request:started': TranscriptionRequestStartedEvent
470
- 'tanstack-ai-devtools:transcription:request:completed': TranscriptionRequestCompletedEvent
471
- 'tanstack-ai-devtools:transcription:usage': TranscriptionUsageEvent
472
-
473
- // Video events
474
- 'tanstack-ai-devtools:video:request:started': VideoRequestStartedEvent
475
- 'tanstack-ai-devtools:video:request:completed': VideoRequestCompletedEvent
476
- 'tanstack-ai-devtools:video:usage': VideoUsageEvent
477
-
478
- // Client events
479
- 'tanstack-ai-devtools:client:created': ClientCreatedEvent
480
- 'tanstack-ai-devtools:client:loading:changed': ClientLoadingChangedEvent
481
- 'tanstack-ai-devtools:client:error:changed': ClientErrorChangedEvent
482
- 'tanstack-ai-devtools:client:messages:cleared': ClientMessagesClearedEvent
483
- 'tanstack-ai-devtools:client:reloaded': ClientReloadedEvent
484
- 'tanstack-ai-devtools:client:stopped': ClientStoppedEvent
485
- }
486
-
487
- class AiEventClient extends EventClient<AIDevtoolsEventMap> {
488
- constructor() {
489
- super({
490
- pluginId: 'tanstack-ai-devtools',
491
- })
492
- }
493
- }
494
-
495
- const aiEventClient = new AiEventClient()
496
-
497
- export { aiEventClient }