@assistant-ui/ai-sdk 0.0.7 → 0.0.8
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 +1 -1
- package/dist/adapters/aiSDKFormatAdapter.d.ts +2 -2
- package/dist/adapters/aiSDKFormatAdapter.d.ts.map +1 -0
- package/dist/adapters/vercelAttachmentAdapter.d.ts +1 -3
- package/dist/adapters/vercelAttachmentAdapter.d.ts.map +1 -1
- package/dist/adapters/vercelAttachmentAdapter.js +3 -3
- package/dist/adapters/vercelAttachmentAdapter.js.map +1 -1
- package/dist/aiSDKExtras.d.ts +4 -6
- package/dist/aiSDKExtras.d.ts.map +1 -1
- package/dist/converters/convertMessage.d.ts +32 -24
- package/dist/converters/convertMessage.d.ts.map +1 -1
- package/dist/converters/convertMessage.js +43 -9
- package/dist/converters/convertMessage.js.map +1 -1
- package/dist/converters/modelContentEnvelope.d.ts +6 -7
- package/dist/converters/modelContentEnvelope.d.ts.map +1 -1
- package/dist/converters/toCreateMessage.d.ts +2 -4
- package/dist/converters/toCreateMessage.d.ts.map +1 -1
- package/dist/converters/toolOutputConversion.d.ts +20 -22
- package/dist/converters/toolOutputConversion.d.ts.map +1 -1
- package/dist/hooks.d.ts +2 -4
- package/dist/hooks.d.ts.map +1 -1
- package/dist/index.d.ts +17 -14
- package/dist/index.d.ts.map +1 -0
- package/dist/index.native.d.ts +15 -12
- package/dist/index.native.d.ts.map +1 -0
- package/dist/model-context/injectInteractableContext.d.ts +2 -4
- package/dist/model-context/injectInteractableContext.d.ts.map +1 -1
- package/dist/model-context/injectQuoteContext.d.ts +1 -3
- package/dist/model-context/injectQuoteContext.d.ts.map +1 -1
- package/dist/runtime/AISDKChat.d.ts +2 -4
- package/dist/runtime/AISDKChat.d.ts.map +1 -1
- package/dist/runtime/AISDKChat.js +1 -1
- package/dist/runtime/AISDKThreads.d.ts +29 -31
- package/dist/runtime/AISDKThreads.d.ts.map +1 -1
- package/dist/runtime/AISDKThreads.js +22 -23
- package/dist/runtime/AISDKThreads.js.map +1 -1
- package/dist/runtime/sdkIdentity.d.ts +1 -3
- package/dist/runtime/sdkIdentity.d.ts.map +1 -1
- package/dist/runtime/sdkIdentity.js +1 -1
- package/dist/runtime/useAISDKRuntime.d.ts +69 -70
- package/dist/runtime/useAISDKRuntime.d.ts.map +1 -1
- package/dist/runtime/useAISDKRuntime.js +112 -56
- package/dist/runtime/useAISDKRuntime.js.map +1 -1
- package/dist/runtime/useChatRuntime.d.ts +6 -8
- package/dist/runtime/useChatRuntime.d.ts.map +1 -1
- package/dist/runtime/useChatRuntime.js +14 -10
- package/dist/runtime/useChatRuntime.js.map +1 -1
- package/dist/runtime/useChatThread.d.ts +94 -89
- package/dist/runtime/useChatThread.d.ts.map +1 -1
- package/dist/runtime/useChatThread.js +4 -5
- package/dist/runtime/useChatThread.js.map +1 -1
- package/dist/runtime/useExternalHistory.d.ts +7 -7
- package/dist/runtime/useExternalHistory.d.ts.map +1 -1
- package/dist/runtime/useExternalHistory.js +229 -59
- package/dist/runtime/useExternalHistory.js.map +1 -1
- package/dist/runtime/useResourceCleanup.d.ts +1 -3
- package/dist/runtime/useResourceCleanup.d.ts.map +1 -1
- package/dist/runtime/useResourceCleanup.js +38 -14
- package/dist/runtime/useResourceCleanup.js.map +1 -1
- package/dist/runtime/useStreamingTiming.d.ts +3 -5
- package/dist/runtime/useStreamingTiming.d.ts.map +1 -1
- package/dist/runtime/useStreamingTiming.js +1 -1
- package/dist/tools/frontendTools.d.ts +21 -23
- package/dist/tools/frontendTools.d.ts.map +1 -1
- package/dist/tools/generativeTools.d.ts +24 -26
- package/dist/tools/generativeTools.d.ts.map +1 -1
- package/dist/tools/mcp-stdio.node.d.ts +2 -2
- package/dist/tools/mcp-stdio.node.d.ts.map +1 -0
- package/dist/tools/mcp-stdio.unsupported.d.ts +2 -4
- package/dist/tools/mcp-stdio.unsupported.d.ts.map +1 -1
- package/dist/transport/AssistantChatTransport.d.ts +14 -16
- package/dist/transport/AssistantChatTransport.d.ts.map +1 -1
- package/dist/transport/resumable.d.ts +25 -27
- package/dist/transport/resumable.d.ts.map +1 -1
- package/dist/usage.d.ts +8 -10
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js.map +1 -1
- package/dist/utils/getVercelAIMessages.d.ts +2 -4
- package/dist/utils/getVercelAIMessages.d.ts.map +1 -1
- package/dist/utils/sliceMessagesUntil.d.ts +1 -3
- package/dist/utils/sliceMessagesUntil.d.ts.map +1 -1
- package/package.json +9 -8
- package/src/adapters/vercelAttachmentAdapter.test.ts +23 -0
- package/src/adapters/vercelAttachmentAdapter.ts +2 -2
- package/src/converters/convertMessage.test.ts +478 -3
- package/src/converters/convertMessage.ts +100 -14
- package/src/index.native.ts +1 -1
- package/src/index.ts +1 -1
- package/src/runtime/AISDKThreads.cloud.test.ts +60 -2
- package/src/runtime/AISDKThreads.test.ts +79 -46
- package/src/runtime/AISDKThreads.ts +1 -1
- package/src/runtime/useAISDKRuntime.approval.integration.test.tsx +51 -0
- package/src/runtime/useAISDKRuntime.approval.test.tsx +225 -9
- package/src/runtime/useAISDKRuntime.test.ts +275 -5
- package/src/runtime/useAISDKRuntime.ts +141 -37
- package/src/runtime/useAISDKRuntime.voice.test.tsx +50 -1
- package/src/runtime/useChatRuntime.integration.test.tsx +56 -0
- package/src/runtime/useChatRuntime.test.ts +5 -1
- package/src/runtime/useChatRuntime.ts +6 -2
- package/src/runtime/useChatThread.transport.test.tsx +149 -0
- package/src/runtime/useChatThread.ts +33 -5
- package/src/runtime/useExternalHistory.test.ts +943 -3
- package/src/runtime/useExternalHistory.ts +366 -14
- package/src/runtime/useResourceCleanup.ts +41 -15
- package/src/usage.ts +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
/// <reference types="@assistant-ui/core/react" />
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
export {
|
|
1
|
+
/// <reference types="@assistant-ui/core/react" preserve="true" />
|
|
2
|
+
export { useAISDKRuntime } from "./runtime/useAISDKRuntime.js";
|
|
3
|
+
export { useChatRuntime } from "./runtime/useChatRuntime.js";
|
|
4
|
+
export type { UseChatRuntimeOptions } from "./runtime/useChatRuntime.js";
|
|
5
|
+
export { AssistantChatTransport } from "./transport/AssistantChatTransport.js";
|
|
6
|
+
export { RESUMABLE_STREAM_ID_HEADER, createResumableSessionStorage, } from "./transport/resumable.js";
|
|
7
|
+
export type { AssistantChatResumableOptions, ResumableClientStorage, } from "./transport/resumable.js";
|
|
8
|
+
export { frontendTools, type FrontendTools } from "./tools/frontendTools.js";
|
|
9
|
+
export { injectQuoteContext } from "./model-context/injectQuoteContext.js";
|
|
10
|
+
export { unstable_injectInteractableContext } from "./model-context/injectInteractableContext.js";
|
|
11
|
+
export type { ThreadTokenUsage, TokenUsageExtractableMessage } from "./usage.js";
|
|
12
|
+
export { getThreadMessageTokenUsage, useThreadTokenUsage } from "./usage.js";
|
|
13
|
+
export { useAISDKChat, useAISDKError } from "./hooks.js";
|
|
14
|
+
export { AISDKToolkit, generativeTools, type AISDKToolkitOptions, type AISDKToolkitToolsOptions, type GenerativeToolsOptions, } from "./tools/generativeTools.js";
|
|
15
|
+
export { AISDKChat, type AISDKChatOptions } from "./runtime/AISDKChat.js";
|
|
16
|
+
export { AISDKThreads, type AISDKThreadsOptions } from "./runtime/AISDKThreads.js";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,qCAAkC;AAC5D,OAAO,EAAE,cAAc,EAAE,oCAAiC;AAC1D,YAAY,EAAE,qBAAqB,EAAE,oCAAiC;AACtE,OAAO,EAAE,sBAAsB,EAAE,8CAA2C;AAC5E,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,iCAA8B;AAC/B,YAAY,EACV,6BAA6B,EAC7B,sBAAsB,GACvB,iCAA8B;AAC/B,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,iCAA8B;AAC1E,OAAO,EAAE,kBAAkB,EAAE,8CAA2C;AACxE,OAAO,EAAE,kCAAkC,EAAE,qDAAkD;AAC/F,YAAY,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,mBAAgB;AAC9E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,mBAAgB;AAC1E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAgB;AACtD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,GAC5B,mCAAgC;AACjC,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,+BAA4B;AACvE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,kCAA+B"}
|
package/dist/index.native.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
/// <reference types="@assistant-ui/core/react" />
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export {
|
|
1
|
+
/// <reference types="@assistant-ui/core/react" preserve="true" />
|
|
2
|
+
export { useAISDKRuntime } from "./runtime/useAISDKRuntime.js";
|
|
3
|
+
export { useChatRuntime } from "./runtime/useChatRuntime.js";
|
|
4
|
+
export type { UseChatRuntimeOptions } from "./runtime/useChatRuntime.js";
|
|
5
|
+
export { AssistantChatTransport } from "./transport/AssistantChatTransport.js";
|
|
6
|
+
export { RESUMABLE_STREAM_ID_HEADER, createResumableSessionStorage, } from "./transport/resumable.js";
|
|
7
|
+
export type { AssistantChatResumableOptions, ResumableClientStorage, } from "./transport/resumable.js";
|
|
8
|
+
export { frontendTools, type FrontendTools } from "./tools/frontendTools.js";
|
|
9
|
+
export { injectQuoteContext } from "./model-context/injectQuoteContext.js";
|
|
10
|
+
export { unstable_injectInteractableContext } from "./model-context/injectInteractableContext.js";
|
|
11
|
+
export type { ThreadTokenUsage, TokenUsageExtractableMessage } from "./usage.js";
|
|
12
|
+
export { getThreadMessageTokenUsage, useThreadTokenUsage } from "./usage.js";
|
|
13
|
+
export { useAISDKChat, useAISDKError } from "./hooks.js";
|
|
14
|
+
export { AISDKChat, type AISDKChatOptions } from "./runtime/AISDKChat.js";
|
|
15
|
+
//# sourceMappingURL=index.native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../src/index.native.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,qCAAkC;AAC5D,OAAO,EAAE,cAAc,EAAE,oCAAiC;AAC1D,YAAY,EAAE,qBAAqB,EAAE,oCAAiC;AACtE,OAAO,EAAE,sBAAsB,EAAE,8CAA2C;AAC5E,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,iCAA8B;AAC/B,YAAY,EACV,6BAA6B,EAC7B,sBAAsB,GACvB,iCAA8B;AAC/B,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,iCAA8B;AAC1E,OAAO,EAAE,kBAAkB,EAAE,8CAA2C;AACxE,OAAO,EAAE,kCAAkC,EAAE,qDAAkD;AAC/F,YAAY,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,mBAAgB;AAC9E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,mBAAgB;AAC1E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAgB;AACtD,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,+BAA4B"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { UIMessage } from "ai";
|
|
2
|
-
import { Unstable_InteractableSnapshotEntry } from "@assistant-ui/core";
|
|
3
|
-
//#region src/model-context/injectInteractableContext.d.ts
|
|
1
|
+
import type { UIMessage } from "ai";
|
|
2
|
+
import { type Unstable_InteractableSnapshotEntry } from "@assistant-ui/core";
|
|
4
3
|
/**
|
|
5
4
|
* Injects interactable state snapshots into messages as model-visible text.
|
|
6
5
|
*
|
|
@@ -32,5 +31,4 @@ import { Unstable_InteractableSnapshotEntry } from "@assistant-ui/core";
|
|
|
32
31
|
* ```
|
|
33
32
|
*/
|
|
34
33
|
export declare function unstable_injectInteractableContext(messages: UIMessage[], format?: (item: Unstable_InteractableSnapshotEntry) => string): UIMessage[];
|
|
35
|
-
//#endregion
|
|
36
34
|
//# sourceMappingURL=injectInteractableContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectInteractableContext.d.ts","
|
|
1
|
+
{"version":3,"file":"injectInteractableContext.d.ts","sourceRoot":"","sources":["../../src/model-context/injectInteractableContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAGL,KAAK,kCAAkC,EACxC,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,SAAS,EAAE,EACrB,MAAM,GAAE,CACN,IAAI,EAAE,kCAAkC,KACrC,MAA4C,GAChD,SAAS,EAAE,CAkBb"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { UIMessage } from "ai";
|
|
2
|
-
//#region src/model-context/injectQuoteContext.d.ts
|
|
1
|
+
import type { UIMessage } from "ai";
|
|
3
2
|
/**
|
|
4
3
|
* Injects quote context into messages as markdown blockquotes.
|
|
5
4
|
*
|
|
@@ -22,5 +21,4 @@ import { UIMessage } from "ai";
|
|
|
22
21
|
* ```
|
|
23
22
|
*/
|
|
24
23
|
export declare function injectQuoteContext(messages: UIMessage[]): UIMessage[];
|
|
25
|
-
//#endregion
|
|
26
24
|
//# sourceMappingURL=injectQuoteContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectQuoteContext.d.ts","
|
|
1
|
+
{"version":3,"file":"injectQuoteContext.d.ts","sourceRoot":"","sources":["../../src/model-context/injectQuoteContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAepC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAyBrE"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
//#region src/runtime/AISDKChat.d.ts
|
|
1
|
+
import type { UIMessage } from "@ai-sdk/react";
|
|
2
|
+
import { type ChatThreadOptions } from "./useChatThread.js";
|
|
4
3
|
export type AISDKChatOptions<UI_MESSAGE extends UIMessage = UIMessage> = ChatThreadOptions<UI_MESSAGE>;
|
|
5
4
|
/**
|
|
6
5
|
* `AuiConfig` entry that runs the AI SDK chat as the `threads` scope. Hosts the
|
|
@@ -11,5 +10,4 @@ export type AISDKChatOptions<UI_MESSAGE extends UIMessage = UIMessage> = ChatThr
|
|
|
11
10
|
* has no effect.
|
|
12
11
|
*/
|
|
13
12
|
export declare const AISDKChat: <UI_MESSAGE extends UIMessage = UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>>(options?: AISDKChatOptions<UI_MESSAGE> | undefined) => import("@assistant-ui/tap").ResourceElement<import("@assistant-ui/store").ClientOutput<"threads">>;
|
|
14
|
-
//#endregion
|
|
15
13
|
//# sourceMappingURL=AISDKChat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AISDKChat.d.ts","
|
|
1
|
+
{"version":3,"file":"AISDKChat.d.ts","sourceRoot":"","sources":["../../src/runtime/AISDKChat.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAM/C,OAAO,EAAiB,KAAK,iBAAiB,EAAE,2BAAwB;AAExE,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IACnE,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAsBhC;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GA5BA,UAAU,SAAS,SAAS,gOA4BH,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useChatThread } from "./useChatThread.js";
|
|
3
|
+
import { generateId } from "ai";
|
|
3
4
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
4
5
|
import { useState } from "@assistant-ui/tap/react-shim";
|
|
5
|
-
import { generateId } from "ai";
|
|
6
6
|
import { resource, useResource } from "@assistant-ui/tap";
|
|
7
7
|
import { RuntimeAdapter, runtimeAdapterTransformScopes } from "@assistant-ui/core/store";
|
|
8
8
|
import { attachTransformScopes } from "@assistant-ui/store/client";
|
|
@@ -1,32 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ChatTransport } from "ai";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;
|
|
1
|
+
import type { UIMessage } from "@ai-sdk/react";
|
|
2
|
+
import type { ChatTransport } from "ai";
|
|
3
|
+
import type { AssistantCloud } from "assistant-cloud";
|
|
4
|
+
import { type ChatThreadOptions } from "./useChatThread.js";
|
|
5
|
+
export type AISDKThreadsOptions<UI_MESSAGE extends UIMessage = UIMessage> = Omit<ChatThreadOptions<UI_MESSAGE>, "id" | "transport" | "messages"> & {
|
|
6
|
+
/**
|
|
7
|
+
* The transport threads send through. A factory is invoked once per
|
|
8
|
+
* thread so each thread owns its instance. A plain
|
|
9
|
+
* `AssistantChatTransport` instance is cloned per thread (its
|
|
10
|
+
* assistant-ui wiring is per thread); any other transport instance is
|
|
11
|
+
* shared as-is. Defaults to one `AssistantChatTransport` per thread.
|
|
12
|
+
*/
|
|
13
|
+
transport?: ChatTransport<UI_MESSAGE> | (() => ChatTransport<UI_MESSAGE>) | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* When set, the thread list is a `RemoteThreadList` backed by this
|
|
16
|
+
* assistant-cloud. Omit it to keep the in-memory list. Every visited
|
|
17
|
+
* cloud thread stays mounted, so an in-flight run continues after a
|
|
18
|
+
* switch and stops on delete; per-thread history loads once per thread.
|
|
19
|
+
*/
|
|
20
|
+
cloud?: AssistantCloud | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Controlled thread id for the cloud list. Ignored without `cloud`.
|
|
23
|
+
*/
|
|
24
|
+
threadId?: string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Called with the settled remote id when the cloud list changes thread.
|
|
27
|
+
*/
|
|
28
|
+
onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;
|
|
30
29
|
};
|
|
31
30
|
/**
|
|
32
31
|
* `AuiConfig` entry that runs one AI SDK chat per thread. Hosts the same
|
|
@@ -41,6 +40,5 @@ export type AISDKThreadsOptions<UI_MESSAGE extends UIMessage$1 = UIMessage$1> =
|
|
|
41
40
|
* delete, and a freshly created thread titles itself. Model context is
|
|
42
41
|
* registered on every mounted thread.
|
|
43
42
|
*/
|
|
44
|
-
export declare const AISDKThreads: <UI_MESSAGE extends UIMessage
|
|
45
|
-
//#endregion
|
|
43
|
+
export declare const AISDKThreads: <UI_MESSAGE extends UIMessage = UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>>(options?: AISDKThreadsOptions<UI_MESSAGE> | undefined) => import("@assistant-ui/tap").ResourceElement<import("@assistant-ui/store").ClientOutput<"threads">>;
|
|
46
44
|
//# sourceMappingURL=AISDKThreads.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AISDKThreads.d.ts","
|
|
1
|
+
{"version":3,"file":"AISDKThreads.d.ts","sourceRoot":"","sources":["../../src/runtime/AISDKThreads.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAQ,SAAS,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAetD,OAAO,EAIL,KAAK,iBAAiB,EACvB,2BAAwB;AAKzB,MAAM,MAAM,mBAAmB,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IACtE,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,UAAU,CAAC,GAAG;IACrE;;;;;;OAMG;IACH,SAAS,CAAC,EACN,aAAa,CAAC,UAAU,CAAC,GACzB,CAAC,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC,GACjC,SAAS,CAAC;IACd;;;;;OAKG;IACH,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACzE,CAAC;AA8KJ;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,GAjEA,UAAU,SAAS,SAAS,mOAiEA,CAAC"}
|
|
@@ -3,10 +3,10 @@ import { AssistantChatTransport } from "../transport/AssistantChatTransport.js";
|
|
|
3
3
|
import { useResourceCleanup } from "./useResourceCleanup.js";
|
|
4
4
|
import { createChat, splitChatThreadOptions, useChatThread } from "./useChatThread.js";
|
|
5
5
|
import { AI_SDK_SDK } from "./sdkIdentity.js";
|
|
6
|
+
import { MessageRepository } from "@assistant-ui/core/internal";
|
|
6
7
|
import { useCloudThreadListAdapter } from "@assistant-ui/core/react";
|
|
7
8
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
8
9
|
import { useEffect, useState } from "@assistant-ui/tap/react-shim";
|
|
9
|
-
import { MessageRepository } from "@assistant-ui/core/internal";
|
|
10
10
|
import { useAui } from "@assistant-ui/store";
|
|
11
11
|
import { resource, useResource, withKey } from "@assistant-ui/tap";
|
|
12
12
|
import { InMemoryThreadList, RemoteThreadList, inMemoryThreadListTransformScopes } from "@assistant-ui/core/store";
|
|
@@ -36,7 +36,7 @@ const getOrCreateChatEntry = (threadId, options, chats) => {
|
|
|
36
36
|
return created;
|
|
37
37
|
};
|
|
38
38
|
const useAISDKChatThread = (t0) => {
|
|
39
|
-
const $ = c(
|
|
39
|
+
const $ = c(38);
|
|
40
40
|
const { threadId, options, chats, cloud } = t0;
|
|
41
41
|
let t1;
|
|
42
42
|
if ($[0] !== cloud || $[1] !== options || $[2] !== threadId) {
|
|
@@ -117,44 +117,43 @@ const useAISDKChatThread = (t0) => {
|
|
|
117
117
|
$[25] = t8;
|
|
118
118
|
} else t8 = $[25];
|
|
119
119
|
let t9;
|
|
120
|
-
if ($[26] !== chat || $[27] !==
|
|
120
|
+
if ($[26] !== chat || $[27] !== repository || $[28] !== t8 || $[29] !== threadId) {
|
|
121
121
|
t9 = {
|
|
122
122
|
id: threadId,
|
|
123
123
|
isMainThread: true,
|
|
124
124
|
getThreadListItem: t8,
|
|
125
125
|
chat,
|
|
126
126
|
messageRepositoryInstance: repository,
|
|
127
|
-
stopOnClientDestroy:
|
|
127
|
+
stopOnClientDestroy: false
|
|
128
128
|
};
|
|
129
129
|
$[26] = chat;
|
|
130
|
-
$[27] =
|
|
131
|
-
$[28] =
|
|
132
|
-
$[29] =
|
|
133
|
-
$[30] =
|
|
134
|
-
|
|
135
|
-
} else t9 = $[31];
|
|
130
|
+
$[27] = repository;
|
|
131
|
+
$[28] = t8;
|
|
132
|
+
$[29] = threadId;
|
|
133
|
+
$[30] = t9;
|
|
134
|
+
} else t9 = $[30];
|
|
136
135
|
const runtime = useChatThread(t7, t9);
|
|
137
136
|
const clientRef = useAssistantClientRef();
|
|
138
137
|
let t10;
|
|
139
|
-
if ($[
|
|
138
|
+
if ($[31] !== clientRef || $[32] !== runtime) {
|
|
140
139
|
t10 = () => runtime.registerModelContextProvider(clientRef.current.modelContext());
|
|
141
|
-
$[
|
|
142
|
-
$[
|
|
143
|
-
$[
|
|
144
|
-
} else t10 = $[
|
|
140
|
+
$[31] = clientRef;
|
|
141
|
+
$[32] = runtime;
|
|
142
|
+
$[33] = t10;
|
|
143
|
+
} else t10 = $[33];
|
|
145
144
|
let t11;
|
|
146
|
-
if ($[
|
|
145
|
+
if ($[34] !== runtime) {
|
|
147
146
|
t11 = [runtime];
|
|
148
|
-
$[
|
|
149
|
-
$[
|
|
150
|
-
} else t11 = $[
|
|
147
|
+
$[34] = runtime;
|
|
148
|
+
$[35] = t11;
|
|
149
|
+
} else t11 = $[35];
|
|
151
150
|
useAssistantScopeEffect("modelContext", t10, t11);
|
|
152
151
|
let t12;
|
|
153
|
-
if ($[
|
|
152
|
+
if ($[36] !== runtime.thread) {
|
|
154
153
|
t12 = ThreadClient({ runtime: runtime.thread });
|
|
155
|
-
$[
|
|
156
|
-
$[
|
|
157
|
-
} else t12 = $[
|
|
154
|
+
$[36] = runtime.thread;
|
|
155
|
+
$[37] = t12;
|
|
156
|
+
} else t12 = $[37];
|
|
158
157
|
return useResource(t12);
|
|
159
158
|
};
|
|
160
159
|
const AISDKChatThread = resource(useAISDKChatThread);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AISDKThreads.js","names":["c","_c","resource","useResource","withKey","useEffect","useMemo","useState","Chat","UIMessage","ChatTransport","AssistantCloud","InMemoryThreadList","RemoteThreadList","inMemoryThreadListTransformScopes","ThreadClient","useCloudThreadListAdapter","attachTransformScopes","useAssistantClientRef","useAssistantScopeEffect","useAui","AssistantChatTransport","createChat","splitChatThreadOptions","useChatThread","ChatThreadOptions","MessageRepository","useResourceCleanup","AI_SDK_SDK","AISDKThreadsOptions","Omit","UI_MESSAGE","transport","cloud","threadId","onThreadIdChange","AISDKThreadChatOptions","ChatOptionsRef","current","ChatEntry","chat","repository","optionsRef","createChatEntry","options","chatInit","undefined","__internal_clone","id","getOrCreateChatEntry","chats","Map","existing","get","created","set","useAISDKChatThread","t0","$","t1","owned","t2","t3","t4","t5","stop","catch","_temp","aui","t6","initialize","remoteId","externalId","fallbackItem","t7","t8","threadListItem","source","t9","isMainThread","getThreadListItem","messageRepositoryInstance","stopOnClientDestroy","runtime","clientRef","t10","registerModelContextProvider","modelContext","t11","t12","thread","AISDKChatThread","useAISDKThreads","threadOptions","_temp2","bindCloud","values","_temp3","cloudAdapter","sdk","element","adapter","backgroundThreads","onDelete","id_0","_temp4","delete","AISDKThreads"],"sources":["../../src/runtime/AISDKThreads.ts"],"sourcesContent":["\"use client\";\n\nimport { resource, useResource, withKey } from \"@assistant-ui/tap\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { Chat, UIMessage } from \"@ai-sdk/react\";\nimport type { ChatTransport } from \"ai\";\nimport type { AssistantCloud } from \"assistant-cloud\";\nimport {\n InMemoryThreadList,\n RemoteThreadList,\n inMemoryThreadListTransformScopes,\n} from \"@assistant-ui/core/store\";\nimport { ThreadClient } from \"@assistant-ui/core/store/internal\";\nimport { useCloudThreadListAdapter } from \"@assistant-ui/core/react\";\nimport {\n attachTransformScopes,\n useAssistantClientRef,\n useAssistantScopeEffect,\n} from \"@assistant-ui/store/client\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { AssistantChatTransport } from \"../transport/AssistantChatTransport\";\nimport {\n createChat,\n splitChatThreadOptions,\n useChatThread,\n type ChatThreadOptions,\n} from \"./useChatThread\";\nimport { MessageRepository } from \"@assistant-ui/core/internal\";\nimport { useResourceCleanup } from \"./useResourceCleanup\";\nimport { AI_SDK_SDK } from \"./sdkIdentity\";\n\nexport type AISDKThreadsOptions<UI_MESSAGE extends UIMessage = UIMessage> =\n Omit<ChatThreadOptions<UI_MESSAGE>, \"id\" | \"transport\" | \"messages\"> & {\n /**\n * The transport threads send through. A factory is invoked once per\n * thread so each thread owns its instance. A plain\n * `AssistantChatTransport` instance is cloned per thread (its\n * assistant-ui wiring is per thread); any other transport instance is\n * shared as-is. Defaults to one `AssistantChatTransport` per thread.\n */\n transport?:\n | ChatTransport<UI_MESSAGE>\n | (() => ChatTransport<UI_MESSAGE>)\n | undefined;\n /**\n * When set, the thread list is a `RemoteThreadList` backed by this\n * assistant-cloud. Omit it to keep the in-memory list. Every visited\n * cloud thread stays mounted, so an in-flight run continues after a\n * switch and stops on delete; per-thread history loads once per thread.\n */\n cloud?: AssistantCloud | undefined;\n /**\n * Controlled thread id for the cloud list. Ignored without `cloud`.\n */\n threadId?: string | undefined;\n /**\n * Called with the settled remote id when the cloud list changes thread.\n */\n onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;\n };\n\ntype AISDKThreadChatOptions<UI_MESSAGE extends UIMessage = UIMessage> = Omit<\n AISDKThreadsOptions<UI_MESSAGE>,\n \"cloud\" | \"threadId\" | \"onThreadIdChange\"\n>;\n\ntype ChatOptionsRef<UI_MESSAGE extends UIMessage> = {\n current: AISDKThreadChatOptions<UI_MESSAGE> | undefined;\n};\n\ntype ChatEntry<UI_MESSAGE extends UIMessage> = {\n chat: Chat<UI_MESSAGE>;\n transport: ChatTransport<UI_MESSAGE>;\n repository: MessageRepository;\n optionsRef: ChatOptionsRef<UI_MESSAGE>;\n};\n\nconst createChatEntry = <UI_MESSAGE extends UIMessage>(\n threadId: string,\n options: AISDKThreadChatOptions<UI_MESSAGE> | undefined,\n): ChatEntry<UI_MESSAGE> => {\n const optionsRef: ChatOptionsRef<UI_MESSAGE> = { current: options };\n const { chatInit } = splitChatThreadOptions(\n options as ChatThreadOptions<UI_MESSAGE> | undefined,\n );\n const transport =\n typeof options?.transport === \"function\"\n ? options.transport()\n : options?.transport === undefined\n ? new AssistantChatTransport()\n : options.transport instanceof AssistantChatTransport\n ? options.transport.__internal_clone()\n : options.transport;\n return {\n chat: createChat({ ...chatInit, id: threadId, transport }, optionsRef),\n transport,\n repository: new MessageRepository(),\n optionsRef,\n };\n};\n\nconst getOrCreateChatEntry = <UI_MESSAGE extends UIMessage>(\n threadId: string,\n options: AISDKThreadChatOptions<UI_MESSAGE> | undefined,\n chats: Map<string, ChatEntry<UI_MESSAGE>>,\n): ChatEntry<UI_MESSAGE> => {\n const existing = chats.get(threadId);\n if (existing) return existing;\n const created = createChatEntry(threadId, options);\n chats.set(threadId, created);\n return created;\n};\n\nconst useAISDKChatThread = <UI_MESSAGE extends UIMessage = UIMessage>({\n threadId,\n options,\n chats,\n cloud,\n}: {\n threadId: string;\n options: AISDKThreadChatOptions<UI_MESSAGE> | undefined;\n chats: Map<string, ChatEntry<UI_MESSAGE>>;\n cloud: boolean;\n}) => {\n const [owned] = useState(() =>\n cloud ? createChatEntry(threadId, options) : undefined,\n );\n const { chat, transport, repository, optionsRef } =\n owned ?? getOrCreateChatEntry(threadId, options, chats);\n\n useEffect(() => {\n if (cloud) optionsRef.current = options;\n });\n\n useEffect(() => {\n if (!cloud) return undefined;\n return () => {\n void chat.stop().catch(() => {});\n };\n }, [chat, cloud]);\n\n const aui = useAui();\n const fallbackItem = useMemo(\n () => ({\n initialize: async () => ({\n remoteId: threadId,\n externalId: undefined,\n }),\n }),\n [threadId],\n );\n const runtime = useChatThread(\n { ...options, transport } as ChatThreadOptions<UI_MESSAGE>,\n {\n id: threadId,\n isMainThread: true,\n getThreadListItem: () =>\n cloud\n ? aui.threadListItem.source\n ? aui.threadListItem\n : undefined\n : fallbackItem,\n chat,\n messageRepositoryInstance: repository,\n stopOnClientDestroy: cloud,\n },\n );\n\n const clientRef = useAssistantClientRef();\n useAssistantScopeEffect(\n \"modelContext\",\n () =>\n runtime.registerModelContextProvider(clientRef.current!.modelContext()),\n [runtime],\n );\n\n return useResource(ThreadClient({ runtime: runtime.thread }));\n};\n\nconst AISDKChatThread = resource(useAISDKChatThread);\n\nconst useAISDKThreads = <UI_MESSAGE extends UIMessage = UIMessage>(\n options?: AISDKThreadsOptions<UI_MESSAGE>,\n) => {\n const { cloud, threadId, onThreadIdChange, ...threadOptions } = options ?? {};\n const [chats] = useState(() => new Map<string, ChatEntry<UI_MESSAGE>>());\n const bindCloud = cloud !== undefined;\n\n useEffect(() => {\n for (const { optionsRef } of chats.values()) {\n optionsRef.current = threadOptions;\n }\n });\n\n useResourceCleanup(true, () => {\n for (const { chat } of chats.values()) {\n void chat.stop().catch(() => {});\n }\n });\n\n const cloudAdapter = useCloudThreadListAdapter({ cloud, sdk: AI_SDK_SDK });\n const thread = (id: string) => {\n const element = AISDKChatThread({\n threadId: id,\n options: threadOptions,\n chats,\n cloud: bindCloud,\n });\n return bindCloud ? withKey(id, element) : element;\n };\n\n return useResource(\n bindCloud\n ? RemoteThreadList({\n adapter: cloudAdapter,\n backgroundThreads: true,\n thread,\n threadId,\n onThreadIdChange,\n })\n : InMemoryThreadList({\n thread,\n onDelete: (id) => {\n void chats\n .get(id)\n ?.chat.stop()\n .catch(() => {});\n chats.delete(id);\n },\n }),\n );\n};\n\n/**\n * `AuiConfig` entry that runs one AI SDK chat per thread. Hosts the same\n * per-thread orchestration as {@link AISDKChat} inside the client's own\n * resource tree, so it works with any `AssistantClient` host, React or not.\n * Without `cloud`, threads live in memory for the client's lifetime and keep\n * their history across switches; only the visible thread is mounted, and a\n * switched-away chat keeps streaming into its stored state until it settles\n * or the thread is deleted. With `cloud`, the list is a\n * `RemoteThreadList` with `backgroundThreads`: every visited thread stays\n * mounted with its own history, a run continues after a switch and stops on\n * delete, and a freshly created thread titles itself. Model context is\n * registered on every mounted thread.\n */\nexport const AISDKThreads = resource(useAISDKThreads);\n\nattachTransformScopes(useAISDKThreads, inMemoryThreadListTransformScopes);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AISDKThreads.js","names":["c","_c","resource","useResource","withKey","useEffect","useMemo","useState","Chat","UIMessage","ChatTransport","AssistantCloud","InMemoryThreadList","RemoteThreadList","inMemoryThreadListTransformScopes","ThreadClient","useCloudThreadListAdapter","attachTransformScopes","useAssistantClientRef","useAssistantScopeEffect","useAui","AssistantChatTransport","createChat","splitChatThreadOptions","useChatThread","ChatThreadOptions","MessageRepository","useResourceCleanup","AI_SDK_SDK","AISDKThreadsOptions","Omit","UI_MESSAGE","transport","cloud","threadId","onThreadIdChange","AISDKThreadChatOptions","ChatOptionsRef","current","ChatEntry","chat","repository","optionsRef","createChatEntry","options","chatInit","undefined","__internal_clone","id","getOrCreateChatEntry","chats","Map","existing","get","created","set","useAISDKChatThread","t0","$","t1","owned","t2","t3","t4","t5","stop","catch","_temp","aui","t6","initialize","remoteId","externalId","fallbackItem","t7","t8","threadListItem","source","t9","isMainThread","getThreadListItem","messageRepositoryInstance","stopOnClientDestroy","runtime","clientRef","t10","registerModelContextProvider","modelContext","t11","t12","thread","AISDKChatThread","useAISDKThreads","threadOptions","_temp2","bindCloud","values","_temp3","cloudAdapter","sdk","element","adapter","backgroundThreads","onDelete","id_0","_temp4","delete","AISDKThreads"],"sources":["../../src/runtime/AISDKThreads.ts"],"sourcesContent":["\"use client\";\n\nimport { resource, useResource, withKey } from \"@assistant-ui/tap\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { Chat, UIMessage } from \"@ai-sdk/react\";\nimport type { ChatTransport } from \"ai\";\nimport type { AssistantCloud } from \"assistant-cloud\";\nimport {\n InMemoryThreadList,\n RemoteThreadList,\n inMemoryThreadListTransformScopes,\n} from \"@assistant-ui/core/store\";\nimport { ThreadClient } from \"@assistant-ui/core/store/internal\";\nimport { useCloudThreadListAdapter } from \"@assistant-ui/core/react\";\nimport {\n attachTransformScopes,\n useAssistantClientRef,\n useAssistantScopeEffect,\n} from \"@assistant-ui/store/client\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { AssistantChatTransport } from \"../transport/AssistantChatTransport\";\nimport {\n createChat,\n splitChatThreadOptions,\n useChatThread,\n type ChatThreadOptions,\n} from \"./useChatThread\";\nimport { MessageRepository } from \"@assistant-ui/core/internal\";\nimport { useResourceCleanup } from \"./useResourceCleanup\";\nimport { AI_SDK_SDK } from \"./sdkIdentity\";\n\nexport type AISDKThreadsOptions<UI_MESSAGE extends UIMessage = UIMessage> =\n Omit<ChatThreadOptions<UI_MESSAGE>, \"id\" | \"transport\" | \"messages\"> & {\n /**\n * The transport threads send through. A factory is invoked once per\n * thread so each thread owns its instance. A plain\n * `AssistantChatTransport` instance is cloned per thread (its\n * assistant-ui wiring is per thread); any other transport instance is\n * shared as-is. Defaults to one `AssistantChatTransport` per thread.\n */\n transport?:\n | ChatTransport<UI_MESSAGE>\n | (() => ChatTransport<UI_MESSAGE>)\n | undefined;\n /**\n * When set, the thread list is a `RemoteThreadList` backed by this\n * assistant-cloud. Omit it to keep the in-memory list. Every visited\n * cloud thread stays mounted, so an in-flight run continues after a\n * switch and stops on delete; per-thread history loads once per thread.\n */\n cloud?: AssistantCloud | undefined;\n /**\n * Controlled thread id for the cloud list. Ignored without `cloud`.\n */\n threadId?: string | undefined;\n /**\n * Called with the settled remote id when the cloud list changes thread.\n */\n onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;\n };\n\ntype AISDKThreadChatOptions<UI_MESSAGE extends UIMessage = UIMessage> = Omit<\n AISDKThreadsOptions<UI_MESSAGE>,\n \"cloud\" | \"threadId\" | \"onThreadIdChange\"\n>;\n\ntype ChatOptionsRef<UI_MESSAGE extends UIMessage> = {\n current: AISDKThreadChatOptions<UI_MESSAGE> | undefined;\n};\n\ntype ChatEntry<UI_MESSAGE extends UIMessage> = {\n chat: Chat<UI_MESSAGE>;\n transport: ChatTransport<UI_MESSAGE>;\n repository: MessageRepository;\n optionsRef: ChatOptionsRef<UI_MESSAGE>;\n};\n\nconst createChatEntry = <UI_MESSAGE extends UIMessage>(\n threadId: string,\n options: AISDKThreadChatOptions<UI_MESSAGE> | undefined,\n): ChatEntry<UI_MESSAGE> => {\n const optionsRef: ChatOptionsRef<UI_MESSAGE> = { current: options };\n const { chatInit } = splitChatThreadOptions(\n options as ChatThreadOptions<UI_MESSAGE> | undefined,\n );\n const transport =\n typeof options?.transport === \"function\"\n ? options.transport()\n : options?.transport === undefined\n ? new AssistantChatTransport()\n : options.transport instanceof AssistantChatTransport\n ? options.transport.__internal_clone()\n : options.transport;\n return {\n chat: createChat({ ...chatInit, id: threadId, transport }, optionsRef),\n transport,\n repository: new MessageRepository(),\n optionsRef,\n };\n};\n\nconst getOrCreateChatEntry = <UI_MESSAGE extends UIMessage>(\n threadId: string,\n options: AISDKThreadChatOptions<UI_MESSAGE> | undefined,\n chats: Map<string, ChatEntry<UI_MESSAGE>>,\n): ChatEntry<UI_MESSAGE> => {\n const existing = chats.get(threadId);\n if (existing) return existing;\n const created = createChatEntry(threadId, options);\n chats.set(threadId, created);\n return created;\n};\n\nconst useAISDKChatThread = <UI_MESSAGE extends UIMessage = UIMessage>({\n threadId,\n options,\n chats,\n cloud,\n}: {\n threadId: string;\n options: AISDKThreadChatOptions<UI_MESSAGE> | undefined;\n chats: Map<string, ChatEntry<UI_MESSAGE>>;\n cloud: boolean;\n}) => {\n const [owned] = useState(() =>\n cloud ? createChatEntry(threadId, options) : undefined,\n );\n const { chat, transport, repository, optionsRef } =\n owned ?? getOrCreateChatEntry(threadId, options, chats);\n\n useEffect(() => {\n if (cloud) optionsRef.current = options;\n });\n\n useEffect(() => {\n if (!cloud) return undefined;\n return () => {\n void chat.stop().catch(() => {});\n };\n }, [chat, cloud]);\n\n const aui = useAui();\n const fallbackItem = useMemo(\n () => ({\n initialize: async () => ({\n remoteId: threadId,\n externalId: undefined,\n }),\n }),\n [threadId],\n );\n const runtime = useChatThread(\n { ...options, transport } as ChatThreadOptions<UI_MESSAGE>,\n {\n id: threadId,\n isMainThread: true,\n getThreadListItem: () =>\n cloud\n ? aui.threadListItem.source\n ? aui.threadListItem\n : undefined\n : fallbackItem,\n chat,\n messageRepositoryInstance: repository,\n stopOnClientDestroy: false,\n },\n );\n\n const clientRef = useAssistantClientRef();\n useAssistantScopeEffect(\n \"modelContext\",\n () =>\n runtime.registerModelContextProvider(clientRef.current!.modelContext()),\n [runtime],\n );\n\n return useResource(ThreadClient({ runtime: runtime.thread }));\n};\n\nconst AISDKChatThread = resource(useAISDKChatThread);\n\nconst useAISDKThreads = <UI_MESSAGE extends UIMessage = UIMessage>(\n options?: AISDKThreadsOptions<UI_MESSAGE>,\n) => {\n const { cloud, threadId, onThreadIdChange, ...threadOptions } = options ?? {};\n const [chats] = useState(() => new Map<string, ChatEntry<UI_MESSAGE>>());\n const bindCloud = cloud !== undefined;\n\n useEffect(() => {\n for (const { optionsRef } of chats.values()) {\n optionsRef.current = threadOptions;\n }\n });\n\n useResourceCleanup(true, () => {\n for (const { chat } of chats.values()) {\n void chat.stop().catch(() => {});\n }\n });\n\n const cloudAdapter = useCloudThreadListAdapter({ cloud, sdk: AI_SDK_SDK });\n const thread = (id: string) => {\n const element = AISDKChatThread({\n threadId: id,\n options: threadOptions,\n chats,\n cloud: bindCloud,\n });\n return bindCloud ? withKey(id, element) : element;\n };\n\n return useResource(\n bindCloud\n ? RemoteThreadList({\n adapter: cloudAdapter,\n backgroundThreads: true,\n thread,\n threadId,\n onThreadIdChange,\n })\n : InMemoryThreadList({\n thread,\n onDelete: (id) => {\n void chats\n .get(id)\n ?.chat.stop()\n .catch(() => {});\n chats.delete(id);\n },\n }),\n );\n};\n\n/**\n * `AuiConfig` entry that runs one AI SDK chat per thread. Hosts the same\n * per-thread orchestration as {@link AISDKChat} inside the client's own\n * resource tree, so it works with any `AssistantClient` host, React or not.\n * Without `cloud`, threads live in memory for the client's lifetime and keep\n * their history across switches; only the visible thread is mounted, and a\n * switched-away chat keeps streaming into its stored state until it settles\n * or the thread is deleted. With `cloud`, the list is a\n * `RemoteThreadList` with `backgroundThreads`: every visited thread stays\n * mounted with its own history, a run continues after a switch and stops on\n * delete, and a freshly created thread titles itself. Model context is\n * registered on every mounted thread.\n */\nexport const AISDKThreads = resource(useAISDKThreads);\n\nattachTransformScopes(useAISDKThreads, inMemoryThreadListTransformScopes);\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkIdentity.d.ts","
|
|
1
|
+
{"version":3,"file":"sdkIdentity.d.ts","sourceRoot":"","sources":["../../src/runtime/sdkIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,eAAO,MAAM,UAAU,EAAE,WAMxB,CAAC"}
|
|
@@ -1,76 +1,75 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { UIMessage, useChat, CreateUIMessage } from "@ai-sdk/react";
|
|
2
|
+
import { type JoinStrategy } from "@assistant-ui/core/react";
|
|
3
|
+
import type { SuggestionAdapter } from "@assistant-ui/core";
|
|
4
|
+
import type { ExternalStoreAdapter, ExternalStoreSharedOptions, ThreadHistoryAdapter, AssistantRuntime, MessageFormatRepository, AppendMessage, RespondToToolApprovalOptions } from "@assistant-ui/core";
|
|
3
5
|
import { MessageRepository } from "@assistant-ui/core/internal";
|
|
4
|
-
import { CreateUIMessage, UIMessage, useChat } from "@ai-sdk/react";
|
|
5
|
-
//#region src/runtime/useAISDKRuntime.d.ts
|
|
6
6
|
export type CustomToCreateMessageFunction = <UI_MESSAGE extends UIMessage = UIMessage>(message: AppendMessage) => CreateUIMessage<UI_MESSAGE>;
|
|
7
7
|
export type AISDKRuntimeAdapter<UI_MESSAGE extends UIMessage = UIMessage> = ExternalStoreSharedOptions & {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
8
|
+
adapters?: (NonNullable<ExternalStoreAdapter["adapters"]> & {
|
|
9
|
+
history?: ThreadHistoryAdapter | undefined;
|
|
10
|
+
suggestion?: SuggestionAdapter | undefined;
|
|
11
|
+
}) | undefined;
|
|
12
|
+
toCreateMessage?: CustomToCreateMessageFunction;
|
|
13
|
+
unstable_messageRepositoryInstance?: MessageRepository | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Whether to automatically cancel pending interactive tool calls when the user sends a new message.
|
|
16
|
+
*
|
|
17
|
+
* When enabled (default), the pending tool calls will be marked as failed with an error message
|
|
18
|
+
* indicating the user cancelled the tool call by sending a new message.
|
|
19
|
+
*
|
|
20
|
+
* @default true
|
|
21
|
+
*/
|
|
22
|
+
cancelPendingToolCallsOnSend?: boolean | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Called when `runtime.thread.resumeRun(config)` is invoked.
|
|
25
|
+
*
|
|
26
|
+
* When omitted, `resumeRun` throws `"Runtime does not support resuming runs."`.
|
|
27
|
+
* Provide this to bridge resume invocations into a custom replay channel
|
|
28
|
+
* (for example, an SSE reconnect endpoint keyed by turn id).
|
|
29
|
+
*/
|
|
30
|
+
onResume?: ExternalStoreAdapter["onResume"];
|
|
31
|
+
/**
|
|
32
|
+
* Called when `runtime.thread.resumeToolCall(options)` is invoked for a tool call the in-process tracker does not own.
|
|
33
|
+
*
|
|
34
|
+
* When omitted, `resumeToolCall` throws `"Tool call ${toolCallId} is not waiting for resume."`.
|
|
35
|
+
* Provide this to bridge resume-tool-call invocations into a custom handler.
|
|
36
|
+
*/
|
|
37
|
+
onResumeToolCall?: ExternalStoreAdapter["onResumeToolCall"];
|
|
38
|
+
/**
|
|
39
|
+
* Answers tool approval requests through a host-owned channel instead of the AI SDK's `addToolApprovalResponse`.
|
|
40
|
+
*
|
|
41
|
+
* Called for every approval request in the thread with the complete response, including option and free-form answers. Hand requests the host does not own to `respondViaAISDK`, which is what runs when this option is omitted. The answer applies to the approval when the handler starts and is removed if it throws. It is never written into the `useChat` messages, so `sendAutomaticallyWhen` cannot forward it. With a history adapter, the answer is stored with its message once the handler resolves and returns on reload, and a second response to the same request rejects; without one it lasts as long as this runtime, and a runtime mounted again over the same chat shows the request open until the resumed run records its resolution in the chat.
|
|
42
|
+
*
|
|
43
|
+
* While a handler is set, an approval's `display`, `allowFreeform`, `dismissible` and `options` reach the renderer, because the handler can receive answers the AI SDK cannot carry. A stream declares them through the `approvalDescriptor` of its `tool-approval-request` chunk, the one approval field the AI SDK keeps opaque; the converter reads the request and answer fields from that descriptor when the approval itself lacks them.
|
|
44
|
+
*/
|
|
45
|
+
onRespondToToolApproval?: ((response: RespondToToolApprovalOptions, context: {
|
|
46
|
+
toolCallId: string;
|
|
47
|
+
toolName: string;
|
|
48
|
+
/** Sends this response through the AI SDK's `addToolApprovalResponse`, which carries only `approved` and `reason`. */
|
|
49
|
+
respondViaAISDK: () => Promise<void>;
|
|
50
|
+
}) => Promise<void> | void) | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* How consecutive assistant messages are rendered.
|
|
53
|
+
*
|
|
54
|
+
* `"concat-content"` (the default) merges them into a single thread message.
|
|
55
|
+
* `"none"` keeps each assistant message as its own thread message, which is
|
|
56
|
+
* useful when a backend persists proactive or consecutive assistant messages
|
|
57
|
+
* as separate entries.
|
|
58
|
+
*/
|
|
59
|
+
joinStrategy?: JoinStrategy | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* A branch-aware AI SDK message tree seeded once when `useChat` is empty.
|
|
62
|
+
* After that seed, live updates come only from `useChat`. A later empty
|
|
63
|
+
* chat or a new object identity does not reload the tree.
|
|
64
|
+
*/
|
|
65
|
+
messageRepository?: MessageFormatRepository<UI_MESSAGE>;
|
|
66
|
+
/**
|
|
67
|
+
* Called after an explicit `switchToBranch` (for example a BranchPicker
|
|
68
|
+
* click). Complements `setMessages` and does not enable switching by itself.
|
|
69
|
+
*
|
|
70
|
+
* @deprecated This API is still under active development and might change without notice.
|
|
71
|
+
*/
|
|
72
|
+
unstable_onBranchChange?: ExternalStoreAdapter["unstable_onBranchChange"];
|
|
73
73
|
};
|
|
74
74
|
export declare const useAISDKRuntime: <UI_MESSAGE extends UIMessage = UIMessage>(chatHelpers: ReturnType<typeof useChat<UI_MESSAGE>>, adapter?: AISDKRuntimeAdapter<UI_MESSAGE>) => AssistantRuntime;
|
|
75
|
-
//#endregion
|
|
76
75
|
//# sourceMappingURL=useAISDKRuntime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAISDKRuntime.d.ts","
|
|
1
|
+
{"version":3,"file":"useAISDKRuntime.d.ts","sourceRoot":"","sources":["../../src/runtime/useAISDKRuntime.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,eAAe,EAEhB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAIhB,uBAAuB,EACvB,aAAa,EAGb,4BAA4B,EAE7B,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAGL,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAuBrC,MAAM,MAAM,6BAA6B,GAAG,CAC1C,UAAU,SAAS,SAAS,GAAG,SAAS,EAExC,OAAO,EAAE,aAAa,KACnB,eAAe,CAAC,UAAU,CAAC,CAAC;AA6BjC,MAAM,MAAM,mBAAmB,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IACtE,0BAA0B,GAAG;IAC3B,QAAQ,CAAC,EACL,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,GAAG;QAC/C,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;QAC3C,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;KAC5C,CAAC,GACF,SAAS,CAAC;IACd,eAAe,CAAC,EAAE,6BAA6B,CAAC;IAChD,kCAAkC,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACnE;;;;;;;OAOG;IACH,4BAA4B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC5C;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAC5D;;;;;;OAMG;IACH,uBAAuB,CAAC,EACpB,CAAC,CACC,QAAQ,EAAE,4BAA4B,EACtC,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,sHAAsH;QACtH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KACtC,KACE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAC1B,SAAS,CAAC;IACd;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACxD;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;CAC3E,CAAC;AAqGJ,eAAO,MAAM,eAAe,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EACtE,aAAa,UAAU,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,EACnD,UAAS,mBAAmB,CAAC,UAAU,CAAM,qBAonB9C,CAAC"}
|