@tanstack/ai 0.42.0 → 0.43.1
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.
- package/README.md +15 -1
- package/dist/esm/activities/chat/adapter.js +23 -16
- package/dist/esm/activities/chat/adapter.js.map +1 -1
- package/dist/esm/activities/chat/agent-loop-strategies.d.ts +5 -36
- package/dist/esm/activities/chat/agent-loop-strategies.js +75 -21
- package/dist/esm/activities/chat/agent-loop-strategies.js.map +1 -1
- package/dist/esm/activities/chat/cancel.d.ts +40 -0
- package/dist/esm/activities/chat/cancel.js +54 -0
- package/dist/esm/activities/chat/cancel.js.map +1 -0
- package/dist/esm/activities/chat/index.d.ts +28 -21
- package/dist/esm/activities/chat/index.js +2100 -1813
- package/dist/esm/activities/chat/index.js.map +1 -1
- package/dist/esm/activities/chat/mcp/manager.d.ts +2 -2
- package/dist/esm/activities/chat/mcp/manager.js +90 -77
- package/dist/esm/activities/chat/mcp/manager.js.map +1 -1
- package/dist/esm/activities/chat/mcp/types.d.ts +2 -2
- package/dist/esm/activities/chat/messages.js +397 -346
- package/dist/esm/activities/chat/messages.js.map +1 -1
- package/dist/esm/activities/chat/middleware/builder.js +17 -15
- package/dist/esm/activities/chat/middleware/builder.js.map +1 -1
- package/dist/esm/activities/chat/middleware/capabilities.js +78 -43
- package/dist/esm/activities/chat/middleware/capabilities.js.map +1 -1
- package/dist/esm/activities/chat/middleware/compose.d.ts +94 -1
- package/dist/esm/activities/chat/middleware/compose.js +623 -531
- package/dist/esm/activities/chat/middleware/compose.js.map +1 -1
- package/dist/esm/activities/chat/middleware/define.js +12 -5
- package/dist/esm/activities/chat/middleware/define.js.map +1 -1
- package/dist/esm/activities/chat/middleware/index.d.ts +5 -1
- package/dist/esm/activities/chat/middleware/locks.d.ts +50 -0
- package/dist/esm/activities/chat/middleware/locks.js +71 -0
- package/dist/esm/activities/chat/middleware/locks.js.map +1 -0
- package/dist/esm/activities/chat/middleware/pending-turn.d.ts +15 -0
- package/dist/esm/activities/chat/middleware/pending-turn.js +35 -0
- package/dist/esm/activities/chat/middleware/pending-turn.js.map +1 -0
- package/dist/esm/activities/chat/middleware/run-disconnect.d.ts +23 -0
- package/dist/esm/activities/chat/middleware/run-disconnect.js +42 -0
- package/dist/esm/activities/chat/middleware/run-disconnect.js.map +1 -0
- package/dist/esm/activities/chat/middleware/run-store.d.ts +283 -0
- package/dist/esm/activities/chat/middleware/run-store.js +176 -0
- package/dist/esm/activities/chat/middleware/run-store.js.map +1 -0
- package/dist/esm/activities/chat/middleware/sandbox-runtime.js +14 -8
- package/dist/esm/activities/chat/middleware/sandbox-runtime.js.map +1 -1
- package/dist/esm/activities/chat/middleware/tool-cache-middleware.js +79 -70
- package/dist/esm/activities/chat/middleware/tool-cache-middleware.js.map +1 -1
- package/dist/esm/activities/chat/middleware/types.d.ts +59 -2
- package/dist/esm/activities/chat/middleware/validate.js +23 -28
- package/dist/esm/activities/chat/middleware/validate.js.map +1 -1
- package/dist/esm/activities/chat/stream/json-parser.js +39 -25
- package/dist/esm/activities/chat/stream/json-parser.js.map +1 -1
- package/dist/esm/activities/chat/stream/message-updaters.js +275 -234
- package/dist/esm/activities/chat/stream/message-updaters.js.map +1 -1
- package/dist/esm/activities/chat/stream/processor.d.ts +24 -4
- package/dist/esm/activities/chat/stream/processor.js +1341 -1542
- package/dist/esm/activities/chat/stream/processor.js.map +1 -1
- package/dist/esm/activities/chat/stream/strategies.js +69 -53
- package/dist/esm/activities/chat/stream/strategies.js.map +1 -1
- package/dist/esm/activities/chat/tools/approval-schema.d.ts +19 -0
- package/dist/esm/activities/chat/tools/approval-schema.js +117 -0
- package/dist/esm/activities/chat/tools/approval-schema.js.map +1 -0
- package/dist/esm/activities/chat/tools/lazy-tool-manager.js +164 -191
- package/dist/esm/activities/chat/tools/lazy-tool-manager.js.map +1 -1
- package/dist/esm/activities/chat/tools/lazy-tools.js +24 -12
- package/dist/esm/activities/chat/tools/lazy-tools.js.map +1 -1
- package/dist/esm/activities/chat/tools/schema-converter.js +293 -146
- package/dist/esm/activities/chat/tools/schema-converter.js.map +1 -1
- package/dist/esm/activities/chat/tools/tool-calls.d.ts +18 -2
- package/dist/esm/activities/chat/tools/tool-calls.js +522 -531
- package/dist/esm/activities/chat/tools/tool-calls.js.map +1 -1
- package/dist/esm/activities/chat/tools/tool-definition.d.ts +75 -16
- package/dist/esm/activities/chat/tools/tool-definition.js +95 -23
- package/dist/esm/activities/chat/tools/tool-definition.js.map +1 -1
- package/dist/esm/activities/error-payload.js +85 -47
- package/dist/esm/activities/error-payload.js.map +1 -1
- package/dist/esm/activities/generateAudio/adapter.js +22 -15
- package/dist/esm/activities/generateAudio/adapter.js.map +1 -1
- package/dist/esm/activities/generateAudio/index.d.ts +4 -0
- package/dist/esm/activities/generateAudio/index.js +141 -105
- package/dist/esm/activities/generateAudio/index.js.map +1 -1
- package/dist/esm/activities/generateImage/adapter.js +22 -15
- package/dist/esm/activities/generateImage/adapter.js.map +1 -1
- package/dist/esm/activities/generateImage/index.d.ts +4 -0
- package/dist/esm/activities/generateImage/index.js +155 -111
- package/dist/esm/activities/generateImage/index.js.map +1 -1
- package/dist/esm/activities/generateSpeech/adapter.js +22 -15
- package/dist/esm/activities/generateSpeech/adapter.js.map +1 -1
- package/dist/esm/activities/generateSpeech/index.d.ts +4 -0
- package/dist/esm/activities/generateSpeech/index.js +159 -110
- package/dist/esm/activities/generateSpeech/index.js.map +1 -1
- package/dist/esm/activities/generateTranscription/adapter.js +22 -15
- package/dist/esm/activities/generateTranscription/adapter.js.map +1 -1
- package/dist/esm/activities/generateTranscription/index.d.ts +4 -0
- package/dist/esm/activities/generateTranscription/index.js +159 -100
- package/dist/esm/activities/generateTranscription/index.js.map +1 -1
- package/dist/esm/activities/generateVideo/adapter.js +36 -29
- package/dist/esm/activities/generateVideo/adapter.js.map +1 -1
- package/dist/esm/activities/generateVideo/index.d.ts +143 -19
- package/dist/esm/activities/generateVideo/index.js +456 -279
- package/dist/esm/activities/generateVideo/index.js.map +1 -1
- package/dist/esm/activities/generateVideo/snap.js +60 -48
- package/dist/esm/activities/generateVideo/snap.js.map +1 -1
- package/dist/esm/activities/index.js +8 -34
- package/dist/esm/activities/middleware/index.d.ts +1 -1
- package/dist/esm/activities/middleware/run.d.ts +10 -0
- package/dist/esm/activities/middleware/run.js +53 -29
- package/dist/esm/activities/middleware/run.js.map +1 -1
- package/dist/esm/activities/middleware/types.d.ts +44 -6
- package/dist/esm/activities/stream-generation-result.d.ts +4 -1
- package/dist/esm/activities/stream-generation-result.js +79 -44
- package/dist/esm/activities/stream-generation-result.js.map +1 -1
- package/dist/esm/activities/summarize/adapter.js +22 -15
- package/dist/esm/activities/summarize/adapter.js.map +1 -1
- package/dist/esm/activities/summarize/chat-stream-summarize.js +252 -202
- package/dist/esm/activities/summarize/chat-stream-summarize.js.map +1 -1
- package/dist/esm/activities/summarize/index.d.ts +27 -0
- package/dist/esm/activities/summarize/index.js +268 -102
- package/dist/esm/activities/summarize/index.js.map +1 -1
- package/dist/esm/adapter-internals.d.ts +2 -1
- package/dist/esm/adapter-internals.js +4 -11
- package/dist/esm/client.d.ts +25 -3
- package/dist/esm/client.js +131 -64
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/custom-events.d.ts +76 -0
- package/dist/esm/custom-events.js +37 -0
- package/dist/esm/custom-events.js.map +1 -0
- package/dist/esm/delivery-detach.d.ts +50 -0
- package/dist/esm/delivery-detach.js +71 -0
- package/dist/esm/delivery-detach.js.map +1 -0
- package/dist/esm/delivery-disconnect.d.ts +62 -0
- package/dist/esm/delivery-disconnect.js +81 -0
- package/dist/esm/delivery-disconnect.js.map +1 -0
- package/dist/esm/extend-adapter.js +19 -17
- package/dist/esm/extend-adapter.js.map +1 -1
- package/dist/esm/index.d.ts +24 -6
- package/dist/esm/index.js +30 -98
- package/dist/esm/interrupt-resume.d.ts +71 -0
- package/dist/esm/interrupt-resume.js +438 -0
- package/dist/esm/interrupt-resume.js.map +1 -0
- package/dist/esm/interrupt-serialization.d.ts +12 -0
- package/dist/esm/interrupt-serialization.js +178 -0
- package/dist/esm/interrupt-serialization.js.map +1 -0
- package/dist/esm/interrupts.d.ts +84 -0
- package/dist/esm/interrupts.js +31 -0
- package/dist/esm/interrupts.js.map +1 -0
- package/dist/esm/locks.d.ts +10 -0
- package/dist/esm/locks.js +2 -0
- package/dist/esm/logger/console-logger.js +101 -78
- package/dist/esm/logger/console-logger.js.map +1 -1
- package/dist/esm/logger/internal-logger.js +104 -89
- package/dist/esm/logger/internal-logger.js.map +1 -1
- package/dist/esm/logger/resolve.js +54 -49
- package/dist/esm/logger/resolve.js.map +1 -1
- package/dist/esm/logger/types.d.ts +1 -1
- package/dist/esm/middlewares/content-guard.js +142 -148
- package/dist/esm/middlewares/content-guard.js.map +1 -1
- package/dist/esm/middlewares/index.js +2 -6
- package/dist/esm/middlewares/otel.d.ts +3 -1
- package/dist/esm/middlewares/otel.js +599 -732
- package/dist/esm/middlewares/otel.js.map +1 -1
- package/dist/esm/middlewares/usage-attributes.js +47 -40
- package/dist/esm/middlewares/usage-attributes.js.map +1 -1
- package/dist/esm/realtime/event-emitter.js +24 -25
- package/dist/esm/realtime/event-emitter.js.map +1 -1
- package/dist/esm/realtime/index.d.ts +5 -9
- package/dist/esm/realtime/index.js +29 -6
- package/dist/esm/realtime/index.js.map +1 -1
- package/dist/esm/scope.d.ts +47 -0
- package/dist/esm/stream-durability.d.ts +171 -0
- package/dist/esm/stream-durability.js +295 -0
- package/dist/esm/stream-durability.js.map +1 -0
- package/dist/esm/stream-to-response.d.ts +178 -13
- package/dist/esm/stream-to-response.js +663 -115
- package/dist/esm/stream-to-response.js.map +1 -1
- package/dist/esm/strip-to-spec-middleware.js +30 -16
- package/dist/esm/strip-to-spec-middleware.js.map +1 -1
- package/dist/esm/system-prompts.js +27 -21
- package/dist/esm/system-prompts.js.map +1 -1
- package/dist/esm/tool-registry.js +72 -45
- package/dist/esm/tool-registry.js.map +1 -1
- package/dist/esm/tools/provider-tool.js +14 -5
- package/dist/esm/tools/provider-tool.js.map +1 -1
- package/dist/esm/types.d.ts +321 -42
- package/dist/esm/types.js +2 -0
- package/dist/esm/utilities/ag-ui-wire.js +79 -93
- package/dist/esm/utilities/ag-ui-wire.js.map +1 -1
- package/dist/esm/utilities/chat-params.d.ts +26 -4
- package/dist/esm/utilities/chat-params.js +218 -92
- package/dist/esm/utilities/chat-params.js.map +1 -1
- package/dist/esm/utilities/errors.js +28 -18
- package/dist/esm/utilities/errors.js.map +1 -1
- package/dist/esm/utilities/media-prompt.js +46 -41
- package/dist/esm/utilities/media-prompt.js.map +1 -1
- package/dist/esm/utilities/numbers.js +13 -10
- package/dist/esm/utilities/numbers.js.map +1 -1
- package/dist/esm/utilities/provider-executed.js +20 -11
- package/dist/esm/utilities/provider-executed.js.map +1 -1
- package/dist/esm/utilities/sampling-keys.js +31 -19
- package/dist/esm/utilities/sampling-keys.js.map +1 -1
- package/dist/esm/utilities/tool-result.js +42 -30
- package/dist/esm/utilities/tool-result.js.map +1 -1
- package/dist/esm/utilities/usage.js +27 -9
- package/dist/esm/utilities/usage.js.map +1 -1
- package/dist/esm/utils.js +26 -18
- package/dist/esm/utils.js.map +1 -1
- package/package.json +10 -6
- package/skills/ai-core/SKILL.md +69 -18
- package/skills/ai-core/adapter-configuration/SKILL.md +44 -21
- package/skills/ai-core/adapter-configuration/references/anthropic-adapter.md +1 -3
- package/skills/ai-core/adapter-configuration/references/byteplus-adapter.md +148 -0
- package/skills/ai-core/adapter-configuration/references/gemini-adapter.md +2 -6
- package/skills/ai-core/adapter-configuration/references/groq-adapter.md +2 -6
- package/skills/ai-core/adapter-configuration/references/openai-adapter.md +1 -3
- package/skills/ai-core/ag-ui-protocol/SKILL.md +1 -1
- package/skills/ai-core/chat-experience/SKILL.md +98 -11
- package/skills/ai-core/client-persistence/SKILL.md +277 -0
- package/skills/ai-core/custom-backend-integration/SKILL.md +1 -1
- package/skills/ai-core/debug-logging/SKILL.md +1 -1
- package/skills/ai-core/locks/SKILL.md +143 -0
- package/skills/ai-core/media-generation/SKILL.md +144 -12
- package/skills/ai-core/middleware/SKILL.md +258 -33
- package/skills/ai-core/structured-outputs/SKILL.md +1 -1
- package/skills/ai-core/tool-calling/SKILL.md +54 -61
- package/src/activities/chat/agent-loop-strategies.ts +5 -39
- package/src/activities/chat/cancel.ts +81 -0
- package/src/activities/chat/index.ts +1091 -200
- package/src/activities/chat/mcp/manager.ts +4 -4
- package/src/activities/chat/mcp/types.ts +2 -2
- package/src/activities/chat/messages.ts +5 -3
- package/src/activities/chat/middleware/builder.ts +1 -1
- package/src/activities/chat/middleware/compose.ts +186 -9
- package/src/activities/chat/middleware/index.ts +26 -0
- package/src/activities/chat/middleware/locks.ts +102 -0
- package/src/activities/chat/middleware/pending-turn.ts +47 -0
- package/src/activities/chat/middleware/run-disconnect.ts +62 -0
- package/src/activities/chat/middleware/run-store.ts +412 -0
- package/src/activities/chat/middleware/types.ts +62 -1
- package/src/activities/chat/stream/processor.ts +189 -5
- package/src/activities/chat/tools/approval-schema.ts +205 -0
- package/src/activities/chat/tools/tool-calls.ts +106 -13
- package/src/activities/chat/tools/tool-definition.ts +210 -39
- package/src/activities/generateAudio/index.ts +20 -3
- package/src/activities/generateImage/index.ts +20 -3
- package/src/activities/generateSpeech/index.ts +25 -3
- package/src/activities/generateTranscription/index.ts +26 -3
- package/src/activities/generateVideo/index.ts +345 -82
- package/src/activities/middleware/index.ts +2 -0
- package/src/activities/middleware/run.ts +31 -0
- package/src/activities/middleware/types.ts +49 -5
- package/src/activities/stream-generation-result.ts +30 -2
- package/src/activities/summarize/chat-stream-summarize.ts +5 -0
- package/src/activities/summarize/index.ts +200 -10
- package/src/adapter-internals.ts +10 -1
- package/src/client.ts +244 -0
- package/src/custom-events.ts +107 -0
- package/src/delivery-detach.ts +72 -0
- package/src/delivery-disconnect.ts +84 -0
- package/src/index.ts +138 -1
- package/src/interrupt-resume.ts +824 -0
- package/src/interrupt-serialization.ts +183 -0
- package/src/interrupts.ts +146 -0
- package/src/locks.ts +17 -0
- package/src/logger/types.ts +1 -1
- package/src/middlewares/otel.ts +23 -5
- package/src/realtime/index.ts +5 -9
- package/src/scope.ts +47 -0
- package/src/stream-durability.ts +598 -0
- package/src/stream-to-response.ts +1051 -95
- package/src/strip-to-spec-middleware.ts +3 -3
- package/src/types.ts +405 -45
- package/src/utilities/chat-params.ts +245 -55
- package/dist/esm/activities/index.js.map +0 -1
- package/dist/esm/adapter-internals.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/middlewares/index.js.map +0 -1
package/dist/esm/types.d.ts
CHANGED
|
@@ -2,8 +2,11 @@ import { StandardJSONSchemaV1, StandardSchemaV1 } from '@standard-schema/spec';
|
|
|
2
2
|
import { InternalLogger } from './logger/internal-logger.js';
|
|
3
3
|
import { SystemPrompt } from './system-prompts.js';
|
|
4
4
|
import { CapabilityContext } from './activities/chat/middleware/capabilities.js';
|
|
5
|
+
import { InterruptSubmissionError } from './interrupts.js';
|
|
6
|
+
import { ProviderTool } from './tools/provider-tool.js';
|
|
5
7
|
import { CompletionTokensDetails, PromptTokensDetails, ProviderUsageDetails, TokenUsage, UsageCostBreakdown } from '@tanstack/ai-event-client';
|
|
6
|
-
import { BaseEvent as AGUIBaseEvent, CustomEvent as AGUICustomEvent, MessagesSnapshotEvent as AGUIMessagesSnapshotEvent, ReasoningEncryptedValueEvent as AGUIReasoningEncryptedValueEvent, ReasoningEndEvent as AGUIReasoningEndEvent, ReasoningMessageContentEvent as AGUIReasoningMessageContentEvent, ReasoningMessageEndEvent as AGUIReasoningMessageEndEvent, ReasoningMessageStartEvent as AGUIReasoningMessageStartEvent, ReasoningStartEvent as AGUIReasoningStartEvent, RunErrorEvent as AGUIRunErrorEvent, RunFinishedEvent as AGUIRunFinishedEvent, RunStartedEvent as AGUIRunStartedEvent, StateDeltaEvent as AGUIStateDeltaEvent, StateSnapshotEvent as AGUIStateSnapshotEvent, StepFinishedEvent as AGUIStepFinishedEvent, StepStartedEvent as AGUIStepStartedEvent, TextMessageContentEvent as AGUITextMessageContentEvent, TextMessageEndEvent as AGUITextMessageEndEvent, TextMessageStartEvent as AGUITextMessageStartEvent, ToolCallArgsEvent as AGUIToolCallArgsEvent, ToolCallEndEvent as AGUIToolCallEndEvent, ToolCallResultEvent as AGUIToolCallResultEvent, ToolCallStartEvent as AGUIToolCallStartEvent, EventType } from '@ag-ui/core';
|
|
8
|
+
import { BaseEvent as AGUIBaseEvent, CustomEvent as AGUICustomEvent, Interrupt as AGUIInterrupt, MessagesSnapshotEvent as AGUIMessagesSnapshotEvent, ReasoningEncryptedValueEvent as AGUIReasoningEncryptedValueEvent, ReasoningEndEvent as AGUIReasoningEndEvent, ReasoningMessageContentEvent as AGUIReasoningMessageContentEvent, ReasoningMessageEndEvent as AGUIReasoningMessageEndEvent, ReasoningMessageStartEvent as AGUIReasoningMessageStartEvent, ReasoningStartEvent as AGUIReasoningStartEvent, ResumeEntry as AGUIResumeEntry, RunErrorEvent as AGUIRunErrorEvent, RunFinishedEvent as AGUIRunFinishedEvent, RunFinishedOutcome as AGUIRunFinishedOutcome, RunStartedEvent as AGUIRunStartedEvent, StateDeltaEvent as AGUIStateDeltaEvent, StateSnapshotEvent as AGUIStateSnapshotEvent, StepFinishedEvent as AGUIStepFinishedEvent, StepStartedEvent as AGUIStepStartedEvent, TextMessageContentEvent as AGUITextMessageContentEvent, TextMessageEndEvent as AGUITextMessageEndEvent, TextMessageStartEvent as AGUITextMessageStartEvent, ToolCallArgsEvent as AGUIToolCallArgsEvent, ToolCallEndEvent as AGUIToolCallEndEvent, ToolCallResultEvent as AGUIToolCallResultEvent, ToolCallStartEvent as AGUIToolCallStartEvent, EventType } from '@ag-ui/core';
|
|
9
|
+
export type { ProviderTool } from './tools/provider-tool.js';
|
|
7
10
|
/**
|
|
8
11
|
* Tool call states - track the lifecycle of a tool call
|
|
9
12
|
*/
|
|
@@ -247,6 +250,15 @@ export interface ModelMessage<TContent extends string | null | Array<ContentPart
|
|
|
247
250
|
content: string;
|
|
248
251
|
signature?: string;
|
|
249
252
|
}>;
|
|
253
|
+
/**
|
|
254
|
+
* Optional stable message id. Providers ignore it; it exists so a persisted
|
|
255
|
+
* transcript can retain the streaming `messageId` and survive the
|
|
256
|
+
* persist → hydrate round-trip. When present, `modelMessagesToUIMessages`
|
|
257
|
+
* reuses it instead of generating a fresh id, so a hydrated message keeps the
|
|
258
|
+
* same identity as its live stream — which is what lets a mid-stream reload
|
|
259
|
+
* resume the SAME message bubble in place (see `@tanstack/ai-persistence`).
|
|
260
|
+
*/
|
|
261
|
+
id?: string;
|
|
250
262
|
}
|
|
251
263
|
/**
|
|
252
264
|
* Message parts - building blocks of UIMessage
|
|
@@ -426,7 +438,7 @@ export type ToolExecutionContext<TContext = unknown> = RuntimeContextField<TCont
|
|
|
426
438
|
*/
|
|
427
439
|
emitCustomEvent: (eventName: string, value: Record<string, any>) => void;
|
|
428
440
|
};
|
|
429
|
-
export type ToolExecuteFunction<TInput extends SchemaInput = SchemaInput, TOutput extends SchemaInput = SchemaInput, TContext = unknown> = undefined extends TContext ? (args: InferSchemaType<TInput>, context?: ToolExecutionContext<TContext>) => Promise<InferSchemaType<TOutput>> | InferSchemaType<TOutput> : (args: InferSchemaType<TInput>, context: ToolExecutionContext<TContext>) => Promise<InferSchemaType<TOutput>> | InferSchemaType<TOutput>;
|
|
441
|
+
export type ToolExecuteFunction<TInput extends SchemaInput | undefined = SchemaInput, TOutput extends SchemaInput | undefined = SchemaInput, TContext = unknown> = undefined extends TContext ? (args: InferSchemaType<TInput>, context?: ToolExecutionContext<TContext>) => Promise<InferSchemaType<TOutput>> | InferSchemaType<TOutput> : (args: InferSchemaType<TInput>, context: ToolExecutionContext<TContext>) => Promise<InferSchemaType<TOutput>> | InferSchemaType<TOutput>;
|
|
430
442
|
/**
|
|
431
443
|
* Tool/Function definition for function calling.
|
|
432
444
|
*
|
|
@@ -440,7 +452,7 @@ export type ToolExecuteFunction<TInput extends SchemaInput = SchemaInput, TOutpu
|
|
|
440
452
|
* @see https://docs.anthropic.com/claude/docs/tool-use
|
|
441
453
|
* @see https://standardschema.dev/json-schema
|
|
442
454
|
*/
|
|
443
|
-
export interface Tool<TInput extends SchemaInput = SchemaInput, TOutput extends SchemaInput = SchemaInput, TName extends string = string, TContext = unknown> {
|
|
455
|
+
export interface Tool<TInput extends SchemaInput | undefined = SchemaInput, TOutput extends SchemaInput | undefined = SchemaInput, TName extends string = string, TContext = unknown> {
|
|
444
456
|
/**
|
|
445
457
|
* Unique name of the tool (used by the model to call it).
|
|
446
458
|
*
|
|
@@ -662,13 +674,13 @@ export interface AgentLoopState {
|
|
|
662
674
|
finishReason: string | null;
|
|
663
675
|
/**
|
|
664
676
|
* Cumulative tool calls counted so far in this run (model-emitted during the
|
|
665
|
-
* agent loop, including ones skipped by
|
|
666
|
-
*
|
|
667
|
-
*
|
|
677
|
+
* agent loop, including ones skipped by middleware, and pending tools from
|
|
678
|
+
* the inbound message list when resumed). Not a recount of full message
|
|
679
|
+
* history; not model turns.
|
|
668
680
|
*/
|
|
669
681
|
toolCallCount: number;
|
|
670
682
|
/**
|
|
671
|
-
* Tool calls in the most recent
|
|
683
|
+
* Tool calls in the most recent batch — a live model turn or a
|
|
672
684
|
* pending/resume batch (0 when the last phase produced no tool calls).
|
|
673
685
|
*/
|
|
674
686
|
lastTurnToolCallCount: number;
|
|
@@ -683,7 +695,7 @@ export interface AgentLoopState {
|
|
|
683
695
|
* ```typescript
|
|
684
696
|
* // Continue for up to 5 iterations (model turns, not tool calls)
|
|
685
697
|
* const strategy: AgentLoopStrategy = ({ iterationCount }) => iterationCount < 5;
|
|
686
|
-
* // Cap total tool calls across the run
|
|
698
|
+
* // Cap total tool calls across the run (or use middleware onShouldContinue)
|
|
687
699
|
* const byTools: AgentLoopStrategy = ({ toolCallCount }) => toolCallCount < 20;
|
|
688
700
|
* ```
|
|
689
701
|
*/
|
|
@@ -716,24 +728,6 @@ export interface TextOptions<TProviderOptionsSuperset extends Record<string, any
|
|
|
716
728
|
*/
|
|
717
729
|
systemPrompts?: Array<SystemPrompt>;
|
|
718
730
|
agentLoopStrategy?: AgentLoopStrategy;
|
|
719
|
-
/**
|
|
720
|
-
* Maximum number of tool calls to **execute** from a single model turn (or
|
|
721
|
-
* pending/resume batch). `0` skips all execution for that batch.
|
|
722
|
-
*
|
|
723
|
-
* Models can emit many parallel tool calls in one turn. `agentLoopStrategy`
|
|
724
|
-
* (including `maxIterations` / `maxToolCalls`) is only evaluated between
|
|
725
|
-
* turns, so without this cap a single runaway turn can still execute an
|
|
726
|
-
* unbounded fan-out.
|
|
727
|
-
*
|
|
728
|
-
* When set, only the first `maxToolCallsPerTurn` calls are executed; the
|
|
729
|
-
* remainder receive error tool results so the message history stays
|
|
730
|
-
* consistent. Unset means no per-turn execution cap. Must be a non-negative
|
|
731
|
-
* finite number when set.
|
|
732
|
-
*
|
|
733
|
-
* Pair with the `maxToolCalls(n)` strategy for a cumulative **emitted**-call
|
|
734
|
-
* budget across the run (skipped calls still count toward that budget).
|
|
735
|
-
*/
|
|
736
|
-
maxToolCallsPerTurn?: number;
|
|
737
731
|
/**
|
|
738
732
|
* Optional configuration for lazy-tool discovery (tools marked `lazy: true`).
|
|
739
733
|
* Tunes how much of each lazy tool's description appears in the discovery
|
|
@@ -824,6 +818,14 @@ export interface TextOptions<TProviderOptionsSuperset extends Record<string, any
|
|
|
824
818
|
* Surfaced for observability/middleware; not consumed by the LLM call.
|
|
825
819
|
*/
|
|
826
820
|
parentRunId?: string;
|
|
821
|
+
/** Application state mirrored in a STATE_SNAPSHOT before an interrupt terminal. */
|
|
822
|
+
state?: unknown;
|
|
823
|
+
/**
|
|
824
|
+
* AG-UI interrupt resume responses supplied by the client on a follow-up run.
|
|
825
|
+
* Threaded through request parsing now so later runtime behavior can resolve
|
|
826
|
+
* upstream-native interrupts.
|
|
827
|
+
*/
|
|
828
|
+
resume?: Array<RunAgentResumeItem>;
|
|
827
829
|
/**
|
|
828
830
|
* Middleware capability context for this run. The engine populates it with
|
|
829
831
|
* the live middleware context so harness adapters that declare
|
|
@@ -888,6 +890,9 @@ export type { CompletionTokensDetails, PromptTokensDetails, ProviderUsageDetails
|
|
|
888
890
|
* future release.
|
|
889
891
|
*/
|
|
890
892
|
export type UsageTotals = TokenUsage;
|
|
893
|
+
export type Interrupt = AGUIInterrupt;
|
|
894
|
+
export type RunFinishedOutcome = AGUIRunFinishedOutcome;
|
|
895
|
+
export type RunAgentResumeItem = AGUIResumeEntry;
|
|
891
896
|
/**
|
|
892
897
|
* Emitted when a run completes successfully.
|
|
893
898
|
*
|
|
@@ -911,6 +916,8 @@ export interface RunFinishedEvent extends AGUIRunFinishedEvent {
|
|
|
911
916
|
export interface RunErrorEvent extends AGUIRunErrorEvent {
|
|
912
917
|
/** Model identifier for multi-model support */
|
|
913
918
|
model?: string;
|
|
919
|
+
/** Exhaustive TanStack interrupt submission failures for this run. */
|
|
920
|
+
'tanstack:interruptErrors'?: ReadonlyArray<InterruptSubmissionError>;
|
|
914
921
|
/**
|
|
915
922
|
* @deprecated Use top-level `message` and `code` fields instead.
|
|
916
923
|
* Kept for backward compatibility.
|
|
@@ -957,15 +964,27 @@ export interface TextMessageEndEvent extends AGUITextMessageEndEvent {
|
|
|
957
964
|
*
|
|
958
965
|
* @ag-ui/core provides: `toolCallId`, `toolCallName`, `parentMessageId?`
|
|
959
966
|
* TanStack AI adds: `model?`, `toolName` (deprecated alias), `index?`, `metadata?`
|
|
967
|
+
*
|
|
968
|
+
* Field shapes are taken from AG-UI via `Pick` (not `extends`) so Zod
|
|
969
|
+
* `.passthrough()` index signatures do not pollute the StreamChunk
|
|
970
|
+
* discriminated union — required for {@link TypedStreamChunk} narrowing.
|
|
971
|
+
*
|
|
972
|
+
* @typeParam TToolName - Constrained tool name type. Defaults to `string` (untyped).
|
|
973
|
+
* When the stream is returned from `chat()` with typed tools, `TypedStreamChunk`
|
|
974
|
+
* intersects a literal onto `toolCallName` and `toolName` for discrimination.
|
|
960
975
|
*/
|
|
961
|
-
export interface ToolCallStartEvent extends AGUIToolCallStartEvent {
|
|
976
|
+
export interface ToolCallStartEvent<TToolName extends string = string> extends Pick<AGUIToolCallStartEvent, 'toolCallId' | 'toolCallName' | 'parentMessageId' | 'timestamp' | 'rawEvent'> {
|
|
977
|
+
type: 'TOOL_CALL_START';
|
|
962
978
|
/** Model identifier for multi-model support */
|
|
963
979
|
model?: string;
|
|
964
980
|
/**
|
|
965
981
|
* @deprecated Use `toolCallName` instead (from @ag-ui/core spec).
|
|
966
982
|
* Kept for backward compatibility.
|
|
983
|
+
*
|
|
984
|
+
* Carries `TToolName` on the base interface; for `toolCallName` narrowing use
|
|
985
|
+
* {@link TypedStreamChunk} (distributed variants intersect the AG-UI field).
|
|
967
986
|
*/
|
|
968
|
-
toolName:
|
|
987
|
+
toolName: TToolName;
|
|
969
988
|
/** Index for parallel tool calls */
|
|
970
989
|
index?: number;
|
|
971
990
|
/** Provider-specific metadata to carry into the ToolCall.
|
|
@@ -990,21 +1009,35 @@ export interface ToolCallArgsEvent extends AGUIToolCallArgsEvent {
|
|
|
990
1009
|
* Emitted when a tool call completes.
|
|
991
1010
|
*
|
|
992
1011
|
* @ag-ui/core provides: `toolCallId`
|
|
993
|
-
* TanStack AI adds: `model?`, `toolCallName?`, `toolName?` (deprecated), `input?`, `result?`
|
|
1012
|
+
* TanStack AI adds: `model?`, `toolCallName?`, `toolName?` (deprecated), `input?`, `output?`, `result?`
|
|
1013
|
+
*
|
|
1014
|
+
* Same `Pick` (not `extends`) rationale as {@link ToolCallStartEvent}.
|
|
1015
|
+
*
|
|
1016
|
+
* @typeParam TToolName - Constrained tool name type. Defaults to `string` (untyped).
|
|
1017
|
+
* @typeParam TInput - Constrained input arguments type. Defaults to `unknown`.
|
|
1018
|
+
* @typeParam TOutput - Constrained output type from the tool's `outputSchema`. Defaults to `unknown`.
|
|
994
1019
|
*/
|
|
995
|
-
export interface ToolCallEndEvent extends AGUIToolCallEndEvent {
|
|
1020
|
+
export interface ToolCallEndEvent<TToolName extends string = string, TInput = unknown, TOutput = unknown> extends Pick<AGUIToolCallEndEvent, 'toolCallId' | 'timestamp' | 'rawEvent'> {
|
|
1021
|
+
type: 'TOOL_CALL_END';
|
|
996
1022
|
/** Model identifier for multi-model support */
|
|
997
1023
|
model?: string;
|
|
998
|
-
/** Name of the tool that completed */
|
|
999
|
-
toolCallName?:
|
|
1024
|
+
/** Name of the tool that completed (AG-UI-compatible optional field) */
|
|
1025
|
+
toolCallName?: TToolName;
|
|
1000
1026
|
/**
|
|
1001
1027
|
* @deprecated Use `toolCallName` instead.
|
|
1002
1028
|
* Kept for backward compatibility.
|
|
1003
1029
|
*/
|
|
1004
|
-
toolName?:
|
|
1030
|
+
toolName?: TToolName;
|
|
1005
1031
|
/** Final parsed input arguments (TanStack AI internal) */
|
|
1006
|
-
input?:
|
|
1007
|
-
/**
|
|
1032
|
+
input?: TInput;
|
|
1033
|
+
/**
|
|
1034
|
+
* Tool execution output, validated against the tool's `outputSchema` when
|
|
1035
|
+
* one is declared. Prefer this over parsing `result` when present.
|
|
1036
|
+
* Undefined for tools without execute, client tools pending approval, or
|
|
1037
|
+
* when execution throws.
|
|
1038
|
+
*/
|
|
1039
|
+
output?: TOutput;
|
|
1040
|
+
/** Tool execution result (TanStack AI internal / wire form) */
|
|
1008
1041
|
result?: string | Array<ContentPart>;
|
|
1009
1042
|
/** Tool execution output state (TanStack AI internal) */
|
|
1010
1043
|
state?: ToolOutputState;
|
|
@@ -1105,10 +1138,23 @@ export interface StateDeltaEvent extends AGUIStateDeltaEvent {
|
|
|
1105
1138
|
*
|
|
1106
1139
|
* @ag-ui/core provides: `name`, `value`
|
|
1107
1140
|
* TanStack AI adds: `model?`
|
|
1141
|
+
*
|
|
1142
|
+
* Uses `Pick` (not `extends`) so the Zod passthrough index signature does not
|
|
1143
|
+
* erase discriminant property access on {@link KnownCustomEvent} /
|
|
1144
|
+
* {@link TypedStreamChunk} unions.
|
|
1108
1145
|
*/
|
|
1109
|
-
export interface CustomEvent extends AGUICustomEvent {
|
|
1146
|
+
export interface CustomEvent extends Pick<AGUICustomEvent, 'name' | 'value' | 'timestamp' | 'rawEvent'> {
|
|
1147
|
+
type: 'CUSTOM';
|
|
1110
1148
|
/** Model identifier for multi-model support */
|
|
1111
1149
|
model?: string;
|
|
1150
|
+
/**
|
|
1151
|
+
* Routing metadata the TanStack engine attaches when emitting CUSTOM
|
|
1152
|
+
* events that need to be correlated with a specific thread/run.
|
|
1153
|
+
* Stripped by `strip-to-spec-middleware` before going on the wire so
|
|
1154
|
+
* the AG-UI consumer never sees them (when that middleware is enabled).
|
|
1155
|
+
*/
|
|
1156
|
+
threadId?: string;
|
|
1157
|
+
runId?: string;
|
|
1112
1158
|
}
|
|
1113
1159
|
/**
|
|
1114
1160
|
* Final event of a streaming structured-output run. Carries the validated
|
|
@@ -1157,6 +1203,10 @@ export interface StructuredOutputStartEvent extends CustomEvent {
|
|
|
1157
1203
|
* (the agent-loop branch of `runStreamingStructuredOutputImpl` in
|
|
1158
1204
|
* `activities/chat/index.ts` forwards CUSTOM events from `TextEngine.run()`).
|
|
1159
1205
|
*/
|
|
1206
|
+
/**
|
|
1207
|
+
* @deprecated Native interrupts use RUN_FINISHED interrupt outcomes. This
|
|
1208
|
+
* compatibility event remains readable until 1.0.
|
|
1209
|
+
*/
|
|
1160
1210
|
export interface ApprovalRequestedEvent extends CustomEvent {
|
|
1161
1211
|
name: 'approval-requested';
|
|
1162
1212
|
value: {
|
|
@@ -1175,6 +1225,10 @@ export interface ApprovalRequestedEvent extends CustomEvent {
|
|
|
1175
1225
|
* will not fire for that run. Shape fixed by the agent-loop forwarding in
|
|
1176
1226
|
* `runStreamingStructuredOutputImpl` in `activities/chat/index.ts`.
|
|
1177
1227
|
*/
|
|
1228
|
+
/**
|
|
1229
|
+
* @deprecated Native interrupts use RUN_FINISHED interrupt outcomes. This
|
|
1230
|
+
* compatibility event remains readable until 1.0.
|
|
1231
|
+
*/
|
|
1178
1232
|
export interface ToolInputAvailableEvent extends CustomEvent {
|
|
1179
1233
|
name: 'tool-input-available';
|
|
1180
1234
|
value: {
|
|
@@ -1311,11 +1365,15 @@ export type ChatStream = AsyncIterable<Exclude<StreamChunk, CustomEvent> | Known
|
|
|
1311
1365
|
/**
|
|
1312
1366
|
* Public type for streams returned by `chat({ outputSchema, stream: true })`.
|
|
1313
1367
|
*
|
|
1314
|
-
* Yields all standard `StreamChunk` lifecycle events plus the
|
|
1315
|
-
* `CUSTOM`
|
|
1368
|
+
* Yields all standard `StreamChunk` lifecycle events plus the typed
|
|
1369
|
+
* structured-output `CUSTOM` event emitted through this path:
|
|
1316
1370
|
* - `structured-output.complete` — terminal event with typed `value.object: T`
|
|
1317
|
-
*
|
|
1318
|
-
* -
|
|
1371
|
+
*
|
|
1372
|
+
* User-actionable waits, such as tool approval and client tool input, are
|
|
1373
|
+
* represented by `RUN_FINISHED.outcome.type === 'interrupt'` in current core
|
|
1374
|
+
* streams. Legacy `approval-requested` and `tool-input-available` custom
|
|
1375
|
+
* events may still be consumed for replay and backward compatibility, but
|
|
1376
|
+
* they are not the current source of truth for waits.
|
|
1319
1377
|
*
|
|
1320
1378
|
* Each variant has a literal `name`, so a single discriminated narrow gives
|
|
1321
1379
|
* you a typed `value` with no helper or cast:
|
|
@@ -1324,8 +1382,6 @@ export type ChatStream = AsyncIterable<Exclude<StreamChunk, CustomEvent> | Known
|
|
|
1324
1382
|
* for await (const chunk of stream) {
|
|
1325
1383
|
* if (chunk.type === 'CUSTOM' && chunk.name === 'structured-output.complete') {
|
|
1326
1384
|
* chunk.value.object // typed as T
|
|
1327
|
-
* } else if (chunk.type === 'CUSTOM' && chunk.name === 'approval-requested') {
|
|
1328
|
-
* chunk.value.toolCallId // typed as string
|
|
1329
1385
|
* }
|
|
1330
1386
|
* }
|
|
1331
1387
|
* ```
|
|
@@ -1408,6 +1464,167 @@ export type AGUIEvent = RunStartedEvent | RunFinishedEvent | RunErrorEvent | Tex
|
|
|
1408
1464
|
* Uses the AG-UI protocol event format.
|
|
1409
1465
|
*/
|
|
1410
1466
|
export type StreamChunk = AGUIEvent;
|
|
1467
|
+
/**
|
|
1468
|
+
* Detect the `any` type. Returns `true` for `any`, `false` for everything else.
|
|
1469
|
+
* @internal
|
|
1470
|
+
*/
|
|
1471
|
+
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
1472
|
+
/**
|
|
1473
|
+
* Partition out provider-specific tools from a tools array. `ProviderTool`
|
|
1474
|
+
* carries opaque provider metadata (e.g. `webSearchTool` from
|
|
1475
|
+
* `@tanstack/ai-anthropic`) and intentionally has a generic `string` name —
|
|
1476
|
+
* if we included it in the discriminated union, it would widen `toolName`
|
|
1477
|
+
* back to `string` and defeat the entire typing exercise.
|
|
1478
|
+
*
|
|
1479
|
+
* @internal
|
|
1480
|
+
*/
|
|
1481
|
+
type NonProviderTools<TTools extends ReadonlyArray<AnyTool>> = Exclude<TTools[number], ProviderTool<string, string>>;
|
|
1482
|
+
/**
|
|
1483
|
+
* Check whether the tools array carries typed tool definitions.
|
|
1484
|
+
* Returns `false` for empty arrays or arrays whose only entries are
|
|
1485
|
+
* `ProviderTool`s (which have generic `string` names).
|
|
1486
|
+
*
|
|
1487
|
+
* The partitioning step matters: a user who passes
|
|
1488
|
+
* `[webSearchTool, myTypedTool]` should still get typed narrowing for
|
|
1489
|
+
* `myTypedTool`. Evaluating `string extends TTools[number]['name']` without
|
|
1490
|
+
* filtering provider tools first would always return `false` (because
|
|
1491
|
+
* `ProviderTool`'s `name` is `string`) and silently fall through to the
|
|
1492
|
+
* untyped branch.
|
|
1493
|
+
*
|
|
1494
|
+
* @internal
|
|
1495
|
+
*/
|
|
1496
|
+
type HasTypedTools<TTools extends ReadonlyArray<AnyTool>> = [
|
|
1497
|
+
NonProviderTools<TTools>
|
|
1498
|
+
] extends [never] ? false : string extends NonProviderTools<TTools>['name'] ? false : true;
|
|
1499
|
+
/**
|
|
1500
|
+
* Safely infer input type for a single tool, guarding against `any` leaks.
|
|
1501
|
+
* Returns `unknown` when the tool has no inputSchema, when the schema
|
|
1502
|
+
* parameter defaults to `undefined` (no-schema tool definitions), or when
|
|
1503
|
+
* InferSchemaType produces `any` (e.g. for plain JSON Schema tools).
|
|
1504
|
+
* @internal
|
|
1505
|
+
*/
|
|
1506
|
+
type SafeToolInput<T> = T extends {
|
|
1507
|
+
inputSchema?: infer TInput;
|
|
1508
|
+
} ? [TInput] extends [undefined] ? unknown : IsAny<InferSchemaType<NonNullable<TInput>>> extends true ? unknown : InferSchemaType<NonNullable<TInput>> : unknown;
|
|
1509
|
+
/**
|
|
1510
|
+
* Safely infer output type for a single tool. Mirrors `SafeToolInput`,
|
|
1511
|
+
* picking `outputSchema` instead. Returns `unknown` when the tool has no
|
|
1512
|
+
* `outputSchema` declared, when the schema parameter defaults to `undefined`,
|
|
1513
|
+
* or when `InferSchemaType` produces `any`.
|
|
1514
|
+
* @internal
|
|
1515
|
+
*/
|
|
1516
|
+
type SafeToolOutput<T> = T extends {
|
|
1517
|
+
outputSchema?: infer TOutput;
|
|
1518
|
+
} ? [TOutput] extends [undefined] ? unknown : IsAny<InferSchemaType<NonNullable<TOutput>>> extends true ? unknown : InferSchemaType<NonNullable<TOutput>> : unknown;
|
|
1519
|
+
/**
|
|
1520
|
+
* Distribute over each non-provider tool to create a per-tool
|
|
1521
|
+
* `ToolCallStartEvent`.
|
|
1522
|
+
*
|
|
1523
|
+
* This produces a discriminated union — one variant per tool name literal.
|
|
1524
|
+
* We distribute over `NonProviderTools<TTools>` (not `TTools[number]`) so
|
|
1525
|
+
* that provider tools with generic `string` names do not leak into the
|
|
1526
|
+
* union and widen `toolCallName` / `toolName` back to `string`.
|
|
1527
|
+
*
|
|
1528
|
+
* The trailing `& { toolCallName: TName; toolName: TName }` intersection
|
|
1529
|
+
* narrows the base `AGUIToolCallStartEvent['toolCallName']` (declared as
|
|
1530
|
+
* `string`) to the literal name — TypeScript intersects `string & TName`
|
|
1531
|
+
* down to `TName` for literal `TName`.
|
|
1532
|
+
*
|
|
1533
|
+
* The `name` parameter constraint on the inner `extends` picks up any
|
|
1534
|
+
* tool-like shape — including `ServerTool`, `ClientTool`, and the bare
|
|
1535
|
+
* `Tool` definition — because all three expose `name: TName`.
|
|
1536
|
+
* @internal
|
|
1537
|
+
*/
|
|
1538
|
+
type DistributedToolCallStart<TTools extends ReadonlyArray<AnyTool>> = NonProviderTools<TTools> extends infer T ? T extends {
|
|
1539
|
+
name: infer TName extends string;
|
|
1540
|
+
} ? ToolCallStartEvent<TName> & {
|
|
1541
|
+
toolCallName: TName;
|
|
1542
|
+
toolName: TName;
|
|
1543
|
+
} : never : never;
|
|
1544
|
+
/**
|
|
1545
|
+
* Distribute over each non-provider tool to create a per-tool
|
|
1546
|
+
* `ToolCallEndEvent`.
|
|
1547
|
+
*
|
|
1548
|
+
* Each variant pairs the tool's name literal with its specific input type,
|
|
1549
|
+
* enabling discriminated narrowing: checking `toolName === 'x'` narrows
|
|
1550
|
+
* `input`.
|
|
1551
|
+
*
|
|
1552
|
+
* `toolName`/`toolCallName` are intersected as required in the distributed
|
|
1553
|
+
* variants so that `Extract<..., { toolName: 'x' }>` works for consumers
|
|
1554
|
+
* relying on the discriminated-union pattern, even though the base
|
|
1555
|
+
* interface keeps them optional for compatibility with the broader AG-UI
|
|
1556
|
+
* surface.
|
|
1557
|
+
*
|
|
1558
|
+
* Distribution happens over `NonProviderTools<TTools>` for the same
|
|
1559
|
+
* reason as in `DistributedToolCallStart`.
|
|
1560
|
+
* @internal
|
|
1561
|
+
*/
|
|
1562
|
+
type DistributedToolCallEnd<TTools extends ReadonlyArray<AnyTool>> = NonProviderTools<TTools> extends infer T ? T extends {
|
|
1563
|
+
name: infer TName extends string;
|
|
1564
|
+
} ? ToolCallEndEvent<TName, SafeToolInput<T>, SafeToolOutput<T>> & {
|
|
1565
|
+
toolCallName: TName;
|
|
1566
|
+
toolName: TName;
|
|
1567
|
+
} : never : never;
|
|
1568
|
+
/**
|
|
1569
|
+
* Discriminated union of the orchestrator-tagged `CUSTOM` events. Each variant
|
|
1570
|
+
* has a literal `name`, so a single narrow on `chunk.name` yields a typed
|
|
1571
|
+
* `value` with no helper or cast:
|
|
1572
|
+
*
|
|
1573
|
+
* ```ts
|
|
1574
|
+
* if (chunk.type === 'CUSTOM' && chunk.name === 'approval-requested') {
|
|
1575
|
+
* chunk.value.toolCallId // typed as string
|
|
1576
|
+
* }
|
|
1577
|
+
* ```
|
|
1578
|
+
*
|
|
1579
|
+
* The `StructuredOutputCompleteEvent` value is parameterized by `T`, which
|
|
1580
|
+
* the chat orchestrator narrows to the schema's inferred type after Standard
|
|
1581
|
+
* Schema validation. Adapters always emit it with `T = unknown`.
|
|
1582
|
+
*
|
|
1583
|
+
* Caveat: tools can emit arbitrary user-defined custom events via the
|
|
1584
|
+
* `emitCustomEvent(name, value)` context API. Those flow through the stream
|
|
1585
|
+
* at runtime but are intentionally absent from this union — including a bare
|
|
1586
|
+
* `CustomEvent` (whose `value: any` would poison the union) would collapse
|
|
1587
|
+
* `chunk.value` back to `any` after the narrow. If you rely on
|
|
1588
|
+
* `emitCustomEvent`, branch on `CUSTOM` outside the literal-`name` narrows
|
|
1589
|
+
* or cast the chunk to `StreamChunk` to recover the wider shape.
|
|
1590
|
+
*/
|
|
1591
|
+
export type TaggedCustomEvent<T = unknown> = StructuredOutputStartEvent | StructuredOutputCompleteEvent<T> | ApprovalRequestedEvent | ToolInputAvailableEvent;
|
|
1592
|
+
/**
|
|
1593
|
+
* Stream chunk type parameterized by the tools array for type-safe tool call events.
|
|
1594
|
+
*
|
|
1595
|
+
* When specific tool types are provided (e.g. from `chat({ tools: [myTool] })`):
|
|
1596
|
+
* - `TOOL_CALL_START` and `TOOL_CALL_END` events form a **discriminated union**
|
|
1597
|
+
* over tool names — checking `toolName === 'x'` narrows `input` to that tool's type.
|
|
1598
|
+
* - `TOOL_CALL_END` events have `input` typed per-tool via Standard Schema inference.
|
|
1599
|
+
*
|
|
1600
|
+
* `CUSTOM` events are narrowed to the discriminated {@link KnownCustomEvent}
|
|
1601
|
+
* union (sandbox, code-mode, structured-output, approvals, UI resources, etc.).
|
|
1602
|
+
* Free-form user-emitted custom events (via `emitCustomEvent`) still flow at
|
|
1603
|
+
* runtime but are excluded from the type to avoid `any` poisoning the union;
|
|
1604
|
+
* cast to `StreamChunk` if you need to read those.
|
|
1605
|
+
*
|
|
1606
|
+
* When tools are untyped or absent, the tool-call events stay as plain
|
|
1607
|
+
* `ToolCallStartEvent` / `ToolCallEndEvent` (no per-tool name narrowing) and
|
|
1608
|
+
* the type is equivalent to the element type of {@link ChatStream}.
|
|
1609
|
+
*/
|
|
1610
|
+
/**
|
|
1611
|
+
* Replace tool-call and bare CUSTOM variants; keep every other StreamChunk
|
|
1612
|
+
* arm. Matches on the string-literal `type` discriminant that TanStack tool
|
|
1613
|
+
* events declare (see ToolCallStartEvent / ToolCallEndEvent). AG-UI events
|
|
1614
|
+
* that still use the EventType enum are kept as-is via the final branch.
|
|
1615
|
+
*
|
|
1616
|
+
* Do **not** use `Exclude<StreamChunk, { type: 'TOOL_CALL_*' }>` — under
|
|
1617
|
+
* @ag-ui/core passthrough index signatures that form removes *every* arm.
|
|
1618
|
+
* @internal
|
|
1619
|
+
*/
|
|
1620
|
+
type RemapStreamChunkForTools<TChunk, TTools extends ReadonlyArray<AnyTool>> = TChunk extends {
|
|
1621
|
+
type: 'TOOL_CALL_START';
|
|
1622
|
+
} ? DistributedToolCallStart<TTools> : TChunk extends {
|
|
1623
|
+
type: 'TOOL_CALL_END';
|
|
1624
|
+
} ? DistributedToolCallEnd<TTools> : TChunk extends {
|
|
1625
|
+
type: 'CUSTOM';
|
|
1626
|
+
} ? never : TChunk;
|
|
1627
|
+
export type TypedStreamChunk<TTools extends ReadonlyArray<AnyTool> = ReadonlyArray<AnyTool>> = HasTypedTools<TTools> extends true ? RemapStreamChunkForTools<StreamChunk, TTools> | KnownCustomEvent : Exclude<StreamChunk, CustomEvent> | KnownCustomEvent;
|
|
1411
1628
|
export interface TextCompletionChunk {
|
|
1412
1629
|
id: string;
|
|
1413
1630
|
model: string;
|
|
@@ -1424,6 +1641,16 @@ export interface SummarizationOptions<TProviderOptions extends object = Record<s
|
|
|
1424
1641
|
focus?: Array<string>;
|
|
1425
1642
|
/** Provider-specific options forwarded by the summarize() activity. */
|
|
1426
1643
|
modelOptions?: TProviderOptions;
|
|
1644
|
+
/**
|
|
1645
|
+
* Run identity forwarded from the summarize() activity. When set, the
|
|
1646
|
+
* streaming adapter stamps it onto the emitted `RUN_STARTED` (via the wrapped
|
|
1647
|
+
* chat), so a delivery-durable route keys the run's log by the same id the
|
|
1648
|
+
* client rejoins with — making a mid-run reload resumable, like the media
|
|
1649
|
+
* activities. Optional and non-breaking: adapters that ignore it just mint
|
|
1650
|
+
* their own.
|
|
1651
|
+
*/
|
|
1652
|
+
runId?: string;
|
|
1653
|
+
threadId?: string;
|
|
1427
1654
|
/**
|
|
1428
1655
|
* Internal logger threaded from the summarize() entry point. Adapters must
|
|
1429
1656
|
* call logger.request() before the SDK call and logger.errors() in catch blocks.
|
|
@@ -1550,6 +1777,42 @@ export type GeneratedMediaSource = {
|
|
|
1550
1777
|
b64Json: string;
|
|
1551
1778
|
url?: never;
|
|
1552
1779
|
};
|
|
1780
|
+
export type PersistedArtifactRole = 'input' | 'output';
|
|
1781
|
+
export type PersistedArtifactActivity = 'image' | 'audio' | 'tts' | 'video' | 'transcription';
|
|
1782
|
+
export interface PersistedArtifactRef {
|
|
1783
|
+
role: PersistedArtifactRole;
|
|
1784
|
+
artifactId: string;
|
|
1785
|
+
threadId: string;
|
|
1786
|
+
runId: string;
|
|
1787
|
+
name: string;
|
|
1788
|
+
mimeType: string;
|
|
1789
|
+
size: number;
|
|
1790
|
+
createdAt: string;
|
|
1791
|
+
/**
|
|
1792
|
+
* Where these bytes were fetched FROM — the provider's original result URL,
|
|
1793
|
+
* or a caller-supplied prompt URL when `allowInputUrl` opted that in. Usually
|
|
1794
|
+
* expiring, and provenance only: serve from {@link PersistedArtifactRef.url}
|
|
1795
|
+
* instead.
|
|
1796
|
+
*/
|
|
1797
|
+
sourceUrl?: string;
|
|
1798
|
+
/**
|
|
1799
|
+
* Durable app-origin URL that serves this artifact's persisted bytes (your
|
|
1800
|
+
* `GET` route around `retrieveArtifact` / `retrieveBlob`). Stamped by
|
|
1801
|
+
* `withGenerationPersistence`'s `artifactUrl` option, so clients render and
|
|
1802
|
+
* restore durable media from your own origin rather than the provider's
|
|
1803
|
+
* expiring link.
|
|
1804
|
+
*/
|
|
1805
|
+
url?: string;
|
|
1806
|
+
source: {
|
|
1807
|
+
activity: PersistedArtifactActivity;
|
|
1808
|
+
path: string;
|
|
1809
|
+
provider: string;
|
|
1810
|
+
model: string;
|
|
1811
|
+
mediaType?: 'image' | 'audio' | 'video' | 'document' | 'json';
|
|
1812
|
+
jobId?: string;
|
|
1813
|
+
expiresAt?: string;
|
|
1814
|
+
};
|
|
1815
|
+
}
|
|
1553
1816
|
/**
|
|
1554
1817
|
* A single generated image
|
|
1555
1818
|
*/
|
|
@@ -1569,6 +1832,8 @@ export interface ImageGenerationResult {
|
|
|
1569
1832
|
images: Array<GeneratedImage>;
|
|
1570
1833
|
/** Token usage information (if available) */
|
|
1571
1834
|
usage?: TokenUsage;
|
|
1835
|
+
/** Persisted artifact references for generated assets, when available */
|
|
1836
|
+
artifacts?: Array<PersistedArtifactRef>;
|
|
1572
1837
|
}
|
|
1573
1838
|
/**
|
|
1574
1839
|
* Options for audio generation (music, sound effects, etc.).
|
|
@@ -1611,6 +1876,8 @@ export interface AudioGenerationResult {
|
|
|
1611
1876
|
audio: GeneratedAudio;
|
|
1612
1877
|
/** Token usage information (if available) */
|
|
1613
1878
|
usage?: TokenUsage;
|
|
1879
|
+
/** Persisted artifact references for generated assets, when available */
|
|
1880
|
+
artifacts?: Array<PersistedArtifactRef>;
|
|
1614
1881
|
}
|
|
1615
1882
|
/**
|
|
1616
1883
|
* Options for video generation.
|
|
@@ -1656,6 +1923,12 @@ export interface VideoJobResult {
|
|
|
1656
1923
|
jobId: string;
|
|
1657
1924
|
/** Model used for generation */
|
|
1658
1925
|
model: string;
|
|
1926
|
+
/**
|
|
1927
|
+
* Durable artifact references, when generation persistence with an artifact +
|
|
1928
|
+
* blob store is wired. A submission has no video yet, so this only carries
|
|
1929
|
+
* refs for persisted prompt INPUTS (e.g. a start frame).
|
|
1930
|
+
*/
|
|
1931
|
+
artifacts?: Array<PersistedArtifactRef>;
|
|
1659
1932
|
}
|
|
1660
1933
|
/**
|
|
1661
1934
|
* Status of a video generation job.
|
|
@@ -1690,6 +1963,8 @@ export interface VideoUrlResult {
|
|
|
1690
1963
|
* real billed quantity — so consumers can compute exact cost.
|
|
1691
1964
|
*/
|
|
1692
1965
|
usage?: TokenUsage;
|
|
1966
|
+
/** Persisted artifact references for generated assets, when available */
|
|
1967
|
+
artifacts?: Array<PersistedArtifactRef>;
|
|
1693
1968
|
}
|
|
1694
1969
|
/**
|
|
1695
1970
|
* Options for text-to-speech generation.
|
|
@@ -1733,6 +2008,8 @@ export interface TTSResult {
|
|
|
1733
2008
|
contentType?: string;
|
|
1734
2009
|
/** Token usage information (if provided by the adapter) */
|
|
1735
2010
|
usage?: TokenUsage;
|
|
2011
|
+
/** Persisted artifact references for generated assets, when available */
|
|
2012
|
+
artifacts?: Array<PersistedArtifactRef>;
|
|
1736
2013
|
}
|
|
1737
2014
|
/**
|
|
1738
2015
|
* Options for audio transcription.
|
|
@@ -1807,6 +2084,8 @@ export interface TranscriptionResult {
|
|
|
1807
2084
|
words?: Array<TranscriptionWord>;
|
|
1808
2085
|
/** Token usage information (if provided by the adapter) */
|
|
1809
2086
|
usage?: TokenUsage;
|
|
2087
|
+
/** Persisted artifact references for generated assets, when available */
|
|
2088
|
+
artifacts?: Array<PersistedArtifactRef>;
|
|
1810
2089
|
}
|
|
1811
2090
|
/**
|
|
1812
2091
|
* Default metadata type for adapters that don't define custom metadata.
|