@tanstack/ai 0.2.2 → 0.3.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 (41) hide show
  1. package/README.md +1 -0
  2. package/dist/esm/activities/chat/index.js +206 -172
  3. package/dist/esm/activities/chat/index.js.map +1 -1
  4. package/dist/esm/activities/chat/stream/index.d.ts +1 -1
  5. package/dist/esm/activities/chat/stream/processor.d.ts +22 -43
  6. package/dist/esm/activities/chat/stream/processor.js +89 -156
  7. package/dist/esm/activities/chat/stream/processor.js.map +1 -1
  8. package/dist/esm/activities/chat/tools/tool-calls.d.ts +22 -21
  9. package/dist/esm/activities/chat/tools/tool-calls.js +40 -27
  10. package/dist/esm/activities/chat/tools/tool-calls.js.map +1 -1
  11. package/dist/esm/activities/generateImage/index.js +41 -1
  12. package/dist/esm/activities/generateImage/index.js.map +1 -1
  13. package/dist/esm/activities/generateSpeech/index.js +33 -1
  14. package/dist/esm/activities/generateSpeech/index.js.map +1 -1
  15. package/dist/esm/activities/generateTranscription/index.js +29 -1
  16. package/dist/esm/activities/generateTranscription/index.js.map +1 -1
  17. package/dist/esm/activities/generateVideo/index.js +50 -0
  18. package/dist/esm/activities/generateVideo/index.js.map +1 -1
  19. package/dist/esm/activities/summarize/index.js +9 -8
  20. package/dist/esm/activities/summarize/index.js.map +1 -1
  21. package/dist/esm/event-client.d.ts +378 -254
  22. package/dist/esm/event-client.js.map +1 -1
  23. package/dist/esm/index.d.ts +2 -2
  24. package/dist/esm/stream-to-response.d.ts +1 -1
  25. package/dist/esm/stream-to-response.js +5 -3
  26. package/dist/esm/stream-to-response.js.map +1 -1
  27. package/dist/esm/types.d.ts +162 -46
  28. package/package.json +1 -1
  29. package/src/activities/chat/index.ts +267 -191
  30. package/src/activities/chat/stream/index.ts +1 -5
  31. package/src/activities/chat/stream/processor.ts +128 -269
  32. package/src/activities/chat/tools/tool-calls.ts +55 -49
  33. package/src/activities/generateImage/index.ts +47 -2
  34. package/src/activities/generateSpeech/index.ts +37 -1
  35. package/src/activities/generateTranscription/index.ts +33 -1
  36. package/src/activities/generateVideo/index.ts +54 -0
  37. package/src/activities/summarize/index.ts +10 -9
  38. package/src/event-client.ts +460 -256
  39. package/src/index.ts +2 -3
  40. package/src/stream-to-response.ts +8 -6
  41. package/src/types.ts +209 -65
@@ -1,10 +1,11 @@
1
1
  import { EventClient } from '@tanstack/devtools-event-client'
2
+ import type { MessagePart, ToolCall } from './types'
2
3
 
3
4
  /**
4
5
  * Tool call states - track the lifecycle of a tool call
5
6
  * Must match @tanstack/ai-client ToolCallState
6
7
  */
7
- type ToolCallState =
8
+ export type ToolCallState =
8
9
  | 'awaiting-input' // Received start but no arguments yet
9
10
  | 'input-streaming' // Partial arguments received
10
11
  | 'input-complete' // All arguments received
@@ -15,269 +16,472 @@ type ToolCallState =
15
16
  * Tool result states - track the lifecycle of a tool result
16
17
  * Must match @tanstack/ai-client ToolResultState
17
18
  */
18
- type ToolResultState =
19
+ export type ToolResultState =
19
20
  | 'streaming' // Placeholder for future streamed output
20
21
  | 'complete' // Result is complete
21
22
  | 'error' // Error occurred
22
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
+
23
431
  export interface AIDevtoolsEventMap {
24
- // AI Stream events - from @tanstack/ai package
25
- 'tanstack-ai-devtools:stream:started': {
26
- streamId: string
27
- model: string
28
- provider: string
29
- timestamp: number
30
- clientId?: string
31
- }
32
- 'tanstack-ai-devtools:stream:chunk:content': {
33
- streamId: string
34
- messageId?: string
35
- content: string
36
- delta?: string
37
- timestamp: number
38
- }
39
- 'tanstack-ai-devtools:stream:chunk:tool-call': {
40
- streamId: string
41
- messageId?: string
42
- toolCallId: string
43
- toolName: string
44
- index: number
45
- arguments: string
46
- timestamp: number
47
- }
48
- 'tanstack-ai-devtools:stream:chunk:tool-result': {
49
- streamId: string
50
- messageId?: string
51
- toolCallId: string
52
- result: string
53
- timestamp: number
54
- }
55
- 'tanstack-ai-devtools:stream:chunk:done': {
56
- streamId: string
57
- messageId?: string
58
- finishReason: string | null
59
- usage?: {
60
- promptTokens: number
61
- completionTokens: number
62
- totalTokens: number
63
- }
64
- timestamp: number
65
- }
66
- 'tanstack-ai-devtools:stream:chunk:error': {
67
- streamId: string
68
- messageId?: string
69
- error: string
70
- timestamp: number
71
- }
72
- 'tanstack-ai-devtools:stream:chunk:thinking': {
73
- streamId: string
74
- messageId?: string
75
- content: string
76
- delta?: string
77
- timestamp: number
78
- }
79
- 'tanstack-ai-devtools:stream:approval-requested': {
80
- streamId: string
81
- messageId?: string
82
- toolCallId: string
83
- toolName: string
84
- input: any
85
- approvalId: string
86
- timestamp: number
87
- }
88
- 'tanstack-ai-devtools:stream:tool-input-available': {
89
- streamId: string
90
- messageId?: string
91
- toolCallId: string
92
- toolName: string
93
- input: any
94
- timestamp: number
95
- }
96
- 'tanstack-ai-devtools:tool:call-completed': {
97
- requestId: string
98
- streamId: string
99
- messageId?: string
100
- toolCallId: string
101
- toolName: string
102
- result: any
103
- duration: number
104
- timestamp: number
105
- }
106
- 'tanstack-ai-devtools:stream:ended': {
107
- requestId: string
108
- streamId: string
109
- totalChunks: number
110
- duration: number
111
- timestamp: number
112
- }
113
- 'tanstack-ai-devtools:text:started': {
114
- requestId: string
115
- streamId: string
116
- provider: string
117
- model: string
118
- messageCount: number
119
- hasTools: boolean
120
- streaming: boolean
121
- timestamp: number
122
- clientId?: string
123
- toolNames?: Array<string>
124
- options?: Record<string, unknown>
125
- modelOptions?: Record<string, unknown>
126
- }
127
- 'tanstack-ai-devtools:text:completed': {
128
- requestId: string
129
- streamId: string
130
- model: string
131
- content: string
132
- messageId?: string
133
- finishReason?: string
134
- usage?: {
135
- promptTokens: number
136
- completionTokens: number
137
- totalTokens: number
138
- }
139
- timestamp: number
140
- }
141
- 'tanstack-ai-devtools:text:iteration': {
142
- requestId: string
143
- streamId: string
144
- iterationNumber: number
145
- messageCount: number
146
- toolCallCount: number
147
- timestamp: number
148
- }
149
- 'tanstack-ai-devtools:usage:tokens': {
150
- requestId: string
151
- streamId: string
152
- model: string
153
- messageId?: string
154
- usage: {
155
- promptTokens: number
156
- completionTokens: number
157
- totalTokens: number
158
- }
159
- timestamp: number
160
- }
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
161
452
 
162
453
  // Summarize events
163
- 'tanstack-ai-devtools:summarize:started': {
164
- requestId: string
165
- model: string
166
- inputLength: number
167
- timestamp: number
168
- clientId?: string
169
- }
170
- 'tanstack-ai-devtools:summarize:completed': {
171
- requestId: string
172
- model: string
173
- inputLength: number
174
- outputLength: number
175
- duration: number
176
- timestamp: number
177
- }
454
+ 'tanstack-ai-devtools:summarize:request:started': SummarizeRequestStartedEvent
455
+ 'tanstack-ai-devtools:summarize:request:completed': SummarizeRequestCompletedEvent
456
+ 'tanstack-ai-devtools:summarize:usage': SummarizeUsageEvent
178
457
 
179
- // Text Client events - from @tanstack/ai-client package
180
- 'tanstack-ai-devtools:client:created': {
181
- clientId: string
182
- initialMessageCount: number
183
- timestamp: number
184
- }
185
- 'tanstack-ai-devtools:client:message-appended': {
186
- clientId: string
187
- messageId: string
188
- role: 'user' | 'assistant' | 'system' | 'tool'
189
- contentPreview: string
190
- timestamp: number
191
- }
192
- 'tanstack-ai-devtools:client:message-sent': {
193
- clientId: string
194
- messageId: string
195
- content: string
196
- timestamp: number
197
- }
198
- 'tanstack-ai-devtools:client:loading-changed': {
199
- clientId: string
200
- isLoading: boolean
201
- timestamp: number
202
- }
203
- 'tanstack-ai-devtools:client:error-changed': {
204
- clientId: string
205
- error: string | null
206
- timestamp: number
207
- }
208
- 'tanstack-ai-devtools:client:messages-cleared': {
209
- clientId: string
210
- timestamp: number
211
- }
212
- 'tanstack-ai-devtools:client:reloaded': {
213
- clientId: string
214
- fromMessageIndex: number
215
- timestamp: number
216
- }
217
- 'tanstack-ai-devtools:client:stopped': {
218
- clientId: string
219
- timestamp: number
220
- }
221
- 'tanstack-ai-devtools:tool:result-added': {
222
- clientId: string
223
- toolCallId: string
224
- toolName: string
225
- output: any
226
- state: 'output-available' | 'output-error'
227
- timestamp: number
228
- }
229
- 'tanstack-ai-devtools:tool:approval-responded': {
230
- clientId: string
231
- approvalId: string
232
- toolCallId: string
233
- approved: boolean
234
- timestamp: number
235
- }
236
- 'tanstack-ai-devtools:processor:text-updated': {
237
- streamId: string
238
- content: string
239
- timestamp: number
240
- }
241
- 'tanstack-ai-devtools:processor:tool-call-state-changed': {
242
- streamId: string
243
- toolCallId: string
244
- toolName: string
245
- state: ToolCallState
246
- arguments: any
247
- timestamp: number
248
- }
249
- 'tanstack-ai-devtools:processor:tool-result-state-changed': {
250
- streamId: string
251
- toolCallId: string
252
- content: any
253
- state: ToolResultState
254
- error?: string
255
- timestamp: number
256
- }
257
- 'tanstack-ai-devtools:client:assistant-message-updated': {
258
- clientId: string
259
- messageId: string
260
- content: string
261
- timestamp: number
262
- }
263
- 'tanstack-ai-devtools:client:tool-call-updated': {
264
- clientId: string
265
- messageId: string
266
- toolCallId: string
267
- toolName: string
268
- state: ToolCallState
269
- arguments: any
270
- timestamp: number
271
- }
272
- 'tanstack-ai-devtools:client:approval-requested': {
273
- clientId: string
274
- messageId: string
275
- toolCallId: string
276
- toolName: string
277
- input: any
278
- approvalId: string
279
- timestamp: number
280
- }
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
281
485
  }
282
486
 
283
487
  class AiEventClient extends EventClient<AIDevtoolsEventMap> {