@tanstack/ai 0.13.0 → 0.15.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 (81) hide show
  1. package/dist/esm/activities/chat/index.js +61 -9
  2. package/dist/esm/activities/chat/index.js.map +1 -1
  3. package/dist/esm/activities/chat/messages.js +22 -1
  4. package/dist/esm/activities/chat/messages.js.map +1 -1
  5. package/dist/esm/activities/chat/stream/message-updaters.d.ts +3 -2
  6. package/dist/esm/activities/chat/stream/message-updaters.js +7 -3
  7. package/dist/esm/activities/chat/stream/message-updaters.js.map +1 -1
  8. package/dist/esm/activities/chat/stream/processor.d.ts +21 -5
  9. package/dist/esm/activities/chat/stream/processor.js +107 -15
  10. package/dist/esm/activities/chat/stream/processor.js.map +1 -1
  11. package/dist/esm/activities/chat/stream/types.d.ts +4 -1
  12. package/dist/esm/activities/chat/tools/tool-calls.js +2 -1
  13. package/dist/esm/activities/chat/tools/tool-calls.js.map +1 -1
  14. package/dist/esm/activities/error-payload.d.ts +12 -0
  15. package/dist/esm/activities/error-payload.js +25 -0
  16. package/dist/esm/activities/error-payload.js.map +1 -0
  17. package/dist/esm/activities/generateAudio/adapter.d.ts +62 -0
  18. package/dist/esm/activities/generateAudio/adapter.js +14 -0
  19. package/dist/esm/activities/generateAudio/adapter.js.map +1 -0
  20. package/dist/esm/activities/generateAudio/index.d.ts +74 -0
  21. package/dist/esm/activities/generateAudio/index.js +80 -0
  22. package/dist/esm/activities/generateAudio/index.js.map +1 -0
  23. package/dist/esm/activities/generateImage/adapter.d.ts +1 -1
  24. package/dist/esm/activities/generateImage/adapter.js +1 -1
  25. package/dist/esm/activities/generateImage/adapter.js.map +1 -1
  26. package/dist/esm/activities/generateSpeech/adapter.d.ts +1 -1
  27. package/dist/esm/activities/generateSpeech/adapter.js +1 -1
  28. package/dist/esm/activities/generateSpeech/adapter.js.map +1 -1
  29. package/dist/esm/activities/generateSpeech/index.d.ts +3 -3
  30. package/dist/esm/activities/generateSpeech/index.js +11 -0
  31. package/dist/esm/activities/generateSpeech/index.js.map +1 -1
  32. package/dist/esm/activities/generateTranscription/adapter.d.ts +1 -1
  33. package/dist/esm/activities/generateTranscription/adapter.js +1 -1
  34. package/dist/esm/activities/generateTranscription/adapter.js.map +1 -1
  35. package/dist/esm/activities/generateTranscription/index.d.ts +3 -3
  36. package/dist/esm/activities/generateTranscription/index.js +11 -0
  37. package/dist/esm/activities/generateTranscription/index.js.map +1 -1
  38. package/dist/esm/activities/generateVideo/index.js +7 -7
  39. package/dist/esm/activities/generateVideo/index.js.map +1 -1
  40. package/dist/esm/activities/index.d.ts +5 -2
  41. package/dist/esm/activities/index.js +11 -6
  42. package/dist/esm/activities/index.js.map +1 -1
  43. package/dist/esm/activities/stream-generation-result.js +5 -6
  44. package/dist/esm/activities/stream-generation-result.js.map +1 -1
  45. package/dist/esm/adapter-internals.d.ts +1 -0
  46. package/dist/esm/adapter-internals.js +3 -1
  47. package/dist/esm/adapter-internals.js.map +1 -1
  48. package/dist/esm/index.d.ts +3 -2
  49. package/dist/esm/index.js +3 -0
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/middlewares/otel.d.ts +75 -0
  52. package/dist/esm/middlewares/otel.js +624 -0
  53. package/dist/esm/middlewares/otel.js.map +1 -0
  54. package/dist/esm/stream-to-response.js +3 -8
  55. package/dist/esm/stream-to-response.js.map +1 -1
  56. package/dist/esm/types.d.ts +71 -6
  57. package/package.json +15 -2
  58. package/skills/ai-core/media-generation/SKILL.md +154 -10
  59. package/src/activities/chat/index.ts +74 -11
  60. package/src/activities/chat/messages.ts +23 -1
  61. package/src/activities/chat/stream/message-updaters.ts +10 -3
  62. package/src/activities/chat/stream/processor.ts +140 -17
  63. package/src/activities/chat/stream/types.ts +4 -1
  64. package/src/activities/chat/tools/tool-calls.ts +3 -1
  65. package/src/activities/error-payload.ts +35 -0
  66. package/src/activities/generateAudio/adapter.ts +89 -0
  67. package/src/activities/generateAudio/index.ts +224 -0
  68. package/src/activities/generateImage/adapter.ts +1 -1
  69. package/src/activities/generateSpeech/adapter.ts +1 -1
  70. package/src/activities/generateSpeech/index.ts +17 -7
  71. package/src/activities/generateTranscription/adapter.ts +1 -1
  72. package/src/activities/generateTranscription/index.ts +27 -4
  73. package/src/activities/generateVideo/index.ts +8 -8
  74. package/src/activities/index.ts +22 -0
  75. package/src/activities/stream-generation-result.ts +6 -7
  76. package/src/adapter-internals.ts +1 -0
  77. package/src/index.ts +4 -0
  78. package/src/middlewares/index.ts +5 -0
  79. package/src/middlewares/otel.ts +861 -0
  80. package/src/stream-to-response.ts +5 -10
  81. package/src/types.ts +79 -5
@@ -1,3 +1,4 @@
1
+ import { toRunErrorPayload } from './activities/error-payload'
1
2
  import type { StreamChunk } from './types'
2
3
 
3
4
  /**
@@ -68,7 +69,7 @@ export function toServerSentEventsStream(
68
69
  }
69
70
 
70
71
  controller.close()
71
- } catch (error: any) {
72
+ } catch (error: unknown) {
72
73
  // Don't send error if aborted
73
74
  if (abortController?.signal.aborted) {
74
75
  controller.close()
@@ -81,10 +82,7 @@ export function toServerSentEventsStream(
81
82
  `data: ${JSON.stringify({
82
83
  type: 'RUN_ERROR',
83
84
  timestamp: Date.now(),
84
- error: {
85
- message: error.message || 'Unknown error occurred',
86
- code: error.code,
87
- },
85
+ error: toRunErrorPayload(error),
88
86
  })}\n\n`,
89
87
  ),
90
88
  )
@@ -190,7 +188,7 @@ export function toHttpStream(
190
188
  }
191
189
 
192
190
  controller.close()
193
- } catch (error: any) {
191
+ } catch (error: unknown) {
194
192
  // Don't send error if aborted
195
193
  if (abortController?.signal.aborted) {
196
194
  controller.close()
@@ -203,10 +201,7 @@ export function toHttpStream(
203
201
  `${JSON.stringify({
204
202
  type: 'RUN_ERROR',
205
203
  timestamp: Date.now(),
206
- error: {
207
- message: error.message || 'Unknown error occurred',
208
- code: error.code,
209
- },
204
+ error: toRunErrorPayload(error),
210
205
  })}\n`,
211
206
  ),
212
207
  )
package/src/types.ts CHANGED
@@ -297,6 +297,7 @@ export interface ModelMessage<
297
297
  name?: string
298
298
  toolCalls?: Array<ToolCall>
299
299
  toolCallId?: string
300
+ thinking?: Array<{ content: string; signature?: string }>
300
301
  }
301
302
 
302
303
  /**
@@ -335,6 +336,8 @@ export interface ToolResultPart {
335
336
  export interface ThinkingPart {
336
337
  type: 'thinking'
337
338
  content: string
339
+ stepId?: string
340
+ signature?: string
338
341
  }
339
342
 
340
343
  export type MessagePart =
@@ -987,6 +990,8 @@ export interface StepFinishedEvent extends AGUIStepFinishedEvent {
987
990
  delta?: string
988
991
  /** Full accumulated thinking content (TanStack AI internal) */
989
992
  content?: string
993
+ /** Provider signature for the thinking block */
994
+ signature?: string
990
995
  }
991
996
 
992
997
  /**
@@ -1219,14 +1224,28 @@ export interface ImageGenerationOptions<
1219
1224
  logger: InternalLogger
1220
1225
  }
1221
1226
 
1227
+ /**
1228
+ * Source of a generated media asset. Exactly one of `url` or `b64Json` is
1229
+ * present; the other is absent. Modeled as a mutually-exclusive union so the
1230
+ * type rejects `{}` and `{ url, b64Json }` together at compile time while
1231
+ * preserving the flat `.url` / `.b64Json` access patterns.
1232
+ */
1233
+ export type GeneratedMediaSource =
1234
+ | {
1235
+ /** URL to the generated asset (may be temporary) */
1236
+ url: string
1237
+ b64Json?: never
1238
+ }
1239
+ | {
1240
+ /** Base64-encoded asset data */
1241
+ b64Json: string
1242
+ url?: never
1243
+ }
1244
+
1222
1245
  /**
1223
1246
  * A single generated image
1224
1247
  */
1225
- export interface GeneratedImage {
1226
- /** Base64-encoded image data */
1227
- b64Json?: string
1228
- /** URL to the generated image (may be temporary) */
1229
- url?: string
1248
+ export type GeneratedImage = GeneratedMediaSource & {
1230
1249
  /** Revised prompt used by the model (if applicable) */
1231
1250
  revisedPrompt?: string
1232
1251
  }
@@ -1249,6 +1268,61 @@ export interface ImageGenerationResult {
1249
1268
  }
1250
1269
  }
1251
1270
 
1271
+ // ============================================================================
1272
+ // Audio Generation Types
1273
+ // ============================================================================
1274
+
1275
+ /**
1276
+ * Options for audio generation (music, sound effects, etc.).
1277
+ * These are the common options supported across providers.
1278
+ */
1279
+ export interface AudioGenerationOptions<
1280
+ TProviderOptions extends object = object,
1281
+ > {
1282
+ /** The model to use for audio generation */
1283
+ model: string
1284
+ /** Text description of the desired audio */
1285
+ prompt: string
1286
+ /** Desired duration in seconds */
1287
+ duration?: number
1288
+ /** Model-specific options for audio generation */
1289
+ modelOptions?: TProviderOptions
1290
+ /**
1291
+ * Internal logger threaded from the generateAudio() entry point. Adapters
1292
+ * must call logger.request() before the SDK call and logger.errors() in
1293
+ * catch blocks.
1294
+ */
1295
+ logger: InternalLogger
1296
+ }
1297
+
1298
+ /**
1299
+ * A single generated audio output
1300
+ */
1301
+ export type GeneratedAudio = GeneratedMediaSource & {
1302
+ /** Content type of the audio (e.g., 'audio/wav', 'audio/mp3') */
1303
+ contentType?: string
1304
+ /** Duration of the generated audio in seconds */
1305
+ duration?: number
1306
+ }
1307
+
1308
+ /**
1309
+ * Result of audio generation
1310
+ */
1311
+ export interface AudioGenerationResult {
1312
+ /** Unique identifier for the generation */
1313
+ id: string
1314
+ /** Model used for generation */
1315
+ model: string
1316
+ /** The generated audio */
1317
+ audio: GeneratedAudio
1318
+ /** Token usage information (if available) */
1319
+ usage?: {
1320
+ inputTokens?: number
1321
+ outputTokens?: number
1322
+ totalTokens?: number
1323
+ }
1324
+ }
1325
+
1252
1326
  // ============================================================================
1253
1327
  // Video Generation Types (Experimental)
1254
1328
  // ============================================================================