@assistant-ui/react-ai-sdk 1.3.19 → 1.3.21
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/dist/ui/use-chat/AssistantChatTransport.d.ts +6 -2
- package/dist/ui/use-chat/AssistantChatTransport.d.ts.map +1 -1
- package/dist/ui/use-chat/AssistantChatTransport.js +6 -2
- package/dist/ui/use-chat/AssistantChatTransport.js.map +1 -1
- package/dist/ui/use-chat/useChatRuntime.d.ts +1 -1
- package/dist/ui/use-chat/useChatRuntime.d.ts.map +1 -1
- package/dist/ui/use-chat/useChatRuntime.js +12 -1
- package/dist/ui/use-chat/useChatRuntime.js.map +1 -1
- package/dist/ui/use-chat/useExternalHistory.d.ts +1 -1
- package/dist/ui/use-chat/useExternalHistory.d.ts.map +1 -1
- package/dist/ui/use-chat/useExternalHistory.js +19 -19
- package/dist/ui/use-chat/useExternalHistory.js.map +1 -1
- package/dist/ui/utils/convertMessage.d.ts.map +1 -1
- package/dist/ui/utils/convertMessage.js +1 -1
- package/dist/ui/utils/convertMessage.js.map +1 -1
- package/dist/ui/utils/toCreateMessage.d.ts +1 -1
- package/dist/ui/utils/toCreateMessage.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/ui/use-chat/AssistantChatTransport.ts +20 -6
- package/src/ui/use-chat/useChatRuntime.ts +15 -2
- package/src/ui/use-chat/useExternalHistory.test.ts +107 -0
- package/src/ui/use-chat/useExternalHistory.ts +28 -22
- package/src/ui/utils/convertMessage.ts +1 -2
- package/src/ui/utils/toCreateMessage.ts +1 -1
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import type { AssistantRuntime } from "@assistant-ui/core";
|
|
2
|
-
import { DefaultChatTransport, HttpChatTransportInitOptions, UIMessage } from "ai";
|
|
1
|
+
import type { AssistantRuntime, ThreadListItemRuntime } from "@assistant-ui/core";
|
|
2
|
+
import { DefaultChatTransport, type HttpChatTransportInitOptions, type UIMessage } from "ai";
|
|
3
|
+
type InitializableThreadListItem = Pick<ThreadListItemRuntime, "initialize">;
|
|
3
4
|
export declare class AssistantChatTransport<UI_MESSAGE extends UIMessage> extends DefaultChatTransport<UI_MESSAGE> {
|
|
4
5
|
private runtime;
|
|
6
|
+
private getThreadListItem;
|
|
5
7
|
constructor(initOptions?: HttpChatTransportInitOptions<UI_MESSAGE>);
|
|
6
8
|
setRuntime(runtime: AssistantRuntime): void;
|
|
9
|
+
__internal_setGetThreadListItem(getter: () => InitializableThreadListItem | undefined): void;
|
|
7
10
|
}
|
|
11
|
+
export {};
|
|
8
12
|
//# sourceMappingURL=AssistantChatTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantChatTransport.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/AssistantChatTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"AssistantChatTransport.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/AssistantChatTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,KAAK,4BAA4B,EACjC,KAAK,SAAS,EACf,MAAM,IAAI,CAAC;AAGZ,KAAK,2BAA2B,GAAG,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;AAE7E,qBAAa,sBAAsB,CACjC,UAAU,SAAS,SAAS,CAC5B,SAAQ,oBAAoB,CAAC,UAAU,CAAC;IACxC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,iBAAiB,CAEX;gBACF,WAAW,CAAC,EAAE,4BAA4B,CAAC,UAAU,CAAC;IAqClE,UAAU,CAAC,OAAO,EAAE,gBAAgB;IAIpC,+BAA+B,CAC7B,MAAM,EAAE,MAAM,2BAA2B,GAAG,SAAS;CAIxD"}
|
|
@@ -2,13 +2,14 @@ import { DefaultChatTransport, } from "ai";
|
|
|
2
2
|
import { toToolsJSONSchema } from "assistant-stream";
|
|
3
3
|
export class AssistantChatTransport extends DefaultChatTransport {
|
|
4
4
|
runtime;
|
|
5
|
+
getThreadListItem;
|
|
5
6
|
constructor(initOptions) {
|
|
6
7
|
super({
|
|
7
8
|
...initOptions,
|
|
8
9
|
prepareSendMessagesRequest: async (options) => {
|
|
9
10
|
const context = this.runtime?.thread.getModelContext();
|
|
10
|
-
const
|
|
11
|
-
|
|
11
|
+
const threadListItem = this.getThreadListItem?.() ?? this.runtime?.threads.mainItem;
|
|
12
|
+
const id = (await threadListItem?.initialize())?.remoteId ?? options.id;
|
|
12
13
|
const optionsEx = {
|
|
13
14
|
...options,
|
|
14
15
|
body: {
|
|
@@ -37,5 +38,8 @@ export class AssistantChatTransport extends DefaultChatTransport {
|
|
|
37
38
|
setRuntime(runtime) {
|
|
38
39
|
this.runtime = runtime;
|
|
39
40
|
}
|
|
41
|
+
__internal_setGetThreadListItem(getter) {
|
|
42
|
+
this.getThreadListItem = getter;
|
|
43
|
+
}
|
|
40
44
|
}
|
|
41
45
|
//# sourceMappingURL=AssistantChatTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantChatTransport.js","sourceRoot":"","sources":["../../../src/ui/use-chat/AssistantChatTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AssistantChatTransport.js","sourceRoot":"","sources":["../../../src/ui/use-chat/AssistantChatTransport.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,oBAAoB,GAGrB,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIrD,MAAM,OAAO,sBAEX,SAAQ,oBAAgC;IAChC,OAAO,CAA+B;IACtC,iBAAiB,CAEX;IACd,YAAY,WAAsD;QAChE,KAAK,CAAC;YACJ,GAAG,WAAW;YACd,0BAA0B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;gBACvD,MAAM,cAAc,GAClB,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;gBAC/D,MAAM,EAAE,GAAG,CAAC,MAAM,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC;gBAExE,MAAM,SAAS,GAAG;oBAChB,GAAG,OAAO;oBACV,IAAI,EAAE;wBACJ,YAAY,EAAE,OAAO,EAAE,YAAY;wBACnC,MAAM,EAAE,OAAO,EAAE,MAAM;wBACvB,MAAM,EAAE,OAAO,EAAE,MAAM;wBACvB,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;wBAC9C,GAAG,OAAO,EAAE,IAAI;qBACjB;iBACF,CAAC;gBACF,MAAM,eAAe,GACnB,MAAM,WAAW,EAAE,0BAA0B,EAAE,CAAC,SAAS,CAAC,CAAC;gBAE7D,OAAO;oBACL,GAAG,eAAe;oBAClB,IAAI,EAAE,eAAe,EAAE,IAAI,IAAI;wBAC7B,GAAG,SAAS,CAAC,IAAI;wBACjB,EAAE;wBACF,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,QAAQ,EAAE,OAAO,CAAC,eAAe;qBAClC;iBACF,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,OAAyB;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,+BAA+B,CAC7B,MAAqD;QAErD,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -2,7 +2,7 @@ import { type UIMessage } from "@ai-sdk/react";
|
|
|
2
2
|
import type { AssistantCloud } from "assistant-cloud";
|
|
3
3
|
import type { AssistantRuntime } from "@assistant-ui/core";
|
|
4
4
|
import { type AISDKRuntimeAdapter, type CustomToCreateMessageFunction } from "./useAISDKRuntime.js";
|
|
5
|
-
import { ChatInit } from "ai";
|
|
5
|
+
import type { ChatInit } from "ai";
|
|
6
6
|
export type UseChatRuntimeOptions<UI_MESSAGE extends UIMessage = UIMessage> = ChatInit<UI_MESSAGE> & {
|
|
7
7
|
cloud?: AssistantCloud | undefined;
|
|
8
8
|
adapters?: AISDKRuntimeAdapter["adapters"] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useChatRuntime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM3D,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EACnC,6BAA0B;AAC3B,OAAO,EAAE,QAAQ,EAAiB,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"useChatRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useChatRuntime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM3D,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EACnC,6BAA0B;AAC3B,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,IAAI,CAAC;AAIlD,MAAM,MAAM,qBAAqB,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IACxE,QAAQ,CAAC,UAAU,CAAC,GAAG;IACrB,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IACvD,eAAe,CAAC,EAAE,6BAA6B,CAAC;CACjD,CAAC;AAsEJ,eAAO,MAAM,cAAc,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EAAE,wBAGtE,qBAAqB,CAAC,UAAU,CAAM,KAAG,gBAU3C,CAAC"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useChat } from "@ai-sdk/react";
|
|
3
3
|
import { useCloudThreadListAdapter, useRemoteThreadListRuntime, } from "@assistant-ui/core/react";
|
|
4
|
-
import { useAuiState } from "@assistant-ui/store";
|
|
4
|
+
import { useAui, useAuiState } from "@assistant-ui/store";
|
|
5
5
|
import { useAISDKRuntime, } from "./useAISDKRuntime.js";
|
|
6
6
|
import { AssistantChatTransport } from "./AssistantChatTransport.js";
|
|
7
7
|
import { useEffect, useMemo, useRef } from "react";
|
|
8
8
|
const useDynamicChatTransport = (transport) => {
|
|
9
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
9
10
|
const transportRef = useRef(transport);
|
|
11
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
10
12
|
useEffect(() => {
|
|
11
13
|
transportRef.current = transport;
|
|
12
14
|
});
|
|
15
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
13
16
|
const dynamicTransport = useMemo(() => new Proxy(transportRef.current, {
|
|
14
17
|
get(_, prop) {
|
|
15
18
|
const res = transportRef.current[prop];
|
|
@@ -22,19 +25,26 @@ const useDynamicChatTransport = (transport) => {
|
|
|
22
25
|
};
|
|
23
26
|
const useChatThreadRuntime = (options) => {
|
|
24
27
|
const { adapters, transport: transportOptions, toCreateMessage, ...chatOptions } = options ?? {};
|
|
28
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
25
29
|
const transport = useDynamicChatTransport(transportOptions ?? new AssistantChatTransport());
|
|
30
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
26
31
|
const id = useAuiState((s) => s.threadListItem.id);
|
|
32
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
33
|
+
const aui = useAui();
|
|
34
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
27
35
|
const chat = useChat({
|
|
28
36
|
...chatOptions,
|
|
29
37
|
id,
|
|
30
38
|
transport,
|
|
31
39
|
});
|
|
40
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
32
41
|
const runtime = useAISDKRuntime(chat, {
|
|
33
42
|
adapters,
|
|
34
43
|
...(toCreateMessage && { toCreateMessage }),
|
|
35
44
|
});
|
|
36
45
|
if (transport instanceof AssistantChatTransport) {
|
|
37
46
|
transport.setRuntime(runtime);
|
|
47
|
+
transport.__internal_setGetThreadListItem(() => aui.threadListItem.source ? aui.threadListItem() : undefined);
|
|
38
48
|
}
|
|
39
49
|
return runtime;
|
|
40
50
|
};
|
|
@@ -42,6 +52,7 @@ export const useChatRuntime = ({ cloud, ...options } = {}) => {
|
|
|
42
52
|
const cloudAdapter = useCloudThreadListAdapter({ cloud });
|
|
43
53
|
return useRemoteThreadListRuntime({
|
|
44
54
|
runtimeHook: function RuntimeHook() {
|
|
55
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
45
56
|
return useChatThreadRuntime(options);
|
|
46
57
|
},
|
|
47
58
|
adapter: cloudAdapter,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatRuntime.js","sourceRoot":"","sources":["../../../src/ui/use-chat/useChatRuntime.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAkB,MAAM,eAAe,CAAC;AAGxD,OAAO,EACL,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"useChatRuntime.js","sourceRoot":"","sources":["../../../src/ui/use-chat/useChatRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AssistantRuntime, ThreadHistoryAdapter, ThreadMessage, MessageFormatAdapter, MessageFormatRepository, ExportedMessageRepository } from "@assistant-ui/core";
|
|
2
|
-
import { RefObject } from "react";
|
|
2
|
+
import { type RefObject } from "react";
|
|
3
3
|
export declare const toExportedMessageRepository: <TMessage>(toThreadMessages: (messages: TMessage[]) => ThreadMessage[], messages: MessageFormatRepository<TMessage>) => ExportedMessageRepository;
|
|
4
4
|
export declare const useExternalHistory: <TMessage>(runtimeRef: RefObject<AssistantRuntime>, historyAdapter: ThreadHistoryAdapter | undefined, toThreadMessages: (messages: TMessage[]) => ThreadMessage[], storageFormatAdapter: MessageFormatAdapter<TMessage, any>, onSetMessages: (messages: TMessage[]) => void) => boolean;
|
|
5
5
|
//# sourceMappingURL=useExternalHistory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExternalHistory.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useExternalHistory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAI5B,OAAO,
|
|
1
|
+
{"version":3,"file":"useExternalHistory.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useExternalHistory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAIL,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AAEf,eAAO,MAAM,2BAA2B,GAAI,QAAQ,EAClD,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,EAC3D,UAAU,uBAAuB,CAAC,QAAQ,CAAC,KAC1C,yBAWF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,EACzC,YAAY,SAAS,CAAC,gBAAgB,CAAC,EACvC,gBAAgB,oBAAoB,GAAG,SAAS,EAChD,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,EAC3D,sBAAsB,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,EACzD,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI,YAmP9C,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { getExternalStoreMessages } from "@assistant-ui/core";
|
|
3
3
|
import { MessageRepository } from "@assistant-ui/core/internal";
|
|
4
4
|
import { useAui } from "@assistant-ui/store";
|
|
5
|
-
import { useRef, useEffect, useState, useCallback } from "react";
|
|
5
|
+
import { useRef, useEffect, useState, useCallback, useMemo, } from "react";
|
|
6
6
|
export const toExportedMessageRepository = (toThreadMessages, messages) => {
|
|
7
7
|
return {
|
|
8
8
|
headId: messages.headId,
|
|
@@ -25,22 +25,28 @@ export const useExternalHistory = (runtimeRef, historyAdapter, toThreadMessages,
|
|
|
25
25
|
useEffect(() => {
|
|
26
26
|
onSetMessagesRef.current = onSetMessages;
|
|
27
27
|
});
|
|
28
|
+
const formatAdapter = useMemo(() => {
|
|
29
|
+
if (!historyAdapter)
|
|
30
|
+
return undefined;
|
|
31
|
+
if (!historyAdapter.withFormat) {
|
|
32
|
+
throw new Error("useAISDKRuntime: ThreadHistoryAdapter is missing the required `withFormat` method.");
|
|
33
|
+
}
|
|
34
|
+
return historyAdapter.withFormat(storageFormatAdapter);
|
|
35
|
+
}, [historyAdapter, storageFormatAdapter]);
|
|
28
36
|
useEffect(() => {
|
|
29
|
-
if (!
|
|
37
|
+
if (!formatAdapter || loadedRef.current)
|
|
30
38
|
return;
|
|
31
39
|
const loadHistory = async () => {
|
|
32
40
|
setIsLoading(true);
|
|
33
41
|
try {
|
|
34
|
-
const repo = await
|
|
35
|
-
.withFormat?.(storageFormatAdapter)
|
|
36
|
-
.load();
|
|
42
|
+
const repo = await formatAdapter.load();
|
|
37
43
|
if (repo && repo.messages.length > 0) {
|
|
38
44
|
const converted = toExportedMessageRepository(toThreadMessages, repo);
|
|
39
45
|
runtimeRef.current.thread.import(converted);
|
|
40
46
|
const tempRepo = new MessageRepository();
|
|
41
47
|
tempRepo.import(converted);
|
|
42
48
|
const messages = tempRepo.getMessages();
|
|
43
|
-
onSetMessagesRef.current(messages.
|
|
49
|
+
onSetMessagesRef.current(messages.flatMap((getExternalStoreMessages)));
|
|
44
50
|
historyIds.current = new Set(converted.messages.map((m) => m.message.id));
|
|
45
51
|
}
|
|
46
52
|
}
|
|
@@ -57,19 +63,15 @@ export const useExternalHistory = (runtimeRef, historyAdapter, toThreadMessages,
|
|
|
57
63
|
return;
|
|
58
64
|
}
|
|
59
65
|
loadHistory();
|
|
60
|
-
}, [
|
|
61
|
-
historyAdapter,
|
|
62
|
-
storageFormatAdapter,
|
|
63
|
-
toThreadMessages,
|
|
64
|
-
runtimeRef,
|
|
65
|
-
optionalThreadListItem,
|
|
66
|
-
]);
|
|
66
|
+
}, [formatAdapter, toThreadMessages, runtimeRef, optionalThreadListItem]);
|
|
67
67
|
const runStartRef = useRef(null);
|
|
68
68
|
const persistTimerRef = useRef(null);
|
|
69
69
|
const stepBoundariesRef = useRef([]);
|
|
70
70
|
const wasRunningRef = useRef(false);
|
|
71
71
|
const toolCallCountRef = useRef(0);
|
|
72
72
|
useEffect(() => {
|
|
73
|
+
if (!formatAdapter)
|
|
74
|
+
return;
|
|
73
75
|
const unsubscribe = runtimeRef.current.thread.subscribe(() => {
|
|
74
76
|
const { isRunning } = runtimeRef.current.thread.getState();
|
|
75
77
|
const wasRunning = wasRunningRef.current;
|
|
@@ -166,11 +168,10 @@ export const useExternalHistory = (runtimeRef, historyAdapter, toThreadMessages,
|
|
|
166
168
|
}
|
|
167
169
|
if (historyIds.current.has(message.id)) {
|
|
168
170
|
if (durationMs !== undefined) {
|
|
169
|
-
const formatAdapter = historyAdapter?.withFormat?.(storageFormatAdapter);
|
|
170
171
|
let parentId = lastInnerMessageId;
|
|
171
172
|
for (const innerMessage of innerMessages) {
|
|
172
173
|
try {
|
|
173
|
-
await formatAdapter
|
|
174
|
+
await formatAdapter.update?.({ parentId, message: innerMessage }, storageFormatAdapter.getId(innerMessage));
|
|
174
175
|
}
|
|
175
176
|
catch {
|
|
176
177
|
// ignore update failures to avoid breaking the message processing loop
|
|
@@ -183,14 +184,13 @@ export const useExternalHistory = (runtimeRef, historyAdapter, toThreadMessages,
|
|
|
183
184
|
continue;
|
|
184
185
|
}
|
|
185
186
|
historyIds.current.add(message.id);
|
|
186
|
-
const formatAdapter = historyAdapter?.withFormat?.(storageFormatAdapter);
|
|
187
187
|
const batchItems = toBatchItems(innerMessages);
|
|
188
188
|
for (const item of batchItems) {
|
|
189
|
-
await formatAdapter
|
|
189
|
+
await formatAdapter.append(item);
|
|
190
190
|
}
|
|
191
191
|
lastInnerMessageId =
|
|
192
192
|
getLastInnerId(innerMessages) ?? lastInnerMessageId;
|
|
193
|
-
formatAdapter
|
|
193
|
+
formatAdapter.reportTelemetry?.(batchItems, telemetryOptions);
|
|
194
194
|
}
|
|
195
195
|
}, 0);
|
|
196
196
|
});
|
|
@@ -201,7 +201,7 @@ export const useExternalHistory = (runtimeRef, historyAdapter, toThreadMessages,
|
|
|
201
201
|
persistTimerRef.current = null;
|
|
202
202
|
}
|
|
203
203
|
};
|
|
204
|
-
}, [
|
|
204
|
+
}, [formatAdapter, storageFormatAdapter, runtimeRef]);
|
|
205
205
|
return isLoading;
|
|
206
206
|
};
|
|
207
207
|
//# sourceMappingURL=useExternalHistory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExternalHistory.js","sourceRoot":"","sources":["../../../src/ui/use-chat/useExternalHistory.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAUb,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"useExternalHistory.js","sourceRoot":"","sources":["../../../src/ui/use-chat/useExternalHistory.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAUb,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,MAAM,EACN,SAAS,EACT,QAAQ,EAER,WAAW,EACX,OAAO,GACR,MAAM,OAAO,CAAC;AAEf,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,gBAA2D,EAC3D,QAA2C,EAChB,EAAE;IAC7B,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAO;QACxB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACpC,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;YAClD,OAAO;gBACL,GAAG,CAAC;gBACJ,OAAO;aACR,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,UAAuC,EACvC,cAAgD,EAChD,gBAA2D,EAC3D,oBAAyD,EACzD,aAA6C,EAC7C,EAAE;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,sBAAsB,GAAG,WAAW,CACxC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAC/D,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;IAE7C,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/C,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,IAAI,CAAC,cAAc;YAAE,OAAO,SAAS,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;QACJ,CAAC;QACD,OAAO,cAAc,CAAC,UAAU,CAAgB,oBAAoB,CAAC,CAAC;IACxE,CAAC,EAAE,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAE3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,OAAO;YAAE,OAAO;QAEhD,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;YAC7B,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;gBACxC,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrC,MAAM,SAAS,GAAG,2BAA2B,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;oBACtE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAE5C,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;oBACzC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;oBAExC,gBAAgB,CAAC,OAAO,CACtB,QAAQ,CAAC,OAAO,CAAC,CAAA,wBAAkC,CAAA,CAAC,CACrD,CAAC;oBAEF,UAAU,CAAC,OAAO,GAAG,IAAI,GAAG,CAC1B,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAC5C,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QAEF,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;YACnD,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,WAAW,EAAE,CAAC;IAChB,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAE1E,MAAM,WAAW,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAC3E,MAAM,iBAAiB,GAAG,MAAM,CAAW,EAAE,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3B,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;YAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC;YACzC,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC;YAElC,0EAA0E;YAC1E,IAAI,WAAW,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,IAAI,OAAO,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;oBAClC,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAC9B,CAAC,MAAM,CAAC;oBACT,OAAO,gBAAgB,CAAC,OAAO,GAAG,oBAAoB,EAAE,CAAC;wBACvD,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;wBACjE,gBAAgB,CAAC,OAAO,EAAE,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,WAAW,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;oBAChC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACjC,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC;oBAC/B,gBAAgB,CAAC,OAAO,GAAG,CAAC,CAAC;gBAC/B,CAAC;gBACD,2DAA2D;gBAC3D,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;oBAC5B,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;oBACtC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;gBACjC,CAAC;gBACD,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,IAAI,CAAC,UAAU;gBAAE,OAAO;YAExB,yDAAyD;YACzD,IAAI,WAAW,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;gBAChC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC;YAED,qEAAqE;YACrE,IAAI,eAAe,CAAC,OAAO;gBAAE,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACnE,eAAe,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gBAC9C,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;gBAE/B,0EAA0E;gBAC1E,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpD,IAAI,MAAM,CAAC,SAAS;oBAAE,OAAO,CAAC,qBAAqB;gBAEnD,8DAA8D;gBAC9D,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC;gBAC7C,MAAM,UAAU,GACd,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAExD,iFAAiF;gBACjF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;oBAClD,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAC9B,CAAC;oBACF,IAAI,aAAa,EAAE,CAAC;wBAClB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAC9B,CAAC,MAAM,CAAC;wBACT,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;4BAChB,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC;4BAC/B,MAAM,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;4BACxC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;4BACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gCACpC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;4BACjD,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,0DAA0D;gBAC1D,MAAM,cAAc,GAClB,UAAU,CAAC,MAAM,GAAG,CAAC;oBACnB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC5B,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAE;wBAC1C,MAAM,EAAE,KAAK;qBACd,CAAC,CAAC;oBACL,CAAC,CAAC,SAAS,CAAC;gBAEhB,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC3B,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC;gBAE/B,MAAM,gBAAgB,GAAG;oBACvB,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;oBACpD,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;iBAC7D,CAAC;gBAEF,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;gBAC5B,IAAI,kBAAkB,GAAkB,IAAI,CAAC;gBAE7C,MAAM,cAAc,GAAG,CAAC,IAAgB,EAAiB,EAAE,CACzD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAEpE,MAAM,YAAY,GAAG,CAAC,IAAgB,EAAE,EAAE,CACxC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;oBACtB,QAAQ,EACN,GAAG,KAAK,CAAC;wBACP,CAAC,CAAC,kBAAkB;wBACpB,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;oBAChD,OAAO,EAAE,GAAG;iBACb,CAAC,CAAC,CAAC;gBAEN,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,aAAa,GAAG,wBAAwB,CAAW,OAAO,CAAC,CAAC;oBAElE,MAAM,OAAO,GACX,OAAO,CAAC,MAAM,KAAK,SAAS;wBAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU;wBAClC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;oBAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,kBAAkB;4BAChB,cAAc,CAAC,aAAa,CAAC,IAAI,kBAAkB,CAAC;wBACtD,SAAS;oBACX,CAAC;oBAED,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;wBACvC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;4BAC7B,IAAI,QAAQ,GAAG,kBAAkB,CAAC;4BAClC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;gCACzC,IAAI,CAAC;oCACH,MAAM,aAAa,CAAC,MAAM,EAAE,CAC1B,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,EACnC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CACzC,CAAC;gCACJ,CAAC;gCAAC,MAAM,CAAC;oCACP,uEAAuE;gCACzE,CAAC;gCACD,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;4BACtD,CAAC;wBACH,CAAC;wBACD,kBAAkB;4BAChB,cAAc,CAAC,aAAa,CAAC,IAAI,kBAAkB,CAAC;wBACtD,SAAS;oBACX,CAAC;oBACD,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAEnC,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC/C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;wBAC9B,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACnC,CAAC;oBAED,kBAAkB;wBAChB,cAAc,CAAC,aAAa,CAAC,IAAI,kBAAkB,CAAC;oBAEtD,aAAa,CAAC,eAAe,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAC;YACd,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC5B,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACtC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,EAAE,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC;IAEtD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/D,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAalC,MAAM,MAAM,6BAA6B,GACvC,2BAA2B,CAAC,QAAQ,GAAG;IACrC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;CAC5D,CAAC;
|
|
1
|
+
{"version":3,"file":"convertMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/D,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAalC,MAAM,MAAM,6BAA6B,GACvC,2BAA2B,CAAC,QAAQ,GAAG;IACrC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;CAC5D,CAAC;AA+NJ,eAAO,MAAM,qBAAqB;;;;;;;;wHAzNV,qDAAyB;uHAIzC,qDACQ;;;CA8Qf,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { createMessageConverter as unstable_createMessageConverter, } from "@ass
|
|
|
3
3
|
function stripClosingDelimiters(json) {
|
|
4
4
|
return json.replace(/[}\]"]+$/, "");
|
|
5
5
|
}
|
|
6
|
-
const hasOwn = (value, key) => Object.
|
|
6
|
+
const hasOwn = (value, key) => Object.hasOwn(value, key);
|
|
7
7
|
const stabilizeToolArgsValue = (value, path, keyOrderByPath) => {
|
|
8
8
|
if (Array.isArray(value)) {
|
|
9
9
|
return value.map((item, idx) => stabilizeToolArgsValue(item, `${path}[${idx}]`, keyOrderByPath));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMessage.js","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAkB,MAAM,IAAI,CAAC;AAC/D,OAAO,EACL,sBAAsB,IAAI,+BAA+B,GAE1D,MAAM,0BAA0B,CAAC;AAkBlC,SAAS,sBAAsB,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"convertMessage.js","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { AppendMessage } from "@assistant-ui/core";
|
|
2
|
-
import { CreateUIMessage, UIMessage } from "ai";
|
|
2
|
+
import type { CreateUIMessage, UIMessage } from "ai";
|
|
3
3
|
export declare const toCreateMessage: <UI_MESSAGE extends UIMessage = UIMessage>(message: AppendMessage) => CreateUIMessage<UI_MESSAGE>;
|
|
4
4
|
//# sourceMappingURL=toCreateMessage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toCreateMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/toCreateMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"toCreateMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/toCreateMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,eAAe,EAEf,SAAS,EAGV,MAAM,IAAI,CAAC;AAEZ,eAAO,MAAM,eAAe,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EACtE,SAAS,aAAa,KACrB,eAAe,CAAC,UAAU,CA0C5B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react-ai-sdk",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.21",
|
|
4
4
|
"description": "Vercel AI SDK adapter for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-sdk",
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
],
|
|
31
31
|
"sideEffects": false,
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@ai-sdk/react": "^3.0.
|
|
34
|
-
"@assistant-ui/core": "^0.1.
|
|
35
|
-
"@assistant-ui/store": "^0.2.
|
|
36
|
-
"ai": "^6.0.
|
|
33
|
+
"@ai-sdk/react": "^3.0.170",
|
|
34
|
+
"@assistant-ui/core": "^0.1.16",
|
|
35
|
+
"@assistant-ui/store": "^0.2.9",
|
|
36
|
+
"ai": "^6.0.168",
|
|
37
37
|
"assistant-cloud": "*"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
"@types/json-schema": "^7.0.15",
|
|
51
51
|
"@types/react": "^19.2.14",
|
|
52
52
|
"@types/react-dom": "^19.2.3",
|
|
53
|
-
"jsdom": "^29.0
|
|
53
|
+
"jsdom": "^29.1.0",
|
|
54
54
|
"react": "^19.2.5",
|
|
55
|
-
"vitest": "^4.1.
|
|
56
|
-
"@assistant-ui/x-buildutils": "0.0.
|
|
57
|
-
"assistant-stream": "0.3.
|
|
55
|
+
"vitest": "^4.1.5",
|
|
56
|
+
"@assistant-ui/x-buildutils": "0.0.6",
|
|
57
|
+
"assistant-stream": "0.3.12"
|
|
58
58
|
},
|
|
59
59
|
"publishConfig": {
|
|
60
60
|
"access": "public",
|
|
@@ -1,23 +1,31 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
AssistantRuntime,
|
|
3
|
+
ThreadListItemRuntime,
|
|
4
|
+
} from "@assistant-ui/core";
|
|
2
5
|
import {
|
|
3
6
|
DefaultChatTransport,
|
|
4
|
-
HttpChatTransportInitOptions,
|
|
5
|
-
UIMessage,
|
|
7
|
+
type HttpChatTransportInitOptions,
|
|
8
|
+
type UIMessage,
|
|
6
9
|
} from "ai";
|
|
7
10
|
import { toToolsJSONSchema } from "assistant-stream";
|
|
8
11
|
|
|
12
|
+
type InitializableThreadListItem = Pick<ThreadListItemRuntime, "initialize">;
|
|
13
|
+
|
|
9
14
|
export class AssistantChatTransport<
|
|
10
15
|
UI_MESSAGE extends UIMessage,
|
|
11
16
|
> extends DefaultChatTransport<UI_MESSAGE> {
|
|
12
17
|
private runtime: AssistantRuntime | undefined;
|
|
18
|
+
private getThreadListItem:
|
|
19
|
+
| (() => InitializableThreadListItem | undefined)
|
|
20
|
+
| undefined;
|
|
13
21
|
constructor(initOptions?: HttpChatTransportInitOptions<UI_MESSAGE>) {
|
|
14
22
|
super({
|
|
15
23
|
...initOptions,
|
|
16
24
|
prepareSendMessagesRequest: async (options) => {
|
|
17
25
|
const context = this.runtime?.thread.getModelContext();
|
|
18
|
-
const
|
|
19
|
-
(
|
|
20
|
-
|
|
26
|
+
const threadListItem =
|
|
27
|
+
this.getThreadListItem?.() ?? this.runtime?.threads.mainItem;
|
|
28
|
+
const id = (await threadListItem?.initialize())?.remoteId ?? options.id;
|
|
21
29
|
|
|
22
30
|
const optionsEx = {
|
|
23
31
|
...options,
|
|
@@ -50,4 +58,10 @@ export class AssistantChatTransport<
|
|
|
50
58
|
setRuntime(runtime: AssistantRuntime) {
|
|
51
59
|
this.runtime = runtime;
|
|
52
60
|
}
|
|
61
|
+
|
|
62
|
+
__internal_setGetThreadListItem(
|
|
63
|
+
getter: () => InitializableThreadListItem | undefined,
|
|
64
|
+
) {
|
|
65
|
+
this.getThreadListItem = getter;
|
|
66
|
+
}
|
|
53
67
|
}
|
|
@@ -7,13 +7,13 @@ import {
|
|
|
7
7
|
useCloudThreadListAdapter,
|
|
8
8
|
useRemoteThreadListRuntime,
|
|
9
9
|
} from "@assistant-ui/core/react";
|
|
10
|
-
import { useAuiState } from "@assistant-ui/store";
|
|
10
|
+
import { useAui, useAuiState } from "@assistant-ui/store";
|
|
11
11
|
import {
|
|
12
12
|
useAISDKRuntime,
|
|
13
13
|
type AISDKRuntimeAdapter,
|
|
14
14
|
type CustomToCreateMessageFunction,
|
|
15
15
|
} from "./useAISDKRuntime";
|
|
16
|
-
import { ChatInit, ChatTransport } from "ai";
|
|
16
|
+
import type { ChatInit, ChatTransport } from "ai";
|
|
17
17
|
import { AssistantChatTransport } from "./AssistantChatTransport";
|
|
18
18
|
import { useEffect, useMemo, useRef } from "react";
|
|
19
19
|
|
|
@@ -27,10 +27,13 @@ export type UseChatRuntimeOptions<UI_MESSAGE extends UIMessage = UIMessage> =
|
|
|
27
27
|
const useDynamicChatTransport = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
28
28
|
transport: ChatTransport<UI_MESSAGE>,
|
|
29
29
|
): ChatTransport<UI_MESSAGE> => {
|
|
30
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
30
31
|
const transportRef = useRef<ChatTransport<UI_MESSAGE>>(transport);
|
|
32
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
31
33
|
useEffect(() => {
|
|
32
34
|
transportRef.current = transport;
|
|
33
35
|
});
|
|
36
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
34
37
|
const dynamicTransport = useMemo(
|
|
35
38
|
() =>
|
|
36
39
|
new Proxy(transportRef.current, {
|
|
@@ -57,17 +60,23 @@ const useChatThreadRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
57
60
|
...chatOptions
|
|
58
61
|
} = options ?? {};
|
|
59
62
|
|
|
63
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
60
64
|
const transport = useDynamicChatTransport(
|
|
61
65
|
transportOptions ?? new AssistantChatTransport(),
|
|
62
66
|
);
|
|
63
67
|
|
|
68
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
64
69
|
const id = useAuiState((s) => s.threadListItem.id);
|
|
70
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
71
|
+
const aui = useAui();
|
|
72
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
65
73
|
const chat = useChat({
|
|
66
74
|
...chatOptions,
|
|
67
75
|
id,
|
|
68
76
|
transport,
|
|
69
77
|
});
|
|
70
78
|
|
|
79
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
71
80
|
const runtime = useAISDKRuntime(chat, {
|
|
72
81
|
adapters,
|
|
73
82
|
...(toCreateMessage && { toCreateMessage }),
|
|
@@ -75,6 +84,9 @@ const useChatThreadRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
75
84
|
|
|
76
85
|
if (transport instanceof AssistantChatTransport) {
|
|
77
86
|
transport.setRuntime(runtime);
|
|
87
|
+
transport.__internal_setGetThreadListItem(() =>
|
|
88
|
+
aui.threadListItem.source ? aui.threadListItem() : undefined,
|
|
89
|
+
);
|
|
78
90
|
}
|
|
79
91
|
|
|
80
92
|
return runtime;
|
|
@@ -87,6 +99,7 @@ export const useChatRuntime = <UI_MESSAGE extends UIMessage = UIMessage>({
|
|
|
87
99
|
const cloudAdapter = useCloudThreadListAdapter({ cloud });
|
|
88
100
|
return useRemoteThreadListRuntime({
|
|
89
101
|
runtimeHook: function RuntimeHook() {
|
|
102
|
+
// biome-ignore lint/correctness/useHookAtTopLevel: intentional conditional/nested hook usage
|
|
90
103
|
return useChatThreadRuntime(options);
|
|
91
104
|
},
|
|
92
105
|
adapter: cloudAdapter,
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
|
|
3
|
+
import { renderHook } from "@testing-library/react";
|
|
4
|
+
import { describe, expect, it, vi } from "vitest";
|
|
5
|
+
import type {
|
|
6
|
+
AssistantRuntime,
|
|
7
|
+
MessageFormatAdapter,
|
|
8
|
+
ThreadHistoryAdapter,
|
|
9
|
+
ThreadMessage,
|
|
10
|
+
} from "@assistant-ui/core";
|
|
11
|
+
|
|
12
|
+
vi.mock("@assistant-ui/store", () => ({
|
|
13
|
+
useAui: () => ({
|
|
14
|
+
threadListItem: Object.assign(() => null, { source: undefined }),
|
|
15
|
+
}),
|
|
16
|
+
}));
|
|
17
|
+
|
|
18
|
+
import { useExternalHistory } from "./useExternalHistory";
|
|
19
|
+
|
|
20
|
+
const noopThread = {
|
|
21
|
+
subscribe: () => () => {},
|
|
22
|
+
getState: () => ({ isRunning: false, messages: [] }),
|
|
23
|
+
import: () => {},
|
|
24
|
+
export: () => ({ headId: null, messages: [] }),
|
|
25
|
+
} as unknown as AssistantRuntime["thread"];
|
|
26
|
+
|
|
27
|
+
const runtimeRef = {
|
|
28
|
+
current: { thread: noopThread } as AssistantRuntime,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const storageFormat: MessageFormatAdapter<unknown, Record<string, unknown>> = {
|
|
32
|
+
format: "test",
|
|
33
|
+
encode: (item) => ({ data: item.message }),
|
|
34
|
+
decode: (stored) => ({
|
|
35
|
+
parentId: stored.parent_id,
|
|
36
|
+
message: stored.content,
|
|
37
|
+
}),
|
|
38
|
+
getId: () => "id",
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const toThreadMessages = (_messages: unknown[]): ThreadMessage[] => [];
|
|
42
|
+
const onSetMessages = () => {};
|
|
43
|
+
|
|
44
|
+
describe("useExternalHistory withFormat contract", () => {
|
|
45
|
+
it("throws when the adapter omits withFormat", () => {
|
|
46
|
+
const adapterWithoutWithFormat: ThreadHistoryAdapter = {
|
|
47
|
+
load: vi.fn().mockResolvedValue({ headId: null, messages: [] }),
|
|
48
|
+
append: vi.fn().mockResolvedValue(undefined),
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
|
52
|
+
|
|
53
|
+
expect(() =>
|
|
54
|
+
renderHook(() =>
|
|
55
|
+
useExternalHistory(
|
|
56
|
+
runtimeRef,
|
|
57
|
+
adapterWithoutWithFormat,
|
|
58
|
+
toThreadMessages,
|
|
59
|
+
storageFormat,
|
|
60
|
+
onSetMessages,
|
|
61
|
+
),
|
|
62
|
+
),
|
|
63
|
+
).toThrow(/withFormat/);
|
|
64
|
+
|
|
65
|
+
errorSpy.mockRestore();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("does not throw when no adapter is supplied", () => {
|
|
69
|
+
expect(() =>
|
|
70
|
+
renderHook(() =>
|
|
71
|
+
useExternalHistory(
|
|
72
|
+
runtimeRef,
|
|
73
|
+
undefined,
|
|
74
|
+
toThreadMessages,
|
|
75
|
+
storageFormat,
|
|
76
|
+
onSetMessages,
|
|
77
|
+
),
|
|
78
|
+
),
|
|
79
|
+
).not.toThrow();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it("accepts an adapter that implements withFormat", () => {
|
|
83
|
+
const withFormatResult = {
|
|
84
|
+
load: vi.fn().mockResolvedValue({ headId: null, messages: [] }),
|
|
85
|
+
append: vi.fn().mockResolvedValue(undefined),
|
|
86
|
+
};
|
|
87
|
+
const adapter: ThreadHistoryAdapter = {
|
|
88
|
+
load: vi.fn(),
|
|
89
|
+
append: vi.fn(),
|
|
90
|
+
withFormat: vi.fn().mockReturnValue(withFormatResult),
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
expect(() =>
|
|
94
|
+
renderHook(() =>
|
|
95
|
+
useExternalHistory(
|
|
96
|
+
runtimeRef,
|
|
97
|
+
adapter,
|
|
98
|
+
toThreadMessages,
|
|
99
|
+
storageFormat,
|
|
100
|
+
onSetMessages,
|
|
101
|
+
),
|
|
102
|
+
),
|
|
103
|
+
).not.toThrow();
|
|
104
|
+
|
|
105
|
+
expect(adapter.withFormat).toHaveBeenCalledWith(storageFormat);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
@@ -11,7 +11,14 @@ import type {
|
|
|
11
11
|
import { getExternalStoreMessages } from "@assistant-ui/core";
|
|
12
12
|
import { MessageRepository } from "@assistant-ui/core/internal";
|
|
13
13
|
import { useAui } from "@assistant-ui/store";
|
|
14
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
useRef,
|
|
16
|
+
useEffect,
|
|
17
|
+
useState,
|
|
18
|
+
type RefObject,
|
|
19
|
+
useCallback,
|
|
20
|
+
useMemo,
|
|
21
|
+
} from "react";
|
|
15
22
|
|
|
16
23
|
export const toExportedMessageRepository = <TMessage>(
|
|
17
24
|
toThreadMessages: (messages: TMessage[]) => ThreadMessage[],
|
|
@@ -53,15 +60,23 @@ export const useExternalHistory = <TMessage>(
|
|
|
53
60
|
onSetMessagesRef.current = onSetMessages;
|
|
54
61
|
});
|
|
55
62
|
|
|
63
|
+
const formatAdapter = useMemo(() => {
|
|
64
|
+
if (!historyAdapter) return undefined;
|
|
65
|
+
if (!historyAdapter.withFormat) {
|
|
66
|
+
throw new Error(
|
|
67
|
+
"useAISDKRuntime: ThreadHistoryAdapter is missing the required `withFormat` method.",
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
return historyAdapter.withFormat<TMessage, any>(storageFormatAdapter);
|
|
71
|
+
}, [historyAdapter, storageFormatAdapter]);
|
|
72
|
+
|
|
56
73
|
useEffect(() => {
|
|
57
|
-
if (!
|
|
74
|
+
if (!formatAdapter || loadedRef.current) return;
|
|
58
75
|
|
|
59
76
|
const loadHistory = async () => {
|
|
60
77
|
setIsLoading(true);
|
|
61
78
|
try {
|
|
62
|
-
const repo = await
|
|
63
|
-
.withFormat?.(storageFormatAdapter)
|
|
64
|
-
.load();
|
|
79
|
+
const repo = await formatAdapter.load();
|
|
65
80
|
if (repo && repo.messages.length > 0) {
|
|
66
81
|
const converted = toExportedMessageRepository(toThreadMessages, repo);
|
|
67
82
|
runtimeRef.current.thread.import(converted);
|
|
@@ -71,7 +86,7 @@ export const useExternalHistory = <TMessage>(
|
|
|
71
86
|
const messages = tempRepo.getMessages();
|
|
72
87
|
|
|
73
88
|
onSetMessagesRef.current(
|
|
74
|
-
messages.
|
|
89
|
+
messages.flatMap(getExternalStoreMessages<TMessage>),
|
|
75
90
|
);
|
|
76
91
|
|
|
77
92
|
historyIds.current = new Set(
|
|
@@ -93,13 +108,7 @@ export const useExternalHistory = <TMessage>(
|
|
|
93
108
|
}
|
|
94
109
|
|
|
95
110
|
loadHistory();
|
|
96
|
-
}, [
|
|
97
|
-
historyAdapter,
|
|
98
|
-
storageFormatAdapter,
|
|
99
|
-
toThreadMessages,
|
|
100
|
-
runtimeRef,
|
|
101
|
-
optionalThreadListItem,
|
|
102
|
-
]);
|
|
111
|
+
}, [formatAdapter, toThreadMessages, runtimeRef, optionalThreadListItem]);
|
|
103
112
|
|
|
104
113
|
const runStartRef = useRef<number | null>(null);
|
|
105
114
|
const persistTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
@@ -108,6 +117,8 @@ export const useExternalHistory = <TMessage>(
|
|
|
108
117
|
const toolCallCountRef = useRef(0);
|
|
109
118
|
|
|
110
119
|
useEffect(() => {
|
|
120
|
+
if (!formatAdapter) return;
|
|
121
|
+
|
|
111
122
|
const unsubscribe = runtimeRef.current.thread.subscribe(() => {
|
|
112
123
|
const { isRunning } = runtimeRef.current.thread.getState();
|
|
113
124
|
const wasRunning = wasRunningRef.current;
|
|
@@ -231,12 +242,10 @@ export const useExternalHistory = <TMessage>(
|
|
|
231
242
|
|
|
232
243
|
if (historyIds.current.has(message.id)) {
|
|
233
244
|
if (durationMs !== undefined) {
|
|
234
|
-
const formatAdapter =
|
|
235
|
-
historyAdapter?.withFormat?.(storageFormatAdapter);
|
|
236
245
|
let parentId = lastInnerMessageId;
|
|
237
246
|
for (const innerMessage of innerMessages) {
|
|
238
247
|
try {
|
|
239
|
-
await formatAdapter
|
|
248
|
+
await formatAdapter.update?.(
|
|
240
249
|
{ parentId, message: innerMessage },
|
|
241
250
|
storageFormatAdapter.getId(innerMessage),
|
|
242
251
|
);
|
|
@@ -252,18 +261,15 @@ export const useExternalHistory = <TMessage>(
|
|
|
252
261
|
}
|
|
253
262
|
historyIds.current.add(message.id);
|
|
254
263
|
|
|
255
|
-
const formatAdapter =
|
|
256
|
-
historyAdapter?.withFormat?.(storageFormatAdapter);
|
|
257
|
-
|
|
258
264
|
const batchItems = toBatchItems(innerMessages);
|
|
259
265
|
for (const item of batchItems) {
|
|
260
|
-
await formatAdapter
|
|
266
|
+
await formatAdapter.append(item);
|
|
261
267
|
}
|
|
262
268
|
|
|
263
269
|
lastInnerMessageId =
|
|
264
270
|
getLastInnerId(innerMessages) ?? lastInnerMessageId;
|
|
265
271
|
|
|
266
|
-
formatAdapter
|
|
272
|
+
formatAdapter.reportTelemetry?.(batchItems, telemetryOptions);
|
|
267
273
|
}
|
|
268
274
|
}, 0);
|
|
269
275
|
});
|
|
@@ -275,7 +281,7 @@ export const useExternalHistory = <TMessage>(
|
|
|
275
281
|
persistTimerRef.current = null;
|
|
276
282
|
}
|
|
277
283
|
};
|
|
278
|
-
}, [
|
|
284
|
+
}, [formatAdapter, storageFormatAdapter, runtimeRef]);
|
|
279
285
|
|
|
280
286
|
return isLoading;
|
|
281
287
|
};
|
|
@@ -24,8 +24,7 @@ function stripClosingDelimiters(json: string): string {
|
|
|
24
24
|
return json.replace(/[}\]"]+$/, "");
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
const hasOwn = (value: object, key: string) =>
|
|
28
|
-
Object.prototype.hasOwnProperty.call(value, key);
|
|
27
|
+
const hasOwn = (value: object, key: string) => Object.hasOwn(value, key);
|
|
29
28
|
|
|
30
29
|
const stabilizeToolArgsValue = (
|
|
31
30
|
value: unknown,
|