@tanstack/ai 0.39.1 → 0.41.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 (64) hide show
  1. package/dist/esm/activities/chat/index.d.ts +2 -2
  2. package/dist/esm/activities/chat/index.js +20 -3
  3. package/dist/esm/activities/chat/index.js.map +1 -1
  4. package/dist/esm/activities/chat/messages.js +7 -0
  5. package/dist/esm/activities/chat/messages.js.map +1 -1
  6. package/dist/esm/activities/chat/middleware/compose.d.ts +2 -2
  7. package/dist/esm/activities/chat/middleware/compose.js.map +1 -1
  8. package/dist/esm/activities/chat/middleware/index.d.ts +1 -1
  9. package/dist/esm/activities/chat/middleware/sandbox-runtime.d.ts +7 -2
  10. package/dist/esm/activities/chat/middleware/sandbox-runtime.js.map +1 -1
  11. package/dist/esm/activities/chat/middleware/types.d.ts +16 -4
  12. package/dist/esm/activities/chat/stream/message-updaters.d.ts +2 -0
  13. package/dist/esm/activities/chat/stream/message-updaters.js +3 -1
  14. package/dist/esm/activities/chat/stream/message-updaters.js.map +1 -1
  15. package/dist/esm/activities/chat/stream/processor.js +18 -1
  16. package/dist/esm/activities/chat/stream/processor.js.map +1 -1
  17. package/dist/esm/activities/chat/tools/tool-definition.d.ts +14 -11
  18. package/dist/esm/activities/chat/tools/tool-definition.js.map +1 -1
  19. package/dist/esm/activities/generateAudio/index.d.ts +1 -1
  20. package/dist/esm/activities/generateAudio/index.js.map +1 -1
  21. package/dist/esm/activities/generateImage/index.d.ts +1 -1
  22. package/dist/esm/activities/generateImage/index.js +1 -1
  23. package/dist/esm/activities/generateImage/index.js.map +1 -1
  24. package/dist/esm/activities/generateSpeech/index.d.ts +1 -1
  25. package/dist/esm/activities/generateSpeech/index.js.map +1 -1
  26. package/dist/esm/activities/generateTranscription/index.d.ts +3 -3
  27. package/dist/esm/activities/generateTranscription/index.js.map +1 -1
  28. package/dist/esm/activities/generateVideo/index.d.ts +12 -12
  29. package/dist/esm/activities/generateVideo/index.js.map +1 -1
  30. package/dist/esm/index.d.ts +3 -3
  31. package/dist/esm/index.js +2 -0
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/realtime/event-emitter.d.ts +5 -0
  34. package/dist/esm/realtime/event-emitter.js +27 -0
  35. package/dist/esm/realtime/event-emitter.js.map +1 -0
  36. package/dist/esm/realtime/index.d.ts +1 -0
  37. package/dist/esm/realtime/index.js.map +1 -1
  38. package/dist/esm/realtime/types.d.ts +9 -1
  39. package/dist/esm/types.d.ts +124 -1
  40. package/package.json +1 -1
  41. package/skills/ai-core/adapter-configuration/SKILL.md +10 -0
  42. package/skills/ai-core/ag-ui-protocol/SKILL.md +59 -0
  43. package/skills/ai-core/media-generation/SKILL.md +50 -5
  44. package/skills/ai-core/middleware/SKILL.md +106 -0
  45. package/skills/ai-core/tool-calling/SKILL.md +13 -1
  46. package/src/activities/chat/index.ts +26 -6
  47. package/src/activities/chat/messages.ts +9 -0
  48. package/src/activities/chat/middleware/compose.ts +2 -2
  49. package/src/activities/chat/middleware/index.ts +1 -0
  50. package/src/activities/chat/middleware/sandbox-runtime.ts +4 -2
  51. package/src/activities/chat/middleware/types.ts +17 -4
  52. package/src/activities/chat/stream/message-updaters.ts +7 -1
  53. package/src/activities/chat/stream/processor.ts +30 -2
  54. package/src/activities/chat/tools/tool-definition.ts +33 -11
  55. package/src/activities/generateAudio/index.ts +2 -2
  56. package/src/activities/generateImage/index.ts +2 -2
  57. package/src/activities/generateSpeech/index.ts +2 -2
  58. package/src/activities/generateTranscription/index.ts +8 -4
  59. package/src/activities/generateVideo/index.ts +29 -15
  60. package/src/index.ts +3 -1
  61. package/src/realtime/event-emitter.ts +46 -0
  62. package/src/realtime/index.ts +2 -0
  63. package/src/realtime/types.ts +9 -0
  64. package/src/types.ts +116 -1
@@ -4,6 +4,8 @@ import type { AnyClientTool } from '../activities/chat/tools/tool-definition'
4
4
  // Token Types
5
5
  // ============================================================================
6
6
 
7
+ import type { UsageInfo } from '../activities/chat/middleware/types'
8
+
7
9
  /**
8
10
  * Voice activity detection configuration
9
11
  */
@@ -24,6 +26,7 @@ export interface RealtimeToolConfig {
24
26
  name: string
25
27
  description: string
26
28
  inputSchema?: Record<string, any>
29
+ outputSchema?: Record<string, any>
27
30
  }
28
31
 
29
32
  /**
@@ -246,6 +249,8 @@ export type RealtimeEvent =
246
249
  | 'message_complete'
247
250
  | 'interrupted'
248
251
  | 'error'
252
+ | 'go_away' // Event that signals that the current connection will soon be terminated
253
+ | 'usage'
249
254
 
250
255
  /**
251
256
  * Event payloads for realtime events
@@ -263,6 +268,8 @@ export interface RealtimeEventPayloads {
263
268
  message_complete: { message: RealtimeMessage }
264
269
  interrupted: { messageId?: string }
265
270
  error: { error: Error }
271
+ go_away: { timeLeft?: string }
272
+ usage: UsageInfo
266
273
  }
267
274
 
268
275
  /**
@@ -355,6 +362,8 @@ export interface RealtimeConnection {
355
362
  // Session management
356
363
  /** Update session configuration */
357
364
  updateSession: (config: Partial<RealtimeSessionConfig>) => void
365
+ /** Update the ephemeral token (e.g. on refresh); provider may reconnect */
366
+ updateToken?: (token: RealtimeToken) => void
358
367
  /** Interrupt the current response */
359
368
  interrupt: () => void
360
369
 
package/src/types.ts CHANGED
@@ -372,6 +372,15 @@ export interface ToolCallPart<TMetadata = unknown> {
372
372
  id: string
373
373
  name: string
374
374
  arguments: string // JSON string (may be incomplete)
375
+ /**
376
+ * Parsed tool input. Set from the parsed arguments once they are complete
377
+ * (`state: 'input-complete'` and later). `undefined` while the raw
378
+ * `arguments` string is still streaming, and may stay `undefined` for a call
379
+ * that terminates in an error state — the raw `arguments` string is always
380
+ * available as a fallback. Typed per-tool on the client `ToolCallPart` (see
381
+ * `@tanstack/ai-client`); `unknown` on this base type.
382
+ */
383
+ input?: unknown
375
384
  state: ToolCallState
376
385
  /** Approval metadata if tool requires user approval */
377
386
  approval?: {
@@ -1381,6 +1390,105 @@ export interface UIResourceEvent extends CustomEvent {
1381
1390
  }
1382
1391
  }
1383
1392
 
1393
+ // ── Sandbox events ──────────────────────────────────────────────────────────
1394
+ export interface SandboxFileCustomEvent extends CustomEvent {
1395
+ name: 'sandbox.file'
1396
+ value: {
1397
+ type: 'create' | 'change' | 'delete'
1398
+ path: string
1399
+ timestamp: number
1400
+ }
1401
+ }
1402
+ export interface SandboxFileDiffEvent extends CustomEvent {
1403
+ name: 'sandbox.file.diff'
1404
+ value: { path: string; diff: string }
1405
+ }
1406
+
1407
+ // ── Harness events ──────────────────────────────────────────────────────────
1408
+ export interface FileChangedEvent extends CustomEvent {
1409
+ name: 'file.changed'
1410
+ value: { path: string; diff: string }
1411
+ }
1412
+ export interface SessionIdEvent extends CustomEvent {
1413
+ name: `${string}.session-id`
1414
+ value: { sessionId: string }
1415
+ }
1416
+
1417
+ // ── Code-mode events ────────────────────────────────────────────────────────
1418
+ export interface CodeModeExecutionStartedEvent extends CustomEvent {
1419
+ name: 'code_mode:execution_started'
1420
+ value: { timestamp: number; codeLength: number }
1421
+ }
1422
+ export interface CodeModeConsoleEvent extends CustomEvent {
1423
+ name: 'code_mode:console'
1424
+ value: {
1425
+ level: 'log' | 'warn' | 'error' | 'info'
1426
+ message: string
1427
+ timestamp: number
1428
+ }
1429
+ }
1430
+ export interface CodeModeExternalCallEvent extends CustomEvent {
1431
+ name: 'code_mode:external_call'
1432
+ value: { function: string; args: unknown; timestamp: number }
1433
+ }
1434
+ export interface CodeModeExternalResultEvent extends CustomEvent {
1435
+ name: 'code_mode:external_result'
1436
+ value: { function: string; result: unknown; duration: number }
1437
+ }
1438
+ export interface CodeModeExternalErrorEvent extends CustomEvent {
1439
+ name: 'code_mode:external_error'
1440
+ value: { function: string; error: string; duration: number }
1441
+ }
1442
+ export interface CodeModeSkillCallEvent extends CustomEvent {
1443
+ name: 'code_mode:skill_call'
1444
+ value: { skill: string; input: unknown; timestamp: number }
1445
+ }
1446
+ export interface CodeModeSkillResultEvent extends CustomEvent {
1447
+ name: 'code_mode:skill_result'
1448
+ value: { skill: string; result: unknown; duration: number; timestamp: number }
1449
+ }
1450
+ export interface CodeModeSkillErrorEvent extends CustomEvent {
1451
+ name: 'code_mode:skill_error'
1452
+ value: { skill: string; error: string; duration: number; timestamp: number }
1453
+ }
1454
+ export interface SkillRegisteredEvent extends CustomEvent {
1455
+ name: 'skill:registered'
1456
+ value: { id: string; name: string; description: string; timestamp: number }
1457
+ }
1458
+
1459
+ /**
1460
+ * Every CUSTOM event TanStack AI itself emits, as a discriminated union on
1461
+ * `name`. User-emitted custom events (via `emitCustomEvent` with a custom name)
1462
+ * are intentionally absent — they still flow at runtime.
1463
+ */
1464
+ export type KnownCustomEvent =
1465
+ | SandboxFileCustomEvent
1466
+ | SandboxFileDiffEvent
1467
+ | FileChangedEvent
1468
+ | SessionIdEvent
1469
+ | CodeModeExecutionStartedEvent
1470
+ | CodeModeConsoleEvent
1471
+ | CodeModeExternalCallEvent
1472
+ | CodeModeExternalResultEvent
1473
+ | CodeModeExternalErrorEvent
1474
+ | CodeModeSkillCallEvent
1475
+ | CodeModeSkillResultEvent
1476
+ | CodeModeSkillErrorEvent
1477
+ | SkillRegisteredEvent
1478
+ | StructuredOutputStartEvent
1479
+ | StructuredOutputCompleteEvent
1480
+ | ApprovalRequestedEvent
1481
+ | ToolInputAvailableEvent
1482
+ | UIResourceEvent
1483
+
1484
+ /** The default chat streaming result: standard chunks plus every typed
1485
+ * framework CUSTOM event, with the `value: any` catch-all excluded so
1486
+ * literal-`name` narrowing types `value`. User-emitted custom names are typed
1487
+ * out (still flow at runtime — branch outside the name narrows or cast). */
1488
+ export type ChatStream = AsyncIterable<
1489
+ Exclude<StreamChunk, CustomEvent> | KnownCustomEvent
1490
+ >
1491
+
1384
1492
  /**
1385
1493
  * Public type for streams returned by `chat({ outputSchema, stream: true })`.
1386
1494
  *
@@ -1930,6 +2038,13 @@ export interface TTSResult {
1930
2038
  * Options for audio transcription.
1931
2039
  * These are the common options supported across providers.
1932
2040
  */
2041
+ export type TranscriptionResponseFormat =
2042
+ | 'json'
2043
+ | 'text'
2044
+ | 'srt'
2045
+ | 'verbose_json'
2046
+ | 'vtt'
2047
+
1933
2048
  export interface TranscriptionOptions<
1934
2049
  TProviderOptions extends object = object,
1935
2050
  > {
@@ -1942,7 +2057,7 @@ export interface TranscriptionOptions<
1942
2057
  /** An optional prompt to guide the transcription */
1943
2058
  prompt?: string
1944
2059
  /** The format of the transcription output */
1945
- responseFormat?: 'json' | 'text' | 'srt' | 'verbose_json' | 'vtt'
2060
+ responseFormat?: TranscriptionResponseFormat
1946
2061
  /** Model-specific options for transcription */
1947
2062
  modelOptions?: TProviderOptions
1948
2063
  /**