@assistant-ui/core 0.2.18 → 0.2.20
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/index.d.ts +4 -2
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +2 -1
- package/dist/internal.js +2 -1
- package/dist/model-context/interactable-composer-metadata.d.ts +105 -0
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -0
- package/dist/model-context/interactable-composer-metadata.js +259 -0
- package/dist/model-context/interactable-composer-metadata.js.map +1 -0
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/registry.js +1 -0
- package/dist/model-context/registry.js.map +1 -1
- package/dist/model-context/types.d.ts +6 -0
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/model-context/types.js +4 -0
- package/dist/model-context/types.js.map +1 -1
- package/dist/react/AssistantProvider.d.ts +1 -1
- package/dist/react/AssistantProvider.js +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +1 -1
- package/dist/react/RuntimeAdapter.js +1 -1
- package/dist/react/client/Interactables.d.ts +8 -2
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +190 -94
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/Tools.js +1 -1
- package/dist/react/client/interactable-model-context.d.ts +9 -6
- package/dist/react/client/interactable-model-context.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.js +154 -32
- package/dist/react/client/interactable-model-context.js.map +1 -1
- package/dist/react/index.d.ts +15 -6
- package/dist/react/index.js +12 -5
- package/dist/react/interactables-legacy/Interactables.d.ts +12 -0
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -0
- package/dist/react/interactables-legacy/Interactables.js +264 -0
- package/dist/react/interactables-legacy/Interactables.js.map +1 -0
- package/dist/react/interactables-legacy/interactable-model-context.d.ts +12 -0
- package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -0
- package/dist/react/interactables-legacy/interactable-model-context.js +54 -0
- package/dist/react/interactables-legacy/interactable-model-context.js.map +1 -0
- package/dist/react/interactables-legacy/scopes.d.ts +58 -0
- package/dist/react/interactables-legacy/scopes.d.ts.map +1 -0
- package/dist/react/interactables-legacy/scopes.js +0 -0
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +31 -0
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -0
- package/dist/react/{model-context → interactables-legacy}/useAssistantInteractable.js +6 -2
- package/dist/react/interactables-legacy/useAssistantInteractable.js.map +1 -0
- package/dist/react/interactables-legacy/useInteractableState.d.ts +21 -0
- package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -0
- package/dist/react/interactables-legacy/useInteractableState.js +84 -0
- package/dist/react/interactables-legacy/useInteractableState.js.map +1 -0
- package/dist/react/model-context/interactableTool.d.ts +53 -0
- package/dist/react/model-context/interactableTool.d.ts.map +1 -0
- package/dist/react/model-context/interactableTool.js +188 -0
- package/dist/react/model-context/interactableTool.js.map +1 -0
- package/dist/react/model-context/useAssistantContext.js +1 -1
- package/dist/react/model-context/useAssistantDataUI.js +1 -1
- package/dist/react/model-context/useAssistantInstructions.js +1 -1
- package/dist/react/model-context/useAssistantTool.js +1 -1
- package/dist/react/model-context/useAssistantToolUI.js +1 -1
- package/dist/react/model-context/useAuiToolOverrides.js +1 -1
- package/dist/react/model-context/useInteractable.d.ts +73 -0
- package/dist/react/model-context/useInteractable.d.ts.map +1 -0
- package/dist/react/model-context/useInteractable.js +100 -0
- package/dist/react/model-context/useInteractable.js.map +1 -0
- package/dist/react/model-context/useInteractableState.d.ts +8 -5
- package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableState.js +48 -48
- package/dist/react/model-context/useInteractableState.js.map +1 -1
- package/dist/react/model-context/useInteractableVersions.d.ts +19 -0
- package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -0
- package/dist/react/model-context/useInteractableVersions.js +51 -0
- package/dist/react/model-context/useInteractableVersions.js.map +1 -0
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +15 -0
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -0
- package/dist/react/primitive-hooks/useThreadMessageIds.js +26 -0
- package/dist/react/primitive-hooks/useThreadMessageIds.js.map +1 -0
- package/dist/react/primitive-hooks/useVoice.js +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.js +1 -1
- package/dist/react/primitives/composer/ComposerQueue.js +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +2 -2
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.js +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +1 -1
- package/dist/react/primitives/message/MessageParts.js +1 -1
- package/dist/react/primitives/message/MessageQuote.js +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +5 -2
- package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.js +8 -8
- package/dist/react/primitives/part/PartMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts +31 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js +64 -2
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.js +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.js +1 -1
- package/dist/react/providers/MessageByIdProvider.d.ts +9 -0
- package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -0
- package/dist/react/providers/MessageByIdProvider.js +57 -0
- package/dist/react/providers/MessageByIdProvider.js.map +1 -0
- package/dist/react/providers/ReadonlyThreadProvider.js +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +3 -0
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +16 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +1 -1
- package/dist/react/runtimes/createRuntimeExtras.d.ts +20 -0
- package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -0
- package/dist/react/runtimes/createRuntimeExtras.js +43 -0
- package/dist/react/runtimes/createRuntimeExtras.js.map +1 -0
- package/dist/react/runtimes/useLocalRuntime.js +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +6 -2
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/useStreamingTiming.d.ts +26 -0
- package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -0
- package/dist/react/runtimes/useStreamingTiming.js +43 -0
- package/dist/react/runtimes/useStreamingTiming.js.map +1 -0
- package/dist/react/types/scopes/interactables.d.ts +40 -24
- package/dist/react/types/scopes/interactables.d.ts.map +1 -1
- package/dist/react/types/store-augmentation.d.ts +3 -1
- package/dist/react/types/store-augmentation.d.ts.map +1 -1
- package/dist/react/utils/useJSONEqual.d.ts +11 -0
- package/dist/react/utils/useJSONEqual.d.ts.map +1 -0
- package/dist/react/utils/useJSONEqual.js +30 -0
- package/dist/react/utils/useJSONEqual.js.map +1 -0
- package/dist/runtime/base/base-composer-runtime-core.d.ts +5 -0
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +13 -0
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js +6 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +4 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +1 -0
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +6 -3
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/streaming-timing.d.ts +59 -0
- package/dist/runtime/utils/streaming-timing.d.ts.map +1 -0
- package/dist/runtime/utils/streaming-timing.js +76 -0
- package/dist/runtime/utils/streaming-timing.js.map +1 -0
- package/dist/runtime/utils/thread-message-like.js +2 -1
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +26 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +9 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +19 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +12 -0
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/store/clients/suggestions.js +1 -1
- package/dist/store/clients/thread-message-client.js +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +1 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +1 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.js +3 -2
- package/dist/tests/remote-thread-list-test-helpers.js.map +1 -1
- package/package.json +9 -9
- package/src/index.ts +17 -0
- package/src/internal.ts +7 -0
- package/src/model-context/interactable-composer-metadata.test.ts +550 -0
- package/src/model-context/interactable-composer-metadata.ts +395 -0
- package/src/model-context/registry.ts +5 -0
- package/src/model-context/types.ts +12 -0
- package/src/react/client/Interactables.test.ts +358 -0
- package/src/react/client/Interactables.ts +339 -86
- package/src/react/client/interactable-model-context.test.ts +418 -0
- package/src/react/client/interactable-model-context.ts +252 -58
- package/src/react/index.ts +72 -3
- package/src/react/interactables-legacy/Interactables.ts +332 -0
- package/src/react/interactables-legacy/interactable-model-context.test.ts +54 -0
- package/src/react/interactables-legacy/interactable-model-context.ts +80 -0
- package/src/react/interactables-legacy/scopes.ts +66 -0
- package/src/react/{model-context → interactables-legacy}/useAssistantInteractable.ts +10 -1
- package/src/react/interactables-legacy/useInteractableState.ts +67 -0
- package/src/react/model-context/interactableTool.tsx +175 -0
- package/src/react/model-context/useInteractable.ts +233 -0
- package/src/react/model-context/useInteractableState.ts +31 -23
- package/src/react/model-context/useInteractableVersions.ts +48 -0
- package/src/react/primitive-hooks/useThreadMessageIds.ts +27 -0
- package/src/react/primitives/generativeUI/GenerativeUI.tsx +5 -1
- package/src/react/primitives/part/PartMessages.test.tsx +17 -0
- package/src/react/primitives/part/PartMessages.tsx +13 -8
- package/src/react/primitives/thread/ThreadMessages.tsx +67 -0
- package/src/react/providers/MessageByIdProvider.tsx +23 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +21 -1
- package/src/react/runtimes/createRuntimeExtras.test.ts +58 -0
- package/src/react/runtimes/createRuntimeExtras.ts +68 -0
- package/src/react/runtimes/createRuntimeExtras.use.test.ts +50 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +13 -1
- package/src/react/runtimes/useStreamingTiming.ts +68 -0
- package/src/react/types/scopes/interactables.ts +45 -23
- package/src/react/types/store-augmentation.ts +4 -2
- package/src/react/utils/useJSONEqual.ts +20 -0
- package/src/runtime/base/base-composer-runtime-core.ts +13 -0
- package/src/runtime/base/default-edit-composer-runtime-core.ts +18 -1
- package/src/runtime/base/default-thread-composer-runtime-core.ts +11 -1
- package/src/runtime/utils/message-repository.ts +11 -7
- package/src/runtime/utils/streaming-timing.test.ts +301 -0
- package/src/runtime/utils/streaming-timing.ts +161 -0
- package/src/runtime/utils/thread-message-like.ts +2 -1
- package/src/runtimes/external-store/external-store-adapter.ts +28 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +33 -1
- package/src/runtimes/local/local-thread-runtime-core.ts +4 -1
- package/src/runtimes/remote-thread-list/types.ts +13 -0
- package/src/tests/MessageRepository.test.ts +2 -0
- package/src/tests/composer-can-send.test.ts +1 -0
- package/src/tests/default-edit-composer-runtime-core.test.ts +78 -1
- package/src/tests/default-thread-composer-runtime-core.test.ts +82 -0
- package/src/tests/external-store-thread-runtime-core.test.ts +337 -0
- package/src/tests/groupParts.test.ts +32 -0
- package/src/tests/remote-thread-list-reactive-threadId.test.ts +90 -0
- package/src/tests/remote-thread-list-test-helpers.ts +2 -1
- package/src/tests/thread-message-like.test.ts +50 -0
- package/dist/react/model-context/useAssistantInteractable.d.ts +0 -22
- package/dist/react/model-context/useAssistantInteractable.d.ts.map +0 -1
- package/dist/react/model-context/useAssistantInteractable.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MessageByIndexProvider } from "../../providers/MessageByIndexProvider.js";
|
|
2
|
-
import {
|
|
2
|
+
import { MessageByIdProvider } from "../../providers/MessageByIdProvider.js";
|
|
3
3
|
import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
|
|
4
|
+
import { memo, useMemo } from "@assistant-ui/tap/react-shim";
|
|
4
5
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
5
6
|
import { jsx } from "react/jsx-runtime";
|
|
6
7
|
//#region src/react/primitives/thread/ThreadMessages.tsx
|
|
@@ -8,6 +9,15 @@ const isComponentsSame = (prev, next) => {
|
|
|
8
9
|
return prev.Message === next.Message && prev.EditComposer === next.EditComposer && prev.UserEditComposer === next.UserEditComposer && prev.AssistantEditComposer === next.AssistantEditComposer && prev.SystemEditComposer === next.SystemEditComposer && prev.UserMessage === next.UserMessage && prev.AssistantMessage === next.AssistantMessage && prev.SystemMessage === next.SystemMessage;
|
|
9
10
|
};
|
|
10
11
|
const DEFAULT_SYSTEM_MESSAGE = () => null;
|
|
12
|
+
const messageIdSetCache = /* @__PURE__ */ new WeakMap();
|
|
13
|
+
const hasMessageId = (messages, messageId) => {
|
|
14
|
+
let ids = messageIdSetCache.get(messages);
|
|
15
|
+
if (!ids) {
|
|
16
|
+
ids = new Set(messages.map((m) => m.id));
|
|
17
|
+
messageIdSetCache.set(messages, ids);
|
|
18
|
+
}
|
|
19
|
+
return ids.has(messageId);
|
|
20
|
+
};
|
|
11
21
|
const getComponent = (components, role, isEditing) => {
|
|
12
22
|
switch (role) {
|
|
13
23
|
case "user": if (isEditing) return components.UserEditComposer ?? components.EditComposer ?? components.UserMessage ?? components.Message;
|
|
@@ -66,6 +76,58 @@ const ThreadPrimitiveMessageByIndex = memo((t0) => {
|
|
|
66
76
|
return t2;
|
|
67
77
|
}, (prev, next) => prev.index === next.index && isComponentsSame(prev.components, next.components));
|
|
68
78
|
ThreadPrimitiveMessageByIndex.displayName = "ThreadPrimitive.MessageByIndex";
|
|
79
|
+
/**
|
|
80
|
+
* Renders the message with the given id in the current thread.
|
|
81
|
+
*
|
|
82
|
+
* Unlike {@link ThreadPrimitiveMessageByIndex}, this keys off the message id,
|
|
83
|
+
* so it stays attached to the same message across reordering and windowing -
|
|
84
|
+
* the shape needed to drive a virtualized or custom message list together with
|
|
85
|
+
* `unstable_useThreadMessageIds`. A missing or removed id renders `null` rather
|
|
86
|
+
* than throwing.
|
|
87
|
+
*
|
|
88
|
+
* @deprecated Unstable / Experimental - may change in any release.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```tsx
|
|
92
|
+
* const messageIds = unstable_useThreadMessageIds();
|
|
93
|
+
* return messageIds.map((messageId) => (
|
|
94
|
+
* <ThreadPrimitive.Unstable_MessageById
|
|
95
|
+
* key={messageId}
|
|
96
|
+
* messageId={messageId}
|
|
97
|
+
* components={MESSAGE_COMPONENTS}
|
|
98
|
+
* />
|
|
99
|
+
* ));
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
const ThreadPrimitiveUnstable_MessageById = memo((t0) => {
|
|
103
|
+
const $ = c(7);
|
|
104
|
+
const { messageId, components } = t0;
|
|
105
|
+
let t1;
|
|
106
|
+
if ($[0] !== messageId) {
|
|
107
|
+
t1 = (s) => hasMessageId(s.thread.messages, messageId);
|
|
108
|
+
$[0] = messageId;
|
|
109
|
+
$[1] = t1;
|
|
110
|
+
} else t1 = $[1];
|
|
111
|
+
if (!useAuiState(t1)) return null;
|
|
112
|
+
let t2;
|
|
113
|
+
if ($[2] !== components) {
|
|
114
|
+
t2 = /* @__PURE__ */ jsx(ThreadMessageComponent, { components });
|
|
115
|
+
$[2] = components;
|
|
116
|
+
$[3] = t2;
|
|
117
|
+
} else t2 = $[3];
|
|
118
|
+
let t3;
|
|
119
|
+
if ($[4] !== messageId || $[5] !== t2) {
|
|
120
|
+
t3 = /* @__PURE__ */ jsx(MessageByIdProvider, {
|
|
121
|
+
id: messageId,
|
|
122
|
+
children: t2
|
|
123
|
+
});
|
|
124
|
+
$[4] = messageId;
|
|
125
|
+
$[5] = t2;
|
|
126
|
+
$[6] = t3;
|
|
127
|
+
} else t3 = $[6];
|
|
128
|
+
return t3;
|
|
129
|
+
}, (prev, next) => prev.messageId === next.messageId && isComponentsSame(prev.components, next.components));
|
|
130
|
+
ThreadPrimitiveUnstable_MessageById.displayName = "ThreadPrimitive.Unstable_MessageById";
|
|
69
131
|
const ThreadPrimitiveMessagesInner = ({ children }) => {
|
|
70
132
|
const messagesLength = useAuiState((s) => s.thread.messages.length);
|
|
71
133
|
return useMemo(() => {
|
|
@@ -126,6 +188,6 @@ function _temp2(s_0) {
|
|
|
126
188
|
return s_0.message.composer.isEditing;
|
|
127
189
|
}
|
|
128
190
|
//#endregion
|
|
129
|
-
export { ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveMessagesImpl };
|
|
191
|
+
export { ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveMessagesImpl, ThreadPrimitiveUnstable_MessageById };
|
|
130
192
|
|
|
131
193
|
//# sourceMappingURL=ThreadMessages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadMessages.js","names":["ComponentType","FC","ReactNode","memo","useMemo","RenderChildrenWithAccessor","useAuiState","MessageByIndexProvider","MessageState","MessagesComponentConfig","Message","EditComposer","UserEditComposer","AssistantEditComposer","SystemEditComposer","UserMessage","AssistantMessage","SystemMessage","ThreadPrimitiveMessages","Props","components","children","value","message","isComponentsSame","prev","next","DEFAULT_SYSTEM_MESSAGE","getComponent","role","isEditing","_exhaustiveCheck","Error","ThreadMessageComponentProps","ThreadMessageComponent","t0","$","_c","_temp","_temp2","t1","Component","t2","ThreadPrimitiveMessageByIndex","index","displayName","ThreadPrimitiveMessagesInner","messagesLength","s","thread","messages","length","Array","from","_","aui","getState","getItem","ThreadPrimitiveMessagesImpl","s_0","composer"],"sources":["../../../../src/react/primitives/thread/ThreadMessages.tsx"],"sourcesContent":["import {\n type ComponentType,\n type FC,\n type ReactNode,\n memo,\n useMemo,\n} from \"react\";\nimport { RenderChildrenWithAccessor, useAuiState } from \"@assistant-ui/store\";\nimport { MessageByIndexProvider } from \"../../providers/MessageByIndexProvider\";\nimport type { MessageState } from \"../../../store\";\n\ntype MessagesComponentConfig =\n | {\n /** Component used to render all message types */\n Message: ComponentType;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages specifically */\n UserMessage?: ComponentType | undefined;\n /** Component used to render assistant messages specifically */\n AssistantMessage?: ComponentType | undefined;\n /** Component used to render system messages specifically */\n SystemMessage?: ComponentType | undefined;\n }\n | {\n /** Component used to render all message types (fallback) */\n Message?: ComponentType | undefined;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages */\n UserMessage: ComponentType;\n /** Component used to render assistant messages */\n AssistantMessage: ComponentType;\n /** Component used to render system messages */\n SystemMessage?: ComponentType | undefined;\n };\n\nexport namespace ThreadPrimitiveMessages {\n export type Props =\n | {\n /** @deprecated Use the children render function instead. */\n components: MessagesComponentConfig;\n children?: never;\n }\n | {\n /** Render function called for each message. Receives the message. */\n children: (value: { message: MessageState }) => ReactNode;\n components?: never;\n };\n}\n\nconst isComponentsSame = (\n prev: MessagesComponentConfig,\n next: MessagesComponentConfig,\n) => {\n return (\n prev.Message === next.Message &&\n prev.EditComposer === next.EditComposer &&\n prev.UserEditComposer === next.UserEditComposer &&\n prev.AssistantEditComposer === next.AssistantEditComposer &&\n prev.SystemEditComposer === next.SystemEditComposer &&\n prev.UserMessage === next.UserMessage &&\n prev.AssistantMessage === next.AssistantMessage &&\n prev.SystemMessage === next.SystemMessage\n );\n};\n\nconst DEFAULT_SYSTEM_MESSAGE = () => null;\n\nconst getComponent = (\n components: MessagesComponentConfig,\n role: MessageState[\"role\"],\n isEditing: boolean,\n) => {\n switch (role) {\n case \"user\":\n if (isEditing) {\n return (\n components.UserEditComposer ??\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return components.UserMessage ?? (components.Message as ComponentType);\n }\n case \"assistant\":\n if (isEditing) {\n return (\n components.AssistantEditComposer ??\n components.EditComposer ??\n components.AssistantMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.AssistantMessage ?? (components.Message as ComponentType)\n );\n }\n case \"system\":\n if (isEditing) {\n return (\n components.SystemEditComposer ??\n components.EditComposer ??\n components.SystemMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.SystemMessage ??\n (components.Message as ComponentType) ??\n DEFAULT_SYSTEM_MESSAGE\n );\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unknown message role: ${_exhaustiveCheck}`);\n }\n }\n};\n\ntype ThreadMessageComponentProps = {\n components: MessagesComponentConfig;\n};\n\nconst ThreadMessageComponent: FC<ThreadMessageComponentProps> = ({\n components,\n}) => {\n const role = useAuiState((s) => s.message.role);\n const isEditing = useAuiState((s) => s.message.composer.isEditing);\n const Component = getComponent(components, role, isEditing);\n\n return <Component />;\n};\nexport namespace ThreadPrimitiveMessageByIndex {\n export type Props = {\n index: number;\n components: MessagesComponentConfig;\n };\n}\n\n/**\n * Renders a single message at the specified index in the current thread.\n */\nexport const ThreadPrimitiveMessageByIndex: FC<ThreadPrimitiveMessageByIndex.Props> =\n memo(\n ({ index, components }) => {\n return (\n <MessageByIndexProvider index={index}>\n <ThreadMessageComponent components={components} />\n </MessageByIndexProvider>\n );\n },\n (prev, next) =>\n prev.index === next.index &&\n isComponentsSame(prev.components, next.components),\n );\n\nThreadPrimitiveMessageByIndex.displayName = \"ThreadPrimitive.MessageByIndex\";\n\nconst ThreadPrimitiveMessagesInner: FC<{\n children: (value: { message: MessageState }) => ReactNode;\n}> = ({ children }) => {\n const messagesLength = useAuiState((s) => s.thread.messages.length);\n\n return useMemo(() => {\n if (messagesLength === 0) return null;\n return Array.from({ length: messagesLength }, (_, index) => (\n <MessageByIndexProvider key={index} index={index}>\n <RenderChildrenWithAccessor\n getItemState={(aui) => aui.thread().message({ index }).getState()}\n >\n {(getItem) =>\n children({\n get message() {\n return getItem();\n },\n })\n }\n </RenderChildrenWithAccessor>\n </MessageByIndexProvider>\n ));\n }, [messagesLength, children]);\n};\n\n/**\n * Renders all messages in the current thread.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Messages>\n * {({ message }) => {\n * if (message.role === \"user\") return <MyUserMessage />;\n * return <MyAssistantMessage />;\n * }}\n * </ThreadPrimitive.Messages>\n * ```\n */\nexport const ThreadPrimitiveMessagesImpl: FC<ThreadPrimitiveMessages.Props> = ({\n components,\n children,\n}) => {\n if (components) {\n return (\n <ThreadPrimitiveMessagesInner>\n {() => <ThreadMessageComponent components={components} />}\n </ThreadPrimitiveMessagesInner>\n );\n }\n return (\n <ThreadPrimitiveMessagesInner>{children}</ThreadPrimitiveMessagesInner>\n );\n};\n\nThreadPrimitiveMessagesImpl.displayName = \"ThreadPrimitive.Messages\";\n\nexport const ThreadPrimitiveMessages = memo(\n ThreadPrimitiveMessagesImpl,\n (prev, next) => {\n if (prev.children || next.children) {\n return prev.children === next.children;\n }\n return isComponentsSame(prev.components!, next.components!);\n },\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThreadMessages.js","names":["ComponentType","FC","ReactNode","memo","useMemo","RenderChildrenWithAccessor","useAuiState","MessageByIndexProvider","MessageByIdProvider","MessageState","MessagesComponentConfig","Message","EditComposer","UserEditComposer","AssistantEditComposer","SystemEditComposer","UserMessage","AssistantMessage","SystemMessage","ThreadPrimitiveMessages","Props","components","children","value","message","isComponentsSame","prev","next","DEFAULT_SYSTEM_MESSAGE","messageIdSetCache","WeakMap","ReadonlySet","hasMessageId","messages","messageId","ids","get","Set","map","m","id","set","has","getComponent","role","isEditing","_exhaustiveCheck","Error","ThreadMessageComponentProps","ThreadMessageComponent","t0","$","_c","_temp","_temp2","t1","Component","t2","ThreadPrimitiveMessageByIndex","index","displayName","ThreadPrimitiveUnstable_MessageById","s","thread","exists","t3","ThreadPrimitiveMessagesInner","messagesLength","length","Array","from","_","aui","getState","getItem","ThreadPrimitiveMessagesImpl","s_0","composer"],"sources":["../../../../src/react/primitives/thread/ThreadMessages.tsx"],"sourcesContent":["import {\n type ComponentType,\n type FC,\n type ReactNode,\n memo,\n useMemo,\n} from \"react\";\nimport { RenderChildrenWithAccessor, useAuiState } from \"@assistant-ui/store\";\nimport { MessageByIndexProvider } from \"../../providers/MessageByIndexProvider\";\nimport { MessageByIdProvider } from \"../../providers/MessageByIdProvider\";\nimport type { MessageState } from \"../../../store\";\n\ntype MessagesComponentConfig =\n | {\n /** Component used to render all message types */\n Message: ComponentType;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages specifically */\n UserMessage?: ComponentType | undefined;\n /** Component used to render assistant messages specifically */\n AssistantMessage?: ComponentType | undefined;\n /** Component used to render system messages specifically */\n SystemMessage?: ComponentType | undefined;\n }\n | {\n /** Component used to render all message types (fallback) */\n Message?: ComponentType | undefined;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages */\n UserMessage: ComponentType;\n /** Component used to render assistant messages */\n AssistantMessage: ComponentType;\n /** Component used to render system messages */\n SystemMessage?: ComponentType | undefined;\n };\n\nexport namespace ThreadPrimitiveMessages {\n export type Props =\n | {\n /** @deprecated Use the children render function instead. */\n components: MessagesComponentConfig;\n children?: never;\n }\n | {\n /** Render function called for each message. Receives the message. */\n children: (value: { message: MessageState }) => ReactNode;\n components?: never;\n };\n}\n\nconst isComponentsSame = (\n prev: MessagesComponentConfig,\n next: MessagesComponentConfig,\n) => {\n return (\n prev.Message === next.Message &&\n prev.EditComposer === next.EditComposer &&\n prev.UserEditComposer === next.UserEditComposer &&\n prev.AssistantEditComposer === next.AssistantEditComposer &&\n prev.SystemEditComposer === next.SystemEditComposer &&\n prev.UserMessage === next.UserMessage &&\n prev.AssistantMessage === next.AssistantMessage &&\n prev.SystemMessage === next.SystemMessage\n );\n};\n\nconst DEFAULT_SYSTEM_MESSAGE = () => null;\n\nconst messageIdSetCache = new WeakMap<\n readonly MessageState[],\n ReadonlySet<string>\n>();\n\nconst hasMessageId = (messages: readonly MessageState[], messageId: string) => {\n let ids = messageIdSetCache.get(messages);\n if (!ids) {\n ids = new Set(messages.map((m) => m.id));\n messageIdSetCache.set(messages, ids);\n }\n return ids.has(messageId);\n};\n\nconst getComponent = (\n components: MessagesComponentConfig,\n role: MessageState[\"role\"],\n isEditing: boolean,\n) => {\n switch (role) {\n case \"user\":\n if (isEditing) {\n return (\n components.UserEditComposer ??\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return components.UserMessage ?? (components.Message as ComponentType);\n }\n case \"assistant\":\n if (isEditing) {\n return (\n components.AssistantEditComposer ??\n components.EditComposer ??\n components.AssistantMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.AssistantMessage ?? (components.Message as ComponentType)\n );\n }\n case \"system\":\n if (isEditing) {\n return (\n components.SystemEditComposer ??\n components.EditComposer ??\n components.SystemMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.SystemMessage ??\n (components.Message as ComponentType) ??\n DEFAULT_SYSTEM_MESSAGE\n );\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unknown message role: ${_exhaustiveCheck}`);\n }\n }\n};\n\ntype ThreadMessageComponentProps = {\n components: MessagesComponentConfig;\n};\n\nconst ThreadMessageComponent: FC<ThreadMessageComponentProps> = ({\n components,\n}) => {\n const role = useAuiState((s) => s.message.role);\n const isEditing = useAuiState((s) => s.message.composer.isEditing);\n const Component = getComponent(components, role, isEditing);\n\n return <Component />;\n};\nexport namespace ThreadPrimitiveMessageByIndex {\n export type Props = {\n index: number;\n components: MessagesComponentConfig;\n };\n}\n\n/**\n * Renders a single message at the specified index in the current thread.\n */\nexport const ThreadPrimitiveMessageByIndex: FC<ThreadPrimitiveMessageByIndex.Props> =\n memo(\n ({ index, components }) => {\n return (\n <MessageByIndexProvider index={index}>\n <ThreadMessageComponent components={components} />\n </MessageByIndexProvider>\n );\n },\n (prev, next) =>\n prev.index === next.index &&\n isComponentsSame(prev.components, next.components),\n );\n\nThreadPrimitiveMessageByIndex.displayName = \"ThreadPrimitive.MessageByIndex\";\n\nexport namespace ThreadPrimitiveUnstable_MessageById {\n export type Props = {\n messageId: string;\n components: MessagesComponentConfig;\n };\n}\n\n/**\n * Renders the message with the given id in the current thread.\n *\n * Unlike {@link ThreadPrimitiveMessageByIndex}, this keys off the message id,\n * so it stays attached to the same message across reordering and windowing -\n * the shape needed to drive a virtualized or custom message list together with\n * `unstable_useThreadMessageIds`. A missing or removed id renders `null` rather\n * than throwing.\n *\n * @deprecated Unstable / Experimental - may change in any release.\n *\n * @example\n * ```tsx\n * const messageIds = unstable_useThreadMessageIds();\n * return messageIds.map((messageId) => (\n * <ThreadPrimitive.Unstable_MessageById\n * key={messageId}\n * messageId={messageId}\n * components={MESSAGE_COMPONENTS}\n * />\n * ));\n * ```\n */\nexport const ThreadPrimitiveUnstable_MessageById: FC<ThreadPrimitiveUnstable_MessageById.Props> =\n memo(\n ({ messageId, components }) => {\n const exists = useAuiState((s) =>\n hasMessageId(s.thread.messages, messageId),\n );\n if (!exists) return null;\n\n return (\n <MessageByIdProvider id={messageId}>\n <ThreadMessageComponent components={components} />\n </MessageByIdProvider>\n );\n },\n (prev, next) =>\n prev.messageId === next.messageId &&\n isComponentsSame(prev.components, next.components),\n );\n\nThreadPrimitiveUnstable_MessageById.displayName =\n \"ThreadPrimitive.Unstable_MessageById\";\n\nconst ThreadPrimitiveMessagesInner: FC<{\n children: (value: { message: MessageState }) => ReactNode;\n}> = ({ children }) => {\n const messagesLength = useAuiState((s) => s.thread.messages.length);\n\n return useMemo(() => {\n if (messagesLength === 0) return null;\n return Array.from({ length: messagesLength }, (_, index) => (\n <MessageByIndexProvider key={index} index={index}>\n <RenderChildrenWithAccessor\n getItemState={(aui) => aui.thread().message({ index }).getState()}\n >\n {(getItem) =>\n children({\n get message() {\n return getItem();\n },\n })\n }\n </RenderChildrenWithAccessor>\n </MessageByIndexProvider>\n ));\n }, [messagesLength, children]);\n};\n\n/**\n * Renders all messages in the current thread.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Messages>\n * {({ message }) => {\n * if (message.role === \"user\") return <MyUserMessage />;\n * return <MyAssistantMessage />;\n * }}\n * </ThreadPrimitive.Messages>\n * ```\n */\nexport const ThreadPrimitiveMessagesImpl: FC<ThreadPrimitiveMessages.Props> = ({\n components,\n children,\n}) => {\n if (components) {\n return (\n <ThreadPrimitiveMessagesInner>\n {() => <ThreadMessageComponent components={components} />}\n </ThreadPrimitiveMessagesInner>\n );\n }\n return (\n <ThreadPrimitiveMessagesInner>{children}</ThreadPrimitiveMessagesInner>\n );\n};\n\nThreadPrimitiveMessagesImpl.displayName = \"ThreadPrimitive.Messages\";\n\nexport const ThreadPrimitiveMessages = memo(\n ThreadPrimitiveMessagesImpl,\n (prev, next) => {\n if (prev.children || next.children) {\n return prev.children === next.children;\n }\n return isComponentsSame(prev.components!, next.components!);\n },\n);\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SuggestionByIndexProvider } from "../../providers/SuggestionByIndexProvider.js";
|
|
2
|
-
import { memo, useMemo } from "@assistant-ui/tap/react-shim";
|
|
3
2
|
import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
|
|
3
|
+
import { memo, useMemo } from "@assistant-ui/tap/react-shim";
|
|
4
4
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
//#region src/react/primitives/thread/ThreadSuggestions.tsx
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ThreadListItemByIndexProvider } from "../../providers/ThreadListItemByIndexProvider.js";
|
|
2
|
-
import { memo, useMemo } from "@assistant-ui/tap/react-shim";
|
|
3
2
|
import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
|
|
3
|
+
import { memo, useMemo } from "@assistant-ui/tap/react-shim";
|
|
4
4
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
//#region src/react/primitives/threadList/ThreadListItems.tsx
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FC, PropsWithChildren } from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/react/providers/MessageByIdProvider.d.ts
|
|
4
|
+
declare const MessageByIdProvider: FC<PropsWithChildren<{
|
|
5
|
+
id: string;
|
|
6
|
+
}>>;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { MessageByIdProvider };
|
|
9
|
+
//# sourceMappingURL=MessageByIdProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageByIdProvider.d.ts","names":[],"sources":["../../../src/react/providers/MessageByIdProvider.tsx"],"mappings":";;;cAGa,mBAAA,EAAqB,EAAE,CAClC,iBAAA;EACE,EAAA;AAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { AuiProvider, Derived, useAui } from "@assistant-ui/store";
|
|
2
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/react/providers/MessageByIdProvider.tsx
|
|
5
|
+
const MessageByIdProvider = (t0) => {
|
|
6
|
+
const $ = c(10);
|
|
7
|
+
const { id, children } = t0;
|
|
8
|
+
let t1;
|
|
9
|
+
if ($[0] !== id) {
|
|
10
|
+
t1 = Derived({
|
|
11
|
+
source: "thread",
|
|
12
|
+
query: {
|
|
13
|
+
type: "id",
|
|
14
|
+
id
|
|
15
|
+
},
|
|
16
|
+
get: (aui) => aui.thread().message({ id })
|
|
17
|
+
});
|
|
18
|
+
$[0] = id;
|
|
19
|
+
$[1] = t1;
|
|
20
|
+
} else t1 = $[1];
|
|
21
|
+
let t2;
|
|
22
|
+
if ($[2] !== id) {
|
|
23
|
+
t2 = Derived({
|
|
24
|
+
source: "message",
|
|
25
|
+
query: {},
|
|
26
|
+
get: (aui_0) => aui_0.thread().message({ id }).composer()
|
|
27
|
+
});
|
|
28
|
+
$[2] = id;
|
|
29
|
+
$[3] = t2;
|
|
30
|
+
} else t2 = $[3];
|
|
31
|
+
let t3;
|
|
32
|
+
if ($[4] !== t1 || $[5] !== t2) {
|
|
33
|
+
t3 = {
|
|
34
|
+
message: t1,
|
|
35
|
+
composer: t2
|
|
36
|
+
};
|
|
37
|
+
$[4] = t1;
|
|
38
|
+
$[5] = t2;
|
|
39
|
+
$[6] = t3;
|
|
40
|
+
} else t3 = $[6];
|
|
41
|
+
const aui_1 = useAui(t3);
|
|
42
|
+
let t4;
|
|
43
|
+
if ($[7] !== aui_1 || $[8] !== children) {
|
|
44
|
+
t4 = /* @__PURE__ */ jsx(AuiProvider, {
|
|
45
|
+
value: aui_1,
|
|
46
|
+
children
|
|
47
|
+
});
|
|
48
|
+
$[7] = aui_1;
|
|
49
|
+
$[8] = children;
|
|
50
|
+
$[9] = t4;
|
|
51
|
+
} else t4 = $[9];
|
|
52
|
+
return t4;
|
|
53
|
+
};
|
|
54
|
+
//#endregion
|
|
55
|
+
export { MessageByIdProvider };
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=MessageByIdProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageByIdProvider.js","names":["FC","PropsWithChildren","useAui","AuiProvider","Derived","MessageByIdProvider","id","t0","$","_c","children","t1","source","query","type","get","aui","thread","message","t2","aui_0","composer","t3","aui_1","t4"],"sources":["../../../src/react/providers/MessageByIdProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from \"react\";\nimport { useAui, AuiProvider, Derived } from \"@assistant-ui/store\";\n\nexport const MessageByIdProvider: FC<\n PropsWithChildren<{\n id: string;\n }>\n> = ({ id, children }) => {\n const aui = useAui({\n message: Derived({\n source: \"thread\",\n query: { type: \"id\", id },\n get: (aui) => aui.thread().message({ id }),\n }),\n composer: Derived({\n source: \"message\",\n query: {},\n get: (aui) => aui.thread().message({ id }).composer(),\n }),\n });\n\n return <AuiProvider value={aui}>{children}</AuiProvider>;\n};\n"],"mappings":";;;;AAGA,MAAaK,uBAITE,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAH,IAAAI,aAAAH;CAAgB,IAAAI;CAAA,IAAAH,EAAA,OAAAF,IAAA;EAERK,KAAAP,QAAQ;GAAAQ,QACP;GAAQC,OACT;IAAAC,MAAQ;IAAIR;GAAK;GAACS,MACpBC,QAASA,IAAGC,OAAQ,CAAC,CAAAC,QAAS,EAAAZ,GAAK,CAAC;EAC3C,CAAC;EAACE,EAAA,KAAAF;EAAAE,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAAA,IAAAW;CAAA,IAAAX,EAAA,OAAAF,IAAA;EACQa,KAAAf,QAAQ;GAAAQ,QACR;GAASC,OACV,CAAC;GAACE,MACJK,UAASJ,MAAGC,OAAQ,CAAC,CAAAC,QAAS,EAAAZ,GAAK,CAAC,CAAC,CAAAe,SAAU;EACtD,CAAC;EAACb,EAAA,KAAAF;EAAAE,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAc;CAAA,IAAAd,EAAA,OAAAG,MAAAH,EAAA,OAAAW,IAAA;EAVeG,KAAA;GAAAJ,SACRP;GAIPU,UACQF;EAKZ;EAACX,EAAA,KAAAG;EAAAH,EAAA,KAAAW;EAAAX,EAAA,KAAAc;CAAA,OAAAA,KAAAd,EAAA;CAXD,MAAAe,QAAYrB,OAAOoB,EAWlB;CAAE,IAAAE;CAAA,IAAAhB,EAAA,OAAAe,SAAAf,EAAA,OAAAE,UAAA;EAEIc,KAAA,oBAAC,aAAD;GAAoBR,OAAAA;GAAMN;EAAd,CAAA;EAAqCF,EAAA,KAAAe;EAAAf,EAAA,KAAAE;EAAAF,EAAA,KAAAgB;CAAA,OAAAA,KAAAhB,EAAA;CAAA,OAAjDgB;AAAiD"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ThreadRuntimeImpl } from "../../runtime/api/thread-runtime.js";
|
|
2
2
|
import { ReadonlyThreadRuntimeCore } from "../../runtimes/readonly/ReadonlyThreadRuntimeCore.js";
|
|
3
3
|
import { ThreadClient } from "../../store/runtime-clients/thread-runtime-client.js";
|
|
4
|
-
import { useEffect, useState } from "@assistant-ui/tap/react-shim";
|
|
5
4
|
import { AuiProvider, Derived, useAui } from "@assistant-ui/store";
|
|
5
|
+
import { useEffect, useState } from "@assistant-ui/tap/react-shim";
|
|
6
6
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
8
8
|
//#region src/react/providers/ReadonlyThreadProvider.tsx
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { BaseSubscribable } from "../../subscribable/subscribable.js";
|
|
2
2
|
import { ThreadListRuntimeImpl } from "../../runtime/api/thread-list-runtime.js";
|
|
3
3
|
import { ThreadListItemRuntimeProvider } from "../providers/ThreadListItemRuntimeProvider.js";
|
|
4
|
-
import { Fragment, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef } from "@assistant-ui/tap/react-shim";
|
|
5
4
|
import { useAui } from "@assistant-ui/store";
|
|
5
|
+
import { Fragment, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef } from "@assistant-ui/tap/react-shim";
|
|
6
6
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
7
7
|
import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
|
|
8
8
|
import { create } from "zustand";
|
|
@@ -38,6 +38,9 @@ declare class RemoteThreadListThreadListRuntimeCore extends BaseSubscribable imp
|
|
|
38
38
|
get archivedThreadIds(): readonly string[];
|
|
39
39
|
get newThreadId(): string | undefined;
|
|
40
40
|
get mainThreadId(): string;
|
|
41
|
+
private get _mainThreadRemoteId();
|
|
42
|
+
private _lastNotifiedThreadId;
|
|
43
|
+
private _notifyThreadIdChange;
|
|
41
44
|
getMainThreadRuntimeCore(): Readonly<{
|
|
42
45
|
getMessageById: (messageId: string) => {
|
|
43
46
|
parentId: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteThreadListThreadListRuntimeCore.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"mappings":";;;;;;;;;;;;;;;cAwBa,qCAAA,SACH,gBAAA,YACG,qBAAA;EAAA,QAEH,QAAA;EAAA,iBACS,YAAA;EAAA,QAET,mBAAA;EAAA,QACA,gBAAA;EAAA,QACA,eAAA;EAAA,QAEA,aAAA;EAAA,iBACS,MAAA;EAAA,IAWN,WAAA,IAAW,QAAA,CAAA,MAAA,CAtBtB,iBAAA,EAsBsB,gBAAA;EAIf,qBAAA,IAAqB,OAAA;EAsDrB,QAAA,IAAY,OAAA;EAAA,iBAmDF,eAAA;cAGf,OAAA,EAAS,uBAAA,EACT,eAAA,EAAiB,oBAAA;EAAA,
|
|
1
|
+
{"version":3,"file":"RemoteThreadListThreadListRuntimeCore.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"mappings":";;;;;;;;;;;;;;;cAwBa,qCAAA,SACH,gBAAA,YACG,qBAAA;EAAA,QAEH,QAAA;EAAA,iBACS,YAAA;EAAA,QAET,mBAAA;EAAA,QACA,gBAAA;EAAA,QACA,eAAA;EAAA,QAEA,aAAA;EAAA,iBACS,MAAA;EAAA,IAWN,WAAA,IAAW,QAAA,CAAA,MAAA,CAtBtB,iBAAA,EAsBsB,gBAAA;EAIf,qBAAA,IAAqB,OAAA;EAsDrB,QAAA,IAAY,OAAA;EAAA,iBAmDF,eAAA;cAGf,OAAA,EAAS,uBAAA,EACT,eAAA,EAAiB,oBAAA;EAAA,QAoBX,oBAAA;EAAA,QACA,WAAA;EAED,qBAAA,CAAsB,OAAA,EAAS,uBAAA;EA0B/B,eAAA;EAUA,MAAA,IAAM,OAAA;EAAA,IAWF,SAAA;EAAA,IAIA,aAAA;EAAA,IAIA,OAAA;EAAA,IAIA,SAAA;EAAA,IAIA,iBAAA;EAAA,IAIA,WAAA;EAAA,IAIA,YAAA;EAAA,YAMC,mBAAA;EAAA,QAKJ,qBAAA;EAAA,QAEA,qBAAA;EAOD,wBAAA,IAAwB,QAAA;;;eAvDlB,aAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DN,oBAAA,CAAqB,kBAAA,WAA0B,QAAA;;;eANvB,aAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAexB,WAAA,CAAY,kBAAA,WAA0B,gBAAA;EAIhC,cAAA,CACX,kBAAA,UACA,OAAA;IAAY,SAAA;EAAA,IACX,OAAA;EA+EU,iBAAA,IAAqB,OAAA;EAyC3B,UAAA,GAAoB,QAAA,aAAgB,OAAA,CAzCF,8BAAA;EA8FlC,aAAA,GAAuB,QAAA,aAAgB,OAAA;EAkCvC,MAAA,CAAO,kBAAA,UAA4B,QAAA,WAAmB,OAAA;EA4BtD,YAAA,CACL,kBAAA,UACA,MAAA,EAAQ,MAAA,gCACP,OAAA;EAAA,QAwCW,sBAAA;EASD,OAAA,CAAQ,kBAAA,WAA0B,OAAA;EAmBxC,SAAA,CAAU,kBAAA,WAA6B,OAAA;EAqBjC,MAAA,CAAO,kBAAA,WAA0B,OAAA;EAoBjC,MAAA,CAAO,kBAAA,WAA6B,OAAA;EAAA,QAUzC,WAAA;EAED,0BAAA,EAA4B,EAAA;AAAA"}
|
|
@@ -121,7 +121,10 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
121
121
|
constructor(options, contextProvider) {
|
|
122
122
|
super();
|
|
123
123
|
this.contextProvider = contextProvider;
|
|
124
|
-
this._state.subscribe(() =>
|
|
124
|
+
this._state.subscribe(() => {
|
|
125
|
+
this._notifySubscribers();
|
|
126
|
+
this._notifyThreadIdChange();
|
|
127
|
+
});
|
|
125
128
|
this._hookManager = new RemoteThreadListHookInstanceManager(options.runtimeHook, this);
|
|
126
129
|
this.useProvider = create(() => ({ Provider: options.adapter.unstable_Provider ?? Fragment }));
|
|
127
130
|
this.__internal_setOptions(options);
|
|
@@ -185,6 +188,17 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
185
188
|
get mainThreadId() {
|
|
186
189
|
return this._mainThreadId;
|
|
187
190
|
}
|
|
191
|
+
get _mainThreadRemoteId() {
|
|
192
|
+
if (this._mainThreadId === void 0) return void 0;
|
|
193
|
+
return getThreadData(this._state.value, this._mainThreadId)?.remoteId;
|
|
194
|
+
}
|
|
195
|
+
_lastNotifiedThreadId = void 0;
|
|
196
|
+
_notifyThreadIdChange() {
|
|
197
|
+
const threadId = this._mainThreadRemoteId;
|
|
198
|
+
if (this._lastNotifiedThreadId === threadId) return;
|
|
199
|
+
this._lastNotifiedThreadId = threadId;
|
|
200
|
+
this._options.onThreadIdChange?.(threadId);
|
|
201
|
+
}
|
|
188
202
|
getMainThreadRuntimeCore() {
|
|
189
203
|
const result = this._hookManager.getThreadRuntimeCore(this._mainThreadId);
|
|
190
204
|
if (!result) return EMPTY_THREAD_CORE;
|
|
@@ -247,6 +261,7 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
247
261
|
if (data.status === "archived" && options?.unarchive !== false) await this.unarchive(data.id);
|
|
248
262
|
this._mainThreadId = data.id;
|
|
249
263
|
this._notifySubscribers();
|
|
264
|
+
this._notifyThreadIdChange();
|
|
250
265
|
}
|
|
251
266
|
async switchToNewThread() {
|
|
252
267
|
while (this._state.baseValue.newThreadId !== void 0 && this._state.value.newThreadId === void 0) await this._state.waitForUpdate();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteThreadListThreadListRuntimeCore.js","names":["ThreadListRuntimeCore","generateId","BaseSubscribable","OptimisticState","EMPTY_THREAD_CORE","RemoteThreadData","RemoteThreadState","classifyThreads","createThreadMappingId","getThreadData","normalizeCursor","updateStatusReducer","RemoteThreadListOptions","RemoteThreadListHookInstanceManager","FC","Fragment","useEffect","useId","create","AssistantMessageStream","ModelContextProvider","RuntimeAdapterProvider","RemoteThreadListThreadListRuntimeCore","_options","_hookManager","_loadThreadsPromise","Promise","_loadMorePromise","_loadGeneration","_mainThreadId","_state","isLoading","isLoadingMore","cursor","undefined","newThreadId","threadIds","archivedThreadIds","threadIdMap","threadData","threadItems","value","getLoadThreadsPromise","generation","optimisticUpdate","execute","adapter","list","loading","state","then","l","fresh","threads","nextCursor","catch","error","console","update","baseValue","loadMore","initialState","resolve","dedup","after","appended","contextProvider","constructor","options","subscribe","_notifySubscribers","runtimeHook","useProvider","Provider","unstable_Provider","__internal_setOptions","switchToNewThread","_initialThreadLoaded","adapterChanged","getState","setState","setRuntimeHook","__internal_load","startThreadId","threadId","initialThreadId","switchToThread","reload","hasMore","mainThreadId","getMainThreadRuntimeCore","result","getThreadRuntimeCore","threadIdOrRemoteId","data","getItemById","Error","id","unarchive","remoteMetadata","fetch","mappingId","remoteId","newThreadData","initializeTask","externalId","status","title","lastMessageAt","custom","newThreadIdMap","threadIdsWithoutRemote","filter","archivedThreadIdsWithoutRemote","newThreadIds","newArchivedThreadIds","task","startThreadRuntime","waitForUpdate","initialize","optimistic","generateTitle","runtimeCore","messages","stream","messageStream","fromAssistantStream","newTitle","parts","c","type","text","currentData","rename","updateCustom","Record","_ensureThreadIsNotMain","archive","delete","stopThreadRuntime","detach","useBoundIds","__internal_RenderComponent","s","i","boundIds","adapters","modelContext","length"],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"sourcesContent":["import type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport { generateId } from \"../../utils/id\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport { EMPTY_THREAD_CORE } from \"../../runtimes/remote-thread-list/empty-thread-core\";\nimport type {\n RemoteThreadData,\n RemoteThreadState,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport {\n classifyThreads,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n updateStatusReducer,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type { RemoteThreadListOptions } from \"../../runtimes/remote-thread-list/types\";\nimport { RemoteThreadListHookInstanceManager } from \"./RemoteThreadListHookInstanceManager\";\nimport { type FC, Fragment, useEffect, useId } from \"react\";\nimport { create } from \"zustand\";\nimport { AssistantMessageStream } from \"assistant-stream\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { RuntimeAdapterProvider } from \"./RuntimeAdapterProvider\";\n\nexport class RemoteThreadListThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _options!: RemoteThreadListOptions;\n private readonly _hookManager: RemoteThreadListHookInstanceManager;\n\n private _loadThreadsPromise: Promise<void> | undefined;\n private _loadMorePromise: Promise<void> | undefined;\n private _loadGeneration = 0;\n\n private _mainThreadId!: string;\n private readonly _state = new OptimisticState<RemoteThreadState>({\n isLoading: true,\n isLoadingMore: false,\n cursor: undefined,\n newThreadId: undefined,\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: {},\n threadData: {},\n });\n\n public get threadItems() {\n return this._state.value.threadData;\n }\n\n public getLoadThreadsPromise() {\n // TODO this needs to be cached in case this promise is loaded during suspense\n if (!this._loadThreadsPromise) {\n const generation = this._loadGeneration;\n this._loadThreadsPromise = this._state\n .optimisticUpdate({\n execute: () => this._options.adapter.list(),\n loading: (state) => {\n return {\n ...state,\n isLoading: true,\n };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n const fresh = classifyThreads(l.threads, {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: {},\n threadData: {},\n });\n\n return {\n ...state,\n isLoading: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: fresh.threadIds,\n archivedThreadIds: fresh.archivedThreadIds,\n threadIdMap: {\n ...state.threadIdMap,\n ...fresh.threadIdMap,\n },\n threadData: {\n ...state.threadData,\n ...fresh.threadData,\n },\n };\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n this._loadThreadsPromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n isLoading: false,\n });\n })\n .then(() => {});\n }\n\n return this._loadThreadsPromise;\n }\n\n public loadMore(): Promise<void> {\n if (this._loadMorePromise) return this._loadMorePromise;\n\n const initialState = this._state.value;\n if (initialState.cursor === undefined || initialState.isLoading) {\n return Promise.resolve();\n }\n\n const generation = this._loadGeneration;\n const adapter = this._options.adapter;\n const cursor = initialState.cursor;\n\n const dedup = this._state\n .optimisticUpdate({\n execute: () => adapter.list({ after: cursor }),\n loading: (state) => ({ ...state, isLoadingMore: true }),\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n if (adapter !== this._options.adapter) return state;\n\n const appended = classifyThreads(l.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: appended.threadIds,\n archivedThreadIds: appended.archivedThreadIds,\n threadIdMap: appended.threadIdMap,\n threadData: appended.threadData,\n };\n },\n })\n .catch((error: unknown) => {\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (this._loadMorePromise === dedup) {\n this._loadMorePromise = undefined;\n }\n });\n\n this._loadMorePromise = dedup;\n return dedup;\n }\n\n private readonly contextProvider: ModelContextProvider;\n\n constructor(\n options: RemoteThreadListOptions,\n contextProvider: ModelContextProvider,\n ) {\n super();\n this.contextProvider = contextProvider;\n\n this._state.subscribe(() => this._notifySubscribers());\n this._hookManager = new RemoteThreadListHookInstanceManager(\n options.runtimeHook,\n this,\n );\n this.useProvider = create(() => ({\n Provider: options.adapter.unstable_Provider ?? Fragment,\n }));\n this.__internal_setOptions(options);\n this.switchToNewThread();\n }\n\n private _initialThreadLoaded = false;\n private useProvider;\n\n public __internal_setOptions(options: RemoteThreadListOptions) {\n if (this._options === options) return;\n\n const adapterChanged =\n this._options !== undefined && this._options.adapter !== options.adapter;\n\n this._options = options;\n\n const Provider = options.adapter.unstable_Provider ?? Fragment;\n if (Provider !== this.useProvider.getState().Provider) {\n this.useProvider.setState({ Provider }, true);\n }\n\n this._hookManager.setRuntimeHook(options.runtimeHook);\n\n if (adapterChanged) {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n }\n }\n\n public __internal_load() {\n this.getLoadThreadsPromise(); // begin loading on initial bind\n const startThreadId =\n this._options.threadId ?? this._options.initialThreadId;\n if (!this._initialThreadLoaded && startThreadId) {\n this._initialThreadLoaded = true;\n this.switchToThread(startThreadId).catch(() => {});\n }\n }\n\n public reload() {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n return this.getLoadThreadsPromise();\n }\n\n public get isLoading() {\n return this._state.value.isLoading;\n }\n\n public get isLoadingMore() {\n return this._state.value.isLoadingMore;\n }\n\n public get hasMore() {\n return this._state.value.cursor !== undefined;\n }\n\n public get threadIds() {\n return this._state.value.threadIds;\n }\n\n public get archivedThreadIds() {\n return this._state.value.archivedThreadIds;\n }\n\n public get newThreadId() {\n return this._state.value.newThreadId;\n }\n\n public get mainThreadId(): string {\n return this._mainThreadId;\n }\n\n public getMainThreadRuntimeCore() {\n const result = this._hookManager.getThreadRuntimeCore(this._mainThreadId);\n if (!result) return EMPTY_THREAD_CORE;\n return result;\n }\n\n public getThreadRuntimeCore(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n\n const result = this._hookManager.getThreadRuntimeCore(data.id);\n if (!result) throw new Error(\"Thread not found\");\n return result;\n }\n\n public getItemById(threadIdOrRemoteId: string) {\n return getThreadData(this._state.value, threadIdOrRemoteId);\n }\n\n public async switchToThread(\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n ): Promise<void> {\n let data = this.getItemById(threadIdOrRemoteId);\n\n if (!data) {\n const remoteMetadata =\n await this._options.adapter.fetch(threadIdOrRemoteId);\n const state = this._state.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n\n const newThreadData = {\n ...state.threadData,\n [mappingId]: {\n id: mappingId,\n initializeTask: Promise.resolve({\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n }),\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n status: remoteMetadata.status,\n title: remoteMetadata.title,\n lastMessageAt: remoteMetadata.lastMessageAt,\n custom: remoteMetadata.custom,\n } as RemoteThreadData,\n };\n\n const newThreadIdMap = {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n };\n\n // Filter both arrays first so a concurrent `list()` can't leave the id\n // duplicated or under the wrong status.\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n\n const newThreadIds =\n remoteMetadata.status === \"regular\"\n ? [...threadIdsWithoutRemote, remoteMetadata.remoteId]\n : threadIdsWithoutRemote;\n const newArchivedThreadIds =\n remoteMetadata.status === \"archived\"\n ? [...archivedThreadIdsWithoutRemote, remoteMetadata.remoteId]\n : archivedThreadIdsWithoutRemote;\n\n this._state.update({\n ...state,\n threadIds: newThreadIds,\n archivedThreadIds: newArchivedThreadIds,\n threadIdMap: newThreadIdMap,\n threadData: newThreadData,\n });\n\n data = this.getItemById(threadIdOrRemoteId);\n }\n\n if (!data) throw new Error(\"Thread not found\");\n if (this._mainThreadId === data.id) return;\n\n const task = this._hookManager.startThreadRuntime(data.id);\n if (this.mainThreadId !== undefined) {\n await task;\n } else {\n task.then(() => this._notifySubscribers());\n }\n\n if (data.status === \"archived\" && options?.unarchive !== false) {\n await this.unarchive(data.id);\n }\n this._mainThreadId = data.id;\n\n this._notifySubscribers();\n }\n\n public async switchToNewThread(): Promise<void> {\n // an initialization transaction is in progress, wait for it to settle\n while (\n this._state.baseValue.newThreadId !== undefined &&\n this._state.value.newThreadId === undefined\n ) {\n await this._state.waitForUpdate();\n }\n\n const state = this._state.value;\n let id: string | undefined = this._state.value.newThreadId;\n if (id === undefined) {\n do {\n id = `__LOCALID_${generateId()}`;\n } while (state.threadIdMap[id]);\n\n const mappingId = createThreadMappingId(id);\n this._state.update({\n ...state,\n newThreadId: id,\n threadIdMap: {\n ...state.threadIdMap,\n [id]: mappingId,\n },\n threadData: {\n ...state.threadData,\n [mappingId]: {\n status: \"new\",\n id,\n remoteId: undefined,\n externalId: undefined,\n title: undefined,\n custom: undefined,\n } satisfies RemoteThreadData,\n },\n });\n }\n\n return this.switchToThread(id);\n }\n\n public initialize = async (threadId: string) => {\n if (this._state.value.newThreadId !== threadId) {\n const data = this.getItemById(threadId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status === \"new\") throw new Error(\"Unexpected new state\");\n return data.initializeTask;\n }\n\n return this._state.optimisticUpdate({\n execute: () => {\n return this._options.adapter.initialize(threadId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, threadId, \"regular\");\n },\n loading: (state, task) => {\n const mappingId = createThreadMappingId(threadId);\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [mappingId]: {\n ...state.threadData[mappingId],\n initializeTask: task,\n },\n },\n };\n },\n then: (state, { remoteId, externalId }) => {\n const data = getThreadData(state, threadId);\n if (!data) return state;\n\n const mappingId = createThreadMappingId(threadId);\n return {\n ...state,\n threadIdMap: {\n ...state.threadIdMap,\n [remoteId]: mappingId,\n },\n threadData: {\n ...state.threadData,\n [mappingId]: {\n ...data,\n initializeTask: Promise.resolve({ remoteId, externalId }),\n remoteId,\n externalId,\n },\n },\n };\n },\n });\n };\n\n public generateTitle = async (threadId: string) => {\n const data = this.getItemById(threadId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status === \"new\") throw new Error(\"Thread is not yet initialized\");\n\n const { remoteId } = await data.initializeTask;\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(data.id);\n if (!runtimeCore) return; // thread is no longer running\n\n const messages = runtimeCore.messages;\n const stream = await this._options.adapter.generateTitle(\n remoteId,\n messages,\n );\n const messageStream = AssistantMessageStream.fromAssistantStream(stream);\n for await (const result of messageStream) {\n const newTitle = result.parts.filter((c) => c.type === \"text\")[0]?.text;\n const state = this._state.baseValue;\n const currentData = getThreadData(state, data.id);\n if (!currentData) continue;\n this._state.update({\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title: newTitle,\n },\n },\n });\n }\n };\n\n public rename(threadIdOrRemoteId: string, newTitle: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status === \"new\") throw new Error(\"Thread is not yet initialized\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return this._options.adapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n title: newTitle,\n },\n },\n };\n },\n });\n }\n\n public updateCustom(\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status === \"new\") throw new Error(\"Thread is not yet initialized\");\n\n if (!this._options.adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n const adapter = this._options.adapter;\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return adapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n custom,\n },\n },\n };\n },\n });\n }\n\n private async _ensureThreadIsNotMain(threadId: string) {\n if (threadId === this.newThreadId)\n throw new Error(\"Cannot ensure new thread is not main\");\n\n if (threadId === this._mainThreadId) {\n await this.switchToNewThread();\n }\n }\n\n public async archive(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status !== \"regular\")\n throw new Error(\"Thread is not yet initialized or already archived\");\n\n await this._ensureThreadIsNotMain(data.id);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return this._options.adapter.archive(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"archived\");\n },\n });\n }\n\n public unarchive(threadIdOrRemoteId: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status !== \"archived\") throw new Error(\"Thread is not archived\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n return await this._options.adapter.unarchive(remoteId);\n } catch (error) {\n await this._ensureThreadIsNotMain(data.id);\n throw error;\n }\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"regular\");\n },\n });\n }\n\n public async delete(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw new Error(\"Thread is not yet initialized\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._hookManager.stopThreadRuntime(data.id);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return await this._options.adapter.delete(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"deleted\");\n },\n });\n }\n\n public async detach(threadIdOrRemoteId: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw new Error(\"Thread is not yet initialized\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._hookManager.stopThreadRuntime(data.id);\n }\n\n private useBoundIds = create<string[]>(() => []);\n\n public __internal_RenderComponent: FC = () => {\n const id = useId();\n useEffect(() => {\n this.useBoundIds.setState((s) => [...s, id], true);\n return () => {\n this.useBoundIds.setState((s) => s.filter((i) => i !== id), true);\n };\n }, [id]);\n\n const boundIds = this.useBoundIds();\n const { Provider } = this.useProvider();\n\n const adapters = {\n modelContext: this.contextProvider,\n };\n\n return (\n (boundIds.length === 0 || boundIds[0] === id) && (\n // only render if the component is the first one mounted\n <RuntimeAdapterProvider adapters={adapters}>\n <this._hookManager.__internal_RenderThreadRuntimes\n provider={Provider}\n />\n </RuntimeAdapterProvider>\n )\n );\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RemoteThreadListThreadListRuntimeCore.js","names":["ThreadListRuntimeCore","generateId","BaseSubscribable","OptimisticState","EMPTY_THREAD_CORE","RemoteThreadData","RemoteThreadState","classifyThreads","createThreadMappingId","getThreadData","normalizeCursor","updateStatusReducer","RemoteThreadListOptions","RemoteThreadListHookInstanceManager","FC","Fragment","useEffect","useId","create","AssistantMessageStream","ModelContextProvider","RuntimeAdapterProvider","RemoteThreadListThreadListRuntimeCore","_options","_hookManager","_loadThreadsPromise","Promise","_loadMorePromise","_loadGeneration","_mainThreadId","_state","isLoading","isLoadingMore","cursor","undefined","newThreadId","threadIds","archivedThreadIds","threadIdMap","threadData","threadItems","value","getLoadThreadsPromise","generation","optimisticUpdate","execute","adapter","list","loading","state","then","l","fresh","threads","nextCursor","catch","error","console","update","baseValue","loadMore","initialState","resolve","dedup","after","appended","contextProvider","constructor","options","subscribe","_notifySubscribers","_notifyThreadIdChange","runtimeHook","useProvider","Provider","unstable_Provider","__internal_setOptions","switchToNewThread","_initialThreadLoaded","adapterChanged","getState","setState","setRuntimeHook","__internal_load","startThreadId","threadId","initialThreadId","switchToThread","reload","hasMore","mainThreadId","_mainThreadRemoteId","remoteId","_lastNotifiedThreadId","onThreadIdChange","getMainThreadRuntimeCore","result","getThreadRuntimeCore","threadIdOrRemoteId","data","getItemById","Error","id","unarchive","remoteMetadata","fetch","mappingId","newThreadData","initializeTask","externalId","status","title","lastMessageAt","custom","newThreadIdMap","threadIdsWithoutRemote","filter","archivedThreadIdsWithoutRemote","newThreadIds","newArchivedThreadIds","task","startThreadRuntime","waitForUpdate","initialize","optimistic","generateTitle","runtimeCore","messages","stream","messageStream","fromAssistantStream","newTitle","parts","c","type","text","currentData","rename","updateCustom","Record","_ensureThreadIsNotMain","archive","delete","stopThreadRuntime","detach","useBoundIds","__internal_RenderComponent","s","i","boundIds","adapters","modelContext","length"],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"sourcesContent":["import type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport { generateId } from \"../../utils/id\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport { EMPTY_THREAD_CORE } from \"../../runtimes/remote-thread-list/empty-thread-core\";\nimport type {\n RemoteThreadData,\n RemoteThreadState,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport {\n classifyThreads,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n updateStatusReducer,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type { RemoteThreadListOptions } from \"../../runtimes/remote-thread-list/types\";\nimport { RemoteThreadListHookInstanceManager } from \"./RemoteThreadListHookInstanceManager\";\nimport { type FC, Fragment, useEffect, useId } from \"react\";\nimport { create } from \"zustand\";\nimport { AssistantMessageStream } from \"assistant-stream\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { RuntimeAdapterProvider } from \"./RuntimeAdapterProvider\";\n\nexport class RemoteThreadListThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _options!: RemoteThreadListOptions;\n private readonly _hookManager: RemoteThreadListHookInstanceManager;\n\n private _loadThreadsPromise: Promise<void> | undefined;\n private _loadMorePromise: Promise<void> | undefined;\n private _loadGeneration = 0;\n\n private _mainThreadId!: string;\n private readonly _state = new OptimisticState<RemoteThreadState>({\n isLoading: true,\n isLoadingMore: false,\n cursor: undefined,\n newThreadId: undefined,\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: {},\n threadData: {},\n });\n\n public get threadItems() {\n return this._state.value.threadData;\n }\n\n public getLoadThreadsPromise() {\n // TODO this needs to be cached in case this promise is loaded during suspense\n if (!this._loadThreadsPromise) {\n const generation = this._loadGeneration;\n this._loadThreadsPromise = this._state\n .optimisticUpdate({\n execute: () => this._options.adapter.list(),\n loading: (state) => {\n return {\n ...state,\n isLoading: true,\n };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n const fresh = classifyThreads(l.threads, {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: {},\n threadData: {},\n });\n\n return {\n ...state,\n isLoading: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: fresh.threadIds,\n archivedThreadIds: fresh.archivedThreadIds,\n threadIdMap: {\n ...state.threadIdMap,\n ...fresh.threadIdMap,\n },\n threadData: {\n ...state.threadData,\n ...fresh.threadData,\n },\n };\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n this._loadThreadsPromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n isLoading: false,\n });\n })\n .then(() => {});\n }\n\n return this._loadThreadsPromise;\n }\n\n public loadMore(): Promise<void> {\n if (this._loadMorePromise) return this._loadMorePromise;\n\n const initialState = this._state.value;\n if (initialState.cursor === undefined || initialState.isLoading) {\n return Promise.resolve();\n }\n\n const generation = this._loadGeneration;\n const adapter = this._options.adapter;\n const cursor = initialState.cursor;\n\n const dedup = this._state\n .optimisticUpdate({\n execute: () => adapter.list({ after: cursor }),\n loading: (state) => ({ ...state, isLoadingMore: true }),\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n if (adapter !== this._options.adapter) return state;\n\n const appended = classifyThreads(l.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: appended.threadIds,\n archivedThreadIds: appended.archivedThreadIds,\n threadIdMap: appended.threadIdMap,\n threadData: appended.threadData,\n };\n },\n })\n .catch((error: unknown) => {\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (this._loadMorePromise === dedup) {\n this._loadMorePromise = undefined;\n }\n });\n\n this._loadMorePromise = dedup;\n return dedup;\n }\n\n private readonly contextProvider: ModelContextProvider;\n\n constructor(\n options: RemoteThreadListOptions,\n contextProvider: ModelContextProvider,\n ) {\n super();\n this.contextProvider = contextProvider;\n\n this._state.subscribe(() => {\n this._notifySubscribers();\n this._notifyThreadIdChange();\n });\n this._hookManager = new RemoteThreadListHookInstanceManager(\n options.runtimeHook,\n this,\n );\n this.useProvider = create(() => ({\n Provider: options.adapter.unstable_Provider ?? Fragment,\n }));\n this.__internal_setOptions(options);\n this.switchToNewThread();\n }\n\n private _initialThreadLoaded = false;\n private useProvider;\n\n public __internal_setOptions(options: RemoteThreadListOptions) {\n if (this._options === options) return;\n\n const adapterChanged =\n this._options !== undefined && this._options.adapter !== options.adapter;\n\n this._options = options;\n\n const Provider = options.adapter.unstable_Provider ?? Fragment;\n if (Provider !== this.useProvider.getState().Provider) {\n this.useProvider.setState({ Provider }, true);\n }\n\n this._hookManager.setRuntimeHook(options.runtimeHook);\n\n if (adapterChanged) {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n }\n }\n\n public __internal_load() {\n this.getLoadThreadsPromise(); // begin loading on initial bind\n const startThreadId =\n this._options.threadId ?? this._options.initialThreadId;\n if (!this._initialThreadLoaded && startThreadId) {\n this._initialThreadLoaded = true;\n this.switchToThread(startThreadId).catch(() => {});\n }\n }\n\n public reload() {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n return this.getLoadThreadsPromise();\n }\n\n public get isLoading() {\n return this._state.value.isLoading;\n }\n\n public get isLoadingMore() {\n return this._state.value.isLoadingMore;\n }\n\n public get hasMore() {\n return this._state.value.cursor !== undefined;\n }\n\n public get threadIds() {\n return this._state.value.threadIds;\n }\n\n public get archivedThreadIds() {\n return this._state.value.archivedThreadIds;\n }\n\n public get newThreadId() {\n return this._state.value.newThreadId;\n }\n\n public get mainThreadId(): string {\n return this._mainThreadId;\n }\n\n // The settled remote ID of the active thread, or undefined while it is still\n // a new/optimistic thread. This is the value surfaced to `onThreadIdChange`.\n private get _mainThreadRemoteId(): string | undefined {\n if (this._mainThreadId === undefined) return undefined;\n return getThreadData(this._state.value, this._mainThreadId)?.remoteId;\n }\n\n private _lastNotifiedThreadId: string | undefined = undefined;\n\n private _notifyThreadIdChange() {\n const threadId = this._mainThreadRemoteId;\n if (this._lastNotifiedThreadId === threadId) return;\n this._lastNotifiedThreadId = threadId;\n this._options.onThreadIdChange?.(threadId);\n }\n\n public getMainThreadRuntimeCore() {\n const result = this._hookManager.getThreadRuntimeCore(this._mainThreadId);\n if (!result) return EMPTY_THREAD_CORE;\n return result;\n }\n\n public getThreadRuntimeCore(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n\n const result = this._hookManager.getThreadRuntimeCore(data.id);\n if (!result) throw new Error(\"Thread not found\");\n return result;\n }\n\n public getItemById(threadIdOrRemoteId: string) {\n return getThreadData(this._state.value, threadIdOrRemoteId);\n }\n\n public async switchToThread(\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n ): Promise<void> {\n let data = this.getItemById(threadIdOrRemoteId);\n\n if (!data) {\n const remoteMetadata =\n await this._options.adapter.fetch(threadIdOrRemoteId);\n const state = this._state.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n\n const newThreadData = {\n ...state.threadData,\n [mappingId]: {\n id: mappingId,\n initializeTask: Promise.resolve({\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n }),\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n status: remoteMetadata.status,\n title: remoteMetadata.title,\n lastMessageAt: remoteMetadata.lastMessageAt,\n custom: remoteMetadata.custom,\n } as RemoteThreadData,\n };\n\n const newThreadIdMap = {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n };\n\n // Filter both arrays first so a concurrent `list()` can't leave the id\n // duplicated or under the wrong status.\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n\n const newThreadIds =\n remoteMetadata.status === \"regular\"\n ? [...threadIdsWithoutRemote, remoteMetadata.remoteId]\n : threadIdsWithoutRemote;\n const newArchivedThreadIds =\n remoteMetadata.status === \"archived\"\n ? [...archivedThreadIdsWithoutRemote, remoteMetadata.remoteId]\n : archivedThreadIdsWithoutRemote;\n\n this._state.update({\n ...state,\n threadIds: newThreadIds,\n archivedThreadIds: newArchivedThreadIds,\n threadIdMap: newThreadIdMap,\n threadData: newThreadData,\n });\n\n data = this.getItemById(threadIdOrRemoteId);\n }\n\n if (!data) throw new Error(\"Thread not found\");\n if (this._mainThreadId === data.id) return;\n\n const task = this._hookManager.startThreadRuntime(data.id);\n if (this.mainThreadId !== undefined) {\n await task;\n } else {\n task.then(() => this._notifySubscribers());\n }\n\n if (data.status === \"archived\" && options?.unarchive !== false) {\n await this.unarchive(data.id);\n }\n this._mainThreadId = data.id;\n\n this._notifySubscribers();\n this._notifyThreadIdChange();\n }\n\n public async switchToNewThread(): Promise<void> {\n // an initialization transaction is in progress, wait for it to settle\n while (\n this._state.baseValue.newThreadId !== undefined &&\n this._state.value.newThreadId === undefined\n ) {\n await this._state.waitForUpdate();\n }\n\n const state = this._state.value;\n let id: string | undefined = this._state.value.newThreadId;\n if (id === undefined) {\n do {\n id = `__LOCALID_${generateId()}`;\n } while (state.threadIdMap[id]);\n\n const mappingId = createThreadMappingId(id);\n this._state.update({\n ...state,\n newThreadId: id,\n threadIdMap: {\n ...state.threadIdMap,\n [id]: mappingId,\n },\n threadData: {\n ...state.threadData,\n [mappingId]: {\n status: \"new\",\n id,\n remoteId: undefined,\n externalId: undefined,\n title: undefined,\n custom: undefined,\n } satisfies RemoteThreadData,\n },\n });\n }\n\n return this.switchToThread(id);\n }\n\n public initialize = async (threadId: string) => {\n if (this._state.value.newThreadId !== threadId) {\n const data = this.getItemById(threadId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status === \"new\") throw new Error(\"Unexpected new state\");\n return data.initializeTask;\n }\n\n return this._state.optimisticUpdate({\n execute: () => {\n return this._options.adapter.initialize(threadId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, threadId, \"regular\");\n },\n loading: (state, task) => {\n const mappingId = createThreadMappingId(threadId);\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [mappingId]: {\n ...state.threadData[mappingId],\n initializeTask: task,\n },\n },\n };\n },\n then: (state, { remoteId, externalId }) => {\n const data = getThreadData(state, threadId);\n if (!data) return state;\n\n const mappingId = createThreadMappingId(threadId);\n return {\n ...state,\n threadIdMap: {\n ...state.threadIdMap,\n [remoteId]: mappingId,\n },\n threadData: {\n ...state.threadData,\n [mappingId]: {\n ...data,\n initializeTask: Promise.resolve({ remoteId, externalId }),\n remoteId,\n externalId,\n },\n },\n };\n },\n });\n };\n\n public generateTitle = async (threadId: string) => {\n const data = this.getItemById(threadId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status === \"new\") throw new Error(\"Thread is not yet initialized\");\n\n const { remoteId } = await data.initializeTask;\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(data.id);\n if (!runtimeCore) return; // thread is no longer running\n\n const messages = runtimeCore.messages;\n const stream = await this._options.adapter.generateTitle(\n remoteId,\n messages,\n );\n const messageStream = AssistantMessageStream.fromAssistantStream(stream);\n for await (const result of messageStream) {\n const newTitle = result.parts.filter((c) => c.type === \"text\")[0]?.text;\n const state = this._state.baseValue;\n const currentData = getThreadData(state, data.id);\n if (!currentData) continue;\n this._state.update({\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title: newTitle,\n },\n },\n });\n }\n };\n\n public rename(threadIdOrRemoteId: string, newTitle: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status === \"new\") throw new Error(\"Thread is not yet initialized\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return this._options.adapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n title: newTitle,\n },\n },\n };\n },\n });\n }\n\n public updateCustom(\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status === \"new\") throw new Error(\"Thread is not yet initialized\");\n\n if (!this._options.adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n const adapter = this._options.adapter;\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return adapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n custom,\n },\n },\n };\n },\n });\n }\n\n private async _ensureThreadIsNotMain(threadId: string) {\n if (threadId === this.newThreadId)\n throw new Error(\"Cannot ensure new thread is not main\");\n\n if (threadId === this._mainThreadId) {\n await this.switchToNewThread();\n }\n }\n\n public async archive(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status !== \"regular\")\n throw new Error(\"Thread is not yet initialized or already archived\");\n\n await this._ensureThreadIsNotMain(data.id);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return this._options.adapter.archive(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"archived\");\n },\n });\n }\n\n public unarchive(threadIdOrRemoteId: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status !== \"archived\") throw new Error(\"Thread is not archived\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n return await this._options.adapter.unarchive(remoteId);\n } catch (error) {\n await this._ensureThreadIsNotMain(data.id);\n throw error;\n }\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"regular\");\n },\n });\n }\n\n public async delete(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw new Error(\"Thread is not yet initialized\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._hookManager.stopThreadRuntime(data.id);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return await this._options.adapter.delete(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"deleted\");\n },\n });\n }\n\n public async detach(threadIdOrRemoteId: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw new Error(\"Thread not found\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw new Error(\"Thread is not yet initialized\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._hookManager.stopThreadRuntime(data.id);\n }\n\n private useBoundIds = create<string[]>(() => []);\n\n public __internal_RenderComponent: FC = () => {\n const id = useId();\n useEffect(() => {\n this.useBoundIds.setState((s) => [...s, id], true);\n return () => {\n this.useBoundIds.setState((s) => s.filter((i) => i !== id), true);\n };\n }, [id]);\n\n const boundIds = this.useBoundIds();\n const { Provider } = this.useProvider();\n\n const adapters = {\n modelContext: this.contextProvider,\n };\n\n return (\n (boundIds.length === 0 || boundIds[0] === id) && (\n // only render if the component is the first one mounted\n <RuntimeAdapterProvider adapters={adapters}>\n <this._hookManager.__internal_RenderThreadRuntimes\n provider={Provider}\n />\n </RuntimeAdapterProvider>\n )\n );\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { auiV0Decode, auiV0Encode } from "./auiV0.js";
|
|
2
|
-
import { useState } from "@assistant-ui/tap/react-shim";
|
|
3
2
|
import { useAui } from "@assistant-ui/store";
|
|
3
|
+
import { useState } from "@assistant-ui/tap/react-shim";
|
|
4
4
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
5
5
|
import { CloudMessagePersistence, createFormattedPersistence } from "assistant-cloud";
|
|
6
6
|
//#region src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { fromThreadMessageLike } from "../../../runtime/utils/thread-message-like.js";
|
|
2
1
|
import { isJSONValue } from "../../../utils/json/is-json.js";
|
|
2
|
+
import { fromThreadMessageLike } from "../../../runtime/utils/thread-message-like.js";
|
|
3
3
|
//#region src/react/runtimes/cloud/auiV0.ts
|
|
4
4
|
function auiV0Encode(message) {
|
|
5
5
|
const status = message.status?.type === "running" ? {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { InMemoryThreadListAdapter } from "../../../runtimes/remote-thread-list/adapter/in-memory.js";
|
|
2
1
|
import { isRecord } from "../../../utils/json/is-json.js";
|
|
2
|
+
import { InMemoryThreadListAdapter } from "../../../runtimes/remote-thread-list/adapter/in-memory.js";
|
|
3
3
|
import { RuntimeAdapterProvider } from "../RuntimeAdapterProvider.js";
|
|
4
4
|
import { useAssistantCloudThreadHistoryAdapter } from "./AssistantCloudThreadHistoryAdapter.js";
|
|
5
5
|
import { CloudFileAttachmentAdapter } from "./CloudFileAttachmentAdapter.js";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AssistantClient } from "@assistant-ui/store";
|
|
2
|
+
|
|
3
|
+
//#region src/react/runtimes/createRuntimeExtras.d.ts
|
|
4
|
+
/** @deprecated Internal API for external-store adapter authors. Not part of the public API; may change or be removed without notice. */
|
|
5
|
+
type RuntimeExtras<T extends object> = {
|
|
6
|
+
provide: (value: T) => T;
|
|
7
|
+
is: (extras: unknown) => extras is T;
|
|
8
|
+
tryGet: (extras: unknown) => T | undefined;
|
|
9
|
+
get: (client: AssistantClient) => T;
|
|
10
|
+
use: {
|
|
11
|
+
(): T;
|
|
12
|
+
<S>(select: (extras: T) => S): S;
|
|
13
|
+
<S>(select: (extras: T) => S, fallback: S): S;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
/** @deprecated Internal API for external-store adapter authors. Not part of the public API; may change or be removed without notice. */
|
|
17
|
+
declare const createRuntimeExtras: <T extends object>(runtimeName: string) => RuntimeExtras<T>;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { RuntimeExtras, createRuntimeExtras };
|
|
20
|
+
//# sourceMappingURL=createRuntimeExtras.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRuntimeExtras.d.ts","names":[],"sources":["../../../src/react/runtimes/createRuntimeExtras.ts"],"mappings":";;;;KAMY,aAAA;EACV,OAAA,GAAU,KAAA,EAAO,CAAA,KAAM,CAAA;EACvB,EAAA,GAAK,MAAA,cAAoB,MAAA,IAAU,CAAA;EACnC,MAAA,GAAS,MAAA,cAAoB,CAAA;EAC7B,GAAA,GAAM,MAAA,EAAQ,eAAA,KAAoB,CAAA;EAClC,GAAA;IAAA,IACM,CAAA;IAAA,IACA,MAAA,GAAS,MAAA,EAAQ,CAAA,KAAM,CAAA,GAAI,CAAA;IAAA,IAC3B,MAAA,GAAS,MAAA,EAAQ,CAAA,KAAM,CAAA,EAAG,QAAA,EAAU,CAAA,GAAI,CAAA;EAAA;AAAA;;cAKnC,mBAAA,qBACX,WAAA,aACC,aAAa,CAAC,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useAuiState } from "@assistant-ui/store";
|
|
3
|
+
//#region src/react/runtimes/createRuntimeExtras.ts
|
|
4
|
+
/** @deprecated Internal API for external-store adapter authors. Not part of the public API; may change or be removed without notice. */
|
|
5
|
+
const createRuntimeExtras = (runtimeName) => {
|
|
6
|
+
const brand = Symbol(`${runtimeName} extras`);
|
|
7
|
+
const is = (extras) => typeof extras === "object" && extras !== null && brand in extras;
|
|
8
|
+
const assert = (extras) => {
|
|
9
|
+
if (!is(extras)) throw new Error(`The current thread is not backed by the ${runtimeName} runtime.`);
|
|
10
|
+
return extras;
|
|
11
|
+
};
|
|
12
|
+
const provide = (value) => {
|
|
13
|
+
Object.defineProperty(value, brand, {
|
|
14
|
+
value: true,
|
|
15
|
+
enumerable: false,
|
|
16
|
+
configurable: true
|
|
17
|
+
});
|
|
18
|
+
return value;
|
|
19
|
+
};
|
|
20
|
+
const tryGet = (extras) => is(extras) ? extras : void 0;
|
|
21
|
+
const get = (client) => assert(client.thread().getState().extras);
|
|
22
|
+
function use(select, ...rest) {
|
|
23
|
+
const hasFallback = rest.length > 0;
|
|
24
|
+
const fallback = rest[0];
|
|
25
|
+
return useAuiState((s) => {
|
|
26
|
+
const extras = s.thread.extras;
|
|
27
|
+
if (is(extras)) return select ? select(extras) : extras;
|
|
28
|
+
if (hasFallback) return fallback;
|
|
29
|
+
return assert(extras);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
provide,
|
|
34
|
+
is,
|
|
35
|
+
tryGet,
|
|
36
|
+
get,
|
|
37
|
+
use
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
//#endregion
|
|
41
|
+
export { createRuntimeExtras };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=createRuntimeExtras.js.map
|