@tanstack/ai 0.57.0 → 0.59.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 (95) hide show
  1. package/dist/esm/activities/chat/agents/define-agent.d.ts +81 -0
  2. package/dist/esm/activities/chat/agents/define-agent.js +34 -0
  3. package/dist/esm/activities/chat/agents/define-agent.js.map +1 -0
  4. package/dist/esm/activities/chat/agents/route.d.ts +53 -0
  5. package/dist/esm/activities/chat/agents/route.js +59 -0
  6. package/dist/esm/activities/chat/agents/route.js.map +1 -0
  7. package/dist/esm/activities/chat/agents/spawn.d.ts +124 -0
  8. package/dist/esm/activities/chat/agents/spawn.js +490 -0
  9. package/dist/esm/activities/chat/agents/spawn.js.map +1 -0
  10. package/dist/esm/activities/chat/agents/turn.d.ts +36 -0
  11. package/dist/esm/activities/chat/agents/turn.js +78 -0
  12. package/dist/esm/activities/chat/agents/turn.js.map +1 -0
  13. package/dist/esm/activities/chat/index.d.ts +13 -3
  14. package/dist/esm/activities/chat/index.js +345 -19
  15. package/dist/esm/activities/chat/index.js.map +1 -1
  16. package/dist/esm/activities/chat/messages.d.ts +7 -1
  17. package/dist/esm/activities/chat/messages.js +94 -18
  18. package/dist/esm/activities/chat/messages.js.map +1 -1
  19. package/dist/esm/activities/chat/middleware/run-store.d.ts +43 -7
  20. package/dist/esm/activities/chat/middleware/run-store.js +8 -1
  21. package/dist/esm/activities/chat/middleware/run-store.js.map +1 -1
  22. package/dist/esm/activities/chat/middleware/types.d.ts +50 -3
  23. package/dist/esm/activities/chat/middleware/types.js.map +1 -1
  24. package/dist/esm/activities/chat/stream/processor.d.ts +46 -0
  25. package/dist/esm/activities/chat/stream/processor.js +280 -7
  26. package/dist/esm/activities/chat/stream/processor.js.map +1 -1
  27. package/dist/esm/activities/chat/tools/tool-calls.d.ts +17 -3
  28. package/dist/esm/activities/chat/tools/tool-calls.js +56 -7
  29. package/dist/esm/activities/chat/tools/tool-calls.js.map +1 -1
  30. package/dist/esm/activities/generateAudio/index.js +1 -1
  31. package/dist/esm/activities/generateImage/index.js +1 -1
  32. package/dist/esm/activities/generateLiveVideo/index.js +1 -1
  33. package/dist/esm/activities/generateSpeech/index.js +1 -1
  34. package/dist/esm/activities/generateTranscription/index.js +1 -1
  35. package/dist/esm/activities/generateVoice/index.js +1 -1
  36. package/dist/esm/activities/generateWorld/index.js +1 -1
  37. package/dist/esm/activities/index.d.ts +3 -0
  38. package/dist/esm/activities/index.js +5 -3
  39. package/dist/esm/activities/summarize/index.js +1 -1
  40. package/dist/esm/client.d.ts +5 -36
  41. package/dist/esm/client.js +4 -37
  42. package/dist/esm/client.js.map +1 -1
  43. package/dist/esm/index.d.ts +5 -0
  44. package/dist/esm/index.js +7 -4
  45. package/dist/esm/middlewares/content-guard.js.map +1 -1
  46. package/dist/esm/stream-to-response.js +12 -6
  47. package/dist/esm/stream-to-response.js.map +1 -1
  48. package/dist/esm/strip-to-spec-middleware.js +2 -1
  49. package/dist/esm/strip-to-spec-middleware.js.map +1 -1
  50. package/dist/esm/types.d.ts +128 -89
  51. package/dist/esm/utilities/adapter-yield-chunk.d.ts +5 -1
  52. package/dist/esm/utilities/ag-ui-usage.d.ts +9 -9
  53. package/dist/esm/utilities/ag-ui-usage.js +66 -3
  54. package/dist/esm/utilities/ag-ui-usage.js.map +1 -1
  55. package/dist/esm/utilities/ag-ui-wire.js +56 -0
  56. package/dist/esm/utilities/ag-ui-wire.js.map +1 -1
  57. package/dist/esm/utilities/durability-batch.d.ts +8 -0
  58. package/dist/esm/utilities/durability-batch.js +45 -0
  59. package/dist/esm/utilities/durability-batch.js.map +1 -0
  60. package/dist/esm/utilities/normalize-stream-chunk.js +7 -2
  61. package/dist/esm/utilities/normalize-stream-chunk.js.map +1 -1
  62. package/dist/esm/utilities/spec-event-keys.js +13 -8
  63. package/dist/esm/utilities/spec-event-keys.js.map +1 -1
  64. package/dist/esm/utilities/subagent-wire.d.ts +36 -0
  65. package/dist/esm/utilities/subagent-wire.js +131 -0
  66. package/dist/esm/utilities/subagent-wire.js.map +1 -0
  67. package/package.json +4 -4
  68. package/skills/ai-core/adapter-configuration/references/grok-adapter.md +1 -1
  69. package/skills/ai-core/media-generation/SKILL.md +2 -2
  70. package/skills/ai-core/middleware/SKILL.md +7 -4
  71. package/src/activities/chat/agents/define-agent.ts +121 -0
  72. package/src/activities/chat/agents/route.ts +115 -0
  73. package/src/activities/chat/agents/spawn.ts +806 -0
  74. package/src/activities/chat/agents/turn.ts +151 -0
  75. package/src/activities/chat/index.ts +540 -16
  76. package/src/activities/chat/messages.ts +125 -15
  77. package/src/activities/chat/middleware/run-store.ts +56 -7
  78. package/src/activities/chat/middleware/types.ts +55 -2
  79. package/src/activities/chat/stream/processor.ts +428 -8
  80. package/src/activities/chat/tools/tool-calls.ts +92 -16
  81. package/src/activities/index.ts +15 -0
  82. package/src/client.ts +22 -35
  83. package/src/index.ts +23 -0
  84. package/src/middlewares/content-guard.ts +7 -5
  85. package/src/stream-to-response.ts +16 -6
  86. package/src/strip-to-spec-middleware.ts +2 -1
  87. package/src/types.ts +177 -95
  88. package/src/utilities/adapter-yield-chunk.ts +10 -2
  89. package/src/utilities/ag-ui-usage.test.ts +38 -0
  90. package/src/utilities/ag-ui-usage.ts +98 -11
  91. package/src/utilities/ag-ui-wire.ts +74 -0
  92. package/src/utilities/durability-batch.ts +48 -0
  93. package/src/utilities/normalize-stream-chunk.ts +10 -2
  94. package/src/utilities/spec-event-keys.ts +34 -7
  95. package/src/utilities/subagent-wire.ts +184 -0
@@ -0,0 +1,78 @@
1
+ import { splitSubagentWire, subagentWireText, wireSubagentRunId } from "../../../utilities/subagent-wire.js";
2
+ //#region src/activities/chat/agents/turn.ts
3
+ /** Key of the router plan in `SUBAGENT_STARTED` metadata (`metadata.tanstack`). */
4
+ var SUBAGENT_PLAN_KEY = "subagentPlan";
5
+ function planOf(metadata) {
6
+ const tanstack = metadata?.tanstack;
7
+ if (typeof tanstack !== "object" || tanstack === null) return void 0;
8
+ return tanstack[SUBAGENT_PLAN_KEY];
9
+ }
10
+ function uiText(messages) {
11
+ return messages.flatMap((message) => message.role === "assistant" ? message.parts.flatMap((part) => part.type === "text" && part.content.trim() !== "" ? [part.content.trim()] : []) : []).join("\n\n");
12
+ }
13
+ function partInterruptIds(part) {
14
+ return [...part.subagent.interruptIds ?? [], ...part.subagent.messages.flatMap((message) => message.parts.flatMap((nested) => nested.type === "subagent" ? partInterruptIds(nested) : []))];
15
+ }
16
+ function groupInterruptIds(group) {
17
+ return [...group.info.interruptIds ?? [], ...splitSubagentWire(group.messages).groups.flatMap(groupInterruptIds)];
18
+ }
19
+ /**
20
+ * Find the children of the trailing assistant turn that `resume` answers.
21
+ * Returns undefined when no child owns a resume entry.
22
+ */
23
+ function readSubagentTurn(messages, resume) {
24
+ if (!resume || resume.length === 0) return void 0;
25
+ const lastUser = messages.findLastIndex((message) => message.role === "user" && wireSubagentRunId(message) === void 0);
26
+ const before = messages.slice(0, lastUser + 1);
27
+ const turn = messages.slice(lastUser + 1);
28
+ const found = [];
29
+ let plan;
30
+ for (const message of turn) {
31
+ if (!("parts" in message)) continue;
32
+ for (const part of message.parts) {
33
+ if (part.type !== "subagent") continue;
34
+ plan ??= planOf(part.subagent.metadata);
35
+ found.push({
36
+ subagentRunId: part.subagent.id,
37
+ name: part.subagent.name,
38
+ status: part.subagent.status,
39
+ ...part.subagent.parentToolCallId !== void 0 && { parentToolCallId: part.subagent.parentToolCallId },
40
+ messages: part.subagent.messages,
41
+ text: uiText(part.subagent.messages),
42
+ ids: new Set(partInterruptIds(part))
43
+ });
44
+ }
45
+ }
46
+ for (const group of splitSubagentWire(turn).groups) {
47
+ plan ??= planOf(group.info.metadata);
48
+ found.push({
49
+ subagentRunId: group.id,
50
+ name: group.info.name,
51
+ status: group.info.status,
52
+ ...group.info.parentToolCallId !== void 0 && { parentToolCallId: group.info.parentToolCallId },
53
+ messages: group.messages,
54
+ text: subagentWireText(group.messages),
55
+ ids: new Set(groupInterruptIds(group))
56
+ });
57
+ }
58
+ const owned = /* @__PURE__ */ new Set();
59
+ const children = found.map(({ ids, ...child }) => {
60
+ const entries = resume.filter((entry) => ids.has(entry.interruptId));
61
+ for (const entry of entries) owned.add(entry.interruptId);
62
+ return {
63
+ ...child,
64
+ resume: entries
65
+ };
66
+ });
67
+ if (owned.size === 0) return void 0;
68
+ return {
69
+ before,
70
+ children,
71
+ rest: resume.filter((entry) => !owned.has(entry.interruptId)),
72
+ ...plan !== void 0 && { plan }
73
+ };
74
+ }
75
+ //#endregion
76
+ export { SUBAGENT_PLAN_KEY, readSubagentTurn };
77
+
78
+ //# sourceMappingURL=turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn.js","names":[],"sources":["../../../../../src/activities/chat/agents/turn.ts"],"sourcesContent":["import {\n splitSubagentWire,\n subagentWireText,\n wireSubagentRunId,\n} from '../../../utilities/subagent-wire'\nimport type { SubagentWireGroup } from '../../../utilities/subagent-wire'\nimport type {\n ModelMessage,\n RunAgentResumeItem,\n SubagentPart,\n SubagentStatus,\n UIMessage,\n} from '../../../types'\n\ntype AnyMessage = UIMessage | ModelMessage\n\nexport interface SubagentTurnChild {\n subagentRunId: string\n name: string\n status: SubagentStatus\n parentToolCallId?: string\n /** The child's own messages from the earlier run. */\n messages: Array<AnyMessage>\n /** Text the child wrote. */\n text: string\n /** Resume entries for this child and its nested children. */\n resume: Array<RunAgentResumeItem>\n}\n\n/** The interrupted turn that a resume continues. */\nexport interface SubagentTurn {\n /**\n * Messages up to and including the last top-level user message. Child wire\n * messages do not count.\n */\n before: Array<AnyMessage>\n /** Direct children of the parent in that turn. */\n children: Array<SubagentTurnChild>\n /** Resume entries that no child owns. They belong to the parent run. */\n rest: Array<RunAgentResumeItem>\n /** The router plan of the earlier run, from the children's metadata. */\n plan?: unknown\n}\n\n/** Key of the router plan in `SUBAGENT_STARTED` metadata (`metadata.tanstack`). */\nexport const SUBAGENT_PLAN_KEY = 'subagentPlan'\n\nfunction planOf(metadata: Record<string, unknown> | undefined): unknown {\n const tanstack = metadata?.tanstack\n if (typeof tanstack !== 'object' || tanstack === null) return undefined\n return (tanstack as Record<string, unknown>)[SUBAGENT_PLAN_KEY]\n}\n\nfunction uiText(messages: ReadonlyArray<UIMessage>) {\n return messages\n .flatMap((message) =>\n message.role === 'assistant'\n ? message.parts.flatMap((part) =>\n part.type === 'text' && part.content.trim() !== ''\n ? [part.content.trim()]\n : [],\n )\n : [],\n )\n .join('\\n\\n')\n}\n\nfunction partInterruptIds(part: SubagentPart): Array<string> {\n return [\n ...(part.subagent.interruptIds ?? []),\n ...part.subagent.messages.flatMap((message) =>\n message.parts.flatMap((nested) =>\n nested.type === 'subagent' ? partInterruptIds(nested) : [],\n ),\n ),\n ]\n}\n\nfunction groupInterruptIds(group: SubagentWireGroup<unknown>): Array<string> {\n return [\n ...(group.info.interruptIds ?? []),\n ...splitSubagentWire(group.messages).groups.flatMap(groupInterruptIds),\n ]\n}\n\n/**\n * Find the children of the trailing assistant turn that `resume` answers.\n * Returns undefined when no child owns a resume entry.\n */\nexport function readSubagentTurn(\n messages: ReadonlyArray<AnyMessage>,\n resume: ReadonlyArray<RunAgentResumeItem> | undefined,\n): SubagentTurn | undefined {\n if (!resume || resume.length === 0) return undefined\n const lastUser = messages.findLastIndex(\n (message) =>\n message.role === 'user' && wireSubagentRunId(message) === undefined,\n )\n const before = messages.slice(0, lastUser + 1)\n const turn = messages.slice(lastUser + 1)\n\n const found: Array<Omit<SubagentTurnChild, 'resume'> & { ids: Set<string> }> =\n []\n let plan: unknown\n for (const message of turn) {\n if (!('parts' in message)) continue\n for (const part of message.parts) {\n if (part.type !== 'subagent') continue\n plan ??= planOf(part.subagent.metadata)\n found.push({\n subagentRunId: part.subagent.id,\n name: part.subagent.name,\n status: part.subagent.status,\n ...(part.subagent.parentToolCallId !== undefined && {\n parentToolCallId: part.subagent.parentToolCallId,\n }),\n messages: part.subagent.messages,\n text: uiText(part.subagent.messages),\n ids: new Set(partInterruptIds(part)),\n })\n }\n }\n for (const group of splitSubagentWire(turn).groups) {\n plan ??= planOf(group.info.metadata)\n found.push({\n subagentRunId: group.id,\n name: group.info.name,\n status: group.info.status,\n ...(group.info.parentToolCallId !== undefined && {\n parentToolCallId: group.info.parentToolCallId,\n }),\n messages: group.messages,\n text: subagentWireText(group.messages),\n ids: new Set(groupInterruptIds(group)),\n })\n }\n\n const owned = new Set<string>()\n const children = found.map(({ ids, ...child }) => {\n const entries = resume.filter((entry) => ids.has(entry.interruptId))\n for (const entry of entries) owned.add(entry.interruptId)\n return { ...child, resume: entries }\n })\n if (owned.size === 0) return undefined\n return {\n before,\n children,\n rest: resume.filter((entry) => !owned.has(entry.interruptId)),\n ...(plan !== undefined && { plan }),\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { InterruptDefinition } from '../../interrupt-definition.js';
2
+ import { DefinedAgent } from './agents/define-agent.js';
3
+ import { SubagentsBag } from './agents/spawn.js';
2
4
  import { AnyTextAdapter } from './adapter.js';
3
5
  import { AnyTool, ChatStream, ConstrainedModelMessage, InferSchemaType, LazyToolsConfig, ModelMessage, ProviderTool, SchemaInput, StructuredOutputStream, TextOptions, UIMessage } from '../../types.js';
4
6
  import { AnyChatMiddleware, ChatMiddleware } from './middleware/types.js';
@@ -45,7 +47,7 @@ type RuntimeContextOption<TTools, TMiddleware, TContext> = [
45
47
  };
46
48
  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
49
  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'> & {
50
+ ], TContext = unknown, TMiddleware extends Array<unknown> | undefined = undefined, TAgents extends ReadonlyArray<DefinedAgent> = ReadonlyArray<DefinedAgent>> = Omit<TextActivityOptions<TAdapter, TSchema, TStream, any, TAgents>, 'tools' | 'middleware' | 'context' | 'interrupts'> & {
49
51
  tools?: TTools;
50
52
  interrupts?: TInterrupts & CheckUniqueInterruptDefinitions<TInterrupts>;
51
53
  middleware?: ExactMiddlewareOption<TTools, TContext, TInterrupts, TMiddleware>;
@@ -59,7 +61,7 @@ type TextActivityOptionsWithContext<TAdapter extends AnyTextAdapter, TSchema ext
59
61
  * @template TStream - Whether to stream the output (default: true)
60
62
  * @template TContext - Runtime context value threaded to middleware hooks and server tools
61
63
  */
62
- export interface TextActivityOptions<TAdapter extends AnyTextAdapter, TSchema extends SchemaInput | undefined, TStream extends boolean, TContext = unknown> {
64
+ export interface TextActivityOptions<TAdapter extends AnyTextAdapter, TSchema extends SchemaInput | undefined, TStream extends boolean, TContext = unknown, TAgents extends ReadonlyArray<DefinedAgent> = ReadonlyArray<DefinedAgent>> {
63
65
  /** The text adapter to use (created by a provider function like openaiText('gpt-5.5')) */
64
66
  adapter: TAdapter;
65
67
  /**
@@ -125,6 +127,8 @@ export interface TextActivityOptions<TAdapter extends AnyTextAdapter, TSchema ex
125
127
  runId?: TextOptions['runId'];
126
128
  /** Parent run ID for AG-UI protocol nested run correlation. */
127
129
  parentRunId?: TextOptions['parentRunId'];
130
+ /** Subagent run id when this chat runs as a child. See `defineAgent`. */
131
+ subagentRunId?: TextOptions['subagentRunId'];
128
132
  /** Application state mirrored in a STATE_SNAPSHOT before an interrupt terminal. */
129
133
  state?: TextOptions['state'];
130
134
  /**
@@ -132,6 +136,12 @@ export interface TextActivityOptions<TAdapter extends AnyTextAdapter, TSchema ex
132
136
  * before accepting new input on a thread with pending interrupts.
133
137
  */
134
138
  resume?: TextOptions['resume'];
139
+ /**
140
+ * Named child agents. When `router` is set, the library spawns that agent
141
+ * directly. When `router` is omitted, the main model gets one synthetic
142
+ * server tool per agent and picks the child.
143
+ */
144
+ subagents?: SubagentsBag<TAgents>;
135
145
  /**
136
146
  * Optional Standard Schema for structured output.
137
147
  * When provided, the activity will:
@@ -299,6 +309,6 @@ export type TextActivityResult<TSchema extends SchemaInput | undefined, TStream
299
309
  * // result is { summary: string, keyPoints: string[] }
300
310
  * ```
301
311
  */
302
- 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>;
312
+ 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, const TAgents extends ReadonlyArray<DefinedAgent> = ReadonlyArray<DefinedAgent>>(options: TextActivityOptionsWithContext<TAdapter, TSchema, TStream, TTools, TInterrupts, TContext, TMiddleware, TAgents>): TextActivityResult<TSchema, TStream, TTools>;
303
313
  export type { TextAdapter, TextAdapterConfig, StructuredOutputOptions, StructuredOutputResult, } from './adapter.js';
304
314
  export { BaseTextAdapter } from './adapter.js';