@assistant-ui/core 0.1.14 → 0.1.16
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 +6 -0
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +54 -9
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/adapters/{mention.d.ts → directive-formatter.d.ts} +2 -4
- package/dist/adapters/directive-formatter.d.ts.map +1 -0
- package/dist/adapters/{mention.js → directive-formatter.js} +4 -9
- package/dist/adapters/directive-formatter.js.map +1 -0
- package/dist/adapters/index.d.ts +1 -3
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +2 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/speech.d.ts.map +1 -1
- package/dist/adapters/speech.js +1 -3
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/thread-history.d.ts +1 -0
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/trigger.d.ts +1 -18
- package/dist/adapters/trigger.d.ts.map +1 -1
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/model-context/frame/host.d.ts +1 -1
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +1 -0
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +1 -1
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/provider.js +1 -0
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/registry.d.ts +2 -2
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/tool.d.ts +1 -1
- package/dist/model-context/tool.d.ts.map +1 -1
- package/dist/model-context/types.d.ts +1 -1
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/model-context/types.js +0 -3
- package/dist/model-context/types.js.map +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +1 -1
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.js +14 -0
- package/dist/react/client/DataRenderers.js.map +1 -1
- package/dist/react/client/Tools.d.ts +1 -1
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +1 -0
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.d.ts +1 -1
- package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts +2 -2
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.js +1 -0
- package/dist/react/model-context/useInlineRender.js.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +1 -0
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.js +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.js +1 -1
- package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +7 -1
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageParts.js +60 -44
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js +2 -1
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.js +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.d.ts +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.d.ts +1 -1
- package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/PartByIndexProvider.d.ts +1 -1
- package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.d.ts +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.d.ts +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +4 -2
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +28 -6
- 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 +27 -9
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.js.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +2 -2
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +2 -2
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +4 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.js +10 -0
- package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +6 -0
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/useToolInvocations.d.ts.map +1 -1
- package/dist/react/runtimes/useToolInvocations.js +2 -0
- package/dist/react/runtimes/useToolInvocations.js.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/dataRenderers.d.ts +2 -0
- package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
- package/dist/runtime/api/assistant-runtime.d.ts +1 -1
- package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.d.ts +0 -1
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.js +0 -3
- package/dist/runtime/api/attachment-runtime.js.map +1 -1
- package/dist/runtime/api/bindings.d.ts +1 -0
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +4 -2
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +6 -6
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +4 -2
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +6 -0
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +10 -9
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +4 -3
- 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 +22 -8
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +2 -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 +26 -5
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +2 -0
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +7 -0
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +1 -4
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/utils/auto-status.d.ts +1 -1
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/chat-model-adapter.d.ts +1 -1
- package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtimes/assistant-transport/utils.d.ts +1 -1
- package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
- package/dist/runtimes/assistant-transport/utils.js +1 -1
- package/dist/runtimes/assistant-transport/utils.js.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +8 -0
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +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 +27 -25
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +1 -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 +4 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +2 -2
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +3 -0
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +14 -2
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +2 -2
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +2 -2
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +2 -2
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.js +1 -0
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +1 -0
- package/dist/store/scopes/thread-list-item.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/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +1 -15
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +12 -0
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -0
- package/dist/tests/remote-thread-list-test-helpers.js +48 -0
- package/dist/tests/remote-thread-list-test-helpers.js.map +1 -0
- package/dist/types/directive.d.ts +19 -0
- package/dist/types/directive.d.ts.map +1 -0
- package/dist/types/directive.js +2 -0
- package/dist/types/directive.js.map +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/trigger.d.ts +2 -2
- package/dist/types/trigger.d.ts.map +1 -1
- package/dist/utils/json/is-json.d.ts +1 -1
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/package.json +11 -11
- package/src/adapters/attachment.ts +68 -16
- package/src/adapters/{mention.ts → directive-formatter.ts} +8 -20
- package/src/adapters/index.ts +2 -9
- package/src/adapters/speech.ts +1 -16
- package/src/adapters/thread-history.ts +1 -8
- package/src/adapters/trigger.ts +1 -37
- package/src/index.ts +3 -24
- package/src/model-context/frame/host.ts +6 -5
- package/src/model-context/frame/provider.ts +6 -5
- package/src/model-context/registry.ts +6 -6
- package/src/model-context/tool.ts +1 -1
- package/src/model-context/types.ts +1 -17
- package/src/react/AssistantRuntimeProvider.tsx +1 -1
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +3 -1
- package/src/react/client/DataRenderers.ts +19 -3
- package/src/react/client/Tools.ts +4 -3
- package/src/react/model-context/makeAssistantTool.ts +1 -1
- package/src/react/model-context/makeAssistantToolUI.ts +1 -1
- package/src/react/model-context/useInlineRender.ts +3 -2
- package/src/react/primitives/chainOfThought/ChainOfThoughtParts.tsx +1 -0
- package/src/react/primitives/composer/ComposerAttachments.tsx +7 -1
- package/src/react/primitives/message/MessageAttachments.tsx +7 -1
- package/src/react/primitives/message/MessageParts.tsx +94 -57
- package/src/react/primitives/part/PartMessages.tsx +1 -1
- package/src/react/primitives/thread/ThreadMessages.tsx +3 -2
- package/src/react/primitives/threadList/ThreadListItems.tsx +7 -1
- package/src/react/providers/AttachmentByIndexProvider.tsx +1 -1
- package/src/react/providers/ChainOfThoughtByIndicesProvider.tsx +1 -1
- package/src/react/providers/ChainOfThoughtPartByIndexProvider.tsx +1 -1
- package/src/react/providers/MessageByIndexProvider.tsx +1 -1
- package/src/react/providers/PartByIndexProvider.tsx +1 -1
- package/src/react/providers/QueueItemByIndexProvider.tsx +1 -1
- package/src/react/providers/SuggestionByIndexProvider.tsx +1 -1
- package/src/react/providers/TextMessagePartProvider.tsx +1 -1
- package/src/react/providers/ThreadListItemByIndexProvider.tsx +1 -1
- package/src/react/providers/ThreadListItemRuntimeProvider.tsx +1 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +47 -15
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +31 -17
- package/src/react/runtimes/RuntimeAdapterProvider.tsx +1 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +3 -3
- package/src/react/runtimes/cloud/auiV0.ts +5 -2
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +6 -3
- package/src/react/runtimes/useLocalRuntime.ts +10 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +6 -0
- package/src/react/runtimes/useToolInvocations.ts +2 -0
- package/src/react/types/MessagePartComponentTypes.ts +1 -1
- package/src/react/types/scopes/dataRenderers.ts +2 -0
- package/src/runtime/api/assistant-runtime.ts +1 -1
- package/src/runtime/api/attachment-runtime.ts +0 -4
- package/src/runtime/api/bindings.ts +1 -0
- package/src/runtime/api/composer-runtime.ts +4 -2
- package/src/runtime/api/message-runtime.ts +8 -8
- package/src/runtime/api/thread-list-runtime.ts +14 -5
- package/src/runtime/api/thread-runtime.ts +13 -12
- package/src/runtime/base/base-composer-runtime-core.ts +37 -16
- package/src/runtime/base/base-thread-runtime-core.ts +1 -1
- package/src/runtime/base/default-edit-composer-runtime-core.ts +35 -5
- package/src/runtime/interfaces/thread-list-runtime-core.ts +2 -0
- package/src/runtime/interfaces/thread-runtime-core.ts +7 -0
- package/src/runtime/internal.ts +1 -4
- package/src/runtime/utils/auto-status.ts +1 -1
- package/src/runtime/utils/chat-model-adapter.ts +1 -1
- package/src/runtime/utils/thread-message-like.ts +4 -1
- package/src/runtimes/assistant-transport/utils.ts +5 -1
- package/src/runtimes/external-store/external-store-adapter.ts +8 -0
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +35 -29
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +4 -0
- package/src/runtimes/remote-thread-list/adapter/in-memory.ts +2 -2
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +3 -0
- package/src/runtimes/remote-thread-list/types.ts +14 -2
- package/src/store/runtime-clients/attachment-runtime-client.ts +2 -2
- package/src/store/runtime-clients/composer-runtime-client.ts +2 -2
- package/src/store/runtime-clients/message-part-runtime-client.ts +2 -2
- package/src/store/runtime-clients/message-runtime-client.ts +2 -2
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +1 -1
- package/src/store/runtime-clients/thread-list-runtime-client.ts +4 -3
- package/src/store/runtime-clients/thread-runtime-client.ts +3 -3
- package/src/store/scopes/thread-list-item.ts +1 -0
- package/src/store/scopes/threads.ts +1 -0
- package/src/subscribable/subscribable.ts +1 -24
- package/src/tests/OptimisticState-list-race.test.ts +5 -9
- package/src/tests/RemoteThreadListThreadListRuntimeCore-custom-metadata.test.ts +123 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-reload.test.ts +209 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-switchToThread-dedupe.test.ts +139 -0
- package/src/tests/attachment.test.ts +180 -0
- package/src/tests/base-composer-runtime-core-addAttachment.test.ts +154 -0
- package/src/tests/default-edit-composer-runtime-core.test.ts +312 -0
- package/src/tests/{mention-formatter.test.ts → directive-formatter.test.ts} +26 -1
- package/src/tests/external-store-thread-list-runtime-core.test.ts +212 -0
- package/src/tests/get-thread-state-isRunning.test.ts +93 -0
- package/src/tests/remote-thread-list-isLoading.test.ts +6 -10
- package/src/tests/remote-thread-list-test-helpers.ts +70 -0
- package/src/tests/thread-list-runtime-getLoadThreadsPromise.test.ts +17 -1
- package/src/types/directive.ts +19 -0
- package/src/types/index.ts +1 -3
- package/src/types/message.ts +0 -12
- package/src/types/trigger.ts +2 -10
- package/src/utils/json/is-json.ts +1 -1
- package/dist/adapters/mention.d.ts.map +0 -1
- package/dist/adapters/mention.js.map +0 -1
- package/dist/types/mention.d.ts +0 -21
- package/dist/types/mention.d.ts.map +0 -1
- package/dist/types/mention.js +0 -2
- package/dist/types/mention.js.map +0 -1
- package/src/types/mention.ts +0 -39
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { CompleteAttachment } from "../../../types/attachment";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
type ComponentType,
|
|
4
|
+
type FC,
|
|
5
|
+
type ReactNode,
|
|
6
|
+
memo,
|
|
7
|
+
useMemo,
|
|
8
|
+
} from "react";
|
|
3
9
|
import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
|
|
4
10
|
import { MessageAttachmentByIndexProvider } from "../../providers/AttachmentByIndexProvider";
|
|
5
11
|
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
type FC,
|
|
4
4
|
type ReactNode,
|
|
5
5
|
memo,
|
|
6
|
-
PropsWithChildren,
|
|
6
|
+
type PropsWithChildren,
|
|
7
7
|
useMemo,
|
|
8
8
|
} from "react";
|
|
9
9
|
import {
|
|
@@ -32,6 +32,7 @@ import type {
|
|
|
32
32
|
QuoteMessagePartComponent,
|
|
33
33
|
} from "../../types/MessagePartComponentTypes";
|
|
34
34
|
import type { MessagePartStatus } from "../../../types/message";
|
|
35
|
+
import type { DataRenderersState } from "../../types/scopes/dataRenderers";
|
|
35
36
|
import { useShallow } from "zustand/shallow";
|
|
36
37
|
|
|
37
38
|
type MessagePartRange =
|
|
@@ -284,17 +285,25 @@ const ToolUIDisplay = ({
|
|
|
284
285
|
return <Render {...props} />;
|
|
285
286
|
};
|
|
286
287
|
|
|
288
|
+
const getDataRenderer = (
|
|
289
|
+
dataRenderers: DataRenderersState,
|
|
290
|
+
name: string,
|
|
291
|
+
inlineFallback: DataMessagePartComponent | undefined,
|
|
292
|
+
): DataMessagePartComponent | undefined => {
|
|
293
|
+
const named = dataRenderers.renderers[name]?.[0];
|
|
294
|
+
if (named) return named;
|
|
295
|
+
return dataRenderers.fallbacks[0] ?? inlineFallback;
|
|
296
|
+
};
|
|
297
|
+
|
|
287
298
|
const DataUIDisplay = ({
|
|
288
299
|
Fallback,
|
|
289
300
|
...props
|
|
290
301
|
}: {
|
|
291
302
|
Fallback: DataMessagePartComponent | undefined;
|
|
292
303
|
} & DataMessagePartProps) => {
|
|
293
|
-
const Render = useAuiState((s) =>
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
return Render;
|
|
297
|
-
});
|
|
304
|
+
const Render = useAuiState((s) =>
|
|
305
|
+
getDataRenderer(s.dataRenderers, props.name, Fallback),
|
|
306
|
+
);
|
|
298
307
|
if (!Render) return null;
|
|
299
308
|
return <Render {...props} />;
|
|
300
309
|
};
|
|
@@ -433,6 +442,10 @@ const COMPLETE_STATUS: MessagePartStatus = Object.freeze({
|
|
|
433
442
|
type: "complete",
|
|
434
443
|
});
|
|
435
444
|
|
|
445
|
+
const RUNNING_STATUS: MessagePartStatus = Object.freeze({
|
|
446
|
+
type: "running",
|
|
447
|
+
});
|
|
448
|
+
|
|
436
449
|
const EmptyPartsImpl: FC<MessagePartComponentProps> = ({ components }) => {
|
|
437
450
|
const status = useAuiState(
|
|
438
451
|
(s) => (s.message.status ?? COMPLETE_STATUS) as MessagePartStatus,
|
|
@@ -522,12 +535,11 @@ const RegisteredToolUI: FC = () => {
|
|
|
522
535
|
*/
|
|
523
536
|
const RegisteredDataRendererUI: FC = () => {
|
|
524
537
|
const part = useAuiState((s) => s.part);
|
|
525
|
-
const Render = useAuiState((s) =>
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
});
|
|
538
|
+
const Render = useAuiState((s) =>
|
|
539
|
+
s.part.type === "data"
|
|
540
|
+
? (getDataRenderer(s.dataRenderers, s.part.name, undefined) ?? null)
|
|
541
|
+
: null,
|
|
542
|
+
);
|
|
531
543
|
|
|
532
544
|
if (!Render || part.type !== "data") return null;
|
|
533
545
|
|
|
@@ -563,6 +575,12 @@ export type { PartState };
|
|
|
563
575
|
*
|
|
564
576
|
* For tool-call parts, adds `toolUI`, `addResult`, and `resume`.
|
|
565
577
|
* For data parts, adds `dataRendererUI`.
|
|
578
|
+
*
|
|
579
|
+
* The render function is also invoked once with a synthetic empty text part
|
|
580
|
+
* (`{ type: "text", text: "", status: { type: "running" } }`) when the
|
|
581
|
+
* assistant message has no parts yet but is in the running state, so a
|
|
582
|
+
* loading indicator can render. Differentiate this from a real empty text
|
|
583
|
+
* via `part.status?.type === "running" && part.text === ""`.
|
|
566
584
|
*/
|
|
567
585
|
export type EnrichedPartState =
|
|
568
586
|
| (Extract<PartState, { type: "tool-call" }> & {
|
|
@@ -579,58 +597,77 @@ export type EnrichedPartState =
|
|
|
579
597
|
})
|
|
580
598
|
| Exclude<PartState, { type: "tool-call" } | { type: "data" }>;
|
|
581
599
|
|
|
600
|
+
const EMPTY_RUNNING_TEXT_PART: Extract<EnrichedPartState, { type: "text" }> =
|
|
601
|
+
Object.freeze({
|
|
602
|
+
type: "text",
|
|
603
|
+
text: "",
|
|
604
|
+
status: RUNNING_STATUS,
|
|
605
|
+
});
|
|
606
|
+
|
|
582
607
|
const MessagePrimitivePartsInner: FC<{
|
|
583
608
|
children: (value: { part: EnrichedPartState }) => ReactNode;
|
|
584
609
|
}> = ({ children }) => {
|
|
585
610
|
const aui = useAui();
|
|
586
611
|
const contentLength = useAuiState((s) => s.message.parts.length);
|
|
612
|
+
const isRunning = useAuiState(
|
|
613
|
+
(s) => (s.message.status?.type ?? "complete") === "running",
|
|
614
|
+
);
|
|
615
|
+
const isEmptyRunning = contentLength === 0 && isRunning;
|
|
616
|
+
// Subscribed (not snapshotted like `tools`) so fallbacks registered after
|
|
617
|
+
// the first render trigger a re-render and `hasUI` re-evaluates.
|
|
618
|
+
const dataRenderers = useAuiState((s) => s.dataRenderers);
|
|
587
619
|
|
|
588
620
|
// biome-ignore lint/correctness/useExhaustiveDependencies: aui accessors are stable refs
|
|
589
|
-
return useMemo(
|
|
590
|
-
()
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
621
|
+
return useMemo(() => {
|
|
622
|
+
if (contentLength === 0) {
|
|
623
|
+
if (!isEmptyRunning) return null;
|
|
624
|
+
|
|
625
|
+
return (
|
|
626
|
+
<TextMessagePartProvider text="" isRunning>
|
|
627
|
+
{children({ part: EMPTY_RUNNING_TEXT_PART })}
|
|
628
|
+
</TextMessagePartProvider>
|
|
629
|
+
);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
return Array.from({ length: contentLength }, (_, index) => (
|
|
633
|
+
<PartByIndexProvider key={index} index={index}>
|
|
634
|
+
<RenderChildrenWithAccessor
|
|
635
|
+
getItemState={(aui) => aui.message().part({ index }).getState()}
|
|
636
|
+
>
|
|
637
|
+
{(getItem) => {
|
|
638
|
+
const result = children({
|
|
639
|
+
get part() {
|
|
640
|
+
const state = getItem();
|
|
641
|
+
if (state.type === "tool-call") {
|
|
642
|
+
const entry = aui.tools().getState().tools[state.toolName];
|
|
643
|
+
const hasUI = Array.isArray(entry) ? !!entry[0] : !!entry;
|
|
644
|
+
const partMethods = aui.message().part({ index });
|
|
645
|
+
return {
|
|
646
|
+
...state,
|
|
647
|
+
toolUI: hasUI ? <RegisteredToolUI /> : null,
|
|
648
|
+
addResult: partMethods.addToolResult,
|
|
649
|
+
resume: partMethods.resumeToolCall,
|
|
650
|
+
};
|
|
651
|
+
}
|
|
652
|
+
if (state.type === "data") {
|
|
653
|
+
const hasUI =
|
|
654
|
+
getDataRenderer(dataRenderers, state.name, undefined) !==
|
|
655
|
+
undefined;
|
|
656
|
+
return {
|
|
657
|
+
...state,
|
|
658
|
+
dataRendererUI: hasUI ? <RegisteredDataRendererUI /> : null,
|
|
659
|
+
};
|
|
660
|
+
}
|
|
661
|
+
return state;
|
|
662
|
+
},
|
|
663
|
+
});
|
|
664
|
+
if (result !== null) return result;
|
|
665
|
+
return <DefaultPartFallback />;
|
|
666
|
+
}}
|
|
667
|
+
</RenderChildrenWithAccessor>
|
|
668
|
+
</PartByIndexProvider>
|
|
669
|
+
));
|
|
670
|
+
}, [contentLength, children, isEmptyRunning, dataRenderers]);
|
|
634
671
|
};
|
|
635
672
|
|
|
636
673
|
/**
|
|
@@ -3,7 +3,7 @@ import { useAuiState } from "@assistant-ui/store";
|
|
|
3
3
|
import type { ThreadMessage } from "../../../types/message";
|
|
4
4
|
import { ReadonlyThreadProvider } from "../../providers/ReadonlyThreadProvider";
|
|
5
5
|
import {
|
|
6
|
-
ThreadPrimitiveMessages,
|
|
6
|
+
type ThreadPrimitiveMessages,
|
|
7
7
|
ThreadPrimitiveMessagesImpl,
|
|
8
8
|
} from "../thread/ThreadMessages";
|
|
9
9
|
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "react";
|
|
8
8
|
import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
|
|
9
9
|
import { MessageByIndexProvider } from "../../providers/MessageByIndexProvider";
|
|
10
|
-
import { MessageState } from "../../../store";
|
|
10
|
+
import type { MessageState } from "../../../store";
|
|
11
11
|
|
|
12
12
|
type MessagesComponentConfig =
|
|
13
13
|
| {
|
|
@@ -124,9 +124,10 @@ const getComponent = (
|
|
|
124
124
|
DEFAULT_SYSTEM_MESSAGE
|
|
125
125
|
);
|
|
126
126
|
}
|
|
127
|
-
default:
|
|
127
|
+
default: {
|
|
128
128
|
const _exhaustiveCheck: never = role;
|
|
129
129
|
throw new Error(`Unknown message role: ${_exhaustiveCheck}`);
|
|
130
|
+
}
|
|
130
131
|
}
|
|
131
132
|
};
|
|
132
133
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type ComponentType,
|
|
3
|
+
type FC,
|
|
4
|
+
type ReactNode,
|
|
5
|
+
memo,
|
|
6
|
+
useMemo,
|
|
7
|
+
} from "react";
|
|
2
8
|
import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
|
|
3
9
|
import type { ThreadListItemState } from "../../../store/scopes/thread-list-item";
|
|
4
10
|
import { ThreadListItemByIndexProvider } from "../../providers/ThreadListItemByIndexProvider";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { FC, PropsWithChildren } from "react";
|
|
2
2
|
import { useAui, useAuiState, AuiProvider } from "@assistant-ui/store";
|
|
3
3
|
import { ChainOfThoughtClient } from "../../store/clients/chain-of-thought-client";
|
|
4
4
|
import type { ChainOfThoughtPart } from "../../store/scopes/chain-of-thought";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { FC, PropsWithChildren } from "react";
|
|
2
2
|
import { useAui, AuiProvider, type ClientOutput } from "@assistant-ui/store";
|
|
3
3
|
import type { PartState } from "../../store/scopes/part";
|
|
4
4
|
import { resource, tapMemo } from "@assistant-ui/tap";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { FC, PropsWithChildren } from "react";
|
|
2
2
|
import { useAui, AuiProvider } from "@assistant-ui/store";
|
|
3
3
|
import type { ThreadListItemRuntime } from "../..";
|
|
4
4
|
import { ThreadListItemClient } from "../../store/internal";
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
|
-
FC,
|
|
2
|
+
type FC,
|
|
3
|
+
type RefObject,
|
|
3
4
|
useCallback,
|
|
4
5
|
useRef,
|
|
5
6
|
useEffect,
|
|
7
|
+
useLayoutEffect,
|
|
6
8
|
memo,
|
|
7
|
-
PropsWithChildren,
|
|
8
|
-
ComponentType,
|
|
9
|
+
type PropsWithChildren,
|
|
10
|
+
type ComponentType,
|
|
9
11
|
useMemo,
|
|
12
|
+
Fragment,
|
|
10
13
|
} from "react";
|
|
11
|
-
import { UseBoundStore, StoreApi, create } from "zustand";
|
|
14
|
+
import { type UseBoundStore, type StoreApi, create } from "zustand";
|
|
12
15
|
import { useAui } from "@assistant-ui/store";
|
|
13
16
|
import { ThreadListItemRuntimeProvider } from "../providers/ThreadListItemRuntimeProvider";
|
|
14
17
|
import type { ThreadRuntimeCore } from "../../runtime/interfaces/thread-runtime-core";
|
|
15
18
|
import type { ThreadListRuntimeCore } from "../../runtime/interfaces/thread-list-runtime-core";
|
|
16
19
|
import type { AssistantRuntime } from "../../runtime/api/assistant-runtime";
|
|
17
20
|
import { BaseSubscribable } from "../../subscribable/subscribable";
|
|
18
|
-
import { ThreadRuntimeImpl } from "../../runtime/api/thread-runtime";
|
|
21
|
+
import type { ThreadRuntimeImpl } from "../../runtime/api/thread-runtime";
|
|
19
22
|
import { ThreadListRuntimeImpl } from "../../runtime/api/thread-list-runtime";
|
|
20
23
|
|
|
21
24
|
type RemoteThreadListHook = () => AssistantRuntime;
|
|
@@ -23,6 +26,15 @@ type RemoteThreadListHook = () => AssistantRuntime;
|
|
|
23
26
|
type RemoteThreadListHookInstance = {
|
|
24
27
|
runtime?: ThreadRuntimeCore;
|
|
25
28
|
};
|
|
29
|
+
|
|
30
|
+
const ProviderRenderDetector: FC<{
|
|
31
|
+
detectorRef: RefObject<boolean>;
|
|
32
|
+
}> = ({ detectorRef }) => {
|
|
33
|
+
useLayoutEffect(() => {
|
|
34
|
+
detectorRef.current = true;
|
|
35
|
+
}, [detectorRef]);
|
|
36
|
+
return null;
|
|
37
|
+
};
|
|
26
38
|
export class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
|
27
39
|
private useRuntimeHook: UseBoundStore<
|
|
28
40
|
StoreApi<{ useRuntime: RemoteThreadListHook }>
|
|
@@ -82,9 +94,11 @@ export class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
|
|
82
94
|
}
|
|
83
95
|
}
|
|
84
96
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
97
|
+
// Rendered outside the user's Provider so deferred `children` cannot strand the binding.
|
|
98
|
+
private _RuntimeBinder: FC<PropsWithChildren<{ threadId: string }>> = ({
|
|
99
|
+
threadId,
|
|
100
|
+
children,
|
|
101
|
+
}) => {
|
|
88
102
|
const { useRuntime } = this.useRuntimeHook();
|
|
89
103
|
const runtime = useRuntime();
|
|
90
104
|
|
|
@@ -116,9 +130,8 @@ export class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
|
|
116
130
|
|
|
117
131
|
useEffect(() => {
|
|
118
132
|
const runtimeCore = threadBinding.getState();
|
|
119
|
-
const setGetInitializePromise = (runtimeCore as Record<string, unknown>)
|
|
120
|
-
|
|
121
|
-
];
|
|
133
|
+
const setGetInitializePromise = (runtimeCore as Record<string, unknown>)
|
|
134
|
+
.__internal_setGetInitializePromise;
|
|
122
135
|
if (typeof setGetInitializePromise === "function") {
|
|
123
136
|
setGetInitializePromise.call(runtimeCore, () => initPromiseRef.current);
|
|
124
137
|
}
|
|
@@ -139,7 +152,7 @@ export class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
|
|
139
152
|
});
|
|
140
153
|
}, [runtime, aui]);
|
|
141
154
|
|
|
142
|
-
return
|
|
155
|
+
return <>{children}</>;
|
|
143
156
|
};
|
|
144
157
|
|
|
145
158
|
private _OuterActiveThreadProvider: FC<{
|
|
@@ -151,11 +164,30 @@ export class RemoteThreadListHookInstanceManager extends BaseSubscribable {
|
|
|
151
164
|
[threadId],
|
|
152
165
|
);
|
|
153
166
|
|
|
167
|
+
const detectorRef = useRef(false);
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
if (process.env.NODE_ENV !== "production" && Provider !== Fragment) {
|
|
170
|
+
const id = setTimeout(() => {
|
|
171
|
+
if (!detectorRef.current) {
|
|
172
|
+
console.warn(
|
|
173
|
+
"RemoteThreadListAdapter.unstable_Provider did not render its `children` synchronously. " +
|
|
174
|
+
"Render `children` on first commit; deferring them behind a loading state, Suspense boundary, " +
|
|
175
|
+
"or `useEffect` gate leaves thread context unavailable to downstream consumers.",
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
}, 100);
|
|
179
|
+
return () => clearTimeout(id);
|
|
180
|
+
}
|
|
181
|
+
return undefined;
|
|
182
|
+
}, [Provider]);
|
|
183
|
+
|
|
154
184
|
return (
|
|
155
185
|
<ThreadListItemRuntimeProvider runtime={runtime}>
|
|
156
|
-
<
|
|
157
|
-
<
|
|
158
|
-
|
|
186
|
+
<this._RuntimeBinder threadId={threadId}>
|
|
187
|
+
<Provider>
|
|
188
|
+
<ProviderRenderDetector detectorRef={detectorRef} />
|
|
189
|
+
</Provider>
|
|
190
|
+
</this._RuntimeBinder>
|
|
159
191
|
</ThreadListItemRuntimeProvider>
|
|
160
192
|
);
|
|
161
193
|
});
|
|
@@ -15,14 +15,7 @@ import {
|
|
|
15
15
|
} from "../../runtimes/remote-thread-list/remote-thread-state";
|
|
16
16
|
import type { RemoteThreadListOptions } from "../../runtimes/remote-thread-list/types";
|
|
17
17
|
import { RemoteThreadListHookInstanceManager } from "./RemoteThreadListHookInstanceManager";
|
|
18
|
-
import {
|
|
19
|
-
ComponentType,
|
|
20
|
-
FC,
|
|
21
|
-
Fragment,
|
|
22
|
-
PropsWithChildren,
|
|
23
|
-
useEffect,
|
|
24
|
-
useId,
|
|
25
|
-
} from "react";
|
|
18
|
+
import { type FC, Fragment, useEffect, useId } from "react";
|
|
26
19
|
import { create } from "zustand";
|
|
27
20
|
import { AssistantMessageStream } from "assistant-stream";
|
|
28
21
|
import type { ModelContextProvider } from "../../model-context/types";
|
|
@@ -36,6 +29,7 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
36
29
|
private readonly _hookManager: RemoteThreadListHookInstanceManager;
|
|
37
30
|
|
|
38
31
|
private _loadThreadsPromise: Promise<void> | undefined;
|
|
32
|
+
private _loadGeneration = 0;
|
|
39
33
|
|
|
40
34
|
private _mainThreadId!: string;
|
|
41
35
|
private readonly _state = new OptimisticState<RemoteThreadState>({
|
|
@@ -54,6 +48,7 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
54
48
|
public getLoadThreadsPromise() {
|
|
55
49
|
// TODO this needs to be cached in case this promise is loaded during suspense
|
|
56
50
|
if (!this._loadThreadsPromise) {
|
|
51
|
+
const generation = this._loadGeneration;
|
|
57
52
|
this._loadThreadsPromise = this._state
|
|
58
53
|
.optimisticUpdate({
|
|
59
54
|
execute: () => this._options.adapter.list(),
|
|
@@ -63,7 +58,9 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
63
58
|
isLoading: true,
|
|
64
59
|
};
|
|
65
60
|
},
|
|
61
|
+
// biome-ignore lint/suspicious/noThenProperty: OptimisticState reducer pattern
|
|
66
62
|
then: (state, l) => {
|
|
63
|
+
if (generation !== this._loadGeneration) return state;
|
|
67
64
|
const newThreadIds = [];
|
|
68
65
|
const newArchivedThreadIds = [];
|
|
69
66
|
const newThreadIdMap = {} as Record<string, THREAD_MAPPING_ID>;
|
|
@@ -94,6 +91,7 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
94
91
|
externalId: thread.externalId,
|
|
95
92
|
status: thread.status,
|
|
96
93
|
title: thread.title,
|
|
94
|
+
custom: thread.custom,
|
|
97
95
|
initializeTask: Promise.resolve({
|
|
98
96
|
remoteId: thread.remoteId,
|
|
99
97
|
externalId: thread.externalId,
|
|
@@ -118,6 +116,7 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
118
116
|
},
|
|
119
117
|
})
|
|
120
118
|
.catch(() => {
|
|
119
|
+
if (generation !== this._loadGeneration) return;
|
|
121
120
|
this._loadThreadsPromise = undefined;
|
|
122
121
|
this._state.update({
|
|
123
122
|
...this._state.baseValue,
|
|
@@ -145,8 +144,7 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
145
144
|
this,
|
|
146
145
|
);
|
|
147
146
|
this.useProvider = create(() => ({
|
|
148
|
-
Provider:
|
|
149
|
-
Fragment) as ComponentType<PropsWithChildren>,
|
|
147
|
+
Provider: options.adapter.unstable_Provider ?? Fragment,
|
|
150
148
|
}));
|
|
151
149
|
this.__internal_setOptions(options);
|
|
152
150
|
this.switchToNewThread();
|
|
@@ -160,8 +158,7 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
160
158
|
|
|
161
159
|
this._options = options;
|
|
162
160
|
|
|
163
|
-
const Provider =
|
|
164
|
-
Fragment) as ComponentType<PropsWithChildren>;
|
|
161
|
+
const Provider = options.adapter.unstable_Provider ?? Fragment;
|
|
165
162
|
if (Provider !== this.useProvider.getState().Provider) {
|
|
166
163
|
this.useProvider.setState({ Provider }, true);
|
|
167
164
|
}
|
|
@@ -179,6 +176,12 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
179
176
|
}
|
|
180
177
|
}
|
|
181
178
|
|
|
179
|
+
public reload() {
|
|
180
|
+
this._loadGeneration++;
|
|
181
|
+
this._loadThreadsPromise = undefined;
|
|
182
|
+
return this.getLoadThreadsPromise();
|
|
183
|
+
}
|
|
184
|
+
|
|
182
185
|
public get isLoading() {
|
|
183
186
|
return this._state.value.isLoading;
|
|
184
187
|
}
|
|
@@ -239,6 +242,7 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
239
242
|
externalId: remoteMetadata.externalId,
|
|
240
243
|
status: remoteMetadata.status,
|
|
241
244
|
title: remoteMetadata.title,
|
|
245
|
+
custom: remoteMetadata.custom,
|
|
242
246
|
} as RemoteThreadData,
|
|
243
247
|
};
|
|
244
248
|
|
|
@@ -247,15 +251,23 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
247
251
|
[remoteMetadata.remoteId]: mappingId,
|
|
248
252
|
};
|
|
249
253
|
|
|
254
|
+
// Filter both arrays first so a concurrent `list()` can't leave the id
|
|
255
|
+
// duplicated or under the wrong status.
|
|
256
|
+
const threadIdsWithoutRemote = state.threadIds.filter(
|
|
257
|
+
(id) => id !== remoteMetadata.remoteId,
|
|
258
|
+
);
|
|
259
|
+
const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(
|
|
260
|
+
(id) => id !== remoteMetadata.remoteId,
|
|
261
|
+
);
|
|
262
|
+
|
|
250
263
|
const newThreadIds =
|
|
251
264
|
remoteMetadata.status === "regular"
|
|
252
|
-
? [...
|
|
253
|
-
:
|
|
254
|
-
|
|
265
|
+
? [...threadIdsWithoutRemote, remoteMetadata.remoteId]
|
|
266
|
+
: threadIdsWithoutRemote;
|
|
255
267
|
const newArchivedThreadIds =
|
|
256
268
|
remoteMetadata.status === "archived"
|
|
257
|
-
? [...
|
|
258
|
-
:
|
|
269
|
+
? [...archivedThreadIdsWithoutRemote, remoteMetadata.remoteId]
|
|
270
|
+
: archivedThreadIdsWithoutRemote;
|
|
259
271
|
|
|
260
272
|
this._state.update({
|
|
261
273
|
...state,
|
|
@@ -316,6 +328,7 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
316
328
|
remoteId: undefined,
|
|
317
329
|
externalId: undefined,
|
|
318
330
|
title: undefined,
|
|
331
|
+
custom: undefined,
|
|
319
332
|
} satisfies RemoteThreadData,
|
|
320
333
|
},
|
|
321
334
|
});
|
|
@@ -352,6 +365,7 @@ export class RemoteThreadListThreadListRuntimeCore
|
|
|
352
365
|
},
|
|
353
366
|
};
|
|
354
367
|
},
|
|
368
|
+
// biome-ignore lint/suspicious/noThenProperty: OptimisticState reducer pattern
|
|
355
369
|
then: (state, { remoteId, externalId }) => {
|
|
356
370
|
const data = getThreadData(state, threadId);
|
|
357
371
|
if (!data) return state;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createContext, FC, ReactNode, useContext } from "react";
|
|
1
|
+
import { createContext, type FC, type ReactNode, useContext } from "react";
|
|
2
2
|
import type { ThreadHistoryAdapter } from "../../adapters/thread-history";
|
|
3
3
|
import type { AttachmentAdapter } from "../../adapters/attachment";
|
|
4
4
|
import type { ModelContextProvider } from "../../model-context/types";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RefObject, useState } from "react";
|
|
1
|
+
import { type RefObject, useState } from "react";
|
|
2
2
|
import type {
|
|
3
3
|
GenericThreadHistoryAdapter,
|
|
4
4
|
ThreadHistoryAdapter,
|
|
@@ -8,12 +8,12 @@ import type {
|
|
|
8
8
|
} from "../../../adapters/thread-history";
|
|
9
9
|
import type { ExportedMessageRepositoryItem } from "../../../runtime/utils/message-repository";
|
|
10
10
|
import {
|
|
11
|
-
AssistantCloud,
|
|
11
|
+
type AssistantCloud,
|
|
12
12
|
CloudMessagePersistence,
|
|
13
13
|
createFormattedPersistence,
|
|
14
14
|
} from "assistant-cloud";
|
|
15
15
|
import { auiV0Decode, auiV0Encode } from "./auiV0";
|
|
16
|
-
import { AssistantClient, useAui } from "@assistant-ui/store";
|
|
16
|
+
import { type AssistantClient, useAui } from "@assistant-ui/store";
|
|
17
17
|
import type { ThreadListItemMethods } from "../../../store/scopes/thread-list-item";
|
|
18
18
|
|
|
19
19
|
const globalPersistence = new WeakMap<
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { MessageStatus, ThreadMessage } from "../../../types/message";
|
|
2
2
|
import { fromThreadMessageLike } from "../../../runtime/utils/thread-message-like";
|
|
3
|
-
import { CloudMessage } from "assistant-cloud";
|
|
3
|
+
import type { CloudMessage } from "assistant-cloud";
|
|
4
4
|
import { isJSONValue } from "../../../utils/json/is-json";
|
|
5
|
-
import {
|
|
5
|
+
import type {
|
|
6
|
+
ReadonlyJSONObject,
|
|
7
|
+
ReadonlyJSONValue,
|
|
8
|
+
} from "assistant-stream/utils";
|
|
6
9
|
import type { ExportedMessageRepositoryItem } from "../../../runtime/utils/message-repository";
|
|
7
10
|
|
|
8
11
|
type AuiV0MessagePart =
|