@tanstack/ai 0.46.0 → 0.47.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.
Files changed (66) hide show
  1. package/dist/esm/activities/chat/index.d.ts +36 -11
  2. package/dist/esm/activities/chat/index.js +440 -79
  3. package/dist/esm/activities/chat/index.js.map +1 -1
  4. package/dist/esm/activities/chat/messages.d.ts +1 -0
  5. package/dist/esm/activities/chat/messages.js +12 -7
  6. package/dist/esm/activities/chat/messages.js.map +1 -1
  7. package/dist/esm/activities/chat/middleware/builder.d.ts +7 -2
  8. package/dist/esm/activities/chat/middleware/builder.js.map +1 -1
  9. package/dist/esm/activities/chat/middleware/compose.d.ts +10 -3
  10. package/dist/esm/activities/chat/middleware/compose.js +55 -0
  11. package/dist/esm/activities/chat/middleware/compose.js.map +1 -1
  12. package/dist/esm/activities/chat/middleware/define.d.ts +6 -3
  13. package/dist/esm/activities/chat/middleware/define.js.map +1 -1
  14. package/dist/esm/activities/chat/middleware/generic-interrupts.d.ts +13 -0
  15. package/dist/esm/activities/chat/middleware/generic-interrupts.js +8 -0
  16. package/dist/esm/activities/chat/middleware/generic-interrupts.js.map +1 -0
  17. package/dist/esm/activities/chat/middleware/index.d.ts +4 -1
  18. package/dist/esm/activities/chat/middleware/types.d.ts +54 -3
  19. package/dist/esm/activities/chat/middleware/types.js +16 -0
  20. package/dist/esm/activities/chat/middleware/types.js.map +1 -0
  21. package/dist/esm/activities/chat/stream/processor.js +18 -5
  22. package/dist/esm/activities/chat/stream/processor.js.map +1 -1
  23. package/dist/esm/adapter-internals.d.ts +6 -0
  24. package/dist/esm/adapter-internals.js +4 -1
  25. package/dist/esm/client.d.ts +4 -0
  26. package/dist/esm/client.js +3 -1
  27. package/dist/esm/client.js.map +1 -1
  28. package/dist/esm/generic-interrupt-continuation.d.ts +45 -0
  29. package/dist/esm/generic-interrupt-continuation.js +80 -0
  30. package/dist/esm/generic-interrupt-continuation.js.map +1 -0
  31. package/dist/esm/index.d.ts +6 -1
  32. package/dist/esm/index.js +4 -1
  33. package/dist/esm/interrupt-definition.d.ts +113 -0
  34. package/dist/esm/interrupt-definition.js +169 -0
  35. package/dist/esm/interrupt-definition.js.map +1 -0
  36. package/dist/esm/interrupt-resume.d.ts +3 -0
  37. package/dist/esm/interrupt-resume.js +77 -16
  38. package/dist/esm/interrupt-resume.js.map +1 -1
  39. package/dist/esm/interrupts.d.ts +12 -3
  40. package/dist/esm/interrupts.js.map +1 -1
  41. package/dist/esm/types.d.ts +11 -3
  42. package/dist/esm/utilities/chat-params.js +10 -1
  43. package/dist/esm/utilities/chat-params.js.map +1 -1
  44. package/package.json +3 -3
  45. package/skills/ai-core/media-generation/SKILL.md +4 -1
  46. package/skills/ai-core/middleware/SKILL.md +53 -44
  47. package/skills/ai-core/structured-outputs/SKILL.md +59 -55
  48. package/skills/ai-core/tool-calling/SKILL.md +54 -1
  49. package/src/activities/chat/index.ts +1030 -211
  50. package/src/activities/chat/messages.ts +11 -3
  51. package/src/activities/chat/middleware/builder.ts +29 -4
  52. package/src/activities/chat/middleware/compose.ts +95 -5
  53. package/src/activities/chat/middleware/define.ts +13 -3
  54. package/src/activities/chat/middleware/generic-interrupts.ts +26 -0
  55. package/src/activities/chat/middleware/index.ts +15 -0
  56. package/src/activities/chat/middleware/types.ts +127 -2
  57. package/src/activities/chat/stream/processor.ts +21 -0
  58. package/src/adapter-internals.ts +20 -0
  59. package/src/client.ts +20 -0
  60. package/src/generic-interrupt-continuation.ts +162 -0
  61. package/src/index.ts +34 -0
  62. package/src/interrupt-definition.ts +581 -0
  63. package/src/interrupt-resume.ts +156 -25
  64. package/src/interrupts.ts +13 -3
  65. package/src/types.ts +11 -3
  66. package/src/utilities/chat-params.ts +16 -3
@@ -1,3 +1,4 @@
1
+ import { InterruptDefinition } from '../../interrupt-definition.js';
1
2
  import { AnyTextAdapter } from './adapter.js';
2
3
  import { AnyTool, ConstrainedModelMessage, InferSchemaType, LazyToolsConfig, ModelMessage, ProviderTool, SchemaInput, StructuredOutputStream, TextOptions, TypedStreamChunk, UIMessage } from '../../types.js';
3
4
  import { AnyChatMiddleware, ChatMiddleware } from './middleware/types.js';
@@ -19,19 +20,36 @@ type ContextFromInputs<TTools, TMiddleware> = MergeContext<ContextFromArray<NonN
19
20
  type InferredContext<TTools, TMiddleware> = [
20
21
  ContextFromInputs<TTools, TMiddleware>
21
22
  ] extends [never] ? unknown : ContextFromInputs<TTools, TMiddleware>;
22
- type RequiredContextFromInputs<TTools, TMiddleware> = [
23
- ContextFromInputs<TTools, TMiddleware>
23
+ type RegistryInterrupt<TInterrupts extends ReadonlyArray<InterruptDefinition<any, any, any, any>>> = [TInterrupts[number]] extends [never] ? never : TInterrupts[number];
24
+ type DuplicateInterruptDefinitionId<TInterrupts extends ReadonlyArray<InterruptDefinition<any, any, any, any>>, TSeenIds extends string = never> = TInterrupts extends readonly [infer THead, ...infer TTail] ? THead extends InterruptDefinition<infer TId, any, any, any> ? string extends TId ? TTail extends ReadonlyArray<InterruptDefinition<any, any, any, any>> ? DuplicateInterruptDefinitionId<TTail, TSeenIds> : never : TId extends TSeenIds ? TId : TTail extends ReadonlyArray<InterruptDefinition<any, any, any, any>> ? DuplicateInterruptDefinitionId<TTail, TSeenIds | TId> : never : never : never;
25
+ type CheckUniqueInterruptDefinitions<TInterrupts extends ReadonlyArray<InterruptDefinition<any, any, any, any>>> = [DuplicateInterruptDefinitionId<TInterrupts>] extends [never] ? unknown : {
26
+ readonly '✖ Duplicate interrupt definition id in chat({ interrupts }).': never;
27
+ };
28
+ type InlineChatContext<TTools, TContext> = MergeContext<ContextFromArray<NonNullable<TTools>>, TContext>;
29
+ type RegistryChatMiddleware<TContext, TInterrupts extends ReadonlyArray<InterruptDefinition<any, any, any, any>>> = ChatMiddleware<TContext, RegistryInterrupt<TInterrupts>>;
30
+ type MiddlewareInterruptDefinitions<TMiddleware> = TMiddleware extends ReadonlyArray<infer TMiddlewareItem> ? TMiddlewareItem extends ChatMiddleware<any, infer TDefinitions> ? TDefinitions : never : never;
31
+ type IsAny<TValue> = 0 extends 1 & TValue ? true : false;
32
+ type CheckInterruptRegistry<TInterrupts extends ReadonlyArray<InterruptDefinition<any, any, any, any>>, TMiddleware> = IsAny<MiddlewareInterruptDefinitions<TMiddleware>> extends true ? unknown : [MiddlewareInterruptDefinitions<TMiddleware>] extends [never] ? unknown : [
33
+ Exclude<MiddlewareInterruptDefinitions<TMiddleware>, RegistryInterrupt<TInterrupts>>
34
+ ] extends [never] ? unknown : {
35
+ readonly '✖ Middleware emits an interrupt definition that is not registered in chat({ interrupts }).': never;
36
+ };
37
+ type RuntimeContextOption<TTools, TMiddleware, TContext> = [
38
+ MergeContext<ContextFromInputs<TTools, TMiddleware>, TContext>
24
39
  ] extends [never] ? {
25
- context?: unknown;
26
- } : undefined extends ContextFromInputs<TTools, TMiddleware> ? {
27
- context?: ContextFromInputs<TTools, TMiddleware>;
40
+ context?: TContext;
41
+ } : undefined extends MergeContext<ContextFromInputs<TTools, TMiddleware>, TContext> ? {
42
+ context?: MergeContext<ContextFromInputs<TTools, TMiddleware>, TContext>;
28
43
  } : {
29
- context: ContextFromInputs<TTools, TMiddleware>;
44
+ context: MergeContext<ContextFromInputs<TTools, TMiddleware>, TContext>;
30
45
  };
31
- type TextActivityOptionsWithContext<TAdapter extends AnyTextAdapter, TSchema extends SchemaInput | undefined, TStream extends boolean, TTools extends TextActivityOptions<TAdapter, TSchema, TStream, any>['tools'], TMiddleware extends TextActivityOptions<TAdapter, TSchema, TStream, any>['middleware']> = Omit<TextActivityOptions<TAdapter, TSchema, TStream, any>, 'tools' | 'middleware' | 'context'> & {
46
+ type ExactMiddlewareOption<TTools, TContext, TInterrupts extends ReadonlyArray<InterruptDefinition<any, any, any, any>>, TMiddleware extends Array<unknown> | undefined> = [TMiddleware] extends [undefined] ? Array<RegistryChatMiddleware<InlineChatContext<TTools, TContext>, NoInfer<TInterrupts>>> : TMiddleware & (TMiddleware extends Array<RegistryChatMiddleware<InlineChatContext<TTools, NoInfer<TContext>>, NoInfer<TInterrupts>>> ? Array<RegistryChatMiddleware<InlineChatContext<TTools, TContext>, NoInfer<TInterrupts>>> : CheckInterruptRegistry<TInterrupts, TMiddleware>) & CheckCoverage<Extract<TMiddleware, ReadonlyArray<AnyChatMiddleware>>>;
47
+ type TextActivityOptionsWithContext<TAdapter extends AnyTextAdapter, TSchema extends SchemaInput | undefined, TStream extends boolean, TTools extends TextActivityOptions<TAdapter, TSchema, TStream, any>['tools'], TInterrupts extends ReadonlyArray<InterruptDefinition<any, any, any, any>> = [
48
+ ], TContext = unknown, TMiddleware extends Array<unknown> | undefined = undefined> = Omit<TextActivityOptions<TAdapter, TSchema, TStream, any>, 'tools' | 'middleware' | 'context' | 'interrupts'> & {
32
49
  tools?: TTools;
33
- middleware?: TMiddleware & CheckCoverage<Extract<TMiddleware, ReadonlyArray<AnyChatMiddleware>>>;
34
- } & RequiredContextFromInputs<TTools, TMiddleware>;
50
+ interrupts?: TInterrupts & CheckUniqueInterruptDefinitions<TInterrupts>;
51
+ middleware?: ExactMiddlewareOption<TTools, TContext, TInterrupts, TMiddleware>;
52
+ } & RuntimeContextOption<TTools, TMiddleware, TContext>;
35
53
  /**
36
54
  * Options for the text activity.
37
55
  * Types are extracted directly from the adapter (which has pre-resolved generics).
@@ -168,6 +186,11 @@ export interface TextActivityOptions<TAdapter extends AnyTextAdapter, TSchema ex
168
186
  * ```
169
187
  */
170
188
  middleware?: Array<ChatMiddleware<TContext>>;
189
+ /**
190
+ * First-party generic interrupt definitions for this chat call.
191
+ * Register the same definitions on the client to type payloads and answers.
192
+ */
193
+ interrupts?: ReadonlyArray<InterruptDefinition<any, any, any, any>>;
171
194
  /**
172
195
  * Runtime context value passed to middleware hooks and server tools.
173
196
  */
@@ -193,8 +216,10 @@ export interface TextActivityOptions<TAdapter extends AnyTextAdapter, TSchema ex
193
216
  * const stream = chat({ ...chatOptions, messages })
194
217
  * ```
195
218
  */
196
- export declare function createChatOptions<TAdapter extends AnyTextAdapter, TSchema extends SchemaInput | undefined = undefined, TStream extends boolean = true, const TTools extends TextActivityOptions<TAdapter, TSchema, TStream, any>['tools'] = TextActivityOptions<TAdapter, TSchema, TStream, any>['tools'], const TMiddleware extends TextActivityOptions<TAdapter, TSchema, TStream, any>['middleware'] = TextActivityOptions<TAdapter, TSchema, TStream, any>['middleware']>(options: TextActivityOptionsWithContext<TAdapter, TSchema, TStream, TTools, TMiddleware>): Omit<TextActivityOptions<TAdapter, TSchema, TStream, InferredContext<TTools, TMiddleware>>, 'tools'> & {
219
+ export declare function createChatOptions<TAdapter extends AnyTextAdapter, TSchema extends SchemaInput | undefined = undefined, TStream extends boolean = true, const TTools extends TextActivityOptions<TAdapter, TSchema, TStream, any>['tools'] = TextActivityOptions<TAdapter, TSchema, TStream, any>['tools'], const TInterrupts extends ReadonlyArray<InterruptDefinition<any, any, any, any>> = [], TContext = unknown, const TMiddleware extends Array<unknown> | undefined = undefined>(options: TextActivityOptionsWithContext<TAdapter, TSchema, TStream, TTools, TInterrupts, TContext, TMiddleware>): Omit<TextActivityOptions<TAdapter, TSchema, TStream, InferredContext<TTools, TMiddleware>>, 'tools' | 'middleware' | 'interrupts'> & {
197
220
  tools?: TTools;
221
+ interrupts?: TInterrupts;
222
+ middleware?: ExactMiddlewareOption<TTools, TContext, TInterrupts, TMiddleware>;
198
223
  };
199
224
  /**
200
225
  * Result type for the text activity.
@@ -277,6 +302,6 @@ export type TextActivityResult<TSchema extends SchemaInput | undefined, TStream
277
302
  * // result is { summary: string, keyPoints: string[] }
278
303
  * ```
279
304
  */
280
- export declare function chat<TAdapter extends AnyTextAdapter, TSchema extends SchemaInput | undefined = undefined, TStream extends boolean = boolean, const TTools extends TextActivityOptions<TAdapter, TSchema, TStream, any>['tools'] = TextActivityOptions<TAdapter, TSchema, TStream, any>['tools'], const TMiddleware extends TextActivityOptions<TAdapter, TSchema, TStream, any>['middleware'] = TextActivityOptions<TAdapter, TSchema, TStream, any>['middleware']>(options: TextActivityOptionsWithContext<TAdapter, TSchema, TStream, TTools, TMiddleware>): TextActivityResult<TSchema, TStream, TTools>;
305
+ export declare function chat<TAdapter extends AnyTextAdapter, TSchema extends SchemaInput | undefined = undefined, TStream extends boolean = boolean, const TTools extends TextActivityOptions<TAdapter, TSchema, TStream, any>['tools'] = TextActivityOptions<TAdapter, TSchema, TStream, any>['tools'], const TInterrupts extends ReadonlyArray<InterruptDefinition<any, any, any, any>> = [], TContext = unknown, const TMiddleware extends Array<unknown> | undefined = undefined>(options: TextActivityOptionsWithContext<TAdapter, TSchema, TStream, TTools, TInterrupts, TContext, TMiddleware>): TextActivityResult<TSchema, TStream, TTools>;
281
306
  export type { TextAdapter, TextAdapterConfig, StructuredOutputOptions, StructuredOutputResult, } from './adapter.js';
282
307
  export { BaseTextAdapter } from './adapter.js';