@assistant-ui/core 0.3.17 → 0.3.18
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/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +5 -4
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -2
- package/dist/internal.js +3 -2
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +10 -4
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +2 -0
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/provider.js +30 -7
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.js +16 -9
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/registry.js +3 -5
- package/dist/model-context/registry.js.map +1 -1
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/model-context/types.js +5 -4
- package/dist/model-context/types.js.map +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/InMemoryThreadList.js +62 -56
- package/dist/react/client/InMemoryThreadList.js.map +1 -1
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +24 -27
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +1 -0
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +151 -141
- package/dist/react/client/RemoteThreadList.js.map +1 -1
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +18 -16
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/interactables-legacy/Interactables.js +242 -121
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +11 -9
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +2 -2
- package/dist/react/model-context/makeAssistantTool.js +1 -1
- package/dist/react/model-context/makeAssistantTool.js.map +1 -1
- package/dist/react/model-context/useAssistantTool.d.ts +2 -2
- package/dist/react/model-context/useAssistantTool.js +1 -1
- package/dist/react/model-context/useAssistantTool.js.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.js +2 -1
- package/dist/react/model-context/useToolArgsStatus.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +16 -8
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +5 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +103 -103
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +1 -0
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.js +13 -11
- package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +4 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +401 -34
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +2 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +75 -46
- package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +63 -23
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.d.ts +7 -3
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.js +2 -2
- package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +3 -0
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +18 -14
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +4 -0
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +1 -1
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +16 -12
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +6 -5
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +12 -5
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +1 -1
- package/dist/runtime/utils/external-message-conversion.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 +15 -6
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +1 -1
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +21 -27
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/internal.d.ts +2 -2
- package/dist/runtimes/internal.js +2 -2
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +18 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js +130 -42
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +49 -0
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/title-generation.js +197 -0
- package/dist/runtimes/remote-thread-list/title-generation.js.map +1 -0
- package/dist/runtimes/remote-thread-list/title.d.ts +3 -1
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title.js +9 -1
- package/dist/runtimes/remote-thread-list/title.js.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +10 -0
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +19 -3
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/model-context-client.js +2 -1
- package/dist/store/clients/model-context-client.js.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.js +1 -0
- package/dist/store/clients/single-thread-list.js.map +1 -1
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/suggestions.js +5 -4
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -0
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +97 -61
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -0
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +221 -144
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.js +54 -52
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +193 -121
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/scopes/composer.d.ts +10 -2
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +30 -1
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +2 -2
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +8 -0
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +1 -0
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/types/attachment.d.ts +2 -1
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/attachment.js +2 -1
- package/dist/types/attachment.js.map +1 -1
- package/dist/utils/abortable-iterable.d.ts +19 -0
- package/dist/utils/abortable-iterable.d.ts.map +1 -0
- package/dist/utils/abortable-iterable.js +72 -0
- package/dist/utils/abortable-iterable.js.map +1 -0
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/composite-context-provider.js +20 -2
- package/dist/utils/composite-context-provider.js.map +1 -1
- package/dist/utils/record.d.ts +11 -0
- package/dist/utils/record.d.ts.map +1 -0
- package/dist/utils/record.js +12 -0
- package/dist/utils/record.js.map +1 -0
- package/package.json +10 -10
- package/src/adapters/attachment.test.ts +50 -1
- package/src/adapters/attachment.ts +7 -4
- package/src/index.ts +1 -0
- package/src/internal.ts +4 -0
- package/src/model-context/frame/host.test.ts +24 -0
- package/src/model-context/frame/host.ts +10 -4
- package/src/model-context/frame/provider.test.ts +71 -0
- package/src/model-context/frame/provider.ts +37 -7
- package/src/model-context/interactable-composer-metadata.test.ts +28 -0
- package/src/model-context/interactable-composer-metadata.ts +9 -3
- package/src/model-context/registry.test.ts +12 -0
- package/src/model-context/registry.ts +3 -2
- package/src/model-context/types.test.ts +25 -0
- package/src/model-context/types.ts +9 -4
- package/src/react/RuntimeAdapter.test.ts +34 -0
- package/src/react/client/InMemoryThreadList.ts +1 -0
- package/src/react/client/Interactables.test.ts +28 -0
- package/src/react/client/Interactables.ts +15 -13
- package/src/react/client/RemoteThreadList.background.test.ts +148 -6
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +42 -1
- package/src/react/client/RemoteThreadList.test.ts +345 -3
- package/src/react/client/RemoteThreadList.ts +166 -110
- package/src/react/client/Tools.ts +22 -11
- package/src/react/interactables-legacy/Interactables.ts +16 -16
- package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +9 -10
- package/src/react/model-context/makeAssistantTool.ts +2 -2
- package/src/react/model-context/useAssistantTool.ts +2 -2
- package/src/react/model-context/useToolArgsStatus.test.tsx +30 -0
- package/src/react/model-context/useToolArgsStatus.ts +2 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.destroy.test.tsx +172 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +33 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +7 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +28 -5
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.load-error.test.ts +132 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.switch-delete.test.ts +105 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +136 -111
- package/src/react/runtimes/RemoteThreadResource.test.ts +9 -0
- package/src/react/runtimes/RemoteThreadResource.ts +19 -12
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +483 -6
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +504 -68
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +15 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +1 -0
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +41 -0
- package/src/react/runtimes/useExternalStoreRuntime.ts +10 -4
- package/src/react/runtimes/useLocalRuntime.test.tsx +20 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.load-error.test.tsx +108 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +33 -0
- package/src/runtime/api/message-runtime.test.ts +75 -0
- package/src/runtime/api/thread-list-item-runtime.ts +10 -3
- package/src/runtime/api/thread-list-runtime.ts +21 -11
- package/src/runtime/api/thread-runtime.test.ts +78 -0
- package/src/runtime/api/thread-runtime.ts +8 -1
- package/src/runtime/base/base-composer-runtime-core.ts +36 -8
- package/src/runtime/base/base-thread-runtime-core.test.ts +55 -1
- package/src/runtime/base/base-thread-runtime-core.ts +6 -4
- package/src/runtime/interfaces/composer-runtime-core.ts +10 -5
- package/src/runtime/interfaces/thread-list-runtime-core.ts +5 -1
- package/src/runtime/utils/external-message-conversion.test.ts +68 -0
- package/src/runtime/utils/external-message-conversion.ts +1 -1
- package/src/runtime/utils/message-repository.ts +29 -17
- package/src/runtime/utils/thread-message-like.ts +1 -1
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +18 -13
- package/src/runtimes/internal.ts +1 -0
- package/src/runtimes/remote-thread-list/remote-thread-state.test.ts +128 -2
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +182 -42
- package/src/runtimes/remote-thread-list/title-generation.test.ts +602 -0
- package/src/runtimes/remote-thread-list/title-generation.ts +329 -0
- package/src/runtimes/remote-thread-list/title.test.ts +62 -0
- package/src/runtimes/remote-thread-list/title.ts +13 -0
- package/src/runtimes/remote-thread-list/types.ts +10 -0
- package/src/store/clients/external-thread.ts +48 -3
- package/src/store/clients/model-context-client.ts +5 -1
- package/src/store/clients/single-thread-list.ts +1 -0
- package/src/store/clients/suggestions.test.ts +40 -0
- package/src/store/clients/suggestions.ts +13 -10
- package/src/store/runtime-clients/composer-runtime-client.ts +42 -9
- package/src/store/runtime-clients/message-runtime-client.ts +54 -6
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +4 -2
- package/src/store/runtime-clients/thread-list-runtime-client.ts +1 -0
- package/src/store/runtime-clients/thread-runtime-client.ts +58 -10
- package/src/store/scopes/composer.ts +16 -4
- package/src/store/scopes/message.ts +14 -0
- package/src/store/scopes/thread-list-item.ts +5 -2
- package/src/store/scopes/thread.ts +4 -0
- package/src/store/scopes/threads.ts +1 -0
- package/src/tests/MessageRepository.test.ts +116 -0
- package/src/tests/OptimisticState-list-race.test.ts +1 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-initialize-adapter-change.test.ts +38 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-load-race.test.ts +47 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-title-race.test.ts +89 -0
- package/src/tests/attachment-adapters.test.ts +14 -0
- package/src/tests/base-composer-runtime-core.test.ts +39 -0
- package/src/tests/external-store-thread-list-runtime-core.test.ts +83 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +27 -18
- package/src/tests/external-thread-attachments.test.tsx +139 -0
- package/src/tests/external-thread-parity.test.tsx +23 -0
- package/src/tests/remote-thread-list-isLoading.test.ts +1 -0
- package/src/tests/thread-list-runtime-getLoadThreadsPromise.test.ts +1 -0
- package/src/tests/thread-switch-events.test.tsx +78 -0
- package/src/tests/tools-scope-migration.test.tsx +28 -0
- package/src/types/attachment.ts +4 -0
- package/src/utils/abortable-iterable.test.ts +213 -0
- package/src/utils/abortable-iterable.ts +93 -0
- package/src/utils/composite-context-provider.test.ts +25 -0
- package/src/utils/composite-context-provider.ts +23 -2
- package/src/utils/record.test.ts +48 -0
- package/src/utils/record.ts +11 -0
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { nullProtoRecord } from "../../utils/record.js";
|
|
1
2
|
import { BaseSubscribable, WritableSubscribable } from "../../subscribable/subscribable.js";
|
|
2
3
|
import { OptimisticState } from "../../runtimes/remote-thread-list/optimistic-state.js";
|
|
3
4
|
import { EMPTY_THREAD_CORE } from "../../runtimes/remote-thread-list/empty-thread-core.js";
|
|
4
|
-
import { classifyThreads, createEmptyRemoteThreadState, createThreadMappingId, getThreadData, normalizeCursor, preserveMidLoadTransitions, seedNewThread, statusSnapshot, updateStatusReducer } from "../../runtimes/remote-thread-list/remote-thread-state.js";
|
|
5
|
+
import { classifyThreads, createEmptyRemoteThreadState, createThreadMappingId, getThreadData, normalizeCursor, preserveMidLoadTransitions, promoteNewThreadReducer, reconcileInitializedThread, seedNewThread, statusSnapshot, updateStatusReducer } from "../../runtimes/remote-thread-list/remote-thread-state.js";
|
|
5
6
|
import { useSubscribable } from "../../store/runtime-clients/useSubscribable.js";
|
|
6
7
|
import { ThreadListAdapterChangedError } from "../../runtimes/remote-thread-list/adapter-changed.js";
|
|
7
8
|
import { useStableRuntimeAdapters } from "./useRuntimeAdapters.js";
|
|
8
|
-
import { isTitleSourceMessage } from "../../runtimes/remote-thread-list/title.js";
|
|
9
|
+
import { applyTitleStream, isTitleSourceMessage } from "../../runtimes/remote-thread-list/title.js";
|
|
10
|
+
import { clearThreadTitleState, finishThreadTitleRename, runThreadTitleGeneration, startThreadTitleRename } from "../../runtimes/remote-thread-list/title-generation.js";
|
|
9
11
|
import { RuntimeAdapterProvider } from "./RuntimeAdapterProvider.js";
|
|
10
12
|
import { RemoteThreadListHookInstanceManager } from "./RemoteThreadListHookInstanceManager.js";
|
|
11
|
-
import { AssistantMessageStream } from "assistant-stream";
|
|
12
13
|
import { Fragment, useEffect, useId } from "@assistant-ui/tap/react-shim";
|
|
13
14
|
import { useAui } from "@assistant-ui/store";
|
|
14
15
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -28,6 +29,7 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
28
29
|
_staleThreadIdsOnReplace;
|
|
29
30
|
_switchGeneration = 0;
|
|
30
31
|
_switchTask;
|
|
32
|
+
_titleStates = /* @__PURE__ */ new Map();
|
|
31
33
|
_mainThreadId;
|
|
32
34
|
_state = new OptimisticState(EMPTY_REMOTE_STATE);
|
|
33
35
|
_useAdaptersProvider = ({ children }) => {
|
|
@@ -65,7 +67,8 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
65
67
|
if (generation !== this._loadGeneration) return state;
|
|
66
68
|
return {
|
|
67
69
|
...state,
|
|
68
|
-
isLoading: true
|
|
70
|
+
isLoading: true,
|
|
71
|
+
loadError: void 0
|
|
69
72
|
};
|
|
70
73
|
},
|
|
71
74
|
then: (state, l) => {
|
|
@@ -73,7 +76,10 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
73
76
|
if (this._replaceListOnNextLoad) {
|
|
74
77
|
this._replaceListOnNextLoad = false;
|
|
75
78
|
replacedList = true;
|
|
76
|
-
return this._replaceWithThreads(
|
|
79
|
+
return this._replaceWithThreads({
|
|
80
|
+
...state,
|
|
81
|
+
loadError: void 0
|
|
82
|
+
}, l.threads, normalizeCursor(l.nextCursor));
|
|
77
83
|
}
|
|
78
84
|
const fresh = classifyThreads(l.threads, {
|
|
79
85
|
threadIds: [],
|
|
@@ -84,6 +90,7 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
84
90
|
const merged = {
|
|
85
91
|
...state,
|
|
86
92
|
isLoading: false,
|
|
93
|
+
loadError: void 0,
|
|
87
94
|
cursor: normalizeCursor(l.nextCursor),
|
|
88
95
|
threadIds: fresh.threadIds,
|
|
89
96
|
archivedThreadIds: fresh.archivedThreadIds,
|
|
@@ -99,13 +106,17 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
99
106
|
if (!this._replaceListOnNextLoad) {
|
|
100
107
|
this._state.update({
|
|
101
108
|
...this._state.baseValue,
|
|
102
|
-
isLoading: false
|
|
109
|
+
isLoading: false,
|
|
110
|
+
loadError: error
|
|
103
111
|
});
|
|
104
112
|
return;
|
|
105
113
|
}
|
|
106
114
|
this._replaceListOnNextLoad = false;
|
|
107
115
|
replacedList = true;
|
|
108
|
-
this._state.update(this._replaceWithThreads(
|
|
116
|
+
this._state.update(this._replaceWithThreads({
|
|
117
|
+
...this._state.baseValue,
|
|
118
|
+
loadError: error
|
|
119
|
+
}, [], void 0));
|
|
109
120
|
}).then(() => {
|
|
110
121
|
if (!replacedList) return;
|
|
111
122
|
const threadId = this._options.threadId;
|
|
@@ -197,8 +208,10 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
197
208
|
this._staleThreadIdsOnReplace = new Set(Object.values(this._state.baseValue.threadData).filter((item) => item.status !== "new").map((item) => item.id));
|
|
198
209
|
this._state.update({
|
|
199
210
|
...this._state.baseValue,
|
|
200
|
-
cursor: void 0
|
|
211
|
+
cursor: void 0,
|
|
212
|
+
loadError: void 0
|
|
201
213
|
});
|
|
214
|
+
this._titleStates.clear();
|
|
202
215
|
}
|
|
203
216
|
if (controlledThreadIdChanged) this._switchToThreadFromProp(options.threadId).catch(() => {});
|
|
204
217
|
}
|
|
@@ -211,8 +224,8 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
211
224
|
_replaceWithThreads(state, threads, cursor) {
|
|
212
225
|
const carried = [];
|
|
213
226
|
if (state.newThreadId) {
|
|
214
|
-
const mappingId = state.threadIdMap[state.newThreadId];
|
|
215
|
-
const draft = mappingId ? state.threadData[mappingId] : void 0;
|
|
227
|
+
const mappingId = Object.hasOwn(state.threadIdMap, state.newThreadId) ? state.threadIdMap[state.newThreadId] : void 0;
|
|
228
|
+
const draft = mappingId && Object.hasOwn(state.threadData, mappingId) ? state.threadData[mappingId] : void 0;
|
|
216
229
|
if (draft?.status === "new") carried.push(draft);
|
|
217
230
|
}
|
|
218
231
|
const stale = this._staleThreadIdsOnReplace;
|
|
@@ -225,12 +238,12 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
225
238
|
const seed = {
|
|
226
239
|
threadIds: [],
|
|
227
240
|
archivedThreadIds: [],
|
|
228
|
-
threadIdMap:
|
|
229
|
-
threadData:
|
|
241
|
+
threadIdMap: nullProtoRecord(),
|
|
242
|
+
threadData: nullProtoRecord()
|
|
230
243
|
};
|
|
231
244
|
for (const item of carried) {
|
|
232
245
|
const mappingId = createThreadMappingId(item.id);
|
|
233
|
-
if (seed.threadData
|
|
246
|
+
if (Object.hasOwn(seed.threadData, mappingId)) continue;
|
|
234
247
|
seed.threadIdMap[item.id] = mappingId;
|
|
235
248
|
if (item.remoteId !== void 0) seed.threadIdMap[item.remoteId] = mappingId;
|
|
236
249
|
seed.threadData[mappingId] = item;
|
|
@@ -238,7 +251,8 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
238
251
|
const { threadIds, archivedThreadIds, threadIdMap, threadData } = classifyThreads(threads, seed);
|
|
239
252
|
for (const item of carried) {
|
|
240
253
|
if (item.remoteId === void 0) continue;
|
|
241
|
-
const
|
|
254
|
+
const currentMappingId = createThreadMappingId(item.id);
|
|
255
|
+
const current = Object.hasOwn(threadData, currentMappingId) ? threadData[currentMappingId] : void 0;
|
|
242
256
|
if (current === void 0) continue;
|
|
243
257
|
if (current.status === "regular" && !threadIds.includes(current.id)) threadIds.push(current.id);
|
|
244
258
|
else if (current.status === "archived" && !archivedThreadIds.includes(current.id)) archivedThreadIds.push(current.id);
|
|
@@ -251,7 +265,7 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
251
265
|
archivedThreadIds,
|
|
252
266
|
threadIdMap,
|
|
253
267
|
threadData,
|
|
254
|
-
newThreadId: state.newThreadId !== void 0 && threadIdMap
|
|
268
|
+
newThreadId: state.newThreadId !== void 0 && !Object.hasOwn(threadIdMap, state.newThreadId) ? void 0 : state.newThreadId
|
|
255
269
|
};
|
|
256
270
|
if (getThreadData(nextState, this._mainThreadId) === void 0) {
|
|
257
271
|
const preservedDraft = nextState.newThreadId;
|
|
@@ -304,6 +318,9 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
304
318
|
get isLoading() {
|
|
305
319
|
return this._state.value.isLoading;
|
|
306
320
|
}
|
|
321
|
+
get loadError() {
|
|
322
|
+
return this._state.value.loadError;
|
|
323
|
+
}
|
|
307
324
|
get isLoadingMore() {
|
|
308
325
|
return this._state.value.isLoadingMore;
|
|
309
326
|
}
|
|
@@ -473,65 +490,28 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
473
490
|
externalId
|
|
474
491
|
};
|
|
475
492
|
}
|
|
493
|
+
this._requireAdapterGeneration(adapterGeneration);
|
|
494
|
+
const initializeTask = adapter.initialize(threadId);
|
|
495
|
+
let removedMappingId;
|
|
476
496
|
const { remoteId, externalId } = await this._state.optimisticUpdate({
|
|
477
|
-
execute: () =>
|
|
478
|
-
|
|
479
|
-
return adapter.initialize(threadId);
|
|
480
|
-
},
|
|
481
|
-
optimistic: (state) => {
|
|
482
|
-
return updateStatusReducer(state, threadId, "regular");
|
|
483
|
-
},
|
|
484
|
-
loading: (state, task) => {
|
|
485
|
-
const mappingId = createThreadMappingId(threadId);
|
|
486
|
-
return {
|
|
487
|
-
...state,
|
|
488
|
-
threadData: {
|
|
489
|
-
...state.threadData,
|
|
490
|
-
[mappingId]: {
|
|
491
|
-
...state.threadData[mappingId],
|
|
492
|
-
initializeTask: task
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
};
|
|
496
|
-
},
|
|
497
|
+
execute: () => initializeTask,
|
|
498
|
+
optimistic: (state) => promoteNewThreadReducer(state, threadId, initializeTask),
|
|
497
499
|
then: (state, { remoteId, externalId }) => {
|
|
498
500
|
if (adapterGeneration !== this._adapterGeneration) return state;
|
|
499
|
-
const
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
const orphan = listedMappingId !== void 0 && listedMappingId !== mappingId ? state.threadData[listedMappingId] : void 0;
|
|
504
|
-
const threadData = { ...state.threadData };
|
|
505
|
-
if (orphan !== void 0) delete threadData[listedMappingId];
|
|
506
|
-
threadData[mappingId] = {
|
|
507
|
-
...data,
|
|
508
|
-
initializeTask: Promise.resolve({
|
|
509
|
-
remoteId,
|
|
510
|
-
externalId
|
|
511
|
-
}),
|
|
512
|
-
remoteId,
|
|
513
|
-
externalId
|
|
514
|
-
};
|
|
515
|
-
const rewire = (ids) => orphan === void 0 ? ids : ids.filter((id) => id !== orphan.id);
|
|
516
|
-
return {
|
|
517
|
-
...state,
|
|
518
|
-
threadIds: rewire(state.threadIds),
|
|
519
|
-
archivedThreadIds: rewire(state.archivedThreadIds),
|
|
520
|
-
threadIdMap: {
|
|
521
|
-
...state.threadIdMap,
|
|
522
|
-
[remoteId]: mappingId
|
|
523
|
-
},
|
|
524
|
-
threadData
|
|
525
|
-
};
|
|
501
|
+
const reconciliation = reconcileInitializedThread(state, threadId, remoteId, externalId, threadId);
|
|
502
|
+
removedMappingId = reconciliation.removedMappingId;
|
|
503
|
+
if (removedMappingId === this._mainThreadId) this._mainThreadId = reconciliation.survivorMappingId;
|
|
504
|
+
return reconciliation.state;
|
|
526
505
|
}
|
|
527
506
|
});
|
|
528
507
|
this._requireAdapterGeneration(adapterGeneration);
|
|
508
|
+
if (removedMappingId !== void 0) this._hookManager.stopThreadRuntime(removedMappingId);
|
|
529
509
|
return {
|
|
530
510
|
remoteId,
|
|
531
511
|
externalId
|
|
532
512
|
};
|
|
533
513
|
};
|
|
534
|
-
generateTitle = async (threadId) => {
|
|
514
|
+
generateTitle = async (threadId, options) => {
|
|
535
515
|
this._requireAdapterSettled();
|
|
536
516
|
const adapter = this._options.adapter;
|
|
537
517
|
const adapterGeneration = this._adapterGeneration;
|
|
@@ -543,16 +523,58 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
543
523
|
const runtimeCore = this._hookManager.getThreadRuntimeCore(data.id);
|
|
544
524
|
if (!runtimeCore) return;
|
|
545
525
|
const messages = runtimeCore.messages.filter(isTitleSourceMessage);
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
526
|
+
await runThreadTitleGeneration({
|
|
527
|
+
states: this._titleStates,
|
|
528
|
+
threadId: data.id,
|
|
529
|
+
automatic: options?.automatic === true,
|
|
530
|
+
generate: async (onTitle) => {
|
|
531
|
+
const stream = await adapter.generateTitle(remoteId, messages);
|
|
532
|
+
this._requireAdapterGeneration(adapterGeneration);
|
|
533
|
+
await applyTitleStream(stream, onTitle);
|
|
534
|
+
},
|
|
535
|
+
rename: async (title) => {
|
|
536
|
+
this._requireAdapterGeneration(adapterGeneration);
|
|
537
|
+
await adapter.rename(remoteId, title);
|
|
538
|
+
},
|
|
539
|
+
applyTitle: async (title) => {
|
|
540
|
+
await this._state.optimisticUpdate({
|
|
541
|
+
execute: async () => {},
|
|
542
|
+
optimistic: (state) => {
|
|
543
|
+
if (adapterGeneration !== this._adapterGeneration) return state;
|
|
544
|
+
const currentData = getThreadData(state, data.id);
|
|
545
|
+
if (!currentData) return state;
|
|
546
|
+
return {
|
|
547
|
+
...state,
|
|
548
|
+
threadData: {
|
|
549
|
+
...state.threadData,
|
|
550
|
+
[currentData.id]: {
|
|
551
|
+
...currentData,
|
|
552
|
+
title
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
};
|
|
561
|
+
async rename(threadIdOrRemoteId, newTitle) {
|
|
562
|
+
this._requireAdapterSettled();
|
|
563
|
+
const adapter = this._options.adapter;
|
|
564
|
+
const adapterGeneration = this._adapterGeneration;
|
|
565
|
+
const data = this.getItemById(threadIdOrRemoteId);
|
|
566
|
+
if (!data) throw threadNotFoundError(threadIdOrRemoteId, "renaming it");
|
|
567
|
+
if (data.status === "new") throw threadStatusError(threadIdOrRemoteId, data.status, "be renamed");
|
|
568
|
+
const claim = startThreadTitleRename(this._titleStates, data.id, newTitle);
|
|
569
|
+
try {
|
|
570
|
+
const result = await this._state.optimisticUpdate({
|
|
571
|
+
execute: async () => {
|
|
572
|
+
const { remoteId } = await data.initializeTask;
|
|
573
|
+
this._requireAdapterGeneration(adapterGeneration);
|
|
574
|
+
return adapter.rename(remoteId, newTitle);
|
|
575
|
+
},
|
|
553
576
|
optimistic: (state) => {
|
|
554
|
-
|
|
555
|
-
const currentData = getThreadData(state, data.id);
|
|
577
|
+
const currentData = getThreadData(state, threadIdOrRemoteId);
|
|
556
578
|
if (!currentData) return state;
|
|
557
579
|
return {
|
|
558
580
|
...state,
|
|
@@ -566,36 +588,12 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
566
588
|
};
|
|
567
589
|
}
|
|
568
590
|
});
|
|
591
|
+
finishThreadTitleRename(this._titleStates, data.id, claim, true);
|
|
592
|
+
return result;
|
|
593
|
+
} catch (error) {
|
|
594
|
+
finishThreadTitleRename(this._titleStates, data.id, claim, false);
|
|
595
|
+
throw error;
|
|
569
596
|
}
|
|
570
|
-
};
|
|
571
|
-
async rename(threadIdOrRemoteId, newTitle) {
|
|
572
|
-
this._requireAdapterSettled();
|
|
573
|
-
const adapter = this._options.adapter;
|
|
574
|
-
const adapterGeneration = this._adapterGeneration;
|
|
575
|
-
const data = this.getItemById(threadIdOrRemoteId);
|
|
576
|
-
if (!data) throw threadNotFoundError(threadIdOrRemoteId, "renaming it");
|
|
577
|
-
if (data.status === "new") throw threadStatusError(threadIdOrRemoteId, data.status, "be renamed");
|
|
578
|
-
return this._state.optimisticUpdate({
|
|
579
|
-
execute: async () => {
|
|
580
|
-
const { remoteId } = await data.initializeTask;
|
|
581
|
-
this._requireAdapterGeneration(adapterGeneration);
|
|
582
|
-
return adapter.rename(remoteId, newTitle);
|
|
583
|
-
},
|
|
584
|
-
optimistic: (state) => {
|
|
585
|
-
const data = getThreadData(state, threadIdOrRemoteId);
|
|
586
|
-
if (!data) return state;
|
|
587
|
-
return {
|
|
588
|
-
...state,
|
|
589
|
-
threadData: {
|
|
590
|
-
...state.threadData,
|
|
591
|
-
[data.id]: {
|
|
592
|
-
...data,
|
|
593
|
-
title: newTitle
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
};
|
|
597
|
-
}
|
|
598
|
-
});
|
|
599
597
|
}
|
|
600
598
|
async updateCustom(threadIdOrRemoteId, custom) {
|
|
601
599
|
this._requireAdapterSettled();
|
|
@@ -695,8 +693,7 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
695
693
|
if (data.status !== "regular" && data.status !== "archived") throw threadStatusError(threadIdOrRemoteId, data.status, "be deleted");
|
|
696
694
|
await this._ensureThreadIsNotMain(data.id);
|
|
697
695
|
this._requireAdapterGeneration(adapterGeneration);
|
|
698
|
-
this.
|
|
699
|
-
return this._state.optimisticUpdate({
|
|
696
|
+
const result = await this._state.optimisticUpdate({
|
|
700
697
|
execute: async () => {
|
|
701
698
|
const { remoteId } = await data.initializeTask;
|
|
702
699
|
this._requireAdapterGeneration(adapterGeneration);
|
|
@@ -706,6 +703,9 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
|
|
|
706
703
|
return updateStatusReducer(state, data.id, "deleted");
|
|
707
704
|
}
|
|
708
705
|
});
|
|
706
|
+
this._hookManager.stopThreadRuntime(data.id);
|
|
707
|
+
clearThreadTitleState(this._titleStates, data.id);
|
|
708
|
+
return result;
|
|
709
709
|
}
|
|
710
710
|
__internal_dispose() {
|
|
711
711
|
this._hookManager.__internal_dispose();
|