@assistant-ui/react 0.7.8 → 0.7.10
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/api/AssistantRuntime.d.ts +4 -5
- package/dist/api/AssistantRuntime.d.ts.map +1 -1
- package/dist/api/AssistantRuntime.js +19 -22
- package/dist/api/AssistantRuntime.js.map +1 -1
- package/dist/api/AssistantRuntime.mjs +16 -19
- package/dist/api/AssistantRuntime.mjs.map +1 -1
- package/dist/api/ComposerRuntime.d.ts.map +1 -1
- package/dist/api/ComposerRuntime.js +4 -4
- package/dist/api/MessageRuntime.js +7 -7
- package/dist/api/ThreadListItemRuntime.d.ts +11 -2
- package/dist/api/ThreadListItemRuntime.d.ts.map +1 -1
- package/dist/api/ThreadListItemRuntime.js +16 -5
- package/dist/api/ThreadListItemRuntime.js.map +1 -1
- package/dist/api/ThreadListItemRuntime.mjs +16 -5
- package/dist/api/ThreadListItemRuntime.mjs.map +1 -1
- package/dist/api/ThreadListRuntime.d.ts +3 -0
- package/dist/api/ThreadListRuntime.d.ts.map +1 -1
- package/dist/api/ThreadListRuntime.js +31 -12
- package/dist/api/ThreadListRuntime.js.map +1 -1
- package/dist/api/ThreadListRuntime.mjs +27 -8
- package/dist/api/ThreadListRuntime.mjs.map +1 -1
- package/dist/api/ThreadRuntime.d.ts +10 -7
- package/dist/api/ThreadRuntime.d.ts.map +1 -1
- package/dist/api/ThreadRuntime.js +22 -12
- package/dist/api/ThreadRuntime.js.map +1 -1
- package/dist/api/ThreadRuntime.mjs +16 -6
- package/dist/api/ThreadRuntime.mjs.map +1 -1
- package/dist/api/subscribable/LazyMemoizeSubject.js +2 -2
- package/dist/api/subscribable/NestedSubscriptionSubject.js +1 -1
- package/dist/api/subscribable/ShallowMemoizeSubject.js +3 -3
- package/dist/context/index.js +6 -6
- package/dist/context/index.js.map +1 -1
- package/dist/context/providers/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/context/providers/AssistantRuntimeProvider.js +12 -5
- package/dist/context/providers/AssistantRuntimeProvider.js.map +1 -1
- package/dist/context/providers/AssistantRuntimeProvider.mjs +8 -1
- package/dist/context/providers/AssistantRuntimeProvider.mjs.map +1 -1
- package/dist/context/providers/AttachmentRuntimeProvider.js +2 -2
- package/dist/context/providers/ContentPartRuntimeProvider.js +2 -2
- package/dist/context/providers/MessageRuntimeProvider.js +3 -3
- package/dist/context/providers/TextContentPartProvider.js +3 -3
- package/dist/context/providers/ThreadListItemRuntimeProvider.js +2 -2
- package/dist/context/providers/ThreadRuntimeProvider.d.ts +2 -0
- package/dist/context/providers/ThreadRuntimeProvider.d.ts.map +1 -1
- package/dist/context/providers/ThreadRuntimeProvider.js +6 -5
- package/dist/context/providers/ThreadRuntimeProvider.js.map +1 -1
- package/dist/context/providers/ThreadRuntimeProvider.mjs +3 -2
- package/dist/context/providers/ThreadRuntimeProvider.mjs.map +1 -1
- package/dist/context/providers/index.js +2 -2
- package/dist/context/react/AssistantContext.js +2 -2
- package/dist/context/react/AttachmentContext.js +1 -1
- package/dist/context/react/ComposerContext.js +3 -3
- package/dist/context/react/ContentPartContext.js +2 -2
- package/dist/context/react/MessageContext.js +2 -2
- package/dist/context/react/ThreadContext.js +2 -2
- package/dist/context/react/ThreadListItemContext.js +2 -2
- package/dist/context/react/index.js +6 -6
- package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
- package/dist/edge.js +1 -1
- package/dist/index.js +17 -17
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +1 -2
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +10 -13
- package/dist/internal.js.map +1 -1
- package/dist/internal.mjs +0 -2
- package/dist/internal.mjs.map +1 -1
- package/dist/model-config/index.js +6 -6
- package/dist/model-config/makeAssistantTool.js +1 -1
- package/dist/model-config/makeAssistantToolUI.js +1 -1
- package/dist/model-config/useAssistantInstructions.js +1 -1
- package/dist/model-config/useAssistantTool.js +1 -1
- package/dist/model-config/useAssistantToolUI.js +1 -1
- package/dist/primitive-hooks/actionBar/useActionBarCopy.js +2 -2
- package/dist/primitive-hooks/actionBar/useActionBarEdit.js +1 -1
- package/dist/primitive-hooks/actionBar/useActionBarFeedbackNegative.js +1 -1
- package/dist/primitive-hooks/actionBar/useActionBarFeedbackPositive.js +1 -1
- package/dist/primitive-hooks/actionBar/useActionBarReload.js +3 -3
- package/dist/primitive-hooks/actionBar/useActionBarSpeak.js +1 -1
- package/dist/primitive-hooks/actionBar/useActionBarStopSpeaking.js +1 -1
- package/dist/primitive-hooks/attachment/useAttachmentRemove.js +1 -1
- package/dist/primitive-hooks/branchPicker/useBranchPickerCount.js +1 -1
- package/dist/primitive-hooks/branchPicker/useBranchPickerNext.js +1 -1
- package/dist/primitive-hooks/branchPicker/useBranchPickerNumber.js +1 -1
- package/dist/primitive-hooks/branchPicker/useBranchPickerPrevious.js +1 -1
- package/dist/primitive-hooks/composer/useComposerAddAttachment.js +1 -1
- package/dist/primitive-hooks/composer/useComposerCancel.js +1 -1
- package/dist/primitive-hooks/composer/useComposerIf.js +1 -1
- package/dist/primitive-hooks/composer/useComposerSend.js +3 -3
- package/dist/primitive-hooks/contentPart/index.js +3 -3
- package/dist/primitive-hooks/contentPart/useContentPartDisplay.js +1 -1
- package/dist/primitive-hooks/contentPart/useContentPartImage.js +1 -1
- package/dist/primitive-hooks/contentPart/useContentPartText.js +1 -1
- package/dist/primitive-hooks/index.js +2 -2
- package/dist/primitive-hooks/index.js.map +1 -1
- package/dist/primitive-hooks/message/useMessageIf.js +2 -2
- package/dist/primitive-hooks/thread/useThreadEmpty.js +1 -1
- package/dist/primitive-hooks/thread/useThreadIf.js +1 -1
- package/dist/primitive-hooks/thread/useThreadScrollToBottom.js +2 -2
- package/dist/primitive-hooks/thread/useThreadSuggestion.js +2 -2
- package/dist/primitive-hooks/thread/useThreadViewportAutoScroll.js +5 -5
- package/dist/primitives/actionBar/ActionBarCopy.js +2 -2
- package/dist/primitives/actionBar/ActionBarEdit.js +2 -2
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +2 -2
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +2 -2
- package/dist/primitives/actionBar/ActionBarReload.js +2 -2
- package/dist/primitives/actionBar/ActionBarRoot.js +1 -1
- package/dist/primitives/actionBar/ActionBarSpeak.js +2 -2
- package/dist/primitives/actionBar/ActionBarStopSpeaking.js +1 -1
- package/dist/primitives/actionBar/index.js +8 -8
- package/dist/primitives/actionBar/useActionBarFloatStatus.js +3 -3
- package/dist/primitives/assistantModal/AssistantModalAnchor.js +1 -1
- package/dist/primitives/assistantModal/AssistantModalContent.js +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.js +2 -2
- package/dist/primitives/assistantModal/AssistantModalTrigger.js +1 -1
- package/dist/primitives/assistantModal/index.js +4 -4
- package/dist/primitives/attachment/AttachmentName.js +1 -1
- package/dist/primitives/attachment/AttachmentRemove.js +2 -2
- package/dist/primitives/attachment/AttachmentThumb.js +1 -1
- package/dist/primitives/attachment/index.js +4 -4
- package/dist/primitives/branchPicker/BranchPickerCount.js +1 -1
- package/dist/primitives/branchPicker/BranchPickerNext.js +2 -2
- package/dist/primitives/branchPicker/BranchPickerNumber.js +1 -1
- package/dist/primitives/branchPicker/BranchPickerPrevious.js +2 -2
- package/dist/primitives/branchPicker/BranchPickerRoot.js +1 -1
- package/dist/primitives/branchPicker/index.js +5 -5
- package/dist/primitives/composer/ComposerAddAttachment.js +2 -2
- package/dist/primitives/composer/ComposerAttachments.js +3 -3
- package/dist/primitives/composer/ComposerCancel.js +2 -2
- package/dist/primitives/composer/ComposerIf.js +1 -1
- package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerInput.js +6 -4
- package/dist/primitives/composer/ComposerInput.js.map +1 -1
- package/dist/primitives/composer/ComposerInput.mjs +3 -1
- package/dist/primitives/composer/ComposerInput.mjs.map +1 -1
- package/dist/primitives/composer/ComposerRoot.js +1 -1
- package/dist/primitives/composer/ComposerSend.js +2 -2
- package/dist/primitives/composer/index.js +7 -7
- package/dist/primitives/contentPart/ContentPartDisplay.js +1 -1
- package/dist/primitives/contentPart/ContentPartImage.js +1 -1
- package/dist/primitives/contentPart/ContentPartInProgress.js +1 -1
- package/dist/primitives/contentPart/ContentPartText.js +2 -2
- package/dist/primitives/contentPart/index.js +4 -4
- package/dist/primitives/index.js +10 -10
- package/dist/primitives/message/MessageAttachments.js +3 -3
- package/dist/primitives/message/MessageContent.js +8 -8
- package/dist/primitives/message/MessageIf.js +1 -1
- package/dist/primitives/message/MessageRoot.js +2 -2
- package/dist/primitives/message/index.js +4 -4
- package/dist/primitives/thread/ThreadEmpty.js +1 -1
- package/dist/primitives/thread/ThreadIf.js +1 -1
- package/dist/primitives/thread/ThreadMessages.js +3 -3
- package/dist/primitives/thread/ThreadScrollToBottom.js +2 -2
- package/dist/primitives/thread/ThreadSuggestion.js +2 -2
- package/dist/primitives/thread/ThreadViewport.js +1 -1
- package/dist/primitives/thread/index.js +7 -7
- package/dist/primitives/threadList/ThreadListItems.js +2 -2
- package/dist/primitives/threadList/ThreadListNew.js +2 -2
- package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
- package/dist/primitives/threadList/ThreadListNew.mjs +1 -1
- package/dist/primitives/threadList/ThreadListNew.mjs.map +1 -1
- package/dist/primitives/threadList/index.js +2 -2
- package/dist/primitives/threadListItem/ThreadListItemArchive.js +2 -2
- package/dist/primitives/threadListItem/ThreadListItemDelete.js +2 -2
- package/dist/primitives/threadListItem/ThreadListItemRoot.js +2 -2
- package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.mjs +1 -1
- package/dist/primitives/threadListItem/ThreadListItemRoot.mjs.map +1 -1
- package/dist/primitives/threadListItem/ThreadListItemTitle.js +1 -1
- package/dist/primitives/threadListItem/ThreadListItemTrigger.js +2 -2
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.js +2 -2
- package/dist/primitives/threadListItem/index.js +6 -6
- package/dist/runtimes/attachment/index.js +3 -3
- package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.js +2 -2
- package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.js +1 -1
- package/dist/runtimes/core/BaseAssistantRuntimeCore.js +1 -1
- package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts +2 -4
- package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/BaseThreadRuntimeCore.js +5 -9
- package/dist/runtimes/core/BaseThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/core/BaseThreadRuntimeCore.mjs +1 -5
- package/dist/runtimes/core/BaseThreadRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/core/ThreadListRuntimeCore.d.ts +14 -6
- package/dist/runtimes/core/ThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/ThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/core/ThreadRuntimeCore.d.ts +1 -15
- package/dist/runtimes/core/ThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/core/ThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/core/index.d.ts +1 -1
- package/dist/runtimes/core/index.d.ts.map +1 -1
- package/dist/runtimes/core/index.js.map +1 -1
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js +6 -6
- package/dist/runtimes/dangerous-in-browser/index.js +1 -1
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.js +3 -3
- package/dist/runtimes/edge/EdgeChatAdapter.js +7 -7
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js +1 -1
- package/dist/runtimes/edge/converters/fromCoreMessage.js +1 -1
- package/dist/runtimes/edge/converters/index.js +6 -6
- package/dist/runtimes/edge/createEdgeRuntimeAPI.js +9 -9
- package/dist/runtimes/edge/index.js +6 -6
- package/dist/runtimes/edge/index.js.map +1 -1
- package/dist/runtimes/edge/partial-json/parse-partial-json.js +1 -1
- package/dist/runtimes/edge/streams/assistantDecoderStream.js +1 -1
- package/dist/runtimes/edge/streams/assistantEncoderStream.js +1 -1
- package/dist/runtimes/edge/streams/runResultStream.js +1 -1
- package/dist/runtimes/edge/streams/utils/index.js +2 -2
- package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.js +2 -2
- package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.d.ts +1 -1
- package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.d.ts.map +1 -1
- package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.js +1 -1
- package/dist/runtimes/edge/useEdgeRuntime.js +3 -3
- package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +20 -3
- package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreAdapter.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.d.ts +0 -1
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.js +6 -13
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.mjs +3 -10
- package/dist/runtimes/external-store/ExternalStoreRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts +9 -11
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js +19 -27
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs +19 -27
- package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts +2 -2
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js +10 -13
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.mjs +4 -7
- package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/external-store/external-message-converter.js +4 -4
- package/dist/runtimes/external-store/index.js +3 -3
- package/dist/runtimes/external-store/useExternalStoreRuntime.js +3 -3
- package/dist/runtimes/index.js +16 -16
- package/dist/runtimes/index.js.map +1 -1
- package/dist/runtimes/local/LocalRuntimeCore.d.ts +0 -1
- package/dist/runtimes/local/LocalRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalRuntimeCore.js +7 -16
- package/dist/runtimes/local/LocalRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/LocalRuntimeCore.mjs +3 -12
- package/dist/runtimes/local/LocalRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts +17 -15
- package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.js +95 -93
- package/dist/runtimes/local/LocalThreadListRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs +94 -92
- package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts +4 -3
- package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.js +15 -14
- package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.mjs +11 -10
- package/dist/runtimes/local/LocalThreadRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/local/index.js +1 -1
- package/dist/runtimes/local/useLocalRuntime.d.ts.map +1 -1
- package/dist/runtimes/local/useLocalRuntime.js +7 -10
- package/dist/runtimes/local/useLocalRuntime.js.map +1 -1
- package/dist/runtimes/local/useLocalRuntime.mjs +4 -7
- package/dist/runtimes/local/useLocalRuntime.mjs.map +1 -1
- package/dist/runtimes/speech/index.js +1 -1
- package/dist/runtimes/utils/MessageRepository.js +2 -2
- package/dist/styles/index.css +12 -0
- package/dist/styles/index.css.map +1 -1
- package/dist/styles/tailwindcss/thread.css +1 -1
- package/dist/styles/tailwindcss/thread.css.json +1 -1
- package/dist/ui/assistant-action-bar.js +5 -5
- package/dist/ui/assistant-message.js +7 -7
- package/dist/ui/assistant-modal.js +5 -5
- package/dist/ui/attachment-ui.js +7 -7
- package/dist/ui/base/avatar.js +1 -1
- package/dist/ui/base/index.js +5 -5
- package/dist/ui/base/tooltip-icon-button.js +2 -2
- package/dist/ui/base/tooltip.js +1 -1
- package/dist/ui/branch-picker.js +5 -5
- package/dist/ui/composer.js +7 -7
- package/dist/ui/content-part.js +2 -2
- package/dist/ui/edit-composer.js +4 -4
- package/dist/ui/index.d.ts +4 -4
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +15 -15
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +18 -18
- package/dist/ui/index.mjs.map +1 -1
- package/dist/ui/thread-config.d.ts +1 -1
- package/dist/ui/thread-config.d.ts.map +1 -1
- package/dist/ui/thread-config.js +2 -2
- package/dist/ui/thread-config.js.map +1 -1
- package/dist/ui/thread-config.mjs.map +1 -1
- package/dist/ui/thread-list-item.d.ts +2 -11
- package/dist/ui/thread-list-item.d.ts.map +1 -1
- package/dist/ui/thread-list-item.js +20 -33
- package/dist/ui/thread-list-item.js.map +1 -1
- package/dist/ui/thread-list-item.mjs +16 -29
- package/dist/ui/thread-list-item.mjs.map +1 -1
- package/dist/ui/thread-list.d.ts +10 -3
- package/dist/ui/thread-list.d.ts.map +1 -1
- package/dist/ui/thread-list.js +8 -9
- package/dist/ui/thread-list.js.map +1 -1
- package/dist/ui/thread-list.mjs +3 -4
- package/dist/ui/thread-list.mjs.map +1 -1
- package/dist/ui/thread-welcome.js +5 -5
- package/dist/ui/thread.js +10 -10
- package/dist/ui/user-action-bar.js +5 -5
- package/dist/ui/user-message.js +6 -6
- package/dist/utils/ProxyConfigProvider.js +1 -1
- package/dist/utils/combined/createCombinedStore.d.ts.map +1 -1
- package/dist/utils/combined/useCombinedStore.d.ts.map +1 -1
- package/dist/utils/combined/useCombinedStore.js +1 -1
- package/dist/utils/hooks/useOnResizeContent.js +1 -1
- package/dist/utils/hooks/useOnScrollToBottom.js +1 -1
- package/dist/utils/smooth/SmoothContext.js +2 -2
- package/dist/utils/smooth/index.js +3 -3
- package/dist/utils/smooth/useSmooth.js +3 -3
- package/package.json +1 -1
- package/src/api/AssistantRuntime.ts +21 -25
- package/src/api/ThreadListItemRuntime.ts +36 -7
- package/src/api/ThreadListRuntime.ts +31 -9
- package/src/api/ThreadRuntime.ts +38 -10
- package/src/context/providers/AssistantRuntimeProvider.tsx +4 -1
- package/src/context/providers/ThreadRuntimeProvider.tsx +9 -2
- package/src/internal.ts +1 -1
- package/src/primitives/composer/ComposerInput.tsx +3 -1
- package/src/primitives/threadList/ThreadListNew.tsx +1 -1
- package/src/primitives/threadListItem/ThreadListItemRoot.tsx +1 -1
- package/src/runtimes/core/BaseThreadRuntimeCore.tsx +1 -9
- package/src/runtimes/core/ThreadListRuntimeCore.tsx +16 -7
- package/src/runtimes/core/ThreadRuntimeCore.tsx +1 -19
- package/src/runtimes/core/index.ts +0 -1
- package/src/runtimes/external-store/ExternalStoreAdapter.tsx +20 -3
- package/src/runtimes/external-store/ExternalStoreRuntimeCore.tsx +5 -12
- package/src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx +22 -35
- package/src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx +3 -7
- package/src/runtimes/local/LocalRuntimeCore.tsx +7 -14
- package/src/runtimes/local/LocalThreadListRuntimeCore.tsx +110 -103
- package/src/runtimes/local/LocalThreadRuntimeCore.tsx +11 -10
- package/src/runtimes/local/useLocalRuntime.tsx +5 -12
- package/src/styles/tailwindcss/thread.css +1 -1
- package/src/ui/index.ts +6 -6
- package/src/ui/thread-config.tsx +1 -1
- package/src/ui/thread-list-item.tsx +24 -32
- package/src/ui/thread-list.tsx +13 -7
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.d.ts +0 -19
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.d.ts.map +0 -1
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.js +0 -87
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.js.map +0 -1
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.mjs +0 -62
- package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.mjs.map +0 -1
- package/src/runtimes/local/LocalThreadMetadataRuntimeCore.tsx +0 -79
|
@@ -43,30 +43,12 @@ export type SubmittedFeedback = {
|
|
|
43
43
|
readonly type: "negative" | "positive";
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
export type ThreadMetadata = Readonly<{
|
|
47
|
-
readonly threadId: string;
|
|
48
|
-
readonly state: "archived" | "regular" | "new" | "deleted";
|
|
49
|
-
readonly title?: string | undefined;
|
|
50
|
-
}>;
|
|
51
|
-
|
|
52
46
|
export type ThreadRuntimeEventType =
|
|
53
|
-
| "switched-to"
|
|
54
|
-
| "switched-away"
|
|
55
47
|
| "run-start"
|
|
48
|
+
| "initialize"
|
|
56
49
|
| "model-config-update";
|
|
57
50
|
|
|
58
|
-
export type ThreadMetadataRuntimeCore = ThreadMetadata & {
|
|
59
|
-
create(title?: string): Promise<void>;
|
|
60
|
-
rename(newTitle: string): Promise<void>;
|
|
61
|
-
archive(): Promise<void>;
|
|
62
|
-
unarchive(): Promise<void>;
|
|
63
|
-
delete(): Promise<void>;
|
|
64
|
-
subscribe(callback: () => void): Unsubscribe;
|
|
65
|
-
};
|
|
66
|
-
|
|
67
51
|
export type ThreadRuntimeCore = Readonly<{
|
|
68
|
-
metadata: ThreadMetadataRuntimeCore;
|
|
69
|
-
|
|
70
52
|
getMessageById: (messageId: string) =>
|
|
71
53
|
| {
|
|
72
54
|
parentId: string | null;
|
|
@@ -2,18 +2,32 @@ import { AppendMessage, ThreadMessage } from "../../types";
|
|
|
2
2
|
import { AttachmentAdapter } from "../attachment";
|
|
3
3
|
import {
|
|
4
4
|
AddToolResultOptions,
|
|
5
|
-
ThreadMetadata,
|
|
6
5
|
ThreadSuggestion,
|
|
7
6
|
} from "../core/ThreadRuntimeCore";
|
|
8
7
|
import { FeedbackAdapter } from "../feedback/FeedbackAdapter";
|
|
9
8
|
import { SpeechSynthesisAdapter } from "../speech/SpeechAdapterTypes";
|
|
10
9
|
import { ThreadMessageLike } from "./ThreadMessageLike";
|
|
11
10
|
|
|
11
|
+
export type ExternalStoreThreadData<TState extends "regular" | "archived"> = {
|
|
12
|
+
state: TState;
|
|
13
|
+
threadId: string;
|
|
14
|
+
title?: string | undefined;
|
|
15
|
+
};
|
|
16
|
+
|
|
12
17
|
export type ExternalStoreThreadListAdapter = {
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated This API is still under active development and might change without notice.
|
|
20
|
+
*/
|
|
13
21
|
threadId?: string | undefined;
|
|
14
|
-
threads?: readonly
|
|
15
|
-
archivedThreads?: readonly
|
|
22
|
+
threads?: readonly ExternalStoreThreadData<"regular">[] | undefined;
|
|
23
|
+
archivedThreads?: readonly ExternalStoreThreadData<"archived">[] | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* @deprecated This API is still under active development and might change without notice.
|
|
26
|
+
*/
|
|
16
27
|
onSwitchToNewThread?: (() => Promise<void> | void) | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* @deprecated This API is still under active development and might change without notice.
|
|
30
|
+
*/
|
|
17
31
|
onSwitchToThread?: ((threadId: string) => Promise<void> | void) | undefined;
|
|
18
32
|
onRename?: (
|
|
19
33
|
threadId: string,
|
|
@@ -54,6 +68,9 @@ type ExternalStoreAdapterBase<T> = {
|
|
|
54
68
|
attachments?: AttachmentAdapter | undefined;
|
|
55
69
|
speech?: SpeechSynthesisAdapter | undefined;
|
|
56
70
|
feedback?: FeedbackAdapter | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* @deprecated This API is still under active development and might change without notice.
|
|
73
|
+
*/
|
|
57
74
|
threadList?: ExternalStoreThreadListAdapter | undefined;
|
|
58
75
|
}
|
|
59
76
|
| undefined;
|
|
@@ -12,25 +12,18 @@ const getThreadListAdapter = (store: ExternalStoreAdapter<any>) => {
|
|
|
12
12
|
export class ExternalStoreRuntimeCore extends BaseAssistantRuntimeCore {
|
|
13
13
|
public readonly threadList;
|
|
14
14
|
|
|
15
|
-
private _store: ExternalStoreAdapter<any>;
|
|
16
|
-
|
|
17
15
|
constructor(store: ExternalStoreAdapter<any>) {
|
|
18
16
|
super();
|
|
19
|
-
this._store = store;
|
|
20
17
|
this.threadList = new ExternalStoreThreadListRuntimeCore(
|
|
21
18
|
getThreadListAdapter(store),
|
|
22
|
-
(
|
|
23
|
-
new ExternalStoreThreadRuntimeCore(
|
|
24
|
-
this._proxyConfigProvider,
|
|
25
|
-
threadId,
|
|
26
|
-
this._store,
|
|
27
|
-
),
|
|
19
|
+
() =>
|
|
20
|
+
new ExternalStoreThreadRuntimeCore(this._proxyConfigProvider, store),
|
|
28
21
|
);
|
|
29
22
|
}
|
|
30
23
|
|
|
31
24
|
public setStore(store: ExternalStoreAdapter<any>) {
|
|
32
|
-
|
|
33
|
-
this.threadList.
|
|
34
|
-
this.threadList.
|
|
25
|
+
// Update the thread list adapter and propagate store changes to the main thread
|
|
26
|
+
this.threadList.__internal_setAdapter(getThreadListAdapter(store));
|
|
27
|
+
this.threadList.getMainThreadRuntimeCore().__internal_setStore(store);
|
|
35
28
|
}
|
|
36
29
|
}
|
|
@@ -3,9 +3,7 @@ import { ExternalStoreThreadRuntimeCore } from "./ExternalStoreThreadRuntimeCore
|
|
|
3
3
|
import { ThreadListRuntimeCore } from "../core/ThreadListRuntimeCore";
|
|
4
4
|
import { ExternalStoreThreadListAdapter } from "./ExternalStoreAdapter";
|
|
5
5
|
|
|
6
|
-
export type ExternalStoreThreadFactory = (
|
|
7
|
-
threadId: string,
|
|
8
|
-
) => ExternalStoreThreadRuntimeCore;
|
|
6
|
+
export type ExternalStoreThreadFactory = () => ExternalStoreThreadRuntimeCore;
|
|
9
7
|
|
|
10
8
|
const EMPTY_ARRAY = Object.freeze([]);
|
|
11
9
|
const DEFAULT_THREAD_ID = "DEFAULT_THREAD_ID";
|
|
@@ -13,35 +11,40 @@ const DEFAULT_THREAD_ID = "DEFAULT_THREAD_ID";
|
|
|
13
11
|
export class ExternalStoreThreadListRuntimeCore
|
|
14
12
|
implements ThreadListRuntimeCore
|
|
15
13
|
{
|
|
16
|
-
private
|
|
17
|
-
private
|
|
14
|
+
private _mainThreadId: string = DEFAULT_THREAD_ID;
|
|
15
|
+
private _threads: readonly string[] = EMPTY_ARRAY;
|
|
16
|
+
private _archivedThreads: readonly string[] = EMPTY_ARRAY;
|
|
18
17
|
|
|
19
|
-
public get
|
|
18
|
+
public get newThreadId() {
|
|
20
19
|
return undefined;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
|
-
public get
|
|
22
|
+
public get threadIds() {
|
|
24
23
|
return this._threads;
|
|
25
24
|
}
|
|
26
25
|
|
|
27
|
-
public get
|
|
26
|
+
public get archivedThreadIds() {
|
|
28
27
|
return this._archivedThreads;
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
private _mainThread: ExternalStoreThreadRuntimeCore;
|
|
32
31
|
|
|
33
|
-
public get
|
|
34
|
-
return this.
|
|
32
|
+
public get mainThreadId() {
|
|
33
|
+
return this._mainThreadId;
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
constructor(
|
|
38
37
|
private adapter: ExternalStoreThreadListAdapter = {},
|
|
39
38
|
private threadFactory: ExternalStoreThreadFactory,
|
|
40
39
|
) {
|
|
41
|
-
this._mainThread = this.threadFactory(
|
|
40
|
+
this._mainThread = this.threadFactory();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public getMainThreadRuntimeCore() {
|
|
44
|
+
return this._mainThread;
|
|
42
45
|
}
|
|
43
46
|
|
|
44
|
-
public
|
|
47
|
+
public getItemById(threadId: string) {
|
|
45
48
|
for (const thread of this.adapter.threads ?? []) {
|
|
46
49
|
if (thread.threadId === threadId) return thread;
|
|
47
50
|
}
|
|
@@ -51,7 +54,7 @@ export class ExternalStoreThreadListRuntimeCore
|
|
|
51
54
|
return undefined;
|
|
52
55
|
}
|
|
53
56
|
|
|
54
|
-
public
|
|
57
|
+
public __internal_setAdapter(adapter: ExternalStoreThreadListAdapter) {
|
|
55
58
|
const previousAdapter = this.adapter;
|
|
56
59
|
this.adapter = adapter;
|
|
57
60
|
|
|
@@ -72,42 +75,26 @@ export class ExternalStoreThreadListRuntimeCore
|
|
|
72
75
|
return;
|
|
73
76
|
}
|
|
74
77
|
|
|
75
|
-
if (
|
|
78
|
+
if (previousThreads !== newThreads) {
|
|
76
79
|
this._threads =
|
|
77
80
|
this.adapter.threads?.map((t) => t.threadId) ?? EMPTY_ARRAY;
|
|
78
81
|
}
|
|
79
82
|
|
|
80
|
-
if (
|
|
83
|
+
if (previousArchivedThreads !== newArchivedThreads) {
|
|
81
84
|
this._archivedThreads =
|
|
82
85
|
this.adapter.archivedThreads?.map((t) => t.threadId) ?? EMPTY_ARRAY;
|
|
83
86
|
}
|
|
84
87
|
|
|
85
|
-
if (
|
|
86
|
-
this.
|
|
87
|
-
this._mainThread = this.threadFactory(
|
|
88
|
-
this._mainThread._notifyEventSubscribers("switched-to");
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const previousMainState = this._mainThread.metadata.state;
|
|
92
|
-
const mainState = this.archivedThreads.includes(
|
|
93
|
-
this._mainThread.metadata.threadId,
|
|
94
|
-
)
|
|
95
|
-
? "archived"
|
|
96
|
-
: "regular";
|
|
97
|
-
|
|
98
|
-
if (previousMainState !== mainState) {
|
|
99
|
-
if (mainState === "archived") {
|
|
100
|
-
this._mainThread.metadata.archive();
|
|
101
|
-
} else {
|
|
102
|
-
this._mainThread.metadata.unarchive();
|
|
103
|
-
}
|
|
88
|
+
if (previousThreadId !== newThreadId) {
|
|
89
|
+
this._mainThreadId = newThreadId;
|
|
90
|
+
this._mainThread = this.threadFactory();
|
|
104
91
|
}
|
|
105
92
|
|
|
106
93
|
this._notifySubscribers();
|
|
107
94
|
}
|
|
108
95
|
|
|
109
96
|
public async switchToThread(threadId: string): Promise<void> {
|
|
110
|
-
if (this.
|
|
97
|
+
if (this._mainThreadId === threadId) return;
|
|
111
98
|
const onSwitchToThread = this.adapter.onSwitchToThread;
|
|
112
99
|
if (!onSwitchToThread)
|
|
113
100
|
throw new Error(
|
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
ThreadRuntimeCore,
|
|
19
19
|
} from "../core/ThreadRuntimeCore";
|
|
20
20
|
import { BaseThreadRuntimeCore } from "../core/BaseThreadRuntimeCore";
|
|
21
|
-
import { LocalThreadMetadataRuntimeCore } from "../local/LocalThreadMetadataRuntimeCore";
|
|
22
21
|
|
|
23
22
|
const EMPTY_ARRAY = Object.freeze([]);
|
|
24
23
|
|
|
@@ -77,16 +76,13 @@ export class ExternalStoreThreadRuntimeCore
|
|
|
77
76
|
|
|
78
77
|
constructor(
|
|
79
78
|
configProvider: ModelConfigProvider,
|
|
80
|
-
threadId: string,
|
|
81
79
|
store: ExternalStoreAdapter<any>,
|
|
82
80
|
) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
super(configProvider, metadata);
|
|
86
|
-
this.setStore(store);
|
|
81
|
+
super(configProvider);
|
|
82
|
+
this.__internal_setStore(store);
|
|
87
83
|
}
|
|
88
84
|
|
|
89
|
-
public
|
|
85
|
+
public __internal_setStore(store: ExternalStoreAdapter<any>) {
|
|
90
86
|
if (this._store === store) return;
|
|
91
87
|
|
|
92
88
|
const isRunning = store.isRunning ?? false;
|
|
@@ -31,10 +31,9 @@ export class LocalRuntimeCore extends BaseAssistantRuntimeCore {
|
|
|
31
31
|
|
|
32
32
|
this._options = options;
|
|
33
33
|
|
|
34
|
-
this.threadList = new LocalThreadListRuntimeCore((
|
|
34
|
+
this.threadList = new LocalThreadListRuntimeCore((data) => {
|
|
35
35
|
const thread = new LocalThreadRuntimeCore(
|
|
36
36
|
this._proxyConfigProvider,
|
|
37
|
-
threadId,
|
|
38
37
|
this._options,
|
|
39
38
|
);
|
|
40
39
|
thread.import(data);
|
|
@@ -42,18 +41,12 @@ export class LocalRuntimeCore extends BaseAssistantRuntimeCore {
|
|
|
42
41
|
});
|
|
43
42
|
|
|
44
43
|
if (initialMessages) {
|
|
45
|
-
this.threadList
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
this.threadList
|
|
45
|
+
.getMainThreadRuntimeCore()
|
|
46
|
+
.import(getExportFromInitialMessages(initialMessages));
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
public setOptions(options: LocalRuntimeOptionsBase) {
|
|
52
|
-
this._options = options;
|
|
53
|
-
|
|
54
|
-
this.threadList.mainThread.setOptions(options);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
50
|
public reset({
|
|
58
51
|
initialMessages,
|
|
59
52
|
}: {
|
|
@@ -62,8 +55,8 @@ export class LocalRuntimeCore extends BaseAssistantRuntimeCore {
|
|
|
62
55
|
this.threadList.switchToNewThread();
|
|
63
56
|
if (!initialMessages) return;
|
|
64
57
|
|
|
65
|
-
this.threadList
|
|
66
|
-
|
|
67
|
-
|
|
58
|
+
this.threadList
|
|
59
|
+
.getMainThreadRuntimeCore()
|
|
60
|
+
.import(getExportFromInitialMessages(initialMessages));
|
|
68
61
|
}
|
|
69
62
|
}
|
|
@@ -3,206 +3,213 @@ import { ThreadListRuntimeCore } from "../core/ThreadListRuntimeCore";
|
|
|
3
3
|
import { ExportedMessageRepository } from "../utils/MessageRepository";
|
|
4
4
|
import { generateId } from "../../utils/idUtils";
|
|
5
5
|
import { LocalThreadRuntimeCore } from "./LocalThreadRuntimeCore";
|
|
6
|
-
import { ThreadMetadata } from "../core/ThreadRuntimeCore";
|
|
7
6
|
|
|
8
7
|
export type ThreadListAdapter = {
|
|
9
8
|
subscribe(callback: () => void): Unsubscribe;
|
|
10
9
|
};
|
|
11
10
|
|
|
12
11
|
export type LocalThreadData = {
|
|
13
|
-
runtime: LocalThreadRuntimeCore;
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
readonly runtime: LocalThreadRuntimeCore;
|
|
13
|
+
readonly state: "new" | "regular" | "archived";
|
|
14
|
+
readonly threadId: string;
|
|
15
|
+
readonly title?: string | undefined;
|
|
16
|
+
|
|
17
|
+
dispose(): void;
|
|
16
18
|
};
|
|
17
19
|
|
|
18
20
|
export type LocalThreadFactory = (
|
|
19
|
-
threadId: string,
|
|
20
21
|
data: ExportedMessageRepository,
|
|
21
22
|
) => LocalThreadRuntimeCore;
|
|
22
23
|
|
|
23
24
|
export class LocalThreadListRuntimeCore implements ThreadListRuntimeCore {
|
|
24
25
|
private _threadData = new Map<string, LocalThreadData>();
|
|
25
|
-
private
|
|
26
|
-
private
|
|
27
|
-
private
|
|
26
|
+
private _threadIds: readonly string[] = [];
|
|
27
|
+
private _archivedThreadIds: readonly string[] = [];
|
|
28
|
+
private _newThreadId: string | undefined;
|
|
28
29
|
|
|
29
|
-
public get
|
|
30
|
-
return this.
|
|
30
|
+
public get newThreadId() {
|
|
31
|
+
return this._newThreadId;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
|
-
public get
|
|
34
|
-
return this.
|
|
34
|
+
public get threadIds() {
|
|
35
|
+
return this._threadIds;
|
|
35
36
|
}
|
|
36
37
|
|
|
37
|
-
public get
|
|
38
|
-
return this.
|
|
38
|
+
public get archivedThreadIds() {
|
|
39
|
+
return this._archivedThreadIds;
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
private
|
|
42
|
+
private _mainThreadId!: string;
|
|
42
43
|
|
|
43
|
-
public get
|
|
44
|
-
return this.
|
|
44
|
+
public get mainThreadId(): string {
|
|
45
|
+
return this._mainThreadId;
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
constructor(private _threadFactory: LocalThreadFactory) {
|
|
48
49
|
this.switchToNewThread();
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
public
|
|
52
|
-
|
|
52
|
+
public getMainThreadRuntimeCore() {
|
|
53
|
+
const result = this._threadData.get(this._mainThreadId)?.runtime;
|
|
54
|
+
if (!result)
|
|
55
|
+
throw new Error("Main thread not found. This is a bug in assistant-ui.");
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public getItemById(threadId: string) {
|
|
60
|
+
return this._threadData.get(threadId);
|
|
53
61
|
}
|
|
54
62
|
|
|
55
|
-
public switchToThread(threadId: string): Promise<void> {
|
|
56
|
-
if (this.
|
|
57
|
-
return Promise.resolve();
|
|
63
|
+
public async switchToThread(threadId: string): Promise<void> {
|
|
64
|
+
if (this._mainThreadId === threadId) return;
|
|
58
65
|
|
|
59
66
|
const data = this._threadData.get(threadId);
|
|
60
67
|
if (!data) throw new Error("Thread not found");
|
|
61
68
|
|
|
62
|
-
if (data.
|
|
69
|
+
if (data.state === "archived") await this.unarchive(threadId);
|
|
63
70
|
|
|
64
|
-
this.
|
|
65
|
-
this._mainThread = data.runtime;
|
|
71
|
+
this._mainThreadId = data.threadId;
|
|
66
72
|
this._notifySubscribers();
|
|
67
|
-
|
|
68
|
-
data.runtime._notifyEventSubscribers("switched-to");
|
|
69
|
-
return Promise.resolve();
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
public switchToNewThread(): Promise<void> {
|
|
73
|
-
if (this.
|
|
76
|
+
if (this._newThreadId === undefined) {
|
|
74
77
|
let threadId: string;
|
|
75
78
|
do {
|
|
76
79
|
threadId = generateId();
|
|
77
80
|
} while (this._threadData.has(threadId));
|
|
78
81
|
|
|
79
|
-
const runtime = this._threadFactory(
|
|
80
|
-
const dispose = runtime.
|
|
81
|
-
this.
|
|
82
|
-
|
|
82
|
+
const runtime = this._threadFactory({ messages: [] });
|
|
83
|
+
const dispose = runtime.unstable_on("initialize", () => {
|
|
84
|
+
const data = this._threadData.get(threadId);
|
|
85
|
+
if (!data) throw new Error("Thread not found");
|
|
86
|
+
|
|
87
|
+
this._stateOp(threadId, "regular");
|
|
83
88
|
});
|
|
84
|
-
this._threadData.set(threadId, {
|
|
85
|
-
|
|
89
|
+
this._threadData.set(threadId, {
|
|
90
|
+
runtime,
|
|
91
|
+
state: "new",
|
|
92
|
+
threadId,
|
|
93
|
+
dispose,
|
|
94
|
+
});
|
|
95
|
+
this._newThreadId = threadId;
|
|
86
96
|
}
|
|
87
97
|
|
|
88
|
-
this.switchToThread(this.
|
|
98
|
+
this.switchToThread(this._newThreadId);
|
|
89
99
|
return Promise.resolve();
|
|
90
100
|
}
|
|
91
101
|
|
|
92
|
-
private async
|
|
93
|
-
|
|
94
|
-
|
|
102
|
+
private async _stateOp(
|
|
103
|
+
threadId: string,
|
|
104
|
+
newState: "regular" | "archived" | "deleted",
|
|
95
105
|
) {
|
|
96
|
-
const data = this._threadData.get(
|
|
106
|
+
const data = this._threadData.get(threadId);
|
|
97
107
|
if (!data) throw new Error("Thread not found");
|
|
98
|
-
const lastState = data.lastState;
|
|
99
|
-
if (lastState === state && lastThreadId === threadId) return;
|
|
100
108
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
this.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
109
|
+
const { state: lastState } = data;
|
|
110
|
+
if (lastState === newState) return;
|
|
111
|
+
|
|
112
|
+
// lastState
|
|
113
|
+
switch (lastState) {
|
|
114
|
+
case "new":
|
|
115
|
+
this._newThreadId = undefined;
|
|
116
|
+
break;
|
|
117
|
+
case "regular":
|
|
118
|
+
this._threadIds = this._threadIds.filter((t) => t !== threadId);
|
|
119
|
+
break;
|
|
120
|
+
case "archived":
|
|
121
|
+
this._archivedThreadIds = this._archivedThreadIds.filter(
|
|
122
|
+
(t) => t !== threadId,
|
|
114
123
|
);
|
|
115
|
-
|
|
116
|
-
}
|
|
124
|
+
break;
|
|
117
125
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
126
|
+
default: {
|
|
127
|
+
const _exhaustiveCheck: never = lastState;
|
|
128
|
+
throw new Error(`Unsupported state: ${_exhaustiveCheck}`);
|
|
121
129
|
}
|
|
130
|
+
}
|
|
122
131
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
132
|
+
// newState
|
|
133
|
+
switch (newState) {
|
|
134
|
+
case "regular":
|
|
135
|
+
this._threadIds = [...this._threadIds, data.threadId];
|
|
136
|
+
break;
|
|
126
137
|
|
|
127
|
-
|
|
128
|
-
this.
|
|
129
|
-
|
|
130
|
-
);
|
|
131
|
-
}
|
|
138
|
+
case "archived":
|
|
139
|
+
this._archivedThreadIds = [...this._archivedThreadIds, data.threadId];
|
|
140
|
+
break;
|
|
132
141
|
|
|
133
|
-
|
|
134
|
-
if (this._newThread) {
|
|
135
|
-
this.delete(this._newThread);
|
|
136
|
-
}
|
|
137
|
-
this._newThread = threadId;
|
|
138
|
-
}
|
|
139
|
-
if (state === "archived") {
|
|
140
|
-
this._archivedThreads = [
|
|
141
|
-
...this._archivedThreads,
|
|
142
|
-
data.runtime.metadata.threadId,
|
|
143
|
-
];
|
|
144
|
-
}
|
|
145
|
-
if (state === "regular") {
|
|
146
|
-
this._threads = [...this._threads, data.runtime.metadata.threadId];
|
|
147
|
-
}
|
|
148
|
-
if (state === "deleted") {
|
|
149
|
-
data.dispose();
|
|
142
|
+
case "deleted":
|
|
150
143
|
this._threadData.delete(threadId);
|
|
151
|
-
|
|
144
|
+
data.dispose();
|
|
145
|
+
break;
|
|
152
146
|
|
|
153
|
-
|
|
147
|
+
default: {
|
|
148
|
+
const _exhaustiveCheck: never = newState;
|
|
149
|
+
throw new Error(`Unsupported state: ${_exhaustiveCheck}`);
|
|
150
|
+
}
|
|
154
151
|
}
|
|
155
152
|
|
|
156
|
-
|
|
153
|
+
if (newState !== "deleted") {
|
|
154
|
+
this._threadData.set(threadId, {
|
|
155
|
+
...data,
|
|
156
|
+
state: newState,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
157
159
|
|
|
158
160
|
if (
|
|
159
|
-
threadId === this.
|
|
160
|
-
(
|
|
161
|
+
threadId === this._mainThreadId &&
|
|
162
|
+
(newState === "archived" || newState === "deleted")
|
|
161
163
|
) {
|
|
162
|
-
const
|
|
163
|
-
if (
|
|
164
|
-
await this.switchToThread(
|
|
164
|
+
const lastThreadId = this._threadIds[0];
|
|
165
|
+
if (lastThreadId) {
|
|
166
|
+
await this.switchToThread(lastThreadId);
|
|
165
167
|
} else {
|
|
166
168
|
await this.switchToNewThread();
|
|
167
169
|
}
|
|
170
|
+
} else {
|
|
171
|
+
this._notifySubscribers();
|
|
168
172
|
}
|
|
169
173
|
}
|
|
170
174
|
|
|
171
175
|
public rename(threadId: string, newTitle: string): Promise<void> {
|
|
172
176
|
const data = this._threadData.get(threadId);
|
|
173
177
|
if (!data) throw new Error("Thread not found");
|
|
174
|
-
data.runtime.metadata.rename(newTitle);
|
|
175
178
|
|
|
179
|
+
this._threadData.set(threadId, {
|
|
180
|
+
...data,
|
|
181
|
+
title: newTitle,
|
|
182
|
+
});
|
|
183
|
+
this._notifySubscribers();
|
|
176
184
|
return Promise.resolve();
|
|
177
185
|
}
|
|
178
186
|
|
|
179
187
|
public archive(threadId: string): Promise<void> {
|
|
180
188
|
const data = this._threadData.get(threadId);
|
|
181
189
|
if (!data) throw new Error("Thread not found");
|
|
182
|
-
if (data.
|
|
183
|
-
throw new Error("Thread is not yet
|
|
184
|
-
data.runtime.metadata.archive();
|
|
190
|
+
if (data.state !== "regular")
|
|
191
|
+
throw new Error("Thread is not yet initialized or already archived");
|
|
185
192
|
|
|
193
|
+
this._stateOp(threadId, "archived");
|
|
186
194
|
return Promise.resolve();
|
|
187
195
|
}
|
|
188
196
|
|
|
189
197
|
public unarchive(threadId: string): Promise<void> {
|
|
190
198
|
const data = this._threadData.get(threadId);
|
|
191
199
|
if (!data) throw new Error("Thread not found");
|
|
192
|
-
if (data.
|
|
193
|
-
throw new Error("Thread is not archived");
|
|
194
|
-
data.runtime.metadata.unarchive();
|
|
200
|
+
if (data.state !== "archived") throw new Error("Thread is not archived");
|
|
195
201
|
|
|
202
|
+
this._stateOp(threadId, "regular");
|
|
196
203
|
return Promise.resolve();
|
|
197
204
|
}
|
|
198
205
|
|
|
199
206
|
public delete(threadId: string): Promise<void> {
|
|
200
207
|
const data = this._threadData.get(threadId);
|
|
201
208
|
if (!data) throw new Error("Thread not found");
|
|
202
|
-
if (data.
|
|
203
|
-
throw new Error("Thread is not yet
|
|
204
|
-
data.runtime.metadata.delete();
|
|
209
|
+
if (data.state !== "regular" && data.state !== "archived")
|
|
210
|
+
throw new Error("Thread is not yet initalized");
|
|
205
211
|
|
|
212
|
+
this._stateOp(threadId, "deleted");
|
|
206
213
|
return Promise.resolve();
|
|
207
214
|
}
|
|
208
215
|
|